我正在尝试更改文档中用于斜体 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