ラボでの実験では、測定値を使用して計算を行うプログラムを作成します。現在、これらのプログラムは、次のように、ターミナル内のすべてのデータの簡単な要約を出力します。
U = 2.0 ± 0.1 V
I = 6.0 ± 0.2 A
私はそれらを手で書かなければならなかったので、私はそれらを使ってテキストの値で散文を書くだけでした。
今後は、コンピューター上でレポートを作成することが許可されます。レポートをLaTeXで作成し、プログラムの結果をテキストに自動的に挿入したいと考えています。そうすれば、結果をコピーしてテキストに貼り付けることなく、プログラムを再実行できます。測定と結果は非常に不均一なので、テンプレート言語を使用することを考えました。私はすでにPythonを使用しているので、Jinjaについて次のように考えました。
article.tex
We measured the voltage $U = \unit{<< u_val >> \pm << u_err >>}{\volt}$ and the
current $I = \unit{<< i_val >> \pm << i_err >>}{\ampere}$. Then we computed the
resistance $R = \unit{<< r_val >> \pm << r_err >>}{\ohm}$.
All our measurements:
\begin{table}[h]
\begin{tabular}{rrr}
$U/\volt$ & $I/\ampere$ \\
\hline
%< for u, i in data: ->%
$<< u >>$ & $<< i >>$ \\
%< endfor ->%
\end{tabular}
\end{table}
program.py
# Setting up Jinja
env = jinja2.Environment(
"%<", ">%",
"<<", ">>",
"[§", "§]",
loader=jinja2.FileSystemLoader(".")
)
template = env.get_template("article.tex")
# Measurements.
u_val = 6.2
u_err = 0.1
i_val = 2.0
i_err = 0.1
data = [
(3, 4),
(1, 4.0),
(5, 1),
]
# Calculations
r_val = u_val / i_val
r_err = math.sqrt(
(1/i_val * u_err)**2
+ (u_val/i_val**2 * i_err)**2
)
# Rendering LaTeX document with values.
with open("out.tex", "w") as f:
f.write(template.render(**locals()))
out.tex
We measured the voltage $U = \unit{6.2 \pm 0.1}{\volt}$ and the current $I =
\unit{2.0 \pm 0.1}{\ampere}$. Then we computed the resistance $R = \unit{3.1
\pm 0.162864974749}{\ohm}$.
All our measurements:
\begin{table}[h]
\begin{tabular}{rrr}
$U/\volt$ & $I/\ampere$ \\
\hline
$3$ & $4$ \\
$1$ & $4.0$ \\
$5$ & $1$ \\
\end{tabular}
\end{table}
1つの数値を丸める必要があることを除いて、結果はかなり良好に見えます。
私の質問は次のとおりです。これを行うにはそれが良い方法でしょうか、それともドキュメントに数字を取り込むためのより良い方法がありますか?