' glossaries
(v4.42) 用户手册声称(第 48 页):
注意:当未指定复数时,用于生成复数形式的后缀由
\glspluralsuffix
(对于一般条目)给出[...]这意味着有效的后缀将是针对最后加载的重新定义这些命令的语言。
但以下 MCE:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[french,ngerman,dutch,english]{babel}
\usepackage{glossaries}
\newacronym{gnu}{GNU}{GNU's Not Unix}
\begin{document}
\gls{gnu}
\glspl{gnu}
\end{document}
指出情况并非如此,因为:
其
.log
文件显示最后加载的.ldf
文件是来自第一种加载的语言的文件:(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-english/glossaries-english.ldf) (/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-dutch/glossaries-dutch.ldf) (/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-german/glossaries-german.ldf) (/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-french/glossaries-french.ldf)
后缀为空,法语如此,但英语、荷兰语或德语则不然。
更奇怪的是,如果在文档类级别指定语言列表:
\documentclass[french,ngerman,dutch,english]{article}
...
\usepackage{babel}
...
顺序或加载glossaries-*.ldf
似乎是随机的:
(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-dutch/glossaries-dutch.ldf)
(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-english/glossaries-english.ldf)
(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-french/glossaries-french.ldf)
(/usr/local/texlive/2018/texmf-dist/tex/latex/glossaries-german/glossaries-german.ldf)
你知道发生了什么吗?
答案1
tracklang
加载顺序由跟踪的语言/方言列表(即已识别的文档语言/方言列表)决定。
该tracklang
包(由 使用glossaries
)尝试按如下方式确定文档语言:
如果
tracklang
明确加载了以下选项:\usepackage[french,ngerman,dutch,english]{tracklang}
或者如果它选择文档类选项,例如:
\documentclass[french,ngerman,dutch,english]{article} \usepackage{tracklang}
然后
tracklang.sty
将按照定义顺序跟踪语言或方言tracklang.tex
(预定义语言和方言的完整列表可以在中找到\@tracklang@declaredoptions
)。如果
tracklang.sty
没有选择任何包选项,它将检查是否已加载任何已知语言包。首先,它检查是否定义了\bbl@loaded
(provided bybabel
)。如果是,tracklang.sty
则将遍历列表并跟踪已知方言标签或在发现无法识别的标签时发出警告。这意味着:\usepackage[french,ngerman,dutch,english]{babel} \usepackage{tracklang}
那么该顺序将与的顺序相匹配
\bbl@loaded
。
例如文档类选项:
\documentclass[french,ngerman,dutch,english]{article}
\usepackage{tracklang}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\begin{document}
\end{document}
笔录显示:
> \@tracklang@languages=macro:
->dutch,english,french,german.
l.5 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->dutch,english,french,ngerman.
l.6 \show\@tracklang@dialects
和babel
:
\documentclass{article}
\usepackage[french,ngerman,dutch,english]{babel}
\usepackage{tracklang}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\show\bbl@loaded
\begin{document}
\end{document}
笔录现在显示:
> \@tracklang@languages=macro:
->english,dutch,german,french.
l.6 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->english,dutch,ngerman,french.
l.7 \show\@tracklang@dialects
?
> \bbl@loaded=macro:
->english,dutch,ngerman,french.
l.8 \show\bbl@loaded
因此,此订单babel
与 中给出的订单相匹配\bbl@loaded
。
明确追踪每一种方言:
\documentclass{article}
\usepackage{tracklang}
\TrackPredefinedDialect{french}
\TrackPredefinedDialect{ngerman}
\TrackPredefinedDialect{dutch}
\TrackPredefinedDialect{english}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\begin{document}
\end{document}
笔录现在显示:
> \@tracklang@languages=macro:
->french,german,dutch,english.
l.9 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->french,ngerman,dutch,english.
l.10 \show\@tracklang@dialects
顺序总是按照语言/方言被追踪的顺序,但是这样就可以更清楚地知道顺序是什么。
该包的问题glossaries
是后缀命令无法添加到语言钩子中,因为无法保证命令何时展开,并且只能按照语言包提供的顺序来确定.ldf
需要加载哪些文件。后缀确实遵循最后加载的语言,但不能保证顺序与选项列表中指定的顺序相匹配babel
。