假設我有以下文檔:
\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
oracc
是變數(即\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 並且它附加了 0.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
: