biber / biblatex

biblatex 是在 LaTeX 侧组装参考文献的现代宏包。经典 BibTeX 用 .bst 这种独特的小语言决定外观,而 biblatex 用 LaTeX 宏编写样式,原生处理 Unicode,并能细致控制排序和多个参考文献列表。负责读取和排序数据的搭档是 biber。在文档中,你用 \addbibresource 载入 .bib,用 \parencite\textcite 引用,再用 \printbibliography 输出列表。

biblatex 和 biber 是什么

二者很容易混淆,所以先把角色分开。biblatex 是一个 LaTeX 宏包,负责引用的显示方式和参考文献列表的格式。biber 是 biblatex 专用的 外部程序(后端):它读取 .bib 文件,对条目排序和处理,并把结果交给 biblatex 以便排版。可以把过去 BibTeX 的 .bst 承担的工作理解为现在拆成两部分:格式化交给 biblatex(LaTeX 侧)读取和排序交给 biber

biblatex 手册明确说明 biber 是“biblatex 的默认后端”。biber 能处理 us-ascii、8 位编码和 UTF-8,并支持按区域设置排序(sortlocale)。后端可用 backend= 选项选择,旧式的 bibtex/bibtex8 仍可指定,但若要利用 Unicode 和灵活排序,biber 实际上就是标准选择

最小设置(载入和输出)

用法分三步。在导言区用 \usepackage[...]{biblatex} 选择样式和后端,然后用 \addbibresource{refs.bib} 注册数据库。在正文中用 \cite 系列命令引用,并在需要出现参考文献列表的位置放置 \printbibliography

document.tex
\documentclass{article}
\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{refs.bib}   % preamble; the .bib extension IS included

\begin{document}

The theory was introduced by \textcite{shannon1948}.
Later work built on it~\parencite{knuth1984}.

\printbibliography

\end{document}

与 BibTeX 相比,最明显的两个差异 是:第一,数据库不是在正文末尾用 \bibliography{refs} 注册,而是在 导言区用 \addbibresource{refs.bib} 注册;第二,这里必须写上 .bib 扩展名(BibTeX 的 \bibliography 不写扩展名)。\addbibresource 可以写多次,因此可以把数据库分文件管理。

