Представление чисел, разделенных запятыми, передано в математический режим Latex из \sage{}

Представление чисел, разделенных запятыми, передано в математический режим Latex из \sage{}

Я наткнулся на другие вопросы по tex, в которых люди спрашивали о способах представления чисел в формате, разделенном запятыми. То есть, 1234567 записывается как 1 234 567. Мне это нужно, когда я обучаю своего ребенка сложению/вычитанию. Я пытаюсь создать рандомизированный список задач на сложение, который становится сложнее с каждым днем. По сути, я хочу запустить код и создать, скажем, 30-дневный набор ежедневных задач, который становится сложнее по мере продвижения. Хотя я могу настраивать его для своего ребенка на ходу, в нем участвуют и другие дети, и у них не будет возможности получить ко мне доступ. Так что все зависит от родителей. Короче говоря, вот проблема, с которой я столкнулся:

Ранее представленные решения этой проблемы имеют две проблемы:

  1. Многие не очень хорошо работают в математическом режиме!

  2. (и это моя главная проблема) Я хотел бы сделать что-то вроде этого (используя пакет numprint в качестве неудачного примера): $\numprint{\sage{12454785*34}}$

Как вы можете догадаться, это не работает, поскольку \numprintсчитывает строку, и это не сулит ничего хорошего \sage{...}внутри! Я думал определить свою собственную функцию sage, а затем использовать, \sagestr{}но это дает временное решение, так как позже я буду использовать тот же набор файлов для генерации некоторого онлайн-контента, что НЕ сулит ничего хорошего \sagestr(другая история!).

решение1

Просто несколько мыслей, а не ответ:

  • Лично я бы избегал sage. LaTeX может выполнять вычисления самостоятельно (по крайней мере с expl3).
  • Вам не следует изобретать велосипед. Ваш \numprintв любом случае будет хуже siunitx's \num.
  • Обновление: как Мико упомянул в комментариях под вашим вопросом, вы могли бы рассмотреть возможность адаптации одного из решений изэтот вопрос. В сочетании с моим следующим фрагментом кода версия 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 выглядит следующим образом: введите описание изображения здесь

Информация о команде создания запятыхздесь.

Связанный контент