Los sufijos de las siglas de los glosarios vigentes no corresponden al último idioma cargado

Los sufijos de las siglas de los glosarios vigentes no corresponden al último idioma cargado

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:

  1. su .logarchivo muestra que el último .ldfarchivo 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)
    
  2. 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-*.ldfparece 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 tracklangpaquete (que utiliza glossaries) intenta determinar los idiomas del documento de la siguiente manera:

  1. Si tracklangestá 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.styrealizará un seguimiento de los idiomas o dialectos según el orden en que se definieron tracklang.tex(la lista completa de idiomas y dialectos predefinidos se puede encontrar en \@tracklang@declaredoptions).

  2. Si tracklang.styno selecciona ninguna opción de paquete, comprobará si se ha cargado algún paquete de idioma conocido. Primero comprueba si \bbl@loaded(proporcionado por babel) está definido. Si es así, tracklang.styiterará 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 babelel 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 glossariespaquete 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é .ldfarchivos 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 babellista de opciones.

información relacionada