LaTeX 和 BibTeX 之間的介面是什麼?

LaTeX 和 BibTeX 之間的介面是什麼?

LaTeX 和 BibTeX 之間的「協議」到底是什麼?

也就是說,如果我運行latex foobibtex foo、 和latex 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

是的,對於具有一個 aux 檔案的預設情況。但可以有 2 個或更多 aux 文件,例如使用multibiborchapterbib或 ... ,multibib您必須執行主 aux 檔案和使用者定義的檔案;它還有擴展名 .aux 因為chapterbib每一章都有一個 aux 檔案。這兩種情況都很容易處理:bibtex *.aux.包也一樣bibunits

相關內容