如何抑制对于同一字符对而言优先于“常见”连字的“罕见”连字?

如何抑制对于同一字符对而言优先于“常见”连字的“罕见”连字?

在我创建的几个文档中LuaLaTeX(在运行 MacOS X 10.7.5 的 Mac 上使用 MacTeX2012),我主要使用 Adob​​e 发布的字体Garamond Premier 专业版作为主文本字体。我使用这种字体是因为它提供了大量

  • “常见”连字:这些不仅包括五种 TeX 标准 f 连字,即 、fffiflffiffl还包括ftfftfbffb以及其他一些连字;

  • “稀有”连字(又称“自由裁量”):对于此特定字体,“稀有”连字可用于字符对ctstspft(但不可用于fft;另见下文),无论是直立还是斜体形状,以及字符对asisusatetth其他一些斜体仅字体形状。

如果仅启用了“通用”连字符集(通过选项Ligatures=Common),则直立和斜体的ft和组都排版如下:fft

在此处输入图片描述

以防万一,这些连字的 Unicode 字符表示分别为U+E18DU+E187。在直立字体形状中,“字形 ID”数字分别为277271,“字符代码”分别为5774257735。在斜体字体形状中,Unicode 字符表示相同,但​​“字形 ID”和“字符代码”数字分别为 283 和 276,以及 57864 和 57857。

但是,如果启用了“罕见”连字符集——无论是否也启用了“常见”连字符集——ftfft字符组将按如下方式呈现:

在此处输入图片描述

在旁边:有关“罕见”样式 ft-ligature 的另一种呈现方式,请查看网页Garamond 型 ft 连字符

“Rare” 样式的连字不仅ft看起来与“Common”样式的连字大不相同,而且fft连字根本不存在:fft字符三重现在呈现为简单的“f”,后跟“Rare”样式的ft连字。就我而言,fft如果启用了“Rare”连字,字符三重没有连字是相当不幸的。“f”和“ft”字形的横线在斜体字体形状中无法正确对齐,这也是相当成问题的。另外,我也更喜欢“Common”样式的 ft 连字的外观,而不是“Rare”样式的连字,但这只是次要问题。 (顺便说一下,“Rare” ft-ligature 的 Unicode 字符表示是U+E18E。在直立字体形状中,其“字形 id”和“字符编号”代码分别为 278 和 57742;在斜体字体形状中,后两个数字分别为 283 和 57864。)

我的问题是:有没有办法 - 最好使用fontspec包提供的宏 - 全局禁用“Rare”样式的ft连字以便重新启用“Common”样式的ft连字 - 同时仍然能够使用所有其他“Rare”连字以及“Common”连字?

为了完整起见,下面是生成上述第一个例子的代码:

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=Common,
    ItalicFont={Garamond Premier Pro Italic}]
    {Garamond Premier Pro}
\begin{document}
ft fft \em ft fft
\end{document}

要生成第二个示例,请将选项替换Ligatures=CommonLigatures={Common,Rare}

答案1

类似这样的使用功能文件的事情应该可以工作:

首先是功能文件:

# scripts and languages, if the font use others they should be defined here too
languagesystem DFLT dflt;
languagesystem latn dflt;

# this undoes the effect of rare ligature on ft
feature liga {
  sub f_t.alt by f t;
} liga;

# move rare ft to historic ligatures
feature hlig {
  sub f t by f_t.alt;
} hlig;

# apply the regular ligature on ft and fft
feature liga {
  sub f f t by f_f_t;
  sub f t by f_t;
} liga;

上述顺序很重要,这样常规的“ft”和“fft”即使与Rare连字一起使用,但不能与一起使用Historic

字形名称应该与字体中的字形名称相匹配,其中 &f_t.alt是不需要的“ft”连字符的名称,而f_t&f_f_t是想要的连字符的名称。

完整功能文件语法为记录由 Adob​​e 开发(但 LuaTeX 支持 v1.6 f 语法 + FontForge 扩展,而不是当前版本,因此存在一些差异)。

然后可以使用 fontspec 选项将其应用于字体FeatureFile

\documentclass{article}
\usepackage{fontspec}

\begin{document}
\fontspec[Ligatures={Common,Rare},FeatureFile=test.fea]{Garamond Premier Pro}
ft fft \em ft fft

\fontspec[Ligatures={Common,Rare,Historic},FeatureFile=test.fea]{Garamond Premier Pro}
ft fft \em ft fft
\end{document}

答案2

我的回答与@svenper 给出的答案基本相同,但它太长了,不能作为评论,并且它可能回答了 Mico 向 svenper 提出的问题。

也许我拥有的 Garamond Premier Pro 版本比您更新(2.000 版),因为使用Ligatures=Rare,我得到了罕见的“ft”和常见的“fft”,无论是直体还是斜体。(一些代工厂会通知客户更新,甚至免费发送更新;Adobe 则不会,好像它的声誉是通过让低版本的产品四处流传而提高的。)

