ptetex3 のフォントの集中管理

背景

オリジナルの teTeX-3.0 には updmap(-sys) コマンドによる、 欧文フォントの集中管理機構があります。 TIPA[extlink] のインストールなど、 新たなフォントを使う場合には、map ファイルをしかるべき場所に置き、 updmap(-sys) コマンドで登録すれば、dvips/dvipdfmx/xdvi/pdftex などのツールでの フォント設定がすべて完了します。

もっとも、多くのフォント/マクロ製作者はこの便利な機構をご存じなく、 インストール方法の説明には、 config.ps に "p +hoge.map" を書き加えて...とか、 dvipdfmx.cfg に "f hoge.map" を書き加えて...とか、 cid-x.map に "hoge H fuga.ttf" を書き加えて... とかの記述をあまりにも多く目にします。 この通りの作業をすると、dvipdfmx では使えるのに xdvi では表示されない、 というような中途半端な状態になってしまいます。

角藤さんの W32TeX でも、別実装のようですが Q&A:42444 のように実現されているようなので、 updmap(-sys) で map を登録するという手法が、もっと有名になって欲しいところです。

和文フォントには、このような機構を teTeX が準備してくれるはずもありませんので、 ptetex3 では iNOUE Koich! 氏の teTeXのupdmapをdvipdfmx用に改変する[extlink] を使わせて頂いて、 dvips/dvipdfmx/xdvi の設定を一元化しています。

欧文和文
実装teTeX-3.0iNOUE Koich! 氏の拡張
登録する map の書式dvips用dvipdfmx用
登録する map の置場$TEXMF/fonts/map/dvips/$TEXMF/fonts/map/dvipdfm/(xなし)
登録方法updmap-sys --enable Map=hoge.map
updmap-sys --enable MixedMap=hoge.map
updmap-sys --enable KanjiMap=hoge.map
生成される mapdvips, dvipdfm, pdftexdvips, dvipdfmx, xdvi(-jp)
その他xdvi, dvipng 等は dvips の map を利用xdvi 用のディフォルト和文フォントの指定も

フォントの置場

TeX で使う TrueType フォントや OpenType フォントの置場は、 $TEXMF/fonts/truetype や $TEXMF/fonts/opentype に決まっています。 しかし OS (X11) の使うフォントの置場は違うところにあるでしょう。 巨大なフォントファイルをコピーするのは無駄ですから、 シンボリックリンクをこの下に張ればよいでしょう。

ptetex3 では "make font" の段階で自動検索し、 OS や X11 のフォントのディレクトリを差すシンボリックリンクを 作るようにしています。 忘れがちな mktexlsr も実行しています。

dvipdfmx/xdvi がどうやってフォントを探しているかと言うと、 次のようなコマンドを内部的に実行しています。

kpsewhich -format="truetype fonts" msmincho.ttc
kpsewhich -format="opentype fonts" hoge.otf

xdvi でのディフォルトフォントの設定

dvips や dvipdfmx では、「ディフォルトの明朝/ゴシックのフォント」 (Ryumin-Light と GothicBBB-Medium) を持っています。 実際に使われるフォントは、小塚であったりヒラギノであったりさざなみであったり、 ビューアの設定次第でいくらでも変化します。TeX の管轄外です。

ところが xdvi はディフォルトのフォントを持っていません。 それを指定するのが、次のコマンドです。

updmap-sys --setoption xdviRml mincho-font.ttf
updmap-sys --setoption xdviGbm gothic-font.ttf

dvipdfmx の設定で、Ryumin-Light や GothicBBB-Medium と指定されたものを、 xdvi の設定ではこの指定に従って置き換えます。

Ryumin-Light/GothicBBB-Medium が使われるのは、rml(v)/gbm(v) だけだと お思いの方もいらっしゃるかもしれませんが、 OTF/UTF パッケージを使ってフォント埋め込みをしない場合、大量に出てきます。

ptetex3 では "make font" の段階で自動検索を行います。 上のコマンドを手動で実行する場面はほとんどないと思います。

和文フォントの設定

和文フォントの設定で、情報量が一番多いツールは dvipdfmx です。 iNOUE Koich! 氏の拡張では、この dvipdfmx の設定を元に、 dvips/xdvi の設定ファイルを生成します。

欧文用の map ファイルは、dvips のものを使うことにご注意下さい。 map ファイルも和文とは異なり $TEXMF/fonts/map/dvips/ 以下に置きます。

和文の map ファイルは $TEXMF/fonts/map/dvipdfm/(xなしです)以下に置きます。 例えば hoge.map というファイルを

rml     H       !Ryumin-Light
rmlv    V       !Ryumin-Light
gbm     H       !GothicBBB-Medium
gbmv    V       !GothicBBB-Medium

のような内容で作り、root になって

mktexlsr && updmap-sys --enable KanjiMap=hoge.map

を実行すれば、dvipdfmx/dvips/xdvi の設定がまとめて完了します。

updmap-sys コマンドで設定が反映されるファイルは、以下の通りです。

$TEXMF-config/web2c/updmap.cfg (map ファイル名)
$TEXMF-var/fonts/map/dvips/updmap/psfonts.map (dvips 用)
$TEXMF-var/fonts/map/dvipdfm/updmap/kanjix.map (dvipdfmx 用)
$TEXMF-var/fonts/map/xdvi/updmap/vfontmap (xdvi 用)

多重TEXMFツリー にあるように、updmap コマンドを使った場合は、 個人設定となって、$HOME 以下のファイルに保存されます。

当然ながら、dvips/dvipdfmx/xdvi でのフォント設定ファイルの書式は異なります。 updmap(-sys) がこの差異を吸収しているわけです。

dvips のフォント設定

