繁体字フォントをEDDで指定しているにもかかわらずMS明朝でオーバライドされるという問題(構造化FrameMaker8)
半年ほど前に、 EDDでフォントをArial指定しているのにMS 明朝になってしまう、という問題 というエントリーを書いたのだが、 その問題をそのまま放置していたところ、 今回、中国語の繁体字指定したEDDを使ってXMLをFrameMaker8で開いたところ、 繁体字フォント指定がほとんど反映されないで、ほぼすべてがMS明朝になってしまった。
今回はそのエントリーに書いた以下の部分を簡単に解消できるツールをつくりました。
方法としては、FrameMakerのGUI上で処理してもよいし、mifにいったん保存して、 該当箇所の書式上書き設定記述を削除することでも解消できる。
結論としてツールだけを入手したい場合はこちらです。
何が問題なのか?実験をしてみた
EDDやテンプレートなどこちらで設定した部分に問題があるのか? それとも 日本語FrameMaker自体に何か問題の原因があるのかを切り分けるため、 環境だけを英語(英語のWindows,英語インタフェースのFrameMaker8)にして、 同じEDD,テンプレート,XML文書を使って処理してみた。
結果は、問題なくEDDで指定している繁体字フォントになった。(MS明朝にはならない)
ということは、何か根本的なところでFrameMakerまたはWindowsの設定を変更する必要があるのか それとも、このようになるのが日本語FrameMaker8の仕様なのかわからないが、 EDDやテンプレートの設定変更すればなんとかなるという話ではなさそうだ。
mif経由で該当部分のフォント指定の上書きを徹底的に削除
以前は markup という要素だけに問題が発生していたので、FrameMakerのGUI上で簡単に直すことが できたのだが、今回は100ページ近いマニュアル全体に問題が発生していて、とてもじゃないけど 手作業で直すことはできない。
MIFで保存して問題が起きている部分(MS明朝で書式が上書きされている部分) を調べてみると、以下のフォントタグが挿入されていた。
例1
<Font
<FTag `'>
<FPlatformName `W.MS 明朝.R.700'>
<FFamily `MS 明朝'>
<FEncoding `JISX0208.ShiftJIS'>
<FLocked No>
> # end of Font
例2
<Font
<FTag `'>
<FPlatformName `W.MS 明朝.R.400'>
<FFamily `MS 明朝'>
<FEncoding `JISX0208.ShiftJIS'>
<FLocked No>
> # end of Font
方針
以上の事前調査を踏まえて、 とにかく、この記述を見つけたら、フォントタグごとごっそり削除する・・・という コードを実装することにした。 (繁体字のマニュアルでMS明朝が出現する部分はどこにもないため、単に削除すればよいと判断。)
ツール
ビルド方法
mif-font-override-remover.jar を Ubuntu 8.04 でビルドする場合の説明です。 (Antが必要/JDK6 を使用)
依存するjavaライブラリを別途用意すれば、Ubuntuでなくてもビルドできます。 その場合は、javaライブラリの配置場所に合わせて build.xml を修正します。
1) jdk と 依存するjavaライブラリのインストール
$ sudo apt-get install sun-java6-jdk
$ sudo apt-get install libcommons-io-java
$ sudo apt-get install libjdom-java
commons-io.jar,jdom.jar が/usr/share/java 以下にインストールされます。
2) mif-font-override-remover.tar.gz を展開して ant
$ wget http://osima.jp/dtp/fm-and-msmincho-resolver/mif-font-override-remover.tar.gz
$ tar xfz mif-font-override-remover.tar.gz
$ cd mif-font-override-remover/
$ ant
これで、mif-font-override-remover.jar がビルドされます。
使い方
問題が起きている fm ファイルを 別名保存で mif 形式で保存します。(これを foo.mif とします。) あとは以下のようにして問題を解消します。
$ java -jar mif-font-override-remover.jar foo.mif
※結果はそのまま foo.mif に保存されます。