调整双重数学模式重音以适应不同的数学风格

调整双重数学模式重音以适应不同的数学风格

我使用的是@wipet 的一个稍微通用的版本优秀的代码对于数学模式中的双帽,允许任意双重音(请参阅下面的代码)。这很好用,但我现在注意到,当您使用不同的数学样式(即\displaystyle和朋友)时,间距(再次)偏离。这是一个例子:

\documentclass{article}
\usepackage{mathtools}
\makeatletter
\def\measureaccent#1#2{%
   \setbox0=\vbox{$#1{#2}\hfil\break$\null\par
      \setbox0=\lastbox\unskip\unpenalty\global\setbox1=\lastbox}%
   \setbox0=\hbox{\unhbox1 \unskip\unpenalty\unskip \global\setbox2=\lastbox}%
   \setbox0=\vbox{\unvbox2 \setbox0=\lastbox}%
}
\def\doubleaccent#1#2{%
   \measureaccent{#1}{#2}\dimen0=\wd0 \measureaccent{#1}{\kern0pt#2}%
   \raise.35ex\rlap{\kern\dimexpr\dimen0-\wd0$#1{\phantom{#2}}$}{#1#2}%
}
\def\doubletilde#1{\doubleaccent\tilde#1}
\makeatother
\begin{document}
\[ \textstyle \doubletilde k \qquad \scriptstyle \doubletilde k \qquad \scriptscriptstyle \doubletilde k \]
\end{document}

在此处输入图片描述

如您所见,在\textstyle(和\displaystyle)中结果看起来不错,但从那时起情况变得更糟。

理想情况下,我希望\doubleaccent在所有风格中都无需我进一步干预。我想\measureaccent这必须适应这一点;看起来测量是在不考虑当前风格的情况下进行的,但我自己还缺乏这样做的技能,因此非常感谢常驻巫师的帮助。谢谢!

编辑:我应该注意到@wipet 的答案解决了重音符号水平对齐的问题,我理想情况下不想重新引入这个问题。

编辑2:下面是另一个片段,说明了为什么我首先要以这种方式创建双重重音:

\documentclass{article}
\usepackage{statmath}
\def\measureaccent#1#2{%
   \setbox0=\vbox{$#1{#2}\hfil\break$\null\par
      \setbox0=\lastbox\unskip\unpenalty\global\setbox1=\lastbox}%
   \setbox0=\hbox{\unhbox1 \unskip\unpenalty\unskip \global\setbox3=\lastbox}%
   \setbox0=\vbox{\unvbox3 \setbox0=\lastbox}%
}
\def\doubleaccent#1#2{%
   \measureaccent{#1}{#2}\dimen0=\wd0 \measureaccent{#1}{\kern0pt#2}%
   \raise.35ex\rlap{\kern\dimexpr\dimen0-\wd0$#1{\phantom{#2}}$}{#1#2}%
}
\def\doubletilde#1{\doubleaccent\tilde#1}
\makeatother
\begin{document}
\[ \tilde\beta \quad \tilde{\tilde\beta} \quad \doubletilde\beta \quad \tilde\bfbeta \quad \tilde{\tilde\bfbeta} \quad \doubletilde\bfbeta \]
\end{document}

在此处输入图片描述

单个和\tilde都很好。嵌套的相距太远,给人的感觉是两个单波浪线,而不是一个双波浪线(这并不奇怪,因为它们就是双波浪线)。此外,在 上,它们的位置太靠左了。\beta\bfbeta\tilde\bfbeta

(我通常不会在\displaystyle或之外使用双重音符号\textstyle,当我使用时,通常使用粗体希腊字母或拉丁字母。当我已经有and时,我\doubletilde在 and 中定义另一个缩写时碰巧遇到了今天,然后注意到了上述情况。)\underbracek\tilde k

答案1

stackengine一种使用和的方法scalerel

已编辑,提供一个考虑斜体字体倾斜的版本;即,\tsup考虑直立符号和\tsit斜体符号。斜体字体倾斜在定义中指定\fontslant,此处估计为.3

A补充在最后提供以回应 OP 使用任意口音来执行此操作的愿望清单。

\documentclass{article}
\usepackage{stackengine,scalerel}
\stackMath
\newcommand\tsup[2][2]{\ThisStyle{%
 \def\useanchorwidth{T}%
  \ifnum#1>1%
    \stackon[-5.5\LMpt]{\SavedStyle\tsup[\numexpr#1-1\relax]{#2}}{\SavedStyle\mathchar`~}%
  \else%
    \stackon[-4.5\LMpt]{\SavedStyle#2}{\SavedStyle\mathchar`~}%
  \fi%
}}
\def\fontslant{.3}
\newcommand\tsit[2][2]{\ThisStyle{%
 \sbox2{$\SavedStyle#2$}%
 \def\useanchorwidth{T}%
  \ifnum#1>1%
    \stackon[-5.5\LMpt]{\SavedStyle\tsit[\numexpr#1-1\relax]{#2}}{\hspace{\fontslant\ht2}\SavedStyle\mathchar`~}%
  \else%
    \stackon[-4.5\LMpt]{\SavedStyle#2}%
    {\hspace{\fontslant\ht2}\SavedStyle\mathchar`~}%
  \fi%
}}
\begin{document}
\[
\tsit[1]{z}\neq\tsup{\Lambda}\neq\tsup[3]{\Delta}\neq\tsit[4]{\psi}
\]
\[
\scriptstyle
\tsit[1]{z}\neq\tsup{\Lambda}\neq\tsup[3]{\Delta}\neq\tsit[4]{\psi}
\]
\[
\scriptscriptstyle
\tsit[1]{z}\neq\tsup{\Lambda}\neq\tsup[3]{\Delta}\neq\tsit[4]{\psi}
\]
\end{document}

在此处输入图片描述


补充

在这里,我创建了一个带有 3 个参数的宏\makeitupaccents。第一个是创建重音宏时要使用的名称,并将itup添加到该名称中。因此,如果ts提供了,则会创建宏\tsit和。\tsup

第二个是重音本身,如果需要的话可以包括水平字距调整(参见 MWE)。

第三个参数是字符和重音之间以及重音之间的堆叠间隙的维度增强。因为我使用的是scalerel,所以维度\LMpt\LMex在这里也可用,并且指的是pt和和ex,它们在较小的数学样式中会缩小(.7pt对于.5pt脚本和脚本脚本样式,默认情况下,对于也是如此ex)。

为提高效率而编辑,使用更少的\mathchoices (通过消除对 的嵌套调用\ThisStyle)。

\documentclass{article}
\usepackage{stackengine,scalerel}
\stackMath
\newcommand\fontslant{.3}
\newcommand\makeitupaccents[3]{%
\expandafter\newcommand\csname #1up\endcsname[2][2]{\ThisStyle{%
  \csname #1upaux\endcsname[##1]{##2}}}
\expandafter\newcommand\csname #1upaux\endcsname[2][2]{%
  \def\useanchorwidth{T}%
  \ifnum##1>1%
    \stackon[\dimexpr#3-5.5\LMpt]{\SavedStyle\csname 
      #1upaux\endcsname[\numexpr##1-1\relax]{##2}}{\SavedStyle#2}%
  \else%
    \stackon[\dimexpr#3-4.5\LMpt]{\SavedStyle##2}{\SavedStyle#2}%
  \fi%
}
\expandafter\newcommand\csname #1it\endcsname[2][2]{\ThisStyle{%
  \csname #1itaux\endcsname[##1]{##2}}}
\expandafter\newcommand\csname #1itaux\endcsname[2][2]{%
 \sbox2{$\SavedStyle##2$}%
 \def\useanchorwidth{T}%
  \ifnum##1>1%
    \stackon[\dimexpr#3-5.5\LMpt]{\SavedStyle\csname
      #1itaux\endcsname[\numexpr##1-1\relax]{##2}}%
      {\hspace{\fontslant\ht2}\SavedStyle#2}%
  \else%
    \stackon[\dimexpr#3-4.5\LMpt]{\SavedStyle##2}%
    {\hspace{\fontslant\ht2}\SavedStyle#2}%
  \fi%
}
}
\begin{document}
\makeitupaccents{ts}{\mathchar`~}{0pt}
\makeitupaccents{cs}{\mathchar`^}{0pt}
\makeitupaccents{ds}{\mathchar'26}{.7\LMpt}
\makeitupaccents{as}{\kern-\LMpt\mathchar"017E}{.2\LMpt}
\def\tmp{\tsit[1]{z}\neq\tsup{\Lambda}
  \neq\csup[3]{\Delta}\neq\csit[4]{\psi}
  \neq\dsup[3]{\Omega}\neq\dsit[2]{\omega}
  \neq\asup[3]{\mathrm{A}}\neq\asit[2]{\nu}}
\[\tmp\]
\[\scriptstyle\tmp\]
\[\scriptscriptstyle\tmp\]
\end{document}

在此处输入图片描述

相关内容