しろもじメモランダム

文字についてあれこれと。

AFDKO入門《CIDキー方式のOpenTypeフォントの作り方》 後篇:makeotf

2011-12-22: Ken Lunde さんから features, CMap についての補足情報をいただきましたので(ありがとうございます)、それについて追記しました。

前篇では、mergeFonts を利用して2つの素材フォントから merged.raw というファイルを生成しました。

この後篇では makeotf というツールを使い、OpenType の各種テーブルを設定して merged.raw を完全な OpenType フォントに仕上げます。

makeotf

以下では makeotf の使い方を、例を交えて見ていきます。makeotf の使用方法の詳細については、FDK\Technical Documentation\MakeOTFUserGuide.pdf で解説されていますので*1、併せてご覧ください。

とりあえず使ってみる

makeotf では各種テーブルのパラメータを細かく設定することができますが、ここではまず試しに、ごく単純な例で実行してみましょう。

makeotf を実行する際に必ず準備しなければならないファイルは、入力するフォントと features ファイル(後述)の2つだけです。入力フォントには前篇で作成した merged.raw を、features ファイルには下の features_min を使用します*2

makeotf コマンドの基本的な書式は以下のようになっています。

makeotf -f [入力フォント] -ff [featuresファイル] -o [出力フォント]

そこで、コマンドプロンプトで次のように入力し、makeotf を実行します。

makeotf -f merged.raw -ff features_min -o AFDKOSample-Light_min.otf

すると、すぐに AFDKOSample-Light_min.otf というフォントファイルができあがります。ここでは必要最低限の設定しかしていないので、各種パラメータが適切だとはとても言えませんが、それでもCIDキー方式の OpenType フォントとして普通に利用することができます。

以下の項では、各種パラメータの設定方法についてもう少し詳しく見ていきます。

features

features ファイルでは BASE, GDEF, head, hhea, name, OS/2, vhea, vmtx テーブルの設定や、各種 OpenType feature の設定ができます。features ファイルの仕様は下のページで公開されています。

次に示すファイルが features ファイルの例ですが、これは小塚ゴシックのパラメータを参考にして作成したものです。このファイルでは、head, hhea, OS/2, vhea テーブルに関する設定をしています。

table head {
  FontRevision     1.000;
} head;

table hhea {
  CaretOffset          0;
  Ascender           880;
  Descender         -120;
  LineGap           1000;
} hhea;

table OS/2 {
  FSType               0;
  Panose               2   # Latin, Text
                      11   # Normal Sans
                       4   # Thin
                       9   # Monospaced
             0 0 0 0 0 0;  # Any
  UnicodeRange        49   # Hiragana
                      50;  # Katakana
  CodePageRange      932;  # JIS/Japan
  TypoAscender       880;
  TypoDescender     -120;
  TypoLineGap       1000;
  winAscent         1418;
  winDescent         374;
  XHeight              0;
  CapHeight            0;
  WeightClass        400;  # Light
  WidthClass           5;  # Medium (normal)
  Vendor          "srmj";
} OS/2;

table vhea {
  VertTypoAscender   500;
  VertTypoDescender -500;
  VertTypoLineGap   1000;
} vhea;

各項目の意味については、上記 features ファイル仕様書および、OpenType 仕様書の各テーブルの節を参照してください。なお、この例では簡単のため、OpenType feature の設定はしていません。

追記1

上の例では各種メトリクスをそれぞれ設定していますが、これらの値の中には省略すると自動的に設定されるものがあるとのことです。これによって似たようなパラメータを一つ一つ設定する手間が省け、またパラメータ間の一貫性を保つことができます。

  • 自動的に値が設定されるもの
    • hhea
      • CaretOffset
    • OS/2
      • winAscent
      • winDescent
    • vhea
      • VertTypoAscender
      • VertTypoDescender
  • 他の設定値をもとにして値が設定されるもの
    • hhea
      • Ascender (←OS/2.TypoAscender)
      • Descender (←OS/2.TypoDescender)
      • LineGap (←OS/2.TypoLineGap)
    • vhea
      • VertTypoLineGap (←OS/2.TypoLineGap)

ただし、「かづらき」のような特殊なフォントでは、vhea.VertTypoLineGap を省略せずにあえて OS/2.TypoLineGap と異なる値を設定しています。かづらきの features ファイルのうち、OS/2 テーブルと vhea テーブルに対応する部分は以下のようになっているそうです。

table OS/2 {
 TypoAscender 880;
 TypoDescender -120;
 TypoLineGap 375;
 XHeight 423;
 CapHeight 645;
 WeightClass 300;
 WidthClass 5;
 Panose 2 2 3 0 0 0 0 0 0 0;
 UnicodeRange 0 1 2 5 31 33 35 36 38 48 49 50 59 62 65 68;
 CodePageRange 1252 932;
 FSType 8;
} OS/2;

table vhea {
 VertTypoLineGap 250;
} vhea;

(追記1ここまで)

fontMenuNameDB

fontMenuNameDB ファイルを利用すると、各種フォント名を設定することができます。以下にその例を示します。

[AFDKOSample-Light]
  f=AFDKO Sample
  s=L
  l=AFDKO Sample L

  f=3,1,0x411,AFDKO \30b5\30f3\30d7\30eb
  s=3,1,0x411,L
  l=3,1,0x411,AFDKO \30b5\30f3\30d7\30eb L

  f=1,1,11,AFDKO \83\54\83\93\83\76\83\8b
  s=1,1,11,L
  l=1,1,11,AFDKO \83\54\83\93\83\76\83\8b L

