无法在破损的帽子上加帽子

无法在破损的帽子上加帽子

为什么下面的简单代码会引发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它与我正在使用的会议模板不兼容。)

相关内容