词汇表和 zref 包中的扩展“排序”选项

词汇表和 zref 包中的扩展“排序”选项

我有一些重要的内容“飞过”文档,我想列出这些内容。这些结果位于许多不同的部分(章节、尾注……),因此它们的位置(和数量)是可变的,在这种情况下,手动排序是不可行的。

我正在尝试将zref包与\zref@extract命令和词汇表的排序字段结合起来。问题是,当我输入提取命令时,词汇表包不会实现该值,它只是使用默认值,而我得到的顺序是错误的。

\documentclass{scrbook}
\usepackage[xindy, nomain, sanitizesort=false]{glossaries-extra}
\usepackage[titleref, user, abspage]{zref}

\newcounter{test}

\makeatletter
\zref@newprop{test}{\arabic{test}}
\zref@addprop{main}{test}
\makeatother

\newglossary*{here}{Test}
\makeglossaries
\makeatletter
\newglossaryentry{a\zref@extractdefault{a1}{test}{0}}{name={Here \zref@extractdefault{a1}{test}{0}},sort={a\zref@extractdefault{a1}{test}{0}},type=here, description={Here \zref@extractdefault{a1}{test}{0}}}
\newglossaryentry{a\zref@extractdefault{a2}{test}{1}}{name={Here \zref@extractdefault{a2}{test}{1}},sort={a\zref@extractdefault{a2}{test}{1}},type=here, description={Here \zref@extractdefault{a2}{test}{1}}}
\newglossaryentry{a\zref@extractdefault{a3}{test}{2}}{name={Here \zref@extractdefault{a3}{test}{2}},sort={a\zref@extractdefault{a3}{test}{2}},type=here, description={Here \zref@extractdefault{a3}{test}{2}}}
\newglossaryentry{a\zref@extractdefault{a4}{test}{3}}{name={Here \zref@extractdefault{a4}{test}{3}},sort={a\zref@extractdefault{a4}{test}{3}},type=here, description={Here \zref@extractdefault{a4}{test}{3}}}
\newglossaryentry{a\zref@extractdefault{a5}{test}{4}}{name={Here \zref@extractdefault{a5}{test}{4}},sort={a\zref@extractdefault{a5}{test}{5}},type=here, description={Here \zref@extractdefault{a5}{test}{4}}}
\newglossaryentry{a\zref@extractdefault{a6}{test}{5}}{name={Here \zref@extractdefault{a6}{test}{5}},sort={a\zref@extractdefault{a6}{test}{5}},type=here, description={Here \zref@extractdefault{a6}{test}{5}}}
\makeatother
\begin{document}

Here\setcounter{test}{4}\zlabel{a1}

Here\setcounter{test}{6}\zlabel{a2}

Here\setcounter{test}{10}\zlabel{a3}

Here\setcounter{test}{2}\zlabel{a4}

Here\setcounter{test}{3}\zlabel{a5}

Here\setcounter{test}{8}\zlabel{a6}

\glsaddall
\printglossary[style=list, nonumberlist, type=here]

\end{document} 

这里我从命令的默认值中获取顺序\zref@extractdefault{a1}{test}{0}。我想将参考值(即计数器的值)放在排序引擎上。

即,使用此代码我得到:

在此处输入图片描述

而且我要:

Here 2
Here 3
Here 4 and etc.

答案1

您的设置中的问题在于,.aux设置标签的文件在 处读取begindocument。因此,在序言中,标签根本不可用,因此您会在这些\zref@extractdefault调用中获得默认值。

您可以将它们放在一个钩子中,以便在标签可用时完成词汇表条目:

\documentclass{scrbook}
\usepackage[xindy, nomain, sanitizesort=false]{glossaries-extra}
\usepackage[titleref, user, abspage]{zref}

\newcounter{test}

\makeatletter
\zref@newprop{test}{\arabic{test}}
\zref@addprop{main}{test}
\makeatother

\newglossary*{here}{Test}
\makeglossaries
\makeatletter
\AddToHook{begindocument/end}{%
  \newglossaryentry{a\zref@extractdefault{a1}{test}{0}}{name={Here \zref@extractdefault{a1}{test}{0}},sort={a\zref@extractdefault{a1}{test}{0}},type=here, description={Here \zref@extractdefault{a1}{test}{0}}}%
  \newglossaryentry{a\zref@extractdefault{a2}{test}{1}}{name={Here \zref@extractdefault{a2}{test}{1}},sort={a\zref@extractdefault{a2}{test}{1}},type=here, description={Here \zref@extractdefault{a2}{test}{1}}}%
  \newglossaryentry{a\zref@extractdefault{a3}{test}{2}}{name={Here \zref@extractdefault{a3}{test}{2}},sort={a\zref@extractdefault{a3}{test}{2}},type=here, description={Here \zref@extractdefault{a3}{test}{2}}}%
  \newglossaryentry{a\zref@extractdefault{a4}{test}{3}}{name={Here \zref@extractdefault{a4}{test}{3}},sort={a\zref@extractdefault{a4}{test}{3}},type=here, description={Here \zref@extractdefault{a4}{test}{3}}}%
  \newglossaryentry{a\zref@extractdefault{a5}{test}{4}}{name={Here \zref@extractdefault{a5}{test}{4}},sort={a\zref@extractdefault{a5}{test}{5}},type=here, description={Here \zref@extractdefault{a5}{test}{4}}}%
  \newglossaryentry{a\zref@extractdefault{a6}{test}{5}}{name={Here \zref@extractdefault{a6}{test}{5}},sort={a\zref@extractdefault{a6}{test}{5}},type=here, description={Here \zref@extractdefault{a6}{test}{5}}}%
}
\makeatother
\begin{document}

Here\setcounter{test}{4}\zlabel{a1}

Here\setcounter{test}{6}\zlabel{a2}

Here\setcounter{test}{10}\zlabel{a3}

Here\setcounter{test}{2}\zlabel{a4}

Here\setcounter{test}{3}\zlabel{a5}

Here\setcounter{test}{8}\zlabel{a6}

\glsaddall
\printglossary[style=list, nonumberlist, type=here]

\end{document}

在此处输入图片描述

您仍需解决排序问题,因为是glosarries按第一位数字排序,而不是将其视为数字。但我明白您的问题是如何获取标签的值,只要您在之后查询标签,就可以了begindocument

但是,这似乎更适合目录而不是词汇表。一个简单的示例,使用tocloft(只是一个例子,它与不相符scrbook,但您可以在那里获得等效的功能):

\documentclass{book}

\usepackage{tocloft}

\newlistof{endoftheworldpart}{prt}{My Parts}

\newcommand{\mypart}[1]{%
  \stepcounter{endoftheworldpart}
  \addcontentsline{prt}{endoftheworldpart}{Here \arabic{endoftheworldpart}}}

\begin{document}

Here\mypart

Here\mypart

Here\mypart

Here\mypart

Here\mypart

Here\mypart

\listofendoftheworldpart

\end{document}

在此处输入图片描述

相关内容