当我编写以下代码时,它可以工作。
\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}$}}
但是,通常用单个字符来定义宏不是一个好主意。有一些内部预定义的宏。