我编写了一个 Python 脚本来自动化一些 LaTeX 构建。目前我在 Mac OS X 上进行开发/测试(没有在其他 UNIX 版本上尝试过)。
将 LaTeX 编译为 pdf 文档的特定执行函数如下:
def execute(texinputs, params, proj_dir):
latex_cmd = '/usr/texbin/xelatex'
params=shlex.split(params)
if params is None or len(params)==0:
params = [latex_cmd]
else:
params.insert(0, latex_cmd)
environment = os.environ
oldenv = environment.get('TEXINPUTS', '')
prepand = ':'.join([input for input in texinputs])
environment['TEXINPUTS']=prepand+':'+oldenv
ptoken=subprocess.Popen(params, env=environment, cwd=proj_dir, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
with ptoken.stdout as stdout:
with ptoken.stderr as stderr:
for _i in range(1,10):
if ptoken.poll() is None:
time.sleep(1)
ret=ptoken.returncode
if ptoken.returncode is None:
ret = -1000
ptoken.kill()
outlines, errlines = stdout.readlines(), stderr.readlines()
return ret, outlines, errlines
我在这里所做的是将路径传递给一些生成的源,这些路径应该添加到 TEXINPUTS 前面,以解析我的 LaTeX 模板内的相对路径以及一些额外的 tex 处理器参数。
一个典型的 shell 命令调用(工作正常)是:
TEXINPUTS=/用户/ovanes/Documents/some_path/content:$TEXINPUTS /usr/texbin/xelatex -shell-escape main.tex
这会生成一个 main.pdf,没有问题。但是,从脚本运行此 shell 命令时,我看到以下输出,并且没有写入 main.pdf。
Error 32512 (driver return code) generating output;
file main.pdf may not be valid.
有任何想法吗?
答案1
好的,我找到了问题所在。我忽略了 LaTeX 处理器由于路径问题无法启动 xdvipdfmx。最后,将“/usr/texbin”附加到子进程的 PATH 环境中就可以正常工作了。