El glossaries
' (v4.42) Manual del usuario afirma (página 48):
Nota: los sufijos utilizados para generar las formas plurales cuando el plural no ha sido especificado vienen dados por
\glspluralsuffix
(para entradas generales) [...]Esto significa que el sufijo vigente será el del último idioma cargado que redefinió estos comandos.
Pero el siguiente 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}
señala que ese no es el caso desde:
su
.log
archivo muestra que el último.ldf
archivo cargado es el del primer idioma cargado:(/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)
el sufijo está vacío, como ocurre con el francés, pero no con el inglés, el holandés o el alemán.
Aún más extraño, si la lista de idiomas se especifica en el nivel de clase de documento:
\documentclass[french,ngerman,dutch,english]{article}
...
\usepackage{babel}
...
el orden o la carga glossaries-*.ldf
parece ser aleatorio:
(/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)
¿Ves lo que está pasando?
Respuesta1
El orden de carga está determinado portracklang
la lista de idiomas/dialectos rastreados (es decir, la lista de idiomas/dialectos de documentos identificados).
El tracklang
paquete (que utiliza glossaries
) intenta determinar los idiomas del documento de la siguiente manera:
Si
tracklang
está cargado explícitamente con opciones como:\usepackage[french,ngerman,dutch,english]{tracklang}
o si selecciona opciones de clase de documento, como:
\documentclass[french,ngerman,dutch,english]{article} \usepackage{tracklang}
luego
tracklang.sty
realizará un seguimiento de los idiomas o dialectos según el orden en que se definierontracklang.tex
(la lista completa de idiomas y dialectos predefinidos se puede encontrar en\@tracklang@declaredoptions
).Si
tracklang.sty
no selecciona ninguna opción de paquete, comprobará si se ha cargado algún paquete de idioma conocido. Primero comprueba si\bbl@loaded
(proporcionado porbabel
) está definido. Si es así,tracklang.sty
iterará sobre la lista y rastreará las etiquetas de dialectos conocidos o advertirá si se encuentra una etiqueta no reconocida. Esto significa que con:\usepackage[french,ngerman,dutch,english]{babel} \usepackage{tracklang}
entonces el orden coincidirá con el orden de
\bbl@loaded
.
Por ejemplo, opciones de clase de documento:
\documentclass[french,ngerman,dutch,english]{article}
\usepackage{tracklang}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\begin{document}
\end{document}
La transcripción muestra:
> \@tracklang@languages=macro:
->dutch,english,french,german.
l.5 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->dutch,english,french,ngerman.
l.6 \show\@tracklang@dialects
Con 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}
La transcripción ahora muestra:
> \@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
Entonces este orden coincide con babel
el orden dado en\bbl@loaded
.
Seguimiento explícito de cada dialecto:
\documentclass{article}
\usepackage{tracklang}
\TrackPredefinedDialect{french}
\TrackPredefinedDialect{ngerman}
\TrackPredefinedDialect{dutch}
\TrackPredefinedDialect{english}
\makeatletter
\show\@tracklang@languages
\show\@tracklang@dialects
\begin{document}
\end{document}
La transcripción ahora muestra:
> \@tracklang@languages=macro:
->french,german,dutch,english.
l.9 \show\@tracklang@languages
?
> \@tracklang@dialects=macro:
->french,ngerman,dutch,english.
l.10 \show\@tracklang@dialects
El orden siempre es de acuerdo con el orden en que se ha rastreado el idioma/dialecto, pero de esta manera queda más claro cuál es ese orden.
El problema del glossaries
paquete es que los comandos de sufijo no se pueden agregar a los enlaces de idioma porque no hay forma de garantizar cuándo se expandirá el comando y solo puede seguir el orden proporcionado por los paquetes de idioma para determinar qué .ldf
archivos deben agregarse. cargado. De hecho, el sufijo sigue el último idioma cargado, pero no se garantiza que el orden coincida con el orden especificado en la babel
lista de opciones.