我得到了悬空的词汇表条目。如果主文档未引用某个首字母缩略词或词汇表条目,则只能从其他词汇表条目(这是由于引用了主文档,因此出现在词汇表章节中),它们并没有出现在 PDF 中,而是hyperref
悬而未决:
pdfTeX warning (dest): name{glo:foobar} has been referenced but does not exist, replaced by a fixed one
pdfTeX warning (dest): name{glo:foo} has been referenced but does not exist, replaced by a fixed one
平均能量损失
\documentclass{article}
\usepackage{hyperref}
\hypersetup{
colorlinks = true,
linkcolor = blue,
urlcolor = blue,
citecolor = blue,
}
\usepackage[nonumberlist,style=altlist]{glossaries}
\makeglossaries
\newacronym{foo}{foo}{first metasyntactic variable}
\newacronym{meow}{meow}{the sound a cat makes}
\newglossaryentry{foobar}
{
name=foobar,
description={combination of two metasyntactic variables,
but also often used as \emph{fubar}}
}
\newglossaryentry{bar}
{
name=bar,
description={second metasyntactic variable, see also
\gls{foo}, \gls{foobar}, \gls{baz}}
}
\newglossaryentry{baz}
{
name=baz,
description={third metasyntactic variable, see also
\gls{foo}, \gls{bar}}
}
\newglossaryentry{eins}{name=eins,description={eins, siehe \gls{zwei}}}
\newglossaryentry{zwei}{name=zwei,description={zwei, siehe \gls{drei}}}
\newglossaryentry{drei}{name=drei,description={drei, siehe \gls{vier}}}
\newglossaryentry{vier}{name=vier,description={vier, siehe \gls{fynf}}}
\newglossaryentry{fynf}{name=fynf,description={fynf, siehe \gls{sechs}}}
\newglossaryentry{sechx}{name=sechs,description={sechs, siehe \gls{sieben}}}
\newglossaryentry{sieben}{name=sieben,description={sieben, siehe \gls{acht}}}
\newglossaryentry{acht}{name=acht,description={acht, und alle haben mitgemacht}}
\begin{document}
bla bla \gls{bar} bla bla \gls{baz} bla bla \gls{eins} bla bla
\newpage
\printglossaries
\end{document}
由此产生的词汇表章节只有酒吧和巴兹但它们并不包含它们所引用的条目,尽管它们应该链接到这些条目。(然而,喵不应该出现。)同样,条目艾因斯通过啊也应该出现(即限制嵌套的东西是不可接受的;实际上,这很可能不会嵌套那很多,但由于 PDF 的生成是自动的,我需要一种允许我编写脚本的方法,如果需要循环,则需要能够以确定的方式中断循环)。
经过一些评论后,我添加了一个要求允许latex-maven-plugin
重复运行makeglossaries
作为一种快速解决方法(当然,递归深度有限)……目前。(这个问题仍然悬而未决,我不能依赖bib2gls或者进行测试。)
答案1
正如评论中提到的那样,这里的问题是description
第一次运行 LaTeX 时,字段中的条目在文档中不存在。只有当它们在词汇表中实际排版后(后glossaries
索引应用程序创建了词汇表)才能真正索引它们,这意味着再次调用索引应用程序。仅使用和对此无能为力makeglossaries
。您可以尝试搜索模式pdfTeX warning (dest): name{glo:
标签} has been referenced but does not exist
但这只出现在 中hyperref
。 潜在问题(第一次运行时索引不完整)仍然存在。 如果您不小心使用了\glshyperlink
而没有索引条目,您也可能会得到此模式的错误匹配。
有一个新的命令行应用程序叫做bib2gls
可以代替makeglossaries
/ makeindex
/ xindy
,现在 TeX Live 和 MikTeX 中都有。它仅适用于glossaries-extra
扩展包(至少 v1.12,尽管最新版本最好),并且词汇表条目存储在文件中.bib
而不是文件中.tex
。因此,您的示例条目将位于一个.bib
文件中(例如,名为test.bib
):
@acronym{foo,
short={foo},
long={first metasyntactic variable}
}
@acronym{meow,
short={meow},
long={the sound a cat makes}
}
@entry{foobar,
name={foobar},
description={combination of two metasyntactic variables,
but also often used as \emph{fubar}}
}
@entry{bar,
name={bar},
description={second metasyntactic variable, see also
\gls{foo}, \gls{foobar}, \gls{baz}}
}
@entry{baz,
name={baz},
description={third metasyntactic variable, see also
\gls{foo}, \gls{bar}}
}
@entry{eins,name={eins},description={eins, siehe \gls{zwei}}}
@entry{zwei,name={zwei},description={zwei, siehe \gls{drei}}}
@entry{drei,name={drei},description={drei, siehe \gls{vier}}}
@entry{vier,name={vier},description={vier, siehe \gls{fynf}}}
@entry{fynf,name={fynf},description={fynf, siehe \gls{sechs}}}
@entry{sechs,name={sechs},description={sechs, siehe \gls{sieben}}}
@entry{sieben,name={sieben},description={sieben, siehe \gls{acht}}}
@entry{acht,name={acht},description={acht, und alle haben mitgemacht}}
与文档文件略有不同.tex
:
\documentclass{article}
\usepackage{hyperref}
\hypersetup{
colorlinks = true,
linkcolor = blue,
urlcolor = blue,
citecolor = blue,
}
\usepackage[record,% <--- changed
nonumberlist,style=altlist]
{glossaries-extra}% <--- changed
\GlsXtrLoadResources[% <--- changed
src={test},% data in test.bib
]
\begin{document}
bla bla \gls{bar} bla bla \gls{baz} bla bla \gls{eins} bla bla
\newpage
\printunsrtglossaries% <--- changed
\end{document}
请注意,没有\makeglossaries
命令。相反,该record
选项将所有索引信息写入.aux
文件中。该文件由 读取bib2gls
,因此它可以找出已引用的条目。然后,它会解析字段以获取命令,例如\gls
确定依赖项。如果您运行bib2gls
它,--verbose
它将列出它为每个条目找到的依赖项:
Added dependent: foo
Added dependent: foobar
Added dependent: baz
Added dependent: barfoo
Added dependent: bar
Added dependent: zwei
Added dependent: drei
Added dependent: vier
Added dependent: fynf
Added dependent: sechs
Added dependent: sieben
Added dependent: acht
默认行为是为每个引用条目添加依赖条目。依赖条目的位置列表直到下次运行才会更新(因为这是无法bib2gls
确定的),但由于您已经使用过,所以nonumberlist
这对您的文档来说不是问题。
详细模式还会列出写入通过以下方式加载的外部文件的条目\GlsXtrLoadResources
:
acht
bar
barfoo
baz
drei
eins
foo
foobar
fynf
sechs
sieben
vier
zwei
因此它能够选取所引用条目的依赖项。