マクロツイーター

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

pxjahyper パッケージ

機能追加した。

改めて説明すると、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}

注意すべきなのは、この \UxTeX に出力する部分では使えないということである。((無論、別に 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 なし)で変換可能になる。