如何从数据表中自动填充 LaTeX 模板?

如何从数据表中自动填充 LaTeX 模板?

我有一个像这样的 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.')

相关内容