为什么参考文献必须交给机器管理
手写参考文献是个噩梦:你删掉第 5 条文献,后面所有编号都要重排;正文里「[7]」指向哪篇,全靠人肉核对。一旦文献超过十几条,出错几乎是必然的。
LaTeX 的思路和第 4 课的交叉引用完全一致:你只声明「这里引用了某篇文献」,编号交给编译器算。文献列表排在最前面或最后面,编号自动生成并自动同步到每一处引用。
要理解基本原理,先掌握最朴素的 thebibliography 环境;理解了它,迁移到工程化的 .bib 数据库方案就是水到渠成。
thebibliography:手动维护的文献表
thebibliography 环境放在文末,环境名后面跟着一个参数,用来告诉 LaTeX「文献编号最大是几位数」。写 \begin{thebibliography}{9} 表示编号最多一位数(1 到 9),宽度按一位数预留;超过九条就写 {99}。
环境里面,每条文献以 \bibitem{记号} 开头,记号 就是你给这篇文献起的引用名(如 lamport);\bibitem 后面紧跟着写出该文献的完整信息。
正文里则用 \cite{记号} 引用。编译后,\cite{lamport} 会输出「[1]」这样的编号,且编号与文献表里的顺序严格对应、自动同步。
\cite 与 \bibitem 的配对规则
规则只有一条却极其重要:\\cite{记号} 里的记号必须与某条 \\bibitem{记号} 完全一致。大小写、拼写、空格都算数。
一个 \cite 可以同时引用多篇文献,用逗号隔开:\cite{lamport,knuth} 会输出「[1, 2]」。也可以指定页码:\cite[p.~25]{knuth} 输出「[2, p. 25]」,方括号里的内容会出现在编号旁边。
另外,环境里 \bibitem 的排列顺序决定了编号顺序,而不是正文引用的先后。所以如果你希望按引用先后编号,就需要手动调整 \\bibitem 的次序——这正是下一节要介绍的 .bib 方案要自动解决的问题。
进阶路线:.bib 数据库与 BibTeX / biblatex
当文献多起来,把完整信息写在正文里会越来越乱。工程化方案是把文献信息抽出来,单独放进一个扩展名为 .bib 的数据库文件,每条文献只写一次,正文里只用 \cite 按记号引用。
配合的工具链有两条:传统 BibTeX(配 \bibliographystyle 与 \bibliography)和更现代的 biblatex + biber(配 \addbibresource 与 \printbibliography)。它们都能做到按引用先后自动排序、统一格式、去重。
原理你已经掌握了:无论工具怎么换,「正文 \cite + 文献条目按记号匹配 + 编号自动生成」这条主线始终不变。本站的真实编译环境同样支持完整的 BibTeX/biblatex 工具链,等你需要时再深入学习。
记号拼写不一致:\cite{lamport} 却写成了 \cicte{lamport}、\cite{Lamport},或者 \bibitem 那边拼错。逐一核对大小写。
缺少对应的 \bibitem:你 \cite 了一个从未在文献表里定义过的记号,LaTeX 只能显示一个问号。
编译遍数不足:和交叉引用一样,文献编号需要跑两遍;本站会自动处理,本地编译时再编一次即可。
thebibliography 环境列出文献,每条以 \bibitem{记号} 开头;正文用 \cite{记号} 引用,编号自动同步。
配对铁律:\cite 的记号与 \bibitem 的记号必须完全一致;\cite[a,b] 引用多篇,\cite[p.~5]{a} 带页码。
文献一多就上 .bib 数据库 + BibTeX/biblatex,但主线不变。最后一课,我们让 LaTeX 说中文。