为什么下面的简单代码会引发Undefined control sequence
错误?
\documentclass{article}
\usepackage{amsmath}
\begin{document}
$\hat{\smash{\hat f}}$
\end{document}
答案1
正如史蒂文所说,\smash
在任何情况下使用这里可能都无法正常工作,但它不应该给出内部命令未定义的错误。
我还没有完全追踪它,但在某一时刻,内部重音嵌套计数器被设置为 5,大概是因为它\mathchoice
在\smash
评估其参数 4 次时被 teh 混淆了(在每种样式显示、文本、脚本和脚本脚本中)
最简单的(尽管不一定是最好的)解决方法是将内部长度默认设置为 0pt,因此如果您最终在这里,它们只会添加零 kern 而不是错误。
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\let\macc@kerna\z@
\let\macc@kernb\z@
\let\macc@nucleus\@empty
\makeatother
\begin{document}
$\hat{\smash{\hat f}}$
\end{document}
答案2
尝试在被砸碎的量上放置帽子是没有意义的,因为被砸碎的量的高度设置为 0pt。在第 3 行中,我模拟了这种尝试。真恶心。建议使用前 2 行...要么删除\smash
,要么只\smash
在流程结束时添加。
\documentclass{article}
\usepackage{amsmath}
\parskip 1ex
\begin{document}
$\hat{\hat f}$ no smash
$\smash{\hat{\hat f}}$ final result smashed
$\sbox0{$\smash{\hat f}$}\hat{\box0}$ hatting a smash makes no sense
\end{document}
答案3
感谢 Steven 和 David 的回答。
到目前为止我发现的最简单的解决方法是\usepackage{accents}
。(但不幸的是,accents
它与我正在使用的会议模板不兼容。)