出现此问题时,一般网络上给的方法是按顺序进行四次编译,但我个人遇到的情况并非如此,将在后面进行说明。
首先的四次编译即:
pdflatex
bibtex
pdflatex
pdflatex
其相关原理我找到了一篇帖子进行了说明,这里进行引用
编译四次涉及到 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 文件中有关引用的标记,因为第三步最后写入了引用标记,所以文内引用处出现正确的引用记号;
读取 \bibliography 的信息,尝试读入 .bbl 文件,此时第二步已经生成 .bbl 文件,读入成功,输出参考文献列表,同时将引用标记写入 .aux 文件(和第三步完全一样)。
这就是为什么要编译四遍才有完整结果。
具体如果使用sublime作为编辑器的话,上面的bibtex编译是需要通过将builder改为latexmk实现的,不能在编辑器里通过build with选择实现。
但上面的问题并不是我出现的问题,该问题在我这里的情况是之前用elsevier模板写的可以实现,而这次test写了一个简单的tex就出现了这个问题,于是对比以前的tex文件发现,是由于缺少了
\bibliographystlye{你的选择}
该行命令的缺失导致在编译时无法明确style,因此生成的bbl文件为空,出现了citation undefined的问题。在文件中加入
\bibliographystlye{IEEEtran} %我选择的IEEE Trans类别
即可。
参考资料:
https://tieba.baidu.com/p/3703720810?red_tag=1424465789&traceid=