読者です 読者をやめる 読者になる 読者になる

しろもじメモランダム

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

AFDKO入門《CIDキー方式のOpenTypeフォントの作り方》 前篇:AFDKOのインストールとmergeFonts

花園明朝OTプロジェクトでは、フォントの生成に使っている各種スクリプト・設定ファイル類を公開してはいるものの、AFDKOAdobe Font Development Kit for OpenType)をどのように利用しているかといった詳しい生成方法については、(面倒だったので)あまり文書化していませんでした。

先日、花園明朝OTのページを見た方から「AFDKOの使い方の例を教えてほしい」とのメールをいただいたので、これを機に簡単な入門記事を書いてみたいと思います。テーマは、《CIDキー方式の OpenType フォントの作り方》。ごく単純なCIDキー方式 OpenType フォントの作成方法を、サンプルファイルとともに順を追って解説していきます。

ただし、わたし自身AFDKOやフォントフォーマットについて熟知しているわけではないので、以下の内容には怪しい記述があるかもしれません。誤りなど発見された場合には、ご指摘いただけると助かります。

この入門記事で扱う内容

この記事では、AFDKOに含まれる mergeFonts, makeotf を利用して、通常の名前キー方式の OpenType フォント(name-keyed OpenType font)からCIDキー方式の OpenType フォント(CID-keyed OpenType font)を生成する方法を簡単に解説します。あくまでも入門なので、ヒントや feature などについては扱いません*1

なお、この記事ではコマンドプロンプトの基本的な操作*2を身に着けていることを前提としています。Windows 環境を想定して手順の解説をしていますが、Mac の場合でも(コマンドプロンプトがターミナルに変わるぐらいで)手順は同一です。

AFDKOのインストール

このページに書かれている利用許諾契約をよく読み、内容に同意してページ下部のリンクからAFDKOの zip ファイルをダウンロードします。2011年12月6日現在、Windows 版・Mac 版ともに最新バージョンは2.5です。

ダウンロードしたら zip を展開し、中のFDKフォルダを好きな場所に移動します。このとき、パスにスペースやマルチバイト文字が入っているとうまく動作しません。C:\FDK などにしておけば無難です。

最後に、Windowsコマンドプロンプトを開き、FDK\FinishInstallWindows.cmd を実行すればインストール完了です。

なお、以上の内容は FDK\Read_Me_First.html に書かれています。また、AFDKOの各種ツールに関するドキュメントは FDK\Technical Documentation\ 内にありますので、詳細についてはそちらをお読みください*3

大まかな手順

今回は例として、ウェイトが Light のフォントからひらがなのグリフを、Medium のフォントからカタカナのグリフを抽出し、「ひらがなが Light でカタカナが Medium な、CIDキー方式の OpenType 仮名フォント」を作成します。

手順としては、まず mergeFonts を用いて一つのCIDフォントにまとめます。次に makeotf で各種テーブルを設定し、完全なCIDキー方式 OpenType フォントに仕上げて完成です。

mergeFonts

mergeFonts のチュートリアルは FDK\Technical Documentation\5900.RFMFAH_Tutorial.pdf にありますが、これは英語で書かれています。日・英・中の3言語で書かれたバージョンが以下で配布されていますので、一度これに目を通しておくといいでしょう。

この記事では簡単なCIDフォントの生成に焦点を絞っていますので、それ以外の内容についてはチュートリアルをお読みください。

素材フォントの用意

素材となるグリフ抽出元のフォント*4は、ここではCFFベース(PostScript ベース)の OpenType 形式で用意しておきます。以下にファイルが置いてありますので、ダウンロードして利用してください*5

この記事の例では2つの素材フォントからグリフを抽出しますが、素材フォントの数はいくつあっても(1つだけでも)構いません。

マッピングファイルの用意

mergeFonts でCIDフォントを生成するためには、「素材フォントの何という名前のグリフを、どのCIDに割り当てるか」という情報が必要です。これを指定するのがマッピングファイルです。mplus-1p-light.otf からひらがなを抽出するために hiragana.map を、mplus-1p-medium.otf からカタカナを抽出するために katakana.map を、それぞれ用意します。

マッピングファイルがどのような書式になっているのか、hiragana.map を例に見てみましょう。

mergeFonts Kana
000000 .notdef
000842 uni3041
000843 uni3042
000844 uni3043
000845 uni3044
000846 uni3045
000847 uni3046
(以下略)

000843 uni3042 の列を見てみます。ここでは、000843 がCIDの番号を、uni3042 が素材フォントでのグリフ名を表しています。つまり、uni3042 という名前のグリフ(mplus-1p-light.otf では「あ」のグリフにあたります)を CID+843 に割り当てる、という意味です。グリフ名とは下の画像で示した位置に表示されている文字列のことです(FontForge の場合)。

