主题
特色工具与功能
本章将介绍 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}
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}}
多数时候,我们无需自己手写 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 生成参考文献列表的时候会报错。
第三步:写好以上两个文件之后,我们就可以开始编译了。
- 首先使用 pdflatex 或 xelatex 等命令编译 LaTeX 源代码
demo.tex; - 接下来用 bibtex 命令处理
demo.aux辅助文件记录的参考文献格式、引用条目等信息。bibtex 命令处理完毕后会生成demo.bbl文件,内容就是一个thebibliography环境; - 再使用 pdflatex 或 xelatex 等命令把源代码
demo.tex编译两遍,读入参考文献并正确生成引用。
整个过程使用的命令如下(可以略去扩展名):
bash
xelatex demo
bibtex demo
xelatex demo
xelatex demonatbib 宏包
时下许多学术期刊比较喜欢使用人名——年份的引用方式,形如 (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 的传统方式有一定区别:
文档结构和 biblatex 相关命令
- 在导言区调用 biblatex 宏包,支持以
key=value形式指定选项,包括参考文献样式style、参考文献著录排序的规则sorting等。 - 在导言区使用
\addbibresource命令为 biblatex 引入参考文献数据库,这里需要写完整的文件名。 - 在正文中使用
\cite命令引用参考文献,还可以使用丰富的命令达到不同的引用效果,如\citeauthor和\citeyear分别单独引用作者和年份,\textcite和\parencite分别类似 natbib 宏包提供的\citet和\citep命令,以及脚注式引用\footcite等。 - 最后在需要排版参考文献的位置使用命令
\printbibliography。
- 在导言区调用 biblatex 宏包,支持以
编译方式
与基于 BIBTEX 的传统方式不同的是,biblatex 宏包使用 biber 程序处理参考文献。因此上述文档的编译步骤为:
bashxelatex demo biber demo xelatex demo xelatex demo样式选择
biblatex 使用的参考文献样式分为著录样式(bibliography style)和引用样式(citation style),分别以
.bbx和.cbx为扩展名。参考文献的样式在调用宏包时使用style选项指定,或者使用bibstyle或citestyle分别指定:latex% 同时调用 gb7714-2015.bbx 和 gb7714-2015.cbx \usepackage[style=gb7714-2015]{biblatex} % 著录样式调用 gb7714-2015.bbx,引用样式调用 biblatex 宏包自带的 authoryear \usepackage[bibstyle=gb7714-2015,citestyle=authoryear]{biblatex}

索引和 makeindex 工具
书籍和大文档通常索引来归纳关键词,方便用户查阅。 LaTeX 借助配套的 makeindex 程序完成对索引的排版。
使用 makeindex 工具的方法
要使用索引,须经过这么几个步骤(仍设源代码为 demo.tex):
第一步,在 LaTeX 源代码的导言区调用
makeidx宏包,并使用\makeindex命令开启索引的搜集:latex\usepackage{makeidx} \makeindex第二步,在正文中需要索引的地方使用
\index命令。\index命令的参数写法详见下一节;并在需要输出索引的地方(如所有章节之后)使用\printindex命令。第三步,编译过程。
- 首先用 xelatex 等命令编译源代码
demo.tex。编译过程中产生索引记录文件demo.idx; - 用 makeindex 程序处理
demo.idx,生成用于排版的索引列表文件demo.ind; - 再次编译源代码
demo.tex,正确生成索引列表。
- 首先用 xelatex 等命令编译源代码
索引项的写法
添加索引项等命令为:
latex
\index{<index entry>}其中 <index entry> 为索引项,写法有多种,包括多级索引、索引格式、页码格式等。
使用颜色
原始的 LaTeX 不支持使用各种颜色。color 宏包或者 xcolor 宏包提供了对颜色的支持,给 PDF 输出生成颜色的特殊指令。
颜色的表达方式
调用 color 或 xcolor 宏包后,我们就可以用如下命令切换颜色:
latex
\color[<color-mode>]{<code>} \color{<color-name>}颜色的表达方式有两种:
使用色彩模型和色彩代码,代码用 0~1 的数字代表成分的比例。
color宏包支持 rgb、cmyk 和 gray 模型,xcolor支持更多的模型如 hsb 等。latex\large\sffamily {\color[gray]{0.6} 60% 灰色 } \\ {\color[rgb]{0,1,1} 青色}
直接使用名称代表颜色,前提是已经定义了颜色名称:
latex\large\sffamily {\color{red} 红色}\\ {\color{blue} 蓝色}
color 宏包仅定义了 8 种颜色名称,xcolor 补充了一些,总共有 19 种。

xcolor 还支持将颜色通过表达式混合或互补:
latex
\large\sffamily
{\color{red!40} 40% 红色}\\
{\color{blue}蓝色
\color{blue!50!black}蓝黑
\color{black}黑色}\\
{\color{-red}红色的互补色}
我们还可以通过命令自定义颜色名称:
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}{蓝色边框+文字,%
黄色背景}
}
使用超链接
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 宏包后,文档中所有的引用、参考文献、索引等等都转换为超链接。用户也可对某个 \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+dvipdfmx 或 pdflatex 命令下使用 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 文档的属性,如作者、标题、关键词等。