レッスン 9

相互参照

This lesson shows how to refer to numbered elements in a document, like figures, tables and sections.

ある程度以上の長さの文書を作成する場合,番号の振られたコンテンツ(例えば図表や数式)への参照をしたいということがあります.そのようなとき,LaTeX は自動で正しい番号を挿入することができます.ただし,そのためには少しだけ準備をする必要があります.

\label\ref

まず LaTeX に番号を覚えてもらうためにラベルを貼り,そしてそれとは別の場所でそのラベルを参照します.

\RequirePackage{plautopatch}
\documentclass{jsarticle}

\begin{document}
はじめまして!

これがはじめての文書です.

\section{最初のセクションの見出し}

最初のセクションのテキスト.

\subsection{最初のセクションのサブセクション}
\label{subsec:ラベル1}

2つ目のセクションのテキスト.
\begin{equation}
  e^{i\pi}+1 = 0
\label{eq:ラベル2}
\end{equation}

サブセクション\ref{subsec:ラベル1}には式\ref{eq:ラベル2}があります.
\end{document}

上の例では \subsection の直後と equation 環境の中で \label コマンドが2回使われています.これらは最後の文に出てくる2つの \ref コマンドと対応付けられています.LaTeX はタイプセットを行う際に,ラベルの情報を補助ファイル(aux ファイル)に保存します.1つ目の \label{subsec:ラベル1} のところでは LaTeX はサブセクションの内部であることを認識し,そのサブセクションの情報を保存します.同様に2つ目の \label{eq:ラベル2} のところでは LaTeX は最も内側にある環境が equation であることを認識し,その式の情報を保存します.こうしたラベルを参照しようとしたとき,LaTeX は補助ファイルから保存した情報を取り出します.

なお上記ラベルの subsec:eq: の部分は LaTeX が利用するわけではありません.LaTeX は単に直近に処理したものが何であるかを認識しているだけです.しかし,このようにラベルの種別を明示しておくと,著者自身が何のラベルかを覚えておくのに役立ちます.

でき上がった PDF で,参照を行った箇所に太字の ?? が表示されることがあります.これは1回目のタイプセットではラベルの情報がまだ補助ファイルに保存されていないような場合に起こります.もう一度タイプセットを行うと,すべての番号が表示されるようになるはずです.(通常,文書の作成時には LaTeX によるタイプセット処理は何度も行うので,実用上このことが作業の妨げになることはありません.)

なお,英語の文書で参照を行うときにはしばしば Subsection~\ref{subsec:label} のように \ref の直前ではチルダ (~) が用いられます.これは Subsection の文字列とその番号の間に改行が入らないようにするためです.LaTeX ではチルダは改行の起こらないスペース(改行禁止空白)を意味します.

\label を置く位置

\label コマンドは常に直前の「番号が付くもの」を参照します(セクション,式,フロートなど).つまり,\label コマンドは常に参照したいものよりも後ろに置かなければなりません.とりわけフロートを作る際においては \label コマンドは必ず \caption コマンドよりも後ろかつ当該フロート環境の内部(もしくは \caption の引数の中でも構いません)で使用する必要があります.

練習問題

上のコード例にさらに番号が付く構造(セクション,サブセクション,順序付きリスト)を追加し,\label コマンドが機能するために何度タイプセットが必要かを確かめてみましょう.

フロート要素を追加し,\label コマンドを \caption コマンドよりで使用するとどうなるでしょうか? 結果を予想できますか?

数式に付ける \label\end{equation} よりも後ろに置くとどうなりますか?