如果您被困在有缺陷的字体版本中,并且不喜欢它们的自由选择的“ft”连字(它对易读性没有任何作用),并且如果您想要一种方便的方法来使用除“ft”之外的所有自由选择的连字,您可以定义f\_t.alt到忘却:

\documentclass{article}
\usepackage{fontspec}
\directlua{
  fonts.handlers.otf.addfeature{
    name = "mlig",
    type = "substitution",
    data = {
      ["f_t.alt"] = "f_t",
    },
  }
}
\setmainfont{Garamond Premier Pro}[
  Ligatures=Rare,% placing this before the new feature may be important; please test
  RawFeature=+mlig]% mlig = “Mico’s ligatures”
\begin{document}
ft fft ct sp st

\em ft fft as at ct et ij is ll sp st ta th us
\end{document}

输出

如果您想在一个地方恢复可选的“ft”,只需使用{\addfontfeatures{RawFeature=-mlig}ft}

请测试一下;它对我有用,但我的字体副本没有显示原始问题。

另一种方法是避免指定Ligatures=Rare,而是定义一个新功能,只包含您喜欢的自由连字。例如,假设您喜欢许多自由连字,但不喜欢“ct”、“sp”和“st”。在这种情况下,常用连字足以满足直立字体的需求,但您需要一个新功能来处理斜体 — 我们将其称为ilig“斜体连字”。

\documentclass{article}
\usepackage{fontspec}
\directlua{
  fonts.handlers.otf.addfeature{
    name = "ilig",
    type = "ligature",
    data = {
      ['a_s'] = { "a", "s" },
      ['a_t'] = { "a", "t" },
      ['e_t'] = { "e", "t" },
      ['i_j'] = { "i", "j" },
      ['i_s'] = { "i", "s" },
      ['l_l'] = { "l", "l" },
      ['t_a'] = { "t", "a" },
      ['t_h'] = { "t", "h" },
      ['u_s'] = { "u", "s" },
    },
  }
}
\setmainfont{Garamond Premier Pro}[
  ItalicFeatures={RawFeature=+ilig}]
\begin{document}
ft fft ct sp st

\em ft fft as at ct et ij is ll sp st ta th us
\end{document}

输出

最后,假设您需要避免使用 ,dlig因为它会影响 f 连字,但您想要直立和斜体的“ct”、“sp”和“st”连字,以及一些可选的斜体连字。您可以简单地按照上面的方法使用ilig,并将直立和斜体中的可选连字添加到liga,默认情况下已启用。

\documentclass{article}
\usepackage{fontspec}
\directlua{
  fonts.handlers.otf.addfeature{
    name = "liga",
    type = "ligature",
    data = {
      ['c_t'] = { "c", "t" },
      ['s_p'] = { "s", "p" },
      ['s_t'] = { "s", "t" },
    },
  }
  fonts.handlers.otf.addfeature{
    name = "ilig",
    type = "ligature",
    data = {
      ['a_s'] = { "a", "s" },
      ['a_t'] = { "a", "t" },
      ['e_t'] = { "e", "t" },
      ['i_j'] = { "i", "j" },
      ['i_s'] = { "i", "s" },
      ['l_l'] = { "l", "l" },
      ['t_a'] = { "t", "a" },
      ['t_h'] = { "t", "h" },
      ['u_s'] = { "u", "s" },
    },
  }
}
\setmainfont{Garamond Premier Pro}[
  ItalicFeatures={RawFeature=+ilig}]
\begin{document}
Th γγ λλ ffi ffj ffl ft fft ct sp st

\em Th γγ λλ ffi ffj ffl ft fft as at ct et ij is ll sp st ta th us
\end{document}

输出

(不要尝试将仅以斜体形式出现的连字符添加到liga。使用我的新版本 Garamond Premier Pro 和最新的 TeX Live 2017,TeX 似乎可以宽容,但我曾尝试过 TeX 寻找的字体,比如l_l在直立字体中,没有找到它,就在我写“allegory”的地方产生了“aegory”。)

答案3

在 TeX Live 的最新版本中,功能文件已被弃用。使用 LuaLaTeX,另一种方法是更改​​连字符的字形。

\directlua{
    fonts.handlers.otf.addfeature {
        name = "norareft",
        type = "substitution",
        data = {
            ["f_t.alt"] = "f_t",
        }
    }
}

然后添加 fontspec 选项RawFeature=+norareft


完整的 MWE:

在此处输入图片描述

\documentclass{article}
\directlua{
    fonts.handlers.otf.addfeature {
        name = "norareft",
        type = "substitution",
        data = {
            ["f_t.alt"] = "f_t",
        }
    }
}
\usepackage{fontspec}
\setmainfont{GaramondPremrPro}% 
        [RawFeature=+norareft,   % <-- the new feature
         Ligatures={Common,Rare},% enable both common and rare ligs        
         Extension     = .otf,
         ItalicFont    = GaramondPremrPro-It,
         BoldFont      = GaramondPremrPro-Smbd,
         BoldItalicFont= GaramondPremrPro-SmbdIt]

\begin{document}
ft fft \textit{ft fft}

\bfseries ft fft \textit{ft fft}
\end{document}

相关内容