我正在尝试使用Python构建一个LaTeX文档,但是在按顺序运行命令时遇到了问题。对于那些熟悉LaTeX的人,你会知道你通常必须运行四个命令,每个命令在运行下一个命令之前完成,例如。
pdflatex file
bibtex file
pdflatex file
pdflatex file
在Python中,我这样做是为了定义命令
commands = ['pdflatex','bibtex','pdflatex','pdflatex']
commands = [(element + ' ' + src_file) for element in commands]
但问题是运行它们。
我试图从this thread中解决问题 - 例如在循环中使用os.system()
subprocess
,例如map(call, commands)
或Popen
,并将列表折叠为由&
分隔的单个字符串 - 但它似乎是命令全部作为单独的进程运行,无需等待前一个进程完成。
为了记录,我在Windows上但想要一个跨平台的解决方案。
修改
问题是指定src_file变量的错误;它不应该有“.tex”。以下代码现在可以使用:
test.py
import subprocess
commands = ['pdflatex','bibtex','pdflatex','pdflatex']
for command in commands:
subprocess.call((command, 'test'))
test.tex
\documentclass{article}
\usepackage{natbib}
\begin{document}
This is a test \citep{Body2000}.
\bibliographystyle{plainnat}
\bibliography{refs}
\end{document}
refs.bib
@book{Body2000,
author={N.E. Body},
title={Introductory Widgets},
publisher={Widgets International},
year={2000}
}
答案 0 :(得分:5)
os.system
不应该导致此问题,但subprocess.Popen
应该。
但我认为使用subprocess.call是最好的选择:
commands = ['pdflatex','bibtex','pdflatex','pdflatex']
for command in commands:
subprocess.call((command, src_file))