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