我正在使用 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}
不“破坏输入流”可能会更好,但目前这样做是可行的。