我查阅了多个资料来回答这个问题,包括文字博客,latex.org和分享乳胶。我复制了代码,虽然没有收到任何错误,但我没有得到所需的缩写列表,甚至没有得到标题缩写(或词汇表或任何其他标题)。我的缩写位于单独的文件夹中,因此我不知道这是否有区别。另外,我正在使用 Texmaker。
我有一个“主”文件夹,其中包含所有前言代码,并使用“include”命令将所有其他文件夹/章节整合在一起,例如:
\include{Frontmatter/title}
\newpage
\include{Frontmatter/abstract}
\include{Frontmatter/acknowledgements}
\include{Frontmatter/abbreviations}
\include{Frontmatter/declaration}
\tableofcontents
\newpage
\listoffigures
\addcontentsline{toc}{section}{\numberline{}\textit{List of figures}}
\newpage
\listoftables
\addcontentsline{toc}{section}{\numberline{}\textit{List of tables}}
\newpage
\pagenumbering{arabic}
\include{Chapters/ch1/ch1}
\include{Chapters/ch2/ch2}
etc.
我对 Latex 还比较陌生,因此非常希望能够提供一些简单的例子。
答案1
我认为可能存在多个问题。我在评论中已经提到了几个,但我认为可能还有更多:
- 您有环境中的缩写定义
document
。在文档环境中定义条目的缺点 - 包含缩写定义的文件已使用
\include
而不是输入\input
。为什么我不应该使用 \include 来包含我的词汇表定义? - 从您的代码片段中无法看出,但您可能没有使用索引缩写所需的任何命令。如果没有这些命令,缩写列表将为空。
- 您可能省略了上一点处理索引所需的步骤。
假设您有一个名为的文件abbreviations.tex
,其中包含:
\newacronym{xml}{XML}{extensible markup language}
\newacronym{svg}{SVG}{scalable vector graphics}
\newacronym{html}{HTML}{hypertext markup language}
然后应该输入前言使用\input
或\loadglsentries
。在文档中,您需要使用如下命令\gls
,它处理首次/后续使用格式和索引。
以下是完整的文档:
\documentclass{book}
\usepackage{glossaries}
\makeglossaries
\loadglsentries{abbreviations}
\title{Sample Document}
\author{Ann Author}
\begin{document}
\frontmatter
\maketitle
\tableofcontents
\printglossary[title={Abbreviations}]
\mainmatter
\include{introduction}
\end{document}
其中introduction.tex
包含:
\chapter{Introduction}
Something about \gls{html}. Something else about \gls{html}.
如果调用主文件myDoc.tex
,则构建过程为:
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
或者(如果您没有安装 Perl):
pdflatex myDoc
makeglossaries-lite myDoc
pdflatex myDoc
(根据您的设置,您可能需要使用makeglossaries-lite.lua
而不是makeglossaries-lite
。)
如果您使用的文本编辑器只需单击按钮即可运行 LaTeX,那么您需要找到一种方法来添加makeglossaries
(或makeglossaries-lite
)作为可识别的工具。这取决于编辑器。既然您使用了标签texmaker
,我猜这就是您正在使用的,所以尝试在 Windows 上使用 Texmaker 和词汇表。
仅在创建关联文件后(在makeglossaries
/makeglossaries-lite
步骤期间)才会出现缩写列表。
另一个选项是使用automake
package 选项,它将尝试在 LaTeX 运行期间使用 TeX 的 shell escape 生成关联文件。由于 TeX 能够执行其他应用程序存在安全问题,因此根据您的 TeX 设置,此操作可能会被禁止。
例如:
\documentclass{book}
\usepackage[automake]{glossaries}
\makeglossaries
\loadglsentries{abbreviations}
\title{Sample Document}
\author{Ann Author}
\begin{document}
\frontmatter
\maketitle
\tableofcontents
\printglossary[title={Abbreviations}]
\mainmatter
\include{introduction}
\end{document}
文档构建现在如下:
pdflatex myDoc
pdflatex myDoc
缩写列表仅包括文档中引用的术语\gls
:
(1 表示使用的页码\gls{html}
。如果您不想要它,请使用nonumberlist
包选项。)
xml
和术语svg
未列出,因为它们未被引用。以下是 的修改版本introduction.tex
:
\chapter{Introduction}
Something about \gls{html}. Something else about \gls{html}.
Something about \gls{xml}.
重建文档,现在列出了 XML:
SVG 术语仍然未列出。
这是使用包的最常见方法glossaries
。类似的方法是添加xindy
包选项。构建过程大致相同,但现在makeglossaries
将尝试运行xindy
代替makeindex
。
还有另一种方法,它不使用任何外部工具,因为它使用 TeX 进行排序和整理,但它是效率最低的方法,在某些情况下可能会失败。修改后的文档如下:
\documentclass{book}
\usepackage{glossaries}
\makenoidxglossaries % <--- use TeX to sort and collate
\loadglsentries{abbreviations}
\title{Sample Document}
\author{Ann Author}
\begin{document}
\frontmatter
\maketitle
\tableofcontents
\printnoidxglossary[title={Abbreviations}]% <--- use TeX to sort and collate
\mainmatter
\include{introduction}
\end{document}
这glossaries-extra
扩展包提供了一种手动方法,不进行排序或整理。相反,所有定义的术语都将按定义顺序列出,即使它们未在文档中使用。以下是修改后的文档:
\documentclass{book}
\usepackage[sort=none]{glossaries-extra}
% set the abbreviation style before abbreviations are defined:
\setabbreviationstyle % requires glossaries-extra.sty
[acronym]% governs \newacronym (unless category key is set)
{long-short}% style name
\loadglsentries{abbreviations}
\title{Sample Document}
\author{Ann Author}
\begin{document}
\frontmatter
\maketitle
\tableofcontents
\printunsrtglossary[title={Abbreviations}]% <--- no sorting or collating
\mainmatter
\include{introduction}
\end{document}
现在列出了所有条目,但它们按定义顺序排列,没有数字列表。基本示例自动添加的描述后面的句号glossaries
丢失了。您可以使用包选项postdot
或将其添加回来postpunc=dot
。
使用glossaries-extra
,你可以使用\newabbreviation
代替\newacronym
。例如:
\newabbreviation{xml}{XML}{extensible markup language}
\newabbreviation{svg}{SVG}{scalable vector graphics}
\newabbreviation{html}{HTML}{hypertext markup language}
[acronym]
现在应该省略可选参数\setabbreviationstyle
:
% set the abbreviation style before abbreviations are defined:
\setabbreviationstyle % requires glossaries-extra.sty
{long-short}% style name
事实上,long-short
样式是 的默认样式\newabbreviation
,因此您可以忽略它。我已将其包含在下面,以突出显示如果需要不同的样式,命令需要去哪里。
最后一种方法是使用.bib
格式。如果你有大量术语,你可能会发现这种方法更方便,因为你可以在书目管理系统中管理文件,例如贾布雷夫。
这些缩写现在在名为 的文件中定义abbreviations.bib
(而不是abbreviations.tex
):
% Encoding: UTF-8
@abbreviation{xml,
short = {XML},
long = {extensible markup language}
}
@abbreviation{svg,
short = {SVG},
long = {scalable vector graphics}
}
@abbreviation{html,
short = {HTML},
long = {hypertext markup language}
}
该文件现为:
\documentclass{book}
\usepackage[record]% using bib2gls
{glossaries-extra}
% set the abbreviation style before abbreviations are defined:
\setabbreviationstyle % requires glossaries-extra.sty
{long-short}% style name
\GlsXtrLoadResources[
src={abbreviations}% definitions provided in abbreviations.bib
]
\title{Sample Document}
\author{Ann Author}
\begin{document}
\frontmatter
\maketitle
\tableofcontents
\printunsrtglossary[title={Abbreviations}]% <--- using bib2gls
\mainmatter
\include{introduction}
\end{document}
构建过程如下:
pdflatex myDoc
bib2gls myDoc
pdflatex myDoc
同样,您需要将 添加bib2gls
到文本编辑器中作为可识别工具。只需按照 相同的步骤操作makeglossaries
,但将 替换makeglossaries
为bib2gls
。
- 对于除 之外的所有方法
sort=none
,您必须使用 之类的命令对需要出现在缩写列表中的术语进行索引\gls
。未编入索引的术语不会出现在列表中。 - 除了第一种方法(
\makeglossaries
仅使用基础glossaries
包)之外,其他所有方法都无法在document
环境中定义术语。使用第一种方法可以,但可能会出错。 - 仅使用
\input
或\loadglsentries
不使用\include
(除了bib2gls
需要使用的方法\GlsXtrLoadResources
)。
glossaries
由于使用和包的方式有多种glossaries-extra
,如果您遇到问题,则需要提供一个简短但完整的示例文档(如此处的文档)并说明您如何构建文档。