Glosarios: grupos que no funcionan

Glosarios: grupos que no funcionan

Quiero usar la sort=defopción paraglosariosJuntos con style=alttreehypergroup. Sin embargo, tan pronto como lo especifique sort=def, los grupos ya no se reconocen.

MWE:

% arara: pdflatex: { action: nonstopmode, options: "-halt-on-error -file-line-error" }
% arara: makeglossaries
% arara: pdflatex: { action: nonstopmode, options: "-halt-on-error -file-line-error" }
\documentclass{report}

\usepackage[colorlinks]{hyperref}

% WORKING:
% \usepackage[style=alttreehypergroup, symbols, nolong, nosuper, nonumberlist]{glossaries}

% NOT WORKING:
\usepackage[sort=def, style=alttreehypergroup, symbols, nolong, nosuper, nonumberlist]{glossaries}

\glssetwidest[1]{xxxx}
\makeglossaries

\newglossaryentry{firstgroup}{name={firstgroup}, description={\nopostdesc}}
\newglossaryentry{aaa}{name={aaa}, description=abcd, parent=firstgroup}

\newglossaryentry{secondgroup}{name={secondgroup}, description={\nopostdesc}}
\newglossaryentry{bbb}{name={bbb}, description=abcd, parent=secondgroup}

\begin{document}
\glsaddall
\printglossaries
\end{document}

El resultado que quiero (y obtengo sin sort=def):

bien

Lo que obtengo con sort=def:

malo

¿Es mi error o es un error?

Respuesta1

Esta es una característica más que un error ;-). La sort=defopción funciona estableciendo la sortclave en un número en lugar del valor de la nameclave. Si miras el .gloarchivo verás esto:

\glossaryentry{000001?\glossentry{firstgroup}|setentrycounter[]{page}\glsnumberformat}{1}
\glossaryentry{000001?\glossentry{firstgroup}!000002?\subglossentry{1}{aaa}|setentrycounter[]{page}\glsnumberformat}{1}
\glossaryentry{000003?\glossentry{secondgroup}|setentrycounter[]{page}\glsnumberformat}{1}
\glossaryentry{000003?\glossentry{secondgroup}!000004?\subglossentry{1}{bbb}|setentrycounter[]{page}\glsnumberformat}{1}

Ahora sólo hay un grupo de indexación y ese es el grupo "Números". Este método es la única forma de ordenar makeindexpor definición. De hecho, makeindexsimplemente lo están engañando para que clasifique por definición. Desde makeindexel punto de vista de, simplemente utiliza su algoritmo de clasificación habitual.

En realidad, los grupos no tienen mucho sentido cuando se usan sort=defo sort=useya que no hay garantía de que el orden esté restringido a grupos. ¿Qué pasaría si definiera los términos en el orden, por ejemplo, duck, parrot, dog? Terminarías con un Dgrupo, un Pgrupo y otro Dgrupo.

Sin embargo, si está dispuesto a asumir la responsabilidad de asegurarse de no tener grupos segmentados como ese, puede utilizar lo que el manual denomina "Opción 1":

\documentclass{report}

\usepackage[colorlinks]{hyperref}

\usepackage[style=alttreehypergroup, nolong,nosuper,nonumberlist]{glossaries}

\glssetwidest[1]{xxxx}
\makenoidxglossaries

\newglossaryentry{firstgroup}{name={firstgroup},
description={\nopostdesc}}
\newglossaryentry{aaa}{name={aaa}, description=abcd,
parent=firstgroup}

\newglossaryentry{secondgroup}{name={secondgroup},
description={\nopostdesc}}
\newglossaryentry{bbb}{name={bbb}, description=abcd,
parent=secondgroup}

\begin{document}
\glsaddall

\printnoidxglossary[sort=def]
\end{document}

Tenga en cuenta que para que esto funcione como lo desea, sort=defdebe ir en el argumento opcional de \printnoidxglossaryno en la lista de opciones del paquete.

información relacionada