Glossários: Grupos não funcionam

Glossários: Grupos não funcionam

Quero usar a sort=defopção paraglossáriosjunto com style=alttreehypergroup. Porém, assim que eu especifico sort=def, os grupos não são mais reconhecidos.

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}

A saída que eu quero (e fico sem sort=def):

bom

O que eu ganho com sort=def:

ruim

É meu erro ou é um bug?

Responder1

Este é um recurso e não um bug ;-). A sort=defopção funciona definindo a sortchave como um número em vez do valor da namechave. Se você olhar o .gloarquivo verá isto:

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

Portanto, agora há apenas um grupo de indexação e esse é o grupo "Números". Este método é a única maneira de makeindexclassificar por definição. Na verdade, makeindexestá simplesmente sendo levado a classificar por definição. Do makeindexponto de vista de está simplesmente usando seu algoritmo de classificação usual.

Na verdade, os grupos não fazem muito sentido quando você os usa sort=defou sort=useporque não há garantia de que a ordem será restrita aos grupos. E se você definisse os termos na ordem, digamos, duck, parrot, dog? Você acabaria com um Dgrupo, um Pgrupo e outro Dgrupo.

No entanto, se você quiser assumir a responsabilidade de garantir que não tenha grupos segmentados como esse, poderá usar o que o manual chama de "Opção 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}

Observe que para que isso funcione como você deseja, é sort=defnecessário entrar no argumento opcional de \printnoidxglossarynão estar na lista de opções do pacote.

informação relacionada