natbib

natbib 是在继续使用经典 BibTeX 的同时实现作者-年份引用的标准宏包。它重写标准 \cite,区分作为句子一部分的文本式 \citet(Jones et al. (1990))和放在圆括号中的 \citep(Jones et al., 1990))。它同时支持作者-年份和数字样式,并附带专用样式 plainnatabbrvnatunsrtnat。本页介绍丰富的引用命令及输出示例、改变括号和分隔符的选项,以及它与更新的 biblatex 的关系。

载入和文献样式

在导言区用 \usepackage{natbib} 载入 natbib。参考文献列表的外观用 \bibliographystyle 选择,通常指定 natbib 自带的 plainnatabbrvnatunsrtnat。它们分别对应标准 plainabbrvunsrt 的 natbib 版本,关键是在作者-年份和数字模式下都可使用。文献数据放在 .bib 文件中,用 \bibliography{filename} 读入。

document.tex
\documentclass{article}
\usepackage{natbib}
\bibliographystyle{plainnat}
\begin{document}

The design of \TeX{} is described in detail by \citet{knuth1986}.
This result has been confirmed elsewhere \citep{lamport1994}.

\bibliography{refs}
\end{document}

流程与普通 BibTeX 相同。运行 latex(或 pdflatex)→ bibtexlatexlatex,也就是 LaTeX、BibTeX、再 LaTeX 两次,引用和参考文献列表就会解析完成。包含日文文献时,用 pbibtex / upbibtex 代替 bibtex。详情见 BibTeX 页面。

两个基本命令 — \citet 和 \citep

natbib 的核心是两个命令:文本式 \citet括号式 \citep\citet{key} 把作者名作为句子的一部分输出,只把年份放进括号(Jones et al. (1990)),因此可作主语:“Jones et al. (1990) showed that...”。\citep{key} 把整体放入括号((Jones et al., 1990)),通常接在句末。普通 \cite 在作者-年份模式下像 \citet,在数字模式下又像 \citep,所以使用 natbib 时最好避免 \cite

可选参数用于附加注记。一个注记会成为后注(在引用后):\citep[chap.~2]{key} 输出 (Jones et al., 1990, chap. 2)。两个注记则分别为前注和后注\citep[see][p.~5]{key} 得到 (see Jones et al., 1990, p. 5)。若只要前注,把后注留空:\citep[see][]{key} 得到 (see Jones et al., 1990)~ 是不可断空格,防止注记处换行。

latex
The algorithm is due to \citet{knuth1986}.
It runs in linear time \citep[Theorem~3]{knuth1986}.
See the discussion of line breaking \citep[see][chap.~2]{knuth1986}.
Similar ideas appear elsewhere \citep{knuth1986,lamport1994}.

引用命令家族

natbib 以 \citet / \citep 为起点,提供按用途设计的变体。下表展示作者-年份模式下的输出示例(引用键 jon90 表示 Jones、Baker 和 Williams,1990)。带星号\citet* / \citep* 不用“et al.”省略,而是输出完整作者列表\citealt / \citealp 输出不带括号的同样内容。\citeauthor 只给作者名,\citeyear 只给年份,\citeyearpar 返回括号中的年份。

命令输出示例用途
\citet{jon90}Jones et al. (1990)文本式;作者作主语
\citep{jon90}(Jones et al., 1990)括号引用
\citet*{jon90}Jones, Baker, and Williams (1990)完整作者列表(文本式)
\citep*{jon90}(Jones, Baker, and Williams, 1990)完整作者列表(括号式)
\citealt{jon90}Jones et al. 1990无括号,文本式
\citealp{jon90}Jones et al., 1990无括号;只输出括号中的内容
\citeauthor{jon90}Jones et al.仅作者名
\citeauthor*{jon90}Jones, Baker, and Williams仅完整作者列表
\citeyear{jon90}1990仅年份
\citeyearpar{jon90}(1990)年份放入括号

\citealp 顾名思义就是去掉括号的 \citep,也可接受注记:\citealp[chap.~2]{jon90} 输出 Jones et al., 1990, chap. 2。若要在括号中混合自由文本和引用,\citetext{...} 很方便;\citetext{priv.\ comm.} 会得到 (priv. comm.)\citefullauthor{key}\citeauthor* 相同,返回完整作者列表。

