使用 imakeidx 为 \label / \ref 和 \index 添加两种以上的页面格式

使用 imakeidx 为 \label / \ref 和 \index 添加两种以上的页面格式

我正在复制一本大型的古代宗教书籍,该书籍有多种页码格式。除了罗马和阿拉伯页码外,还有几个其他部分,页码格式为[1]1*<<1>>。每个部分都从 1 开始重新编号,但显示格式不同。

我需要使用标签/引用来引用页面,并使用 imakeidx 创建各种索引。每个索引将引用各个部分,因此一些参考项将使用阿拉伯语、罗马语、以及其他各种格式的页码,所有这些都位于同一个索引中。

我希望使\label\pageref\index命令与此编号方案无缝协作。 一个非常有效的解决方案\label是在每个部分的开头\pageref重新定义:\thepage

\renewcommand{\thepage}{\arabic{page}*}% or maybe \value is better

然后\label\pageref可以正常工作了。

问题是,这不适用于\index,或者更确切地说,索引将 1* 写入适当的文件,但 makeindex 无法处理非数字页面引用。

因为我使用 imakeidx 创建多个索引,所以重新定义该\index命令有点超出我的能力范围,因为我认为这已经被 imakeidx 重新定义了。

目前,我有一个创建索引条目的宏,因为我正在索引使用gregoriotex 包,我需要使用它们的一个内部挂钩来在正确的页面上创建索引和标签条目,以避免获取错误的页码。

是否有一些巧妙的方法可以使用形式的索引条目\index[indexname]{item|format}来实现这一点,同时记住每个索引将包含所有不同格式的条目?

答案1

感谢 David Carlisle 的评论中的上述解决方案解决了这个问题。在我的函数中,我定义

\bigfunction{
...
\index{item|foo}
...
}

其中 foo 已定义,例如

\newcommand{foo}[1]{#1*}

获取带星号的页码,其他格式也类似。

然后我必须在每个部分的开头重新定义函数 \bigfunction 以获得每个部分的不同版本的 foo。

相关内容