次のような文書があるとします。
\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}
3 つの「変数」、 、および が作成されますmass
。acc
これらforce
は最初の 2 つの積です。
この特定の例 ( 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 ですが、30 * 9 = 270 に .8 が追加されるため、結果は 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}
Cocalc (上記のコメントで言及) で実行された出力は次のようになります。
Sage では、x はデフォルトで変数です。その他の変数は、var('g') のようにコード内で定義する必要があります。環境はsagesilent
メモ用紙のようなものです。計算を実行する Python コマンドと Sage コマンドで構成されています。\sage{}
結果を取得するには、format を使用します。数値であるため、数式モード (ドル記号で囲む) で実行されます。Sage は多くの桁数を返す傾向があります。.n(digits=5)
答えは 5 桁の有効数字に強制されます。
答え2
このpythontex
パッケージを使用して LaTeX ドキュメントに Python を埋め込み、次のように 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}
pythontex
これには、LaTeX、python3、 LaTeX のパッケージ、およびpython のパッケージがインストールされている必要がありますsympy
。また、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
、結果を に格納します。3の平方根を取るために使用される関数は、数学ライブラリの関数ではなく、ライブラリの関数であるf
ことに注意してください。つまり、sqrt()
sympy
m
その通り等しくsqrt(3)
、近似値ではありません。
$\pyc{latex(f)}$
次に、latex(f)
返されるものを出力します。 f の値は に等しくなりますsqrt(3) * g
。これを関数に渡すと、latex()
LaTeX 表記法を使用して出力されるため、数式モードに入るにはドル記号が必要です。
latex
これは、最初に を呼び出し、pythontex
次に をもう一度呼び出すことで構築できますlatex
。
最終的に、ドキュメントは次のようになります。
sympy
およびに関するリソースpythontex
: