Ghostscript で CID フォントを使って日本語を出す方法

はじめに:
  Ghostscript は 5.0 から CID フォントをサポートしました。したがって、
  そーいう形式のフォントを持っていれば使うことができます。これは VFlib
  には依存しないので VFlib を組み込まなくても構いません。そーいう意味
  では gs5.10-vflib とはえんもゆかりもないのですが、日本語を出す、とい
  う目的は同じなのでここで説明します。

  # 正確にいえば gs5.10-vflib では CID フォントがエラーにならないように
  # zfont1.c を微妙に変更しているので関係が全くないわけではない。
  ## この変更はエラーチェックを甘くする変更なのであまり適切なものという
  ## わけではない。

やりかた:
  たとえば、HeiseiMin-W3 という CIDFont を EUC-H という CMap で使うフォ
  ントを HeiseiMin-W3-EUC-H という名前で利用するには次のようにします。

  1. 次のようなファイルをフォントディレクトリ
  (PREFIX/share/ghostscript/fonts とか)におきます。
  (正確には gs のサーチパスにはいっていればどこでも構いません。)

  (ファイル中の .../ は適当なパスに置き換えるか、サーチパスを設定した上
  で削除します。)

- heiseimin-w3-euc-h.gsf -----------------------------------
/HeiseiMin-W3-EUC-H
/HeiseiMin-W3 (.../HeiseiMin-W3)
/EUC-H (.../EUC-H)

1 index /CMap resourcestatus
{pop pop pop}
{runlibfile} ifelse
/CMap findresource

3 1 roll
1 index /CIDFont resourcestatus
{pop pop pop}
{runlibfile} ifelse
/CIDFont findresource

[ exch ] composefont pop
------------------------------------------------------------

  2. 次のような行を Fontmap に追加します。

------------------------------------------------------------
/HeiseiMin-W3-EUC-H			(heiseimin-w3-euc-h.gsf)	;
------------------------------------------------------------

試しかた:
  上記のようにして HeiseiMin-W3-EUC-H が利用可能になっているとすると、
  たとえば次のようにして日本語を表示できます。
  (例の中の日本語文字列は EUC で入力されているとします。)

% ../../bin/gs
Aladdin Ghostscript 5.10 (1997-11-23)
Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading NimbusRomNo9L-Regu font from /carbon/gs/share/ghostscript/fonts/n021003l.pfb... 2133404 787169 1300092 11292 0 done.
Loading NimbusSanL-Regu font from /carbon/gs/share/ghostscript/fonts/n019003l.pfb... 2334324 975987 1320184 15688 0 done.
GS>/HeiseiMin-W3-EUC-H findfont
Loading HeiseiMin-W3-EUC-H font from /carbon/gs/share/ghostscript/fonts/heiseimin-w3-euc-h.gsf... 2354416 979308 6950712 5639050 0 done.
GS<1>100 scalefont setfont 0 20 moveto (あいうえお) show
GS>

注:
  このドキュメントの著者は CIDFont とかにあまり詳しいわけではない(とい
  うか、ほとんど知らないに等しい)ので、試したらできてしまった、という
  程度の話と認識して下さい。

  例にあげたのは EUC-H ですが、これは H を例にするとファイル名が一文字
  だけになってちょっとわかりにくくなるかな、という以上の理由はなく、け
  して EUC を推奨しているわけではありません。実用的には存在する組合せ
  全てについてフォントを作っておくことになるでしょう。

  アプリケーションによってはフォントの内部構造に依存したポストスクリプ
  トファイルを生成することがあります。そのようなアプリケーションでは
  CID フォントは使用できないかもしれません。そのような場合、各アプリ
  ケーションごとにパッチを探す/作るなどして対処して下さい。
  新しいポストスクリプトプリンタでは CID フォントが標準らしいので、す
  でにパッチが作られている可能性もあります。
  tgif:
    tgif で CID フォントを扱えるようにするパッチとしては次のものがあり
    ます。
    ftp://ftp.hipecs.hokudai.ac.jp/pub/news-archive/fj.comp.texhax/volume97/Jan/970129.09.Z
    ただし、このパッチは rearranged font という gs ではサポートされて
    いない機能を使用しているので使えません。
    (使うと NOT IMPLEMENTED YET. と出てきます。)
  jdvi2kps:
    jdvi2kps で CID フォントを扱えるようにする話としては次のものがあり
    ます。
    http://uat.thx.inst.keio.ac.jp/~uchiyama/macptex.html
    http://uat.thx.inst.keio.ac.jp/~uchiyama/jdvi2kps/jdvi2.ps
    ただし、なぜか gs ではオリジナルの jdvi2.ps でも問題ないようです。
  dvi2ps:
    ascfix-?.ps で metric の修正をプリンタ側でやらせるとうまくいきませ
    んが、vf を使えば問題ないようです。
  eucfont.ps:
    tgif や idrawなどは内部的に eucfont.ps というファイルを利用しています。
    fj.lang.postscript,fj.questions.unix に 1997/10/27 に投稿された
    <KATAYAMA.97Oct27164452@niseko.rd.nacsis.ac.jp> はその eucfont.ps の
    部分だけを書き換えてフォントの利用法を変更するツールです。
    このツールは gs で CID フォントを使った場合にも効果があります。

  CIDFont とか CMap にも Fontmap みたいな機構があると美しいですね。

おわりに:
  著者はここに述べた設定を常用していません。

著者:
  田中 哲
  akr@jaist.ac.jp
  http://www.ldl.jaist.ac.jp/~akr/