まず、先頭に PostScript 名を [] で括って書いておきます。2行目以降では、以下の書式に従って各種フォント名を設定します。上の例では、英語名として「AFDKO Sample L」、日本語名として「AFDKO サンプル L」を指定しています。

左辺 意味 対応する nameID
f ファミリー名 16 (Preferred Family)
s サブファミリー名(=スタイル名) 17 (Preferred Subfamily)
l 互換性のためのフルネーム
(ファミリー名+サブファミリー名)
1 (Font Family name),
4 (Full font name)
右辺 意味 表記方法
<文字列> 英語名 ASCII
3,1,0x411,<文字列> Windows
日本語名
ASCII以外の文字は、
\ に続けて Unicode の値で4桁ずつ表記
1,1,11,<文字列> Mac
日本語名
ASCII以外の文字は、
\ に続けて MacJapanese の値で2桁ずつ表記

より詳しくは、前述の MakeOTFUserGuide.pdf、OpenType 仕様書name テーブルの節、および次の Adobe TechNote を参照して下さい。

なお、features ファイルを利用すると、name テーブルに含まれるより多くの項目を設定することができます。

改めて実行してみる

以上の features, fontMenuNameDB を使用して、改めて makeotf を実行してみましょう。先ほどは

makeotf -f [入力フォント] -ff [featuresファイル] -o [出力フォント]

のようにコマンドを入力しました。makeotf は -ff オプションをつけずに実行した場合、 “features” という名前の features ファイルが指定されたとみなします。fontMenuDB ファイルは -mf というオプションで指定しますが、これもオプションを省略すると、“fontMenuDB” という名前の fontMenuDB ファイルを指定したとみなされます。さらに、-o オプションを省略した場合、出力フォントのファイル名は “.otf” となります。

よって、merged.raw, features, fontMenuDB の3ファイルを1つのディレクトリに入れておけば、単に

makeotf -f merged.raw

というコマンドを実行するだけで features, fontMenuDB の内容が読み込まれ、AFDKOSample-Light.otf というフォントを生成することができます。

フォントをインストールすれば、下図のように正常に使用することができます。


さらに詳しく

以上で扱わなかった事項のうち、CMap と IVS について簡単に解説します。

CMap

cmap テーブルの生成に利用される CMap ファイルは、下の表のように -ch, -cv, -cm オプションでそれぞれ指定することができます。Adobe-Japan1 のフォントを生成する場合、デフォルトでは FDK\Tools\SharedData\Adobe Cmaps\Adobe-Japan1-6\ 内にある CMap ファイルが使用されるようになっています。

オプション エンコーディング デフォルトで使用されるファイル
-ch UTF-32(横組み用) UniJIS-UTF32-H
-cv UTF-32(縦組み用) UniJIS-UTF32-V
-cm Mac エンコーディング 83pv-RKSJ-H

ただし、AFDKOに含まれている FDK\Tools\SharedData\Adobe Cmaps\ 内の CMap ファイルはバージョンが若干古いので、新しいもので上書きした方がいいでしょう。Adobe が公式に配布している最新版の CMap は、以下のページから入手できます。

デフォルトグリフを JIS X 0213:2004 の例示字形に準拠させる場合(すなわち、StdN, ProN などのいわゆるNフォントを生成する場合)、UniJIS-UTF32-H の代わりに UniJIS2004-UTF32-H を、UniJIS-UTF32-V の代わりに UniJIS2004-UTF32-V を利用すれば良いでしょう。

なお、日本語用 CMap に関するより詳しい情報については、Mac OS Xの文字コード問題に関するメモの以下のエントリーなどが参考になります。

追記2
features ファイルでGSUBの vert フィーチャが設定されている場合、縦組み Unicode 用 CMap ファイルは指定する必要がない(すなわち -cv オプションは不要)とのことです。
(追記2ここまで)

IVS

最近IVS(ideographic variation sequence; 異体字シーケンス)に対応したフォントが徐々に増えてきていますが、makeotf ではデフォルトでIVS対応フォントを生成します。IVSのリストは、IVDで公開されている IVD_Sequences.txt と同じ書式のファイルを利用し、-ci オプションで指定します。デフォルトでは FDK\Tools\SharedData\Adobe Cmaps\Adobe-Japan1-6\Adobe-Japan1_sequences.txt が使用されます。

まとめ

この入門記事では、AFDKOの mergeFonts と makeotf を利用してCIDキー方式の OpenType フォントを生成する方法を解説しました。わたし自身の知識不足もあり、今回扱った内容は比較的簡単なものに限定しています。この記事で触れなかった事項もまだまだたくさんありますが、その詳細については本文中で取り上げたマニュアル類や web ページなどをご参照ください。また、こちらは若干特殊な例ですが、以下の「かづらき」のチュートリアルも参考になります。

この記事が、フォント開発の何らかの参考になれば幸いです。

あとどなたかこれを補完するような解説書いてくださいませんかね(チラッチラッ

*1:日本語版は無いようです。

*2:ちなみに、この features_min では実質何の設定もしていません。

*3:FDK\Technical Documentation\5149.OTFname_Tutorial.pdf に同名のファイルがありますが、こちらは旧版(2005-09-08版)です。