文献数据库与排序

.bib 文件是保存文献信息的纯文本数据库。每一篇文献写成一个 条目:用一种类型(如 @article)和一组字段(authortitle 等)记录原始数据,而不是版式。BibTeX 页面说明*如何运行工具*;本页则详细说明 .bib 文件本身的结构:条目类型、字段写法,以及参考文献列表最终按什么顺序输出。

.bib 文件最大的价值在于复用。认真写好一次,就能在多篇论文之间共享;投稿场所改变时,只需更换样式,不必改动数据。构建顺序(latex → bibtex → latex → latex)以及如何选择 .bst 样式,已在 [BibTeX 页面](/learn/bibliography/bibtex-page) 中说明,这里不再展开。

条目的形状

单个条目以 @ 和一个 类型 开头,随后在花括号中给出 引用键,再接着列出各个 字段。骨架如下:

references.bib
@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,再用 howpublishednote 补充。

现代 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 LastClaude E. Shannon),或姓在前的 Last, FirstShannon, Claude E.)。当 姓由多个词组成,或带有 “von / van der” 这样的 前缀 时,姓在前的形式最安全:写成 van der Plas, Geert 就能明确 “van der” 属于姓(若用自然顺序,则要像 Geert {Van der Plas} 那样用花括号把它作为一个整体保护起来)。

references.bib
@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),这样 NASATeX 这样的专有名词、缩写会被改坏成 NasaTex。把想保留的片段再用 一层额外花括号 包起来,例如 title = {On the {NASA} Mission to {TeX}},该范围就会免受大小写转换影响。

@string 宏与注释

如果同一个值反复出现,可以用 @string 定义一个 。定义好的名称可以在值的位置直接使用(不加花括号),并可用 # 与字符串连接。这对在期刊缩写名和全名之间切换很方便。

references.bib
@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)固定。 用户几乎没有可调空间;选择样式本身就等于选择排序方式。例如,plainalpha作者名的字母顺序 排列,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(标题)。常见选择如下:

选项键顺序含义
ntyname → title → year姓名、标题、年份(biblatex 默认)
nytname → year → title姓名、年份、标题(作者-年份制常用)
yntyear → name → title年份、姓名、标题(时间顺序)
ydntyear(降序)→ name → title从新年份到旧年份
none(不排序)正文中的引用顺序(相当于 unsrt)

简而言之:如果要保持引用顺序,在 BibTeX 中选择 unsrt 样式,在 biblatex 中选择 sorting=none。如果要按字母顺序,在 BibTeX 中使用 plain,在 biblatex 中使用默认的 nty(作者-年份制可用 nyt)。无论使用哪一种,都完全不需要重新排列 .bib 中的条目——顺序的决定完全是处理工具的工作。