LaTeX 和 BibTeX 之間的「協議」到底是什麼?
也就是說,如果我運行latex foo
、bibtex foo
、 和latex foo
,訊息到底如何從 LaTeX 流向 BibTeX 並返回?
我現在的猜測就是資料流如下:
- LaTeX 產生檔案
foo.aux
。 - BibTeX 讀取該檔案
foo.aux
。它只關注\citation{...}
,\bibstyle{...}
, 和形式的行\bibdata{...}
。 - BibTeX 產生檔案
foo.bbl
。 - 當 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 文件,例如使用multibib
orchapterbib
或 ... ,multibib
您必須執行主 aux 檔案和使用者定義的檔案;它還有擴展名 .aux 因為chapterbib
每一章都有一個 aux 檔案。這兩種情況都很容易處理:bibtex *.aux
.包也一樣bibunits
。