\index 命令在简单的新命令中不起作用

\index 命令在简单的新命令中不起作用

当我编写以下代码时,它可以工作。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amssymb}
\usepackage{makeidx}
\makeindex
\newcommand{\p}{\raisebox{2pt}{$\mathfrak{p}$}}

\begin{document}

$\p(E)$\index{$\p(E)$}

\printindex
\end{document}

但我需要的是这个:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amssymb}
\usepackage{makeidx}
\makeindex
\newcommand{\p}{\raisebox{2pt}{$\mathfrak{p}$}}

\newcommand{\idxx}[1]{$#1$\index{$#1$}}

\begin{document}

\idxx{\p(E)}

\printindex
\end{document}

但失败了。为什么?我该如何修复?

答案1

您可以使用里面的命令\protect,或者更好的是,在定义中使用:\p\index\DeclareRobustCommand

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amssymb}
\usepackage{makeidx}
\makeindex
\DeclareRobustCommand{\p}{\raisebox{2pt}{$\mathfrak{p}$}}

\newcommand{\idxx}[1]{$#1$\index{$#1$}}

\begin{document}

\idxx{\p(E)}

\printindex
\end{document}

答案2

\newcommand\p{\protect\raisebox{2pt}{$\mathfrak{p}$}}

但是,通常用单个字符来定义宏不是一个好主意。有一些内部预定义的宏。

相关内容