制作メモ

本家に作り方が公開されているので楽ちんかな? と思いきや、いろいろな壁が立ちふさがっていました。そのときの対処法をメモ形式でいろいろ書いて行こうと思います。

解決済みの情報や、時間経過で状況が変わった情報は古いメモのページに移動しました。

アクションからスマートラウンドフィルタを実行したとき、ダイアログを表示しない

本 家の作り方では、アクションからスマートラウンドフィルタを実行した際に、詳細設定ダイアログが表示されて入力待ちになってしまうため、対処法として AutoHotKey というソフトを使ってフィルタのダイアログのボタンを自動で押すことで自動処理を継続させていました。

しかし、実際 はダイアログが表示されるのはバグではありませんでした。実は、アクションの左にあるウインドウマークをクリックしてチェックを外せば、ダイアログを表示 させることなくスマートラウンドのフィルタを実行させることができます。これにより、AutoHotKey を使わなくても自動処理が完結するうえに、自動作業中に Illustrator のウインドウを非アクティブにして後ろに回しても正常に作業が継続さるので、PC を占有せずに裏で自動処理を回すことができるようになりますし、特定のソフトに依存しなくなることで、Mac 版でも自動処理ができるようになります。

これは Photoshop を含む全フィルタで共通使用できる基本機能のようなのですが、知りませんでした!

Illustrator のアクション

古い Illustrator では自動作業できませんでした

ダイアログとアクションを問題を回避するために、別の環境に入った Illistrator CS2 での自動処理を試みましたが、M+ FONTS の比較的新しい文字の .ai ファイルは CS5 形式など新しいバージョンで保存されているようで、読み込みの互換性に問題がありうまくいきませんでした。具体的には、枠線などのグループが全て解除され た状態で読み込まれてしまい、枠線を自動選択するスクリプトの時点でつまづいてしまいます。

1mn の半角「G」が黒い四角になる現象について

latin_mononew/0040.ai の右上の「G」の部分に、グループ化されていない余分な枠線が重なっています。これにより、「G」の部分だけ枠線が取り切れず、パスファインダーで処理す るときに黒い四角に化けてしまっていました。これは、あらかじめこの余分な枠線を除去して保存しておくことで回避することができます。

Web フォントとして使用できない問題

初期のバージョンで、Mozilla Firefox や Google Chrome で Web フォントとして使用できない問題がありました。woff や eot に変換してもだめ (Web フォントとして認識してくれない) です。

これはさっぱり原因が分かりませんでしたが、Mozilla Firefox のデベロッパー ツールを開いてみると、以下のようなエラーが表示されていました。

Mozilla Firefox での Web フォントのエラー

 "downloadable font: table 'cmap': failed to parse table" ('cmap' というテーブルのパースに失敗した) とあります。しかし、これだけではなぜそうなったのか分かりません。

そこで、TrueType フォントの解析ができるツールがないかググってみると、TrueType Font Analyzer (T2F Analyzer) という非常にバッチリなフリーソフトが見つかりました。これは TrueType フォントの中の生データをひととおり見ることができるツールで、cmap テーブルも見やすい形で解析することができます。

Web フォントとして使えないフォントデータの cmap テーブルは、以下のようになっていました。

不具合のある cmap テーブル

一方で、Web フォントとして認識されるフォントデータの cmap テーブルは、以下のようになっていました。

Web フォントとして認識される cmap テーブル

赤枠で囲まれた部分の「EncodingID」が 0x000A になっています。しかし、表示を見る限りでは 0x0004 (Unicode 2.0 full repertoire) のほうが正しいように見受けられます。

以前の Rounded M+ では、名前が「M+」のままになっているフォントを生成後、本家サイトに掲載されている FontForge スクリプトで「Rounded M+」 になるように書き換える方法で作っていました。EncodingID は、この段階で書き換わっていることがデータを見て判明しました。どうも、現在のバージョンの FontForge ではフォントを開いて保存するだけでここが書き換わってしまうようですが、原因が分かりません。

そこで、あとでフォント名を書き換える方法を一旦あきらめ、フォントの生成段階で Rounded M+ の名前になるようスクリプト (build-ttf.py) を書き換えることで問題が解決しました。

当初はバイナリエディタで差分をとった結果、適当に以下のような Python スクリプトを書いて強引に書き換えていましたが、ファイルにチェックサムが含まれていることが分かり、特定の環境で問題が出てもおかしくないので一旦やめ ました。チェックサムの計算式が分かればこれも有効な手段になると思います。ちなみに、このスクリプトを実行すると、同じディレクトリにある *.ttf ファイルの cmap テーブルの中身を確認したうえで、全て書き換えます。ちゃんとバックアップファイルは残しますが、注意してください。

(追記) チェックサムは TTModify というフリーソフトの "Recalc Checksum" 機能を使えば再計算ができるようです。すでに生成済みのフォントを修正するには、以下のスクリプトで書き換えたうえで、チェックサムの再計算を行えば良さそうです。

import sys
import shutil
import struct
import os

