我想开发一个预提交钩子用于我的 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 提交会被中断。