未显示缩写词列表

未显示缩写词列表
\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

创建首字母缩略词列表(或词汇表)至少分为三个阶段:

  1. 使用 LaTeX(或 PDFLaTeX 或 XeLaTeX 或 LuaLaTeX,视情况而定)排版文档
  2. 运行makeglossariesPerl脚本或makeglossaries-liteLua脚本。
  3. 重新排版该文档。

(您可能需要重复步骤 3。)每次您以改变列表的方式修改文档时(例如,添加或删除实例\gls,或者删除或插入导致相关页码发生变化的文本),您都需要重复所有三个步骤以更新列表。

\makeglossaries文档中的命令会创建一些与词汇表相关的文件(.glo.acn),并且每次使用类似的命令时,\gls都会在排版文档时(在步骤 1 中)将条目添加到相关文件中。

在步骤 2 中,运行一个特殊的索引应用程序,该应用程序读取与词汇表相关的文件,并使用排版词汇表或首字母缩略词列表所需的 LaTeX 代码写入另一个文件(.gls.acr)。然后,在步骤 3 中将此文件输入到您的文档中。

第 2 步最容易引起混乱,因为它需要运行命令行脚本。但是,大多数前端都有一个按钮或菜单项,您可以单击该按钮或菜单项来运行脚本。大多数前端需要配置才能运行makeglossariesmakeglossaries-lite。以下 TeX.SE 答案提供了makeglossaries在各种前端上集成的说明。

对于 WinEdt,请查看 comp.text.tex 线程从 WinEdt 宏执行词汇表的 makeindex

对于其他前端,请参阅将 makeglossaries 或 makeglossaries-lite 或 bib2gls 纳入文档构建中

在上述每种情况下,您都需要Perl如果您使用makeglossaries(但没有makeglossaries-lite)或者您想使用xindy而不是默认的,则安装makeindex

由于makeglossaries-lite是 Lua 脚本,如果您有包含 LuaTeX 的现代 TeX 发行版,那么您应该已经拥有 Lua 解释器。如果您想使用,只需将所有对 的引用替换为makeglossaries-lite即可,尽管它的选项较少,并且不提供诊断工具,因此如果出现问题,它就没那么有用了。(请注意,已添加到版本makeglossariesmakeglossaries-litemakeglossaries-liteglossaries4.16,因此它不适用于旧版本。)

如果您在第 2 步遇到困难,另一种可能性是将包选项添加automakeglossaries

\usepackage[automake]{glossaries}

(引入于glossaries版本中引入4.08。)这将尝试让 TeX 运行外部应用程序(步骤 3 仍是必需的),但如果 shell 转义被禁用,这将不起作用。此选项xindy在受限模式下也不适用,因为xindy不在受信任应用程序列表中。¹ 对于和xindyautomake您需要安全性较低的非受限模式,出于安全原因,我不建议使用这种模式。

或者,还有GUI 方法使用 Java 而不是 Perl。另请参阅什么会干扰词汇表并阻止打印?


¹TeX Live 就是这种情况。我不知道 MiKTeX 的情况。

答案2

即使不需要makeglossaries应用程序(因此不需要安装 Perl),也可以编译您的 MWE,利用makeindex

事实上,跑步

  1. pdflatex <yourfile>
  2. makeindex.exe -s <yourfile>.ist -o <yourfile>.acr <yourfile>.acn
  3. pdflatex <yourfile>
  4. pdflatex <yourfile>

工作原理相同。

答案3

我将添加一个对我有用的答案,因为这个问题似乎没有可接受的答案,而且这个问题是网络搜索中第一个出现的问题。

词汇表包文档关于使用 Hyperref 的说明如下:

如果你使用带有 hyperref 的 glossaries 包,请多加小心。与通常的建议(hyperref 应该最后加载)相反,词汇表(和额外的词汇表)必须在 hyperref 之后加载

以及有关显示条目的以下内容:

  1. 添加\makenoidxglossaries到您的序言中(在您开始定义您的条目之前,如第 2 节所述)。
  2. 放置:\printnoidxglossary[sort=〈order〉,〈other options〉]您希望条目列表出现的位置。或者,使用\printnoidxglossaries

按照这些说明为我解决了这个问题。

笔记:我使用的是 Overleaf,因此无法控制软件包版本。他们似乎使用软件包版本 v4.41+。这就是为什么它对我有用。我无法确认它是否适用于较低版本号。

答案4

我也是 overleaf 用户,也遇到过类似的问题。我发现 Byebye 的回答很有用。

\makenoidxglossaries使用和的替代方法\printnoidxglossary是添加选项“automake”,这对我有用:(\usepackage[automake]{glossaries}序言)+ \makeglossaries(序言)+ \printglossaries(您想要打印词汇表的位置)。

相关内容