[備忘]FontForgeで合字(リガチャ:Ligature)の作り方
はじめに
フォント作成フリーソフトの「FontForge」内の「合字」の作成方法をネットで調べたので備忘メモします。
最も役に立った情報源は以下です。欧米の少年がYouTubeで英語でしゃべってます。
英語は全然わかりませんが、画面操作を撮影しているのでわかりやすかったです。
下はTwitterでの記載です。短くまとまっていてわかりやすかったです。
ネットで調べたといっても、YouTubeとTwitterが一番の情報源でした。
時代を感じます。
Qiitaも役立つ情報があったのですが、直感的でなく、あんまり私の頭に入ってきませんでした。
私が答えだけを求めたからかな。
「合字」の定義
「合字」は「2字以上で表記する文字を、1字で表記する文字」です。 英語はリガチャ:Ligatureです。「ガチャ」と聞くと100円入れて玩具が入ってるプラスチックカプセルを出す「ガチャガチャ」が浮かびますが、違う意味です。
- 例(1)「А」と「Е」の合字「Ӕ」
- 例(2)「a」と「e」の合字「ӕ」
- 例(3)「よ」と「り」の合字「ゟ(より)」
- 例(4)「麻」と「呂」の合字「麿」← 和製漢字
「合字」と似ている「結合文字」と?
- 濁点「゛」や半濁点「゜」は「合字」ではなく「結合文字」です。
- 通常、結合文字は単独では使いません。他と一緒になって使います。
- 「か」+「゛」=「が」
- 「か」は「基底文字」となります。「が」は「合字」ではなく「結合文字列」となります。
- 英語はCombining character
「結合文字」は「合字」に字は似ているが、意味は異なります。まとめると以下
- 「基底文字」+「基底文字」=「合字」
- 「基底文字」+「結合文字」=「結合文字列」
Unicode上の「合字」や「結合文字」の扱い
- 「A」「E」「a」「e」「よ」「り」「麻」「呂」「か」は1文字毎にUnicode上で1文字の文字コードが割り振られている。
- 「Ӕ」「ӕ」「ゟ」「麿」「゛」も1文字毎にUnicode上で1文字の文字コードが割り振られている。
- したがって、パソコン上では「A」も「E」も「Ӕ」も1文字として扱う。
「合字」への理解をややこしくしている要因(愚痴)
- 「合字」と「結合文字」の意味がとらえにくい。
- 「結合文字」と「結合文字列」の違いが分かりにくい。
- 「゛」を「結合文字」、「が」を「結合文字列」、「麿」を「合字」と言われても、直感的に理解しにくい。
- 「゛」は「結合文字」というより「付随文字」と言ったほうが良いと思う。
- 「Ӕ」「ӕ」「ゟ」は、「合字」というより、見た目から「結合文字」と言ったほうがすっきりすると思う。
- 「Ӕ」「ӕ」「ゟ」は「合成済み文字」と呼ぶ場合がある。
「合字」への理解を更にややこしくしている要因(愚痴2)
- Shift-JISとかの昔の文字コードでは「Ӕ」「ӕ」が扱えなかった。
- 一方で「Ӕ」「ӕ」「ゟ」は、Unicode上では他の文字と同様に一文字で扱う為、「合字」というより「元合字」
- フォント用語の「結合文字」とプログラミング用語の「結合文字」が、意味は異なる。
- UTF-16のサロゲートペアが話を更にややこしくさせている。
- JavaやJavaScript、C#はUTF-16を扱っている。
フォントに関する用語
FontForgeの表記は英語由来のカタカナ語が多いです。
カタカナ語のままだと意味がとらえ難いので、別に私は中国人ではないですが、中国漢字を含めた和英中で用語の対比表を作成しました。
日本語 | 英語 | 中国漢字(簡体) | 台湾漢字(繁体) |
---|---|---|---|
フォント | Font | 字体 | 字體 |
書体 | Typeface | 字体 | 字體 |
書式 | Format | 格式 | 格式 |
合字 | Ligature | 结扎 | 結紮 |
結合文字 | Combining character | 组合字符 | 組合字符 |
結合文字列 | Concatenation string | 串联字符串 | 串聯字符串 |
グリフ | Glyph | 字形 | 字形 |
文字コード | Character code | 字符代码 | 字符代碼 |
ユニコード | Unicode | 统一码 | 統一碼 |
エンコード | encode | 编码 | 編碼 |
デコード | decode | 解码 | 解碼 |
サロゲートペア | Surrogate pair | 代理对 | 代理對 |
ルックアップ | Lookups | 查找 | 查找 |
カーン | kern | 字距 | 字距 |
字詰め | Kerning | 字距调整 | 字距調整 |
フォント・メトリック | font metrics | 字体度量 | 字體度量 |
B-スプライン曲線 | B-spline curve | B样条曲线 | B樣條曲線 |
ベジェ曲線 | Bezier curve | 贝塞尔曲线 | 貝塞爾曲線 |
フォントの内部構造
フォントのフォーマット(OpenType)の内部構造は複雑です。
わかっている範囲では以下です。
特に、FontForgeの設定では、ASCIIの4文字のテーブル名で使われており理解が必要です。
- フォントの内部データは、「テーブル」と呼ばれるグループ毎に分かれている。
- 各「テーブル」の名称は、ASCII文字の4文字で固定される。例「GSUB」
- ASCII文字とは、半角英数字、空白、記号の128文字
- この「テーブル」を頭(ヘッダ)として区別されている。
代表的なテーブル名と格納データ
テーブル名 4文字 |
語源 | 格納 | 説明 |
---|---|---|---|
GSUB | Glyph | 単一または複数のグリフを、 別のグリフに置き換える為のデータ |
|
GPOS | Glyph Position |
グリフの位置を調整するデータ | |
OS/2 | Windowsプラットフォームの 重要な設定値 |
||
cmap | Unicode等の文字コードと 字形データのインデックス値を 一致(マッピング)させるデータ |
||
glyf | Glyph | 字形データ | |
EBDT | Embedded Bitmap |
埋込ビットマップ データ |
マイクロソフトの書式 |
EBLC | Embedded Bitmap Location |
埋込ビットマップ 位置データ |
マイクロソフトの書式 |
EBSC | Embedded Bitmap Scaling |
埋込ビットマップ スケーリング・データ |
マイクロソフトの書式 |
COLR | Color | COLRは、CPALの色情報が どのグリフで どのように使用されるかを定義する |
|
CPAL | Color Palette |
色情報が羅列 | Segoe UI Emojiなどで 使われている色仕様 |
hhea | horizontal head |
水平レイアウト (横書き) の ヘッダ情報 |
|
hmtx | horizontal matrix |
水平レイアウト (横書き) の 各グリフの 「advance width」と「left side bearing」 |
|
vhea | vertical head |
垂直レイアウト (縦書き) の ヘッダ情報 |
|
vmtx | vertical matrix |
垂直レイアウト (縦書き) の 各グリフの 「advance width」と「left side bearing」 |
FontForgeの主なメニューの和英対応
FontForgeのメニュー
├ファイル [File]
├編集 [Edit]
├エレメント [Element]
│ ├フォント情報 [Font Info]
│ │ ├PS Names [PS Names]
│ │ ├一般情報 [General]
│ │ ├レイヤー [Layers]
│ │ ├PS UniqueID [PS UID]
│ │ ├PS Pravete辞書 [PA Pravete]
│ │ ├OS/2 [OS/s]
│ │ ├TTF名 [TTF Names]
│ │ ├StyleSet Names [StyleSet Names]
│ │ ├Grid Fitting [Grid Fitting]
│ │ ├TεX [TεX]
│ │ ├サイズ [Size]
│ │ ├コメント [Comment]
│ │ ├FONTLOG [FONTLOG]
│ │ ├マーククラス [Mark Classed]
│ │ ├Mark Sets [Mark Sets]
│ │ ├Lookups [Lookups]
│ │ ├WOFF [WoFF]
│ │ ├MAC [Mac]
│ │ ├MACの機能 [Mac Features]
│ │ ├日付 [Dates]
│ │ └Unicode範囲 [Unicode Ranges]
│ │
│ ├グリフ情報 [Glyph Info]
│ │ ├Unicode [Unicode]
│ │ ├コメント [Comments]
│ │ ├位置指定 [Positionings]
│ │ ├ペア単位の位置指定 [Parewise Pos]
│ │ ├置換 [Subsitutions]
│ │ ├選択型の置換 [Alt Subs]
│ │ ├合字 [Ligatures]
│ │ ├Lig.Carets [Lig.Carests]
│ │ ├構成要素 [Componets]
│ │ ├カウンタ [Counters]
│ │ ├TεX & Math [TεX & Math]
│ │ ├Vert. Variants [Vert. Variants]
│ │ └Horiz. Variants [Horiz. Variants]
│ │
│ │
│ ├その他の情報 [Other Info]
│ ├Validation [Validation]
│ ├Bitmap Strikes Avalibale [Bitmap Strikes Avalibale]
│ ├ビットマップの再生成 [Regenerate Bitmap Glyphs]
│ ├ビットマップの除去 [Remove Bitmap Glyphs]
│ ├スタイル [Style]
│ ├変形 [Transformations]
│ ├輪郭を太らせる [Expand stroke]
│ ├重複処理 [Overlap]
│ ├単純化 [Simplify]
│ ├極大点を追加 [Add Extrema]
│ ├座標を丸める [Round]
│ ├自動トレース [Autotrace]
│ ├アウトラインの向きを修正 [Correct Direction]
│ ├組み立て [Build]
│ │ ├アクセントつきグリフを構築 [Build Accented Glyph]
│ │ ├複合グリフを構築 [Build Composite Glyph]
│ │ └複製グリフを作成 [Build Duplicate Glyph]
│ │
│ ├フォントの統合 [Merge Fonts]
│ ├フォントの補間 [Interpolate Fonts]
│ ├フォントを比較 [Compare Fonts]
│ └レイヤーを比較 [Compare Layers]
│
├ツール [Tools]
├ヒント [Hints]
├エンコーディング [Encoding]
│ ├エンコーディングの変換 [Reencode]
│ ├定義済みのグリフのみ表示 [Compact]
│ ├エンコーディングを強制 [Force Encoding]
│ ├エンコーディングスロットを追加[Add Endoding Slots]
│ ├未使用のスロットを削除 [Remove Unused Slots]
│ ├グリフの切り離し [Detach Glyphs]
│ ├グリフの切り離し・削除 [Detach & Remove Glyphs]
│ ├エンコーディングの名前を追加 [Add Endoding Name]
│ ├エンコーディングを読み込み [Load Encoding]
│ ├フォントから作成 [Make From Font]
│ ├エンコーディングを削除 [Remove Encoding]
│ ├グループ毎の表示 [Displya By Groups]
│ ├グループを定義 [Difine Groups]
│ ├フォントの名前リストを保存 [Save Namelist of Font]
│ ├名前リストを読み込み [Load Namelist]
│ ├グリフ名を変更 [Rename Glyphs]
│ └名前を指定してグリフを作成 [Create Named Glyphs]
│
├表示[View]
├メトリック[Metrics]
│ ├メトリックスウィンドウを開く [New Metrics Window]
│ ├幅の中央に [Center in Width]
│ ├両端の空きを1:2に [Thirds in Width]
│ ├幅を設定 [Set Width]
│ ├左サイドのペアリングを設定 [Set LBeaing]
│ ├右サイドのペアリングを設定 [Set RBearing]
│ ├両サイドのペアリングを設定 [Set Both Bearings]
│ ├縦書き時の送り幅を設定 [Set Vertical Advance]
│ ├幅の自動設定 [Auto Width]
│ ├クラス毎のカーニング [Kern By Classes]
│ ├カーニングをすべて削除 [Remove All Kern Pairs]
│ ├カーニングペアの詳細 [Kern Pair Closeup]
│ ├クラス毎の縦書きカーニング [VKern By Classes]
│ ├横書きカーニングを縦書きに [VKern From HKern]
│ └縦書きカーニングをすべて削除 [Romove All VKern Pairs]
│
├CID [CID]
├MM [MM]
├ウィンドウ [Window]
└ヘルプ [Help]
FontForgeで合字作成の基本操作メモ
全操作の説明は、すみませんが挫折しました。
以下にポイントをピックアップします。詳細はYouTubeの少年の操作を見てください。
①Liga(合字)のLookups(索引集)の定義を決定する
「エレメント」→「フォント情報」→「Lookups」→「Add Subtable」→機能に「liga」を設定→「用字系と言語」に合字にしたい言語を選択
②合字用のスロット(文字を入れる箱)を追加する
↓ (1)メニューの「エンコーディング」の上から4つ目の「エンコーディングスロットを追加」
↓ (2)追加したいスロットの数を入力して(図中では1)、「OK」ボタンを押す。
↓ (3)最下段に追加される。
③合字のグリフ名の名づけ方法について
アンダーバー「_」(英語はアンダースコアと言う)で繋げます。以下ポイントです。複数の場合は、アンダーバーで繋げて𝒊
- 半角アルファベットは「文字_文字」と繋げます。例えば「f_i」
- 半角数字は例えば「one_two」と繋げます。
- 日本語等々は、「グリフ名_グリフ名」となります。
↓ (1)新しく追加したスロットのグリフ情報を選ぶ。
↓ (2)Glyph Name「グリフ名」を選択
↓ (3)Glyph Name「グリフ名」を変更。重要!★アンダーバー「_」で合字にしたいグリフ名を繋ぐ★
④合字の設定について
↓ (1)「Subtable」に①の「Lookups」の「GSUB」で定義したsubtableを選択入力する。
↓ (2)重要!★ 文字と文字(もしくはグリフ名とグリフ名)の間は半角スペース「 」で区切る(複数可)★
参考リンク
Author And Source
この問題について([備忘]FontForgeで合字(リガチャ:Ligature)の作り方), 我々は、より多くの情報をここで見つけました https://qiita.com/good_kobe/items/2e6038eb67e53a1419f5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .