如何更改两个特定字母之间的字距(从而创建连字)?

如何更改两个特定字母之间的字距(从而创建连字)?

我正在使用 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 答案的解决方案,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}

连字文本

相关内容