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+フォントを改変する
- M+フォント(TrueTypeフォントファイル)をFontForgeで読み込む。
- [エンコーディング>エンコーディング変換>ISO-10641-1(Unicode, BMP)]
- グリフ(文字)の番号を調べて、U+1xxxx とか U+2xxxx のように5桁のグリフをすべて選択して[編集>クリア]
- [ファイル>フォントを出力>TrueType]
この手順でOKだ。
詳しく見ると‥
(2) [エンコーディング>エンコーディング変換>ISO-10641-1(Unicode, BMP)]
のところで、BMPの範囲に収まらない文字を削除するよ。
でもこの手順では なぜか一部のグリフが削除できていない。そこで(3)を実行する必要がある。
(3) グリフ(文字)の番号を調べて、 U+1xxxx とか U+2xxxx のように5桁のグリフをすべて選択して[編集>クリア]
というのは具体的にはこんな感じ。
ウインドウの最下部に、BMPの範囲外のグリフがいくつか残っているので、各グリフを選択して調べよう。
このように U+???? となっている場合は、残しておいていいよ。U+1xxxx とかの5桁グリフだけ削除すればいい。
改変したフォントでは次のように、文字を表示できるようになるぞ。
確認環境
- Windows XP
- Illustrator 10
- FontForge 20110602 (fontforge-cygwin_2011_06_06.zip)
- M+ TESTFLIGHT 040
スクリプトでまとめて
でもさ、これ複数のフォントに何度も同じ手順を繰り返すのってタイヘンだよ。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