Глоссарии: Группы не работают

Глоссарии: Группы не работают

Я хочу использовать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отсутствующий в списке параметров пакета.

Связанный контент