波浪号过宽的间距问题

波浪号过宽的间距问题

基于这个答案中,我实现了两个版本的\widetilde,其宽度足够覆盖我想要的所有文本:

\documentclass{article}
\usepackage{amsmath,amssymb,stackengine,scalerel}
\newlength\A
\ExplSyntaxOn
%first method, based on stackon
\newcommand{\wtildea}[1]{
    \settowidth{\A}{#1}
    \stackon[-7pt]{$#1$}{\hstretch{\fp_eval:n{\dim_to_fp:n{\A}/21}}{\widetilde{\phantom{#1}}}}
}

%second method, based on tikz
\usepackage{tikz,mathtools}
\newcommand{\wtildeb}[1]{
    \settowidth{\A}{$#1$}
    \ooalign{$\tikz{\node[xscale=\fp_eval:n{\dim_to_fp:n{\A}}/5.5]{$\widetilde{\phantom{x}}$}}$\cr\hidewidth$#1$\hidewidth\cr}
}
\ExplSyntaxOff

\begin{document}
$$xxAAAAAAAAAAAAxx$$
$$xx\wtildea{AAAAAAAAAAAA}xx$$
$$xx\wtildeb{AAAAAAAAAAAA}xx$$
\end{document}

但是,它们都存在间距问题,并且第一个解决方案会导致带有波浪号的文本向右移动: 在此处输入图片描述

我该如何修复它?

答案1

TikZ 解决方案需要inner sep零,这是文本周围的填充,它不仅会增加 TikZ 图片的宽度,还会进行相同的缩放。

我还\vphantom{#1}为其添加了一个,以便它获得正确的垂直尺寸。使用baselineanchor = base确保节点也正确垂直放置。

作为一个选项,我添加了一个\resizebox来自graphics包的替代方案(由 加载graphicx,由 加载tikz)。

这两种解决方案在下标或上标中都不起作用。还需要做一点工作。

代码

\documentclass[varwidth]{standalone}
%\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{tikz}
\newcommand*\wtildea[1]{%
  \begingroup
    \settowidth{\dimen0}{$#1$}%
    \rlap{\resizebox{\dimen0}{\totalheight}{$\widetilde{\phantom{x\vphantom{#1}}}$}}%
  \endgroup
  #1}
\newcommand*{\wtildeb}[1]{%
  \ooalign{%
    \tikz[baseline]
      \node[anchor=base, inner sep=+0pt, xscale={width("$#1$")/width("$x$")}]
        {$\widetilde{\phantom{x\vphantom{#1}}}$};%
    \cr\hidewidth$#1$\hidewidth\cr
  }%
}
\begin{document}
\[xx         AAAAAAAAAAAA xx\]
\[xx\wtildea{AAAAAAAAAAAA}xx\]
\[xx\wtildeb{AAAAAAAAAAAA}xx\]
\end{document}

输出

在此处输入图片描述

相关内容