Im glossaries
Benutzerhandbuch (v4.42) heißt es (Seite 48):
Hinweis: Die Suffixe, die zur Bildung der Pluralformen verwendet werden, wenn der Plural nicht angegeben wurde, werden
\glspluralsuffix
(für allgemeine Einträge) durch [...] angegeben.Dies bedeutet, dass das wirksame Suffix für die zuletzt geladene Sprache gilt, die diese Befehle neu definiert hat.
Aber folgendes 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}
weist darauf hin, dass dies bei nicht der Fall ist, da:
Die
.log
Datei zeigt, dass die zuletzt geladene.ldf
Datei die Datei der zuerst geladenen Sprache ist:(/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)
das Suffix ist leer, wie es bei Französisch der Fall ist, aber nicht bei Englisch, Niederländisch oder Deutsch.
Noch merkwürdiger ist es, wenn die Sprachenliste auf Dokumentklassenebene angegeben wird:
\documentclass[french,ngerman,dutch,english]{article}
...
\usepackage{babel}
...
die Reihenfolge bzw. die Beladung glossaries-*.ldf
scheint zufällig zu sein:
(/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)
Sehen Sie, was los ist?
Antwort1
Die Ladereihenfolge wird durch tracklang
die Liste der verfolgten Sprachen/Dialekte bestimmt (d. h. die Liste der identifizierten Dokumentsprachen/Dialekte).
Das tracklang
Paket (das von verwendet wird glossaries
) versucht, die Dokumentsprachen wie folgt zu bestimmen:
Es
tracklang
wird explizit mit Optionen wie den folgenden geladen:\usepackage[french,ngerman,dutch,english]{tracklang}
oder wenn es Dokumentklassenoptionen aufgreift, wie zum Beispiel:
\documentclass[french,ngerman,dutch,english]{article} \usepackage{tracklang}
Anschließend
tracklang.sty
werden die Sprachen oder Dialekte in der Reihenfolge verfolgt, in der sie definiert wurdentracklang.tex
(die vollständige Liste der vordefinierten Sprachen und Dialekte finden Sie unter\@tracklang@declaredoptions
).Wenn
tracklang.sty
keine Paketoptionen übernommen werden, wird geprüft, ob bekannte Sprachpakete geladen wurden. Zuerst wird geprüft, ob\bbl@loaded
(bereitgestellt vonbabel
) definiert ist. Wenn dies der Fall ist,tracklang.sty
wird die Liste durchlaufen und bekannte Dialektbezeichnungen nachverfolgt oder eine Warnung ausgegeben, wenn eine nicht erkannte Bezeichnung gefunden wird. Dies bedeutet, dass mit:\usepackage[french,ngerman,dutch,english]{babel} \usepackage{tracklang}
dann entspricht die Reihenfolge der Reihenfolge von
\bbl@loaded
.
Beispielsweise Dokumentklassenoptionen:
\documentclass[french,ngerman,dutch,english]{article}
\usepackage{tracklang}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\begin{document}
\end{document}
Aus dem Transkript geht hervor:
> \@tracklang@languages=macro:
->dutch,english,french,german.
l.5 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->dutch,english,french,ngerman.
l.6 \show\@tracklang@dialects
Mit 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}
Das Transkript zeigt nun:
> \@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
Diese Reihenfolge entspricht also babel
der in angegebenen Reihenfolge \bbl@loaded
.
Explizite Verfolgung jedes Dialekts:
\documentclass{article}
\usepackage{tracklang}
\TrackPredefinedDialect{french}
\TrackPredefinedDialect{ngerman}
\TrackPredefinedDialect{dutch}
\TrackPredefinedDialect{english}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\begin{document}
\end{document}
Das Transkript zeigt nun:
> \@tracklang@languages=macro:
->french,german,dutch,english.
l.9 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->french,ngerman,dutch,english.
l.10 \show\@tracklang@dialects
Die Reihenfolge entspricht immer der Reihenfolge, in der die Sprachen/Dialekte erfasst wurden, auf diese Weise ist die Reihenfolge jedoch klarer.
Das Problem für das glossaries
Paket besteht darin, dass die Suffixbefehle nicht zu den Sprach-Hooks hinzugefügt werden können, da nicht garantiert werden kann, wann der Befehl erweitert wird, und nur die von den Sprachpaketen vorgegebene Reihenfolge eingehalten werden kann, um zu bestimmen, welche Dateien geladen werden müssen. Das Suffix folgt zwar tatsächlich der zuletzt geladenen Sprache, aber es gibt keine Garantie dafür, dass die Reihenfolge mit der in der Optionsliste .ldf
angegebenen Reihenfolge übereinstimmt .babel