Skip to content

特色工具与功能

本章将介绍 LaTeX 中的一些特色辅助功能,包括参考文献管理、索引生成、颜色使用和超链接等,这些功能可以帮助我们创建更加专业和易用的文档。

参考文献与 BIBTEX 工具

基础参考文献与引用

LaTeX 提供 \cite 命令用于在正文中引用参考文献:

latex
\cite{<引用标签>}

参考文献由 thebibliography 环境管理:

latex
\begin{thebibliography}{<最宽标签>}
    \bibitem[<条目编号>]{<引用标签>}...
\end{thebibliography}

示例:

latex
\documentclass{article}
\begin{document}
\section{引言}
Part1~\cite{germenTeX} 提出了...

\begin{thebibliography}{99}
\bibitem{germenTeX} H.~Part1:\emph{German \TeX}, TUGboat Volume~9,Issue~1(1988)
\end{thebibliography}
\end{document}

cite

BIBTEX 数据库

BIBTEX 是一种流行的参考文献数据格式,以 .bib 为扩展名,每条文献条目格式如下:

@<type>{<citation>},
    <key1>={<value1>},
    <key2>={<value2>},

}

其中 <type> 为文献的类别,如 article 为学术论文,book 为书籍,incollection 为论文集中的某一篇,等等。<citation>\cite 命令使用的文献标签。在 <citation> 之后为条目里的各个字段,以 <key>={<value>} 的形式组织。

我们在此简单列举学术论文里使用较多的 BIBTEX 文献条目类别:

  • article:学术论文,必需字段有 author,title,journal,year;可选字段包括 volume,number,pages,doi 等;

  • book:书籍,必需字段有 author/editor,title,publisher,year;可选字段包括 volume/number,series,address 等;

  • incollection:论文集中的一篇,必需字段有 author,title,booktitle,publisher,year;可选字段包括 editor,volume/number,chapter,pages,address等;

  • inbook:书中的一章,必需字段有 author/editor,title,chapter/pages,publisher,year;可选字段包括 volume/number,series,address 等。

例如 article 类别的参考文献数据条目写法如下:

@article{Alice13,
    title = {Demostration of bibliography items},
    author = {Alice Axford and Bob Birkin and Charlie Copper and Danny Dannford},
    year = {2013},
    month = {Mar},
    journal = {Journal of \TeX perts},
    volume = {36},
    number = {7},
    pages = {114-120}}

article

多数时候,我们无需自己手写 BIBTEX 文献条目。从 Google Scholar 或者期刊/数据库的网站上都能够导出 BIBTEX 文献条目,老牌的文献管理软件 EndNote 也支持生成 BIBTEX 格式的数据库。

BIBTEX 样式

参考文献的写法在不同文献里千差万别,包括作者、标题、年份等各项的顺序和字体样式、文献在列表中的排序规则等。BIBTEX 用样式(style)来管理参考文献的写法。BIBTEX 提供了几个预定义的样式,如 plain,unsrt,alpha 等。

使用样式文件的方法是在源代码内(一般在导言区)使用 \bibliographystyle 命令:

latex
\bibliographystyle{<bst-name>}

这里 <bst-name>.bst 样式文件的名称,不要带 .bst 扩展名。

使用 BIBTEX 排版参考文献

现在我们来看如何利用 BIBTEX 数据库生成参考文献和引用。

第一步:准备一份 BIBTEX 数据库,假设数据库文件名为 books.bib,和 LaTeX 源代码一般位于同一个目录下。

第二步:在源代码中添加必要的命令。假设源代码名为 demo.tex

  • 首先需要使用命令 \bibliographystyle 设定参考文献的格式。
  • 其次,在正文中引用参考文献。BIBTEX 程序在生成参考文献列表的时候,通常只列出用了 \cite 命令引用的那些。如果需要列出未被引用的文献,则需要 \nocite{<citation>} 命令;而 \nocite{*} 则让所有未被引用的文献都列出。
  • 再次,在需要列出参考文献的位置,使用 \bibliography 命令代替 thebibliography 环境:
latex
\bibliography{<bib-name>}

其中 <bib-name> 是 BIBTEX 数据库的文件名,不要带 .bib 扩展名。

注意:\bibliographystyle\bibliography 命令缺一不可,没有这两个命令,使用 BIBTEX 生成参考文献列表的时候会报错。

第三步:写好以上两个文件之后,我们就可以开始编译了。

  1. 首先使用 pdflatex 或 xelatex 等命令编译 LaTeX 源代码 demo.tex
  2. 接下来用 bibtex 命令处理 demo.aux 辅助文件记录的参考文献格式、引用条目等信息。bibtex 命令处理完毕后会生成 demo.bbl 文件,内容就是一个 thebibliography 环境;
  3. 再使用 pdflatex 或 xelatex 等命令把源代码 demo.tex 编译两遍,读入参考文献并正确生成引用。

整个过程使用的命令如下(可以略去扩展名):

bash
xelatex demo
bibtex demo
xelatex demo
xelatex demo

