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