' 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
(由 提供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
選項清單中指定的順序相符。