自定义字母 H、K、M、N、W 和 X 上 \widetilde 的宽度

自定义字母 H、K、M、N、W 和 X 上 \widetilde 的宽度

例如

$\widetilde{\bm{H}}$

或者

$\widetilde{\boldsymbol{H}}$

会导致字母 H、K、M、N、W 和 X 上方出现较大的波浪符号,请参见以下字母表:

\widetilde \bm 字母表

我可以理解该命令可以自适应地调整特定字母的宽度,但是我如何自定义这个宽度呢?

答案1

这段代码定义了三个宏:

  1. \mathcenterto{#1}{#2}排版#2要居中,大小为#1
  2. \widetildeto{#1}{#2}会将宽波浪号放在上面,#2但它认为它的大小是#1。如果您希望整个文档中的所有宽波浪号都相同,则可以将\def\widetilde{\widetildeto{X}}或任何其他字母放在 之外X
  3. \widehatto{#1}{#2}为了\widehat

备注:需mathtools另加包装amsmath

警告:参数不能包含活动宏,因为#1会扩展两次并#2扩展三次!您仍然可以使用大多数数学宏,如,,,\vec...禁止使用宏,如,,,...\bm\frac\newcommand\addtocounter

\documentclass{article}

\usepackage{amsmath,mathtools}

\makeatletter
\def\mathcenterto#1#2{\mathclap{\phantom{#1}\mathclap{#2}}\phantom{#1}}
\let\old@widetilde\widetilde
\def\widetildeto#1#2{\mathcenterto{#2}{\old@widetilde{\mathcenterto{#1}{#2\,}}}}
\let\old@widehat\widehat
\def\widehatto#1#2{\mathcenterto{#2}{\old@widehat{\mathcenterto{#1}{#2\,}}}}
\makeatother

\begin{document}

\[
\widetildeto{I}{W} \widetilde{I}
\]

\[
\widetilde{W} \widetildeto{W}{I}
\]

\def\widetilde{\widetildeto{X}}

\[
\widetilde{W} \widetilde{I}
\]

\end{document}

相关内容