我有一个python
脚本,可以读取包含数据 + 一些“latex 模板”的文件。该脚本生成一个较长的 latex 源文件,该源文件经过编译可获得 PDF。
顺便说一句,LaTeX 源代码严重依赖于PythonTex
。所以我想知道是否可以将脚本、数据和模板保存在同一个 latex 文件中(不以牺牲源代码的可读性为代价)并只运行 latex/pythontex。
它具有以下优点:
所有内容都将保存在一个文件中;
该脚本和 pythontex 可以在同一个 python 会话中运行并相互了解。
下面是一个简单(几乎微不足道)的脚本示例。假设模板/数据文件是
\documentclass{article}
\begin{document}
*** is *** years old\par
\end{document}
\begin{data}
Bob 88
Mik 76
\end{data}
脚本产生
\documentclass{article}
\begin{document}
Bob is 88 years old\par
Mik is 76 years old\par
\end{document}
编辑举一个不那么简单的例子,假设模板是一段任意的 latex/pythontex,并且数据包含一段 latex/pythontex 代码。
答案1
编辑:使用 pythontex 回答
我确信您的问题的答案是肯定的,但如果没有更多关于您正在尝试的细节,就不可能真正给出“正确”的答案,因为您现在要求用黑匣子来产生一个黑匣子:)。
话虽如此,下面的代码展示了一种使用方法pythontex正确排版你的 MWE:
\documentclass{article}
\usepackage{pythontex}
\begin{pycode}
data = { 'Bob' : 88,
'Mik' : 76
}
\end{pycode}
\begin{document}
\begin{pycode}
for person in data:
print('%s is %s\n' % (person, data[person]))
\end{pycode}
\end{document}
得出的结果为:
一些评论:
- 与 Python 一样,缩进非常重要:
pycode
环境中的初始缩进应左对齐,并且以下行必须遵守通常的 Python 规则 - 还有几种其他方法可以将 Python 代码注入文档。根据实际应用程序的情况,环境
pycode
可能不是最佳方法。请参阅pythontex手册了解更多详细信息 - 要编译,首先运行 (pdf)latex,然后运行 pythontex,然后再次运行 (pdf)latex
- 我需要安装 pygments 库才能使其工作(例如,使用
pip install pygments
)。
第一个建议使用 csvsimple
也许这并不适合您的实际应用,但考虑到您的 MWE,我建议使用csvsimple而不是pythontex。
例如如果你的主 tex 文件如下所示
\documentclass{article}
\usepackage{csvsimple}
\begin{document}
\csvreader[head to column names, tabular=l]{data.csv}{}{\person\ is \age}
\end{document}
并data.csv
包含
person,age
Bob,88
Mik,76
输出与上面相同。
正如我所说,这可能不适合你的实际用例,但我个人认为csvsimple 对于这类事情非常有用。它功能强大、文档齐全且易于使用。[这不是推销,我与该软件包没有任何关系,也不认识它的作者!]