ハイパーリンク(hyperref)

相互参照・引用・目次・URL を PDF 上のクリックできるリンク に変え、しおり(PDF のアウトライン)やタイトルなどのメタデータまで設定してくれるのが **hyperref** です。読み込むのは \usepackage{hyperref} の一行だけ。ただし ほぼ最後に読み込む という鉄則があり、リンクの色や枠、\href\url によるリンク作成、しおりの日本語化まで、押さえどころを順に見ていきます。

読み込みとその順序

使い方そのものは簡単で、プリアンブルに \usepackage{hyperref} と書くだけ。すると相互参照(\ref)、引用(\cite)、目次の項目、脚注などが 自動的にリンクになり、PDF ビューアでクリックすると該当箇所へ飛べるようになります。何も設定しなくても、文書内のあらゆる参照がリンクとして使えるわけです。

注意すべきは 読み込む位置 です。hyperref\ref\cite\section といった多くの命令を 内部で再定義 してリンク化します。そのため、同じ命令に手を加える他のパッケージより に読み込まないと、せっかくの再定義が上書きされてしまいます。経験則は明快で、**hyperref はプリアンブルのほぼ最後に置く**(ほとんどのパッケージの後)。

ただし「最後」には 数少ない例外 があります。代表が **cleveref** で、これは hyperref の定義を検出して動くため、**必ず hyperref の後** に読み込みます。varioref も併用するなら variorefhyperrefcleveref の順です。順序を誤ると、警告も出ないまま参照が壊れることがあります(cleveref の詳細は相互参照のページを参照)。

latex
% プリアンブルのほぼ最後で読み込む / load almost last
\usepackage{graphicx}
\usepackage{amsmath}
% ... 他のパッケージ ... / ... other packages ...
\usepackage{hyperref}   % ほぼ最後 / almost last
\usepackage{cleveref}   % hyperref の後(数少ない例外)/ after hyperref (an exception)

既定では、リンクは文字を 色付きの枠(ボーダー) で囲んで示します。画面では分かりやすいものの、印刷すると枠だけが残って見栄えが悪く、好まれないことが多い表示です。見た目は読み込み時のオプション、または **\hypersetup{...}** で キー=値, で並べて設定します。\hypersetup はプリアンブルのどこに書いても構いません。

最もよく使うのが **colorlinks=true です。これにすると 枠をやめ、文字そのものに色 を付けます(印刷でも崩れず、画面でも読みやすい)。色は種類ごとに指定でき、linkcolor**(\ref などの内部リンク)、**citecolor(文献引用)、urlcolor**(\url\href の URL)、**filecolor**(ローカルファイルへのリンク)を分けて設定します。既定色は順に赤・緑・マゼンタ・シアンです。

印刷用には **hidelinks が便利です。色も枠も付けず、リンクは見た目には完全に消えますが、クリックできる機能だけは残ります。逆に、枠の色をまとめて変えたいときは allbordercolors** で全ボーダー色を一括指定できます(colorlinks=false の枠表示のとき)。

オプション効果
colorlinks=true枠をやめ、リンクの文字に色を付ける
hidelinks色も枠もなし。クリックは可能(印刷向け)
linkcolor内部リンク(\ref など)の色(既定: 赤)
citecolor文献引用の色(既定: 緑)
urlcolorURL リンクの色(既定: マゼンタ)
filecolorローカルファイルへのリンクの色(既定: シアン)
allbordercolorsすべての枠(ボーダー)の色を一括指定

