带有 kpfonts 的奇怪可扩展箭头

带有 kpfonts 的奇怪可扩展箭头

amsmath/ 的可扩展箭头mathtools与 一起使用时没有提供适当的间距或符号kpfonts。以下是 Computer Modern 的正确行为。

\documentclass{article}
\usepackage{mathtools}

\begin{document}

\begin{align*}
    X &\rightarrow Y & X &\hookrightarrow Y & X &\mapsto Y \\
    X &\xrightarrow{} Y & X &\xhookrightarrow{} Y & X &\xmapsto{} Y
\end{align*}

\end{document}

correct_computer-modern

正如预期的那样,没有标签的可扩展箭头的间距和符号与不可扩展箭头的间距和符号相同。

kpfonts加载时,间距和符号会发生变化。

\documentclass{article}
\usepackage{mathtools,kpfonts}

\begin{document}

\begin{align*}
    X &\rightarrow Y & X &\hookrightarrow Y & X &\mapsto Y \\
    X &\xrightarrow{} Y & X &\xhookrightarrow{} Y & X &\xmapsto{} Y
\end{align*}

\end{document}

incorrect_kpfonts

所有三个箭头似乎都向左移动,这导致钩子\xhookrightarrow和垂直条都\xmapsto处于错误的位置。

还要注意,\hookrightarrow一开始看起来就很糟糕。不确定这是新的,还是这个问题从未修复过。

mathtools为什么会发生这种情况?我应该向或报告这个问题吗kpfonts

答案1

存在两个问题:

  1. amsmath对数学符号做出了一些假设,但这些假设并不成立kpfonts

  2. \lhook中的符号设计kpfonts很糟糕。

对于问题 1,我们可以通过 patch\arrow@fill来减少两端的负核密度。对于问题 2,我们可以借用\lhook中的符号libertinust1math

\documentclass[twocolumn]{article}
\usepackage{mathtools,kpfonts}

\makeatletter % change \mkern-7mu into \mkern-4mu
\def\arrowfill@#1#2#3#4{%
  $\m@th\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip
   \relax#4#1\mkern-4mu%
   \cleaders\hbox{$#4\mkern-2mu#2\mkern-2mu$}\hfill
   \mkern-4mu#3$%
}
\makeatother

%%% borrow \lhook and \rhook from libertinust1math
\makeatletter
\DeclareFontEncoding{LS2}{}{\noaccents@}
\makeatother
\DeclareFontSubstitution{LS2}{libertinust1mathex}{m}{n}
\DeclareSymbolFont{libsymbols}{LS2}{libertinust1mathsym}{m}{n}
\DeclareMathSymbol{\lhook}{\mathrel}{libsymbols}{"41}
\DeclareMathSymbol{\rhook}{\mathrel}{libsymbols}{"42}

\begin{document}

\begin{align*}
  X &\rightarrow Y &\quad X &\hookrightarrow Y & X &\mapsto Y \\
  X &\xrightarrow{} Y & X &\xhookrightarrow{} Y & X &\xmapsto{} Y
\end{align*}

\begin{equation*}
X\xrightarrow{abcde}
X\xhookrightarrow{abcde}
X\xmapsto{abcde} X
\end{equation*}

\end{document}

当然,其他箭头不会像不可扩展的同伴那样宽。我认为除了只在需要时\xrightarrow{}使用箭头外,对此无能为力。x

enter image description here

相关内容