術語表的縮寫後綴實際上不適用於最後載入的語言

術語表的縮寫後綴實際上不適用於最後載入的語言

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

相關內容