def process_file(file_name):
    infile = open(file_name, 'r')
    pos = 0

    print file_name

    for r in iter(lambda: infile.read(4), ""):
        if r == 'cmap' :
            infile.read(4)
            pos = struct.unpack('>I', infile.read(4))[0]
            break

    if pos == 0 : exit

    print "pos = %x" % pos
    infile.seek(pos + 12)
    dat = struct.unpack('>I', infile.read(4))
    print "dat = %x" % dat[0]
    if dat[0] == 0xa :
        infile.close()
        shutil.copyfile(file_name, file_name + '.old')
        infile = open(file_name, 'r+')
        infile.seek(pos + 12)
        infile.write(struct.pack('>I', 0x4))
        print "done."

for root, dirs, files in os.walk(u'.'):
    for file_ in files:
        if os.path.splitext(file_)[1] == u'.ttf':
            process_file(file_);

縦組み (縦書き) ができない問題

初期のバージョンで、縦組みをしたときにガタガタに乱れてしまう問題がありました。

縦組み失敗例

これは、おもに FontForge のバグが原因でした。しかし、ちょうど縦組みバグの修正パッチを作られた方がいらっしゃり、さらにそれを取り入れた unofficial fontforge-cygwin が公開され、さらに M+ FONTS のほうでもフォントの生成スクリプトが修正されたことが重なったことで、次バージョンにてきれいに解決しました。ありがとうございます。

ちなみに、自分で FontForge の最新開発版のビルドをしてみようとしたのですが、どうしても Python が有効なビルドの Makefile 生成が失敗し、うまくいかないので断念しました (完璧な手順をご存じの方は作者まで教えていただけると嬉しいです)。

また、これを書いている時点での最新版の M+ FONTS TESTFLIGHT 057 では、Word と Illustrator で縦組みが完璧になったものの、ほかの多くのアプリケーション (Microsoft Publisher, LibreOffice Writer, LibreOffice Draw, 一太郎, 花子, ComicStudio, CLIP STUDIO PAINT など) で句読点などが縦組み用にならない問題が残っていました。

M+ FONTS TESTFLIGHT 057 における、LibreOffice Write での縦組み問題

これは、以下の方法で解決しました (これは、2 ちゃんねる FontForge スレのやりとり で知りました。ありがとうございます)。

FontForge の GUI 上でフォントを保存する場合 :

  1. ホームディレクトリにある ./fontforge/prefs をエディタで開き、「CoverageFormatsAllowed:」の値を「1」にする。(デフォルトは「3」?)
  2. FontForge の GUI で生成済みのファイルを開いて保存し直す。

スクリプトでフォントを生成する場合 :

  1. スクリプトの場合、LoadPrefs() しないと、prefs の内容が読み込まれません。また、setPrefs() で設定ファイルを書き換えることなく、prefs の設定変更相当のことが行えます。
  2. そこで、スクリプトの場合は、一番最初に以下のように書きます。
    • 「fontforge.setPrefs('CoverageFormatsAllowed', 1)」(.py の場合)
    • 「SetPrefs('CoverageFormatsAllowed', 1)」(.pe の場合)

以下のようなスクリプトで一括で保存し直すことでも効果があります。

# このスクリプトは vfix.pe という名前で保存
# 使い方 fontforge -script vfix.pe mplus-2c-thin.ttf

SetPrefs('CoverageFormatsAllowed', 1)
Open($1)
Generate("fixed/" + $1)

しかし、FontForge で保存しなおすと、前述の Web フォントの問題が発生します。今回は、フォントの生成の時点で SetPrefs() するようにしました (build-ttf.py の import 群のあとに「FontForge.setPrefs()」、build-ttf.pe の 2行目に「SetPrefs()」を追加)。

せっかくなので、M+ FONTS TESTFLIGHT 057 の縦組み修正バージョンもビルドしてみました。収録グリフ数は漢字が 8 文字 (擔檐瞻贍膽蟾譫髙) 増えており、自家製 Rounded M+ 1.057.20131215 と同じになっています。この問題でお困りの方は、次の TESTFLIGHT までのつなぎに使ってみてください。

Windows 版の Photoshop, Illustrator, InDesign でフォントファミリーがまとまらない

初 期のバージョンでは、Windows 版の Photoshop, Illustrator, InDesign で各フォントファミリーがファミリーとして認識されず、各フォントファミリーがばらばらになってしまい、以下のようにフォントリストに並んでしまうという 不具合がありました (Mac 版は問題なし)。

  • Rounded M+ 1c black black
  • Rounded M+ 1c bold bold
  • Rounded M+ 1c regular regular
  •   :

原因としては、Adobe 製アプリケーションの Windows 版では、「優先フォントファミリ」の値に「日本語」の設定がない場合、「ファミリ」 (M+ FONTS 系のフォントではウエイト名を含めた名前が入っている) をファミリ名としてみなしてしまうようです。これまでは「英語」の設定しかなかったため、うまく認識されていませんでした。

そこで、build-ttf.py の一部分を修正し、優先フォントファミリに「日本語」の設定を含めると、フォントファミリーとしてまとまるようになりました。