• 検索結果がありません。

第 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

A

TEX 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

A

TEX

ではカウンタを使います.

ユーザーが特にこのことを意識しなくても半自動的に番号付けなどをやってくれます.一 応さわり程度にはその仕組みを説明します.

相互参照する対象が通し番号ですので,節なら節などの要素に応じたカウンタがあらか じめ用意されています.

L

A

TEX

では表

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

A

TEX

の警告が表示されます.ラベルが変更されたと思われるので解消しなさい と言われています.ここで

hoge.aux

を見ると

\relax

\newlabel{cnt:hoge}{{1}{1}}

好き好き

L

A

TEX 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

A

TEX

に意地悪をして

\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

A

TEX

ではそれらを前回のタイプセットの結果が保存されていた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}}