我正在复制一本很长的书,里面全是音乐作品,用 gregorio tex 排版。每首音乐作品都有一个 \label,并被输入到使用 imakeidx 创建的多个索引之一中。
文档有多种页码格式:罗马字母、阿拉伯字母,还有其他几种符号,例如 [3]、7* 和 <<22>>,这些符号基于整个文档的不同部分。每个部分都以 1 开始,但格式不同。
我希望 \label/\pageref 和 \index 能够无缝运行,根据圣歌的位置提供具有正确格式的正确页面。
我之前曾在这里发布过有关此问题的帖子: 使用 imakeidx 为 \label / \ref 和 \index 添加两种以上的页面格式
David Carlisle 给我的建议是,我可以使用 \index{item|foo} 来使用我定义的函数 \foo 将格式应用于索引页。这绝对是解决问题的办法。
问题在于程序中基本上有一个 \index 语句 - 埋在加载乐曲时由 gregorio tex 包调用的函数 \dostuff 中。
所以我有一个现有的函数
\newcommand{dostuff}{......
...
\index{item|foo}
...
}
我想通过在文档中页码格式发生变化的每个部分的开头重新定义 \foo 来更改索引的格式,例如
% Switch to star pages now....
\renewcommand{\foo}[1]{#1*}
相反,当我执行此操作时,索引仅使用 \printindex 执行时 foo 的最新定义,因此每个页码都以相同的格式显示,在本例中例如 [7]。
有没有办法修复 \foo 或 \index 命令的定义,以便在给出索引语句时将页面引用写入索引文件,从而使用 \foo 的“当前”定义,从而确保应用正确的格式?
我可以在每个文档部分的开头重新定义所有的宏 \dostuff,但这是一个很长的宏,这会很麻烦。如果可能的话,只更改 \foo 会简单得多,因为这就是所有更改。
答案1
正如帖子中所述,这个问题是后续问题。答案发布在原始问题线索中,链接在此处的顶部帖子中,但为了完整性,我重复了一遍。
感谢 David Carlisle 的评论中的上述解决方案解决了这个问题。在我的函数中,我定义
\bigfunction{
...
\index{item|foo}
...
}
其中 foo 已定义,例如
\newcommand{foo}[1]{#1*}
获取带星号的页码,其他格式也类似。
然后我必须在每个部分的开头重新定义函数 \bigfunction 以获得每个部分的不同版本的 foo。