以逗号分隔的数字表示形式从 \sage{} 提供给 latex 数学模式

以逗号分隔的数字表示形式从 \sage{} 提供给 latex 数学模式

我遇到了其他 tex 问题,人们询问如何用逗号分隔格式表示数字。即将 1234567 写成 1,234,567。我在教孩子加减法时需要这个。我正在尝试生成随机的加法问题列表,这变得越来越难。我基本上想运行代码并生成 30 天的日常问题集,这变得越来越难。虽然我可以随时为自己的孩子调整它,但还有其他孩子参与其中,他们没有机会接触到我。所以,这取决于父母。长话短说,这是我面临的挑战:

先前给出的该问题的解决方案有两个问题:

  1. 许多在数学模式下工作得不够好!

  2. (这是我的主要问题)我想做这样的事情(使用 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}

CoCalc 中运行的输出如下所示: 在此处输入图片描述

有关创建逗号的命令的信息是这里

相关内容