
Me encontré con otras preguntas de texto en las que la gente preguntaba formas de representar números en formato separado por comas. Es decir, escribir 1234567 como 1.234.567. Necesito esto mientras le enseño sumas y restas a mi hijo. Estoy tratando de generar una lista aleatoria de problemas de suma que se vuelve más difícil cada día. Básicamente, quiero ejecutar el código y generar, digamos, conjuntos de problemas diarios para 30 días, lo que se vuelve más difícil a medida que avanzamos. Si bien puedo modificarlo para mi propio hijo mientras estoy en movimiento, hay otros niños involucrados y no tendrán la posibilidad de acceder a mí. Entonces, depende de los padres. En pocas palabras, este es el desafío que tengo:
Las soluciones dadas anteriormente a este problema tienen dos problemas:
¡Muchos no funcionan lo suficientemente bien en modo matemático!
(y este es mi problema principal) Me gustaría hacer algo como esto (usando el paquete numprint como ejemplo fallido):
$\numprint{\sage{12454785*34}}$
Como puedes adivinar, esto no funciona ya que \numprint
lee una cadena y no augura nada bueno en \sage{...}
el interior. Pensé en definir mi propia función sage y luego usarla, \sagestr{}
pero proporciona una solución temporal ya que más adelante usaré el mismo conjunto de archivos para generar contenido en línea que NO augura nada bueno \sagestr
(¡otra historia!).
Respuesta1
Sólo algunas ideas en lugar de una respuesta:
- Personalmente evitaría la salvia. LaTeX puede hacer cálculos por sí solo (al menos con expl3).
- No deberías reinventar la rueda. Su
\numprint
sería, en cualquier caso, inferior asiunitx
la de\num
. - Actualización: como Mico mencionó en los comentarios debajo de su pregunta, podría considerar adaptar una de las soluciones deesta pregunta. En combinación con mi siguiente fragmento de código, la versión de egreg encajaría.
Aquí hay un enfoque muy simple de una \numberfromcalc
macro que solo espera que se calcule alguna expresión numérica y luego imprime el resultado formateado independientemente de si está en modo matemático o no.
\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}
Como no publicaste ningún código, no intentaré generar algunas listas aleatorias aquí, pero eso tampoco sería tan difícil. Como dije, esto es sólo un comienzo.
Respuesta2
Una de las ventajas de utilizar Sage es que está construido en Python. Por lo tanto, obtienes muchas funciones integradas sin código largo y difícil de leer. En este caso, cambie los números a cadenas en Sage e inserte las comas antes de ir a 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}
La salida que se ejecuta en CoCalc tiene este aspecto:
La información sobre el comando para crear las comas esaquí.