Problema con la función de fuente personalizada para agregar interletraje en fuente OpenType

Problema con la función de fuente personalizada para agregar interletraje en fuente OpenType

Intento agregar un kerning personalizado a una fuente OpenType utilizada con fontspecunder lualatex. El ejemplo del mundo real usa las Brillfuentes, pero como no son parte de TeX Live, las uso Libertinusen el siguiente ejemplo.

Quiero agregar algo de interletraje entre caracteres específicos con signos diacríticos y números en superíndice. La única combinación que funciona es el uso directo de números en superíndice Unicode. Tan pronto como uso \textsuperscript, que se redefine para realscriptsusar las cifras correctas, no se aplica el interletraje adicional.

¿Hay alguna manera de lograr lo que quiero mientras lo uso \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}

Respuesta1

El código realscripts agrega un comando \addfontfeature. Y esto básicamente significa que tienes dos fuentes diferentes. Algo como esto debería funcionar, pero se deberían agregar algunas pruebas, para que no falle si una fuente no tiene los superíndices. Mire el código realscript.

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

información relacionada