为什么要多次编译

辅助文件、参考书目通行证以及为什么参考文献会打印?在第一次运行时。

为什么要多次编译

迟早你会编译一个文档,打开 PDF,并在应该包含图号或引文的地方找到“??”。没有任何东西被破坏。一次编译就是对文件的一次传递,有些信息实际上无法一次性获知。

这是问题的缩影。在第 2 页上,您写了“参见图 \ref{fig:results}”,但该图出现在第 7 页上。当引擎排版第 2 页时,它还没有到达第 7 页,因此它不知道该图将得到什么编号。这同样适用于目录,甚至在第一页完成之前就需要每个部分的页码。

引擎是如何解决的

LaTeX 引擎读取您的“.tex”文件,解析每个宏,并写入 PDF。除了 PDF 之外,它还编写小帮助文件:“.aux”用于标签和引文,“.toc”用于目录,“.bbl”用于格式化参考书目。这些文件是引擎为其未来留下的注释。

  1. 在第一遍中,引擎会排版文本并将遇到的每个“\label”和“\cite”写入“.aux”文件中,在需要尚不知道的数字的地方打印“??”。
  2. 如果您引用任何内容,参考书目工具(bibtex 或 biber)会读取“.aux”文件,在“.bib”数据库中查找每个引文,并将格式化的参考列表写入“.bbl”文件。
  3. 在第二遍(有时是第三遍)中,引擎会读回这些帮助文件,因此交叉引用、目录条目和引文标签最终解析为实数。

现代设置会自动为您运行这些通道,因此实际上您很少自己键入命令。但了解循环就可以解释症状:添加标签或引用后出现新的“??”仅意味着帮助程序文件尚未跟上,并且需要再进行一次编译才能修复它。

发动机各排一排

有几个程序可以扮演“引擎”的角色。 pdfLaTeX 是具有最广泛期刊支持的经典选择。 XeLaTeX 添加了完整的 Unicode,并允许您使用系统上安装的字体。 LuaLaTeX 还支持 Unicode 并嵌入高级包的脚本语言。 Tectonic 是一种现代引擎,可以在您第一次需要时按需下载软件包。 Oleafly 将其捆绑在一起,因此无需先安装 TeX 发行版即可编译新项目。

对于大多数文档来说,差异并不重要;选择您期望的模板或场地并继续。当您需要谨慎选择时,请参阅引擎比较

当某件事实际上失败时

失败的编译会转储很长的日志,自然的本能是自下而上地阅读它。抵制那个。读取日志中的第一个错误并仅修复该错误;后来的错误通常是由第一个错误引起的级联噪声。如果连续两次成功编译后引用仍然打印“??”,则通常的罪魁祸首是“\label”或“\ref”名称中的拼写错误,而不是缺少传递。

返回 打开闭环