使用 BibTeX 和 pdfLaTeX:为什么需要运行三次 LaTeX?

使用 BibTeX 和 pdfLaTeX:为什么需要运行三次 LaTeX?

如果我使用 pdfLaTeX 编译三次,我就可以同时使用 BibTeX 和 pdfLaTeX。这似乎很荒谬,但似乎得到了以下证实:先前这个问题

那是:

  1. 使用 pdflatex 进行编译以生成.auxBibTeX 需要的文件 - 参考文献现在将显示为“?”
  2. 使用.aux文件作为参数运行 BibTeX
  3. 再次使用 pdfLaTeX 进行编译 - 引用仍然显示为“?”
  4. 再次编译 - 现在可以使用 [] 中的内联数字进行引用。

这确实有效,而且显然是一种方法 - 但这肯定不是唯一的方法?我的理解是,LaTeX 和所有衍生产品最初都来自 Donald Knuth,他是有史以来最伟大的计算机科学家之一。这种重复似乎很荒谬,而且使用 Python 脚本更容易做到这一点。

答案1

该过程的机制描述于了解引用和标签的工作原理使用问号或粗体引用关键字代替引用编号,但这也许不能立即解释为什么它对于传统的 BibTeX 用途如此。

至少需要BibTeX 的运行源于三个相关因素:

  • 需要从单独的文件中提取参考文献
  • 需要为内部“链接”设置交叉引用
  • 内存限制

在传统的 BibTeX 工作流程中,第一次运行没有可用的引文,因此将其写入文件以供 BibTeX 稍后提取。第一次运行发生这种情况(因此在latexbibtexIE在第二次 LaTeX 运行中),参考文献由文件插入.bbl(这只是一些“要排版的内容”)。通常,这是在文件末尾,因此(通常)较早的引用无法“知道”将使用哪些参考编号。在第二次运行结束时,必要的数据将写入文件,并在第三次 LaTeX 运行期间读取。

由于可能始终存在前向引用,因此至少需要运行两次。但是,可以避免运行。如果在文档开头读取所有引用数据,则可以分配参考编号第二次排版运行开始。这允许通过工作流程解决引用问题

  • 乳胶
  • BibTeX(或 Biber:见下文)
  • 乳胶

此工作流程由 实现biblatex,如今 Biber “后端”比 BibTeX(程序)更受欢迎。它需要足够的内存,以便在排版运行期间保存所有引文数据:今天还不错,但在设计经典 BibTeX 工作流程时(20 世纪 80 年代),内存就差远了。(请注意,文档结构的其他部分可能需要运行三次:例如,如果\tableofcontents参考书目后有和任何部分,那么只有在运行三次后,这些部分才会有正确的页码。)

请注意,在传统工作流程中,只有实际使用的交叉引用才会保存在内存中,因为只有这些才会写入中间文件。这也会影响更一般的交叉引用业务:TeX 会“按原样”发送页面,因此可以无法通过一次传递来处理“备份”来解决引用。

相关内容