Hatena::ブログ(Diary)

itouhiroメモ

2011-07-09 Illustrator10で最新M+フォントを使うには

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


[合いの手担当] ふむ


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

f:id:itouhiro:20110709130052g:image

f:id:itouhiro:20110709130053g:image


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


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

  • メイリオ
  • JIS2004対応MS ゴシック/MS明朝
  • IPAフォント Ver.3

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


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


[しゃべり担当] 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の範囲に収まらない文字を削除するよ。

f:id:itouhiro:20110709130055g:image

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


(3) グリフ(文字)の番号を調べて、 U+1xxxx とか U+2xxxx のように5桁のグリフをすべて選択して[編集>クリア]

というのは具体的にはこんな感じ。

f:id:itouhiro:20110709130054g:image


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


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

f:id:itouhiro:20110709132440g:image


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

f:id:itouhiro:20110709130051g:image


確認環境
  • 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 」をフォント名につけている。


処理済のフォントを

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




cozcoz 2011/07/09 15:08 お手数をおかけしました、とても助かりました。

nu-ne-nu-ne- 2011/07/15 17:20 挑戦してみました。
が、
フォントの出力がうまくいきません。
「名前を変更しない」
のままで良いのでしょうか?
また、
名前を変更する場合は、
どのような設定で書き出せば良いのでしょう?
御指導のほど、
宜しくお願い申し上げまする。

itouhiroitouhiro 2011/07/16 10:13 1) 出力するTrueTypeフォントのファイル名を変更しておく、または出力するフォルダを変更。
2) 「保存」ボタンを押す
3) 「非標準のエムサイズ 通常、PostScriptとは‥それでもフォントをそのまま出力しますか?」のダイアログが出てきたら「はい」
4) 「Errors detected The font contains..save the font anyway?」のダイアログが出てきたら「保存」
の手順でどうでしょう

トラックバック - http://d.hatena.ne.jp/itouhiro/20110709