Suponha que eu tenha o seguinte 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}
Ele cria três 'variáveis': mass
, acc
e force
, que é o produto das duas primeiras.
Este exemplo específico ( mass = 30
, acc = 9.8
) imprime F = 270.8N
, conforme pretendido.
A multiplicação é realizada pelo \numexpr
comando. Isso funciona sempre mass
e acc
ambos são números regulares. Se mass
ou acc
for uma variável (ou seja, \newcommand\mass{m}
), o documento falha na construção, pois \numexpr
só pode realizar operações em números.
Existe uma maneira de realizar operações algébricas em variáveis, de modo que quando mass = 30g
e acc = g
, seja impresso F = 30g^2
? Sei que isso não faz sentido fisicamente, mas acho que a questão está clara.
Alguns outros exemplos:
mass = m
,acc = 9.8
->F = m*9.8
ouF = 9.8*m
mass = m
,acc = g
->F = m*g
ouF = g*m
mass = x
,acc = x
->F = x^2
EDIT: Como @PhelypeOleinik gentilmente apontou, \numexpr
só funciona eminteiros. Portanto, embora 9,8 * 30 = 294, dá 270,8 como resultado, porque 30 * 9 = 270 e anexa 0,8.
Responder1
Aqui está o código usando o sagetex
pacote que você solicitou:
\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}
A saída, rodando no Cocalc (mencionada no meu comentário acima), é:
No Sage, x é uma variável por padrão. Quaisquer outras variáveis devem ser definidas conforme feito no código, por exemplo var('g'). O sagesilent
ambiente é como um papel de rascunho. É composto pelos comandos Python e Sage que farão os cálculos. Use o formato \sage{}
para obter o resultado. Por ser numérico, é feito no modo matemático (entre cifrões). Sage tenderá a fornecer muitos dígitos. Isso .n(digits=5)
forçará a resposta a 5 algarismos significativos.
Responder2
Você pode usar o pythontex
pacote para incorporar python em seu documento LaTeX e então usar o sympy
pacote python para computação simbólica 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}
Isso requer que você tenha instalado o LaTeX, python3, o pythontex
pacote para LaTeX e o sympy
pacote para python. Além disso, algum conhecimento de python não faz mal.
Breve explicação do código:
\usepackage{pythontex}
importa o pacote necessário.
\begin{pycode}
inicia um bloco de código python.
Vejamos o seguinte bloco de código python:
from sympy import *
m = sqrt(3)
a = symbols('g')
f = m * a
Isso importa a sympy
biblioteca, define m
igual à raiz quadrada de 3 e a
a uma variável g
. Em seguida, ele multiplica m
e a
armazena o resultado em f
. Observe que a sqrt()
função usada para obter a raiz quadrada de 3 é uma função da sympy
biblioteca e não da biblioteca matemática. Isto significa que m
éexatamenteigual a sqrt(3)
e não é uma aproximação.
$\pyc{latex(f)}$
em seguida, imprime o que latex(f)
retornar. O valor de f agora é igual a sqrt(3) * g
. Ao passá-lo pela latex()
função, ele é impresso usando a notação LaTeX, portanto, os cifrões são necessários para entrar no modo matemático.
Isso pode ser criado chamando primeiro e depois latex
novamente .pythontex
latex
No final o documento ficará assim:
Alguns recursos em sympy
e pythontex
: