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 имеет исправление курсива и нуждается в нем для правильного интервала.
  • В случае с Latin Modern шрифт вообще не обеспечивает исправления курсива.
  • В Asana math также отсутствует исправление курсива, но глифы расположены таким образом, что необходимость исправления курсива устраняется.
  • В шрифте Эйлера, хотя и есть исправление курсива, его вертикальный дизайн делает отсутствие исправления курсива не очень заметным (хотя ваш пример неверен, вам нужно передать math-style=uprightпараметр для использования алфавитов Эйлера).

Мне неясно, почему XeTeX прекратил применять исправление курсива. К этой части кода уже давно никто не прикасался, но код в любом случае был некорректным, поэтому я предполагаю, что он сработал случайно, и часть недавней математической очистки сломалась.

Однако есть обходной путь: откройте шрифт XITS в редакторе шрифтов (предпочтительно FontForge) и установите ширину символа пробела на0, это заставит движок снова применить коррекцию курсива.

Для любопытных: применение коррекции курсива зависит от того, равен ли нулю фактор пробела шрифта, даже в математической ветке кода OpenType, и хотя это справедливо для математических шрифтов TFM, для шрифта OpenType это по сути не так.

Кроме того, математическая спецификация OpenType отличается от алгоритма TeX в том, когда следует применять исправление курсива, но это очень расплывчато, а реализация MS, похоже, отличается от того, что фактически задокументировано, поэтому она пока не очень хорошо поддерживается XeTeX и LuaTeX.

Обновлять: Основная ветка XeTeX теперь справляется с этим лучше, пока не будет разработана более надежная обработка исправления курсива.

Связанный контент