从上一篇续下来,这篇专门记录 VSCode 里处理 BUAA LaTeX 毕设模板的参考文献环节。用这个模板写论文的同学应该都有体会:正文里的 \cite{} 敲起来并不难,难的是参考文献列表为什么有时候出不来、有时候编号全是问号、有时候编译能过但引用格式跟学校要求差一截。我也是从手动维护参考文献列表的坑里爬出来的,这篇就把我在 VSCode 里把参考文献这套链路理顺的过程拆开讲,包括工具链配置、.bib 文件维护、引用补全技巧以及 undefined citation 这种高频报错的排查思路。如果你正在用 VSCode 写含参考文献的 LaTeX 论文,这篇可以直接当操作手册用。
1. 先说清楚参考文献在 LaTeX 里要跑几趟,否则你永远在瞎试
很多人一上来就问“为什么我点了一次编译,正文里的引用位置没有东西”。根源往往不是模板问题,而是对 LaTeX 参考文献编译链路没有概念。LaTeX 不像 Word 那样打开文档就能在末尾看到现成的引用列表,它需要一套“选人—整理通讯录—回填信息”的多轮过程。
1.1 第一次编译:先让正文里的引用占个位
当你第一次用 pdflatex 或 xelatex 编译主文档时,LaTeX 实际上不会去读 .bib 文件。它只做一件事:扫描正文中的 \cite{key},把用到的引用 key 写进 .aux 辅助文件,并在正文里先留下一个占位符。如果你只用这一次编译,正文里那些 [?] 是正常的,参考文献列表也通常是空白的,因为 LaTeX 引擎根本还没有去找你的文献数据源。
这也是新手最常见的误解:以为编译一次就等于所有东西都齐了。我开始也是这么踩坑的,后来才理解 .aux 文件里那些 \citation{...} 行就是“参会名单”。
1.2 中间程序:BibTeX 靠名单去 .bib 里查资料
第二步需要调用 BibTeX 或 biber 这类后端程序。它会读取上一步产生的 .aux 文件,根据 \citation 里记录的 key,去你指定的 .bib 数据库里捞取对应的条目,并按照参考文献样式生成 .bbl 文件。
.bbl 文件才是真正会被 LaTeX 排进正文末尾的内容。你可以把它理解成“BibTeX 已经根据学校模板排好版的一份参考文献草稿”。我做了一个比较粗糙的类比:第一次编译是收集参会嘉宾名单,BibTeX 是拿着名单去通讯录补齐每个人的完整信息,最终再编成座位表。没有这一步,正文中只用一句 \bibliography{ref} 是不可能凭空变出文献列表的。
1.3 第二次第三次编译:才能把编号回填正确
生成 .bbl 后,还需要再次编译主文档,让 LaTeX 去读 .bbl 的内容,并把参考文献的编号真正确认下来。如果参考文献样式需要双向引索(例如正文引用编号和文献列表中的编号一一对应),通常需要再编译一次才能把引用关系稳定下来。所以完整的顺序是:latex -> bibtex -> latex -> latex。这也解释了为什么很多教程里反复强调“多编译几次”,不是因为玄学,而是因为 LaTeX 的状态是分散在不同辅助文件中的,一轮操作只能完成一个环节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. VSCode 里的编译配置:让 BUAA 模板的参考文献链路自动转起来
理解了多轮编译原理之后,你要做的事就变成:让 VSCode 里的 LaTeX Workshop 插件自动替你跑完上面那一串顺序。这个过程的核心是 tools 和 recipes 两个配置,很多同学配置文件写得不对,导致点一下编译按钮只是跑了一次 xelatex,参考文献自然永远不出来。
2.1 一个能实际跑通的标准 tools 配置
打开你的项目工作区,在 .vscode/settings.json 里可以这样写:
json复制{
"latex-workshop.latex.recipes": [
{
"name": "xelatex -> bibtex -> xelatex -> xelatex",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
}
],
"latex-workshop.latex.tools": [
{
"
