Kerning adequado de \{f\} \sigma_0 no TeX Gyre Termes Math

Kerning adequado de \{f\} \sigma_0 no TeX Gyre Termes Math

Continuandohttps://chat.stackexchange.com/rooms/97632/discussion-between-marcel-kruger-and-mdayq6, executando lualatex em

\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
% \setmathfont{texgyretermes-math.otf}
\setmathfont[Kerning=On]{TeXRygeTermesMath-Regular.otf}%%% same as Tex Gyre Termes Math, with an attempt to improve kerning
\begin{document}
\(\{f\}\)
\[
  \{f\}
\]
\end{document}

de onde a fonte é tiradahttp://filebin.net/36gqo82z5evv2869(nossas tentativas de melhorar a matemática do tex gyre termes), produz

kerning esquerdo

Como podemos ver, o kerning é aplicado no primeiro caso, mas não no segundo. O que fazer para obter o kerning adequado também no segundo caso?

Além disso, tentar reduzir o kerning entre f e } termina em lugar nenhum: qualquer valor que eu inserir no deslocamento de kern

sem kerning correto

, o PDF resultante permanece inalterado.

Alguma ideia de como ajustar o kerning entre f e}?

Por último, mas não menos importante, alguma ideia de como reduzir o kerning $\sigma_0$e \[\sigma_0\]usar o Fontforge? A partir de agora, esse kerning é enormemente grande...

EDITAR: SeguindoSugestões de Marcelo, abandonei a busca por uma boa solução {f}e criei umFonte TeX Ryge Termes Math com novos kerningsmelhorando os subscritos corretos para itálico \sigmae \tauno modo matemático. Vamos considerar a entrada

\documentclass{article}
\pagestyle{empty}
\usepackage{unicode-math}
%\setmathfont[Ligatures=TeX]{TeX Gyre Termes Math}
\setmathfont[Ligatures=TeX]{TeXRygeTermesMath-Regular.otf} %%% Name changed to comply with the license. The shapes are (hopefully) the same, and the math kernings are new.
\begin{document}
\newcommand{\test}[1]{#1_{abc} #1_0^a #1^b_b #1_1^c #1^d_⊤ #1_⟂^e #1_T^f #1_k^g #1_{\mathup{k}}^h #1_{h}^j}
\newcommand{\testtest}{\test{\sigma}\test{\tau}}
\(\testtest\)
\[\testtest\]
\end{document}

Com as fontes Gyre originais, o procedimento acima produz a saída

saída original do xelatex

para xelatex e

saída lualatex original

para lualátex.

Ao usar as fontes Ryge com kerned, obtemos

saída de xelatex usando a fonte Ryge com kernings

quando compilado com xelatex e

saída de lualatex usando a fonte Ryge com kernings

quando compilado com lulatex.

Com a nova fonte Ryge, xelatexgeralmente faz um bom trabalho no kerning e lualatexquase nenhum trabalho no kerning, exceto o subscrito "abc". Por quê então?

Outras melhorias são consideradas necessárias:

  • aumentar ligeiramente o kerning para subscritos ⊤,

Responder1

Para seus dois problemas, leia minha resposta à sua outra pergunta: O kerning normal não é a ferramenta certa para matemática e normalmente não será aplicado. O fato de o LuaTeX às vezes se aplicar provavelmente acontece porque o TeX não sabe mais que os caracteres costumavam ser matemáticos. Após a fcorreção de itálico ser inserida, fe }não se seguem diretamente -> sem kerning. Também na matemática de exibição o LuaTeX não espera encontrar algo que exija kerning, então o kerning é ignorado.

De qualquer forma, sua última pergunta é mais interessante:

O kerning entre um caractere e seu subscrito é conhecido no OpenType Math como Math kerning. Verhttps://docs.microsoft.com/en-us/typography/opentype/spec/math#mathkerninfo-tablepara os detalhes. No seu caso você só precisa ajustar o sigma.

Abra uma fonte matemática no FontForge. Então você pode alterar os parâmetros relacionados à matemática através de Elemento-> Outras informações-> Informações de matemática. Uma janela como esta é aberta: insira a descrição da imagem aqui

Selecione "Math Kern" e pressione para adicionar kerning matemático para um novo glifo. Digite o nome do seu glifo, no seu caso "u1D70E" (MATEMÁTICO ITÁLICO PEQUENO SIGMA). Em seguida, pressione alterar para ajustar os valores.

insira a descrição da imagem aqui

Isso leva você à caixa de diálogo Math Kerning:

insira a descrição da imagem aqui Para adicionar novos pontos, vá em “Textual” e selecione “Inferior Direito”. Pressione três vezes para adicionar três pontos e voltar para “Gráfico”. Clique aqui no sigma abaixo do canto inferior direito para selecionar este bloco. Seu ponto de kerning aparece e você pode arrastá-lo para um local apropriado. Aproximadamente, cada ponto significa que se um subscrito for anexado nesta altura ou abaixo, ele deverá obter essa quantidade de kerning. Por exemplo, você pode definir seus pontos assim:

insira a descrição da imagem aqui

Agora confirme com OK, Ok novamente e gere sua fonte.

Se você colocou seus pontos da mesma forma que eu, $\sigma_0$fica

insira a descrição da imagem aqui

Claro, se você não quiser alterar sua fonte, LuaTeX também permite que você use o código Lua para alterar os mathkerns:

\documentclass{standalone}
\usepackage{unicode-math}
\usepackage{luacode}
\begin{luacode*}
  -- First create a table specifying the mathkerns we want to set:
  local mathkerns = {
    ["TeXGyreTermesMath-Regular"] = { -- This should be the PostScript name of the font
      [0x1D70E] = { -- If the character would have a regular name, you could also use the glyphname here
        bottomright = {
          {height=0,kern=-175},
          {height=216,kern=-76},
          {kern=0},
        },
      },
    },
  }
  local function initmathkern(tfmdata)
    local values = mathkerns[tfmdata.properties.psname]
    if not values then return end
    for cp, value in next, values do
      local tcp = type(cp)
      if tcp == 'string' then
        cp = tfmdata.resources.unicodes[cp]
      end
      local char = tfmdata.characters[cp]
      if char then
        local mathkern = char.mathkerns
        if not mathkern then
          mathkern = {}
          char.mathkerns = mathkern
        end
        for corner, v in next, value do
          mathkern[corner] = v
        end
      end
    end
  end
  fonts.constructors.newfeatures'otf'.register{
    name = 'mathkern',
    description = 'Overwrite mathkern values',
    initializers = {
      base = initmathkern,
    },
  }
\end{luacode*}
\setmathfont[RawFeature=mathkern]{texgyretermes-math.otf}
\begin{document}
$\sigma_0$
\end{document}

informação relacionada