自动生成 latex 源文件

自动生成 latex 源文件

我有一个python脚本,可以读取包含数据 + 一些“latex 模板”的文件。该脚本生成一个较长的 latex 源文件,该源文件经过编译可获得 PDF。

顺便说一句,LaTeX 源代码严重依赖于PythonTex。所以我想知道是否可以将脚本、数据和模板保存在同一个 latex 文件中(不以牺牲源代码的可读性为代价)并只运行 latex/pythontex。

它具有以下优点:

  1. 所有内容都将保存在一个文件中;

  2. 该脚本和 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 对于这类事情非常有用。它功能强大、文档齐全且易于使用。[这不是推销,我与该软件包没有任何关系,也不认识它的作者!]

相关内容