示例 1

示例 1

我有一个奇怪的经历,从组合

    \glossarystyle{altlisthypergroup}
    \clearpage
    Printing acronyms
    \printglossary[type=acronym]

仅打印调试消息,不打印词汇表。

甚至,\printglossary导致挂起。同时,文本中的命令如\gls{}按预期工作。有什么建议,还有什么其他包会干扰glossaries?(它是一个更大项目的一部分,MWE 按预期工作。)


我从 TeXstudio 切换到命令行版本。我收到输出

makeglossaries DSc2
makeglossaries version 2.12 (2014-01-20)
added glossary type 'main' (glg,gls,glo)
added glossary type 'acronym' (alg,acr,acn)
makeindex  -s "DSc2.ist" -t "DSc2.alg" -o "DSc2.acr" "DSc2.acn"
This is makeindex, version 2.15 [TeX Live 2013] (kpathsea + Thai support).
Scanning style file ./DSc2.ist.............................done (29 attributes redefined, 0 ignored).
Scanning input file DSc2.acn....done (9 entries accepted, 0 rejected).
Sorting entries....done (36 comparisons).
Generating output file DSc2.acr....done (15 lines written, 0 warnings).
Output written in DSc2.acr.
Transcript written in DSc2.alg.
Warning: File 'DSc2.glo' is empty.
Have you used any entries defined in glossary 'main'?
Remember to use package option 'nomain' if you
don't want to use the main glossary.

我不明白的是,如果有条目被接受并排序,为什么我会收到关于 .glo 文件的空警告?此外,为什么如果我尝试继续使用 pdflatex,pdflatex 会挂起?

答案1

我意识到您已成功创建了 MWE 并将其作为单独的问题发布,但我认为以更通用的方式回答您的问题“什么会干扰词汇表以防止打印?”可能会有所帮助,这可能对其他人有用。

有一个名为制作词汇表可用于分析使用该glossaries包的文档以确定可能存在的问题。(它还具有批处理模式,可以代替使用,makeglossaries但 GUI 模式具有更广泛的诊断消息。)一旦确定问题并修复它,您就可以切换回makeglossaries

虽然makeglossaries解析makeindex/xindy警告和错误消息,但makeglossariesgui还会分析文件中的 LaTeX 消息.log并可以发现makeglossaries未检测到的问题。下面是一些示例。

示例 1

假设我有一个名为的文件test.tex

\documentclass{article}

\usepackage[acronym]{glossaries}

\makeglossaries

\newacronym{sa}{SA}{Sample Acronym}

\begin{document}
\gls{sa}.

\printglossary[type=acronym]
\end{document}

如果我照常

pdflatex test
makeglossaries test
pdflatex test

然后makeglossaries发出您观察到的警告:

Warning: File 'test.glo' is empty.
Have you used any entries defined in glossary 'main'?
Remember to use package option 'nomain' if you
don't want to use the main glossary.

在这种情况下,这是一个警告而不是错误,但它可能会掩盖更严重的问题(如下面的示例 3 所示)。

使用时makeglossariesgui,如果我加载,test.aux我会收到错误消息:

未找到词汇表‘main’的条目

makeglossariesgui 的图片

诊断选项卡提供了更多详细信息:

诊断标签图像

内容如下:

主词汇表中未列出任何条目。请记住,您必须使用词汇表包提供的命令对条目进行索引,以便它们出现在词汇表中。已定义但未编制索引的条目将不会列出。如果您不想使用此词汇表,请将nomain包选项添加到您的文档中。检查以下内容:

  • 您是否使用过文档中的类似\gls或的命令\glsadd?(如果没有,则需要添加它们。)
  • 如果你在序言中使用过类似\glsadd或的命令,你是否记得把它们放在\glsaddall \makeglossaries
  • 如果您拥有的词汇表包至少是 4.24 版本,您是否使用过该debug选项?(这可能会为我提供更多信息以供分析。)

如果我切换到“常规信息”选项卡,我可以看到我的文档定义了两个词汇表:mainacronym,但词汇表中没有任何条目main

常规信息选项卡的图像

这就是test.glo文件为空的原因,也是 产生警告的原因makeglossariesmain默认情况下会创建词汇表,但我的文档未定义或使用该词汇表中的任何条目。如果我不需要词汇表main,那么我需要遵循建议并使用nomain包选项:

\usepackage[nomain,acronym]{glossaries}

示例 2

这个问题更加微妙:

\documentclass{article}

\usepackage{glossaries}

\makeglossaries

\newacronym{sa}{SA}{Sample Acronym}

\begin{document}
\gls{sa}.

\printglossary[type=acronym]
\end{document}

在这种情况下,如果我这样做

pdflatex test
makeglossaries test
pdflatex test

然后makeglossaries不会发出任何抱怨,但test.pdf文件不包含词汇表。makeindex对文件非常满意,test.glo并且生成test.gls文件没有问题。如果我切换到glossaries-extra,我会收到一条错误消息,但仅使用基础glossaries包,文件中的消息.log就相当神秘。但是,makeglossariesgui可以检测到问题:

错误信息图像

没有词汇表“首字母缩略词”

诊断面板提供更多信息:

看起来好像您可能做过类似的事情 \printglossary[type={acronym}],但没有acronym词汇表。

示例 3

glossaries这是另一个不会生成错误消息的实例:

% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
\documentclass{article}

\usepackage{glossaries}

\newglossaryentry{sample}{name={sample},description={an example}}
\glsaddall

\makeglossaries
\begin{document}
Test.

\printglossary
\end{document}

在这种情况下makeglossaries没有提供太多帮助:

Warning: File 'test.glo' is empty.
Have you used any entries defined in glossary 'main'?
Remember to use package option 'nomain' if you
don't want to use the main glossary.

我收到与第一个示例相同的错误消息,但我已经使用了,\glsaddall那么问题是什么?答案在makeglossariesgui诊断面板中显示的检查列表中,它与之前的相同,但此处的相关项目是:

  • 如果你在序言中使用过类似\glsadd或的命令,你是否记得把它们放在\glsaddall \makeglossaries

如果我添加debug包选项:

\usepackage[debug]{glossaries}

我得到了更多信息:

似乎您已尝试索引第 10 行的主词汇表中的条目,但相关文件尚未打开。请记住 \makeglossaries在命令前使用\glsadd\glsaddall。丢失索引代码的详细信息:

\glossaryentry{sample?\glossentry{sample}|setentrycounter[]{page}\glsnumberformat}{1}

所以问题是我放\makeglossaries错了地方。它需要放在 之前\glsaddall。(这类似于\index\makeindex。)该glossaries包不会抱怨使用\glsaddallbefore,因为如果您正在处理草稿并且不想在编辑文档的复杂部分时重复重建词汇表,那么注释掉它\makeglossaries是完全合理的。\makeglossaries

因此,“什么会干扰词汇表以防止打印?”的答案是:可能有很多原因,但makeglossariesgui也许能够诊断出原因。

答案2

我刚刚花了大半天时间回答同一个问题。不幸的是,这里所有有用的信息都对我没有帮助。

我的问题具体是:

\usepackage{doc,lipsum} % provides \BibTex and \lipsum macros, for demos

这是我最初的源代码中用来举例的……它阻止了对 的任何调用\printglossaries。不确定是什么原因导致了这个问题。但我遇到了和你完全相同的症状,我可以引用它,\gls{foo}它会在文本中打印“Foo”,这是我定义它的方式,所以我知道这是有效的……但 print 语句什么也没给我,直到我注释掉上面的那行。

希望这能帮助遇到同样问题的人!

相关内容