如何定义调用 \index 的宏?

如何定义调用 \index 的宏?

我想定义一个命令,它\index用其参数调用并提供页面格式化样式,如下所示:

\newcommand{\defstyle}[1]{\textbf{#1}}
\newcommand{\indexdef}[1]{\index{#1|defstyle}}

不幸的是,当我这样做时,索引命令如下

$\phi$-foo\indexdef{$\phi$-foo}
\newpage
$\phi$-foo\index{$\phi$-foo}

导致索引包含两个单独的条目,而不是一个。我可以看到这是因为文件.idx包含

\indexentry{$\phi $-foo|defstyle}{1}
\indexentry{$\phi$-foo}{2}

在第一种情况下有一个额外的空格。我甚至可以猜出这个空格的来源:我了解到它\index有一种逐字逐句的行为,它的额外间接性\indexdef正好抑制了其他东西(什么?)在(为什么?)之后插入一个随机的额外空格\phi。真正的问题是,如何修复它?

到目前为止,我能想到两个“解决方案”。一种是到处调用,\index{...|defstyle}而不是\indexdef。另一种是在两种情况下都使用间接寻址:

\newcommand{\myindex}[1]{\index{#1}}

然后使用\myindex而不是\index。但两者都需要在已经使用\index和的长文档中进行搜索和替换\indexdef。有没有可以让我保留两者的解决方案?我试过了

\let\myindex\index
\renewcommand{\index}[1]{\myindex{#1}}

但这不起作用(为什么不起作用?)。

相关内容