词汇表的首字母缩略词后缀实际上不适用于最后加载的语言

词汇表的首字母缩略词后缀实际上不适用于最后加载的语言

' 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}

指出情况并非如此,因为:

  1. .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)
    
  2. 后缀为空,法语如此,但英语、荷兰语或德语则不然。

更奇怪的是,如果在文档类级别指定语言列表:

\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)尝试按如下方式确定文档语言:

  1. 如果tracklang明确加载了以下选项:

    \usepackage[french,ngerman,dutch,english]{tracklang}
    

    或者如果它选择文档类选项,例如:

    \documentclass[french,ngerman,dutch,english]{article}
    \usepackage{tracklang}
    

    然后tracklang.sty将按照定义顺序跟踪语言或方言tracklang.tex(预定义语言和方言的完整列表可以在中找到\@tracklang@declaredoptions)。

  2. 如果tracklang.sty没有选择任何包选项,它将检查是否已加载任何已知语言包。首先,它检查是否定义了\bbl@loaded(provided by babel)。如果是,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

相关内容