\XeTeXglyph 触发了之前的字符变体。如何避免这种情况?

\XeTeXglyph 触发了之前的字符变体。如何避免这种情况?

我正在使用 XeTeX 在 Hoefler Text 中排版文档。但是,我对默认位置的连字符和破折号不满意,我更愿意使用其他字形。我目前使用宏来实现这一点\XeTeXglyph

不幸的是,在我调用宏之前的最后一个字符的\XeTeXglyph行为就像它是该行的最后一个字符一样,有时会被变体字形替换,这通常是不合适的。

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode

\documentclass{article}
\usepackage{fontspec} 

\setromanfont{Hoefler Text}

% DOCUMENT
\begin{document}

\itshape % italics trigger variants much more readily

n-t % doesn't trigger n variant

n\XeTeXglyph 16 t % does trigger n variant

\end{document}

有没有其他 (更好) 的方法来调用正确的字形而不触发变体?或者有没有一种方法可以在使用 时防止触发字符变体\XeTeXglyph,最好不用将 n 替换为另一个\XeTeXglyph

答案1

\fontspec选项Contextuals=NoLineFinal提供了一种避免在行尾出现花饰的方法。如果我理解正确的话,这基本上就是每当我使用\XeTeXglyph宏时在布局引擎级别发生的情况,所以我只需确保正确设置该选项即可。

\documentclass{article}
\usepackage{fontspec} 

\setromanfont{Hoefler Text}
\newfontfamily \NoSwash [ItalicFeatures={Contextuals=NoLineFinal}]{Hoefler Text}
% Contextual=(No)LineFinal is meaningful only for the italic face of the family

% DOCUMENT
\begin{document}

\itshape

n-t

{\NoSwash n\XeTeXglyph 16 t} % disables it on the whole line

{\NoSwash n}\XeTeXglyph 16 t % disables it around the n only

{\fontspec[ItalicFeatures={Contextuals=NoLineFinal}]{Hoefler Text} n}\XeTeXglyph 16 t
% does the same locally

\end{document}

不“破坏输入流”可能会更好,但目前这样做是可行的。

相关内容