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

第 6 章 コマンドとマークアップ 79

6.5 相互参照

6

宣言型コマンド 使用してからそれ以降ずっと有効なコマンド.環境型のコマンドに使わ れたり,単独で使われる.

命令型コマンド 使用した場所で有効なコマンド.通常は引数に与えられたものを処理 する.

の二つがあることになります.

例として命令型の

\textsf

と宣言型の

\sffamily

を考えてみましょう.命令型の場 合は

Roman. \textsf{Roman? \par This is sans serif family.} Roman!

のような使い方はできませんが,宣言型ならば新規に

sffont

環境を定義できます.

\newenvironment{sffont}{\sffamily}{}

Roman.

\begin{sffont}

Roman? \par This is sans serif family.

\end{sffont}

Roman!

Roman. Roman?

This is sans serif family. Roman!

宣言型のコマンドはそれ以降ずっと有効なので有効範囲を決めてあげます.

\sffamily

などの書体を変更するコマンドはグルーピングする必要があります.

Roman! {\sffamily sans serif family.}

Roman! Roman!sans serif family.Roman!

今まで使ってきた

\begin{

h何々i

}

\end{

h何々i

}

というコマンドは,このグルーピン グの作業をやってくれているのです.補足的なことですが

\begin{<何々>} <要素> \end{<何々>}

というのは

L

A

TEX

の中で

{\何々 <始めの処理> <要素> <終わりの処理>}

に変換されるので

\sffamily

のような宣言も Roman?

\begin{sffamily}

This is sans serif family.

\end{sffamily}

Roman!

Roman? This is sans serif family. Roman!

とできます.こうすると特に長い文章が読みやすくなります.

6.5 相互参照

文章の論理構造を明確にしてくれるものの一つに相互参照があります.相互参照の仕方 は参照したいものにラベルを貼り,挿入したい場所でラベルを参照するという二つの作業 に分けられます.相互参照できる項目は以下の四つ程に限られています.

章節命令 (

\section

命令など)

• 番号付き数式 (

equation

環境など)

float

環境の要素(図や表など)

enumerate

環境内の個々の項目

要は通し番号のついているものには付けても良いようです.ラベルは単純に貼りたいもの に

\label

命令で

h参照したい要素i

\label{

hラベル名i

}

のようにします.参照の仕方にはその番号を参照する

\ref

とページを参照する

\pageref

2

通りがあります.

\ref{

hラベルi

}

(通し番号)

\pageref{

hラベルi

}

(ページ番号)

参照の仕方は以下のようになります.通し番号を参照する

\ref

命令は

\section

命令の ようなものを参照するときに非常に便利です.

%\section{相互参照}\label{sec:xr}

詳しくは\pageref{sec:xr}~ページの

\ref{sec:xr}~節で述べているのでそ ちらを参照されたい.

詳しくは91ページの6.5節で述べているのでそちらを 参照されたい.

相互参照や目次を作成しているときはタイプセットを

3

回程行う必要があります.ラベ ルの名前が重複しないように工夫することも必要です.

6.5.1 相互参照の仕組み

節(見出し)や図表には通し番号付けます.これは同じ名前の節(見出し)が同じペー ジに存在しても区別できるという利点があります.そして節(見出し)を参照するときは その番号を示します.このような機能を実現するために

L

A

TEX

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

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

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

L

A

TEX

では表

6.2

の通りにあらかじめ定義されているカウンタが あります.カウンタは「素の番号」と実際に出力すべき「表示用の番号」と「参照用の文 字列」の三つの要素を持っています.例えば

\newcounter{section}[chapter]

というのは

\newcount\c@section %素の番号用

\def\thesection{\thechapter.\c@section}%表示用

\def\p@section{\thechapter.\c@section}%参照用

好き好き

L

A

TEX 2

ε初級編

6.5

相互参照

6

6.2 あらかじめ定義されているカウンタ名 カウンタ名 割り当て

part

部見出し

chapter

章見出し

section

節見出し

subsection

小節見出し

subsubsection

少少節見出し

paragraph

段落見出し

subparagraph

小段落見出し

page

ページ番号

equation

式番号

figure

図見出し

table

表見出し

footnote

脚注番号

mpfootnote minipage

環境中の脚注番号

enumi

一つ目の階層の

enumerate

環境の番号

enumii

二つ目の階層の

enumerate

環境の番号

enumiii

三つ目の階層の

enumerate

環境の番号

enumiv

四つ目の階層の

enumerate

環境の番号

などの処理と同じことになります.

\newcounter

とは新しいカウンタを定義するための 命令です.

\label{hoge}, \ref{hoge}

としたときの動作を実際に見るのが早いと思います.ファイル名を

hoge.tex

として

\documentclass{jsarticle}

\begin{document}

\newcounter{hoge} \thehoge

\refstepcounter{hoge} \thehoge

\end{document}

というファイルを作成し,

1

回だけタイプセットしてください.ここで

\refstepcounter

はカウンタの値を一つ増やす命令で

\thehoge

はカウンタ

hoge

の値を表示するための命 令だと思ってください.結果として端末には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}}

という新しい情報が出力されています.これで

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@

ラベル)

もいつの日にか.