在创建索引之前扩展 \nameref{}

在创建索引之前扩展 \nameref{}

我正在使用theorem环境来排列方程。我为每个方程分配一个不同的标签。一些方程,例如\label{equation-a}\label{equation-b},位于相同的定理环境中:

\begin{theorem}[Algebra-Basic] For any natural numbers a, b and c
\begin{IEEEeqnarray}{c}
a + b = b + a \label{equation-a}\\
a + (b + c) = (a + b) + c\label{equation-b}
\end{IEEEeqnarray}
\end{theorem}

我想将equation-a和添加equation-b到索引中。但是它们应该折叠在同一条目下,因为\nameref{...}两者都会扩展为同一个字符串。问题是扩展不会发生生成索引,结果索引列表中出现了重复项。是否可以\nameref{}在生成索引之前让 latex 进行扩展?

答案1

我发现这两个片段可以在文档的序言中定义,以便\nameref{}在生成索引之前强制扩展。

我还没有完全理解这些代码片段背后的细节,但似乎当标签添加到 latex 中时,其详细信息(页码、标题、超链接等)会保存为一个由五个组件组成的元组。名称是这个元组中的第三个,是使用 TEX 的一些原语提取的。\nameref{}和之间的关键区别\getnamereftex{}在于,可以在生成索引之前展开,而\nameref{}不能。

\makeatletter
\newcommand{\getnamereftext}[1]{%
  \@ifundefined{r@#1}{}{%
    \unexpanded\expandafter\expandafter\expandafter{%
      \expandafter\expandafter\expandafter\@thirdoffive\csname r@#1\endcsname
    }%
  }%
}

以上片段摘自:如何使用 \nameref 和 xstring 包来检查字符串长度

\getnamereftext现在,为了在索引生成之前强制扩展,定义了下一个命令。

\newcommand{\indexref}[2]{%
  \sbox0{{\nameref{#2}}}%
  \expandafter\index{#1!{\getnamereftext{#2}}}}

摘录自:是否有一个命令可以扩展到当前部分名称?

然后,要将条目添加到索引中,用户使用命令\indexref,例如\nameref{Definition}{Code}。此解决方案可以正确处理通过扩展为相同文本的多个标签\nameref{}。因此,Latex 不会根据标签的名称对索引进行排序,而是根据标签的内容进行排序。此外,如果页面上的多个标签扩展为相同的文本,则只会将一个条目添加到索引中。

相关内容