Hatena::ブログ(Diary)

マクロツイーター このページをアンテナに追加 RSSフィード Twitter

2013-01-15

(フォントを)埋め込むか、埋め込まざるか、その設定方法が問題だ(TeX Live 編)

DVI ウェアでのフォントの埋込の設定の方法を最近の W32TeX を前提にして説明した記事 「埋め込むか、埋め込まざるか」TeX Live 版。前提知識については W32TeX 版と共通なので、先に示したリンク先の記事を参照してほしい。

TeX Live 2011 以降を対象とする。

updmap の「オプション」の設定の方法

TeX Live(本家)においてフォント埋込の「既定設定」を変更するには、updmap の「オプション」の設定を用いる。*1以下のコマンドラインの記述で、コマンド名「updmap」はシステム全体の設定を変更する場合には代わりに「updmap-sys」とする。*2

  • 特定のオプションの値を設定する:
    updmap --setoption <オプション名> <値>
    
  • 特定のオプションの現在の値を出力する:
    updmap --showoption <オプション名>
    
  • 特定のオプションについて可能な設定値を列挙する:
    updmap --showoptions <オプション名>
    

dvips/dvipdfmx での和文の埋込の設定

既定の設定を変更する場合。

  • 標準和文フォントを埋め込まない(既定*3):
    updmap --setoption kanjiEmbed noEmbed
    updmap
    
  • 標準和文フォントとして IPA フォントを埋め込む*4
    updmap --setoption kanjiEmbed ipa
    updmap
    
  • その他の利用可能な kanjiEmbed オプションの値: ipaex(IPAex フォント)、hiraginoヒラギノフォント)、kozuka(小塚フォント)、morisawaモリサワフォント)がある。*5
  • 1 回目の updmap でオプションの値を変更した後、2 回目の updmap の実行で出力のマップファイルにその変更を反映させている。しかし、2 回実行しないといけないのは想定仕様でなくてバグのような気がする。→TUG の解説ページを見る限り、それが仕様である模様。updmap-setup-kanji コマンドを用いるほうが適切かも知れない。
  • 各 kanjiEmbed オプションの値に対して、以下のマップファイルが読み込まれる。
    • pTeX 用: ptex-〈値〉.map、otf-〈値〉.map
    • upTeX 用: uptex-〈値〉.map、otf-up-〈値〉.map
    前項で「利用可能」としたのは、このマップファイルが TeX Live で提供されているもののことである。自分でマップファイルを用意すれば、任意の値を指定する(例えば MS フォント用に ms という値を指定する)ことが可能である。
  • TeX Live の場合は dvips についても埋込設定が影響する。もちろん出力の PostScript ファイルに和文フォントが埋め込まれることはないが、和文の PS フォント名が変更される。*6

TeX Live では、文書ごとに異なる指定をする方法は提供されていない。しかし、dvipdfmx に限ると、*7起動時のオプションで先述のマップファイルを指定することで実現できる。例えば sample.dvi を IPAex フォントの埋込を指定いして PDF に変換するには以下のようにする:

dvipdfmx -f ptex-ipaex.map -f otf-ipaex.map sample.dvi

dvips(TeXDVIPSPDF)での欧文の埋込の設定

既定設定の変更。

  • 欧文 Base35 フォントを埋め込む(既定):
    updmap --setoption dvipsDownloadBase35 true
    updmap
    
  • 欧文 Base35 フォントを埋め込まない:
    updmap --setoption dvipsDownloadBase35 false
    updmap
    
  • 既定では、埋込を指定した時に実際に埋め込まれるフォントは本物の Base35 ではなくフリーのクローンである。もし、本物の Base35 の Type1 フォントを持っていている場合は、LW35 というオプションでそちらを使う設定に切り替えられる。(詳細は updmap の man を参照。)

文書毎の設定の変更。

  • 欧文 Base35 フォントを埋め込む:
    dvips -Pdownload35 sample.dvi
    
  • 欧文 Base35 フォントを埋め込まない:
    dvips -Pbuiltin35 sample.dvi
    

dvipdfmx(TeXDVIPDF)での欧文の埋込の設定

