用另一个字符替换一个字符(Lualatex)

用另一个字符替换一个字符(Lualatex)

Adobe Garamond Pro 的小写数字非常漂亮,但 1 可能会令人困惑:

Adobe Garamond Pro 中的 Eleven

这是罗马数字 11(应该是这样)还是 2?

我想用另一个字符自动替换这个小写的 1,最好是另一种字体的缩放版本(参见下图的第一行),或者用相同字体的无点 i 替换(第二行,不太合适但可以):

第一行:Adobe Hebrew 中的 1;第二行:无点 i

这个请求与这个问题非常相似: 用不同点大小的字符替换一个字符 但不幸的是没有得到答复(我知道我会有同样的批评,但这个小写的 1 对一些读者来说是个问题)。

在数学模式下,这似乎相当容易实现:如何更改字母的字体? 但在文本模式下,似乎需要将 catcode 更改为 1,这是毫无疑问的。

我尝试使用 fontspec 和 opentype 功能文件来实现这一点,但没有成功。使用 lualatex/fontspec 可以实现这一点吗?

谢谢!

答案1

由于我没有 Adob​​e Garamond Pro 字体,因此我使用了 TeX Live 中提供的 EBGaramond12 字体。此字体one.01为字形提供了另一种形式one

\documentclass{article}
\usepackage{fontspec}
\usepackage{filecontents}
\begin{filecontents*}{ebgaramond12.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;

feature calt {
  sub one by one.01;
} calt;
\end{filecontents*}

\newfontfamily\orggaramond{EBGaramond12}
\setmainfont[
  FeatureFile=ebgaramond12.fea,
  Contextuals=Alternate,
]{EBGaramond12}

\begin{document}
{\orggaramond 0123456789 1992 11 Ii Ll}\par
0123456789 1992 11 Ii Ll
\end{document}

结果

相关内容