Supongamos que tengo el siguiente documento:
\documentclass{article}
\newcommand\mass{30}
\newcommand\acc{9.8}
\newcommand\force{\the\numexpr \mass * \acc \relax} % F=m*a
\begin{document}
\section{Exerted force}
F = \force N
\end{document}
Crea tres 'variables': mass
y acc
, force
que es el producto de las dos primeras.
Este ejemplo específico ( mass = 30
, acc = 9.8
) imprime F = 270.8N
, como se pretende.
La multiplicación se realiza mediante el \numexpr
comando. Esto funciona en cualquier momento mass
y acc
ambos son números regulares. Si mass
o acc
es una variable (es decir \newcommand\mass{m}
), el documento no se puede compilar, ya que \numexpr
solo puede realizar operaciones con números.
¿Hay alguna manera de realizar operaciones algebraicas en variables, de modo que cuando mass = 30g
y acc = g
se imprima F = 30g^2
? Sé que esto no tiene sentido físicamente, pero creo que el punto está claro.
Algunos otros ejemplos:
mass = m
,acc = 9.8
->F = m*9.8
oF = 9.8*m
mass = m
,acc = g
->F = m*g
oF = g*m
mass = x
,acc = x
->F = x^2
EDITAR: Como @PhelypeOleinik amablemente señaló, \numexpr
solo funciona ennúmeros enteros. Entonces, mientras 9.8 * 30 = 294, da 270.8 como resultado, porque 30 * 9 = 270 y agrega .8.
Respuesta1
Aquí está el código usando el sagetex
paquete que solicitó:
\documentclass{article}
\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
m = 30.0
a = 9.8
Force = m*a
var('g')
mass = 30*g
\end{sagesilent}
\section{Exerted force}
F = $\sage{Force.n(digits=5)}$ N \\\\
If the mass is $\sage{mass}$ then it's square is $\sage{mass^2}$.
\begin{sagesilent}
var('m')
acc = 9.8
\end{sagesilent}
$F = \sage{m*acc.n(digits=2)}$\\
\begin{sagesilent}
var('a')
m=a
\end{sagesilent}
If the mass, $m$, is equal to the acceleration, $a$ then
$F = \sage{m*a}$.
Sage even works with square roots:
\begin{sagesilent}
var('g')
m=sqrt(3)
\end{sagesilent}
$F = \sage{m*g}$ which, if you want decimals, is about $F=\sage{m.n(digits=4)*g}$
\end{document}
El resultado, ejecutándose en Cocalc (mencionado en mi comentario anterior), es:
En Sage, x es una variable por defecto. Cualquier otra variable debe definirse como se hace en el código, por ejemplo var('g'). El sagesilent
medio ambiente es como papel borrador. Está compuesto por los comandos de Python y Sage que harán los cálculos. Utilice el formato \sage{}
para obtener el resultado. Como es numérico, se hace en modo matemático (entre signos de dólar). Sage tenderá a dar muchos dígitos. Obligará .n(digits=5)
a que la respuesta tenga 5 cifras significativas.
Respuesta2
Puede usar el pythontex
paquete para incrustar Python en su documento LaTeX y luego usar el sympy
paquete Python para cálculos simbólicos como este:
\documentclass{article}
\usepackage{pythontex}
\begin{pycode}
from sympy import *
m = sqrt(3)
a = symbols('g')
f = m * a
\end{pycode}
\begin{document}
\section{Exerted force}
F = $\pyc{print(latex(f))}$
\end{document}
Esto requiere que haya instalado LaTeX, python3, el pythontex
paquete para LaTeX y el sympy
paquete para python. Además, algunos conocimientos de Python no hacen daño.
Breve explicación del código:
\usepackage{pythontex}
importa el paquete requerido.
\begin{pycode}
comienza un bloque de código Python.
Veamos el siguiente bloque de código Python:
from sympy import *
m = sqrt(3)
a = symbols('g')
f = m * a
Esto importa la sympy
biblioteca, la establece m
igual a la raíz cuadrada de 3 y a
a una variable g
. Luego multiplica m
y a
almacena el resultado en f
. Tenga en cuenta que la sqrt()
función utilizada para sacar la raíz cuadrada de 3 es una función de la sympy
biblioteca y no de la biblioteca matemática. Esto significa que m
esexactamenteigual a sqrt(3)
y no es una aproximación.
$\pyc{latex(f)}$
luego imprime lo que latex(f)
regrese. El valor de f ahora es igual a sqrt(3) * g
. Al pasarlo por la latex()
función, se imprime usando notación LaTeX, por lo que los signos de dólar son necesarios para ingresar al modo matemático.
Esto se puede construir llamando primero latex
, luego pythontex
y luego latex
otra vez.
Al final el documento quedará así:
Algunos recursos sobre sympy
y pythontex
: