首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将计算结果插入LaTeX文档

将计算结果插入LaTeX文档
EN

Stack Overflow用户
提问于 2013-02-14 15:52:21
回答 3查看 1.7K关注 0票数 3

在我的实验室实验中,我编写了用我的测量值进行计算的程序。目前,这些程序打印出终端中所有数据的简单摘要,如下所示:

代码语言:javascript
复制
U = 2.0 ± 0.1 V
I = 6.0 ± 0.2 A

因为我必须用手来写,所以我只会用它们来写带有文本中价值的散文。

从现在开始,我们可以在计算机上创建我们的报告。我用LaTeX编写我的报告,并希望程序的结果自动插入到文本中。这样,我就可以重新运行程序,而不必将结果复制粘贴到文本中。由于度量和结果是非常异构的,所以我考虑使用模板语言。由于我已经使用了Python,所以我对Jinja的想法如下:

article.tex

代码语言:javascript
复制
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

代码语言:javascript
复制
# 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

代码语言:javascript
复制
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}

结果看起来很好,除了一个数字需要四舍五入。

我的问题是:这是一种很好的方法吗?还是有更好的方法将数字输入文档?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-14 16:08:42

顶替

代码语言:javascript
复制
<< r_err >>

使用

代码语言:javascript
复制
<< '%.2f' % r_err|float >>

应该给你两个小数点的输出。

或者,可以在呈现之前将值转换为字符串。

代码语言:javascript
复制
r_err = "%.2f" % r_err
票数 5
EN

Stack Overflow用户

发布于 2013-02-14 15:59:09

这很好。不过,就我个人而言,我会使用Mako模板

票数 3
EN

Stack Overflow用户

发布于 2013-03-11 00:42:54

实际上,有用于这类事情的LaTeX包。我是吡虫啉包的作者。有关什么是可能的快速示例,请参阅pythontex_gallery文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14878729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档