機能追加した。
- PXjahyper パッケージ (github/zr-tex8r)
改めて説明すると、pxjahyper パッケージは以下の機能を提供するパッケージである。
- 例の tounicode な special で勝手に正しいのを出してくれる。
- PDF 文字列の入力中で「文字命令」やリガチャを使っても大丈夫にする。
- jsarticle で使うと PDF の用紙サイズが変になるのを何とかする。
これらの機能はパッケージを単に読むだけで既に有効になっている。
もう少し複雑な例を挙げてみる。
% upLaTeX 文書 \documentclass[uplatex]{jsarticle} \usepackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true]{hyperref} \usepackage{pxjahyper} %**後はhyperrefとは無関係** \usepackage[T1]{fontenc} \usepackage{textcomp} \usepackage{lmodern} \begin{document} \section{G\"odel哲学の量子Fa\c{c}ade解釈への批判 ---主にGro{\ss}の統一単子{Z\texttwosuperior}の立場から} 中身なんてあるわけないだろ。 \end{doc<pent}
ここでプリアンブルの後ろのフォントやエンコーディングの設定は、文書中の節見出しの文字列を「TeX で」まともに出すために行っている。pxjahyper が効いているので、PDF のしおりでも正しい文字列が出力されている。
同じ例を pLaTeX でやろうとすると、JIS 基本漢字の中には〈ö〉とか〈²〉とかの文字がないので、これらの文字が(しおりで)落ちてしまう。どうしても pLaTeX で処理する必要があるという場合は、角藤氏による out2uni フィルタを用いる方法がある。この場合、pxjahyper のオプションに out2uni を指定する。(この文書のファイル名を sample.tex とする。)
% pLaTeX 文書 \documentclass{jsarticle} \usepackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true]{hyperref} \usepackage[out2uni]{pxjahyper} %**後はhyperrefとは無関係** \usepackage[T1]{fontenc} \usepackage{textcomp} \usepackage{lmodern} \begin{document} \section{G\"odel哲学の量子Fa\c{c}ade解釈への批判 ---主にGro{\ss}の統一単子{Z\texttwosuperior}の立場から} 中身なんてあるわけないだろ。 \end{document}
コンパイル手順は以下のようにする。まず「platex sample
」を必要な回数繰り返した後で、「out2uni sample.out
」(pTeX の入力漢字コードが SJIS の場合((入力漢字コードが EUC ならば -e
オプションを付ける。UTF-8 には対応してないので、この場合は out2uni を実行する前に sample.out を SJIS に漢字コード変換するという手順を入れる。なお、「入力漢字コード」とは pTeX の -kanji
の値のことである。自動判定が効いている場合は、実際の文書の漢字コードとは異なるかもしれない。)))を 1 回実行して(これにより sample.out の内容が書き換えられる)、その後「platex sample
」を 1 回だけ実行して、最後に「dvipdfmx sample
」を実行する。上手くいけば、先の upLaTeX 文書と同じように、しおりに正しい文字列が表示されるはずである。
追加した機能の一つに、PDF 文字列中のコード値入力がある。次のように、\Ux
命令を用いる。
\documentclass[uplatex]{jsarticle} \usepackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true]{hyperref} \usepackage{pxjahyper} %**後はhyperrefとは無関係** \usepackage[T1]{fontenc} \usepackage{textcomp} \usepackage{lmodern} \begin{document} \section{G\"odel哲学の量子Fa\c{c}ade解釈への批判 ---主にGro{\ss}の特殊単子 % U+207A : SUPERSCRIPT PLUS SIGN \texorpdfstring{$Z^{2+}$}{Z\texttwosuperior\Ux{207A}}% の立場から} 中身なんてあるわけないだろ。 \end{document}
注意すべきなのは、この \Ux
は TeX に出力する部分では使えないということである。((無論、別に TeX 出力用の \Ux
が提供されているならば別であるが。))pLaTeX でも、out2uni 指定時には利用可能である。
ところで、OTF パッケージの \UTF
命令は元々 PDF 文字列の中では out2uni での処理に適した出力を行う。しかし、upLaTeX の場合は直接(out2uni なしで)変換できた方が好都合である。従って、pxjahyper パッケージでは、「PDF 文字列中の \UTF
」は \Ux
と同じ動作をするように変更されている。
\documentclass{jsarticle} %(*) %\documentclass[uplatex]{jsarticle} %(**) \usepackage{otf} \usepackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true]{hyperref} %\usepackage{pxjahyper} %(**) \begin{document} \section{書評『ノルウェイの森\UTF{9DD7}外』} おなかすいたー。 \end{document}
上の文書(pxjahyper 不使用)は platex + dvipdfmx + out2uni で PDF に変換すると正しいしおり(「森鷗外」を含む)が出力される。(*)を無効、(**)を有効にすると uplatex + dvipdfmx (out2uni なし)で変換可能になる。