O glossaries
manual 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:
seu
.log
arquivo mostra que o último.ldf
arquivo 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)
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-*.ldf
parece 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 tracklang
lista de idiomas/dialetos rastreados (ou seja, a lista de idiomas/dialetos identificados do documento).
O tracklang
pacote (que é usado por glossaries
) tenta determinar os idiomas do documento da seguinte forma:
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.sty
rastreará os idiomas ou dialetos de acordo com a ordem em que foram definidostracklang.tex
(a lista completa de idiomas e dialetos predefinidos pode ser encontrada em\@tracklang@declaredoptions
).Se
tracklang.sty
não selecionar nenhuma opção de pacote, ele verificará se algum pacote de idioma conhecido foi carregado. Primeiro ele verifica se\bbl@loaded
(fornecido porbabel
) está definido. Se for,tracklang.sty
irá 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 glossaries
pacote é 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 .ldf
arquivos precisam ser carregado. O sufixo realmente segue o último idioma carregado, mas não há garantia de que a ordem corresponda à ordem especificada na babel
lista de opções.