27.9 相互参照と文献

文書では,よく,「2式 (1), (2) から」などと,数式などを文書中の別の部分で参照することがあります.ソース中にこのように直接番号を書いてもいいですが,それだと数式が増えて番号がズレたときに全部手動で直さなくてはならず,大変です.
LaTeX では,数式などにラベルをつけて,ソース中ではそのラベルを指定しておけば,番号つけを自動で行ってくれる仕組みがあります.本節ではこれについて説明します.

数式などの参照

節番号・数式などの参照を行うには,まずその参照したいところで \label{ … } コマンドでラベルを割り当てます.ラベル名は(区別できればいいので)比較的自由につけられますが,「数式は eq: で始める」「節は sec: で始める」などの自分なりのルールを作っておくと後からわかり易くなります.
\label でラベルをつけた節は,\ref{ … } の引数にそのラベルを与えることにより,引用することができます.

  • 数式の場合は,\ref{ … } を使うと数式番号の前後の () は自分で入力しないといけません.amsmath パッケージでは,括弧まで自動出力される \eqref{ … } が用意されています.
  • \pageref{ … } では,節番号や数式番号の代わりに,そこのページ番号が出力されます.

以下が具体例となります:

第\ref{sec:pre}節では…….この節は\pageref{sec:pre}ページから開始する.
一方,第\ref{sec:main}節では…….
\section{序論}
\label{sec:pre}
次の式は非常に有名である:
\begin{equation}
 e^{i\pi}=-1 \label{eq:euler}
\end{equation}
\pageref{eq:euler}ページにある式\eqref{eq:euler}は
Eulerの公式と呼ばれている.
まずこの式の導出を\ref{ssec:test}で復習する.
\subsection{test}
\label{ssec:test}
\section{本論}
\label{sec:main}
ほげほげ

相互参照の例
なお,正しい出力結果を得るためには platex によるタイプセットが2回必要です.それは,LaTeX が相互参照の情報を一旦補助ファイルに書きだしているからです.
1回目のタイプセットの時点では補助ファイルはないので, 相互参照の情報は得られません.次のような警告が表示されます:

LaTeX Warning: Reference `sec:pre' on page 2 undefined on input line 11.
LaTeX Warning: There were undefined references.
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.

2回目以降では,補助ファイルが(1回目のタイプセットで作られているので)読み込まれます.この中の情報に基づいて,正しい出力結果が得られる,というわけです.同じような理屈で,新たなラベルを使う際には,タイプセットが2回必要となります.

文献

また,参考文献や引用文献の番号付けも自動で行うことができます.並び替えを伴った本格的な文献管理には BibTeX という外部プログラムを使うことができますが,それについては専門書に譲ることにします.ここでは,ごく簡単に「打った通りの順序で」参考文献に番号をつける方法を紹介します.
文献リストは,それを出力させたい場所で,thebibliography 環境を利用して書きます.自動的に「参考文献」の見出しも出力されるようになっています.

\begin{thebibliography}{9}
\bibitem{knuth}
  Donald~E. Knuth.
  \textit{The \TeX book}.
  Addison-Wesley, 1986.
\bibitem{lamport}
  Leslie Lamport.
  \textit{\LaTeX: a document preparation system}, 2nd edition.
  Addison-Wesley, 1994.
\end{thebibliography}

\begin{thebibliography} 直後の {9} は,文献番号が1桁以内であることを表しています.また,各文献は \bibitem{ … } で始めます.\bibitem の直後の { … } の中身が,その文献を参照するためのラベルです.場合によってはいくつかの場所に \newblock を入れた方がいいかもしれませんが……,詳しくは専門書に譲ります.
本文中で文献を引用するには,\cite{ … } にラベルを指定します.

Knuth~\cite{knuth}やLamport~\cite{lamport}では……

ここまでの入力例を合わせた出力を以下に載せます.通常は文献リストは文書の最後の方に載せますが,本節では thebibliography 環境を先に紹介してしまったので,出力もそちらの順番でいきます:
文献引用の例
上の節番号・式番号と同様に,内部では文献の情報も補助ファイルを経由して処理されているので,platex によるタイプセットが2回必要なことも変わりません.1回目のときに出力される警告メッセージは次のようになります.

LaTeX Warning: Citation `knuth' on page 3 undefined on input line 43.