如何检查 PDFLaTeX 中的编译是否成功?

如何检查 PDFLaTeX 中的编译是否成功?

我想开发一个预提交钩子用于我的 LaTeX Git 存储库。我需要钩子来抑制提交,以防编译失败(缺少包或缺少源文件或缺少图像或没有生成 PDF - 还有什么我忘记的吗?)。

是否有一个标准的方法来检查我可以使用我的钩子的编译状态(成功/失败)?

我使用自己的build.sh脚本,从 Git 标签生成文档历史记录,运行一些pdflatex命令,并清理中间文件。我在 Win10、MikTeX 下运行它,但想让钩子通用。

答案1

这不是一个完整的答案,只是一个提示......但是......

您可以检查 的退出状态pdflatex。如果它与 0 不同,则表示出现了问题。作为参考,这是我的 Python3 代码片段,它编译了一个包含完整 LaTeX 源的字符串:

import os
import sys
def latex_string(bigstr, outname="out"): 
    """ Compile with pdflatex the string passed as argument. 
        Notice that the output files are overwritten, no questions.
    """
    f = open(outname+".tex", mode="w") 
    print(bigstr, file=f)
    f.close()
    ecode=os.system("pdflatex %s >/dev/null </dev/null" % outname) 
    if ecode==0:
        os.system("rm -f {0}.aux {0}.log {0}.out".format(outname))
        pass
    else:
        print("pdflatex error code: %d" % ecode, file=sys.stderr)
        sys.exit(1) 

在 中,您可以在调用后立即bash检查变量。$?pdflatex

答案2

由于 (pdf)LaTeX 编译器只是返回错误代码,因此这项任务非常简单。

我决定使用latexmk以便正确处理运行次数。

最后我的pre-commit钩子看起来像这样:

#!/bin/sh
exec latexmk -pdf -pdflatex="pdflatex --shell-escape %O %S" -logfilewarninglist -silent document
exec git update-server-info

如果我的 LaTeX 代码出现错误,以致无法生成输出,则 Git 提交会被中断。

相关内容