Durch Komma getrennte Zahlendarstellung, die von \sage{} in den Latex-Mathematikmodus eingespeist wird

Durch Komma getrennte Zahlendarstellung, die von \sage{} in den Latex-Mathematikmodus eingespeist wird

Ich bin auf andere Tex-Fragen gestoßen, in denen Leute nach Möglichkeiten fragten, Zahlen in einem durch Kommas getrennten Format darzustellen. Das heißt, 1234567 als 1.234.567 zu schreiben. Ich brauche das, wenn ich meinem Kind Addition und Subtraktion beibringe. Ich versuche, eine zufällige Liste von Additionsaufgaben zu erstellen, die von Tag zu Tag schwieriger wird. Im Grunde möchte ich den Code ausführen und sagen wir 30 Tage lang tägliche Aufgabensätze erstellen, die von Tag zu Tag schwieriger werden. Ich kann es zwar unterwegs für mein eigenes Kind anpassen, aber es sind andere Kinder beteiligt, und sie haben keine Möglichkeit, auf mich zuzugreifen. Also liegt es an den Eltern. Kurz gesagt, hier ist die Herausforderung, die ich habe:

Die zuvor angegebenen Lösungen für dieses Problem weisen zwei Probleme auf:

  1. Viele funktionieren im Mathemodus nicht gut genug!

  2. (und das ist mein Hauptproblem) Ich würde gerne so etwas machen (ich verwende das Numprint-Paket als fehlgeschlagenes Beispiel): $\numprint{\sage{12454785*34}}$

Wie Sie sich vorstellen können, funktioniert dies nicht, da \numprinteine Zeichenfolge gelesen wird, und das verheißt nichts Gutes für \sage{...}Sie! Ich dachte daran, meine eigene Sage-Funktion zu definieren und sie dann zu verwenden, \sagestr{}aber das ist nur eine vorübergehende Lösung, da ich später denselben Satz von Dateien verwenden werde, um Online-Inhalte zu generieren, was NICHTS Gutes für Sie verheißt \sagestr(eine andere Geschichte!).

Antwort1

Nur ein paar Gedanken, keine Antwort:

  • Persönlich würde ich Sage meiden. LaTeX kann Berechnungen selbst durchführen (zumindest mit expl3).
  • Sie sollten das Rad nicht neu erfinden. Ihr \numprintwäre in jedem Fall schlechter als siunitxdas von \num.
  • Update: Wie Mico in den Kommentaren unter Ihrer Frage erwähnt hat, könnten Sie eine der Lösungen vondiese Frage. In Kombination mit meinem folgenden Code-Schnipsel würde die Version von egreg passen.

Hier ist ein sehr einfacher Ansatz eines \numberfromcalcMakros, das zur Berechnung lediglich einen numerischen Ausdruck erwartet und dann das formatierte Ergebnis druckt, unabhängig davon, ob Sie sich im Mathematikmodus befinden oder nicht.

\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}

Zahlen

Da Sie keinen Code gepostet haben, werde ich hier nicht versuchen, zufällige Listen zu generieren, aber das wäre auch nicht so schwer. Wie gesagt, das ist nur ein Anfang.

Antwort2

Einer der Vorteile von Sage ist, dass es auf Python basiert. Sie erhalten also viele integrierte Funktionen ohne langen, schwer lesbaren Code. In diesem Fall ändern Sie die Zahlen in Sage in Zeichenfolgen und fügen die Kommas ein, bevor Sie zu LaTeX wechseln.

\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}

Die Ausgabe in CoCalc sieht folgendermaßen aus: Bildbeschreibung hier eingeben

Informationen zum Befehl zur Kommabildung finden SieHier.

verwandte Informationen