unicode オプションのここがスゴイ!
“AJ1 でない”フォントが使える
例えば、unicode 無しで源ノ明朝(Source Han Serif)を指定しようとすると……。
% pLaTeX文書 \documentclass[a4paper]{jsarticle} \usepackage[noalphabet]{pxchfon} \setminchofont[0]{SourceHanSerif-Light.ttc} \begin{document} {\TeX}言語危険、ダメゼッタイ! \end{document}
dvipdfmx で次のようなエラーが出て失敗する。*1
test.dvi -> test.pdf [1 Character collection mismatched: Font: Adobe-Identity-0 CMap: Adobe-Japan1-1 dvipdfmx:fatal: Inconsistent CMap specified for this font. Output file removed.
ところが、unicode 有りにすると……。
% pLaTeX文書 \documentclass[a4paper]{jsarticle} \usepackage[noalphabet,unicode]{pxchfon} \setminchofont[0]{SourceHanSerif-Light.ttc} \begin{document} {\TeX}言語危険、ダメゼッタイ! \end{document}
スゴイ!!!
※japanese-otf パッケージを使ったもう少し複雑な例を挙げておく。
% pLaTeX文書 \documentclass[a4paper]{jsarticle} \usepackage[deluxe]{otf} \usepackage[noalphabet,unicode]{pxchfon} \setminchofont[0]{SourceHanSerif-Medium.ttc}% 明朝・中字 \setboldminchofont[0]{SourceHanSerif-Heavy.ttc}% 明朝・太字 \usepackage{plext} \begin{document} \parbox{6zw}{\ajMaru{1}横組\ajLig{サンチーム}\\ {\TeX}は\textbf{アレ}、\\ {\ajSnowman}は\textbf{非アレ}。}% \quad \parbox<t>{6zw}{\ajMaru{2}縦組\ajLig{サンチーム}\\ {\TeX}は\textbf{アレ}、\\ {\ajSnowman}は\textbf{非アレ}。}% \end{document}
どんな Unicode 文字でも使える
※ただし全角に限る
japanese-otf パッケージの \UTF
命令や upLaTeX を用いると、任意の Unicode 文字が入力できる。ところが、文字によっては出力できないものが存在する。
例えば次の例では、BMP の全漢字を収録したフォント「花園明朝A」を指定しているにも関わらず、〈㝹〉(U+3779)の文字が出力できていない。
% pLaTeX文書 \documentclass[a4paper]{jsarticle} \usepackage{otf} \usepackage[noalphabet]{pxchfon} \setminchofont{HanaMinA.ttf} % 花園明朝A \begin{document} \UTF{618D}梵波提 賓頭盧頗羅墮 迦留陀夷 摩訶劫賓那 % 薄拘羅 阿\UTF{3779}樓駄 \end{document}
% upLaTeX文書, UTF-8 \documentclass[uplatex,a4paper]{jsarticle} \usepackage[noalphabet]{pxchfon} \setminchofont{HanaMinA.ttf} % 花園明朝A \begin{document} 憍梵波提 賓頭盧頗羅墮 迦留陀夷 摩訶劫賓那 % 薄拘羅 阿㝹樓駄 \end{document}
出力できない文字があるのには様々なヤヤコシイ理由がある。しかし、とにかく unicode 有りにしてみると……
% pLaTeX文書 \documentclass[a4paper]{jsarticle} \usepackage{otf} \usepackage[noalphabet,unicode]{pxchfon} \setminchofont{HanaMinA.ttf} % 花園明朝A \begin{document} \UTF{618D}梵波提 賓頭盧頗羅墮 迦留陀夷 摩訶劫賓那 % 薄拘羅 阿\UTF{3779}樓駄 \end{document}
% upLaTeX文書, UTF-8 \documentclass[uplatex,a4paper]{jsarticle} \usepackage[noalphabet,unicode]{pxchfon} \setminchofont{HanaMinA.ttf} % 花園明朝A \begin{document} 憍梵波提 賓頭盧頗羅墮 迦留陀夷 摩訶劫賓那 % 薄拘羅 阿㝹樓駄 \end{document}
スゴイ!!
ところが、このスゴイ unicode でも対処できないケースがある。例えば次の例では、ゆきだるま☃は出力できるが、アヒル🦆は出力できない、という結果になる。
% upLaTeX文書 \documentclass[uplatex,a4paper]{jsarticle} \usepackage[deluxe]{otf} \usepackage[noalphabet,unicode]{pxchfon} \setmarugothicfont{wlcmaru2004emoji.ttf} % 和田研中丸ゴシック \begin{document} 立てば{\mgfamily ☃}、% U+2603 SNOWMAN 座れば{\mgfamily 🦆}、% U+1F986 DUCK 歩く姿は{\TeX}のアレ。 \end{document}
これが失敗する理由は例によってヤヤコシイ。しかしこの問題にも対処法が存在する。次のように、\diruni
命令((\diruni
は“フォントを切り替える宣言型命令”である。従って、\bfseries
や \mgfamily
等と同様に、適用範囲をグループで囲ってその中で実行する、という使い方をする。\diruni
に対応する引数型命令 \textdiruni
も存在する。))を使うと……。
% upLaTeX文書 \documentclass[uplatex,a4paper]{jsarticle} \usepackage[deluxe]{otf} \usepackage[noalphabet,unicode]{pxchfon} \setmarugothicfont{wlcmaru2004emoji.ttf} % 和田研中丸ゴシック \begin{document} 立てば{\mgfamily ☃}、% U+2603 SNOWMAN 座れば{\mgfamily\diruni 🦆}、% U+1F986 DUCK 歩く姿は{\TeX}のアレ。 \end{document}
スバラシイ!!*2
TrueType フォントでも異体字切替が使える
japanese-otf パッケージや pxchfon パッケージには、漢字の字形を切り替えるための jis2004
というオプションが用意されている。jis2004
を指定しない場合は所謂“90JIS 字形”が使われる。
% pLaTeX文書 \documentclass[a4paper]{jsarticle} % 90JIS字形 \usepackage[kozuka-pr6n]{pxchfon}% 小塚フォント \begin{document} 葛餅で蓬餅で、かつ\textgt{煎餅}! \end{document}
対して、jis2004
を指定した場合は“2004JIS 字形”が使われる。((ここでは、japanese-otf と pxchfon の両方に効かせるため、グローバルオプションに jis2004
を入れている。))
% pLaTeX文書 \documentclass[a4paper,jis2004]{jsarticle} % 2004JIS字形 \usepackage[kozuka-pr6n]{pxchfon}% 小塚フォント \begin{document} 葛餅で蓬餅で、かつ\textgt{煎餅}! \end{document}
もし 90JIS 字形と 2004JIS 字形を混在させる必要がある場合は、\CID
命令を利用すればよい。
% pLaTeX文書 \documentclass[a4paper,jis2004]{jsarticle}% 既定は2004JIS字形 \usepackage{otf} \usepackage[kozuka-pr6n]{pxchfon}% 小塚フォント \begin{document} \CID{1481}城市か\CID{7652}飾区かで葛藤する。 \end{document}
ところが、japanese-otf や pxchfon がもつこの異体字切替の機能には重要な制限がある。それは、“AJ1 な OpenType フォント”(例えば、今までの例で使った「小塚明朝」)でないと正しく機能しない、ということである。
TrueType フォント*3の中にも異体字切替に対応したものは存在し、例えば「IPAex明朝」はその一つである。しかし、pxchfon で「IPAex明朝」を指定した場合、異体字切替が無効になってしまい、常に 2004JIS 字形が出力される。*4
% pLaTeX文書 \documentclass[a4paper]{jsarticle} % 90JIS字形 \usepackage[ipaex]{pxchfon}% IPAexフォント \begin{document} 葛餅で蓬餅で、かつ\textgt{煎餅}! \end{document}
しかし、この問題も unicode
で解決できる。unicode
有りの場合、フォントの方が対応していれば、異体字切替が有効になる。つまり……。
% pLaTeX文書 \documentclass[a4paper]{jsarticle} % 90JIS字形 \usepackage[ipaex,unicode]{pxchfon}% IPAexフォント \begin{document} 葛餅で蓬餅で、かつ\textgt{煎餅}! \end{document}
% pLaTeX文書 \documentclass[a4paper,jis2004]{jsarticle}% 既定は2004JIS字形 \usepackage{otf} \usepackage[ipaex,unicode]{pxchfon}% 小塚フォント \begin{document} \CID{1481}城市か\CID{7652}飾区かで葛藤する。 \end{document}
スゴイ!!
unicode オプションのここがダメ!
TeX Live 2017 では使えない。
unicode
オプションを使うには 20170918 版以降(※)の dvipdfmx が必要である。TeX Live 2017 の dvipdfmx はこれより古い 20170318 版なので unicode
指定を正常に扱うことができない。2017/09/18 以降の W32TeX の dvipdfmx であれば unicode
が使える。
※元々は「20170627 版以降」としていたが、この版にはバグがあるためサポート範囲から外して、修正後の 20170918 版以降を必須とした。
しかし、pxchfon では TeX Live 2017 に対する救済策として「unicode*
オプション」というものを用意している。これは「大体は unicode
と同じになるが一部はうまくいかない」という性質の暫定的な設定である。詳細については別の記事を参照してほしい。