改进 mathabx 的长箭头

改进 mathabx 的长箭头

我认为,mathabx有最漂亮的箭头。但是,它不包括长箭头作为单个字形,因此它们的构建方式与amsmath构建箭头的方式相同,使用代码\def\longleftarrow{\relbar\protect\joinrel\leftarrow}

问题是 mathabx 的relbar箭头末端是圆角,与 mathbax 箭头的末端相同。因此,长箭头在中间会出现瑕疵。如下图所示,缩放比例为 98526.1%。

部分解决方案是将 重新定义relbar-标志。这解决了一个“山丘”问题,但仍然保留了另一个:

在此处输入图片描述

在这种情况下,缩放 = 98526.1%。

因此,我的问题:有人知道如何解决这个问题吗?

谢谢我在这里写下我的mwe

\documentclass{article}

\usepackage{amsmath}
\usepackage{mathabx}

\DeclareFontFamily{U}{matha}{\hyphenchar\font45}
\DeclareFontShape{U}{matha}{m}{n}{
      <5> <6> <7> <8> <9> <10> gen * matha
      <10.95> matha10 <12> <14.4> <17.28> <20.74> <24.88> matha12
      }{}
\DeclareSymbolFont{matha}{U}{matha}{m}{n}
%\let\rightarrow\abc
\DeclareMathSymbol{\varrelbar}{\mathrel}{matha}{1}
\def\varlongrightarrow{\varrelbar\protect\joinrel\rightarrow}
\begin{document}

\begin{align*}
&\longrightarrow \\
&\varlongrightarrow
\end{align*}

\end{document}

编辑

我添加了一个显示一个箭头的箭头的图(缩放=147789%)

在此处输入图片描述

答案1

您可以使用\clipbox来切断 的末端\relbar\rightarrow而不是让它们重叠。此命令在包中定义trimclip,它是adjustbox并单独记录这里

感觉有点像矫枉过正,但它确实有效,而且我不太确定你还能用什么其他方法来实现这一点。

\documentclass{article}

\usepackage{amsmath}
\usepackage{mathabx}

\usepackage{trimclip}
\makeatletter %% <- make @ usable in command names
\newcommand*\clipjoin[2]{\mathrel{\mathpalette\clipjoin@{{#1}{#2}}}}
\def\clipjoin@#1#2{\clipjoin@@{#1}#2}
\def\clipjoin@@#1#2#3{%
  \begingroup
    \settowidth\@tempdima{$\m@th#1\mkern3mu$}%
      \trimbox{0pt 128pt {.01\@tempdima} 128pt}{\clipbox{0pt -128pt {.49\@tempdima} -128pt}{$\m@th#1#2$}}%
      \trimbox{{.01\@tempdima} 128pt 0pt 128pt}{\clipbox{{.49\@tempdima} -128pt 0pt -128pt}{$\m@th#1#3$}}%
  \endgroup
}
\makeatother  %% <- revert @

\newcommand*\cliprightarrow{\clipjoin{\relbar}{\rightarrow}}

\begin{document}

\begin{gather*}
    \longrightarrow
    \\[\glueexpr1ex-\baselineskip]
    \cliprightarrow
    \\
    \scriptstyle
    \longrightarrow
    \\[\glueexpr1ex-\baselineskip]
    \scriptstyle
    \cliprightarrow
    \\
    \scriptscriptstyle
    \cliprightarrow
    \\[\glueexpr1ex-\baselineskip]
    \scriptscriptstyle
    \longrightarrow
\end{gather*}

\end{document}

以下是 600dpi 的结果:

输出

(从上到下,这些是\displaystyle\scriptstyle和中的箭头对\scriptscriptstyle,每对中上面的一个是\longrightarrow,下面的一个是\cliprightarrow


为了说明从近距离看这是什么样子,我已经加载xcolor并定义了。

\newcommand*\cliprightarrow{\clipjoin{\relbar}{\color{red}\rightarrow}}

这是箭头在 300 000 dpi(~100 000%?)处相交的部分:

好的

为了进行比较,以下是\longrightarrow在相同分辨率下的原始图像:

坏的

笔记:

  • 我在用着\mathpalette在每种数学样式中获取正确的箭头大小。
  • 我正在测量当前数学风格的宽度,因为这是需要从和(一起)3mu切掉多少才能得到与相同的长度。\relbar\rightarrow\joinrel
  • \clipbox{<left> <bottom> <right> <top>}{<stuff>}从 的左侧/底部/右侧/顶部剪切<left>/ <bottom>/ <right>/ 。剪切掉的部分将不会被打印<top><stuff>
  • \trimbox{<left> <bottom> <right> <top>}{<stuff>}<stuff>只是以同样的方式改变边界框。
  • -128pt我在 的参数中对垂直长度使用了较大的负数 ( ),\clipbox因为\rightarrow大于其边界框,否则箭头的顶部将被切断。然后我通过将结果放入 中来纠正此问题,\trimbox从而将边界框缩小相同的量。
  • 我只1.47mu\relbar和处剪掉,\rightarrow而不是1.5mu从和处分别修剪,0.03以确保箭杆和箭头之间仍然有(非常微小的)重叠,以防万一。

相关内容