dvips のフォント設定には、極端な言い方をすれば、 どのようなフォント名を書こうとそのまま PS ファイルに出力されてしまいます。 それを解釈できるかどうかは、ghostscript や PS プリンタの 設定次第であるとも言えます。

updmap(-sys) との整合性を考えると、 dvipdfmx 用の map に書くフォント名は、 (本来はファイル名を書くところなのですが) 「(ghostscript に登録された PS フォント名)+拡張子」 であることが望ましいです。 フォントのファイル名と PS フォント名が一致していると、 dvips の設定も updmap(-sys) で一元管理できるということです。

ところで、dvips で出力した PS ファイルには、 和文フォントの実体は埋め込まれておらず、 たとえ ghostscript での設定により、画面上では表示できたとしても、 PS プリンタでは印刷できないことがあります。 こういう場合は、ghostscript 付属の ps2ps コマンドを利用することにより、 フォントを埋め込んだ(すなわち該当フォントを持たない PS プリンタでも印刷できる) PS ファイルに変換することができます。

インクジェットプリンタのように、フォントを自前で持たないプリンタでは、 そもそも ghostscript がビットマップ展開を代行しているので、 このような問題は起こりません。 ただし、PS ファイルのみを他の環境に持っていく場合には注意が必要です。 行き先の ghostscript の設定次第では、 やはり見えない PS になっている場合があります。

dvipdfmx と違って、フォント一種類ずつについて、 埋め込み/非埋め込みの制御をするのは、面倒そうです。

フォントの埋め込み/非埋め込み制御

updmap(-sys) の本来の仕事ではないのですが、 Mac OS X などで、ヒラギノや小塚といった高品質のフォントを持っている方は、 どのフォントを埋め込むかという制御に updmap を使われることがあるようです。

ヒラギノの時の map と小塚の時の map を、組織的に入れ換えれば OK のようなので、 iNOUE Koich! 氏の拡張に、さらに若干の拡張をして、

updmap-sys --setoption kanjiEmbed noEmbed  (埋め込まない場合)
updmap-sys --setoption kanjiEmbed hiragino (ヒラギノを埋め込む場合)

のようなオプションを用意しました。

updmap-sys --enable KanjiMap=ptex-@kanjiEmbed@.map

などと map ファイル名に @kanjiEmbed@ という文字列が含まれていれば、 その部分が kanjiEmbed で指定した noEmbed や hiragino といった文字列に 置き換わると言うものです。

もっとも、埋め込み制御に意味があるのは、主に dvipdfmx でしょうか。 xdvi にはこの制御の意味はまったくありません(画面に表示するだけですから)。 dvips ではうまく制御できるのかどうか、よくわかりません。

dvipdfmx だけなら、

dvipdfmx -f ptex-hiragino.map -f otf-hiragino.map hoge.dvi

のように、実行時のオプションで map を指定する方法もあります。

map で許される書式/許されない書式

dvipdfmx の map の書式は機能豊富で、 dvips/xdvi では処理できないものがあります。 ....

多書体の設定例


  • .map ファイルに書き込んでおく mincho-font.ttf などのフォントは, どのような位置にあればよいのでしょうか? $TEXMF ツリーの中に適切なシンボリックリンクを作れば, うまくたどれると思っていたのですが,Windows + Cygwin で, フォントを埋め込もうと,C:\WINDOWS\Fonts の中のフォントを指定した .map ファイルを作って,dvipdfmx -f foo.map をしたところ,
    ** WARNING ** Could not locate a virtual/physical font for TFM "gbm".
    ** WARNING ** >> This font is mapped to a physical font "HGRSMP.TTF".
    ** WARNING ** >> Please check if kpathsea library can find this font: HGRSMP.TTF
    ** ERROR ** Cannot proceed without .vf or "physical" font for PDF output...
    というエラーが出て,pdf が作られませんでした. /usr/local/teTeX/share/texmf/fonts/truetype/windows -> C:\WINDOWS\Fonts という シンボリックリンクは張れています.また,msmincho.ttc と msgothic.ttc は問題無く 埋め込めます.-- kuroky 2006-06-16 (金) 22:46:11
  • もしかすると、指定したフォントの拡張子が大文字なのが原因かもしれません。私がVineで試した結果によると、*.TTCや*.TTFといった拡張子が大文字のフォントでは同様のエラーが出ました。*.ttcや*.ttfでは問題がありませんでした。結果的にそうであっただけで、原因かどうかははっきりしませんが…… -- wakakumo 2006-06-17 (土) 04:17:35
  • 'kpsewhich -format="truetype fonts" msmincho.ttc' のようにして見つかれば使えます。どんな .map を書いて、どんなフォントをお持ちでしょうか。拡張子まで大文字なのは、確かに気になります。 -- 土村 2006-06-17 (土) 11:27:15
  • wakakumo さん,土村さん,アドヴァイスをありがとうございます.解決しました.
    • 原因は,フォント名の拡張子 .TTF, .TTC が大文字であること,でした.
      • コントロールパネル -> フォント で,(使いたい) フォントを選択し,
      • プロパティを開き,フォント名の拡張子を小文字にして,
      • texconfig-sys rehash をし,
      • 指定したフォント名と同じフォント名を .map ファイルに書いたところうまくいきました.
    • 注意点:
      • 「コントロールパネル -> フォント」の詳細表示で示される フォント名 (+ 拡張子) は,手で直した後も変化が無く,
      • Cygwin やコマンドプロンプトで ls や dir をしたときには,変更が適用されているのが分かります.
    • 拡張子小文字化後は,kpsewhich -format="truetype fonts" HGRSMP.ttf で 見つかるようになりました. -- kuroky 2006-06-17 (土) 14:39:38

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-05-13 (火) 11:40:09 (3268d)