我如何手动选择宽重音的大小?(数学模式)

我如何手动选择宽重音的大小?(数学模式)

我想用\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所说,重音的位置可能并不完美,所以他的解决方案可能更好。

相关内容