第 6 章 コマンドとマークアップ 89
6.5 相互参照
文章の論理構造を明確にしてくれるものの
1
つに相互参照があります.相互参照の仕方 は参照したいものにラベルを貼り,挿入したい場所でラベルを参照するという2
つの作業 に分けられます.相互参照できる項目は以下の4
つ程に限られています.• 章節命令 (
\section
命令など)• 番号付き数式 (
equation
環境など)•
float
環境の要素(図や表など)•
enumerate
環境内の個々の項目要は通し番号のついているものには付けても良いようです.ラベルは単純に貼りたいもの に
\label
命令でh参照したい要素i
\label{
hラベル名i}
のようにします.参照の仕方にはその番号を参照する
\ref
とページを参照する\pageref
の2
通りがあります.\ref{
hラベルi}
(通し番号)\pageref{
hラベルi}
(ページ番号)好き好き
L
ATEX 2ε 6.5
相互参照6
参照の仕方は以下のようになります.通し番号を参照する
\ref
命令は\section
命令の ようなものを参照するときに非常に便利です.%\section{相互参照}\label{sec:xr}
詳しくは\ref{sec:xr}~ページの\ref{sec:xr}~節 で述べているのでそちらを参照されたい.
詳しくは6.5ページの6.5節で述べているのでそちら を参照されたい.
相互参照や目次を作成しているときはタイプセットを
3
回程行う必要があります.ラベ ルの名前が重複しないように工夫することも必要です.6.5.1 相互参照の仕組み
節(見出し)や図表には通し番号付けます.これは同じ名前の節(見出し)が同じペー ジに存在しても区別できるという利点があります.そして節(見出し)を参照するときは その番号を示します.このような機能を実現するために
L
ATEX
ではカウンタを使います.ユーザーが特にこのことを意識しなくても半自動的に番号付けなどをやってくれます.一 応さわり程度にはその仕組みを説明します.
相互参照する対象が通し番号ですので,節なら節などの要素に応じたカウンタがあらか じめ用意されています.
L
ATEX
では表6.2
の通りにあらかじめ定義されているカウンタが あります.カウンタは「素の番号」と実際に出力すべき「表示用の番号」と「参照用の文 字列」の3
つの要素を持っています.例えば\newcounter{section}[chapter]
というのは
\newcount\c@section %素の番号用
\def\thesection{\thechapter.\c@section}%表示用
\def\p@section{\thechapter.\c@section}%参照用
などの処理と同じことになります.
\newcounter
とは新しいカウンタを定義するための 命令です.\label{hoge}, \ref{hoge}
としたときの動作を実際に見るのが早いと思います.ファイル名を
hoge.tex
として\documentclass{jsarticle}
\begin{document}
\newcounter{hoge} \thehoge
\refstepcounter{hoge} \thehoge
\end{document}
というファイルを作成し,
1
回だけタイプセットしてください.ここで\refstepcounter
はカウンタの値を1
つ増やす命令で\thehoge
はカウンタhoge
の値を表示するための命表6.2 あらかじめ定義されているカウンタ名 カウンタ名 割り当て
part
部見出しchapter
章見出しsection
節見出しsubsection
小節見出しsubsubsection
少少節見出しparagraph
段落見出しsubparagraph
小段落見出しpage
ページ番号equation
式番号figure
図見出しtable
表見出しfootnote
脚注番号mpfootnote minipage
環境中の脚注番号enumi 1
つ目の階層のenumerate
環境の番号enumii 2
つ目の階層のenumerate
環境の番号enumiii 3
つ目の階層のenumerate
環境の番号enumiv 4
つ目の階層のenumerate
環境の番号令だと思ってください.結果として端末にはNo file hoge.aux というメッセージが表示 されるはずです.この段階で
hoge.aux
をmore
かless
コマンドで見ると\relax
としか出力されていません.
\refstepcounter
命令だけでは参照できる状態にはないよ うです.次に\refstepcounter{hoge} \thehoge
の
1
行に対して\refstepcounter{hoge} \thehoge \label{cnt:hoge}
のように書き足して
1
回だけタイプセットを行ってください.すると端末には Label(s) may have changed. Return to get cross-ferecenses right.という
L
ATEX
の警告が表示されます.ラベルが変更されたと思われるので解消しなさい と言われています.ここでhoge.aux
を見ると\relax
\newlabel{cnt:hoge}{{1}{1}}
好き好き
L
ATEX 2ε 6.5
相互参照6
という新しい情報が出力されています.これで
cnt:hoge
という名前のラベルを参照する 準備ができていることが分かります.\newcounter{hoge} \thehoge
\refstepcounter{hoge} \thehoge \label{cnt:hoge}
という
2
行に対してref=\ref{cnt:hoge}, page=\pageref{cnt:hoge}
の
1
行 を 付 け 足 し て1
回 だ け タ イ プ セ ッ ト す る と 端 末 に 警 告 は 表 示 さ れ ま せ ん .hoge.aux
の内容も変わっていません.さて,ここでL
ATEX
に意地悪をして\setcounter{page}{100}
\newcounter{hoge} \thehoge
\refstepcounter{hoge} \thehoge \label{cnt:hoge}
ref=\ref{cnt:hoge}, page=\pageref{cnt:hoge}
として,ページ番号を
‘100’
にしてから1
回だけタイプセットするとどうなるでしょう か.再び端末にはLabel(s) may have changed. Return to get cross-ferecenses right.
という警告が表示されてしまいました.そして
hoge.aux
のファイルの中身は\relax
\newlabel{cnt:hoge}{{1}{100}}
に変更されています.
以上の結果から分かるようにhfilei
.aux
には相互参照の情報が保存されていることが分 かりました.L
ATEX
ではそれらを前回のタイプセットの結果が保存されていたhfilei.aux
と新しい相互参照の情報を比較してユーザーに対しても警告を出しているということが分 かります.\ref
命令と\pageref
命令は相互参照用の情報からカウンタ番号やページ番 号をラベルによって知ることができるということです.もう少し詳しい話(\r@
ラベル)もいつの日にか.
6.5.2 カウンタ
章見出しやページには通し番号が振られています.これらはLATEXカウンタによって制 御されています.カウンタはプログラミング言語で言えば
int
型(整数)の変数です.カ ウンタ変数の仕組みや制御の方法を少しは知っておいたほうが後々便利です.この章では 変数の基礎を説明します.例えばjsbookクラスで章(
\chpater
)の下の階層の節(\section
)用のカウンタを 定義するには\newcounter{section}[chpater]
とします.このようなカウンタの定義には次の命令が使えます.
\newcounter{
hカウンタ名i}[
h親カウンタ名i]
\setcounter{
hカウンタ名i}{
h数値i}
\addtocounter{
hカウンタ名i}{
h数値i}
\stepcounter{
hカウンタ名i}
\refstepcounter{
hカウンタ名i}
\value{
hカウンタ名i}
\newcounter
でカウンタを新設します.\setcounter
は数値を代入し,\addtocounter
は数値を足し,\stepcounter
はカウンタの値を1
つだけ増やします.\refstepcounter
はカウンタを後から参照できるようにラベル用が用意されます.\stepcounter
と\refstepcounter
によって親カウンタが増えるとその子であるカウンタは0
にリセット されます.\value
はカウンタから親カウンタの値や文字列などを取り除いた純粋なカウ ンタの値が得られるコマンドです.カウンタの表示形式は変更するものに以下があります.
\arabic{
hカウンタ名i}
(1, 2, 3, . . .
)\roman{
hカウンタ名i}
(i, ii, iii, . . .
)\Roman{
hカウンタ名i}
(I, II, III, . . .
)\alph{
hカウンタ名i}
(a, b, c, . . . , z
)\Alph{
hカウンタ名i}
(A, B, C, . . . , Z
)\fnnsymbol{
hカウンタ名i}
(*, †, ‡, . . .
)例えば節(
\section
)の見だし番号をローマ数字に変更するのであれば節見だし用のカウンタ
‘section’
を次のように再定義します.\renewcommand{\thesection}{\Roman{section}}