使用 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 中的字元對應以該字型顯示該字元:

字元映射表

更新:

輸出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載入它:

文件: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都會悄悄地導致它忽略功能檔。

相關內容