OpenType 字体中自定义字体功能添加字距调整的问题

OpenType 字体中自定义字体功能添加字距调整的问题

我尝试为fontspec下使用的 OpenType 字体添加一些自定义字距调整lualatex。实际示例使用了这些Brill字体,但由于它们不是 TeX Live 的一部分,因此我Libertinus在下面的示例中使用了它们。

我想在带有变音符号和上标数字的特定字符之间添加一些字距调整。唯一有效的组合是直接使用 unicode 上标数字。一旦我使用\textsuperscript,它被重新定义为realscripts使用正确的数字,则不会应用额外的字距调整。

有没有什么方法可以在使用时实现我想要的效果\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}

答案1

realscripts 代码添加了 \addfontfeature 命令。这基本上意味着您有两种不同的字体。类似这样的操作应该可以工作,但应该添加一些测试,这样即使字体没有上标也不会失败。请查看 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}

相关内容