Hatena::ブログ(Diary)

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

2011-09-27

dvipdfmx で OpenType する件について (2)

前回の続き)

マップファイルの作成

dvipdfmx のマップの形式は実際に必要となる情報だけからなるので非常に単純である。

TFM名〉 〈エンコーディングファイル名〉 〈実フォントファイル名〉 [〈オプション〉]

先に示した pdfTeX のマップの内容をこの形式に直したファイルを作成する。

[mplus1p.map]
mplus1p-r-ly1--base a_6si6az mplus-1p-regular.ttf

この段階(ファイルが作業ディレクトリにある)で今までの作業が成功しているかを確認してみる。次のように「TeX レベルのフォント指定」を含む TeX 文書を用意する。*1(233 は文字〈é〉の LY1 での符号位置。)*2

[test.tex]
\documentclass{article}
\begin{document}
\font\testfont=mplus1p-r-ly1 \testfont
``Macros are pass{\char233} --- they're so mid-20th-century.''
\end{document}

これを dvipdfmx を用いて PDF に変換する。この時、先ほど作った mplus1p.map を -f オプションで読ませる。

latex test.tex
dvipdfmx -f mplus1p.map test.dvi

出力された test.pdf を見て正常であるか確かめよう。ビットマップになっていないかの確認も忘れずに。

f:id:zrbabbler:20110928020526p:image

ここまで成功だったら、残りの 6 つのフォントについて同様の作業を繰り返す。マップファイルは最終的に以下のような内容になるだろう。

[mplus1p.map]
mplus1p-a-ly1--base a_6si6az mplus-1p-thin.ttf
mplus1p-l-ly1--base a_6si6az mplus-1p-light.ttf
mplus1p-r-ly1--base a_6si6az mplus-1p-regular.ttf
mplus1p-m-ly1--base a_6si6az mplus-1p-medium.ttf
mplus1p-b-ly1--base a_6si6az mplus-1p-bold.ttf
mplus1p-h-ly1--base a_6si6az mplus-1p-heavy.ttf
mplus1p-c-ly1--base a_6si6az mplus-1p-black.ttf

各ファイルの配置

dvipdfmx のマップファイル以外は例の資料の 5.7 節に出てきているものなので、それと同様にすればよい。(「パッケージ名」を mplus1p とする。)

  • *.tfm → $LOCAL/fonts/tfm/public/mplus1p/
  • *.vf → $LOCAL/fonts/vf/public/mplus1p/
  • *.enc → $LOCAL/fonts/enc/dvips/mplus1p/*3

フォントファイル(*.ttf)については以下のように配置する。

後の方法について補足しておくと、一般的な OpenType フォント(*.otf/*.ttf)の場合、CFF グリフの場合は $LOCAL/fonts/opentype/ 以下、TrueType グリフの場合は $LOCAL/fonts/truetype/ 以下に配置する。(拡張子が .otf/.ttf であるかは関係ないことに注意。)*4

最後に、dvipdfmx のマップファイル mplus1p.map は以下のように配置する。

  • マップファイル(*.map)自身は $LOCAL/fonts/map/dvipdfmx/mplus1p/ に置く。
  • これだけでは、既定でこのマップが読み込まれるようにならず、*5そうさせるには「設定ファイル」にその為の記述が必要である。この辺りの仕様は記事「updmap はなぜ動くのか」において説明した。それに従うと、設定ファイル $TMF/dvipdfmx/config/dvipdfmx.cfg の末尾に
    f mplus1p.map
    
    を追記すればよい。

なお、例によって、TEXMF ツリーにファイルを追加した際には「必要ならば mktexlsr を実行する」が必要になる。

先ほどの test.tex を空のディレクトリに置き、そこで「latex test.tex」→「dvipdfmx test.dvi」(今度は -f なし)を実行して正しい PDF が生成されればここまでの作業は成功である。

(まだ続きます)

*1:ここでは「TeX 混じりの LaTeX 文書」にしたが、無論 plain TeX でも構わない。

*2LaTeX で通常用いられる \'e のような「アクセント命令」は NFSS の枠組を前提にしている。だから、この例のように「TeX レベルでフォントが変更されている」状況で用いると何が起こるか解らない。

*3:「dvips」であることに注意。

*4:「otfinfo -t」でテーブル一覧を表示し、中に「CFF 」があれば CFF グリフ、「glyf」があれば TrueType グリフである。なお、「拡張子が .ttf なら TrueType グリフ」は成立するが、逆は必ずしも成立しない。

*5-f オプションで明示指定した場合は読み込まれる。