我使用的是@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 中定义另一个缩写时碰巧遇到了今天,然后注意到了上述情况。)\underbrace
k
\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
。第一个是创建重音宏时要使用的名称,并将it
和up
添加到该名称中。因此,如果ts
提供了,则会创建宏\tsit
和。\tsup
第二个是重音本身,如果需要的话可以包括水平字距调整(参见 MWE)。
第三个参数是字符和重音之间以及重音之间的堆叠间隙的维度增强。因为我使用的是scalerel
,所以维度\LMpt
和\LMex
在这里也可用,并且指的是pt
和和ex
,它们在较小的数学样式中会缩小(.7pt
对于.5pt
脚本和脚本脚本样式,默认情况下,对于也是如此ex
)。
为提高效率而编辑,使用更少的\mathchoice
s (通过消除对 的嵌套调用\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}