\documentclass{report}
\usepackage[acronym]{glossaries}
\makeglossary
\newacronym{svm}{SVM}{Support Vector Machine}
\newacronym{wasn}{WASN}{Wireless Sensor Networks}
\begin{document}
\printglossaries
\newpage
using \gls{svm} blah blah \gls{wasn}blah blah.....\gls{svm}
\end{document}
我正在使用上述 MWE 进行测试。编译时,首字母缩略词正确显示在文档主体中,但在需要首字母缩略词列表的地方没有打印任何内容。我在 Windows 7 上使用 TexMakerX 作为我的 IDE。
编译上述代码后,.glo
会创建一个文件,但它是空的。我认为这就是问题所在,但我不知道为什么会发生这种情况。
答案1
创建首字母缩略词列表(或词汇表)至少分为三个阶段:
- 使用 LaTeX(或 PDFLaTeX 或 XeLaTeX 或 LuaLaTeX,视情况而定)排版文档
- 运行
makeglossaries
Perl脚本或makeglossaries-lite
Lua脚本。 - 重新排版该文档。
(您可能需要重复步骤 3。)每次您以改变列表的方式修改文档时(例如,添加或删除实例\gls
,或者删除或插入导致相关页码发生变化的文本),您都需要重复所有三个步骤以更新列表。
\makeglossaries
文档中的命令会创建一些与词汇表相关的文件(.glo
或.acn
),并且每次使用类似的命令时,\gls
都会在排版文档时(在步骤 1 中)将条目添加到相关文件中。
在步骤 2 中,运行一个特殊的索引应用程序,该应用程序读取与词汇表相关的文件,并使用排版词汇表或首字母缩略词列表所需的 LaTeX 代码写入另一个文件(.gls
或.acr
)。然后,在步骤 3 中将此文件输入到您的文档中。
第 2 步最容易引起混乱,因为它需要运行命令行脚本。但是,大多数前端都有一个按钮或菜单项,您可以单击该按钮或菜单项来运行脚本。大多数前端需要配置才能运行makeglossaries
或makeglossaries-lite
。以下 TeX.SE 答案提供了makeglossaries
在各种前端上集成的说明。
- TeXMaker:在 Windows 上使用 Texmaker 和词汇表。
- TeXworks:如何使用 TeXworks 制作词汇表?
- TeXShop:在 TeXShop 中添加新引擎。
对于 WinEdt,请查看 comp.text.tex 线程从 WinEdt 宏执行词汇表的 makeindex。
对于其他前端,请参阅将 makeglossaries 或 makeglossaries-lite 或 bib2gls 纳入文档构建中。
在上述每种情况下,您都需要Perl如果您使用makeglossaries
(但没有makeglossaries-lite
)或者您想使用xindy
而不是默认的,则安装makeindex
。
由于makeglossaries-lite
是 Lua 脚本,如果您有包含 LuaTeX 的现代 TeX 发行版,那么您应该已经拥有 Lua 解释器。如果您想使用,只需将所有对 的引用替换为makeglossaries-lite
即可,尽管它的选项较少,并且不提供诊断工具,因此如果出现问题,它就没那么有用了。(请注意,已添加到版本makeglossaries
makeglossaries-lite
makeglossaries-lite
glossaries
4.16,因此它不适用于旧版本。)
如果您在第 2 步遇到困难,另一种可能性是将包选项添加automake
到glossaries
:
\usepackage[automake]{glossaries}
(引入于glossaries
版本中引入4.08。)这将尝试让 TeX 运行外部应用程序(步骤 3 仍是必需的),但如果 shell 转义被禁用,这将不起作用。此选项xindy
在受限模式下也不适用,因为xindy
不在受信任应用程序列表中。¹ 对于和xindy
,automake
您需要安全性较低的非受限模式,出于安全原因,我不建议使用这种模式。
或者,还有GUI 方法使用 Java 而不是 Perl。另请参阅什么会干扰词汇表并阻止打印?
¹TeX Live 就是这种情况。我不知道 MiKTeX 的情况。
答案2
即使不需要makeglossaries
应用程序(因此不需要安装 Perl),也可以编译您的 MWE,利用makeindex
。
事实上,跑步
pdflatex <yourfile>
makeindex.exe -s <yourfile>.ist -o <yourfile>.acr <yourfile>.acn
pdflatex <yourfile>
pdflatex <yourfile>
工作原理相同。
答案3
我将添加一个对我有用的答案,因为这个问题似乎没有可接受的答案,而且这个问题是网络搜索中第一个出现的问题。
这词汇表包文档关于使用 Hyperref 的说明如下:
如果你使用带有 hyperref 的 glossaries 包,请多加小心。与通常的建议(hyperref 应该最后加载)相反,词汇表(和额外的词汇表)必须在 hyperref 之后加载。
以及有关显示条目的以下内容:
- 添加
\makenoidxglossaries
到您的序言中(在您开始定义您的条目之前,如第 2 节所述)。- 放置:
\printnoidxglossary[sort=〈order〉,〈other options〉]
您希望条目列表出现的位置。或者,使用\printnoidxglossaries
按照这些说明为我解决了这个问题。
笔记:我使用的是 Overleaf,因此无法控制软件包版本。他们似乎使用软件包版本 v4.41+。这就是为什么它对我有用。我无法确认它是否适用于较低版本号。
答案4
我也是 overleaf 用户,也遇到过类似的问题。我发现 Byebye 的回答很有用。
\makenoidxglossaries
使用和的替代方法\printnoidxglossary
是添加选项“automake”,这对我有用:(\usepackage[automake]{glossaries}
序言)+ \makeglossaries
(序言)+ \printglossaries
(您想要打印词汇表的位置)。