例えば、MogaMincho フォントでは、U+E020 に〈𠮷〉(ツチ吉;U+20BB7*2)があるのでこれを利用したいとする。OTF パッケージと PXchfon パッケージを使うことにすると、次のようにすればできそうな気がする。
\documentclass[a4paper]{jsarticle} \usepackage{pxchfon} \usepackage{otf} \setminchofont[0]{mogam.ttc} % MogaMincho \begin{document} \UTF{E020}野家な日常。 \end{document}
残念ながらこれは失敗する。次のような警告が出て、*3結果の PDF では〈𠮷〉が notdef グリフに化けてしまう。
** WARNING ** No character mapping available. CMap name: UniJIS-UTF16-H input str: <e0>
これが上手くいかない理由は複雑で説明が難しいので、ここでは「dvipdfmx の処理では途中に Adobe-Japan1 への変換を経由するからそこにない文字は扱えない」*4とだけ言っておく。
しかし、実はこの制限は(横書きに限れば)回避することができる。やはり詳細は略すが、フォントマップ設定でエンコーディング指定を通常の CMap (2000JIS なら UniJIS-UTF16-H、2004JIS なら UniJIS2004-UTF16-H)の代わりに「Unicode 直接処理」*5を表す「unicode
」にすればよい。今の場合、対象となる原メトリック JFM は otf-ujmr-h なので、これに対するマップ行を直接記述することにする。マップ行の記述は pxbase パッケージの \dvipdfmxmapline
命令で行える。
\documentclass[a4paper]{jsarticle} \usepackage{pxbase} \usepackage{otf} \dvipdfmxmapline{otf-ujmr-h unicode :0:mogam.ttc} \begin{document} \UTF{E020}野家な日常。 \end{document}
PXchfon パッケージを改訂(v0.6c)して、directunicode
というオプションで「Unicode 直接」を指定する機能を試験的に実装した。
- PXchfon パッケージ (GitHub/zr-tex8r)
\documentclass[a4paper]{jsarticle} \usepackage[directunicode,moga-mobo]{pxchfon} \usepackage[jis2004]{otf} % 2004JIS 字形を既定とする \begin{document} % U+E211 は 2000JIS 字形の〈葛〉 \rmfamily それはまるで葛飾区か\UTF{E211}城市のような。\par \gtfamily それはまるで葛飾区か\UTF{E211}城市のような。\par \end{document}
オプション moga-mobo
は MogaMincho + MogaGothic + MoboGothic の組み合わせからなるプリセットで、これに対しては OTF パッケージ側の jis2004 オプションが有効なので、既定は 2004JIS 字形になる。*6MogaMincho は U+E2xx の位置に 2000JIS 字形のグリフを収録しているので、directunicode
指定を利用してそれを呼び出している。
なお、PXchfon は、この数時間前に v0.6b をリリースしているのだが、そちらについての話はまた後で。
*「ところで欧文の場合は?」
ZR「OpenType フォントの PUA にある文字を dvipdfmx で使いたい?」
*「そう」
ZR「とすると、論理的帰結として、あなたは『OpenType フォントを dvipdfmx で使いたい』と思っていることになる」
*「ヒェーーーー!」
(OpenType フォントを LaTeX で欧文フォントとして用いる方法を会得しているならば、LaTeX は特に PUA を特別扱いしない*7ので、その方法がそのまま PUA の文字にも通用します。)
*1:もちろん、「全角幅でない和文 TFM/VF を作る」能力のある人についてはその限りでないが、そういう人はこの記事を読む必要がないだろう。
*2:MogaMincho では BMP のみに対応のソフトウェアで使用する際の便宜のために BMP 外文字を PUA 領域にも重複して収録している。
*3:他にも警告が出るが、これは MogaMincho を使う限り必ず出るもので無視して構わない。
*4:これは OTF パッケージとは関係がない。標準の和文フォントも同じである。
*6:つまり、Moga90Mincho 等でなく MogaMincho 等が選ばれるということ。CID 対応フォントの場合と異なり、実フォントを切り替えている。