Quero usar a sort=def
opçã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
):
O que eu ganho com sort=def
:
É meu erro ou é um bug?
Responder1
Este é um recurso e não um bug ;-)
. A sort=def
opção funciona definindo a sort
chave como um número em vez do valor da name
chave. Se você olhar o .glo
arquivo 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 makeindex
classificar por definição. Na verdade, makeindex
está simplesmente sendo levado a classificar por definição. Do makeindex
ponto 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=def
ou sort=use
porque 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 D
grupo, um P
grupo e outro D
grupo.
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=def
necessário entrar no argumento opcional de \printnoidxglossary
não estar na lista de opções do pacote.