レッスン 9

相互参照

このレッスンでは、図表やセクションなどの番号付けされた要素を参照する方法を学びます。

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

\label\ref

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

\RequirePackage{plautopatch}
\documentclass[dvipdfmx]{jlreq}

\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}よりも後ろに置くとどうなりますか?