libertinus 字体与 extarrows 不兼容的处理
与群友交流的过程中发现如果将数学字体设置为
Libertinus Math
的时候, 使用 extarrow
宏包的
\xLongrightarrow
会有奇怪的现象:
1 | \documentclass{article} |
开始我以为是 unicode-math
与 extarrows
不兼容, 但是当我将字体设置成 STIX Two Math
或者默认的
Latin Modern Math
的时候发现并不是
unicode-math
的问题:
那就需要看看源码, 找一下有没有能改的地方.
首先找了一下 extarrow.sty
的源码, 看不太懂
1 | \RequirePackage{amsmath} |
但是发现了两个没有定义就直接使用的命令: \arrowfill@
与
\Relbar
, 那就应该是 amsmath
定义的命令,
顺藤摸瓜再去找一下.
在 amsmath.sty
中发现了
1 | \ams@def\relbar{\mathrel{\mathpalette\mathsm@sh\std@minus}} |
依然看不懂, 再顺着 \Relbar
定义中的
\std@equal
寻找, 找到了这两行
1 | \@ifundefined{Umathcode} |
那就可以知道 extarrows
与 \overline
等命令的实现方法了: 用 \longright/leftarrow
与
\Longright/leftarrow
与减号 -
或者等号
=
进行拼接.
猜出了原理, 用 Libertinus Math
进行一下验证:
确实等号与 \Longrightarrow
两横之间的间距不同,
也就导致了奇怪的效果.
知道了问题的话就容易解决了, 直接用其他的字体来替换箭头与等号就可以了1 .
1 | \documentclass{article} |
\Longrightarrow
的问题解决了, 但是出现了新的问题, 在
Latin Modern Math
与 STIX Two Math
中的减号
-
与箭头 \longrightarrow
的粗细或者垂直位置不一致, 这会导致 \xlong
系列的箭头变得奇怪, 所以只是这么处理的话会导致箭头风格不统一. 如果不重制
\Relbar
与 \relbar
的话,
那就祈祷文章种不要同时出现两种箭头吧……