我有一个像这样的 LaTeX 模板
\documentclass[12pt]{article}
\begin{document}
Hello, \VAR{USER}!
\end{document}
以及一个用户表(例如 csv),例如
ID,USER
01,Peter
02,Michael
03,Jana
...
我如何生成 pdf 文件 hello_01.pdf、hello_02.pdf、hello_03.pdf 等,其内容为填充了用户名的 latex 文档?所以 hello_01.pdf 只包含“Hello, Peter!”。
是否有某个应用程序可以自动为我填充和编译 pdf 文件,或者我是否必须从头开始编写某些内容,以及我该如何开始做呢?
答案1
这是一个执行此操作的 Python 脚本。它只是\VAR{USER}
用行中的 USER 字段替换文本,并将其写入文件hello_ID.tex
,然后使用 处理该文件latexmk
。使用命令 运行python process.py
,或者如果您使用的是 Windows,则可能是py process.py
。
当然,它可以被推广到使用更多的变量,例如使用一些字符串模板库,但我想保持它的简单。
文件:template.tex
\documentclass[12pt]{article}
\begin{document}
Hello, \VAR{USER}!
\end{document}
文件:input.csv
ID,USER
01,Peter
02,Michael
03,Jana
文件:process.py
import csv
import subprocess
def generate_file(template, id, user):
filename = f'hello_{id}.tex'
with open(filename, 'w') as latex_file:
latex = template.replace(r'\VAR{USER}', user)
latex_file.write(latex)
print(f'Generated {filename}')
subprocess.call(['latexmk', '-pdf', filename])
with open('template.tex') as template_file:
global latex_code
latex_code = template_file.read()
print (latex_code)
with open('input.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
for row in csv_reader:
if line_count == 0:
print(f'Column names are {", ".join(row)}')
line_count += 1
else:
generate_file(latex_code, row[0], row[1])
line_count += 1
print(f'Processed {line_count} lines.')