逗號分隔的數字表示形式從 \sage{} 饋送到乳膠數學模式

逗號分隔的數字表示形式從 \sage{} 饋送到乳膠數學模式

我遇到了其他 tex 問題,人們詢問如何以逗號分隔格式表示數字。即 1234567 寫成 1,234,567。我在教我的孩子加法/減法時需要這個。我正在嘗試生成加法問題的隨機列表,這些問題一天天變得越來越難。我基本上想運行程式碼並產生相當於 30 天的每日問題集,隨著我們的進展,問題集會變得越來越難。雖然我可以隨時隨地為我自己的孩子調整它,但還有其他孩子參與其中,他們將沒有機會訪問我。所以,還是父母的事。長話短說,這是我面臨的挑戰:

先前針對此問題給出的解決方案有兩個問題:

  1. 許多在數學模式下表現得不夠好!

  2. (這是我的主要問題)我想做這樣的事情(使用 numprint 套件作為失敗的例子): $\numprint{\sage{12454785*34}}$

正如您所猜測的,這在讀取字串時不起作用\numprint,並且在內部並不是一個好兆頭\sage{...}!我想過定義自己的 sage 函數,然後使用\sagestr{},但它提供了一個臨時解決方案,因為我稍後將使用同一組文件來生成一些在線內容,這並不是一個好兆頭\sagestr(另一個故事!)。

答案1

只是一些想法而不是答案:

  • 就我個人而言,我會避免聖人。 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 中運行的輸出如下所示: 在此輸入影像描述

有關創建逗號的命令的資訊是這裡

相關內容