unicode-math 和各种字体无法在公式中给出合适的间距

unicode-math 和各种字体无法在公式中给出合适的间距

我想检查这个问题是否是由于我的配置引起的,或者是否是某种错误。

这是我加载的包及其配置(为了测试问题,所有配置都非常简单)。我使用的是 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}

当我写作时,我注意到数学公式中的间距有些奇怪,然后我写了这个, XITS 数学 这很糟糕。间距一点也不好,有很多冲突。然后我尝试了一些其他字体,选择 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 的主分支现在可以更好地处理这个问题,直到设计出更强大的斜体校正处理方法。

相关内容