我想用\hat
更大的尺寸替换数学中的常用尺寸,但我不想让它拉伸。我想要的尺寸是“最小\widehat
”(如$\widehat{.}$
)。有没有办法把它放在像 M 这样的宽字符上方($\widehat{M}$
会拉伸并形成更宽的帽子)。
我想我对延伸口音背后的机制缺乏理解,所以请随意解释一下。
答案1
这有点棘手。抱歉。但结果还不错。
\documentclass{article}
\usepackage{amsmath,accents}
\DeclareMathSymbol{\widehatsym}{\mathord}{largesymbols}{"62}
\newcommand\lowerwidehatsym{%
\text{\smash{\raisebox{-1.3ex}{%
$\widehatsym$}}}}
\newcommand\fixwidehat[1]{%
\mathchoice
{\accentset{\displaystyle\lowerwidehatsym}{#1}}
{\accentset{\textstyle\lowerwidehatsym}{#1}}
{\accentset{\scriptstyle\lowerwidehatsym}{#1}}
{\accentset{\scriptscriptstyle\lowerwidehatsym}{#1}}
}
\begin{document}
$\fixwidehat{k}\fixwidehat{M}\fixwidehat{x}$
\[ \fixwidehat{abc} \]
$\fixwidehat{ab}^{\fixwidehat{ab}}$
\end{document}
答案2
\usepackage{calc}
\newcommand{\styletofont}[1]{%
\ifx\displaystyle#1\let\next\textfont\fi
\ifx\textstyle#1\let\next\textfont\fi
\ifx\scriptstyle#1\let\next\scriptfont\fi
\ifx\scriptscriptstyle#1\let\next\scriptscriptfont\fi}
\newcommand{\innfwhat}[2]{%
\styletofont{#1}%
\dimen0 \fontcharic\next1 \skewchar\next1
\advance\dimen0 -\fontcharic\next1`#2%
\makebox[0pt][l]{$#1#2$}%
\makebox[\widthof{$#1#2$}]{$#1\kern.5\dimen0 \widehat{\vphantom{#2}}$}}
\newcommand{\fwhat}{\mathpalette\innfwhat}
这仅适用于普通数学斜体中的单个字符:
$\fwhat{A}\fwhat{B}_{\fwhat{C}}$
对于角色组合来说,Leo Liu 的解决方案非常完美。
宽重音符号会自动指向一个较大的版本,这个版本是根据重音符号的宽度来选择的,所以我们首先需要隐藏它的宽度。但是,当重音符号超过一个字符时,它会通过计算此字符的斜体校正与字体中固定字符的差异(“倾斜字符”)来倾斜。
这个计算是由 TeX 在后台完成的,需要做大量的工作才能适应诸如 之类的事情\fwhat{\mathbf{A}}
。但是,如果数学符号是直立的,则无需歪曲重音,可以使用 Leo Liu 的解决方案。
答案3
水平粉碎要戴帽子的物体。然后TeX
将其视为没有宽度。
\documentclass{minimal}
\usepackage{mathtools}
\begin{document}
\[
\widehat{.} \quad \widehat{M} \quad \widehat{\mathclap{M}}
\]
\end{document}
查看mathtools
包装文档\mathclap
了解有关命令的更多详细信息。
编辑
事实上这比我想象的要难,因为被粉碎的物体会与相邻的字符重叠。为了解决这个问题,可以尝试以下方法:
\documentclass{minimal}
\usepackage{mathtools}
\newcommand\mywidehat[1]{%
\newbox\mybox
\sbox\mybox{#1}
\newdimen\myboxwidth
\myboxwidth=\wd\mybox
\hbox to \myboxwidth{\ensuremath{\hspace*{\fill}\widehat{\mathclap{#1}}}\hspace*{\fill}}
}
\begin{document}
\[
\widehat{.} \quad \widehat{M} \quad \mywidehat{M} \quad
d\mywidehat{ABC}e
\]
\end{document}
不过正如Leo所说,重音的位置可能并不完美,所以他的解决方案可能更好。