索引和强大的命令

索引和强大的命令

在将索引条目放入索引之前,我需要对它们进行一些处理,因此我定义了一个辅助命令。对于 MWE,我将让辅助命令直接传递给\index

\documentclass{amsart}
\makeindex
\newcommand\indexhelper[1]{\index{#1}}
\DeclareRobustCommand\RobustIndexHelper[1]{\index{#1}}
\begin{document}
A
\index{$\vec a$}
\indexhelper{$\vec a$}
\RobustIndexHelper{$\vec a$}
\end{document}

(之所以A存在,是为了有一些输出,否则文件.idx是空白的。)生成的.idx文件是

\indexentry{$\vec a$}{1}
\indexentry{$\mathaccentV {vec}17Ea$}{1}
\indexentry{$\mathaccentV {vec}17Ea$}{1}

我认为这与脆弱性有关,这就是我尝试的原因\DeclareRobustCommand;但这基本上是货物崇拜,更糟糕的是,它不起作用。除了“不要将此类条目放入您的参考书目”和“不要使用辅助命令”之外,我该如何处理这个问题?

答案1

您必须为包装器命令编写输入的文字字符串,即包装器的可能脆弱内容(并且\vec不够健壮)。

最简单的方法是\detokenize(e-TeX - 添加)(但我不确定是否可能存在一些 catcode 问题)

\documentclass{amsart}
\makeindex
\newcommand\indexhelper[1]{\index{\detokenize{#1}}}
\DeclareRobustCommand\RobustIndexHelper[1]{\index{\detokenize{#1}}}
\begin{document}

A
\index{$\vec a$}
\indexhelper{$\vec a$}
\indexhelper{$\vec b$}
\RobustIndexHelper{$\vec c$}

\printindex
\end{document}

相关内容