答案1
我不知道自动化解决方案,但在下面的代码中,我定义了一个\wdoublehat
带有可选参数数学胶水的宏,\wdoublehat[1.5mu]{X}
看起来有些令人满意,因为它Z
也适用于字母,但对于其他字母,您应该调整1.5mu
,并且Y
不使用可选参数。
屏幕截图显示,根本原因是字母在其边界框内的位置。外部的放置(和大小)\widehat
显然取决于这个边界框(第一个\widehat
似乎知道更多,可能是一些斜体校正内容或与它查询的字形相关的其他数据;但外部似乎只使用其(现在不是字母)参数的边界框)。的问题X
是,相对于边界框的中点,字母的(顶部)比的情况更靠右Y
。
\documentclass{article}
\usepackage{amsmath}
%\usepackage{mathtools}
\begin{document}
\makeatletter
\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{{\fboxsep-\fboxrule\fbox{$\x$}} }
\makeatother
\makeatletter
\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{{\fboxsep-\fboxrule\fbox{$\widehat{\x}$}} }
\makeatother
\makeatletter
\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{$\widehat{\hbox{\fboxsep-\fboxrule\fbox{$\widehat{\x}$}}}$ }
\makeatother
\makeatletter
\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{$\widehat{\widehat{\x}}$ }
\makeatother
\newcommand\wdoublehat[2][0mu]{\mskip#1\widehat{\mskip-#1\widehat{#2}\mskip#1}\mskip-#1\relax}
\makeatletter
\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{$\wdoublehat[1.5mu]{\x}$ }
\makeatother
\end{document}
输出(倒数第二行显示嵌套\widehat
,最后一行显示使用\wdoublehat
和1.5mu
移位)
再次:
\documentclass{article}
\usepackage{amsmath}
\newcommand\wdoublehat[2][0mu]{\mskip#1\widehat{\mskip-#1\widehat{#2}\mskip#1}\mskip-#1\relax}
\begin{document}
\makeatletter
$\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{\widehat{\widehat{\x}}}$ (nested, no shift)
\makeatother
\makeatletter
$\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{\wdoublehat[1.5mu]{\x}}$ (1.5mu shift)
\makeatother
\makeatletter
$\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{\wdoublehat[2mu]{\x}}$ (2mu shift)
\makeatother
\makeatletter
$\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{\wdoublehat[2.5mu]{\x}}$ (2.5mu shift)
\makeatother
\makeatletter
$\@tfor\x:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do{\wdoublehat[3mu]{\x}}$ (3mu shift)
\makeatother
\end{document}
(在此屏幕截图中,第一行 X 的左上方有一些墨水,这是从我截取屏幕截图的完整文档中的 Q 下降部分:不要用擦洗海绵清洁您的屏幕!)
可以将每个字母所需的移位存储在类似数组的结构中,然后使用将自动进行。但最好让用户在序言中一劳永逸地定义此类命令,例如适当地使用此答案中的\doublehatX
命令。\wdoublehat[<mu shift>]