LaTeX/LaTeXによる文書整形の応用/相互参照をする

LaTeXではいくつかの項目について参照ラベルを用いることで,その項目の出力されているページ数やその項目の番号などを自動的に参照して出力できます.ユーザは参照される章節や図表の番号の具体的な値を気にすることなく,参照できます.

4.6.1 相互参照できる項目

LaTeXでは,次のような項目を相互参照できます.

  • ページ番号
  • 章節コマンド
  • 番号つきの数式
  • enumerate環境の\itemコマンド
  • float環境内の\captionコマンド
  • 脚注コマンド

これらの項目に参照用のラベルをつけておくことで相互参照できます.

4.6.2 ラベルをつける

参照用のラベルはそれぞれの項目の直後に\labelコマンドを用いることで指定できます.ラベルには一部の特殊記号を除いて,半角英数字や全角文字などを用いることができます.またアルファベットの大文字と小文字は区別されます.ラベルは単なる文字列として扱われるので特に意味を持たせる必要はありませんが,ユーザが識別しやすいような文字列にするとよいでしょう.この例を次に示します.

\section{ラベルをつけたい節}\label{ラベル}

\labelコマンドは必ず参照したい項目のコマンドの直後に記述すること.参照したい項目の前に記述すると,それより前にある項目を参照してしまう.またソースファイル中の複数箇所で同じラベルを指定しないように注意すること.

4.6.3 参照する

参照したい項目にラベルをつけたら,その項目を参照したい箇所で\ref あるいは\pagerefコマンドで参照します.\refコマンドは参照される項目の番号を参照し,\pagerefコマンドは参照される項目が出力されているページ数を参照するのに用います.どちらも引数に参照したい項目につけたラベルを指定します.次にsec:markというラベルを参照した場合の例を示します.



詳細についてはp.\pageref{sec:mark}
の第\ref{sec:mark}節を参照のこと.



詳細についてはp.35の第2.4節を参照のこと.



相互参照をするには最低2回のLaTeX処理をします.1回目のLaTeX処理ではラベル情報をauxファイル(1.8)に出力します.この際出力されるのは,ラベル用の文字列と参照される項目の番号とページ番号です.2回目のLaTeX処理でそれらのデータが\refあるいは\pagerefコマンド部分で読み込まれ,正しい出力が得られます.

4.6.4 注意事項

LaTeX処理中に次のようなメッセージが出力された場合,該当するラベルが指定されていないか,\ref\pagerefコマンドの引数が間違っていることがあります.このような場合は正しいラベルに変更してください.

}
LaTeX Warning: Reference `sec:mart' on page 21 undefined.
erbatim}

また次のようなメッセージが出力された場合は,該当するラベルが重複して指定されていることを示しています.この場合も正しく変更する必要があります.

}
LaTeX Warning: Label `sec:mark' multiply defined.
erbatim}

相互参照をするとLaTeX処理時に次のように表示されることがあります.

}
LaTeX Warning: Label(s) may have changed. Rerun to get cross-references 
right.
erbatim}

これは相互参照のラベル位置が変化したり,新しいラベルを追加したときに出力されるメッセージで,もう1度LaTeX処理をする必要があることを示しています.このような場合はもう1度LaTeX処理します.またソースファイルを変更していないにも関わらず,何度LaTeX処理をしてもこのようなメッセージが出力される場合は,プリアンブルに\nofilesコマンドを記述します.これによってauxファイルが更新されなくなるので上記のようなメッセージは表示されなくなります.\nofilesコマンドは文書を完成させてから最後に記述します.