pLaTeX縦書きでhyperrefパッケージを使うと、いくつか期待しない結果が生じてしまいます。その理由をおおざっぱに言うと、hyperref.styが文章論理構成をつかさどる各種マクロに対して、hookのようにひっかけて、PDFにおけるhyperlink textの機能を提供しているからです。
今回は、pLaTeX縦書きでhyperrefパッケージを使ったとき、目次において各種見出しに対するページ頁番号が横向きにひっくり返ってしまうことに対処する変更点を記します。
目次における各種見出しに対する頁番号の出力
汎用縦書きクラスファイルの目次において、各種見出しに対する頁番号が横向きにひっくり返らないようにするために、plext.styが提供する連数字コマンド\rensuji
をページ番号出力\thepage
にかぶせています。
tarticle.cls
\def\addcontentsline#1#2#3{%
\protected@write\@auxout
{\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
\@temptokena{\rensuji{\thepage}}}%
{\string\@writefile{#1}%
{\protect\contentsline{#2}{#3}{\the\@temptokena}}}%
}
ところがhyperrefパッケージを読みこむと、この\contentsline
コマンドを書き換えてしまいます。
hyperrefに対する\contentsline
の再定義
以下のような\contentsline
コマンドの再定義をして、\thepage
相当に\rensuji
をかぶせることで、期待した結果を得られます。
\RequirePackage[dvipdfmx, % draft,
bookmarks=true,
bookmarksnumbered=true,
% colorlinks=true,
setpagesize=false,
]{hyperref}[2012/11/06 v6.83m]
%% override \contentsline against hyperref.sty 2012/11/06 v6.83m
\def\contentsline#1#2#3#4{%
\begingroup
\Hy@safe@activestrue
\edef\x{\endgroup
\def\noexpand\Hy@tocdestname{#4}%
}\x
\ifx\Hy@tocdestname\ltx@empty
\csname l@#1\endcsname{#2}{\rensuji{#3}}%
\else
\ifcase\Hy@linktoc % none
\csname l@#1\endcsname{#2}{\rensuji{#3}}%
\or % section
\csname l@#1\endcsname{%
\hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
}{\rensuji{#3}}%
\or % page
\def\Hy@temp{#3}%
\ifx\Hy@temp\ltx@empty
\csname l@#1\endcsname{#2}{#3}%
\else
\csname l@#1\endcsname{{#2}}{%
\hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend
}%
\fi
\else % all
\def\Hy@temp{#3}%
\ifx\Hy@temp\ltx@empty
\csname l@#1\endcsname{%
\hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
}{}%
\else
\csname l@#1\endcsname{%
\hyper@linkstart{link}{\Hy@tocdestname}{#2}\hyper@linkend
}{%
\hyper@linkstart{link}{\Hy@tocdestname}{#3}\hyper@linkend
}%
\fi
\fi
\fi
}
\RequirePackage[dvipdfmx]{pxjahyper}[2012/05/27 v0.2]
以上です。
何かしらpLaTeXの縦書きクラスファイルを作成するときに、ご参考いただければ幸いです。