natbib 宏包

时下许多学术期刊比较喜欢使用人名——年份的引用方式,形如 (Axford et al.,2013)。natbib 宏包提供了对这种"自然"引用方式的处理。

除了 \cite 之外,natbib 宏包在正文中支持两种引用方式:

latex
\citep{<citation>} \citet{<citation>}

它们分别生成形如 (Axford et al., 2013)Axford et al. (2013) 的人名——年份引用。

natbib 宏包同样也支持数字引用,并且支持将引用的序号压缩,例如:

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

调用 natbib 宏包时指定以上选项后,连续引用多篇文献时,会生成形如 (3-7) 的引用而不是 (3, 4, 5, 6, 7)

biblatex 宏包

biblatex 宏包是一套基于 LaTeX 宏命令的参考文献解决方案,提供了便捷的格式控制和强大的排序、分类、筛选、多文献表等功能。

基于 biblatex 宏包的方式与基于 BIBTEX 的传统方式有一定区别:

  1. 文档结构和 biblatex 相关命令

    • 在导言区调用 biblatex 宏包,支持以 key=value 形式指定选项,包括参考文献样式 style、参考文献著录排序的规则 sorting 等。
    • 在导言区使用 \addbibresource 命令为 biblatex 引入参考文献数据库,这里需要写完整的文件名。
    • 在正文中使用 \cite 命令引用参考文献,还可以使用丰富的命令达到不同的引用效果,如 \citeauthor\citeyear 分别单独引用作者和年份,\textcite\parencite 分别类似 natbib 宏包提供的 \citet\citep 命令,以及脚注式引用 \footcite 等。
    • 最后在需要排版参考文献的位置使用命令 \printbibliography
  2. 编译方式

    与基于 BIBTEX 的传统方式不同的是,biblatex 宏包使用 biber 程序处理参考文献。因此上述文档的编译步骤为:

    bash
    xelatex demo
    biber demo
    xelatex demo
    xelatex demo
  3. 样式选择

    biblatex 使用的参考文献样式分为著录样式(bibliography style)和引用样式(citation style),分别以 .bbx.cbx 为扩展名。参考文献的样式在调用宏包时使用 style 选项指定,或者使用 bibstylecitestyle 分别指定:

    latex
    % 同时调用 gb7714-2015.bbx 和 gb7714-2015.cbx
    \usepackage[style=gb7714-2015]{biblatex}
    
    % 著录样式调用 gb7714-2015.bbx,引用样式调用 biblatex 宏包自带的 authoryear
    \usepackage[bibstyle=gb7714-2015,citestyle=authoryear]{biblatex}

style

索引和 makeindex 工具

书籍和大文档通常索引来归纳关键词,方便用户查阅。 LaTeX 借助配套的 makeindex 程序完成对索引的排版。

使用 makeindex 工具的方法

要使用索引,须经过这么几个步骤(仍设源代码为 demo.tex):

  1. 第一步,在 LaTeX 源代码的导言区调用 makeidx 宏包,并使用 \makeindex 命令开启索引的搜集:

    latex
    \usepackage{makeidx}
    \makeindex
  2. 第二步,在正文中需要索引的地方使用 \index 命令。\index 命令的参数写法详见下一节;并在需要输出索引的地方(如所有章节之后)使用 \printindex 命令。

  3. 第三步,编译过程。

    • 首先用 xelatex 等命令编译源代码 demo.tex。编译过程中产生索引记录文件 demo.idx;
    • 用 makeindex 程序处理 demo.idx,生成用于排版的索引列表文件 demo.ind
    • 再次编译源代码 demo.tex,正确生成索引列表。

索引项的写法

添加索引项等命令为:

latex
\index{<index entry>}

其中 <index entry> 为索引项,写法有多种,包括多级索引、索引格式、页码格式等。

使用颜色

原始的 LaTeX 不支持使用各种颜色。color 宏包或者 xcolor 宏包提供了对颜色的支持,给 PDF 输出生成颜色的特殊指令。

颜色的表达方式

调用 colorxcolor 宏包后,我们就可以用如下命令切换颜色:

latex
\color[<color-mode>]{<code>} \color{<color-name>}

颜色的表达方式有两种:

  1. 使用色彩模型和色彩代码,代码用 0~1 的数字代表成分的比例。color 宏包支持 rgb、cmyk 和 gray 模型,xcolor 支持更多的模型如 hsb 等。

    latex
    \large\sffamily
    {\color[gray]{0.6}
        60% 灰色 } \\
    {\color[rgb]{0,1,1}
        青色}

    color1

  2. 直接使用名称代表颜色,前提是已经定义了颜色名称:

    latex
    \large\sffamily
    {\color{red} 红色}\\
    {\color{blue} 蓝色}

    color2

color 宏包仅定义了 8 种颜色名称,xcolor 补充了一些,总共有 19 种。

color3

xcolor 还支持将颜色通过表达式混合或互补:

