使用 HF&J 的 Mercury Text OpenType 字体启用连字时遇到问题

使用 HF&J 的 Mercury Text OpenType 字体启用连字时遇到问题

我敢肯定这个字体支持连字,但我无法让它们显示出来。

与 Roboto 进行比较的示例:

\documentclass[
  11pt,
  a4paper
]{scrartcl}

\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex-text}

\begin{document}

\setmainfont[
  ExternalLocation,
  Extension=.ttf,
  UprightFont=*-Regular,
  ItalicFont=*-Italic,
  BoldFont=*-Bold,
  BoldItalicFont=*-BoldItalic,
  Ligatures=Common
]{Roboto}

roboto fight flight has ligatures

\setmainfont[
  ExternalLocation,
  Extension=.otf,
  Ligatures=Common
]{Mercury-TextG4Roman}

mercury fight flight no ligatures

\end{document}

姆韦

HF&J 网站上的连字符列表如下fi

连字符列表

Windows 中的 charmap 会以该字体显示该字符:

字符映射

更新

输出otfinfo

信息网

更新 2

改为LuaLatex,增加了features文件:

\documentclass[
  11pt,
  a4paper
]{scrartcl}

\usepackage{filecontents}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures={Common,Rare,Historic}}

\begin{filecontents*}{mercury.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;
# Ligatures
feature liga {
    sub \f \i by \fi;
    sub \f \l by \fl;
} liga;
\end{filecontents*}

\begin{document}

\setmainfont[
  ExternalLocation,
  Extension=.ttf,
  UprightFont=*-Regular,
  ItalicFont=*-Italic,
  BoldFont=*-Bold,
  BoldItalicFont=*-BoldItalic,
  Ligatures=Common
]{Roboto}

roboto fight flight has ligatures

\setmainfont[
  FeatureFile=mercury.fea,
  ExternalLocation,
  Extension=.otf,
  Ligatures=Common
]{Mercury-TextG4Roman}

mercury fight flight no ligatures

\end{document}

连字符显示:

在此处输入图片描述

答案1

在 @cfr 的帮助下,您已经确定:

  • 该字体确实包含连字符。

  • fontspec即使有 AAT 连字符信息,也无法利用它。

  • 该字体省略了自动连字支持所需的 OpenType 功能数据。

那么你能做什么呢?你可以将缺失的映射数据添加到字体中,或者创建一个外部 OpenType 功能文件(仅受 LuaTeX 支持)并告诉 fontspec 使用它。两者都不难。

liga使用 FontForge添加 Opentype表

笔记:请首先查阅字体的许可条款等等。

  1. 在 fontforge 中打开字体文件。
  2. Element->Font Info从菜单中 打开对话框:字体信息对话框 列出的条目对应于各种 OpenType“功能”,您想要的功能在列表中名为“标准连字”,并liga 在规范和输出中称为功能otfinfo,并且您已经知道它在您的字体中缺失,所以我们需要先创建表,然后用缺失的数据填充它。
  3. 点击“添加查找”按钮并选择类型为“标准连字符”。
  4. 点击“添加子表”按钮来创建实际的映射表。双击新的子表条目以打开其编辑器视图。
  5. 现在您应该看到编辑对话框,您可以在其中设置字符序列和连字符字形之间的映射: 连字子表编辑器 使用“填充”按钮让 FontForge 推断字体支持的连字并自动为您创建条目。根据字体的不同,您可能还需要手动编辑/添加条目。左侧列包含连字的字形名称,而右侧列包含单个字符,以空格分隔。
  6. 完成后,点击Ok两次即可再次返回主窗口。
  7. 使用 保存更新的字体文件File->Generate Fonts,确保将类型 dropbox 设置为OpenType(CFF)。请注意,生成的字体带有与原始字体相同的内部字体名称(尽管很容易更改),因此您必须覆盖原始字体(记得备份)以避免加载旧版本,或者在使用 加载时明确指定字体文件的路径fontspec
  8. 你完成了。

liga使用 OpenType 功能文件添加 Opentype表(仅限 LuaTeX)

fontspec手册有一个部分在功能文件上(带有指向规格),其中包含一个示例,该示例准确显示了您想要的内容,例如如何定义连字符映射。因此,您只需创建功能文件,然后使用选项来FeatureFile加载fontspec它:

文件:另一个联盟.tex

\documentclass{article}
\usepackage{filecontents}
\usepackage{fontspec}

% Alternatively, place this in a `mercury.fea` file in the same directory
\begin{filecontents*}{mercury.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;
# Ligatures
feature liga {
    sub \f \i by \fi;
    sub \f \l by \fl;
} liga;
\end{filecontents*}
    
\setmainfont[
FeatureFile=mercury.fea,
%Ligatures={Common} % on by default
]{Mercury-TextG4Roman}

\begin{document}
    fi \symbol{"FB01} 
    
    fl \symbol{"FB02} 
\end{document}

此示例假设连字符字形存在于其 Unicode 标准位置,并直接通过字形编号包含它们以便进行比较。YMMV。

编辑:请注意,fontspec如果选项有问题,它不会因错误而停止FeatureFile。输入错误的路径、文件中的语法错误或使用其他引擎LuaTeX都会悄悄导致它忽略功能文件。

相关内容