在准备文档时,某些 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.
这些消息的格式是自由的,由软件包作者决定,没有标准。我建议,该消息包含rerun
或Rerun
遵循大多数这些消息。
包裹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 文档,其中辅助文件总是在变化,但结果文档始终相同。或者结果文档十次相同,但第十一次运行会发生变化。