\sage{} から LaTeX 数式モードに入力されるコンマ区切りの数値表現

\sage{} から LaTeX 数式モードに入力されるコンマ区切りの数値表現

他にも、数値をコンマ区切り形式で表す方法を尋ねる TEX の質問に遭遇しました。これは、1234567 を 1,234,567 と書くことです。子供に足し算と引き算を教えているときにこれが必要です。私は、毎日難しくなる足し算の問題のランダム リストを生成しようとしています。基本的に、コードを実行して、たとえば 30 日分の毎日の問題セットを生成したいのですが、これは進むにつれて難しくなります。外出先で自分の子供用に微調整することはできますが、他の子供が関与しており、彼らが私にアクセスする機会はありません。したがって、親の責任です。簡単に言うと、これが私が抱えている課題です。

この問題に対するこれまでに示した解決策には、次の 2 つの問題があります。

  1. 多くは数学モードでは十分に機能しません。

  2. (そしてこれが私の主な問題です) 私は次のようなことをしたいと思います (失敗例として numprint パッケージを使用): $\numprint{\sage{12454785*34}}$

ご想像のとおり、これは\numprint文字列を読み取るため機能せず、 内ではうまく機能しません\sage{...}。独自の sage 関数を定義して を使用することも考えましたが、\sagestr{}これは一時的な解決策にすぎません。後で同じファイル セットを使用して、 内ではうまく機能しないオンライン コンテンツを生成するためです\sagestr(別の話です)。

答え1

答えというよりは、ただの考えです。

  • 個人的には、sage は避けます。LaTeX は独自に計算を実行できます (少なくとも expl3 を使用)。
  • 車輪の再発明はすべきではありません。\numprintいずれにせよ、siunitxあなたのは のものより劣るものになるでしょう\num
  • 更新:Micoさんがあなたの質問のコメント欄で述べたように、以下の解決策の1つを採用することを検討することができます。この質問. 次のコード スニペットと組み合わせると、egreg のバージョンが適合します。

\numberfromcalcこれは、数式を計算し、数式モードであるかどうかに関係なくフォーマットされた結果を出力するマクロの非常に単純なアプローチです。

\documentclass{article}

\usepackage{siunitx}

\ExplSyntaxOn
\NewDocumentCommand { \numberfromcalc } { m }
    {
        \int_set:Nn \l_tmpa_int { #1 }
        \num[group-separator={,}]{\int_use:N \l_tmpa_int}
    }
\ExplSyntaxOff

\begin{document}
    \noindent\numberfromcalc{12454785*34}\\
    $\numberfromcalc{12454785*34}$
\end{document}

数字

コードを投稿していないので、ここでランダムなリストを生成しようとはしませんが、それもそれほど難しいことではありません。前述したように、これは単なるスターターです。

答え2

Sage を使用する利点の 1 つは、Python で構築されていることです。そのため、長くて読みにくいコードを使わずに、多くの組み込み機能を利用できます。この場合、Sage で数値を文字列に変更し、LaTeX に移動する前にカンマを挿入します。

\documentclass{article}
\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
a = Integer(randint(1000,10000))
b = Integer(randint(1000,10000))
\end{sagesilent}
\noindent What's $\sagestr{"{0:12,.0f}".format(a)} \times \sagestr{"{0:12,.0f}".format(b)}$?\\
Answer: $\sagestr{"{0:12,.0f}".format(a*b)}$
\end{document}

CoCalc で実行される出力は次のようになります。 ここに画像の説明を入力してください

カンマを作成するコマンドに関する情報はここ

関連情報