Re: TTF2TFM の 0 による除算エラー

名前: 北見 けん
日時: 2002-10-10 16:07:37
IPアドレス: 211.128.71.*

>>11670 長文ですが、最後のほうにまとめを置きました。 先ず、\ttf2pk\ttfonts.map に 「dfpop@Unicode@ dfpop.ttc FontIndex = 0」 と記述してから、 「C:\MyTeXdocuments>ttf2tfm dfpop.ttc -f 1 dfpop@Unicode@ > dfpop.log」 を実行してみました。 すると確かに tfm がたくさんできて、そのうちの dfpop00.tfm が 半角領域に対応するわけです。 しかしこの方法で作った tfm は全ての文字幅が異様に細くなっています。 実際、pl に直して抜粋すると、 ================================================= (CODINGSCHEME CJK-UNICODE) (DESIGNSIZE R 10.0) (COMMENT DESIGNSIZE IS IN POINTS) (COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE) (CHARACTER C h (CHARWD R 0.019) (CHARHT R 0.028) (CHARDP R 0.003) ) (CHARACTER C i (CHARWD R 0.008) (CHARHT R 0.025) (CHARDP R 0.002) ) ================================================= といった具合です。これでは、`h'の幅は 0.19pt しか無いことになります。 そこで、試しに TEST.sfd を作って、 C:\MyTeXdocuments>ttf2tfm dfpop.ttc -f 1 dfpop@TEST@ > dfpop.log とやってみたところ、正しい文字幅の tfm が得られました。 TEST.sfd の中身は以下です。 =============================== # TEST.sfd 00 0x0020: 0x0020_0x007E \ 0x0003: 0x0000 \ 0x0006: 0x0000 \ 0x0008: 0x0000 # eof =============================== # 上の中の、「0x0003: 0x0000 \」の行などを省くと、 # やはり文字幅が極端に細い tfm ができてしまいます。 # これもなぜなのかわかりませんでした。 この方法で作った正しい文字幅の tfm は、pl に直して見てみると、 ================================================= (DESIGNSIZE R 10.0) (COMMENT DESIGNSIZE IS IN POINTS) (COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE) (CHARACTER C h (CHARWD R 0.493) (CHARHT R 0.725) (CHARDP R 0.083) ) (CHARACTER C i (CHARWD R 0.206) (CHARHT R 0.642) (CHARDP R 0.063) ) ================================================= といった具合です。例えば `h' の幅は 4.93pt と妥当な値になっています。 文字の幅については、ttf2tfm 実行時に作成した log ファイルを見ても pl と同様の幅になっているようでした。 しかし、このように複雑なエンコーディングの調整をしなくても 以前はうまくいった記憶があります。 そこで、昔作って、今もうまく使えている tfm をバイナリエディタで調べてみたら、 「Created by `ttf2tfm dfpop.ttc -P 3 -E 1 -f 1 -q dfppop.tfm'」 と書かれていました。 ところが、今「ttf2tfm dfpop.ttc -P 3 -E 1 -f 1 -q dfppop.tfm」を試みると ================================================= 「このプログラムは不正な処理を行ったので強制終了されます」 TTF2TFM の 0 による除算エラーです。 モジュール : TTF2TFM.EXE、アドレス : 016f:00406375 ================================================= とエラーになります。 このフォントインデックスを 0 にした場合( -f 0 )には、うまく処理されて 256文字を含んだ tfm が出来上がります。 参考までに、「ttf2tfm century.ttf century.tfm」とやってみると、 tfm ができますが、文字幅はでたらめになります。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 以上のことをまとめてみます。 TEST.sfd を作って、 C:\MyTeXdocuments>ttf2tfm dfpop.ttc -f 1 dfpop@TEST@ > dfpop.log とすると、正しい文字幅の tfm が得られます。 が、 TEST.sfd の中身を少し省略するだけで文字幅が変わってしまうのはなぜなのか。 サブフォント生成モードでないときに、フォントインデックスが 0 でない場合に、 「 0 による除算エラー」が出るのはなぜなのか。 以前は、確かに「 0 による除算エラー」が出なかったのに、 今と挙動が食い違うのはどういう原因が考えられるのか。 と、 依然として釈然としません。 # ドキュメントには、サブフォント生成を指定しない場合は、 # 最初の256文字以外は無視して、最初の256文字の tfm を作る # というような記述があったように思うのですが、いま見つかりません。 なんとか、複雑なエンコーディングの調整を省略して、 半角領域の tfm を作れないものでしょうか。 なにか、情報があればお願いいたします。

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)