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 コマンドを追加します。これは基本的に、2 つの異なるフォントがあることを意味します。このような方法は動作するはずですが、フォントに上付き文字がない場合に失敗しないように、いくつかのテストを追加する必要があります。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}

関連情報