06_\(\LaTeX{}\) 之特色工具和功能
- 06_\(\LaTeX{}\) 之特色工具和功能
- 参考文献和 \(\texttt{BibTeX}\) 工具
- 基本的参考文献和引用
- \(\texttt{BibTeX}\) 数据库
- \(\texttt{BibTeX}\) 样式
- 使用 \(\texttt{BibTeX}\) 排版参考文献
- \(\texttt{natbib}\) 宏包
- \(\texttt{biblatex}\) 宏包
- 文档结构和
biblatex
相关命令 - 编译方式
biblatex
样式和其它选项
- 文档结构和
- 索引和 \(\textrm{makeindex}\) 工具
- 使用 \(\textrm{makeindex}\) 工具的方法
- 索引项的写法
- 使用颜色
- 颜色的表达方式
- 带颜色的文本和盒子
- 使用超链接
hyperref
宏包- 超链接
- PDF 书签
- PDF 文档属性
- 参考文献和 \(\texttt{BibTeX}\) 工具
本文主体内容来自一份 (不太) 简短的 LATEX2ε 介绍。
本文介绍一些特色的 \(\LaTeX{}\) 辅助功能。前两个功能 \(\texttt{BibTeX}\) 和 \(\texttt{makeindex}\) 依靠一些辅助程序自动生成参考文献、索引等;之后的使用颜色、超链接等则令我们生成美观易用的电子文档。
参考文献和 \(\texttt{BibTeX}\) 工具
基本的参考文献和引用
\(\LaTeX{}\) 提供的参考文献和引用方式比较原始,需要用户自行书写参考文献列表(包括格式),因此较难直接使用。相关的命令只作最简单的介绍。
\(\LaTeX{}\) 提供了最基本的 \cite
命令用于在正文中引用参考文献:
\cite{<citation>}
<citation>
为引用的参考文献的标签,类似 \ref
里的参数;\cite
带一个可选参数,为引用的编号后加上额外的内容,如 \cite[page 22]{Paper2013}
可能得到形如 [13, page 22]
这样的引用。
参考文献由 \(\texttt{thebibliography}\) 环境包裹。每条参考文献由 \bibitem
开头,其后是参考文献本身的内容:
\begin{thebibliography}{<widest label>}\bibitem[<item number>}{<citation>} ...
\end{thebibliography}
其中 <citation>
是 \cite
使用的文献标签,<item number>
自定义参考文献的序号,如果省略,则按自然排序给定序号。<widest label>
用以限制参考文献序号的宽度,如 99 意味着不超过两位数字。通常设定为与参考文献的数目一致。
在 \(\texttt{article}\) 文档类,\(\texttt{thebibliography}\) 环境自动生成不带编号的一节,标题默认为\(\texttt{“References”}\);而在 \(\texttt{report}\) 或 \(\texttt{book}\) 文档类中,则会生成不带编号的一章,标题默认为\(\texttt{“Bibliography”}\)。
以下为一个使用 \(\texttt{thebibliography}\) 排版参考文献的例子:
\documentclass{article}
\begin{document}
\section{Introduction}
Partl~\cite{germenTeX} has proposed that \ldots\begin{thebibliography}{99}
\bibitem{germenTeX} H.~Partl: \emph{German \TeX},TUGboat Volume~9, Issue~1 (1988)
\end{thebibliography}\end{document}
\(\texttt{BibTeX}\) 数据库
\(\texttt{BibTeX}\) 是最为流行的参考文献数据组织格式之一。它的出现让我们摆脱手写参考文献条目的麻烦。还可以通过参考文献样式的支持,让同一份 \(\texttt{BibTeX}\) 数据库生成不同样式的参考文献列表。
\(\texttt{BibTeX}\) 数据库以 \(\texttt{.bib}\) 作为扩展名,其内容是若干个文献条目,每个条目的格式为:
其中 <type>
为文献的类别,如 \(\texttt{article}\) 为学术论文,\(\texttt{book}\) 为书籍,\(\texttt{incollection}\) 为论文集中的某一篇,等等。<citation>
为 \cite
命令使用的文献标签。在<citation>
之后为条目里的各个字段,以 <key> = <value>
的形式组织。
在此简单列举学术论文里使用较多的 \(\texttt{BibTeX}\) 文献条目类别:
- \(\texttt{article}\) 学术论文,必需字段有 \(\textrm{author}\), \(\textrm{title}\), \(\textrm{journal}\), \(\textrm{year}\); 可选字段包括 \(\textrm{volume}\), \(\textrm{number}\), \(\textrm{pages}\), \(\textrm{doi}\) 等;
- \(\texttt{book}\) 书籍,必需字段有 \(\textrm{author/editor}\), \(\textrm{title}\), \(\textrm{publisher}\), \(\textrm{publisher}\); 可选字段包括 \(\textrm{volume/number}\), \(\textrm{series}\), \(\textrm{address}\) 等;
- \(\texttt{incollection}\) 论文集中的一篇,必需字段有 \(\textrm{author}\), \(\textrm{title}\), \(\textrm{booktitle}\), \(\textrm{publisher}\), \(\textrm{publisher}\); 可选字段包括 \(\textrm{editor}\), \(\textrm{volume/number}\), \(\textrm{chapter}\), \(\textrm{pages}\), \(\textrm{address}\) 等;
- \(\texttt{inbook}\) 书中的一章,必需字段有 \(\textrm{author/editor}\), \(\textrm{title}\), \(\textrm{chapter/pages}\), \(\textrm{publisher}\), \(\textrm{year}\); 可选字段包括 \(\textrm{volume/number}\), \(\textrm{series}\), \(\textrm{address}\) 等。
例如 \(\texttt{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}}
多数时候,我们无需自己手写 \(\texttt{BibTeX}\) 文献条目。从 Google Scholar 或者期刊/数据库的网站上都能够导出 \(\texttt{BibTeX}\)文献条目,老牌的文献管理软件 EndNote 也支持生成 \(\texttt{BibTeX}\) 格式的数据库。开源软件 JabRef 甚至支持 \(\texttt{BibTeX}\) 文献条目的导入、导出和管理。
\(\texttt{BibTeX}\) 样式
参考文献的写法在不同文献里千差万别,包括作者、标题、年份等各项的顺序和字体样式、文献在列表中的排序规则等。\(\texttt{BibTeX}\) 用样式(\(\texttt{style}\))来管理参考文献的写法。\(\texttt{BibTeX}\) 提供了几个预定义的样式,如 \(\texttt{plain}\), \(\texttt{unsrt}\), \(\texttt{alpha}\) 等。如果使用期刊模板的话,可能会提供自用的样式。样式文件以 \(\texttt{.bst}\) 为扩展名。
使用样式文件的方法是在源代码内(一般在导言区)使用\bibliographystyle
命令:
\bibliographystyle{<bst-name>}
这里 <bst-name>
为 \(\texttt{.bst}\) 样式文件的名称,不要带 \(\texttt{.bst}\) 扩展名。
以 上一小节给出的数据条目为例,使用 \bibliographystyle
命令选择不同的参考文献样式,效果大致如下表所示。
使用 \(\texttt{BibTeX}\) 排版参考文献
现在我们来看如何利用 \(\texttt{BibTeX}\) 数据库生成参考文献和引用。
第一步:准备一份 \(\texttt{BibTeX}\) 数据库,假设数据库文件名为 \(\texttt{books.bib}\),和 \(\LaTeX{}\) 源代码一般位于同一个目录下。
第二步:在源代码中添加必要的命令。假设源代码名为 \(\texttt{demo.tex}\)(见下面的源代码)。
\documentclass{article}
\bibliographystyle{plain}
\begin{document}
\section{Some words}
Some excellent books, for example, \cite{citation1} and \cite{citation2} \ldots\bibliography{books}
\end{document}
-
首先需要使用命令
\bibliographystyle
设定参考文献的格式。 -
其次,在正文中引用参考文献。\(\texttt{BibTeX}\) 程序在生成参考文献列表的时候,通常只列出用了
\cite
命令引用的那些。如果需要列出未被引用的文献,则需要\nocite{<citation>}
命令;而\nocite{*}
则让所有未被引用的文献都列出。 -
再次,在需要列出参考文献的位置,使用
\bibliography
命令代替 \(\texttt{thebibliography}\) 环境:\bibliography{<bib-name>}
其中
<bib-name>
是 \(\texttt{BibTeX}\) 数据库的文件名,不要带 \(\texttt{.bib}\) 扩展名。
注意:\bibliographystyle
和 \bibliography
命令缺一不可,没有这两个命令,使用 \(\texttt{BibTeX}\) 生成参考文献列表的时候会报错。
第三步:写好了以上两个文件之后,就可以开始编译了。
- 首先使用 \(\texttt{pdflatex}\) 或 \(\texttt{xelatex}\) 等命令编译 \(\LaTeX{}\) 源代码 \(\texttt{demo.tex}\);
- 接下来用 \(\texttt{bibtex}\) 命令处理 \(\texttt{demo.aux}\) 辅助文件记录的参考文献格式、引用条目等信息。\(\texttt{bibtex}\) 命令处理完毕后会生成 \(\texttt{demo.bbl}\) 文件,内容就是一个
\thebibliography
环境; - 再使用 \(\texttt{pdflatex}\) 或 \(\texttt{xelatex}\) 等命令把源代码 \(\texttt{demo.tex}\) 编译两遍,读入参考文献并正确生成引用。
整个过程使用的命令如下(可以略去扩展名):
xelatex demo
bibtex demo
xelatex demo
xelatex demo
使用 \(\texttt{latex + dvipdfmx}\) 命令编译时,则 \(\texttt{dvipdfmx}\) 命令放在最后,相当于先后使用\(\texttt{latex}\), \(\texttt{bibtex}\), \(\texttt{latex}\), \(\texttt{latex}\), \(\texttt{dvipdfmx}\)。
\(\texttt{natbib}\) 宏包
时下许多学术期刊比较喜欢使用人名——年份的引用方式,形如(\({Axford~et~al.}, 2013\))。natbib
宏包提供了对这种“自然”引用方式的处理。
除了 \cite
之外,natbib
宏包在正文中支持两种引用方式:
\citep{<citation>}
\citet{<citation>}
它们分别生成形如(\(Axford~et~al., 2013\)) 和 \(Axford~et~al. (2013)\) 的人名——年份引用。正确排版人名——年份引用还依赖于特定的 \(\texttt{BibTeX}\) 样式。natbib
提供了与 \(\LaTeX{}\) 预定义样式相对应的几个样式,包括 \(\texttt{plainnat}\)、\(\texttt{abbrvnat}\) 和 \(\texttt{unsrtnat}\)。学术论文模板是否支持 natbib
,需要参考其帮助文档。
natbib
宏包同样也支持数字引用,并且支持将引用的序号压缩,例如:
\usepackage[numbers,sort&compress]{natbib}
调用 natbib
宏包时指定以上选项后,连续引用多篇文献时,会生成形如 \((3-7)\) 的引用而不是 \((3, 4, 5, 6, 7)\)。
natbib
宏包还有更多选项和用法,比如默认的引用是用小括号包裹的,可指定 \(\texttt{square}\) 选项改为中括号;再比如 \citep
命令也支持可选参数,为引用前后都添加额外内容。这里不再赘述,请参考 natbib
宏包的帮助文档。
\(\texttt{biblatex}\) 宏包
本节的末尾简单介绍一下基于 biblatex
宏包排版参考文献的方式。biblatex
宏包是一套基于 \(\LaTeX{}\) 宏命令的参考文献解决方案,提供了便捷的格式控制和强大的排序、分类、筛选、多文献表等功能。biblatex
宏包也因其对 UTF-8 和中文参考文献的良好支持,被国内较多 \(\LaTeX{}\) 模板采用。
基于 biblatex
宏包的方式与基于 \(\texttt{BibTeX}\) 的传统方式有一定区别,下面从文档结构和命令、编译方式、样式选择等方面逐一介绍:
文档结构和 biblatex
相关命令
- 首先是在导言区调用
biblatex
宏包。宏包支持以<key>=<value>
形式指定选项,包括参考文献样式 style、参考文献著录排序的规则 sorting 等。 - 接着在导言区使用
\addbibresource
命令为biblatex
引入参考文献数据库。与基于 \(\texttt{BibTeX}\) 的传统方式不同的是,这里需要写完整的文件名。 - 在正文中使用
\cite
命令引用参考文献。除此之外还可以使用丰富的命令达到不同的引用效果,如\citeauthor
和\citeyear
分别单独引用作者和年份,\textcite
和\parencite
分别类似natbib
宏包提供的\citet
和\citep
命令,以及脚注式引用\footcite
等。 - 最后在需要排版参考文献的位置使用命令
\printbibliography
。
编译方式
与基于 \(\texttt{BibTeX}\) 的传统方式不同的是,biblatex
宏包使用 \(\texttt{biber}\) 程序处理参考文献。因此上述文档的编译步骤为:
xelatex demo
biber demo
xelatex demo
xelatex demo
% File: egbibdata.bib
@book{caimin2006,title = {UML基础和Rose建模教程},address = {北京},author = {蔡敏 and 徐慧慧 and 黄柄强},publisher = {人民邮电出版社},year = {2006},month = {1}
}% File: demo.tex
\documentclass{ctexart}
% 使用符合 GB/T 7714-2015 规范的参考文献样式
\usepackage[style=gb7714-2015]{biblatex}
% 注意加 .bib 扩展名
\addbibresource{egbibdata.bib}\begin{document}见文献\cite{caimin2006}。\printbibliography
\end{document}
biblatex
样式和其它选项
biblatex
使用的参考文献样式分为著录样式(\(\texttt{bibliography style}\))和引用样式(\(\texttt{citation style}\)),分别以 \(\texttt{.bbx}\) 和 \(\texttt{.cbx}\) 为扩展名。参考文献的样式在调用宏包时使用 \(\texttt{style}\) 选项指定,或者使用 \(\texttt{bibstyle}\) 或 \(\texttt{citestyle}\) 分别指定:
% 同时调用 gb7714-2015.bbx 和 gb7714-2015.cbx
\usepackage[style=gb7714-2015]{biblatex}
% 著录样式调用 gb7714-2015.bbx,引用样式调用 biblatex 宏包自带的 authoryear
\usepackage[bibstyle=gb7714-2015,citestyle=authoryear]{biblatex}
以下总结一些常用的参考文献样式,除 biblatex
宏包自带的样式外,许多样式以单独的宏包在发行版内发布。
- \(\texttt{authoryear}\)
biblatex
自带样式,类似natbib
默认的引用样式效果。 - \(\texttt{authortitle}\)
biblatex
自带样式,采用作者-题名(shorttitle 字段)的引用样式。 - \(\texttt{verbose}\)
biblatex
自带样式,引用样式中包含作者、题名、书名、页码等字段的信息。 - \(\texttt{alphabetic}\)
biblatex
自带样式,著录样式与 \(\texttt{BibTeX}\) 的 \(\texttt{alpha}\) 样式类似。 - \(\texttt{trad-alpha}\)
biblatex-trad
样式包,移植自 \(\texttt{BibTeX}\) 默认的 \(\texttt{alpha}\) 样式。另外还包括 \(\texttt{trad-abbrv}\)、\(\texttt{trad-plain}\) 和 $\texttt{trad-unsrt}。 - \(\texttt{gb7714-2015}\) 符合中文文献著录标准 GB/T 7714---2015 的样式,著录按顺序编码排版。另外还包括按作者—年份顺序排版著录的样式 \(\texttt{gb7714-2015ay}\)。
- \(\texttt{caspervector}\) 以中文文献著录标准 GB/T 7714---2015 为基础的一个样式。
- \(\texttt{ieee}\) 兼容
IEEEtran
风格的样式,著录按顺序编码排版。另外还包括按作者—年份顺序排版著录的样式 \(\texttt{ieee-alphabetic}\)。
索引和 \(\textrm{makeindex}\) 工具
书籍和大文档通常用索引来归纳关键词,方便用户查阅。\(\LaTeX{}\) 借助配套的 \(\textrm{makeindex}\) 程序完成对索引的排版。
使用 \(\textrm{makeindex}\) 工具的方法
要使用索引,须经过这么几个步骤(仍设源代码名为 \(\texttt{demo.tex}\)):
第一步,在 \(\LaTeX{}\) 源代码的导言区调用 makeidx
宏包,并使用 \makeindex
命令开启索引的收集:
\usepackage{makeidx}
\makeindex
第二步,在正文中需要索引的地方使用 \index
命令。在需要输出索引的地方(如所有章节之后)使用 \printindex
命令。
第三步,编译过程:
- 首先用 \(\texttt{xelatex}\) 等命令编译源代码 \(\texttt{demo.tex}\)。编译过程中产生索引记录文件 \(\texttt{demo.idx}\);
- 用 \(\texttt{makeindex}\) 程序处理 \(\texttt{demo.idx}\),生成用于排版的索引列表文件 \(\texttt{demo.ind}\);
- 再次编译源代码 \(\texttt{demo.tex}\),正确生成索引列表。
索引项的写法
添加索引项的命令为:
\index{<index entry>}
其中 <index entry>
为索引项,写法由 下表 汇总。其中 \(\texttt!\)、\(\texttt @\) 和 \(\texttt|\) 为特殊符号,如果要向索引项直接输出这些符号,需要加前缀 \(\texttt"\);而 \(\texttt"\) 需要输入两个引号 \(\texttt{""}\) 才能输出到索引项。
读者可以钻研一下以下给出的一个较为复杂的,结合多级索引、索引格式、页码格式等的用法示例。但在自己使用时,最好还是遵循“简单的就是最好的”原则,尽量使用 上表 中的写法。
Test index.
\index{Test@\textsf{""Test}|(textbf}
\index{Test@\textsf{""Test}!sub@"|sub"||see{Test}}
\newpage
Test index.
\index{Test@\textsf{""Test}|)textbf}
使用颜色
原始的 \(\LaTeX{}\) 不支持使用各种颜色。color
宏包或者 xcolor
宏包提供了对颜色的支持,给 PDF 输出生成颜色的特殊指令。
颜色的表达方式
调用 color
或 xcolor
宏包后,我们就可以用如下命令切换颜色:
\color[<color-mode>]{<code>}
\color{<color-name>}
颜色的表达方式有两种,其一是使用色彩模型和色彩代码,代码用 \(0\sim1\) 的数字代表成分的比例。color
宏包支持 \(\texttt{rgb}\)、\(\texttt{cmyk}\) 和 \(\texttt{gray}\) 模型,xcolor
支持更多的模型如 \(\texttt{hsb}\) 等。
其二是直接使用名称代表颜色,前提是已经定义了颜色名称(没定义的话会报错):
color
宏包仅定义了 8 种颜色名称,xcolor
补充了一些,总共有 19 种,见下表。
xcolor
还支持将颜色通过表达式混合或互补:
我们还可以通过命令自定义颜色名称,注意这里的 color-mode
是必选参数:
\definecolor{<color-name>}{<color-mode>}{<code>}
如果调用 color
或 xcolor
宏包时指定 \(\texttt{dvipsnames}\) 选项,就有额外的 68 种颜色名称可用。xcolor
宏包还支持通过指定其它选项载入更多颜色名称。限于篇幅不展开介绍,详情请参考 xcolor
宏包的手册。
带颜色的文本和盒子
原始的 \color
命令类似于字体命令 \bfseries
,它使之后排版的内容全部变成指定的颜色,所以直接使用时通常要加花括号分组。color
和 xcolor
宏包都定义了一些方便用户使用的带颜色元素。
输入带颜色的文本可以用类似 \textbf
的命令:
\textcolor[<color-mode>]{<code>}{<text>}
\textcolor{color-name}{<text>}
以下命令构造一个带背景色的盒子,<material>
为盒子中的内容:
\colorbox[<color-mode>]{<code>}{<material>}
\colorbox{<color-name>}{<material>}
以下命令构造一个带背景色和有色边框的盒子,<fcode>
或 <fcolor-name>
用于设置边框颜色:
\fcolorbox[<color-mode>]{<fcode>}{<code>}{<material>}
\fcolorbox{<fcolor-name>}{<color-name>}{<material>}
\fcolorbox
也可以像 \fbox
那样调节 \fboxrule
和 \fboxsep
;对于 \colorbox
,调整 \fboxsep
是有效的。
使用超链接
\(\LaTeX{}\) 中实现超链接功能的是 hyperref
宏包。
hyperref
宏包
hyperref
宏包涉及的链接遍布 \(\LaTeX{}\) 的每一个角落——目录、引用、脚注、索引、参考文献等等都被封装成超链接。但这也使得它与其它宏包发生冲突的可能性大大增加,虽然宏包已经尽力解决各方面的兼容性,但仍不能面面俱到。为减少可能的冲突,习惯上将 hyperref
宏包放在其它宏包之后调用。
与 graphicx
宏包类似,\(\texttt{latex} + \texttt{dvipdfmx}\) 命令下调用 hyperref
宏包时,需要指定选项 \(\texttt{dvipdfmx}\);而 \(\texttt{pdflatex}\) 或 \(\texttt{xelatex}\) 命令下不需要。
hyperref
宏包提供了命令 \hypersetup
配置各种参数。参数也可以作为宏包选项,在调用宏包时指定:
\hypersetup{<option1>,<option2>=<value>,...}
\usepackage[<option1>,<option2>=<value>,...]{hyperref}
当选项值为 \(\texttt{true}\) 时,可以省略“\(\texttt{=true}\)”不写。可用的参数见 下表。
超链接
hyperref
宏包提供了直接书写超链接的命令,用于在 PDF 中生成 URL:
\url{<url>}
\nolinkurl{<url>}
\url
和 \nolinkurl
都像抄录命令 \verb
一样输出一个 URL,区别是前者还为 URL 加上了超链接,后者没有。在 \url
等命令的参数 <url>
里,可直接输入如 \(\texttt\%\)、\(\texttt\&\) 这样的特殊符号。
也可以像 HTML 中的超链接一样,把一段文字作为超链接:
\href{url}{text}
使用 hyperref
宏包后,文档中所有的引用、参考文献、索引等等都转换为超链接。用户也可对某个 \label
命令定义的标签 <label>
作超链接(注意这里的 <label>
虽然是可选参数的形式,但通常是必填的:
\hyperref[<label>]{<text>}
默认的超链接在文字外边加上一个带颜色的边框(在打印 PDF 时边框不会打印),可指定 \(\texttt{colorlinks}\) 参数修改为将文字本身加上颜色,或修改 \(\texttt{pdfborder}\) 参数调整边框宽度以“去掉”边框;\(\texttt{hidelinks}\) 参数则令超链接既不变色也不加边框。
\hypersetup{hidelinks}
% or:
\hypersetup{pdfborder={0 0 0}}
PDF 书签
hyperref
宏包另一个强大的功能是为 PDF 生成书签。对于章节命令 \chapter
、\section
等,默认情况下会为 PDF 自动生成书签。和交叉引用、索引等类似,生成书签也需要多次编译源代码,第一次编译将书签记录写入 \(\texttt{.out}\) 文件,第二次编译才正确生成书签。
书签的一些属性见 上表。使用 CJK
宏包时,为了防止中文书签出现乱码,需要进行繁琐的设置;但在使用 ctex
宏包和文档类、且使用 \(\texttt{xelatex}\) 或 \(\texttt{lualatex}\) 编译的情况下,无需用户额外干预,即可正确生成中文书签。
hyperref
还提供了手动生成书签的命令:
\pdfbookmark[<level>]{<bookmark>}{<anchor>}
<bookmark>
为书签名称,<anchor>
为书签项使用的锚点(类似交叉引用的标签)。可选参数<level>
为书签的层级,默认为 0。
章节命令里往往有 \(\LaTeX{}\) 命令甚至数学公式,而 PDF 书签是纯文本,对命令和公式的处理很困难,有出错的风险。hyperref
宏包已经为我们处理了许多常见命令,如 \LaTeX
和字体命令 \textbf
等,对于未被处理的命令或数学公式,就要在章节标题中使用如下命令,分别提供 \(\LaTeX{}\) 代码和 PDF 书签可用的纯文本:
\texorpdfstring{<LaTeX code>}{<PDF bookmark text>}
比如在章节名称里使用公式 \(E=mc^2\),而书签则使用纯文本形式的 E=mc^2:
\section{质能公式 \texorpdfstring{$E=mc^2$}{E=mc\textasciicircum 2}}
PDF 文档属性
hyperref
宏包还提供了一些参数用于改变 PDF 文档的属性,部分见 上表。