LaTeX/术语表
许多技术文档使用普通人群不了解的术语或缩略词。通常的做法是添加一个术语表,以使此类文档更容易理解。
可以使用glossaries包创建术语表。它支持多个术语表、缩略词和符号。此包替换了glossary包,可以用作nomencl包的替代方案。[1]需要更简单解决方案的用户应考虑使用以下方法手动编码其条目描述环境,或longtabutabu包提供的环境。
在你的前言中(如果存在,则在\usepackage{hyperref}
之后)放置\usepackage{glossaries}
和\makeglossaries
。然后在你的前言(推荐)或文档正文中第一次使用之前定义任意数量的\newglossaryentry
和\newacronym
术语表和缩略词条目。最后添加一个\printglossaries
调用以在你的文档结构中定位术语表列表。然后用\gls{mylabel}
宏(以及类似的宏)来同时插入你预定义的文本并构建相关的术语表。文件处理现在必须包括对makeglossaries document_name_without_extension
的调用,然后至少再调用一次latex
或pdflatex
。
要使用glossaries包,您必须显式加载它
\usepackage{glossaries}
|
如果你想使用xindy(高级索引工具[2])用于索引阶段,而不是makeindex(默认值),您需要指定xindy选项
\usepackage[xindy]{glossaries}
|
为了使术语表显示在您的目录中,您需要指定toc选项
\usepackage[toc]{glossaries}
|
另请参阅本页面底部的自定义名称。
最后,将以下命令放在你的文档前言中以生成术语表
\makeglossaries
|
除非你在hyperref包之后加载glossaries包,否则生成的术语表中的任何链接都将不可点击。
此外,希望使用makeglossaries的用户需要安装Perl——这通常不是Microsoft Windows平台上的默认设置。也就是说,makeglossaries仅提供了一个方便的界面到makeindex和xindy并且不是必需的。
要使用术语表中的条目,您首先需要定义它。根据您定义的内容以及如何使用它,有几种方法可以定义条目。
请注意,除非在文档中使用,否则已定义的条目不会包含在打印的术语表中。这使您可以创建一个通用术语的术语表,并将其\include
到所有文档中。
要在术语表中定义术语,请使用\newglossaryentry
宏
\newglossaryentry{<label>}{<settings>}
|
<label>是用于标识术语表中条目的唯一标签,<settings>是逗号分隔的key=value对,用于定义条目。
例如,要定义一个计算机条目
\newglossaryentry{computer}
{
name=computer,
description={is a programmable machine that receives input,
stores and manipulates data, and provides
output in a useful format}
}
|
上面的示例定义了一个标签和条目名称相同的条目。这并不总是这样,因为下一个条目将显示
\newglossaryentry{naiive}
{
name=na\"{\i}ve,
description={is a French loanword (adjective, form of naïf)
indicating having or showing a lack of experience,
understanding or sophistication}
}
|
当您定义术语时,您需要记住它们将按以下排序makeindex或xindy。虽然xindy更了解 LaTeX,但它通过省略 latex 宏(\"{\i}
)来实现,从而错误地将上述示例排序为nave.
makeindex效果也不会好很多,因为它不理解 TeX 宏,它会完全按照定义的方式解释该词,将其放在符号类中,在以naa开头的单词之前。因此,需要扩展我们的示例并指定如何对单词进行排序
\newglossaryentry{naiive}
{
name=na\"{\i}ve,
description={is a French loanword (adjective, form of naïf)
indicating having or showing a lack of experience,
understanding or sophistication},
sort=naiive
}
|
您还可以指定复数形式,如果它们不是通过添加“s”来形成的(我们将在下一节中学习如何使用它们)
\newglossaryentry{Linux}
{
name=Linux,
description={is a generic term referring to the family of Unix-like
computer operating systems that use the Linux kernel},
plural=Linuces
}
|
或者,对于首字母缩略词
\newacronym[longplural={Frames per Second}]{fpsLabel}{FPS}{Frame per Second}
|
这将避免错误的长复数:Frame per Seconds。
到目前为止,术语表条目被定义为键值列表。有时,描述比仅仅一段话更复杂。例如,您可能希望有多个段落、项目符号列表、图形、表格等。对于此类术语表条目,请使用命令longnewglossaryentry其中描述跟随键值列表。然后,计算机条目如下所示
\longnewglossaryentry{computer}
{
name=computer
}
{is a programmable machine that receives input,
stores and manipulates data, and provides
output in a useful format}
|
已定义的条目也可以是符号
\newglossaryentry{pi}
{
name={\ensuremath{\pi}},
description={ratio of circumference of circle to its
diameter},
sort=pi
}
|
您还可以同时定义名称和符号
\newglossaryentry{real number}
{
name={real number},
description={include both rational numbers, such as $42$ and
$\frac{-23}{129}$, and irrational numbers,
such as $\pi$ and the square root of two; or,
a real number can be given by an infinite decimal
representation, such as $2.4871773339\ldots$ where
the digits continue in some way; or, the real
numbers may be thought of as points on an infinitely
long number line},
symbol={\ensuremath{\mathbb{R}}}
}
|
请注意,并非所有术语表样式都显示已定义的符号。
要定义一个新的首字母缩略词,您可以使用 \newacronym
宏
\newacronym{<label>}{<abbrv>}{<full>}
|
其中 <label> 是标识首字母缩略词的唯一标签,<abbrv> 是首字母缩略词的缩写形式,<full> 是扩展文本。例如
\newacronym{lvm}{LVM}{Logical Volume Manager}
|
如果使用,则可以将已定义的首字母缩略词放在单独的列表中acronym包选项
\usepackage[acronym]{glossaries}
|
定义术语后,您可以在文档中使用它。有许多不同的命令用于引用术语表术语。
常规引用与 \gls
命令一起使用。例如,如果您将术语表条目定义为上述条目,则可以使用以下方式使用它
\Gls{naiive} people don't know about
alternative \gls{computer} operating systems:
\glspl{Linux}, BSDs and GNU/Hurd.
|
天真的人不知道替代计算机操- |
上述示例中使用的命令说明
\gls{<label>}
|
此命令打印与其参数传递的 <label> 关联的术语。如果在 glossaries 之前加载了 hyperref 包,它也将超链接到术语表中的条目。
\glspl{<label>}
|
此命令打印已定义术语的复数形式,除此之外,它的行为方式与 gls
相同。
\Gls{<label>}
|
此命令打印术语的单数形式,并将第一个字符转换为大写。
\Glspl{<label>}
|
此命令打印复数形式,并将术语的第一个字母转换为大写。
\glslink{<label>}{<alternate text>}
|
此命令照常创建链接,但会排版替代文本。它还可以采用一些选项来更改其默认行为(请参阅文档)。
\glssymbol{<label>}
|
此命令打印在 \newglossaryentry{<label>}{symbol={glssymbol 的输出}, ...} 中定义的内容。
\glsdesc{<label>}
|
此命令打印在 \newglossaryentry{<label>}{description={glsdesc 的输出}, ...} 中定义的内容。
首字母缩略词的行为与普通术语表术语略有不同。在第一次使用时,\gls
命令将显示“<full> (<abbrv>)”。在随后的使用中,只会显示缩写。如果这种情况没有发生,则需要设置 \setacronymstyle{long-short}
。
要重置首字母缩略词的第一次使用,请使用命令
\glsreset{<label>}
|
或者,如果要重置所有首字母缩略词的使用状态
\glsresetall
|
类似地,要取消设置首字母缩略词的第一次使用,以便仅显示缩写,请使用
\glsunset{<label>}
|
或者,对于所有首字母缩略词
\glsunsetall
|
如果您只想打印首字母缩略词的长版本而不带缩写“<full>”,请使用
\acrlong{<label>}
|
如果您只想打印首字母缩略词的长版本以及缩写“<full> (<abbrv>)”,请使用
\acrfull{<label>}
|
如果您只想打印缩写“<abbrv>”,请使用
\acrshort{<label>}
|
要显示排序的术语列表,您需要添加
\printglossaries
|
在您希望术语表和首字母缩略词列表出现的位置。
如果要打印所有条目,则可以在 \printglossaries
之前插入命令。
\glsaddall
|
您可能还想使用 \usepackage[nonumberlist]{glossaries}
来抑制术语表中的位置列表。
\printglossaries
将按定义顺序显示所有术语表。[3] 如果没有定义自定义术语表,则将显示默认术语表和首字母缩略词列表。
术语表和首字母缩略词列表可以分别显示在不同位置[4]
\usepackage[acronyms]{glossaries}
\printglossary[type=\acronymtype] % prints just the list of acronyms
Some text between the list of acronyms and the glossary.
\printglossary % if no option is supplied the default glossary is printed.
|
对同一术语同时拥有首字母缩略词和术语表条目可能很有用。要链接这两个条目,请使用以下方式定义首字母缩略词,其中包含对术语表条目的引用
\newglossaryentry{gls-OWD} {
name={One-Way Delay},
description={The time a packet uses through a network from one host to another},
}
\newacronym[see={[Glossary:]{gls-OWD}}]{OWD}{OWD}{One-Way Delay\glsadd{gls-OWD}}
|
Refer to acronym with \gls{OWD} and the glossary with \gls{gls-OWD}
为了简化操作,我们可以使用此命令(修改自官方文档中的示例)
Syntax: \newdualentry[glossary options][acronym options]{label}{abbrv}{long}{description}
\usepackage{xparse}
\DeclareDocumentCommand{\newdualentry}{ O{} O{} m m m m } {
\newglossaryentry{gls-#3}{name={#5},text={#5\glsadd{#3}},
description={#6},#1
}
\makeglossaries
\newacronym[see={[Glossary:]{gls-#3}},#2]{#3}{#4}{#5\glsadd{gls-#3}}
}
|
然后,为术语表和首字母缩略词列表定义新的(双重)条目,如下所示
\newdualentry{OWD} % label
{OWD} % abbreviation
{One-Way Delay} % long form
{The time a packet uses through a network from one host to another} % description
|
术语表部分的名称可以用自定义名称替换或翻译成不同的语言。将选项 title 添加到 \printglossary
以指定术语表的标题。添加选项 toctitle 以指定在目录中使用的标题(如果未使用,则 title 用作默认值)。[5]
\printglossary[title=List of Terms,toctitle=Terms and abbreviations]
|
要省略每个描述结尾处的句点,请使用以下代码
\usepackage[nopostdot]{glossaries}
|
许多预建样式可用,并且可以使用以下方法轻松更改
% Must be issued before \printglossaries
\setglossarystyle{<newstyle>}
|
常用的样式包括
- 列表
My Term Has some long description 7, 9
- altlist(在术语后插入换行符并缩进描述)
My Term Has some long description 7, 9
- altlistgroup 或 listgroup(group 根据术语的首字母添加分组)
M My First Term Has some long description 7, 9 My Second Term Has some long description 7, 9
- altlisthypergroup 或 listhypergroup(hyper 在每个术语表顶部添加一个超链接“索引”以跳转到一个组)
A|B|C|D|F|G|I|M|O|R|S|C|D|G|M|P A A First term Has some long description 7, 9 B Barely missed first Has some long description 7, 9
要将术语表添加到最终文档中,需要
- 构建您的 LaTeX 文档——这也会生成术语表所需的 aux 文件makeglossaries
- 调用makeglossaries——一个脚本,它选择正确的字符编码和语言设置,并且也会运行xindy或makeindex如果这些在您的文档文件中指定
- 再次构建您的 LaTeX 文档——以生成包含术语表条目的文档
因此
latex doc makeglossaries doc latex doc
其中latex是您通常的构建调用,可能是 pdflatex
、lualatex
和doc是您的 LaTeX 主文件的文件名(不含扩展名)。选项 -d out
可用于指定 aux 和其他中间文件的位置。如果您的条目相互链接(条目本身使用 \gls
调用链接到其他条目),则需要运行步骤 1 和 2 两次,即按以下顺序:1、2、1、2、3。
任何问题都将在doc.log和doc.glg文件中报告。
在 TeX Live 中,以及从 2015 年 6 月开始在 MikTeX 中,xindy 已经包含在内。
MikTeX 安装目录路径中存在空格的问题。可以通过以下编辑解决:http://tex.stackexchange.com/questions/251221/miktex-and-xindy-problems/251801#251801
您需要在安装xindy后重新启动 Texmaker,以更新对xindy和 Perl 二进制文件的 PATH 引用。
然后,在 Texmaker 中,转到用户 -> 用户命令 -> 编辑用户命令。
选择命令 1
- 菜单项 = makeglossaries
- 命令 = makeglossaries %
现在按下Alt+Shift+F1,然后 ->F1
注意,对于 Texmaker 的“使用构建目录”选项:makeglossaries 需要找到 aux 文件。值得庆幸的是,虽然 Texmaker 在这里没有提供帮助,但 makeglossaries 的选项-d <dir> 提供了子目录的情况。因此,在这种情况下,命令应为
命令 = makeglossaries -d build %。
应在前言中包含(注意,hyperref 应在glossaries 之前加载)
\usepackage[nomain,acronym,xindy,toc]{glossaries} % nomain, if you define glossaries in a file, and you use \include{INP-00-glossary} \makeglossaries \usepackage[xindy]{imakeidx} \makeindex
将所有术语表/首字母缩略词写入一个文件:例如:INP-00-glossary.tex
\newacronym{ddye}{D$_{\text{dye}}$}{donor dye, ex. Alexa 488} \newacronym[description={\glslink{r0}{F\"{o}rster distance}}]{R0}{$R_{0}$}{F\"{o}rster distance} \newglossaryentry{r0}{name=\glslink{R0}{\ensuremath{R_{0}}},text=F\"{o}rster distance,description={F\"{o}rster distance, where 50\% ...}, sort=R} \newglossaryentry{kdeac}{name=\glslink{R0}{\ensuremath{k_{DEAC}}},text=$k_{DEAC}$, description={is the rate of deactivation from ... and emission)}, sort=k}
在前言中包含术语表定义(在“\begin{document}”之前)
\loadglsentries[main]{INP-00-glossary} % or using \input: %\input{INP-00-glossary} \begin{document}
打印术语表,靠近结尾
\appendix \bibliographystyle{plainnat} \bibliography{bibtex} \printindex \printglossaries \end{document}
- ↑ http://www.ctan.org/pkg/nomencl
- ↑ “xindy”和“makeindex”的区别
- ↑ http://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/glossaries/glossaries-user.html#dx1-35001
- ↑ http://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/glossaries/glossaries-user.html#dx1-43001
- ↑ 2014.01.13 时的 glossaries.sty v4.02 用户手册 http://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/glossaries/glossaries-user.html#sec:printglossary
- 使用 LaTeX 撰写博士论文,Nicola L.C. Talbot,[1]
- glossaries 常见问题解答,Nicola L. C. Talbot,glossaries 常见问题解答
- 术语表、命名法、符号和首字母缩略词列表,Nicola L. C. Talbot,链接