
Я хочу проверить, связана ли эта проблема с моей конфигурацией или это какой-то баг.
Вот пакеты, которые я загружаю, и их конфигурация (все очень минимально, чтобы проверить проблему). Я использую 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 имеет исправление курсива и нуждается в нем для правильного интервала.
- В случае с Latin Modern шрифт вообще не обеспечивает исправления курсива.
- В Asana math также отсутствует исправление курсива, но глифы расположены таким образом, что необходимость исправления курсива устраняется.
- В шрифте Эйлера, хотя и есть исправление курсива, его вертикальный дизайн делает отсутствие исправления курсива не очень заметным (хотя ваш пример неверен, вам нужно передать
math-style=upright
параметр для использования алфавитов Эйлера).
Мне неясно, почему XeTeX прекратил применять исправление курсива. К этой части кода уже давно никто не прикасался, но код в любом случае был некорректным, поэтому я предполагаю, что он сработал случайно, и часть недавней математической очистки сломалась.
Однако есть обходной путь: откройте шрифт XITS в редакторе шрифтов (предпочтительно FontForge) и установите ширину символа пробела на0, это заставит движок снова применить коррекцию курсива.
Для любопытных: применение коррекции курсива зависит от того, равен ли нулю фактор пробела шрифта, даже в математической ветке кода OpenType, и хотя это справедливо для математических шрифтов TFM, для шрифта OpenType это по сути не так.
Кроме того, математическая спецификация OpenType отличается от алгоритма TeX в том, когда следует применять исправление курсива, но это очень расплывчато, а реализация MS, похоже, отличается от того, что фактически задокументировано, поэтому она пока не очень хорошо поддерживается XeTeX и LuaTeX.
Обновлять: Основная ветка XeTeX теперь справляется с этим лучше, пока не будет разработана более надежная обработка исправления курсива.