![使用校验和确定编译是否完成](https://linux22.com/image/242983/%E4%BD%BF%E7%94%A8%E6%A0%A1%E9%AA%8C%E5%92%8C%E7%A1%AE%E5%AE%9A%E7%BC%96%E8%AF%91%E6%98%AF%E5%90%A6%E5%AE%8C%E6%88%90.png)
在准备打印文档之前,我使用了一个BASH
脚本,如下所示:
#!/bin/sh
xelatex document.tex % compile 1
makeglossaries document
xelatex document.tex % compile 2
xelatex document.tex % compile 3
xelatex document.tex % compile 4
有些文献含有大量的交叉引用,需要重复编译。
如果我创建一个脚本,在每次编译后记录 PDF 的 MD5 校验和,并将其与之前创建的 PDF 的 MD5 校验和进行比较(例如,将编译 4 的 PDF 与编译 3 的 PDF 进行比较),并且我没有在我的文档中放入任何快速变化的信息(例如当前时间)这是否可以完美地表明我的文档已完全完成编译并且不需要进行额外的编译?
答案1
不久前,我研究过 LaTeX PDF 的校验和,但是为了版本控制和验证目的。我无法让它工作。它适用于pdflatex
,但其中大部分可能与 相同xelatex
。
PDF 包含创建时间,每次运行时都会发生变化。您可以用静态值覆盖它,但 PDF 中仍有一个唯一 ID,它取决于当前时间(当前分钟,即不计算秒数)。这会至少每分钟给您一个不同的 ID,但我不能保证它在同一分钟内会相同。
字体系统中曾经也存在一些伪随机影响,它会根据时间(同样,没有秒数)改变一些变量。上次我检查时,这种情况不再存在,至少对于我的测试文件来说是这样。
因此,这种方法一般不适用。您可以使用latexmk
它来为您重复编译。据我所知,它会查看日志文件以查看是否需要进一步运行。