我认为,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
以确保箭杆和箭头之间仍然有(非常微小的)重叠,以防万一。