\bar、\hat 和 \tilde 的宽度和定位

\bar、\hat 和 \tilde 的宽度和定位

我使用 Cochineal 字体来处理文本和数学运算,使用cochinealnewtxmath包。我只发现这种字体的一个缺陷: 、\bar\tilde产生\hat的重音非常小,而\widebar\widetilde\widehat产生的重音非常大(使用\widebarHendrik Vogt 的答案中的命令这里)。

\hstretch为了获得更好看的重音,我尝试使用包中的命令定义它们的拉伸版本scalerel。我定义了

\newcommand{\stretchedbar}[1]{\hstretch{1.67}{\bar{\hstretch{0.6}{#1}}}}

\stretchedtilde以及类似的\stretchedhat命令。

以下是三个版本的竖线、波浪线和铙钹的简单比较: 现在\stretched...命令给出了很好的结果尺寸重音符号。但是,这些命令无法正确移动斜体字符上的重音符号,它们太靠左了。

我发现这个答案,它引入了一个\shifthat命令。此命令允许手动移动\hat特定字符上的 ,所以我想我可以调整此代码以手动移动每个未正确放置的字符上的所有三个重音。但是,当然,这个过程会非常漫长,而且我甚至不确定它是否适用于 和 ,\tilde因为\bar我不理解此命令定义的所有内容\shifthat

有什么方法可以定义这些重音符号的延伸版本,同时调整斜体字符上重音符号的移动?或者以另一种方式重新定义重音符号的命令以获得类似的结果?

答案1

这是使用该包的解决方案accents

在此处输入图片描述

首先,从头定义重音符号:

\newcommand{\newbar}{\scalebox{.9}[.85]{\trimbox{0pt .55ex}{\textminus}}}
\newcommand{\newtilde}{\scalebox{.9}[1]{\trimbox{0pt .6ex}{\textasciitilde}}}
\newcommand{\newhat}{\scalebox{1.5}[.75]{\trimbox{0pt 1.1ex}{\textasciicircum}}}

中的参数\scalebox分别控制宽度和厚度。例如,如果希望条形更粗,请增加命令[.85]中的\newbar。要使条形变窄,请减小{.9}。该\trimbox命令来自trimclip包。需要它来容纳重音符号周围的空格(垂直)。非零参数控制符号上方重音符号的高度。要提高重音符号,请修剪较少。例如,要提高条形,请减小.55ex

一旦定义了重音,就可以使用命令来调用它们

\newcommand{\stretchedbar}[1]{\accentset{\newbar}{#1}}
\newcommand{\stretchedtilde}[1]{\accentset{\newtilde}{#1}}
\newcommand{\stretchedhat}[1]{\accentset{\newhat}{#1}}

完整代码如下:

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[p,osf]{cochineal}
\usepackage[varqu,varl,var0]{inconsolata}
\usepackage[scale=.95,type1]{cabin}
\usepackage[cochineal,vvarbb]{newtxmath}
\usepackage[cal=boondoxo]{mathalfa}

\usepackage{accents}
\usepackage{trimclip}

\newcommand{\newbar}{\scalebox{.9}[.85]{\trimbox{0pt .55ex}{\textminus}}}
\newcommand{\newtilde}{\scalebox{.9}[1]{\trimbox{0pt .6ex}{\textasciitilde}}}
\newcommand{\newhat}{\scalebox{1.5}[.75]{\trimbox{0pt 1.1ex}{\textasciicircum}}}

\newcommand{\stretchedbar}[1]{\accentset{\newbar}{#1}}
\newcommand{\stretchedtilde}[1]{\accentset{\newtilde}{#1}}
\newcommand{\stretchedhat}[1]{\accentset{\newhat}{#1}}

\begin{document}
$\bar{e},\hat{e},\tilde{e}\quad\bar{y},\hat{y},\tilde{y}\quad\bar{A},\hat{A},\tilde{A}\quad\bar{\Omega},\hat{\Omega},\tilde{\Omega}\quad$

$\stretchedbar{e},\stretchedhat{e},\stretchedtilde{e}\quad\stretchedbar{y},\stretchedhat{y},\stretchedtilde{y}\quad\stretchedbar{A},\stretchedhat{A},\stretchedtilde{A}\quad\stretchedbar{\Omega},\stretchedhat{\Omega},\stretchedtilde{\Omega}\quad$

\end{document}

如果您需要下标/上标中的符号,则需要使用\mathchoice。按如下方式组合宏:

\newcommand{\stretchedhat}[1]{\mathchoice
{\accentset{\scalebox{1.5}[.75]{\trimbox{0pt 1.1ex}{\textasciicircum}}}{#1}}
{\accentset{\scalebox{1.5}[.75]{\trimbox{0pt 1.1ex}{\textasciicircum}}}{#1}}
{\accentset{\scalebox{1}[.5]{\trimbox{0pt 1.2ex}{\textasciicircum}}}{#1}}
{\accentset{\scalebox{.8}[.4]{\trimbox{0pt 1.3ex}{\textasciicircum}}}{#1}}
}
\newcommand{\stretchedtilde}[1]{\mathchoice
{\accentset{\scalebox{.9}[1]{\trimbox{0pt .6ex}{\textasciitilde}}}{#1}}
{\accentset{\scalebox{.9}[1]{\trimbox{0pt .6ex}{\textasciitilde}}}{#1}}
{\accentset{\scalebox{.7}[.8]{\trimbox{0pt .7ex}{\textasciitilde}}}{#1}}
{\accentset{\scalebox{.5}[.6]{\trimbox{0pt .8ex}{\textasciitilde}}}{#1}}
}
\newcommand{\stretchedbar}[1]{\mathchoice
{\accentset{\scalebox{.9}[.85]{\trimbox{0pt .55ex}{\textminus}}}{#1}}
{\accentset{\scalebox{.9}[.85]{\trimbox{0pt .55ex}{\textminus}}}{#1}}
{\accentset{\scalebox{.7}[.7]{\trimbox{0pt .65ex}{\textminus}}}{#1}}
{\accentset{\scalebox{.5}[.6]{\trimbox{0pt .75ex}{\textminus}}}{#1}}
}

您可以根据自己的喜好调整间距和大小。

$\stretchedhat{e}_{\stretchedhat{e}_{\stretchedhat{e}}}$
$\stretchedbar{e}_{\stretchedbar{e}_{\stretchedbar{e}}}$
$\stretchedtilde{e}_{\stretchedtilde{e}_{\stretchedtilde{e}}}$

在此处输入图片描述

\protect请注意,如果您想在、等中使用它们,则必须使用这些。\section评论中有\paragraph一个使用hyperrefwith 的解决方法。\texorpdfstring

答案2

如果其他人也遇到这个问题,其实有一个非常简单的解决方案。事实上,newtxmath有一个选项timesmathacc,我在写这个问题时并不知道,可以使用 Times 中的数学重音符号,而不是 Roman 文本字体中的数学重音符号。

使用该选项所获得的口音timesmathacc确实已经看起来相当不错了。

相关内容