Я хочу использоватьsort=def
опцию дляглоссариивместе с style=alttreehypergroup
. Однако, как только я указываю sort=def
, группы больше не распознаются.
МВЭ:
% 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}
Результат, который я хочу получить (и без него sort=def
):
Что я получаю sort=def
:
Это моя ошибка или баг?
решение1
Это скорее фича, чем ошибка ;-)
. sort=def
Опция работает, устанавливая sort
ключ на число, а не на значение ключа name
. Если вы посмотрите на .glo
файл, то увидите это:
\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}
Итак, теперь есть только одна группа индексации, и это группа "Числа". Этот метод — единственный способ получить makeindex
сортировку по определению. Фактически, makeindex
просто обманом заставляет сортировать по определению. С makeindex
точки зрения он просто использует свой обычный алгоритм сортировки.
Группы на самом деле не имеют особого смысла, когда вы используете sort=def
или, sort=use
поскольку нет гарантии, что порядок будет ограничен группами. Что, если вы определили термины в порядке, скажем, duck
, parrot
, dog
? Вы бы получили D
группу, P
группу и еще одну D
группу.
Однако, если вы готовы взять на себя ответственность за то, чтобы у вас не было таких сегментированных групп, вы можете использовать то, что в руководстве называется «Вариантом 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}
Обратите внимание, что для того, чтобы это работало так, как вам нужно, необходимо sort=def
указать необязательный аргумент, \printnoidxglossary
отсутствующий в списке параметров пакета.