样式用一个 style= 选择。它是一个主选项,会同时载入 bibliography 样式(.bbx)和 citation 样式(.cbx。只有在想让两者不同的时候,才分别指定 bibstyle=(列表外观)和 citestyle=(引用外观)。.bib 文件本身的写法,即 @article 等条目和引用键,与 BibTeX 完全相同,会在单独页面详细说明。

引用命令

biblatex 的核心优势之一,是它有一组按含义选择的丰富引用命令。除了最基本的 \cite,还可根据上下文选择下面的命令。所有命令都能像 \parencite[prenote][postnote]{key} 一样接收前注(如“see”)和后注(如页码),也可以传入多个逗号分隔的键。

命令输出内容使用场景
\cite纯标签,不加内容(数字/字母数字样式中为方括号)嵌入正文的最小形式
\parencite整个引用放在圆括号中(数字/字母数字样式中为方括号)句末等位置的括号引用
\textcite作者名加带括号的标签,“Author (year)”把引用作为句子成分时
\footcite把整个引用放入脚注,并以句号结尾用脚注给出处的样式
\autocite样式决定的形式(也会自动移动标点)想交给样式并全局切换时
\citeauthor / \citeyear仅作者 / 仅年份在正文中只提到作者或年份时

当引用是句子的一部分时使用 \textcite,例如“as Knuth (1984) showed...”,这样作者可处在主语位置。\parencite 则相反,用于句末等位置安静的括号引用。\autocite 高一层抽象:它表现得像 \parencite 还是 \footcite(数字样式中可为 \supercite),由 autocite= 选项切换。autocite=plain 让它像 \citeautocite=inline\parenciteautocite=footnote\footciteautocite=superscript 则给出上标形式(实际中各样式会设置合理默认值)。

若要一次引用多篇文献,并且每篇都有自己的前注/后注,可以使用 \parencites\autocites复合引用(multicite)形式:\parencites[35]{key1}[88--120]{key2}{key3} 会给每个条目附上单独的后注。

样式体系

biblatex 自带通用样式;只要把名称传给 style=,整体外观就会改变。主要样式如下。每一种都会同时切换引用外观(.cbx)和列表外观(.bbx)。

样式引用外观特点
numeric像 [1] 这样的编号默认。相当于 LaTeX 标准编号式。numeric-comp 会压成 [1–3]
alphabetic像 [Jon95] 这样的字母数字标签类似 BibTeX 的 alpha;由作者和年份生成短标签
authoryear像“Doe 1995a”这样的作者-年份同作者同年加 a、b…;-comp 会合并作者
authortitle作者加短标题人文学科常见;不突出年份
verbose首次引用为完整书目信息,之后为短形式适合在脚注中给详细出处的样式

除此之外,还有大量分领域样式:工程领域的 ieee,心理学等领域的 apa(biblatex-apa 宏包),自然科学的 naturescience,芝加哥格式的 chicago(biblatex-chicago),法学的 oscola,人文学科的 mla 等等。它们可让你无需编写 .bst 就贴近会议或期刊格式,其中许多可从 CTAN 安装。

还可以用载入时的选项进一步调整外观。sorting= 选择顺序(nty = 姓名、标题、年份为默认;nyt = 姓名、年份、标题;ynt = 年份、姓名、标题;none = 保持引用顺序),maxbibnames / maxcitenames 设置在用“et al.”省略前显示多少作者,backref=true 添加从每个条目回到引用位置的反向引用。maxnames 是统一设置这些项的主选项。

构建流程(使用 biber)

这是 BibTeX 用户最先绊倒的地方。要正确生成 biblatex 参考文献,经典顺序是 latex → biber → latex → latex。需要多次运行的原因与 BibTeX 相同:引擎和 biber 通过辅助文件交换数据;但关键差别在于调用的是 biber,不是 bibtex。使用 pdflatex 时也一样,只需把 latex 换成 pdflatex

terminal
$ pdflatex document.tex   # 1st pass: records cited keys
$ biber    document        # NOT bibtex: reads .bcf + .bib, sorts/processes
$ pdflatex document.tex    # pulls in the processed data
$ pdflatex document.tex    # resolves all references

传给 biber 的不是 .tex,而是作业名(无扩展名)。biber 读取 biblatex 写出的控制文件 .bcf(XML)。常见失败是编辑器或 latexmk 仍然配置为调用 bibtex,结果出现未定义引用警告或空白文献列表。选择 backend=biber 后,工具链也要指向 biber。手动跑四次很繁琐,实际工作中通常交给 latexmk

terminal
$ latexmk -pdf document.tex   # detects biblatex and runs biber automatically

较新的 latexmk 会检测 biblatex 并自动调用 biber,通常一次启动就能完成所需的反复运行(在旧环境中,需要在 .latexmkrc 里和 $pdf_mode 等一起写入使用 biber 的设置)。日文文档通常用 upLaTeX 等排版,经 DVI 再用 dvipdfmx 生成 PDF;由于 biber 支持 Unicode,给出 sortlocale=ja_JP 就能正确处理日文排序(也常用 langid 字段把日文和西文参考文献列表分开)。

为什么选择 biblatex 而不是 BibTeX

biblatex/biber 之所以适合新项目,是因为它正面解决了 BibTeX 的结构性限制。具体来说:

  • 完整 Unicode 支持。 biber 直接处理 UTF-8,多语言作者名和重音符号不再麻烦。
  • 样式用 LaTeX 编写。 格式由 LaTeX 宏和载入选项控制,不必编写面向栈的 .bst 语言。
  • 灵活排序和本地化。 sorting=sortlocale 可精确控制顺序和语言。
  • 多个参考文献列表。 \printbibliography[type=...][keyword=...] 可按类型或主题拆分列表。
  • 丰富的引用命令。 \textcite\parencite\autocite 等让你按含义一致地引用。

最后一点“多个列表”在实际工作中特别有用:例如把一手资料和二手文献分开,或按论文类型分组,而且不必改动数据。\printbibliography 的筛选包括 type=(只取某类条目)、nottype=(排除该类)、keyword= / notkeyword=(按 .bib 中的 keywords 字段筛选),以及 heading= / title=(设置标题)。

document.tex
\printbibliography[type=article, title={Journal articles}]
\printbibliography[type=book,    title={Books}]
\printbibliography[keyword=primary, title={Primary sources}]

如果你熟悉 BibTeX 时代的 natbib,\usepackage[natbib=true]{biblatex} 会提供 \citep\citet 等 natbib 风格别名,便于迁移。