pxchfon の新しい機能に関する何か
先日、pxchfon パッケージの 0.7e 版を GitHub にアップロードした。
- PXchfon パッケージ(GitHub:zr-tex8r)
実は、CTAN には同じ版を 5 月にアップロードしている。そのため TeX Live 2015 に含まれる pxcjfon はこの版になっている。W32TeX は GitHub へのアップロードに伴って更新された。ここでは 0.7e 版の新しい機能について簡単に紹介する。
プリセットの種類
プリセットのオプション(ipaex や kozuka-pr6n)の種類について、luatexja-preset パッケージでサポートされているものは pxchfon でもサポートするようにした。例えば、yu-win、yu-osx(游フォント)等が追加されている。
なお、XeLaTeX 用の zxjafont パッケージについても、同様の改修を施した 0.3 版をリリースした。
ファイルプリセット機能
「ファイルプリセット機能」とは TeX Live 用のマップファイルを利用して“文書中で”フォントマップを一括指定するためのものである。従って、まずは TeX Live のフォントマップファイルについて説明する。
TeX Live においては、pTeX 系の標準和文フォントにマップするフォントの設定を kanji-config-updmap というコマンドで設定できる(参照)。例えば、次のコマンドを(Windows 8.1 で)実行すると、標準の和文フォントとして游フォントが使われるようになる。
kanji-config-updmap yu-win
他にも ipaex、ms、kozuka-pr6n 等の“ファミリ”値が指定できる。この設定コマンドの動作原理は次のようである。まず、yu-win などの各々のファミリ値に対応して次の 4 つの(dvipdfmx 用の)マップファイルが TeX Live 配布物中に用意されている。
- ptex-yu-win.map
- otf-yu-win.map
- uptex-yu-win.map
- otf-up-yu-win.map
そして、「kanji-config-updmap yu-win
」が実行されると、dvipdfmx が読む既定のマップファイルに含まれる標準和文フォントに関する設定内容をこの 4 つのファイルを結合したものに一致させるのである。*1これにより、標準和文フォントのマップ先が游フォントになる。
このように、ファミリ値に応じてマップファイルが存在することが前提になっているため、これらを直接指定ことで使用するファミリを“一時的に”変えることができる。例えば、普段は yu-win にしているが一時的に特定の pTeX 文書(some.tex)で ms を使いたい場合は、それに対する dvipdfmx の実行の際に「ms に対応するマップファイル」の読込を指示すればよい。*2
dvipdfmx -f ptex-ms.map -f otf-ms.map some.dvi
この方式の指示を“文書内で行う”のが pxchfon の「ファイルプリセット機能」である。使い方は、次のように、パッケージオプションとして、+<ファミリ名>
を指定する。
\usepackage[+ms]{pxchfon}
これで、その文書に対する dvipdfmx の処理では、上記のコマンドの実行と同じように、ptex-ms.map と otf-ms.map が*3読み込まれて「一時的に標準和文フォント設定が変更」されたことになる。
ただし実は、現時点で TeX Live で有効なファミリ値については全て、pxchfon 自体のプリセット(こちらは +
を付けない)が同じ名前で用意されていて、例えば、+ms
の指定は ms
と同じである。だからこの機能の必要性は薄いわけであるが、例えば、「kanji-config-updmap での有効なファミリ値の種類が増えた」「自分で新しいファミリ値を新設した*4」という場合には有用であると思われる。
\usefontmapfile、\usefontmapline
\usefontmapfile{<マップファイル名>}
:[命令] 指定のdvipdfmx 用のマップファイルの読込を指示する。\usefontmapline{<マップ行>}
:[命令] dvipdfmx のマップ行を直接指定して、その読込を指示する。
それぞれ pdfTeX の \pdfmapfile
と \pdfmapline
プリミティブの機能を dvipdfmx に持ち込んだもの。「マップ行を書かなくて済むようにする」ための pxchfon パッケージにこんな命令が増えるのはアレなんだが、まあアレなので……。((内部では結局 \AtBeginDvi{\special{pdf:mapfile ...}}
に相当することを行っている。ただし、everypage オプション指定の場合は毎ページに出力される(だから DVI のページ抽出をしても大丈夫)という“特典”もある。))