LaTeX 第七课:排版参考文献

本文同时发布于微信公众号:两个少年的奇幻漂流(ID:Amazing_Adventure)

本期的主题是参考文献的排版,主要内容有:

  • LaTeX 排版参考文献的原理
  • 如何管理参考文献
  • BibTeX 引擎介绍
  • 参考文献的引用与排版

---

参考文献的排版是 LaTeX 自动化工具中最重要的一个。我使用 LaTeX 的最主要的两个原因就是优美的数学公式和省心的参考文献。我大二那年写实验报告,每次引用文献都要一条一条从 Google Scholar 上把条目复制下来自己粘贴在文末,文中的引用还要自己去手动打出作者的名字和年份,真的非常心累(当然我现在知道在 MS Word 中也有更好的解决方案)。我们也经常出现引错文章、作者名字写错、格式不正确、排序错误、文中引用和文末文献不对应等情况。我当时觉得,这些规则的细节都应该由计算机来掌握,而不应该用人工,因为人是会出错的。于是折腾了好久 LaTeX 之后,我再也不担心参考文献了。

当时的我花了数倍于同学们的时间学会了怎么用 LaTeX 排版参考文献,还被他们笑话过;两年之后,我的同学在写期末论文时还在用当年的方法一条一条贴参考文献,而我早已从苦海中逃离出来了。

本期主要针对的是需要撰写学术论文的大学生和科研工作者,相信对大家的高效写作会有很大的帮助。

---

如何管理参考文献

LaTeX 处理参考文献的逻辑是这样的。首先作者需要维护一个文献数据库,然后为每一篇文献加上标题、作者、年份、期刊名、哪一卷等信息,最重要的是给它一个独特的标签。在行文过程中,作者只需要像做交叉引用一样用一定的命令 (\cite) 去引用这个标签,LaTeX 的引擎 BibTeX 就会去查找数据库中对应的信息,然后生成引用,并在文末加上完整的文献条目。

所以现在我们需要解决的问题有两个:(1)如何获取文献的信息?(2)如何建立文献的标签并正确引用?

对于这两个问题我们只需要一个解决方案,就是一款文献管理软件!我目前用过的有 JabRef、Mendeley、BibDesk 和 Papers 3。其中前三款都是免费软件,Papers 3 是付费软件,但文献管理的功能更加强大,也是我现在使用的主力软件。这些软件的功能就是把文献信息抓取下来,并管理相应的附件(比如文献的 PDF 文件、视频、音频等)。同时,它们还会为你自动生成每个文献的标签,并提供一些快捷键将你需要的内容复制到剪贴板。这样你在写作时看到某个文章的观点想引用,只需要按下快捷键,然后到编辑器中粘贴就可以了,非常方便省心。

文献管理软件不仅可以方便大家写作,还可以方便大家阅读文献,并作一些标记和注释。Papers 3 还可以让大家自己写一些评论,并对文章进行分类整理。所以写作时你只需要开着这个管理软件和你的编辑器,就可以完成所有的事情了。

文献数据库是一个 .bib 文本文件,里面以一定的格式写明了每个文献的信息,我们来看看里面的样子:

@article{konishi:1999ab,
  author = {Konishi, Seiki and Nakajima, Kyoichi and Uchida, Idai and Kikyo, Hideyuki and Kameyama, Masashi and Miyashita, Yasushi},
  title = {Common inhibitory mechanism in human inferior prefrontal cortex revealed by event-related functional MRI},
  journal = {Brain},
  volume = {122},
  number = {5},
  pages = {981},
  year = {1999},
}

第一行的 article 表示文献类型,而 konishi:1999ab 则是标签。下面的内容应该就很容易看明白了。这些内容大多是直接从网上抓取的,所以一般情况下我们不太需要了解其中的细节。大家只需要知道,每一条文献记录都是像上面那样的就行了。如果发现文献信息有误,可以自己手动在里面修改。一般文献管理软件都自带导出功能,导出之后修改即可。这里需要注意的是作者那一栏。多个作者的信息是用 and 分隔的,逗号前是姓,逗号后是名。

---

BibTeX 引擎介绍

