06_LaTeX之特色工具和功能

06_LATEX 之特色工具和功能

本文主体内容来自一份 (不太) 简短的 LATEX2ε 介绍

本文介绍一些特色的 LATEX 辅助功能。前两个功能 BibTeXmakeindex 依靠一些辅助程序自动生成参考文献、索引等;之后的使用颜色、超链接等则令我们生成美观易用的电子文档。

参考文献和 BibTeX 工具

基本的参考文献和引用

LATEX 提供的参考文献和引用方式比较原始,需要用户自行书写参考文献列表(包括格式),因此较难直接使用。相关的命令只作最简单的介绍。

LATEX 提供了最基本的 \cite 命令用于在正文中引用参考文献:

\cite{<citation>}

<citation> 为引用的参考文献的标签,类似 \ref 里的参数;\cite带一个可选参数,为引用的编号后加上额外的内容,如 \cite[page 22]{Paper2013} 可能得到形如 [13, page 22] 这样的引用。

参考文献由 thebibliography 环境包裹。每条参考文献由 \bibitem 开头,其后是参考文献本身的内容:

\begin{thebibliography}{<widest label>}
	\bibitem[<item number>}{<citation>} ...
\end{thebibliography}

其中 <citation>\cite 使用的文献标签,<item number> 自定义参考文献的序号,如果省略,则按自然排序给定序号。<widest label> 用以限制参考文献序号的宽度,如 99 意味着不超过两位数字。通常设定为与参考文献的数目一致。

article 文档类,thebibliography 环境自动生成不带编号的一节,标题默认为“References”;而在 reportbook 文档类中,则会生成不带编号的一章,标题默认为“Bibliography”

以下为一个使用 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}

BibTeX 数据库

BibTeX 是最为流行的参考文献数据组织格式之一。它的出现让我们摆脱手写参考文献条目的麻烦。还可以通过参考文献样式的支持,让同一份 BibTeX 数据库生成不同样式的参考文献列表。

BibTeX 数据库以 .bib 作为扩展名,其内容是若干个文献条目,每个条目的格式为:

image-20250126152050667

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

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

  • article 学术论文,必需字段有 author, title, journal, year; 可选字段包括 volume, number, pages, doi 等;
  • book 书籍,必需字段有 author/editor, title, publisher, publisher; 可选字段包括 volume/number, series, address 等;
  • incollection 论文集中的一篇,必需字段有 author, title, booktitle, publisher, publisher; 可选字段包括 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 格式的数据库。开源软件 JabRef 甚至支持 BibTeX 文献条目的导入、导出和管理。

BibTeX 样式

参考文献的写法在不同文献里千差万别,包括作者、标题、年份等各项的顺序和字体样式、文献在列表中的排序规则等。BibTeX 用样式(style)来管理参考文献的写法。BibTeX 提供了几个预定义的样式,如 plain, unsrt, alpha 等。如果使用期刊模板的话,可能会提供自用的样式。样式文件以 .bst 为扩展名。
使用样式文件的方法是在源代码内(一般在导言区)使用\bibliographystyle 命令:

\bibliographystyle{<bst-name>}

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

以 上一小节给出的数据条目为例,使用 \bibliographystyle 命令选择不同的参考文献样式,效果大致如下表所示。

image-20250127144405131

使用 BibTeX 排版参考文献

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

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

第二步:在源代码中添加必要的命令。假设源代码名为 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}
  1. 首先需要使用命令 \bibliographystyle 设定参考文献的格式。

  2. 其次,在正文中引用参考文献。BibTeX 程序在生成参考文献列表的时候,通常只列出用了 \cite 命令引用的那些。如果需要列出未被引用的文献,则需要\nocite{<citation>} 命令;而 \nocite{*} 则让所有未被引用的文献都列出。

  3. 再次,在需要列出参考文献的位置,使用\bibliography 命令代替 thebibliography 环境:

    \bibliography{<bib-name>}
    

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

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

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

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

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

xelatex demo
bibtex demo
xelatex demo
xelatex demo

使用 latex + dvipdfmx 命令编译时,则 dvipdfmx 命令放在最后,相当于先后使用latex, bibtex, latex, latex, dvipdfmx

natbib 宏包

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

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

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

它们分别生成形如(Axford et al.,2013) 和 Axford et al.(2013) 的人名——年份引用。正确排版人名——年份引用还依赖于特定的 BibTeX 样式。natbib 提供了与 LATEX 预定义样式相对应的几个样式,包括 plainnatabbrvnatunsrtnat。学术论文模板是否支持 natbib,需要参考其帮助文档。

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

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

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

natbib 宏包还有更多选项和用法,比如默认的引用是用小括号包裹的,可指定 square 选项改为中括号;再比如 \citep 命令也支持可选参数,为引用前后都添加额外内容。这里不再赘述,请参考 natbib 宏包的帮助文档。

biblatex 宏包

本节的末尾简单介绍一下基于 biblatex 宏包排版参考文献的方式。biblatex 宏包是一套基于 LATEX 宏命令的参考文献解决方案,提供了便捷的格式控制和强大的排序、分类、筛选、多文献表等功能。biblatex 宏包也因其对 UTF-8 和中文参考文献的良好支持,被国内较多 LATEX 模板采用。

基于 biblatex 宏包的方式与基于 BibTeX 的传统方式有一定区别,下面从文档结构和命令、编译方式、样式选择等方面逐一介绍:

文档结构和 biblatex 相关命令

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

编译方式

与基于 BibTeX 的传统方式不同的是,biblatex 宏包使用 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 使用的参考文献样式分为著录样式(bibliography style)和引用样式(citation style),分别以 .bbx.cbx 为扩展名。参考文献的样式在调用宏包时使用 style 选项指定,或者使用 bibstylecitestyle 分别指定:

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

