将计算结果插入LaTeX文档

3

作为我的实验室实验,我编写计算程序来处理我的测量数据。目前,这些程序会在终端打印出所有数据的简单摘要,如下所示:

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}

结果看起来很不错,只是一个数字需要四舍五入。
我的问题是:这样做是否是一个好方法,还是有更好的方法将数字加入文档中?
3个回答

5

替换

<< r_err >>

使用

<< '%.2f' % r_err|float >>

应该输出两位小数。

或者,在渲染之前将您的值转换为字符串。

r_err = "%.2f" % r_err

你为什么要应用 |float?它是否会根据语言环境更改小数分隔符? - Martin Ueding
|float 只是添加了浮点数过滤器,这意味着在渲染之前将该值传递给名为 float 的(Python)函数,确保它实际上是一个浮点数,然后将其格式化为字符串。如果您愿意,可以创建自己的自定义过滤器。 - frogge

3

这没问题。个人而言,我会使用Mako模板


2

实际上,有一些LaTeX包可以完成这种任务。我是pythontex包的作者。请参考pythontex_gallery文件,了解可能的快速示例。


1
看起来很有趣。我将有许多计算和外部库调用,我更愿意将它们放在独立的Python脚本中,而不是与LaTeX代码交织在一起。 - Martin Ueding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接