如何知道 LaTeX 文件是否需要另一次编译

如何知道 LaTeX 文件是否需要另一次编译

在准备文档时,某些 LaTeX 文件需要多次编译。

例如,当文件使用\tableofcontents\ref或参考书目文件时就会出现这种情况(在这种情况下调用一次bibtex并调用两次(pdf)latex)。

调用后,是否有一种简单通用的方法(在 shell 中)来(pdf)latex知道是否需要进行更多调用?

答案1

在控制台/日志文件中重新运行警告/提示

通常,LaTeX 或软件包会告知何时需要再次运行 LaTeX。但有些软件包(TikZ/tikzmark)并未实现检查是否有任何变化,因此需要再次运行 LaTeX。

LaTeX 的示例,当标签是新的或者已更改时:

LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.

包装示例biblatex

Package biblatex Warning: Please (re)run Biber on the file:
(biblatex)                test
(biblatex)                and rerun LaTeX afterwards.

这些消息的格式是自由的,由软件包作者决定,没有标准。我建议,该消息包含rerunRerun遵循大多数这些消息。

包裹rerunfilecheck

该包的理念rerunfilecheck是,如果输入文件相同,则结果也将相同。可以配置它来监视辅助文件。开始时,通过 pdfTeX 计算校验和\mdfivesum。然后在正常 LaTeX 运行期间写入辅助文件。最后再次计算和比较校验和。当校验和不匹配时,会发出重新运行警告。

例如,hyperref使用该包来监视.out文件中的书签:

Package rerunfilecheck Warning: File `test.out' has changed.
(rerunfilecheck)                Rerun to get outlines right
(rerunfilecheck)                or use package `bookmark'.

启发式

所有这些方法都是启发式的。TeX 语言太强大了(图灵完备)。因此不存在可以决定 TeX 文档需要运行多少次的程序。例如,可能存在 TeX 文档,其中辅助文件总是在变化,但结果文档始终相同。或者结果文档十次相同,但第十一次运行会发生变化。

相关内容