为什么\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
。