Problem mit der benutzerdefinierten Schriftartfunktion zum Hinzufügen von Kerning in OpenType-Schriftarten

Problem mit der benutzerdefinierten Schriftartfunktion zum Hinzufügen von Kerning in OpenType-Schriftarten

fontspecIch versuche, einer OpenType-Schriftart, die mit under verwendet wird, benutzerdefiniertes Kerning hinzuzufügen lualatex. Das reale Beispiel verwendet die BrillSchriftarten, aber da sie nicht Teil von TeX Live sind, verwende ich sie Libertinusim folgenden Beispiel.

Ich möchte mit diakritischen Zeichen und hochgestellten Zahlen ein gewisses Kerning zwischen bestimmten Zeichen hinzufügen. Die einzige Kombination, die funktioniert, ist die direkte Verwendung der Unicode-hochgestellten Zahlen. Sobald ich verwende \textsuperscript, das durch neu definiert wird, realscriptsum die richtigen Zahlen zu verwenden, wird das zusätzliche Kerning nicht angewendet.

Gibt es eine Möglichkeit, das Gewünschte bei der Verwendung zu erreichen \textsuperscript?

% !TeX TS-program = lualatex
\documentclass{article}

\usepackage{fontspec}
% Values below are for demonstration purposes only
\directlua {
   fonts.handlers.otf.addfeature {
      name = "supkern",
      type = "kern",
      data = {
         ["ī"] = {
            ["¹"] = 500,%
            ["two.sups"] = 500,%
         },
         ["š"] = {%
            ["one.sups"] = 500,%
            ["two.sups"] = 500,%
         },
      },
   }
}
\usepackage[defaultfeatures={RawFeature={+supkern}}]{libertinus} %Brill in real life
\usepackage{realscripts}

\begin{document}
   ī\textsuperscript{12}
   
   ī¹
   
   ī{\addfontfeatures{VerticalPosition=Superior}2}
   
   {\addfontfeatures{RawFeature={+supkern}}ī\addfontfeatures{VerticalPosition=Superior}12}
   
   š\textsuperscript{2}
   
\end{document}

Antwort1

Der Realscript-Code fügt einen \addfontfeature-Befehl hinzu. Und das bedeutet im Grunde, dass Sie zwei verschiedene Schriftarten haben. So etwas sollte funktionieren, aber man sollte einige Tests hinzufügen, damit es nicht fehlschlägt, wenn eine Schriftart keine hochgestellten Zeichen hat. Schauen Sie im Realscript-Code nach.

\documentclass{article}

\usepackage{fontspec}
% Values below are for demonstration purposes only
\directlua {
   fonts.handlers.otf.addfeature {
      name = "supkern",
      type = "kern",
      data = {
         ["ī"] = {
            ["¹"] = 500,%
            ["two.sups"] = 500,%
         },
         ["š"] = {%
            ["one.sups"] = 500,%
            ["two.sups"] = 500,%
         },
      },
   }
}
\usepackage[defaultfeatures={RawFeature={+sups,+supkern}}]{libertinus} %Brill in real life
\RenewDocumentCommand\textsuperscript{m}{#1}
\begin{document}
   ī\textsuperscript{12}

ī¹ 
\end{document}

verwandte Informationen