Wie kann ich den Abstand zwischen zwei bestimmten Buchstaben ändern (und so eine Ligatur erstellen)?

Wie kann ich den Abstand zwischen zwei bestimmten Buchstaben ändern (und so eine Ligatur erstellen)?

Ich erstelle ein Dokument mit der Schriftart Minion Pro, in der eine Ligatur „oo“ fehlt (z. B. U+A74F: ꝏ). Ich möchte diese Ligatur daher künstlich erstellen, indem ich den Abstand zwischen allen Vorkommen des Buchstabenpaars „oo“ automatisch reduziere. Ich kann dies manuell tun und einen Befehl erstellen (z. B. \oo), aber das wäre im Vergleich zur Einfachheit anderer Ligaturen ziemlich ärgerlich.

Unten sehen Sie den Effekt, den ich mir wünschen würde, allerdings mit viel Mühe erstellt:

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

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

Bildbeschreibung hier eingeben

Antwort1

Dabei mache ich gezielt oAktionen aktiv, die Du in der Regel nicht möchtest \myligONund stelle somit sicher \myligOFF, dass deren Nutzung eingeschränkt ist.

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

Bildbeschreibung hier eingeben

Antwort2

Ich würde das nicht überall machen, nur für besondere Effekte in Titeln in Displaygröße. Aber die Methode des Kernings erklärt Ulrike Fischer unterWie passe ich Schriftfunktionen in LuaTeX an?macht den Job:

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

Ausgabe

Antwort3

Eine XeTeXLösung als Ergänzung zur Antwort von @Therese LuaTeXunter Verwendung der Interchartoksfolgenden Funktion:

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

ligierter Text

verwandte Informationen