Как изменить кернинг между двумя определенными буквами (и таким образом создать лигатуру)?

Как изменить кернинг между двумя определенными буквами (и таким образом создать лигатуру)?

Я создаю документ, используя шрифт 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

Я бы не делал этого везде, только для спецэффекта в заголовках на дисплее. Но метод кернинга Ульрике Фишер объясняет наКак настроить параметры шрифта в 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 LuaTeX, с использованием функции Interchartoks:

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

лигатурный текст

Связанный контент