我遇到了其他 tex 问题,人们询问如何用逗号分隔格式表示数字。即将 1234567 写成 1,234,567。我在教孩子加减法时需要这个。我正在尝试生成随机的加法问题列表,这变得越来越难。我基本上想运行代码并生成 30 天的日常问题集,这变得越来越难。虽然我可以随时为自己的孩子调整它,但还有其他孩子参与其中,他们没有机会接触到我。所以,这取决于父母。长话短说,这是我面临的挑战:
先前给出的该问题的解决方案有两个问题:
许多在数学模式下工作得不够好!
(这是我的主要问题)我想做这样的事情(使用 numprint 包作为失败的示例):
$\numprint{\sage{12454785*34}}$
正如您所猜测的,这不起作用,因为\numprint
读取字符串时它不会起作用,并且它对\sage{...}
内部来说不是一个好兆头!我想过定义自己的 sage 函数,然后使用它,\sagestr{}
但它提供了一个临时解决方案,因为我稍后将使用同一组文件来生成一些在线内容,这不是一个好兆头\sagestr
(另一个故事!)。
答案1
仅是一些想法而不是答案:
- 我个人会避免使用 sage。LaTeX 可以自行进行计算(至少使用 expl3 时可以)。
- 你不应该重新发明轮子。
\numprint
无论如何,你的 都会比 的siunitx
差\num
。 - 更新:正如 Mico 在下面的评论中提到的那样,你可以考虑采用以下解决方案之一这个问题。与我的以下代码片段结合,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 的一个优势是它基于 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}
有关创建逗号的命令的信息是这里。