align 环境中 \index 中的 \widehat 在索引中无法正确显示

align 环境中 \index 中的 \widehat 在索引中无法正确显示

为什么\widehat下面的 MWE 中的数学符号显示如下?在此处输入图片描述

\documentclass{scrartcl}
\usepackage{bm}
\usepackage{amsmath}
\newcommand*{\xv}{\operatorname{xv}}
\usepackage[noautomatic]{imakeidx}
\makeindex[intoc]

\newcommand*\lettergroupDefault[1]{\textbf{\sffamily Symbols}}
\newcommand*\lettergroup[1]{%
  \par\textbf{\sffamily#1}\par
  \nopagebreak
}

\begin{document}
\begin{align*}
  E=mc^2\index{. xv@$\widehat{\xv}_n$}
\end{align*}
\printindex
\end{document}

答案1

如果你查看文件.idx,你会发现

\indexentry{. xv@$\mathaccent "0362\relax {\xv  }_n$}{1}

失败是因为"是文件中的引号字符.idx,因此这被解释为将\mathaccent 362十六进制转换为十进制。

一个解决方法可能是\protect\widehat,但我不建议这样做。问题是

\widehat{\xv}

就间距而言,它不能作为运算符,因为它最终会变成一个 Acc 原子,而后者随后会被视为普通原子。尝试使用

\begin{align*}
  \xv A &= 2 \\
  \hxv A &= 2 \\
  \widehat{\xv} A &= 2
\end{align*}

其中\xv和 的\hxv正确定义为

\DeclareMathOperator{\xv}{xv}
\DeclareMathOperator{\hxv}{\widehat{\xv}}

输出为

在此处输入图片描述

你就能立即发现问题。

\hxv在命令中使用\index将会写入\hxv(同样也会写入自身),而不是进行令人讨厌的扩展。出于这个原因,建议使用\xv的定义。\xv\newcommand{\xv}{\operatorname{xv}}

请注意,使用分隔符也会出现同样的问题":保护诸如此类的东西\lbrace

相关内容