Illustrator10で最新M+フォントを使うには

[しゃべり担当] Adobe Illustrator はバージョンCS5(15) が2011年現在の最新だ。バージョン10というのは 2001年12月に発売されたのでほぼ10年前のソフトだな。


[合いの手担当] ふむ


[しゃべり担当] バージョン10では、フォントによっては文字を表示できないという報告があり、調べてみた。確かに最新の M+(エムプラス)フォント TESTFLIGHT 040 は表示できない。


[合いの手担当] フォントに「mplus-1p」を選んだとき、文字が空白みたいになって、表示されてないね


[しゃべり担当] M+フォントだけじゃなくて、

など最近のフォントは ほぼ表示できない。


[合いの手担当] その理由は?


[しゃべり担当] Adobeによると
Illustrator 10 は JIS2004 基準のフォントに対応していません」
http://kb2.adobe.com/jp/cps/233/233529.html
という回答だ。


私のほうでさらに詳しく調べてみると
Illustrator 10 で文字を表示できないフォントの条件は以下のようだ。
・Basic Multilingual Plane(BMP)の範囲を超えた文字を持つ


[合いの手担当] Basic Multilingual Planeって何


[しゃべり担当] 日本語では「基本多言語面」と呼ぶ。Unicodeで U+0000〜U+FFFF の範囲のこと。


これはUnicode1.1までの「1文字16ビットつまり6万5千文字で世界中の文字を表示できる」と言っていた頃の文字範囲だ。Unicode2.0以降は「6万5千文字では足りませんでした‥」と前言を撤回して111万文字使えるようにした。追加された範囲は U+10000〜U+10FFFF だが、この範囲に文字を1つでも持っていると Illusterator10 では文字が表示できなくなる。JIS2004対応フォントは その範囲に文字が入っているので使えないんだ。


[合いの手担当] よくわからないけど、Illustrator10で そのフォント使うのはムリってこと?


[しゃべり担当] メイリオとはムリだね。
でも M+フォントは改変可能なライセンスなので、Illustrator10でも使えるように改変すればいいんだよ。

M+フォントを改変する

  1. M+フォント(TrueTypeフォントファイル)をFontForgeで読み込む。
  2. [エンコーディングエンコーディング変換>ISO-10641-1(Unicode, BMP)]
  3. グリフ(文字)の番号を調べて、U+1xxxx とか U+2xxxx のように5桁のグリフをすべて選択して[編集>クリア]
  4. [ファイル>フォントを出力>TrueType]


この手順でOKだ。
詳しく見ると‥


(2) [エンコーディングエンコーディング変換>ISO-10641-1(Unicode, BMP)]
のところで、BMPの範囲に収まらない文字を削除するよ。

でもこの手順では なぜか一部のグリフが削除できていない。そこで(3)を実行する必要がある。


(3) グリフ(文字)の番号を調べて、 U+1xxxx とか U+2xxxx のように5桁のグリフをすべて選択して[編集>クリア]
というのは具体的にはこんな感じ。


ウインドウの最下部に、BMPの範囲外のグリフがいくつか残っているので、各グリフを選択して調べよう。


このように U+???? となっている場合は、残しておいていいよ。U+1xxxx とかの5桁グリフだけ削除すればいい。


改変したフォントでは次のように、文字を表示できるようになるぞ。

確認環境

スクリプトでまとめて


[合いの手担当] でもさ、これ複数のフォントに何度も同じ手順を繰り返すのってタイヘンだよ。M+ TESTFLIGHT 040 には 43個のTrueTypeファイルがあるというのに


[しゃべり担当] そんなときはスクリプトで処理すればラクできるぞ。

以下のスクリプトLinuxで実行すれば手動で手順繰り返さなくてもよくなる。(Ubuntu 11.04 + FontForge 0.0.20100501-5ubuntu2で確認)


del_nonbmp.pe

#!/usr/bin/env fontforge -script

if ($argc <= 1)
  Print("usage: fontforge -script del_nonbmp.pe FOOBAR.ttf")
  Quit(0)
endif

# open font
Open($1)

# pick up nonBMP glyphs
d = Array(10000)
d_idx = 0
SelectWorthOutputting()
foreach
  u = GlyphInfo('Unicode')
  if (u >= 65536)
    d[d_idx] = u
    d_idx += 1
  endif
endloop

# delete nonBMP glyphs
i = 0
while (i < d_idx)
  Select(d[i])
  Clear()
  Print('deleted ', UCodePoint(d[i]), ' ', d[i])
i+=1; endloop

# rename
nfn = 'limited-'+$fontname
SetFontNames(nfn, 'Limited '+$familyname, 'Limited '+$fullname)

## save font
Generate(nfn + ".ttf", "", 0x84)
Print("Generate:" + nfn + ".ttf")


スクリプトの実行は、こうする。こうやったあと放置しておけば勝手に全部のTrueTypeファイル処理してくれるぞ。

$ for F in mplus-TESTFLIGHT-040/*ttf; do fontforge del_nonbmp.pe $F; done


[合いの手担当] おー。意外と時間かかるけど 15分くらいかかった?
フォント名も変えているんだね。


[しゃべり担当] 「文字数を制限しました」という意味で「Limited 」をフォント名につけている。



追記: 2014-01-18

以下でダウンロードできるフォントより、新しいバージョンの Limited M+フォントが公開されています。

http://jikasei.me/font/limited/
で取得できる新しいバージョンをオススメします。


処理済のフォントを
http://sourceforge.jp/projects/mix-mplus-ipa/downloads/55014/limited-mplus-TESTFLIGHT-040.7z/

に置いたよ。

7zで圧縮しているので、展開できない場合は http://sevenzip.sourceforge.jp/ などで解凍ソフトを手に入れよう。

Linux (Ubuntu 11.04)では以下のように圧縮した。

$ sudo apt-get install p7zip-full
$ 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on limited-mplus-TESTFLIGHT-040.7z limited-mplus-TESTFLIGHT-040/


処理済フォントのライセンスは、本家M+フォントとまったく同じだよ。



関連記事:
M+ FONTS フォーラム 「フォントが表示されない」
http://sourceforge.jp/forum/forum.php?forum_id=3403&thread_id=24116