使用 fontspec 的可变字形

使用 fontspec 的可变字形

我想使用 fontspec 访问一些替代字形形式。具体来说,我使用的是 Garamond Premier Pro 字体,我想使用 Q(字形 245)、W(字形 246)和 &(字形 301)的替代形式。该字体有 4 种风格集,但通过 fontspec 使用它们不会影响所述字母的形状。

以下是仍然存在问题的最少代码:

\documentclass{article}

\usepackage[no-math]{fontspec}
    \setmainfont[Ligatures=Common, StylisticSet={1,2,3,4}]{Garamond Premier Pro}
        
\title{Title}

\begin{document}
\maketitle
Test: WQ\&.
\end{document}

PS:Style= Alternate在 fontspec 中使用会改变所有内容,而不仅仅是三个字母(它还会选择我不想要的 & 的替代形式)。

PPS:XeLaTeX 和 LuaLaTeX 都存在此问题。

答案1

我不知道我们是否有相同版本的字体,因为你提到的字形编号与我看到的不匹配。但在 LuaTeX 中,你可以这样做(如果显示的不是你想要的,请将 & 符号字形的名称调整为ampersand.alt2或):ampersand.alt3

\documentclass[12pt]{article}
\usepackage[no-math]{fontspec}
\directlua{
  fonts.handlers.otf.addfeature{
    name = "malt",
    type = "alternate",
    data =
    {
      Q = "Q.alt",
      ["q.sc"] = "q.scalt",
      W = "W.alt",
      ["w.sc"] = "w.scalt",
      Wcircumflex = "Wcircumflex.alt",
      Wgrave = "Wgrave.alt",
      Wacute = "Wacute.alt",
      Wdieresis = "Wdieresis.alt",
      ["wacute.sc"] = "wacute.scalt",
      ["wcircumflex.sc"] = "wcircumflex.scalt",
      ["wdieresis.sc"] = "wdieresis.scalt",
      ["wgrave.sc"] = "wgrave.scalt",
      ampersand = "ampersand.alt1",
    },
  }
  fonts.handlers.otf.addfeature{
    name = "oops",
    type = "alternate",
    data =
    {
      ["ampersand.alt1"] = "ampersand.sc",
    },
  }
}
\setmainfont{Garamond Premier Pro}[RawFeature=+malt]% “malt” for “my alternates”; choose another name if you like
\begin{document}
Test: W Q \&.

Ẃ Ẁ Ŵ Ẅ

% because the font doesn’t have small cap ampersand variants:
{\addfontfeature{RawFeature=+oops}\textsc{Test: w q \& ẃ ẁ ŵ ẅ}}
\end{document}

输出

如果您不想{\addfontfeature{RawFeature=+oops}...}在出现小型大写字母“&”时记住添加,只需fontspec在序言中像这样调用即可:

\setmainfont{Garamond Premier Pro}[
  RawFeature=+malt,
  SmallCapsFeatures={RawFeature=+oops}]

如何调整LuaTeX 中的字体功能?了解更多详情。对于带有长尾的字形,定义上下文替代通常是更好的选择。

相关内容