latex
\large\sffamily
{\color{red!40} 40% 红色}\\
{\color{blue}蓝色
\color{blue!50!black}蓝黑
\color{black}黑色}\\
{\color{-red}红色的互补色}

color4

我们还可以通过命令自定义颜色名称:

latex
\definecolor{<color-name>}{<color-mode>}{<code>}

带颜色的文本和盒子

原始的 \color 命令类似于字体命令 \bfseries,它使之后排版的内容全部变成指定的颜色,所以直接使用时通常要加花括号分组。color / xcolor 宏包都定义了一些方便用户使用的带颜色元素。

输入带颜色的文本可以用类似 \textbf 的命令:

latex
\textcolor[<color-mode>]{<code>}{<text>} \textcolor{<color-name>}{<text>}

以下命令构造一个带背景色的盒子,<material> 为盒子中的内容:

latex
\colorbox[<color-mode>]{<code>}{<material>} \colorbox{<color-name>}{<material>}

以下命令构造一个带背景色和有色边框的盒子,<fcode><fcolor-name> 用于设置边框颜色:

latex
\fcolorbox[<color-mode>]{<fcode>}{<code>}{<material>} \fcolorbox{<fcolor-name>}{<color-name>}{<material>}
latex
\sffamily
文字用 \textcolor{red}{红色}强调\\
\colorbox[gray]{0.95}{浅灰色背景}\\
\fcolorbox{blue}{yellow}{%
    \textcolor{blue}{蓝色边框+文字,%
        黄色背景}
}

color5

使用超链接

PDF 文档格式是现今最流行的电子文档格式,而电子文档最实用的需求之一就是超链接功能。LaTeX 中实现这一功能的是 hyperref 宏包。

hyperref 宏包

hyperref 宏包涉及到的链接遍布 LaTeX 的每个角落——目录、引用、脚注、索引、参考文献等等都被封装成超链接。为减少可能的冲突,习惯上将 hyperref 宏包放在其他宏包之后调用。

hyperref 宏包提供了命令 \hypersetup 配置各种参数。参数也可以作为宏包选项,在调用宏包时指定:

latex
\hypersetup{<optional>,<option2>=<value>,…} \usepackage[<optional>,<option2>={value},…]{hyperref}

超链接

hyperref 宏包提供了直接书写超链接的命令,用于在 PDF 中生成 URL:

latex
\url{<url>} \nolinkurl{<url>}

\url\nolinkurl 都生成可以点击的 URL,区别是前者有色彩,后者没有。在 \url 命令中作为参数的 URL 里,可直接输入如 %& 这样的特殊符号。

我们也可以像 HTML 中的超链接一样,把一段文字作为超链接:

latex
\href{<url>}{<text>}
latex
\url{http://wikipedia.org}\\
\nolinkurl{http://wikipedia.org}\\
\href{http://wikipedia.org}{Wiki}

hyperref

使用 hyperref 宏包后,文档中所有的引用、参考文献、索引等等都转换为超链接。用户也可对某个 \label 命令定义的标签 <label> 作超链接:

latex
\hyperref[<label>]{<text>}

默认的超链接在文字外边加上一个带颜色的边框(在打印 PDF 时边框不会打印),可指定 colorlinks 参数修改为将文字本身加上颜色,或修改 pdfborder 参数调整边框宽度以"去掉"边框:hidelinks 参数则令超链接既不变色也不加边框。

latex
\hypersetup{hidelinks}
% or:
\hypersetup{pdfborder=0 0 0}}

PDF 书签

hyperref 宏包另一个强大的功能是为 PDF 生成书签。对于章节命令 \chapter\section 等,默认情况下会为 PDF 自动生成书签。

书签的一些属性可以自定义。在 latex+dvipdfmxpdflatex 命令下使用 ctex 宏包或 CJK 宏包时,为了正确生成中文书签而不出现乱码,需要额外的设置。

hyperref 还提供了手动生成书签的命令:

latex
\pdfbookmark[<level>]{<bookmark>}{<anchor>}

<bookmark> 为书签名称,<anchor> 为书签项使用的锚点(类似交叉引用的标签)。可选参数 <level> 为书签的层级,默认为 0。

章节命令里往往有 LaTeX 命令甚至数学公式,而 PDF 书签是纯文本,对命令和公式的处理很困难,有出错的风险。hyperref 宏包已经为我们处理了许多常见命令,如 \LaTeX 和字体命令 \textbf 等,对于未被处理的命令或数学公式,就要在章节标题中使用如下命令,分别提供 LaTeX 代码和 PDF 书签可用的纯文本:

latex
\texorpdfstring{<LaTeX code>}{<PDF bookmark text>}

比如在章节名称里使用公式 E=mc^2,而书签使用字符 E=mc^2

latex
\section{质能公式 \texorpdfstring{$E=mc^2$}{E=mc\textasciicircum 2}}

PDF 文档属性

hyperref 宏包还提供了一些参数用于改变 PDF 文档的属性,如作者、标题、关键词等。

KeepResearch 产品文档