unicode-math e várias fontes falham em fornecer espaçamento decente na fórmula

unicode-math e várias fontes falham em fornecer espaçamento decente na fórmula

Quero verificar se esse problema é devido à minha configuração ou se é algum tipo de bug.

Estes são os pacotes que carrego e a configuração deles (todos mínimos para testar o problema). Estou usando o 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}

Quando eu estava escrevendo percebi que algo estava estranho com o espaçamento nas fórmulas matemáticas, então escrevi isso XITS Matemática que é bastante terrível. O espaçamento não é nada bom, há muitos confrontos. Depois tentei com algumas outras fontes, escolhendo entre aquelas suportadas pelo unicode-math (encontrei a lista no README), descobri que tenho o mesmo efeito com STIX Math e com Latin Modern Math, como vocês podem ver Matemática Moderna Latina

Aqui o problema é menos evidente porque a fonte é mais leve, mas confronta com a versão padrão do Latin Modern (sem usar fontes opentype e unicode-math)

Latim Moderno correto Isso está correto, então pensei que fosse algo relacionado à matemática unicode, mas usando Neo Euler e Asana Math parece bom

Neo Euler Asana Matemática

Alguém tem idéia do que pode ser a causa desse problema? Talvez as fontes? Espero que não, porque gostaria muito de usar XITS ou STIX... Você consegue reproduzir o problema?

Responder1

O principal problema é que o XeTeX não está aplicando correção matemática de itálico:

  • XITS possui correção de itálico e precisa dela para espaçamento adequado.
  • No caso do Latin Modern, a fonte não fornece correção de itálico.
  • A matemática Asana também não possui correção de itálico, mas os glifos são espaçados de uma forma que alivia a necessidade de correção de itálico.
  • Euler, embora tenha correção de itálico, seu design vertical faz com que a falta de correção de itálico não seja muito visível (embora seu exemplo esteja errado, você tem que passar math-style=uprighta opção para que os alfabetos de Euler sejam usados).

Por que o XeTeX parou de aplicar a correção de itálico não está claro para mim, essa parte do código não foi tocada por muito tempo, mas o código tinha falhas de qualquer maneira, então meu palpite é que funcionou acidentalmente e algumas das recentes limpezas matemáticas quebraram.

No entanto, há uma solução alternativa: abra a fonte XITS em um editor de fontes (de preferência FontForge) e defina a largura do glifo de espaço como0, isso fará com que o mecanismo aplique a correção de itálico novamente.

Para os curiosos, a aplicação ou não da correção de itálico depende se o fator de espaço da fonte é zero, mesmo no ramo matemático OpenType do código, e embora isso seja verdade para fontes matemáticas TFM, não é essencialmente o caso para Fonte OpenType.

Além disso, as especificações matemáticas do OpenType divergem do algoritmo TeX sobre quando a correção de itálico deve ser aplicada, mas é muito vaga, e a implementação do MS parece diferir do que está realmente documentado, portanto ainda não é muito bem suportado pelo XeTeX e LuaTeX.

Atualizar: O branch master do XeTeX lida melhor com isso agora, até que um tratamento mais robusto da correção de itálico seja desenvolvido.

informação relacionada