TrueType フォントによる pTeX の多書体化
商用 TrueType フォントがあることに最近気がついて、以前から気になって
いた pTeX の多書体化をやってみました。横書きは簡単でしたが TrueType フォント
に縦書き用フォントが無いので、縦書きが上手くできるまではちょっと苦労しました。
以下は基本的に Debian (sid) 環境での話です。
- Debian には VFlib 対応の dvips が無いので、良く解説されてる VFlib 版の
dvips とは違う方法になります。
- 以下での gs は VFlib 版なので現在では JP の gs-ja 5.50 である必要が
あります('01.7)。
makejvf の場合
例として「行書体」 TrueType フォント名が hgrgy.ttc の場合で説明します。
フォントの準備
vftool 版との共存を考慮するとディレクトリだけでなく
フォント名も変えておく方が良い気がしてきたので変更しました('01.7.12)。
単独で使う場合には関係ありません。
TeX TFM 名で hgr を hg に
ドライバ用 TFM 名で先頭に a を付けました(ASCII のつもり)。
はじめにフォント名を決めます。必要なものは、「TeX の TFM 名」、
「ドライバ用 TFM 名」、「VFlib フォント名」、「PostScript フォント名」
の四つです。ここでは仮に次のようにしましょう。
| 横書き | 縦書き |
| VFlib フォント名 |
vfgyo |
| TeX の TFM 名 |
hggyo |
thggyo |
| ドライバ用 TFM 名 |
agyo |
agyov |
| PostScript フォント名 |
HG-Gyo-H |
HG-Gyo-V |
(ここの用語が怪しい。ドライバ用 TFM というのは他では内蔵漢字 jfm とか
呼ばれてる気がしますが、要するに makejvf の第二引数に与えた名前です)
注意;「ドライバ用 TFM 名」は makejvf の引数で、
「VFlib フォント名」は vfontcap で、「PostScript フォント名」は
kconfig.ps で自由に設定できます。
これに従って設定します。
vftool 版の VF/TFM と共存するときを考えて、dvips が
makejvf のファイルを先に見付けるように、ディレクトリを変更('01.7.9)。
- cp jis.tfm hggyo.tfm などで TeX の TFM を用意します。
例えば
/usr/share/texmf/fonts/tfm/asc-trty
にインストール。
- makejvf hggyo.tfm agyo で hggyo.vf とドライバ用の TFM である agyo.tfm
を生成します。dvips が DVI を処理するとき hggyo.vf を見て hggyo
に agyo を対応させることになります。
例えば hggyo.vf を
/usr/share/texmf/fonts/vf/asc-trty
にインストール,
agyo.tfm を /usr/share/texmf/fonts/tfm/asc-ttf-ps
にインストール。
- vfontcap に vfgyo で hgrgy.ttc が呼ばれるように設定。
r-richo-gyosyo|Richo Gyousyo:\
:ft=truetype:\
:ff=/usr/share/fonts/truetype/Win/hgrgy:
richo-gyosyo:\
:fc=r-richo-gyosyo:
vfgyo:\
:fc=richo-gyosyo:
のような設定でしょう。
この場合 ttindex の必要がありますが truetype でなく freetype にすると
ttindex の必要は無いそうです。その場合 hgrgy.ttc まで指定するそうです。
- kconfig.ps で PS フォント名 HG-Gyo で VFlib 名 vfgyo が呼ばれるように
設定します。
/HG-Gyo 4301600 (vfgyo) VFlibkanji
スタイルファイル
簡単には morisawa.sty 等を修正すればできます。okumura-clsfiles
をインストールして morisawa.sty で TFM 名を hggyo に修正します。
to be written...
ドライバの設定
Debian では dvips の VFlib 版は無いので dvips では gs の VFlib
に任せる方法になります。dvi2ps は VFlib 対応ですが設定方法が
良く分らないので同じく gs に任せてしまう方法になります。
dvips の場合
psfonts.map に
agyo HG-Gyo-H
agyov HG-Gyo-V
と設定。dvips は agyo はプリンタ内蔵 PS フォントと思ってくれる。
Debian の dvips は VFlib 版でないのでこうします。VFlib 版だと
agyo HG-Gyo-H <' vfgyo
agyov HG-Gyo-V <' vfgyo
のようにする?縦書きフォントがこれで良いのかどうか不明です。
dvi2ps の場合
fontdesc で
注意;
map agyo JSNR ^vfgyo
map agyov JSNR ^vfgyo
のようにしたのでは縦書きが上手く行きませんでした。
vfontcap で vfgyo を回転させても縦書きで「、」などが正しく表示できません。
上手い設定すればできるのかもわかりませんが PS フォント経由にするのが
キーポイントらしい。
概略は
- 例えば /usr/share/texmf/dvi2ps/fontdesc で
define ttf trty
fontdesc //fonts$kpse/asc-$ttf
と変更したのを /usr/share/texmf/dvi2ps/trty などにし
- fontsk/ask-trty で
font jvf * 0 $tmf/vf/asc-trty/%f.vf
fontdesc bikan-$ttf
- fontsk/bikan-trty で
font jfm * 0 $tmf/tfm/asc-ttf-ps/
font jfm * 0 $tmf/tfm/asc-trty/
#
map agyo JSNR HG-Gyo-H
map agyov JSNR HG-Gyo-V
のようにして dvi2ps -F trty でしょう。
修正('01.7.13) bk trty にするより別の変数
を使う方が良さそうな気がするので ttf trty にしました。
例えば通常の min, goth も一緒に使う場合など bk があった方が簡単だと思います。
ここで VF を使わずに hggyo.tfm を HG-Gyo に対応させ
ても表示はできますが VF の行ってる微調整が無くなるようです。
カッコの位置などで比較できます。
これらは最終的には gs に依存してるので gs で表示できますが印刷の場合
直接 PS プリンタに送ると文字化けします。一度 gs で変換する必要がある
ようです。
gs -sDEVICE=psmono -r600 -dBATCH -dNOPAUSE -sOutputFile=test.ps out.ps
のようにする。
xdvi の場合
vfontmap に
hggyo vfgyo
thggyo vfgyo
かなと思いますがあまり調査できてません。多分不十分な表示になると思います。
dvips, dvi2ps で PS に落して gs で表示が確実でしょう。
vftool の場合
vftool 2.0-alpha で VF ファイルを作ると、縦書き用フォントが無い場合、
横書き用フォントで近似/代用できるようです。これを用いると直接 PS プリンタ
に送っても大丈夫な PS ファイルが生成できます。
同じく「行書体」 TrueType フォント名が hgrgy.ttc の場合で説明します。
フォントの準備
- フォント名で「TeX の TFM 名」、「ドライバ用 TFM 名」、
「VFlib フォント名」、「PostScript フォント名」の四つは makejvf の場合と
同じです。
- VFlib 関係の設定も makejvf の場合と同じです。(kconfig.ps の設定は
不要だと思いますが。)
- vftool の場合、更に横書きフォントで縦書きフォントを近似する為の VF も
生成されるようです。
- vftool にはコンパクトな VF を生成することができ、全然サイズが小さく
なります。これで生成したので dvips で動かない可能性があります(未確認)。
現在 ('01.7) Debian (JP) には vftool 1.2 しかないので
vftool 2.0-alpha をゲットしてインストールする必要があります。
また vftool は初めてなので誤解や誤りがあるかもわかりません。
vftool での VF/TFM ファイルの生成
- TeX TFM の生成。
for i in 5 6 7 8 9 10
do
cp -p /usr/share/texmf/fonts/tfm/ptex/min$i.tfm hgrgyo$i.tfm
cp -p /usr/share/texmf/fonts/tfm/ptex/tmin$i.tfm thgrgyo$i.tfm
done
し、これら hgr*.tfm を /usr/share/texmf/fonts/tfm/jp-trty にコピー。
- vftool 2.0-alpha を展開した data ディレクトリで
cp a2stdmn a2gyo
cp a2stdmnv a2gyov
cp v2hstdmn v2hgyo
stdmn, stdmnv, v2hstdmn を使う根拠はありません。
- vftool 2.0-alpha の Makefile で
JFM = /usr/share/texmf/fonts/tfm/jp-trty
bkfonts = '${bk-gyo}'
bk-gyo = gyo \
gyo:hgrgyo:monokan gyov:thgrgyo:monokan-v
vbkfonts = '${vbk-gyo}'
vbk-gyo = gyo \
gyo:gyov:gyovsy
vsyfonts = '${vsy-gyo}'
vsy-gyo = gyo \
gyo:gyovsy
の設定して make a2bk ; make v2h ; make vsyd
して生成される
- jfm/gyo を /usr/share/texmf/fonts/tfm/jp-ttf-ps
- vf/a2gyo, vf/v2hgyo を /usr/share/texmf/fonts/vf/jp-trty
- vf/vsydgyo を /usr/share/texmf/fonts/vf/jp-dir
にコピーする。
vf/v2hgyo, vf/vsydgyo によって横書きフォントで縦書き
フォントを近似する微調整を行なっているらしい。
dvi2ps の設定
- /usr/share/texmf/dvi2ps/hgr で
define ttf hgr
fontdesc //fonts$kpse/asc-$ttf
を設定し
- fontsk/asc-hgr で
font jvf * 0 $tmf/vf/jp-trty//%f.vf
font jvf * 0 $tmf/vf/jp-dir//%f.vf
font jvf * 0 $tmf/vf//%f.vf
fontdesc bikan-$ttf
- fontsk/bikan-hgr で
font jfm * 0 $tmf/tfm/jp-ttf-ps//
font jfm * 0 $tmf/tfm/jp-trty//
font jfm * 0 $tmf/tfm//jp//
map gyo JSNR ^gyo
にして dvi2ps -F hgr などでしょう。
修正('01.7.13) bk hgr にするより別の変数を
使う方が良さそうな気がするので ttf hgr にしました。
例えば通常の min, goth も一緒に使う場合など bk があった方が簡単だと思います。
参考にした情報
-
Multifontization 基本サイト
-
TeXのTrueTypeによる多書体化 分り易い気が
-
TeX のインストールや多書体化について gs-cjk の関係者かと
-
Linux de TeX多書体 Kondara のパッケージ関係らしい