我正在使用刘天仁的回答中的代码我该如何稳健地排版双帽?在数学模式下排版双帽重音符号,但有时水平对齐会关闭。即:
\documentclass{article}
\usepackage{statmath}
\makeatletter
\newcommand{\doublehat}[1]{%
\begingroup%
\let\macc@kerna\z@%
\let\macc@kernb\z@%
\let\macc@nucleus\@empty%
\hat{\raisebox{.35ex}{\vphantom{\ensuremath{#1}}}\smash{\hat{#1}}}%
\endgroup%
}
\makeatother
\begin{document}
$$\hat\bfbeta \quad \hat\bfu$$
$$\doublehat\bfbeta \quad \doublehat\bfu$$
\end{document}
得出:
u 上的双帽很好,但测试版上的双帽比它应该的位置靠左得多,看起来不太好。我缺乏修复此问题的 TeX 技能,但如果有高手能帮忙,我将不胜感激。谢谢!
答案1
你可以测量 math-accent 的结果\hat
(通过 来定位 nucleus 的 kern \skewchar
)。\skewchar
下面的宏中 并不重要,我们只通过拆箱来测量结果:
\def\measurehat#1{%
\setbox0=\vbox{$\hat{#1}\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\doublehat#1{%
\measurehat{#1}\dimen0=\wd0 \measurehat{\kern0pt#1}%
\raise.35ex\rlap{\kern\dimexpr\dimen0-\wd0$\hat{\phantom{#1}}$}{\hat#1}%
}
% try this:
$$\hat\bfbeta \quad \hat\bfu$$
$$\doublehat\bfbeta \quad \doublehat\bfu$$
答案2
这不是一个令人满意的答案,因为它要求用户做两件事:指示要加帽的字形是否rm
为it
形状,以及在宏中指定字体斜体倾斜角的切线\tanslant
。
这样,我引入\hatsrm[<n>]{<token>}
和分别\hatsit[<n>]{<token>}
将n
帽子(默认值 2)放置在罗马或斜体标记上。
目前这仅适用于文本或显示样式。如果较小的数学样式需要它,请告诉我...也许可以做些什么。
\documentclass{article}
\usepackage{stackengine}
\def\tanslant{.25}
\newcommand\hatsrm[2][2]{\ensurestackMath{%
\ifnum#1>1%
\stackengine{-4pt}{\hatsrm[\numexpr#1-1\relax]{#2}}{%
\scriptstyle\char'136}{O}{c}{F}{T}{S}%
\else%
\stackengine{-3pt}{#2}{\scriptstyle\char'136}{O}{c}{F}{T}{S}%
\fi%
}}
\newcommand\hatsit[2][2]{\ensurestackMath{%
\sbox0{$#2$}%
\ifnum#1>1%
\stackengine{-4pt}{\hatsit[\numexpr#1-1\relax]{#2}}{%
\kern\tanslant\ht0\scriptstyle\char'136}{O}{c}{F}{T}{S}%
\else%
\stackengine{-3pt}{#2}{\kern\tanslant\ht0\scriptstyle\char'136}%
{O}{c}{F}{T}{S}%
\fi%
}}
\begin{document}
\[
\hatsit[1]{z}\neq\hatsrm{\Lambda}\neq\hatsrm[3]{\Delta}\neq\hatsit[4]{\beta}
\]
\end{document}