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 で同じ効果が得られることがわかりました。 ラテン語現代数学

ここでは、フォントが薄いため、問題はそれほど明白ではありませんが、ラテンモダンの標準バージョン(オープンタイプフォントとUnicode-mathを使用せずに)と比較します。

ラテン語現代正しい これは正しいので、Unicode-mathに関連するものだと思っていましたが、Neo EulerとAsana Mathを使用すると問題ないようです

ネオオイラー アサナ数学

この問題の原因が何かわかる人はいませんか? フォントでしょうか? XITS または STIX を使いたいので、そうではないことを願っています... 問題を再現できますか?

答え1

主な問題は、XeTeX が数式の斜体修正を適用していないことです。

  • XITS には斜体修正機能があり、適切な間隔を保つためにこれが必要です。
  • Latin Modern の場合、フォントはイタリック体の修正をまったく提供しません。
  • Asana の数学では斜体修正もできませんが、グリフの間隔が広く取られているため、斜体修正の必要性が軽減されます。
  • オイラーには斜体補正機能がありますが、直立したデザインのため、斜体補正機能がないことがあまり目立ちません (あなたの例は間違っていますが、math-style=uprightオイラー アルファベットを使用するにはオプションを渡す必要があります)。

XeTeX が斜体修正の適用を停止した理由は私にはわかりません。コードのその部分は長い間変更されていませんでしたが、いずれにせよコードに欠陥があったため、誤って動作してしまい、最近の数式クリーンアップの一部が壊れたのではないかと推測します。

ただし、回避策があります。XITSフォントをフォントエディタ(FontForgeが望ましい)で開き、スペースグリフの幅を次のように設定します。0これにより、エンジンは斜体修正を再度適用するようになります。

興味深いことに、イタリック修正が適用されるかどうかは、コードの OpenType 数学ブランチであっても、フォントのスペース係数がゼロであるかどうかによって決まります。これは TFM 数学フォントには当てはまりますが、OpenType フォントの場合は必ずしも当てはまりません。

また、OpenType 数式仕様は、イタリック体の修正をいつ適用するかに関して TeX アルゴリズムと異なりますが、これは非常に曖昧であり、MS の実装は実際に文書化されているものとは異なっているようで、XeTeX と LuaTeX ではまだ十分にサポートされていません。

アップデート: 斜体修正のより堅牢な処理が考案されるまで、XeTeX のマスター ブランチではこれをより適切に処理します。

関連情報