.bib 文件是保存文献信息的纯文本数据库。每一篇文献写成一个 条目:用一种类型(如 @article)和一组字段(author、title 等)记录原始数据,而不是版式。BibTeX 页面说明*如何运行工具*;本页则详细说明 .bib 文件本身的结构:条目类型、字段写法,以及参考文献列表最终按什么顺序输出。
.bib 文件最大的价值在于复用。认真写好一次,就能在多篇论文之间共享;投稿场所改变时,只需更换样式,不必改动数据。构建顺序(latex → bibtex → latex → latex)以及如何选择 .bst 样式,已在 [BibTeX 页面](/learn/bibliography/bibtex-page) 中说明,这里不再展开。
条目的形状
单个条目以 @ 和一个 类型 开头,随后在花括号中给出 引用键,再接着列出各个 字段。骨架如下:
@article{shannon1948,
author = {Shannon, Claude E.},
title = {A Mathematical Theory of Communication},
journal = {Bell System Technical Journal},
volume = {27},
number = {3},
pages = {379--423},
year = {1948}
}紧跟左花括号后的 shannon1948 是 引用键,也就是你自己决定的标识符,必须与正文中的 \cite{shannon1948} 完全一致(常见做法是 surname+year,但只要在文件内唯一即可)。之后是用 逗号分隔 的 fieldname = {value} 对;最后一个字段后面的逗号可写可不写。值可以放在花括号 { } 或双引号 " " 中,像 year = 1948 这样的纯数字也可以不加包裹。类型名和字段名 不区分大小写(@Article 与 @article 相同)。
条目类型
类型说明一篇文献 是什么:期刊论文、书籍,还是会议论文集中的发言稿。选择类型会告诉样式应当排哪些字段、按什么顺序排。下表列出经典 BibTeX 可用的标准类型。每种类型都有 必填字段(缺少时会警告)和 可选字段,这种对应关系由样式(.bst)规定。
| 类型 | 用途 | 主要必填字段 |
|---|---|---|
@article | 期刊或连续出版物中的论文 | author, title, journal, year |
@book | 有明确出版社的书籍 | author 或 editor, title, publisher, year |
@inproceedings | 会议论文集中的论文 | author, title, booktitle, year |
@conference | @inproceedings 的别名(兼容 Scribe) | (同 @inproceedings) |
@incollection | 论文集或编著中的有标题章节 | author, title, booktitle, publisher, year |
@inbook | 书籍的一部分(章节或页码范围) | author/editor, title, chapter 或 pages, publisher, year |
@phdthesis | 博士论文 | author, title, school, year |
@mastersthesis | 硕士论文 | author, title, school, year |
@techreport | 研究机构等发布的技术报告 | author, title, institution, year |
@manual | 技术或软件手册 | title(至少) |
@unpublished | 未发表的稿件或草稿 | author, title, note |
@misc | 不属于以上类型的其他资料 | 无必填项(用 note 等补充要素) |
有两组类型很容易混淆。@inbook 与 @incollection:前者是*一本书的一部分*(例如你自己书中的第 3 章),后者是*编者汇编的文集里由其他作者写成的独立篇章*。@inproceedings 与 @conference 在功能上相同,@conference 只是较早的 Scribe 兼容别名。学位论文按学位选择 @phdthesis 或 @mastersthesis。如果没有合适类型,就用 @misc,再用 howpublished 或 note 补充。
现代 biblatex 几乎涵盖了这些类型,并增加了更多类型:用于 Web 资源的 @online(别名 @electronic)、通用的 @report(用 type 字段说明如 “technical report”)、以及不限定学位层级的 @thesis(同样在 type 中写明种类)。@online 适合 arXiv 和预印本记录,并与后面介绍的 eprint 系字段配合使用。注意,这些较新的类型以 biber/biblatex 为前提;经典的 bibtex + .bst 可能无法理解。
字段的写法
字段是记录文献属性的 name = {value} 对。各种类型中最常见的字段包括:
author/editor— 作者或编者;多作者的写法在下一节详述。title— 标题:论文名、书名、章节标题等。journal/booktitle— 期刊名(@article),或所在书籍/会议论文集名(@inproceedings、@incollection)。year/date— 出版年份。经典 BibTeX 使用year(可加可选的month);biblatex 推荐 ISO 形式,如date = {2026-05-01}(只有年份的date = {2026}也可以)。volume/number— 卷/期。pages = {379--423}用 双连字符 表示范围(输出时为 en dash “–”)。publisher/institution/school— 出版社/(报告的)发布机构/(学位论文的)授予学位大学。doi/url— DOI(只写10.…主体)和 URL;样式会把它们渲染为链接。eprint/eprinttype/eprintclass— biblatex 的预印本字段。以 arXiv 为例:eprint = {2405.00001}、eprinttype = {arxiv}(旧称archivePrefix),以及表示学科的eprintclass(旧称primaryClass)。note/howpublished— 自由补充说明/“如何发布”(@misc条目的 URL 常放在这里)。
哪些字段 必填、哪些可选会因类型而异,最终由样式判断。缺少必填字段时 BibTeX 会警告;未知字段则会被(多数样式)静默忽略。因此,从外部元数据导入的额外字段通常不会造成问题。
作者名与花括号保护
author 是最容易写错的字段。多个作者要用 and 分隔(不是逗号)。每个人名可以用两种写法:自然顺序 First Last(Claude E. Shannon),或姓在前的 Last, First(Shannon, Claude E.)。当 姓由多个词组成,或带有 “von / van der” 这样的 前缀 时,姓在前的形式最安全:写成 van der Plas, Geert 就能明确 “van der” 属于姓(若用自然顺序,则要像 Geert {Van der Plas} 那样用花括号把它作为一个整体保护起来)。
@book{example2026,
author = {Knuth, Donald E. and Lamport, Leslie},
editor = {{The TeX Users Group}},
title = {On the {NASA} Mission to {TeX}},
publisher = {Addison-Wesley},
year = {2026}
}作者太多而不想全部列出时,在末尾写 and others,样式会把它转换成“等”或 “et al.”。另外,当作者是组织或团体(The TeX Users Group)时,惯例是用 双层花括号 {{...}} 包起来,避免其中的 and 被误认为人名分隔符。
实践中同样重要的是 保护大写字母。许多样式会把标题改成句首大写(sentence case),这样 NASA 或 TeX 这样的专有名词、缩写会被改坏成 Nasa 或 Tex。把想保留的片段再用 一层额外花括号 包起来,例如 title = {On the {NASA} Mission to {TeX}},该范围就会免受大小写转换影响。
@string 宏与注释
如果同一个值反复出现,可以用 @string 定义一个 宏。定义好的名称可以在值的位置直接使用(不加花括号),并可用 # 与字符串连接。这对在期刊缩写名和全名之间切换很方便。
@string{bstj = {Bell System Technical Journal}}
@article{shannon1948,
author = {Shannon, Claude E.},
title = {A Mathematical Theory of Communication},
journal = bstj,
year = {1948}
}关于注释,需要澄清一个常见误解:在 .bib 文件中,% 不是注释符号(这与 LaTeX 正文不同)。经典 bibtex 会 忽略条目(@...{})之外的所有文字,所以把备忘写成条目之间的普通文本通常没有实际影响。但 biber(biblatex 的后端)更严格,会对条目外的散文本发出警告。可移植的写法是 @comment{ ... },其中的内容会被完全跳过。
文献列表的顺序
条目在列表中出现的顺序,与它们在 .bib 中的书写顺序无关。决定方式按机制分为两类:
在经典 BibTeX 中,顺序由样式(.bst)固定。 用户几乎没有可调空间;选择样式本身就等于选择排序方式。例如,plain 和 alpha 按 作者名的字母顺序 排列,unsrt 按 首次引用顺序 排列,ieeetr 等工程类样式也采用引用顺序。即使数据相同,只要从 \bibliographystyle{plain} 改为 \bibliographystyle{unsrt},顺序就会改变。日文中,pbibtex / upbibtex 按码位排序(详见 [BibTeX 页面](/learn/bibliography/bibtex-page))。
在 biblatex 中,可以用 sorting= 选项显式控制顺序,并且它独立于样式,只需像 \usepackage[sorting=nyt]{biblatex} 这样指定即可。排序键用字母组合表示:n = name(姓名)、y = year(年份)、t = title(标题)。常见选择如下:
| 选项 | 键顺序 | 含义 |
|---|---|---|
nty | name → title → year | 姓名、标题、年份(biblatex 默认) |
nyt | name → year → title | 姓名、年份、标题(作者-年份制常用) |
ynt | year → name → title | 年份、姓名、标题(时间顺序) |
ydnt | year(降序)→ name → title | 从新年份到旧年份 |
none | (不排序) | 正文中的引用顺序(相当于 unsrt) |
简而言之:如果要保持引用顺序,在 BibTeX 中选择 unsrt 样式,在 biblatex 中选择 sorting=none。如果要按字母顺序,在 BibTeX 中使用 plain,在 biblatex 中使用默认的 nty(作者-年份制可用 nyt)。无论使用哪一种,都完全不需要重新排列 .bib 中的条目——顺序的决定完全是处理工具的工作。