特定の 2 つの文字間のカーニングを変更して合字を作成するにはどうすればよいでしょうか?

特定の 2 つの文字間のカーニングを変更して合字を作成するにはどうすればよいでしょうか?

私は Minion Pro フォントを使用して文書を作成していますが、このフォントには 'oo' 合字がありません (つまり、U+A74F: ꝏ)。そのため、文字ペア 'oo' の出現間の間隔を自動的に狭めて、この合字を人工的に作成したいと思います。これを手動で実行してコマンド (例\oo) を作成することもできますが、他の合字の容易さに比べるとかなり面倒です。

以下は、面倒ではありますが、私が望む効果です。

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Minion Pro}

\begin{document}
    \Huge
    Bo\hspace{-.15em}ok\par Book
\end{document}

ここに画像の説明を入力してください

答え1

oここでは、一般的には望ましくないアクティブ化を行うため、その使用を制限するため\myligONに提供します\myligOFF

\documentclass{article}
\let\svO o
\newcommand\OOkern{\hspace{-.15em}}
\newcommand\myligON{\catcode`o=\active }
\newcommand\myligOFF{\catcode`o=11 }
{\catcode`o=\active \gdefo#1{\svO\ifxo#1\expandafter\OOkern\fi#1}}
\begin{document}
Book

\myligON Book hop \myligOFF
versus Book hop

\end{document}

ここに画像の説明を入力してください

答え2

私はこれをどこでも行うつもりはありません。ディスプレイサイズのタイトルに特別な効果を与えるためだけに行うつもりです。しかし、カーニングの方法は、Ulrike Fischerが次のように説明しています。LuaTeX でフォント機能を調整するにはどうすればいいですか?仕事はうまくいく:

% compile with lualatex
\documentclass{article}
\usepackage{fontspec}
\directlua{
 fonts.handlers.otf.addfeature{
   name = "oooh",
   type = "kern",
   data =
   {
     ["o"] = { ["o"] =  -175 },
   },
 }
}
\setmainfont{Minion Pro}[RawFeature=+oooh]
\begin{document}
Look at the old book in the nook.
\end{document}

出力

答え3

機能を利用して、XeTeX@Therese の回答を補完するソリューション:LuaTeXInterchartoks

\documentclass{article}
\XeTeXinterchartokenstate = 1
\newXeTeXintercharclass \mycharclasso
\XeTeXcharclass `\o \mycharclasso
% between "o" and "o":
\XeTeXinterchartoks\mycharclasso\mycharclasso={\kern-2.5pt }
\usepackage{fontspec}
\setmainfont{Minion Pro}
\begin{document}
    \huge\centering Look at the old book in the nook.
\end{document}

合字テキスト

関連情報