特定字符和字距的替代项

特定字符和字距的替代项

我正在尝试更改文档中用于斜体 y 的样式集。我使用了 Alan Munn 的方法,解释如下:仅对某些字形使用风格变化

它工作正常,只是会干扰字距调整。(我相信这个问题可能与 Emerson 的有关:字形替代符中断连字

有解决办法吗?

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Mapping=tex-text]{Arno Pro}
\begin{document}

\textit{y} -- \textit{y.} -- y. % Proper kerning.

\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\myalt
\XeTeXcharclass `y \myalt
\XeTeXinterchartoks 0 \myalt = {\begingroup\addfontfeature{Style=Alternate}}
\XeTeXinterchartoks \myalt 0 = {\endgroup}
\XeTeXinterchartoks 255 \myalt = {\begingroup\addfontfeature{Style=Alternate}}
\XeTeXinterchartoks \myalt 255 = {\endgroup}

\textit{y} -- \textit{y.} -- y. % No kerning (esp. after the upright y).
\end{document}

此示例如下所示:

在此处输入图片描述

答案1

如果只需要斜体“替代”样式,可以这样做:

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Arno Pro}

\makeatletter
\def\it@shape@string{it}
\def\check@italics{%
  \ifx\f@shape\it@shape@string\addfontfeatures{Style=Alternate}\fi}

\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\myalt
\XeTeXcharclass `y \myalt
\XeTeXinterchartoks 0 \myalt = {\begingroup\check@italics}
\XeTeXinterchartoks \myalt 0 = {\endgroup}
\XeTeXinterchartoks 255 \myalt = {\begingroup\check@italics}
\XeTeXinterchartoks \myalt 255 = {\endgroup}
\makeatletter

\begin{document}

\begingroup\XeTeXinterchartokenstate=0 % disable for testing

\textit{y} -- \textit{y.} -- y. % Proper kerning.

\endgroup

\textit{y} -- \textit{y.} -- y. % Kerning is good after Roman y

\end{document}

我没有 Arno Pro 字体,因此我用另一种字体(没有不同的 y)进行了测试,但字距是正确的。

请注意,启用标准 TeX 连字的“现代”方式是

Ligatures=TeX

相关内容