使用 amsmidx 对 \int 进行索引

使用 amsmidx 对 \int 进行索引

我曾经amsmidx创建一个单独的符号索引。

\usepackage{amsmidx}
\makeindex{idx}
\makeindex{nidx}
\newcommand{\idx}[1]{\index{idx}{#1}}
\newcommand{\nidx}[1]{\index{nidx}{#1}}

我需要索引像$\int_{\mathcal{D}}$,这样的符号$\int^{\underline{\mathcal{D}}}$(即结尾、丰富的 coend)。但这样做会破坏一切。如果我输入

\nidx{$\int^{\mathcal{C}}$}

然后运行makeindex nidx,它会接受,但在下一次传递时,我被告知缺少$。事实上,当我查看文件时,nidx.ind我看到

\item  ^{\mathcal  {C}}$, 6

我认为问题可能是makeindex不知道如何按字母顺序排列这些条目,但是

\nidx{int@$\int^{\mathcal{C}}$}

导致makeindex nidx拒绝该条目。(但至少其他一切都可以编译。)

知道发生什么问题了吗?

答案1

\index尽量不扩展其参数,但如果您将其作为参数提供给另一个命令,则此保护不再起作用;您应该这样做

\newcommand{\idx}{\index{idx}}
\newcommand{\nidx}{\index{nidx}}

这样调用\nidx{int@$\int$}将首先转换为

\index{nidx}{int@$\int$}

没有吸收主要论点;现在\index将正确应用其保护机制。

当然,如果\nidx{int@$\int$}被埋没作为另一个命令的参数,问题可能会再次出现;在这种情况下,我希望很少见,用\protect\int代替\int

如果索引条目出现在命令的参数中,还有哪些命令需要这种保护?很难列出清单;当然\mathcal不需要,但\int确实\underline需要。只需查看生成的idx文件,就会很明显地知道哪些命令需要保护。

相关内容