如何用 Python 优雅地编写 LaTeX?
说实话,我最早接触 LaTeX 的时候完全懵逼,什么 \begin{document} 啊,\section{} 啊,满屏幕的反斜杠,像是看天书。后来写论文才硬着头皮用,结果越写越觉得:这玩意儿真香,版式是真的漂亮。
不过你要真让我纯手写 LaTeX 文件,我是拒绝的,太繁琐了。直到有一次在办公室加班,隔壁的同事用 Python 写了个小脚本,自动生成公式和表格,我当场震惊:原来 Python 可以把 LaTeX 玩得这么丝滑。
从最简单的字符串拼接开始
其实思路特别直白:Python 就是个字符串处理利器。LaTeX 文件本质就是一堆文本,那我们直接用 Python 拼就行。
latex_content = r"""
\documentclass{article}
\begin{document}
Hello, LaTeX! 这里是 Python 自动生成的内容。
\section{第一节}
这是一个自动生成的小节。
\end{document}
"""with open("demo.tex", "w", encoding="utf-8") as f:
f.write(latex_content)
运行后就能得到一个能编译的 .tex 文件。第一次我这样搞的时候,心情大概就跟自动化点外卖一样爽。
更优雅一点:用模板
但光是拼字符串太土了,代码里全是反斜杠,看着头大。这时候 Python 的模板工具(比如 jinja2)就派上用场了。
from jinja2 import Templatetemplate = Template(r"""
\documentclass{article}
\begin{document}
Hello, {{ name }}!
\section{数据列表}
\begin{itemize}
{% for item in items %}
\item {{ item }}
{% endfor %}
\end{itemize}
\end{document}
"""
)latex_content = template.render(name="LaTeX", items=["苹果", "香蕉", "橙子"])
with open("report.tex", "w", encoding="utf-8") as f:
f.write(latex_content)
这样写的好处就是结构清晰,逻辑和内容分开。你改数据就改 Python 部分,排版的 LaTeX 模板保持不动。
再进阶:直接生成 PDF
有时候嫌麻烦,还得自己去编译 .tex 文件?Python 也能帮你。比如 subprocess 调用 pdflatex,一步到位生成 PDF。
import subprocesssubprocess.run(["pdflatex", "report.tex"])
或者更专业一点,直接用 pylatex 这个库,Python 代码里对象化地写 LaTeX,完全不用拼字符串。
from pylatex import Document, Section, Subsection, Commanddoc = Document()
with doc.create(Section('自动化报告')):
doc.append('这一段是 Python 生成的 LaTeX 内容。')
with doc.create(Subsection('小节')):
doc.append('是不是比手写方便多了?')
doc.generate_pdf('auto_report', clean_tex=False)
这玩意儿第一次用的时候,我真有种写 Python 就能顺手“顺产”论文的错觉。
说了这么多,其实总结一句:Python + LaTeX,本质就是“自动化 + 美学”。Python 负责脏活累活(拼数据、生成结构),LaTeX 负责体面和排版。两者结合起来,既优雅又高效。
我自己现在习惯了用模板方式来生成,特别是要批量写实验报告或者生成公式的时候,效率翻倍不止。
对了,别忘了 LaTeX 编译环境要提前装好,不然你跑 Python 脚本的时候会一脸问号:怎么啥都没出来。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领