![unicode-math 和各种字体无法在公式中给出合适的间距](https://linux22.com/image/254747/unicode-math%20%E5%92%8C%E5%90%84%E7%A7%8D%E5%AD%97%E4%BD%93%E6%97%A0%E6%B3%95%E5%9C%A8%E5%85%AC%E5%BC%8F%E4%B8%AD%E7%BB%99%E5%87%BA%E5%90%88%E9%80%82%E7%9A%84%E9%97%B4%E8%B7%9D.png)
我想检查这个问题是否是由于我的配置引起的,或者是否是某种错误。
这是我加载的包及其配置(为了测试问题,所有配置都非常简单)。我使用的是 XeTeX 0.9998。
\documentclass[12pt,a4paper]{scrbook}
\usepackage{polyglossia}
\setmainlanguage{italian}
\usepackage{amsmath,amsthm,mathtools}
\usepackage{mathcomp,mathrsfs,xfrac,bbm}
\usepackage{unicode-math}
\usepackage{xunicode}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Linux Libertine O}
\setsansfont[Scale=MatchLowercase]{Myriad Pro}
\setmonofont{Inconsolata}
\setmathfont{XITS Math}
当我写作时,我注意到数学公式中的间距有些奇怪,然后我写了这个,
这很糟糕。间距一点也不好,有很多冲突。然后我尝试了一些其他字体,选择 unicode-math 支持的字体(在 README 中找到列表),结果我发现 STIX Math 和 Latin Modern Math 也有同样的效果,如你所见
这里的问题不太明显,因为字体较浅,但与 Latin Modern 的标准版本相冲突(不使用 opentype 字体和 unicode-math)
这是正确的,所以我认为这与 unicode-math 有关,但使用 Neo Euler 和 Asana Math 看起来没问题
有人知道这个问题可能是什么原因造成的吗?也许是字体?我希望不是,因为我真的很想使用 XITS 或 STIX... 你能重现这个问题吗?
答案1
主要问题是 XeTeX 没有应用数学斜体校正:
- XITS 有斜体校正,需要它来获得适当的间距。
- 对于拉丁现代字体来说,它根本不提供斜体校正。
- Asana 数学也缺少斜体校正,但是字形的间距可以减轻斜体校正的需要。
- 欧拉,虽然有斜体校正,但其直立设计使斜体校正的缺失不太明显(虽然你的例子是错误的,你必须传递
math-style=upright
使用欧拉字母表的选项)。
我不清楚 XeTeX 为什么停止应用斜体校正,这部分代码已经很久没有人动过了,但代码本来就有缺陷,所以我的猜测是它是意外起作用的,是最近的一些数学清理工作被破坏了。
不过,有一个解决方法:在字体编辑器(最好是 FontForge)中打开 XITS 字体,并将空格字形的宽度设置为0,这将导致引擎再次应用斜体校正。
令人好奇的是,是否应用斜体校正取决于字体的空间因子是否为零,即使在代码的 OpenType 数学分支中也是如此,虽然对于 TFM 数学字体来说确实如此,但对于 OpenType 字体来说并非如此。
此外,OpenType 数学规范在何时应用斜体校正方面与 TeX 算法有所不同,但它非常模糊,并且 MS 的实现似乎与实际记录的不同,因此它还没有得到 XeTeX 和 LuaTeX 的很好的支持。
更新:XeTeX 的主分支现在可以更好地处理这个问题,直到设计出更强大的斜体校正处理方法。