以下总结一些常用的参考文献样式,除 biblatex 宏包自带的样式外,许多样式以单独的宏包在发行版内发布。

  • authoryear biblatex自带样式,类似 natbib 默认的引用样式效果。
  • authortitle biblatex自带样式,采用作者-题名(shorttitle 字段)的引用样式。
  • verbose biblatex 自带样式,引用样式中包含作者、题名、书名、页码等字段的信息。
  • alphabetic biblatex自带样式,著录样式与 BibTeXalpha 样式类似。
  • trad-alpha biblatex-trad 样式包,移植自 BibTeX 默认的 alpha 样式。另外还包括 trad-abbrvtrad-plain 和 $\texttt{trad-unsrt}。
  • gb7714-2015 符合中文文献著录标准 GB/T 7714---2015 的样式,著录按顺序编码排版。另外还包括按作者—年份顺序排版著录的样式 gb7714-2015ay
  • caspervector 以中文文献著录标准 GB/T 7714---2015 为基础的一个样式。
  • ieee 兼容 IEEEtran 风格的样式,著录按顺序编码排版。另外还包括按作者—年份顺序排版著录的样式 ieee-alphabetic

索引和 makeindex 工具

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

使用 makeindex 工具的方法

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

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

\usepackage{makeidx}
\makeindex

第二步,在正文中需要索引的地方使用 \index 命令。在需要输出索引的地方(如所有章节之后)使用 \printindex 命令。

第三步,编译过程:

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

索引项的写法

添加索引项的命令为:

\index{<index entry>}

其中 <index entry> 为索引项,写法由 下表 汇总。其中 !@| 为特殊符号,如果要向索引项直接输出这些符号,需要加前缀 ";而 " 需要输入两个引号 "" 才能输出到索引项。

image-20250127204208420

读者可以钻研一下以下给出的一个较为复杂的,结合多级索引、索引格式、页码格式等的用法示例。但在自己使用时,最好还是遵循“简单的就是最好的”原则,尽量使用 上表 中的写法。

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 输出生成颜色的特殊指令。

颜色的表达方式

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

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

颜色的表达方式有两种,其一是使用色彩模型和色彩代码,代码用 01 的数字代表成分的比例。color 宏包支持 rgbcmykgray 模型,xcolor 支持更多的模型如 hsb 等。

image-20250127205538936

其二是直接使用名称代表颜色,前提是已经定义了颜色名称(没定义的话会报错):

image-20250127205710585

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

image-20250127205821233

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

image-20250127205941911

我们还可以通过命令自定义颜色名称,注意这里的 color-mode 是必选参数:

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

如果调用 colorxcolor 宏包时指定 dvipsnames 选项,就有额外的 68 种颜色名称可用。xcolor 宏包还支持通过指定其它选项载入更多颜色名称。限于篇幅不展开介绍,详情请参考 xcolor 宏包的手册。

带颜色的文本和盒子

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

输入带颜色的文本可以用类似 \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>}
image-20250127211405408

\fcolorbox 也可以像 \fbox 那样调节 \fboxrule\fboxsep;对于 \colorbox,调整 \fboxsep 是有效的。

使用超链接

LATEX 中实现超链接功能的是 hyperref 宏包。

hyperref 宏包

hyperref 宏包涉及的链接遍布 LATEX 的每一个角落——目录、引用、脚注、索引、参考文献等等都被封装成超链接。但这也使得它与其它宏包发生冲突的可能性大大增加,虽然宏包已经尽力解决各方面的兼容性,但仍不能面面俱到。为减少可能的冲突,习惯上将 hyperref 宏包放在其它宏包之后调用

graphicx 宏包类似,latex+dvipdfmx 命令下调用 hyperref 宏包时,需要指定选项 dvipdfmx;而 pdflatexxelatex 命令下不需要。

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

\hypersetup{<option1>,<option2>=<value>,...}
\usepackage[<option1>,<option2>=<value>,...]{hyperref}

当选项值为 true 时,可以省略“=true”不写。可用的参数见 下表。

image-20250128001606010

超链接

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

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

\url\nolinkurl 都像抄录命令 \verb 一样输出一个 URL,区别是前者还为 URL 加上了超链接,后者没有。在 \url 等命令的参数 <url> 里,可直接输入如 \%\& 这样的特殊符号。

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

\href{url}{text}
image-20250128002508111

使用 hyperref 宏包后,文档中所有的引用、参考文献、索引等等都转换为超链接。用户也可对某个 \label 命令定义的标签 <label> 作超链接(注意这里的 <label> 虽然是可选参数的形式,但通常是必填的

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

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

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

PDF 书签

hyperref 宏包另一个强大的功能是为 PDF 生成书签。对于章节命令 \chapter\section 等,默认情况下会为 PDF 自动生成书签。和交叉引用、索引等类似,生成书签也需要多次编译源代码,第一次编译将书签记录写入 .out 文件,第二次编译才正确生成书签。

书签的一些属性见 上表。使用 CJK 宏包时,为了防止中文书签出现乱码,需要进行繁琐的设置;但在使用 ctex 宏包和文档类、且使用 xelatexlualatex 编译的情况下,无需用户额外干预,即可正确生成中文书签。

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

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

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

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

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

比如在章节名称里使用公式 E=mc2,而书签则使用纯文本形式的 E=mc^2:

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

PDF 文档属性

hyperref 宏包还提供了一些参数用于改变 PDF 文档的属性,部分见 上表。

posted @   Invinc-Z  阅读(52)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示