假设我有以下文档:
\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}
它创建了三个“变量”:和mass
,它是前两个的乘积。acc
force
此特定示例(mass = 30
, )按预期acc = 9.8
打印。F = 270.8N
乘法由命令执行。只要和都是常规数字,\numexpr
此方法就有效。如果或为变量(即),则文档无法构建,因为只能对数字执行运算。mass
acc
mass
acc
\newcommand\mass{m}
\numexpr
有没有办法对变量执行代数运算,这样当mass = 30g
和时acc = g
,它会打印F = 30g^2
?我知道这在物理上没有意义,但我认为要点很清楚。
其他一些例子:
mass = m
,acc = 9.8
->F = m*9.8
或F = 9.8*m
mass = m
,acc = g
->F = m*g
或F = g*m
mass = x
,acc = x
->F = x^2
编辑:正如@PhelypeOleinik 指出的那样,\numexpr
只适用于整数。因此,虽然 9.8 * 30 = 294,但结果却是 270.8,因为 30 * 9 = 270 并且它附加了 .8。
答案1
这是使用sagetex
您请求的包的代码:
\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}
在 Sage 中,x 默认为变量。任何其他变量都必须在代码中定义,例如 var('g')。环境sagesilent
就像草稿纸。它由执行计算的 Python 和 Sage 命令组成。使用格式\sage{}
获取结果。由于它是数字,因此它是在数学模式下完成的(在美元符号之间)。Sage 倾向于给出很多数字。这.n(digits=5)
将强制答案为 5 个有效数字。
答案2
您可以使用该pythontex
包将 python 嵌入到您的 LaTeX 文档中,然后使用 pythonsympy
包进行符号计算,如下所示:
\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}
这要求您已安装 LaTeX、python3、pythontex
LaTeX 软件包和sympy
python 软件包。此外,掌握一些 python 知识也无妨。
代码简要解释:
\usepackage{pythontex}
导入所需的包。
\begin{pycode}
开始一段 Python 代码。
我们来看看下面的python代码块:
from sympy import *
m = sqrt(3)
a = symbols('g')
f = m * a
这将导入sympy
库,将 设置m
为 等于 3 的平方根 并a
赋值给变量g
。然后它将m
和相乘a
并将结果存储在 中f
。请注意,sqrt()
用于求 3 的平方根的函数是sympy
库中的函数,而不是数学库中的函数。这意味着m
是确切地等于sqrt(3)
并且不是近似值。
$\pyc{latex(f)}$
然后打印latex(f)
返回的内容。 f 的值现在等于sqrt(3) * g
。通过将其传递给latex()
函数,它会使用 LaTeX 符号进行打印,因此美元符号是进入数学模式所必需的。
latex
这可以通过首先调用,然后pythontex
再次调用来构建latex
。
最终文档将如下所示:
sympy
和的一些资源pythontex
: