编译四次涉及到 LaTeX 和 BibTeX 协同工作时的原理。本质上,在 \bibliography 命令处出现的参考文献列表,是从后缀为 .bbl 的文件读取的;而 .bbl 文件则是由 BibTeX 编译后缀为 .aux 的文件之后产生的;.aux 文件则是 (pdf/Xe)LaTeX 编译后缀为 .tex 的文件产生的。所以整个流程是这样的。
(pdf/Xe)LaTeX 编译 .tex 文件
读取 \bibliographystyle 的信息,写入 .aux 文件;
读取散落在文中的 \cite 命令,写入 .aux 文件;
读取 \cite 命令的同时,尝试读入 .aux 文件中有关引用的标记,但是因为文件内无相关信息而失败(\cite 处出现问号);
读取 \bibliography 的信息,尝试读入 .bbl 文件,但是因为文件不存在而失败(不输出参考文献列表)。
BibTeX 编译 .aux 文件
读取刚才写入的信息,然后去 .bib 文件中查找相关的参考文献条目,生成 .bbl 文件。
(pdf/Xe)LaTeX 编译 .tex 文件
读取 \bibliographystyle 的信息,写入 .aux 文件(和第一步完全一样);
读取散落在文中的 \cite 命令,写入 .aux 文件(和第一步完全一样);
读取 \cite 命令的同时,尝试读入 .aux 文件中有关引用的标记,但是因为文件内无相关信息而失败(\cite 处出现问号,和第一步完全一样);
读取 \bibliography 的信息,尝试读入 .bbl 文件,此时第二步已经生成 .bbl 文件,读入成功,输出参考文献列表,同时将引用标记写入 .aux 文件。
(pdf/Xe)LaTeX 编译 .tex 文件
读取 \bibliographystyle 的信息,写入 .aux 文件(和第一步完全一样);
读取散落在文中的 \cite 命令,写入 .aux 文件(和第一步完全一样);
读取 \cite 命令的同时,尝试读入 .aux 文件中有关引用的标记,因为第三步最后写入了引用标记,所以文内引用处出现正确的引用记号;
(pdf/Xe)LaTeX 编译 .tex 文件
读取 \bibliographystyle 的信息,写入 .aux 文件;
读取散落在文中的 \cite 命令,写入 .aux 文件;
读取 \cite 命令的同时,尝试读入 .aux 文件中有关引用的标记,但是因为文件内无相关信息而失败(\cite 处出现问号);
读取 \bibliography 的信息,尝试读入 .bbl 文件,但是因为文件不存在而失败(不输出参考文献列表)。
BibTeX 编译 .aux 文件
读取刚才写入的信息,然后去 .bib 文件中查找相关的参考文献条目,生成 .bbl 文件。
(pdf/Xe)LaTeX 编译 .tex 文件
读取 \bibliographystyle 的信息,写入 .aux 文件(和第一步完全一样);
读取散落在文中的 \cite 命令,写入 .aux 文件(和第一步完全一样);
读取 \cite 命令的同时,尝试读入 .aux 文件中有关引用的标记,但是因为文件内无相关信息而失败(\cite 处出现问号,和第一步完全一样);
读取 \bibliography 的信息,尝试读入 .bbl 文件,此时第二步已经生成 .bbl 文件,读入成功,输出参考文献列表,同时将引用标记写入 .aux 文件。
(pdf/Xe)LaTeX 编译 .tex 文件
读取 \bibliographystyle 的信息,写入 .aux 文件(和第一步完全一样);
读取散落在文中的 \cite 命令,写入 .aux 文件(和第一步完全一样);
读取 \cite 命令的同时,尝试读入 .aux 文件中有关引用的标记,因为第三步最后写入了引用标记,所以文内引用处出现正确的引用记号;
读取 \bibliography 的信息,尝试读入 .bbl 文件,此时第二步已经生成 .bbl 文件,读入成功,输出参考文献列表,同时将引用标记写入 .aux 文件(和第三步完全一样)。
latex paper.tex
bibtex paper.aux
dvips paper.dvi
ps2pdf paper.ps