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:

otfinfo

アップデート2:

LuaLatex に変更し、機能ファイルを追加しました:

\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 の親切な助けにより、次のことが証明されました:

  • フォントには合字グリフが含まれています。

  • fontspecAAT 合字情報が利用可能であっても、それを利用することはできません。

  • このフォントでは、自動合字サポートに必要な OpenType 機能データが省略されています。

では、どうすればいいでしょうか? 不足しているマッピング データをフォントに追加するか、外部の OpenType 機能ファイル (LuaTeX でのみサポート) を作成して、fontspec にそれを使用するように指示します。どちらも難しくはありません。

ligaFontForge を使用してOpentype テーブルを追加する

注記:まずフォントのライセンス条件などを確認してください。

  1. FontForge でフォント ファイルを開きます。
  2. Element->Font Infoメニューからダイアログ を開きます:フォント情報ダイアログ リストされているエントリは、さまざまな OpenType の「機能」に対応しています。必要な機能は、リスト内で「標準合字」という名前で、liga 仕様と出力では機能と呼ばれていますotfinfoが、フォントに存在しないことは既にわかっているため、最初にテーブルを作成し、次に不足しているデータをテーブルに入力する必要があります。
  3. 「ルックアップの追加」ボタンを押し、タイプとして「標準合字」を選択します。
  4. 実際のマッピング テーブルを作成するには、[サブテーブルの追加] ボタンをクリックします。新しいサブテーブル エントリをダブルクリックして、エディター ビューを開きます。
  5. 文字シーケンスと合字グリフ間のマッピングを設定する edito ダイアログが表示されます。 合字サブテーブルエディタ 「populate」ボタンを使用すると、FontForge はフォントでサポートされている合字を推測し、エントリを自動的に作成します。フォントによっては、エントリを手動で編集/追加する必要がある場合もあります。左側の列には合字のグリフ名が含まれ、右側の列にはスペースで区切られた個々の文字が含まれます。
  6. 完了したら、Ok2 回クリックしてメイン ウィンドウに戻ります。
  7. 更新されたフォント ファイルを を使用して保存しFile->Generate Fonts、タイプ dropbox が に設定されていることを確認しますOpenType(CFF)。生成されたフォントは元のフォントと同じ内部フォント名を持つことに注意してください (ただし、簡単に変更できます)。そのため、古いバージョンがロードされないように元のフォントを上書きするか (バックアップを忘れずに)、 を使用してロードするときにフォント ファイルのパスを明示的に指定する必要がありますfontspec
  8. 完了です。

ligaOpenType 機能ファイルを使用して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 標準の場所に存在することを前提とし、比較のためにグリフ番号で直接含めています。結果は異なる場合があります。

編集:fontspecオプションに問題がある場合、エラーで停止しないことに注意してくださいFeatureFile。パスの入力ミス、ファイル内の構文エラー、または以外のエンジンを使用すると、LuaTeX機能ファイルが無視されます。

関連情報