BibTeX 是专门用于处理参考文献的引擎。在首次编译的过程中,你使用的编译引擎(例如 XeLaTeX)会找到所有文献标签,这时文献的标签都没有对应的信息,因为 XeLaTeX 并不负责处理文献,只是把它存储在 .aux 文件中。在第一次编译完成后,BibTeX 就该上场了。它会在 .aux 文件中把这些标签收集起来,在文献数据库中查找信息,调用对应的格式,并生成一个后缀为“.bbl”的文献列表。当 XeLaTeX 再回来编译时,就会把文献列表添加在文档的末尾,但文中的引用还没有完成。最后再用 XeLaTeX 编译一次,就可以得到成品了。因此总的流程就是:

XeLaTeX -> BibTeX -> XeLaTeX -> XeLaTeX

BibTeX 调用格式的时候,其实是读取对应样式的 .bst 文件,依据这个文件生成内容。如果投稿的期刊有特殊的要求,只需要下载他们提供的 .bst 文件,然后用 \bibliographystyle 命令设置格式就好了(下面一小节会有介绍)。

---

参考文献的引用与排版

我本人的专业是心理学,因此在这里为大家主要介绍的是 APA 格式参考文献的排版技巧。不过一些排版的技巧都是类似的,大家可以举一反三一下。

排版参考文献有几个比较重要的命令:

  • \bibliographystyle{<样式名>},定义文献引用格式,在导言区使用;
  • \cite{<标签>} 系列命令,在行文中使用;依据需求不同会有不同的命令;
  • \bibliography{<文献数据库名>},在排版参考文献处使用,添加文献列表;

有时还需要调用一些宏包,比如 APA 格式就需要 apacite 宏包,其他格式可以使用 natbib 宏包。这些宏包中会有一些新增的样式和命令可以实现特定的效果。

apacite 宏包的使用可以参考它的宏包文档,下面我来列举一些常用的排版技巧。首先祭出一个例子(波浪线表示强制插入空格):

\documentclass{ctexart}
\usepackage{apacite}
\bibliographystyle{apacite}
\begin{document}
\citeA{konishi:1999ab} 进行了一项研究。

研究成果表明XXXXX~\cite{konishi:1999ab}。

这项 研究是由~\citeauthor{konishi:1999ab} 在~\citeyearNP{konishi:1999ab} 完成的。

\bibliography{example}
\end{document}

example.bib 文件如下:

@article{konishi:1999ab,
  author = {Konishi, Seiki and Nakajima, Kyoichi and Uchida, Idai and Kikyo, Hideyuki and Kameyama, Masashi and Miyashita, Yasushi},
  title = {Common inhibitory mechanism in human inferior prefrontal cortex revealed by event-related functional MRI},
  journal = {Brain},
  volume = {122},
  number = {5},
  pages = {981},
  year = {1999},
}

排版结果如下:

由于这篇文章的作者超过了5人,因此在首次引用时就采用了 et al. 的简写方式。如果作者较少,首次引用都需要写明所有作者的名字,在后面的引用时再用 et al. 简写。

通过上面这个例子我们可以看出如下命令的使用方式:

  • \cite{<key>}:(作者,年份)
  • \citeA{<key>}:作者(年份)
  • \citeauthor{<key>}:作者
  • \citeyearNP{<key>}:年份(NP后缀表示 no parentheses,没有括号)

下面是文档中的一个表格,有助于大家理解各种常用的命令(尖括号和方括号分别表示前缀和后缀):


另外大家会发现,参考文献本身也是一个 section,它的标题是 References。如果想改动,只需要在正文中使用如下命令

\renewcommand{\refname}{参考文献}

就可以把 section 的标题改过来。如果论文模板中,参考文献是以 chapter 级别呈现的,那么把 \refname 改为 \bibname 套回上面的命令中即可。

有时候我们需要在图表的标题中引用文献,这时需要注意在引用命令前加上 \protect,即

\caption{这是~\protect\citeA{konishi:1999ab}中的一幅插图}

如果不使用保护命令会出现编译错误。


---

排版参考文献的简单技巧大概就介绍到这里。另外 Google Scholar 搜索结果中点击“引用”选择“BibTeX”就可以获得该文献的 bibtex 格式信息。如果手动添加的话这也是一个不错的方式。但是 Google Scholar 经常出现期刊名不全这种情况,大家有条件还是通过 Elsvier,PubMed 等数据库来抓取文献信息吧!今天的内容几乎都是经验之谈,可能有的介绍不太全面,如果有什么遗漏之处欢迎大家留言~

下期我们将介绍一些关于模板的实践内容,会以美赛的模板为例向大家介绍如何使用拿到手的模板。

欢迎关注我们的微信公众号:两个少年的奇幻漂流(ID:Amazing_Adventure)

编辑于 2017-01-25 13:15