TeX Live の dvipdfmx では Base14 フォントは常に埋め込まれる設定に固定されている。何故かは知らないが、この設定を変更する手段は全く提供されていないように見える。*8(まあ今時これを非埋込にする需要はないのだろう。)

もちろん、自分で当該の設定を行うマップファイル(W32TeX の psbase14.map に相当するもの)を用意してそれを dvipdfmx の -f オプションに指定することで Base14 を非埋込にすることは可能である。しかし、その設定を既定にしようとすると dvipdfmx.cfg を編集する必要があるが、TeX Live では dvipdfmx.cfg は tlmgr の管理下にあるので、そのような設定を安全に行うのはかなり困難である。

(記事末尾の補足も参照されたい。)

pdfTeX での欧文の埋込の設定

既定設定の変更。

  • 欧文 Base14 フォントを埋め込む(既定):
    updmap --setoption pdftexDownloadBase14 true
    updmap
    
  • 欧文 Base14 フォントを埋め込まない:
    updmap --setoption pdftexDownloadBase14 false
    updmap
    

文書毎の設定の変更を行うには、TeX 文書の先頭(LaTeX 文書の場合はプリアンブルの先頭)で以下の命令を実行する。*9

  • 欧文 Base14 フォントを埋め込む:
    \pdfmapfile{pdftex_dl14.map}
    
  • 欧文 Base14 フォントを埋め込まない:
    \pdfmapfile{pdftex_ndl14.map}
    

XeTeX/LuaTeX の場合

これについては、W32TeX 編で述べたことがそのまま通用するので、そちらを参照してほしい。

補足:dvipdfmx での Base14 の埋込設定は何故ないのか

調べてみたところ、teTeX*10には Base14 の埋込設定が提供されていたようだ。(参考12

  • updmap の dvipdfmDownloadBase14 というオプションで既定を変更する。*11
  • dvipdfm_dl14.map、dvipdfm_ndl14.map というマップファイルで文書毎の設定を変更する。

TeX Live の updmap は teTeX のそれを受け継いでいるはずだが、dvipdfm(x) での埋込設定は削除されている。dvips/pdfTeX は残して dvipdfm(x) だけ落とす理由は見当たらないので、単純に需要が相対的に低いから落とされたのかも知れない。*12

*1OS 側のレポジトリが提供する TeX Live のパッケージの場合は本家と異なる方式かもしれないので、upfmsp の mn ページを見て確認しておこう。Debian 系は大丈夫のようだ。

*2フォントマップ設定で updmap を実行する場合と同じ。updmap-sys の実行には管理者権限が必要かも知れない。updmap-sys でない方)は各ユーザについての設定を変更する。

*3:既定はシステムにより異なるかも知れない。

*4:本家の TeX Live には IPA フォント自身が含まれているので確実に利用可能のはず。

*5hiraginokozukanorisawa については、実体の OpenType フォントファイルについて、マップファイルに記載されたファイル名でのリンクを予め作成しておく必要がある。

*6noEmbed の場合は、明朝→ Ryumin-LightゴシックGothicBBB-Medium であるが、それ以外では(マップファイル記載の)フォントファイル名のベース名となる。例えば、ipa の場合は、明朝→ipamゴシックipagPSPDF の変換ソフトウェアの設定で実体のフォントを当該のフォント名で参照できるようにしておくと、dvips で PDF を作成する際にも kanjiEmned の設定が活きることになる。

*7:dvips は不可能。

*8:実は updmap に dvipdfmDownloadBase14 というオプションが一応存在するのだがこの設定は無視されている。

*9:初稿では \pdfmapfile{=pdftex_dl14.map} としていたが、「=」なしの動作の方が意図とより合致するので省いた。でももしかしたら「=」が要る場合があるかも知れない。

*10:10年ほど前に、UNIXOS で最も普及していた TeX ディストリビューション

*11:前の脚注で書いたように、現在の updmap では dvipdfmDownloadBase14 は指定はできるが黙って無視される。

*12:updmap の実装は元々は sh スクリプトであったのが、Windows のサポートのため途中で Perl スクリプトに置き換えられた。恐らく、この時に落とされたのであろう。