在Python中检测并处理通过os.system调用生成的LaTeX警告/错误

2 投票
2 回答
840 浏览
提问于 2025-04-16 22:13

我写了一个Python脚本,用来自动把Sweave/LaTeX文档转换成PDF文件。这里面最重要的部分是:

os.system("""echo "Sweave('%s.Rnw')" | R --vanilla --quiet"""%topic)

seq = ['p','b','p','b','p','p']
for op in seq: 
    if op is 'p':
        os.system('pdflatex %s'%topic)
    if op is 'b':
        os.system('bibtex %s'%topic)
    if op is 'l':
        os.system('latex %s'%topic)

这个脚本运行得很好,如果没有错误的话。但是如果出现了LaTeX错误,我就会被带到LaTeX的命令行界面,比如:

[10]
! You can't use `macro parameter character #' in vertical mode.
l.625 #

? 

这时候我需要手动退出这个界面。有没有办法让Python“知道”在执行os.system这个命令时出现了LaTeX错误,然后结束这个命令,同时还能捕获到错误信息呢?

2 个回答

1

给LaTeX加上一个参数 -interaction=nonstopmode

4
  1. 不要使用 os.system,建议使用 subprocess 模块。
  2. pdflatex 有一个 -interaction 选项,可以让它进入非交互模式(你可能想用 batchmodenonstopmode,如果我没记错的话,但你可以试试看每个选项的效果)。

撰写回答