Os sufixos das siglas dos glossários em vigor não são para o último idioma carregado

Os sufixos das siglas dos glossários em vigor não são para o último idioma carregado

O glossariesmanual do usuário '(v4.42) afirma (página 48):

Nota: os sufixos usados ​​para gerar as formas plurais quando o plural não foi especificado são dados por \glspluralsuffix(para entradas gerais) [...]

Isso significa que o sufixo em vigor será para o último idioma carregado que redefiniu esses comandos.

Mas o seguinte 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}

aponta que esse não é o caso, pois:

  1. seu .logarquivo mostra que o último .ldfarquivo carregado é o do primeiro idioma carregado:

    (/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. o sufixo está vazio, como é o caso do francês, mas não do inglês, holandês ou alemão.

Ainda mais estranho, se a lista de idiomas for especificada no nível da classe do documento:

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

a ordem ou o carregado glossaries-*.ldfparece ser aleatório:

(/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)

Você vê o que está acontecendo?

Responder1

A ordem de carregamento é determinada pela tracklanglista de idiomas/dialetos rastreados (ou seja, a lista de idiomas/dialetos identificados do documento).

O tracklangpacote (que é usado por glossaries) tenta determinar os idiomas do documento da seguinte forma:

  1. If tracklangé carregado explicitamente com opções como:

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

    ou se escolher opções de classe de documento, como:

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

    então tracklang.styrastreará os idiomas ou dialetos de acordo com a ordem em que foram definidos tracklang.tex(a lista completa de idiomas e dialetos predefinidos pode ser encontrada em \@tracklang@declaredoptions).

  2. Se tracklang.stynão selecionar nenhuma opção de pacote, ele verificará se algum pacote de idioma conhecido foi carregado. Primeiro ele verifica se \bbl@loaded(fornecido por babel) está definido. Se for, tracklang.styirá iterar na lista e rastrear rótulos de dialetos conhecidos ou avisar se um rótulo não reconhecido for encontrado. Isso significa que com:

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

    então o pedido corresponderá ao pedido de \bbl@loaded.

Por exemplo, opções de classe de documento:

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

\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects

\begin{document}
\end{document}

A transcrição mostra:

> \@tracklang@languages=macro:
->dutch,english,french,german.
l.5 \show\@tracklang@languages

? 
> \@tracklang@dialects=macro:
->dutch,english,french,ngerman.
l.6 \show\@tracklang@dialects

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

A transcrição agora mostra:

> \@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

Portanto, esta ordem corresponde babelà ordem dada em \bbl@loaded.

Rastreando explicitamente cada dialeto:

\documentclass{article}
\usepackage{tracklang}
\TrackPredefinedDialect{french}
\TrackPredefinedDialect{ngerman}
\TrackPredefinedDialect{dutch}
\TrackPredefinedDialect{english}

\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects

\begin{document}
\end{document}

A transcrição agora mostra:

> \@tracklang@languages=macro:
->french,german,dutch,english.
l.9 \show\@tracklang@languages

? 
> \@tracklang@dialects=macro:
->french,ngerman,dutch,english.
l.10 \show\@tracklang@dialects

A ordem é sempre de acordo com a ordem em que o idioma/dialeto foi rastreado, mas assim fica mais claro qual é essa ordem.

O problema do glossariespacote é que os comandos de sufixo não podem ser adicionados aos ganchos de idioma porque não há como garantir quando o comando será expandido e ele só pode seguir a ordem fornecida pelos pacotes de idioma para determinar quais .ldfarquivos precisam ser carregado. O sufixo realmente segue o último idioma carregado, mas não há garantia de que a ordem corresponda à ordem especificada na babellista de opções.

informação relacionada