hyperref.styはLaTeXの\ref, \citeなどをPDFのハイパーリンクに変換し、\sectionなどをPDFのしおり(bookmark)に変換するパッケージです。hyperrefを日本語pLaTeXと共に使うときに知っていると便利なことを、hyperrefのマニュアルに書かれていないことを中心にまとめてみました。これはhyperrefを使って作ったPDFのサンプルです。パッケージオプションの指定は

\usepackage[dvips, a4paper, bookmarks, bookmarksopen, bookmarksnumbered, pdfstartview={FitBH -32768}, pdftitle={線形代数だけで理解する代数幾何符号}, pdfauthor={松本 隆太郎}]{hyperref}

となっています。 このページの記述はpLaTeX2eとdvipsを使ってPSを作り, Adobe Acrobat Distillerを使ってPDFを使うことを前提にしています。gsでPDFを作る場合も同じ方法で大丈夫かどうかは確認していません。 また、今のところWindowsのAcrobat Readerは漢字を含むしおりを表示できるのに、 UNIXのReaderは表示できません。Macに関してはわかりません。

そもそもコンパイルできない

hyperref.styのバージョンによってはそもそも日本語が存在するとエラーになるバージョンがあります。これを書いている時点での最新版6.70では日本語も問題無く処理できるので、コンパイルできない場合はhyperrefのバージョンを最新版に上げて下さい。hyperrefはCTANのmacros/latex/contrib/supported/hyperrefにあります。

しおり(bookmark)の日本語が文字化けする

しおりの文字に日本語を含める場合Unicodeで書く必要があり、文字列の先頭に16進数で fe ff を付ける必要があると、Adobeのpdfmark Reference Manualに書いてあります。このため、hyperrefでしおりを作るようにパッケージオプションで指定してPSファイルを作り、Acrobat DistillerでPDFに変換すると、しおりの部分が文字化けして読めません。しおりに出て来る文字列は "/Title (文字列)" という形で現れるので、このような文字列をUnicodeに変換するperlスクリプトを作りました。dvipsの出力をこのスクリプトで変換したあとAcrobat Distillerで変換するとしおりが文字化けしません。スクリプトはUNIX上で動作確認していますが、他のOSでも動くと思います。このスクリプトの実行にはperl5.8以降が必要です。Windows及びMacintosh用のperlの実行ファイルはここから入手できます。perlはjperlである必要はありません。第一引数で入力ファイルの漢字コードがEUCまたはシフトJISのどちらでであるか指定できます。Perl 5.8への対応や漢字コード切替え機能は土村 展之氏によります。
また、同様の機能を持つC言語とtclで書かれたプログラムを岡村先生がこちらで公開されています。

しおりに現れる文字列がhyperref.styによって不適切に変換された場合は、\section{\texorpdfstring{TeXのための文字列}{PDFのしおりの文字列}}と書くことでしおりに現れる章の名前を制御できます。

文書情報の設定

Acrobat Readerで「ファイル」から「文書情報」を選択すると「タイトル」や「著者」の欄がありますが、これを設定するには、パッケージオプションにpdfauthor={著者名}, pdftitle={タイトル}と指定すればOKです。 2007年1月に黒木裕介氏からサブタイトルとキーワードにある日本語も変換するパッチをいただき、PDFファイルのサブタイトルとキーワードに対応しました。

表示の仕方

文字がたくさん書いてありWeb上に置くPDFを作るときは、字が小さすぎて読めなくならないように、文書が横に欠けない範囲でなるべく拡大して表示されるようにPDFを設定することが望ましいと思いますが、これはパッケージオプションにpdfstartview={FitBH -32768}と書くことで実現できます。このときの表示のされかたはAcrobat Readerで「表示 (View)」から「描画領域の幅に合わせる (Fit Visible)」を選んだときと同じになります。

natbib.sty

番号で文献を引用するときに [2,1,3] のような引用を [1--3] のように直してくれるcite.sty, citesort.sty および引用の形式を「Matsumoto (1998)」のように「著者名 (年)」の形式に直す様々なパッケージは大抵hyperrefとは共存できません。 しかし、上のような機能はhyperrefと共存できるように工夫されているnatbib.styで実現できます。natbib.styはCTANのmacros/latex/contrib/supported/natbibから入手できます。natbibはchicago.bstなどの「著者名-年」形式 (author-year形式)で文献を引用する為のほかのBiBTeX用スタイルファイルとも一緒に使うことができます。
しかし、hyperrefと共用しないときは[2,1,3]のような引用を[1--3]のようにまとめてくれますが、hyperrefと一緒に使うときは文献[2]にハイパーリンクを張るために[2,1,3]を[1,2,3]にしかしてくれません。

謝辞

このホームページはニュースグループfj.comp.texhaxにおける2000年1月ごろの議論を参考にさせていただいています。参考にした記事のMessage-IDは以下の通りです。

<apj-1401000433550001@ochanews.ocha.ac.jp>
<m3vh4vxu88.fsf@appi2.appi.keio.ac.jp>
<85v3nl$cp4$1@news.riken.go.jp>
<20000118050438T.hase@v001.vaio.ne.jp>
<apj-1801002043140001@ochanews.ocha.ac.jp>
<apj-1801002047270001@ochanews.ocha.ac.jp>
<apj-2001000057140001@ochanews.ocha.ac.jp>
<87hqgs$n8n$1@news.ecc.u-tokyo.ac.jp>
<87ttp8$ak2$1@inb.m.ecl.ntt.co.jp>

余談

僕はPDFのしおりに日本語を含める方法をgooInfoseekで探してもわからなかったので、結構苦労して調べたら、その後既にfj.comp.texhaxでこのことが明らかにされていることに気付きちょっとガクッとした。しかし、Unicodeを生で16進表現などをせずにPostScriptに書き込むと問題が生じることがあることは、fj.comp.texhaxの過去の記事を読むことですぐに気付くことができて助かった。
その後、hyperrefに関して僕と同じようなことを調べている人が僕と同じような作業を繰り返さなくても済むように、PDFのしおりに日本語を含める方法などhyperrefを使う際の小技をここにまとめたが、主な話題であるしおりに日本語を書く方法を既に岡村先生がまとめられているのに気付いてまたガクッとした。

TeXからPS及びPDFを作るときのコツに戻る

松本 隆太郎
感想コメントなどはEmail Addressに送ってください。
最終更新: 2006年5月30日

参考文献
以上の文献はここから入手可能。