正如过去无数的问题/答案所指出的那样,当有参考文献、目录/LOF 等时,LaTeX 要求你至少编译两次。许多这些情况已在以下问题的答案中记录:在哪些情况下您需要多次编写一份文档?
避免这一额外步骤的努力在特定情况下取得了成功,例如 我怎样才能避免编译两次? 然而,这是我们今天视为理所当然的做法,只需开发脚本和宏即可自动化该过程,从而减轻痛苦。
答案[关于移动到上一页的问题]暗示早期计算机的内存限制是 TeX 最初以这种方式构建的主要原因。稍后可能需要的信息被简单地存放在任意数量的辅助文件中,并在下一次传递时调用。一旦页面“完成”,编译器就会将其遗忘。
我经常想:鉴于计算机处理和内存能力的进步,LaTeX 是否有可能/现实/计划在内存中保留更多文档以避免多次编译?
将整个文档保存在内存中会占用大量内存,也许一些非常大的文档无法采用这种方式(也许这必须是一种可选行为)。但似乎排版的许多方面都会受益于这种增强的编译。
我意识到这触及了 (La)TeX 是什么以及它是如何构建的。这不是一个简单的补丁;它可能需要重写整个核心(或者真的需要吗?)。当然还有其他问题(这真的会减少编译时间吗?);我很高兴能找到另一个讨论这个问题或相关问题的地方。(LaTeX3 是否考虑过这个问题?)
答案1
正如 Joseph 所说,这不是 latex 的功能,而是 tex 的功能(与 xetex 和 luatex 共享),因此在任何称为 latex 的东西中都没有可行的方法来实现这一点。另外,我不认为内存限制总体上存在如此大的差异:人们的期望增长速度甚至比硬件容量更快。看到对 tikz externalize 的需求,因为包含一些 tikz 图片的文档很快就会占用大量内存,即使在现代硬件上也是如此。
但实际上,任何允许向前和向后引用的系统都在存储信息某处。您可能认为将 latex 存储在磁盘上的 .aux 文件中是非常 20 世纪 70 年代的做法,但 .aux 文件可能位于 SSD 或主内存中的虚拟文件系统上,并且访问它不会有任何实际障碍,并且正如您所说,您可以用 make 或 latexmk 或 arara 或 context 或只运行 latex 4 次的批处理文件替换“latex”,因此如果用户需要的话,最终效果可以是一次编译。
当然,只有当您能够毫无错误地编写完整的文档并且不需要多次处理时,一次性完成才会真正有益。如果您使用编辑/编译/预览循环,那么这只会造成麻烦,因为它会减慢循环速度。