Richtiges Kerning von \{f\} \sigma_0 in TeX Gyre Termes Math

Richtiges Kerning von \{f\} \sigma_0 in TeX Gyre Termes Math

Auch weiterhinhttps://chat.stackexchange.com/rooms/97632/discussion-between-marcel-kruger-and-mdayq6, läuft lualatex auf

\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}

woher die Schriftart stammthttp://filebin.net/36gqo82z5evv2869(unsere Versuche, die Mathematik des Tex Gyre Termes zu verbessern), erzeugt

Unterschneidung links

Wie wir sehen, wird das Kerning im ersten Fall angewendet, im zweiten jedoch nicht. Was muss ich tun, um auch im zweiten Fall das richtige Kerning zu erhalten?

Außerdem endet der Versuch, den Abstand zwischen f und } zu verringern, im Nichts: Welchen Wert ich auch immer in Kern-Offset eingebe,

kein rechter Kerning

, das resultierende PDF bleibt unverändert.

Irgendeine Idee, wie man das Kerning zwischen f und } anpasst?

Und zu guter Letzt: Gibt es eine Idee, wie man den Zeichenabstand in Fontforge $\sigma_0$und \[\sigma_0\]mit Fontforge verringern kann? Derzeit ist dieser Zeichenabstand enorm groß ...

EDIT: FolgenMarcels Vorschläge, gab ich die Suche nach einer guten Lösung auf {f}und schuf eineTeX Ryge Termes Math-Schriftart mit neuen UnterschneidungenVerbesserung der richtigen Indizes für Kursivschrift \sigmaund \tauim Mathematikmodus. Betrachten wir die Eingabe

\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}

Mit den ursprünglichen Gyre-Schriftarten erzeugt das obige Ergebnis die

ursprüngliche Xelatex-Ausgabe

für Xelatex und

ursprüngliche Lualatex-Ausgabe

für lualatex.

Bei Verwendung der unterschnittenen Ryge-Schriftarten erhalten wir

Ausgabe von xelatex unter Verwendung der Schriftart Ryge mit Kernings

bei der Kompilierung mit xelatex und

Ausgabe von Lualatex unter Verwendung der Schriftart Ryge mit Kernings

bei Kompilierung mit Lulatex.

Mit der neuen Schriftart Ryge xelatexfunktioniert das Unterschneiden im Allgemeinen gut, und lualatexabgesehen vom tiefgestellten „abc“ funktioniert das Unterschneiden fast gar nicht. Warum ist das so?

Weitere Verbesserungen für notwendig erachtet:

  • Erhöhen Sie den Abstand für tiefgestellte Zeichen ⊤ leicht.

Antwort1

Zu deinen beiden Problemen lies meine Antwort auf deine andere Frage: Normales Kerning ist nicht das richtige Werkzeug für Mathe und wird normalerweise nicht angewendet. Dass LuaTeX es manchmal doch anwendet, liegt wahrscheinlich daran, dass TeX nicht mehr weiß, dass die Zeichen mal Mathe waren. Nachdem die fKursivkorrektur eingefügt wurde, folgen die fund also }nicht direkt aufeinander -> kein Kerning. Auch in Display-Mathematik erwartet LuaTeX nicht, etwas zu finden, das Kerning erfordert, also wird das Kerning übersprungen.

Ihre letzte Frage ist jedenfalls interessanter:

Der Abstand zwischen einem Zeichen und seinem Index wird in OpenType Math als Math-Abstand bezeichnet. Siehehttps://docs.microsoft.com/en-us/typography/opentype/spec/math#mathkerninfo-tablefür die Details. In Ihrem Fall müssen Sie nur das Sigma anpassen.

Öffnen Sie eine mathematische Schriftart in FontForge. Anschließend können Sie mathematische Parameter über Element->Weitere Informationen->MATH-Informationen ändern. Ein Fenster wie dieses wird geöffnet: Bildbeschreibung hier eingeben

Wählen Sie „Mathematisch kernen“ und drücken Sie, um mathematisches Kerning für eine neue Glyphe hinzuzufügen. Geben Sie den Namen Ihrer Glyphe ein, in Ihrem Fall „u1D70E“ (MATHEMATISCH KURSIV KLEINES SIGMA). Drücken Sie dann auf Ändern, um die Werte anzupassen.

Bildbeschreibung hier eingeben

Damit gelangen Sie zum Dialogfenster „Math Kerning“:

Bildbeschreibung hier eingeben Um neue Punkte hinzuzufügen, gehen Sie zu „Textuell“ und wählen Sie dann „Unten rechts“. Drücken Sie dreimal, um drei Punkte hinzuzufügen, und gehen Sie zurück zu „Grafisch“. Klicken Sie hier auf das Sigma unter „Unten rechts“, um diesen Block auszuwählen. Ihr Unterschneidungspunkt wird angezeigt und Sie können ihn an eine geeignete Stelle ziehen. Grob gesagt bedeutet jeder Punkt, dass, wenn ein Index in dieser Höhe oder tiefer angehängt wird, dieser diese Unterschneidung erhalten soll. Sie können Ihre Punkte beispielsweise folgendermaßen setzen:

Bildbeschreibung hier eingeben

Bestätigen Sie nun mit OK, nochmals mit OK und generieren Sie Ihren Font.

Wenn Sie Ihre Punkte auf die gleiche Weise wie ich platziert haben, $\sigma_0$wird

Bildbeschreibung hier eingeben

Wenn Sie Ihre Schriftart nicht ändern möchten, können Sie in LuaTeX natürlich auch Lua-Code zum Ändern des Mathkerns verwenden:

\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}

verwandte Informationen