支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-08-10 19:15:36 LaTeX BibTeX 参考文献 SCI论文
写SCI论文的时候,LaTeX的参考文献经常搞出一些让人抓狂的小问题。
比如你正文里明明引了爱因斯坦的论文,结果编译出来显示的编号不是[1]而是[3],或者整个参考文献列表的顺序完全不是按照你引用的先后顺序来的。这些问题说大不大,但投稿前改格式的时候遇到了,真的很搞心态。
先说编译顺序这件事。很多人——包括我当年——把 .tex 文件一写,跑一遍 pdflatex 就以为完事了,结果参考文献那部分要么全是问号,要么编号全乱。正常的流程是:先跑一遍 LaTeX,它会生成一个 .aux 文件,里面记录了所有的 \cite 命令;然后跑 BibTeX,它会根据 .aux 文件去 .bib 里提取对应的条目,生成 .bbl 文件;然后再跑两遍 LaTeX,把引用编号和文献列表真正写进 PDF 里。少一步都不行。
如果你用的是 latexmk 这种自动化工具,它会帮你处理这个顺序,但手敲命令的话很容易漏掉中间的 BibTeX 那一步。
再说 .bib 文件本身。有时候编号不对,纯粹是 .bib 里出错了。
最常见的坑是重复的 citation key。你从谷歌学术或者 Semantic Scholar 上复制粘贴条目,可能两个不同来源的条目用了同一个 key,BibTeX 读到后面那个会把前面的覆盖掉,但引用计数可能已经乱了套。排查的时候可以先把 .bib 文件精简到只有几条确定无误的条目,看看问题还在不在,逐步排除法定位。
还有一个容易被忽略的点,就是参考文献样式。如果你用的样式是 plain 或者 unsrt 之外的东西,搞不好它根本不按引用顺序排列。plain 样式是按作者姓氏字母排序的,你的引用顺序是 A -> C -> B,但文献列表里会按字母排成 A、B、C,编号自然就跟你预期的不一样了。
如果要严格按照引用顺序,得用 unsrt 样式。IEEE 期刊一般有自己的 IEEEtran 样式,那个也是按引用顺序的。在 \bibliographystyle 那一行指定错了,后面全白搭。
natbib 宏包这里其实容易踩坑。它提供了很灵活的引用命令,像 \citep、\citet 什么的,但如果你换了样式文件,有些样式跟 natbib 不兼容,编译的时候不会报错,只是编号悄悄出了问题。我一开始也以为是 bib 文件写错了,后来发现是宏包和样式搭配的问题。保险起见,如果你不需要作者-年份的引用格式,可以不用 natbib,直接用 LaTeX 原生的 \cite 命令配合 unsrt 或者 IEEEtran,反而更稳。
另外再说一个很多教程不会提的细节。手动修改 .bbl 文件这件事,永远不要干。你手动改了编号,下次重新编译 BibTeX 的时候,.bbl 文件会被重新生成,你的修改就没了。而且手动改容易引入不一致性,正文里的引用编号跟列表对不上,审稿人一眼就能看出来。
让 BibTeX 自己管这些事,你只管 .bib 条目的准确性就好。
我把两个典型场景的代码贴出来,直接拿过去改改就能用。第一个是只需要编号引用、按字母排序的情况,用的是 natbib 和 plainnat 样式:
\documentclass{article}
\usepackage{natbib}
\begin{document}
This is a sample document \cite{einstein1905}.
Another citation example: \cite{dirac1981}.
\bibliographystyle{plainnat}
\bibliography{references}
\end{document}
对应的 references.bib 文件大概长这样:
@article{einstein1905,
author = {Albert Einstein},
title = {{Über einen die Erzeugung und Verwandlung des Lichtes betreffenden heuristischen Gesichtspunkt}},
journal = {Annalen der Physik},
volume = {322},
number = {8},
pages = {132-148},
year = 1905,
publisher = {Wiley}
}
@book{dirac1981,
title = {The Principles of Quantum Mechanics},
author = {P.A.M. Dirac},
isbn = {9780198520115},
lccn = {81016590},
series = {International series of monographs on physics},
url = {https://books.google.com/books?id=uYpdAAAAMAAJ},
year = {1981},
publisher = {Clarendon Press}
}
第二个场景是按引用顺序排列,样式换成 unsrt 就行。正文里先引爱因斯坦后引狄拉克,出来的文献列表爱因斯坦就是[1],狄拉克就是[2]:
\documentclass{article}
\begin{document}
This is the first citation \cite{einstein1905}.
And here is the second citation \cite{dirac1981}.
\bibliographystyle{unsrt}
\bibliography{references}
\end{document}
总之,这些问题的根源就那么几个:编译顺序不对、样式指定错误、.bib 里有脏数据、手动干预了不该动的东西。排查的时候按这个顺序过一遍,基本上都能解决。
希望这些踩坑记录能帮你省点时间。
本文深入探讨LaTeX中实现文本下划线的四种核心方法:基础的`\underline`命令、精确控制的`\rule`命令、功能强大的`ulem`宏包以及数学模式下的处理技巧。无论短文本、长段落或公式,您都能找到最适合的下划线解决方案,优化您的文档排版。