我敢肯定這個字體支援連字,但我無法讓它們顯示出來。
與 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 中的字元對應以該字型顯示該字元:
更新:
輸出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
載入它:
文件:another_league.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
都會悄悄地導致它忽略功能檔。