使用 biblatex 和 hyperref 时如何编译

使用 biblatex 和 hyperref 时如何编译

使用biblatex和hyperref时如何编译?

目前我使用lualatex-biber-lualatex-lualatex

我不知道为什么,我在想它可以减少到可能吗biber-lualatex

PS: 我使用 TeX Live 2022 + VS code +乳胶工作坊

答案1

(接下来我将为 pdfLaTeX、XeLaTeX 或 LuaLaTeX 调用编写 LaTeX。)

一般来说,不是的,编译顺序不能简单地简化为 Biber+LaTeX。

具体细节要稍微复杂一些。

  • LaTeX 只会从头到尾读取文件并按顺序处理。LaTeX 无法预测将来的内容。为了能够正确支持对文档中稍后出现的对象的引用(例如 a\ref到 a\section \label或目录),LaTeX 依赖于每次运行 LaTeX 时生成的辅助文件,这些文件由后续运行的 LaTeX 读取。另请参阅了解引用和标签的工作原理

    实际上,这意味着,假设辅助文件不存在,则带有交叉引用、目录和类似对象的文档需要两次 LaTeX 编译运行。如果辅助文件已经存在,则只需要第二次运行,LaTeX 需要使用辅助文件中尚不存在的前瞻信息或前瞻信息已更改。LaTeX 有一个检测机制,如果需要另一次 LaTeX 运行,它会发出警告。

  • LaTeX 不能.bib直接理解文件。这些文件需要由外部参考书目工具(如 Biber 或 BibTeX)准备。这需要 LaTeX 和外部工具之间的通信,这又通过辅助文件实现。在第一次运行 LaTeX 时,LaTeX 会创建一个辅助文件,告诉 Biber/BibTeX.bib您的文档中使用了哪些文件、这些文件中的哪些条目被引用以及文档需要参考书目条目的哪些信息/样式。参考书目工具会读取此辅助文件并处理这些.bib文件。然后,它会生成另一个包含参考书目数据的辅助文件。然后,后续的 LaTeX 运行可以读取此辅助文件。另请参阅使用问号或粗体引用关键字代替引用编号

    这意味着你至少需要一个编译序列

    • 乳胶
    • Biber/BibTeX
    • 乳胶

    假设不存在辅助文件。由于最后一次 LaTeX 运行可能需要前瞻信息,因此有效的最小编译序列实际上是

    • 乳胶
    • Biber/BibTeX
    • 乳胶
    • 乳胶

    根据先前的观察。

    每次更改文档的任何内容时,无需重新运行整个编译周期。但是,一旦更改与引用或参考书目相关的内容,就需要先运行 LaTeX,然后运行 ​​Biber,再运行一到两次 LaTeX。同样,有一些检测机制可以告诉您是否需要重新运行。

一般来说,文档的完整编译序列至少涉及 LaTeX、Biber、LaTeX、LaTeX。但假设辅助文件仍然存在,则并非对文档所做的每项更改都需要重新运行整个周期。对于非常小的更改,您可能只需运行一次 LaTeX 即可。通常,LaTeX 应该会在日志输出中告诉您需要重新运行哪些内容。此“自动重新运行警告”功能非常可靠,但它并不总能捕获所有重新运行要求。因此,如果您想稳妥行事,请在生成文档的最终版本之前至少运行 LaTeX、Biber、LaTeX、LaTeX。

如果您担心在不需要运行整个过程时运行 LaTeX-Biber-LaTeX-LaTeX 循环,请查看精彩的latexmk工具.latexmk具有先进的启发式方法,可以尝试准确检测需要哪些 LaTeX/Biber/任何运行才能产生稳定的输出。


只是想补充一下,如果没有辅助工具,如果我们在文档上运行 Biber+LaTeX,会发生什么情况。

Biber 会抛出错误,因为它需要 LaTeX 运行中的辅助文件才能完成工作。后续的 LaTeX 运行将无法生成参考书目,但它会为 Biber 生成所需的辅助文件。

如果您再次运行 Biber+LaTeX(中间不删除辅助文件),Biber 会将参考书目编译为辅助文件,随后的 LaTeX 运行将能够生成参考书目。参考书目和引文的交叉引用可能会关闭,因为这至少需要再运行一次 LaTeX。

相关内容