マクロツイーター

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

Windows10の游フォントで\CIDしたい話

この辺りの話。

ヤヤコシイ話は抜きにしてとにかく方法を説明する。

①フツーのやり方

kanji-config-updmapでyu-win10をした上で、普通にjapanese-otfパッケージを使う。

\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{otf}
\begin{document}
\CID{1722}宴とか\CID{7968}宴とか\CID{20249}宴とか\ajSnowman
\ajMaruAlph{1}\ajKuroMaruAlph{1}\ajKakuAlph{1}\ajKuroKakuAlph{1}%
\ajMaru{12}\ajMaru{34}\ajMaru{56}%CID+10268
\end{document}

あるいは、pxchfonでyu-win10を指定する。

\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{otf}
\usepackage[yu-win10]{pxchfon}% 游フォント
\begin{document}% サンプルは前と同じ
\CID{1722}宴とか\CID{7968}宴とか\CID{20249}宴とか\ajSnowman
\ajMaruAlph{1}\ajKuroMaruAlph{1}\ajKakuAlph{1}\ajKuroKakuAlph{1}%
\ajMaru{12}\ajMaru{34}\ajMaru{56}
\end{document}

この場合、システムのToUnicode CMapを利用して「AJ1→Unicode」の変換を行った上でUnicodeでグリフが指定される。だから〈饗〉の異体字は区別されないし、「丸56」(CID+10268)のような「そもそもUnicodeにない字」は出力できない。それから、ToUnicode CMapに漏れがあるため、〈㉞〉(U+325E)や〈🅐〉(U+1F150)のように「実際にはUnicodeになるのにサポートされない」ような文字もある。

②pxchfonでunicodeしてみる

pxchfonパッケージでunicodeオプションを追加する。

\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{otf}
\usepackage[unicode,yu-win10]{pxchfon}% unicodeしてみる
\begin{document}% サンプルは前と同じ
\CID{1722}宴とか\CID{7968}宴とか\CID{20249}宴とか\ajSnowman
\ajMaruAlph{1}\ajKuroMaruAlph{1}\ajKakuAlph{1}\ajKuroKakuAlph{1}%
\ajMaru{12}\ajMaru{34}\ajMaru{56}
\end{document}

この場合、Unicodeでグリフ指定する点は同じであるが、「AJ1→Unicode」の変換をもう少し頑張る1ので多少マシになる。さらに、JIS90とJIS2004のフォント(TFM)を両方利用するので、漢字の異体字が「JIS90字形とJIS2004字形に限っては」正しく出力される。上の例だと〈饗〉の異体字について、JIS90字形の\CID{1722}JIS2004字形の\CID{7968}は想定の字形となるが、\CID{20249}はならない。

③裏技「GID指定」

実は、游フォントについては、「AJ1のCIDを2だけずらしたのがGID」という規則になっている2。pxchfonでは「GID指定グリフ出力」の機能があるので、これを組み合わせると、(ほぼ)全てが解決する。

pxchfonでglyphidを指定すると、GID指定グリフ出力のための\gidという命令が使えるようになる。例えば、「丸56」(CID+10268)を出力したい場合は、2だけずらして\gid{10270}とすればよい。

glyphidはエンジンがupLaTeXでかつunicodeが指定されている場合にのみ利用できる。また、グリフが全角幅であることを仮定するのでそうでない場合は出力が異常になることに注意。

\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{otf}
\usepackage[unicode,yu-win10,glyphid]{pxchfon}% glyphidしてみる
\begin{document}% うまくいかない文字を \gid に書き直す
\CID{1722}宴とか\CID{7968}宴とか\gid{20251}宴とか\ajSnowman
\ajMaruAlph{1}\ajKuroMaruAlph{1}\ajKakuAlph{1}\gid{11176}%
\ajMaru{12}\ajMaru{34}\gid{10270}
\end{document}

f:id:zrbabbler:20201010235624p:plain

まとめ

游フォントの無表情な☃もなかなかに素敵。


  1. bxjatoucsパッケージで規定する「AJ1→Unicode」変換と同等になる。

  2. ただし、AJ1-7のグリフ(CID+23058~23059)は後から追加された関係で、GIDは337ずれた23395~23396になっている。23060~23394および23397のGIDには「AJ1にないグリフ」が割り当てられている。