LaTeX 和 BibTeX 之间的接口是什么?

LaTeX 和 BibTeX 之间的接口是什么?

LaTeX 和 BibTeX 之间的“协议”究竟是什么?

也就是说,如果我运行latex foobibtex foolatex foo,信息究竟如何从 LaTeX 流向 BibTeX 并流回?


我的当前猜测数据流如下:

  1. LaTeX 生成文件foo.aux
  2. BibTeX 读取文件foo.aux。它只关注\citation{...}\bibstyle{...}和形式的行\bibdata{...}
  3. BibTeX 生成文件foo.bbl
  4. 当 LaTeX 注意到foo.bbl存在时,\bibliography命令的行为就像\input{foo.bbl}

这是准确的吗?还是还有更多内容?例如,\citation{...}始终是一行文本?

是否有一些常用的文档类和包会以某种方式影响协议?显然情况biblatex会有所不同,但有什么不太明显的地方需要注意吗?


背景:我有兴趣编写一个脚本,可以将其用作 BibTeX 的替代品(从 LaTeX 的角度来看,没有任何变化,但文件的生成foo.bbl会有所不同)。

答案1

您的猜测或多或少是正确的,包括biblatex稍微改变方法的事实(其他软件包也会对其进行修改,但程度不同)。以最简单的单个.tex文件的情况为例,不需要多个参考书目或类似内容:

  • \bibliographystyle\bibstyle{...}将该行写入.aux文件:因此可以在序言中给出
  • \bibliography\bibdata{...}将该行写入文件,并且如果文件可用的话,.aux还输入文件。.bbl
  • \cite\citation{...}向文件中写入一行.aux,并在 LaTeX 文档中创建引用
  • \nocite\citations{...}一行写入.aux文件,但不在 LaTeX 文档中执行任何操作。

当 BibTeX 读取.aux文件时,它会查找一行\bibstyle\bibdata多行\citation。然后它会写入一个.bbl文件,但写入的内容取决于.bst文件中的指令。通常的惯例是.bbl文件将只包含bibliography保存格式化引文的环境,尽管情况并非总是如此。

此工作流程可以添加许多内容。例如,biblatex定义\bibliography要在序言中使用,因为它不是使用.bbl包含数据的文件进行直接打印。可以使用多个.aux文件创建一组.bbl文件来创建多个参考书目。我还看到了一种实现,其中参考书目的 XML 版本被写为.bbl文件内的 LaTeX“注释”。这些方法仍然使用相同的底层接口,因为 BibTeX 仍然在文件中查找相同的命令.aux并写入.bbl文件。


以 为例multibib,在 LaTeX 端它为每种新的参考书目类型定义了一组命令,例如

\newcites{sec}{Secondary Literature}

创建一个新的引用命令

\citesec{...}

这些新命令会写入与.aux主文件不同的文件,这意味着 BibTeX 必须运行两次,一次在文件上运行\jobname.aux,一次在sec.aux。这将生成 .bbl文件\jobname.bbl和,然后分别由和sec.bbl正常读取。因此,整个过程与标准情况几乎没有变化,只是涉及的文件更多了。\bibliography\bibliographysec

答案2

是的,默认情况下只有一个辅助文件。但可以有 2 个或更多辅助文件,例如使用multibibchapterbib或 ...multibib您必须运行主辅助文件和用户定义的文件;它的扩展名也是 .aux 因为chapterbib每个章节都有一个辅助文件。两种情况都很容易处理:bibtex *.aux。包也一样bibunits

相关内容