マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

新しい PXchfon についての何か (2)

前回の続き)
directunicode オプション(Unicode 直接指定)

Unicode 入力の和文フォント(OTF パッケージの \UTF 入力、および upTeX の直接入力)について、(u)pTeX の通常の設定では、Unicode の全ての文字が使えるわけではなく、Adobe-Japan1 のグリフ集合に対応する文字しか扱えない。((これは CMap の設定に起因する。directunicode 指定時は、CMap 設定として「Unicode 直接」という特殊な設定が適用される。))ところが pxchfon パッケージの directunicode というオプションを指定すると、全ての Unicode 文字が取り扱えるようになる。(0.6c 版で追加。)無論、実際に文字が出力されるかは使用するフォントがそのグリフを持っているかに依存する。*1

このオプションの適用範囲は、「OTF パッケージの横書きの Unicode 和文フォント(\UTF 入力に対応)」である。*2

少し有用性が解り難いオプションなので以下に例を示す。

\documentclass[a4paper]{jsarticle}
\usepackage{otf}
  % ※プリセット非指定の場合は alphabet が既定となることに注意
\usepackage[noalphabet]{pxchfon} % 欧文フォント置換無効
\setminchofont{HanaMinA.ttf} % 花園明朝A
\begin{document}
\UTF{618D}梵波提 賓頭盧頗羅墮 迦留陀夷 摩訶劫賓那 薄拘羅 %\UTF{3779}樓駄 如是等 諸大弟子
\end{document}

上の文書では 2 つの JIS 外の文字、〈憍〉(U+618D)と〈㝹〉(U+3779)を OTF パッケージを利用して入力している。ここで用いているフォント「花園明朝A」はこの両方の文字のグリフを持っている。ところがこれを組版すると、〈憍〉は正常に出力されるが〈㝹〉は欠けてしまう。

この理由は、〈憍〉は AJ1 に含まれる(CID 14552)のに対し〈㝹〉は含まれないからである。ここで、pxchfon パッケージの読込時に directunicode オプションを追加してみる。

\usepackage[noalphabet,directunicode]{pxchfon} %「Unicode 直接指定」有効

この状態で組版すると、どちらの文字も正常に出力される。

ちなみに、先の例では全ての明朝体が花園明朝になってしまうが、「通常(直接入力)はより高品質のフォントを使って、\UTF での入力だけ花園明朝にする」方が望ましいかも知れない。これを実現するには、次のように、適当なウェイトに「花園明朝」を割り当てた上で、「フォントを変更して \UTF を呼び出す」というマクロを定義すればよい。

\documentclass[a4paper]{jsarticle}
\usepackage[deluxe]{otf}% 多ウェイトにする
\usepackage[ipa,directunicode]{pxchfon}% IPAフォント使用
\setlightminchofont{HanaMinA.ttf}% 花園明朝A
% これで \mcfamily の \mdseries はIPA明朝だが \ltseries は花園明朝Aになる
\newcommand*{\UHM}[1]{{\mcfamily\ltseries\UTF{#1}}}% フォント切替付 \UTF
\pagestyle{empty}
\begin{document}
\UHM{618D}梵波提、賓頭盧頗羅墮、迦留陀夷、摩訶劫賓那、薄拘羅、
阿\UHM{3779}樓駄、如是等諸大弟子。
\end{document}

また、この機能を利用すると、フォントの外字領域(PUA)に定義された和文文字を利用できることを以前の記事で紹介した。次の例では MogaMincho フォントの U+E020 に収録されている〈𠮷〉(ツチ吉;U+20BB7)のグリフを出力している。

\documentclass[a4paper]{jsarticle}
\usepackage[deluxe]{otf}
\usepackage[moga-mobo,directunicode]{pxchfon}
\pagestyle{empty}
\begin{document}
\UTF{E020}野家な日常。
\end{document}

ところで、ttk 氏による(upTeX 用の)拡張が施された OTF パッケージでは(pTeX でも)\UTF 命令で BMP 外の Unicode 文字を入力することが可能になっている。MogaMincho では本来の符号位置の U+20BB7 にも〈𠮷〉が収録されているので、先の例で \UTF{20BB7} でも同じ出力が得られる。〈𠮷〉は AJ1 にある文字(CID 13706)なので directunicode は不要である。というより実は、残念ながら、directunicode オプションは BMP 外の文字には対応していないのである。*3

*1:さらに、標準で用意されている TFM はグリフが全角幅をもつことを前提としているので全角幅以外の文字は正しく出力されない。

*2:0.7 版において、dvipdfmx の隠し機能を使って縦書きにも対応したつもりであったが、「正規の縦書き CMap を指定したフォントと比べると垂直位置がずれてしまう」という重大な欠点が判明

*3:拡張版 OTF パッケージの VF の仕様に因る理由で対応が不可能である。