Die Suffixe der Glossar-Akronyme gelten nicht für die zuletzt geladene Sprache

Die Suffixe der Glossar-Akronyme gelten nicht für die zuletzt geladene Sprache

Im glossariesBenutzerhandbuch (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:

  1. Die .logDatei zeigt, dass die zuletzt geladene .ldfDatei 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)
    
  2. 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-*.ldfscheint 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 tracklangdie Liste der verfolgten Sprachen/Dialekte bestimmt (d. h. die Liste der identifizierten Dokumentsprachen/Dialekte).

Das tracklangPaket (das von verwendet wird glossaries) versucht, die Dokumentsprachen wie folgt zu bestimmen:

  1. Es tracklangwird 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.stywerden die Sprachen oder Dialekte in der Reihenfolge verfolgt, in der sie definiert wurden tracklang.tex(die vollständige Liste der vordefinierten Sprachen und Dialekte finden Sie unter \@tracklang@declaredoptions).

  2. Wenn tracklang.stykeine Paketoptionen übernommen werden, wird geprüft, ob bekannte Sprachpakete geladen wurden. Zuerst wird geprüft, ob \bbl@loaded(bereitgestellt von babel) definiert ist. Wenn dies der Fall ist, tracklang.stywird 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 babelder 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 glossariesPaket 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 .ldfangegebenen Reihenfolge übereinstimmt .babel

verwandte Informationen