句首大写 — \Citet / \Citep

当作者名中有 “van der” 或 “della” 这样的 von part 时,\citet{dRob98} 会保持小写,输出 della Robbia (1998)。在句首需要大写,因此 natbib 提供了会强制首字母大写的大写变体。使用 \Citet\Citep\Citealt\Citealp\Citeauthor 这些首字母大写的命令(也有星号形式)。

命令输出示例
\citet{dRob98}della Robbia (1998)— 普通形式(保持小写)
\Citet{dRob98}Della Robbia (1998)— 句首用
\Citep{dRob98}(Della Robbia, 1998)
\Citealt{dRob98}Della Robbia 1998
\Citealp{dRob98}Della Robbia, 1998
\Citeauthor{dRob98}Della Robbia

多重引用和数字模式

可以用逗号分隔一次引用多篇文献。在作者-年份模式中,同一作者但年份不同的相邻条目会合并,不重复作者名。\citep{jon90,jam91} 得到 (Jones et al., 1990; James et al. 1991)\citep{jon90,jon91} 得到 (Jones et al., 1990, 1991),同一作者同一年时 \citep{jon90a,jon90b} 得到 (Jones et al., 1990a,b)

用 natbib 把同一篇稿件切换到数字式也不必改正文。传入 \usepackage[numbers]{natbib} 这样的选项,或使用 \setcitestyle{numbers}\citet / \citep 的输出就会变为编号。在数字模式下,\citet{jon90} 变为 Jones et al. [21]\citep{jon90} 变为 [21],带注记的 \citep[chap.~2]{jon90} 变为 [21, chap. 2]。选择 \usepackage[super]{natbib} 可得到 Nature 等期刊使用的上标编号。注意数字模式下不建议给 \citet 传入多个引用。

括号和分隔符选项

引用的外观:括号类型和分隔符可通过宏包选项全局设置。括号:round(默认圆括号)、squarecurlyangle。多重引用之间的分隔符:semicolon(默认)或 comma。模式:authoryear(默认)、numberssuper。还有 sort 用于按参考文献列表顺序排列编号,sort&compress 用于把连续编号压成范围(如 3–6, 15),以及不排序只压缩的 compress

latex
\usepackage[square,numbers,sort&compress]{natbib}

其他选项包括 longnamesfirst(每篇文献首次引用时输出完整作者列表)和 sectionbib(与 chapterbib 结合时把参考文献列表做成 \section*)。colonsemicolon 作用相同,是早期术语错误留下的名称。

载入后想改变样式时,使用 \setcitestyle{...}(natbib 8 添加),传入逗号分隔的关键字。模式:authoryear / numbers / super;括号:round / squareopen={(}close={)};分隔符:semicolon / commacitesep={;};作者与年份之间用 aysep={,};年份之间用 yysep={,};后注前用 notesep={, }。例如可用 \setcitestyle{square,aysep={},yysep={;}} 进行细调。

较旧的 \bibpunct 也能做同样调整。在导言区使用,接受一个可选参数加六个必需参数:依次为开括号、闭括号、多重引用分隔符、模式指定(数字式为 n,上标为 s,其他为作者-年份式)、作者与年份之间的标点、共享作者时年份之间的标点。默认是 \bibpunct{(}{)}{;}{a}{,}{,}(开头的可选参数是后注前的字符)。由于 \setcitestyle 更易读,新文档建议使用 \setcitestyle

natbib 和 biblatex

natbib 长期扮演着在保留传统 BibTeX 资产的同时通向作者-年份引用的桥梁角色。它的优势是可以继续使用现有 .bib 文件、.bst 样式和 BibTeX 程序,许多学会和出版社至今仍以 natbib 为前提。

更新的替代方案是 biblatex(与 biber 后端配合)。biblatex 在 LaTeX 侧灵活控制排序和格式,并为多语言与本地化输出而设计。如果新项目可以自由选择,biblatex 也是强有力的选项;但投稿规则要求 natbib(或特定 .bst)时,就使用 natbib。二者不能同时使用,因此只能二选一。详情见 biber / biblatex 页面。