どのグリフをどのCIDに割り当てるかは、以下の Adobe TechNote を参考にして決めれば良いでしょう。

なお、最初の行は mergeFonts Kana となっています。mergeFonts の部分は固定で、必ずこのように書いておきます。Kana の部分ではヒント辞書名(サブフォント名)を指定します((この入門記事ではヒントについて扱いませんので、hiragana.map, katakana.map のいずれも適当に Kana と指定しておきます。))。

cidfontinfo の用意

最後に、cidfontinfo ファイルを用意します。このファイルでは、フォントの情報を指定します。

FontName       (AFDKOSample-Light)
FullName       (AFDKO Sample Light)
FamilyName     (AFDKO Sample)
Weight         (Light)
version        (1.000)
Registry       (Adobe)
Ordering       (Japan1)
Supplement     0
AdobeCopyright (Copyright 2002-2011 M+ FONTS PROJECT)

FontName はいわゆる PostScript 名を指定します。FullNameFamilyNameWeight をくっつけたもので良いでしょう。versionVersion ではありません)はバージョンです。次の3項目 Registry, Ordering, Supplement でROSを指定します。例えばこの記事で作成するフォントは Adobe-Japan1-0 の範囲に収まるので、それぞれ Adobe, Japan1, 0 を指定します。最後の AdobeCopyright には、著作権情報を書いておきます。

以上の9項目が必須とされています。cidfontinfo のより詳しい内容に関しては、mergeFonts -h で表示される mergeFonts のヘルプや、以下のページを参照してください。

mergeFonts の実行

素材フォント・マッピングファイル・cidfontinfo の用意ができたら、いよいよ mergeFonts の出番です。CIDフォントを生成する場合、基本的なコマンドの書式は次のようになります。

mergeFonts -cid [cidfontinfo] [出力フォント] ([マッピングファイル] [素材フォント])+

マッピングファイルと素材フォントの組はいくつでも指定できます。

それでは試してみましょう。まず、わかりやすいように素材フォント(mplus-1p-light.otf, mplus-1p-medium.otf)・マッピングファイル(hiragana.map, katakana.map)・cidfontinfo を一つのディレクトリにまとめておき、コマンドプロンプトでそのディレクトリに移動します。続けて以下のコマンドを実行すると、2つの素材フォントからグリフが抽出されてCIDフォントが生成されます。

mergeFonts -cid cidfontinfo merged.raw hiragana.map mplus-1p-light.otf katakana.map mplus-1p-medium.otf

hiragana.map を参照して mplus-1p-light.otf からひらがなグリフを、katakana.map を参照して mplus-1p-medium.otf からカタカナグリフを抽出し、cidfontinfo に書かれたフォント情報を付加して merged.raw というCIDフォントを生成せよ、という意味になります。

なお、以下のようにしてCIDキー形式のフォントをソースフォントにすることができます。この場合、素材フォントから抽出したグリフがソースフォントに追加され*6、CIDフォントが生成されます。

mergeFonts -cid [cidfontinfo] [出力フォント] [ソースフォント] ([マッピングファイル] [素材フォント])*

mergeFonts でCIDフォントを生成する際の注意点として、CID+0 については必ずグリフを割り当てなければなりません。この例では hiragana.map の2行目に 00000 .notdef とあるとおり、mplus-1p-light.otf の .notdef という名前のグリフを割り当てています。この割り当てを忘れた場合、以下のようなエラーが発生してCIDフォントの生成が失敗します。

mergeFonts.exe: (cfw) missing CID 0 glyph
mergeFonts.exe: fatal error

makeotf へ……

以上の手順で、2つの素材フォントから merged.raw というファイルができあがりました。

しかし残念なことに、mergeFonts で出力されたこのファイルは OpenType フォントとしては動いてくれません。ここからさらにもうひと手間、makeotf というツールで OpenType の各種テーブルを設定し、完全な OpenType フォントファイルに仕上げる必要があるのです。

というわけで、続きは後篇で

*1:というかヒントについてはわたしがよく勉強してないだけですが…

*2:コマンドの実行や cd コマンドによるカレントディレクトリの変更など。

*3:英語ですが…

*4:この記事では「素材フォント」と呼んでおきます。チュートリアルにおける「併合フォント」にあたります。

*5:これらのファイルは、フリーなフォント M+ FONTS をCFFベース(PostScript ベース)の OpenType に変換した(だけの)ものです。

*6:そのCIDのグリフがソースフォントに既に存在している場合、素材フォントから抽出したグリフに置換されます。