外部 URL へのリンクは二つの命令で作ります。**\href{URL}{表示文字列} は、好きな文字列にリンクを張ります(「\href{https://www.ctan.org/}{CTAN}」と書けば「CTAN」という語がリンクになる)。一方 \url{URL} は、URL そのものを等幅で組版しつつ、同時にリンク** にします。URL を本文に見せたいときは \url、別の語に隠したいときは \href と使い分けます。

URL には %#~_ など LaTeX の特殊文字が含まれがちですが、\url\hrefURL 部分ではそれらをそのまま書ける のが利点です(エスケープ不要。ただし \url の引数では一部の制約があります)。URL を等幅で見せたいがリンクは張りたくない、というときは **\nolinkurl{URL}** を使います(\url と同じ組版で、リンクなし)。

latex
詳しくは\href{https://www.ctan.org/pkg/hyperref}{hyperref のページ}を参照。
% 「hyperref のページ」がリンクになる / the words become the link

ダウンロードは \url{https://www.ctan.org/} から。
% URL がそのまま組版され、かつリンクになる / URL is typeset and linked

リンクなしで URL を見せる: \nolinkurl{https://example.com/a_b#c}
% 等幅で表示、リンクは張らない / monospaced, no link

PDF のメタデータ

hyperref は、PDF の 文書情報(メタデータ) も設定します。これは PDF ビューアの「文書のプロパティ」に表示され、検索やライブラリ管理でも使われる情報です。\hypersetup で次のキーを指定します — **pdftitle(タイトル)、pdfauthor(著者)、pdfsubject(サブタイトル・主題)、pdfkeywords**(キーワード)。

値にカンマや等号を含めるとキーの区切りと衝突するので、値は **波括弧 {} で囲む** のが安全です(例: pdftitle={線形代数の基礎})。なお、本文のタイトル(\title)とは別物で、メタデータには反映されません。両者を一致させたいときは手で同じ文字列を書くか、pdfusetitle のような仕組みを使います。

しおり(PDF のアウトライン)

しおり(bookmarks / アウトライン) は、PDF ビューアの横に出る折りたためる見出しの一覧で、長い文書のナビゲーションに欠かせません。hyperref は文書の 章・節などの見出しから自動でしおりを生成 します(bookmarks=true が既定)。節番号もしおりに含めたいときは **bookmarksnumbered=true、最初からツリーを開いておきたいときは bookmarksopen=true** を指定します。

より確実にしおりを扱うために、**bookmark** パッケージ(hyperref の後に読み込む)を併用する方法があります。これは hyperref の古いしおり生成コードを置き換え、しおりの スタイルや色 を設定できるようにし、.out 補助ファイルの扱いを安定させます。\bookmarksetup{...} で挙動を細かく調整できます。複雑な文書でしおりが乱れるときの定番の対処です。

日本語のしおりと文字化け対策

しおりやメタデータは PDF の文字列として書き込まれるため、日本語(CJK)を入れると文字化け することがあります。鍵は Unicode で書き出す ことです。現代のエンジン(LuaLaTeX / XeLaTeX)では unicode が既定で有効なので、ふつうは追加設定なしでも日本語のしおりが正しく出ます。明示するなら \usepackage[unicode]{hyperref}、あるいは \hypersetup{unicode} です。

pLaTeX / upLaTeX + dvipdfmx の従来環境では、hyperref\usepackage[dvipdfmx]{hyperref} のように読み込んだうえで、**pxjahyper** パッケージを併用するのが定番です。これは (u)pLaTeX 環境で日本語のしおりを文字化けなく作るためのもので、TeX Live に含まれます。エンジンによっては内部コードに応じて出力を Unicode に変換する設定(pdfencoding=auto 相当の処理)を補助します。

なお pdfencoding=auto は、文字列が ASCII(ユニコードエンジンでは ASCII の範囲)に収まればそのまま、収まらなければ Unicode に切り替える、という自動判定のオプションです(主に pdfTeX 系向け。Unicode エンジンでは既定で Unicode のため通常は不要)。迷ったら、LuaLaTeX なら追加設定なし、**(u)pLaTeX なら pxjahyper** と覚えておけば足ります。

document.tex
% --- pLaTeX / upLaTeX + dvipdfmx の場合 / for pLaTeX-upLaTeX + dvipdfmx ---
\usepackage[dvipdfmx]{hyperref}
\usepackage{pxjahyper}   % 日本語しおりの文字化けを防ぐ / fix Japanese bookmarks

% --- LuaLaTeX の場合は unicode が既定 / on LuaLaTeX, unicode is the default ---
% \usepackage{hyperref}

hyperref が足す参照命令 — \autoref と \nameref

hyperref を読み込むと、相互参照を助ける二つの命令も使えるようになります。**\autoref{key}** は、\ref の代わりに使い、参照先の種類に応じて 「図」「節」などの語を自動で前置 し(節なら「section 3.4」など)、全体をリンクにします。前置きの語は \figureautorefname\sectionautorefname などを再定義して変更でき、これで日本語化も行います。

もう一つの **\nameref{key} は、番号ではなく参照先の 見出しの文字列そのもの** を差し込みます(\section{はじめに} の名札を引けば「はじめに」というタイトルが出ます)。番号ではなく題名で参照したいときに使います。これら参照系の命令の全体像(\ref\eqref\cref など)は、相互参照のページで詳しく扱っています。

まとめた設定例

実務でよく使う設定をまとめると次のようになります。colorlinks=true で枠をやめて文字を色付けし、種類ごとに色を分け、bookmarksnumbered で番号付きのしおりを作り、メタデータも設定しています。印刷主体なら colorlinks=true の行を hidelinks に置き換えれば、リンクは見えなくなりクリック機能だけが残ります。

latex
\usepackage{hyperref}
\hypersetup{
  colorlinks=true,        % 枠ではなく文字に色 / color text, not boxes
  linkcolor=blue,         % 内部リンク / internal links
  citecolor=teal,         % 文献引用 / citations
  urlcolor=magenta,       % URL
  bookmarksnumbered=true, % しおりに節番号 / numbered bookmarks
  pdftitle={線形代数の基礎},
  pdfauthor={山田 太郎},
  pdfsubject={講義ノート},
  pdfkeywords={LaTeX, 線形代数, ベクトル空間},
}
% 印刷向けなら colorlinks の行を hidelinks に置き換える
% for print, swap the colorlinks line for: hidelinks