連載 / てくてく rIbX illustration•小沼卓児 26 相互参照についての注意 こでは、相互参照についての注意というより、説明 し足りなかったところについて書くことにします。相互 参照機能は、うつかりした間違し、以外でトラブルが起こ ることはめったにありません。 ラベルをつけるとき ラベルをつける \label コマンドは fragile なコマ ンドてすから、動く引数のなかで使用することはできま せん。ただし、セクション付けコマンドと \caption コマンドをオフ。ション引数なしで指定した場合、引数 は動く引数になりますが、このなかでは特別に使用で きます。 ラベル名を 20 ~ 30 文字ていどの長さにすることも できますが、なるべく短くするようにしてくたさい。と くに多くのラベルを使用するときには、これが重要なポ イントになることもあります。 ラベルについての情報は、 \begin{document} 力、 ら \end{document} までずっとメモリ中に保持され ることになります。あまり長いラベル名をつけると、長 1 日本語 Micr01FfX のマニュアルのなカこ、この間韋いがあります。 コマンド名をうつかり間違えて \ref コマンドを使 ってしまうと、「 4.5 ページ」なんてわすの分からない 出力になってしまいます 1 。 140 捜してみてくたさい。 さのふんたけの貴重なメモリが消費されてしまい ます。 参照するとき \ref コマンドも fragile なコマンドてす。 ふつう \ref コマンドも \pageref コマンドも、番 号だけを出力するようになっています。したがって、前 後には「ページ」「表」「章」などの単語力要になりま す。このとき、不自然な位置で改行しないように十分に 注意してください。たとえば、入力ファイルカ飲のよう になっていたとします。 \pageref{caution1}R—ジにある 図 \ref{cautionl} を参照してください このようなときにページ番号と「ページ」、図番号と 「図」とのあいだで改行が起こらないようにするのです。 次のようにすればいいてすね ( というのは分力、っている のてすが、じつは私自身はやっていなし \mbox{\pageref{cautionl} ページ } にある \mbox{ 図 \ref{cautionl}} を参照してください 次のような方法もあります。 The figure-\ref{cautionl} on page-\ref{cautioni} illustrates it . チルダ ( ~ ) は、そこて敏行せすに単語間スペースを 空ける特殊文字てす。 おわひ 前回、私は大きな間違いを書し、てしまいました。 \footnote コマンドの引数は、動く引数ではあ りません。ですから、 \label コマンドや \ref コマンドは \footnote の引数のなかでも問題な く使えます。 \footnote に似てし、ますが、 \thanks コマンド の引数は動く引数です。 警告メッセージ 3 つ "LaTeX Warning" で始まるメッセージは、 IATEX の警告メッセージです。相互参照に関する警告メッセー ジが 3 つありますから、まとめて説明しておきます。 UNIX MAGAZINE 1991.6
連載 / てくてく 26 eqnarray 環境の場合、それぞれの数式を区切る \ \ を境にして参照番号カ飲の番号に変わります。 ・ table 環境の \caption コマンド→表番号 table 環境の \ capt 土 0 Ⅱコマンドの引数に \label コマンドを指定すると、ラベルには表番号が割り当 てられます。 table 環境の \caption コマンドより後ろに指定さ れた \label コマンドに対しても、参照番号は表番 号になります。 ・ figure 環境の \caption コマンド→図番号 境の \caption コマンドの引数に \label コマンドを指定すると、ラベルには図番号が割り当 てられます。 表番号と同様に、 \caption コマンドより後ろに \label コマンドがあるとき、 figure 環境内であ れよ参照番号が図番号になります。 enumerate 環境→リストの項目番号 enumerate 環境のなかで \label コマンドを使う と、ラベルには項目番号が割り当てられます。 ・ \footnote コマンド→脚注番号 \footnote コマンドの引数のなかに \label コマ ンドを指定すると、ラベルには脚注番号が割り当て られます。 ・上記以外のテキスト中→章や節の番号 これら以外の場所で \label コマンドを使うと、そ のセクション番号を参照するようになります。 最初の例でも、セクション付けコマンドの引数のな かでなくても、コマンドの直後などに \label コマ ンドを指定すれば、セクション番号を参照すること はできたのでした。 細かい話になりますが、 figure 環境や table 環境 の \caption コマンドの月リ、 enumerate 環境の最 初の \item コマンドの月リに \label コマンドカ : あ れま、これも参照番号がセクション番号になります。 いままでこの連載で説明したことはありませんが、 \newtheorem というコマンドを使うと、番号管理をと もなう環境が定義できます。 \newtheorem コマンドで 作成した環境の内部で \label コマンドを使用したと きにも、その環境の番号になります。 UNIX MAGAZINE 1991.6 次の例では、 enumerate 環境のなかで \label コ マンドを使用し、項目番号を参照しています。これが 2 回目以降のい T の結果であることは、もう言わなく ても分かります牙 スポンジ・ケーキを上手につくるには \begin{enumerate} \item\label{en:flr} 小麦粉をよくふるう \item\label{en:egg} 卵か新鮮てある \item\label{en:wht} 卵白をしつかり泡立てる \item\label{en:msr} 計量をしつかリおこなう \end{enumerate} ことが大事てす。 \ref{en:wht} は、 卵黄が混ざってしまうとうまくいきません。 くいきません。 ことが大事です。 3 は、卵黄が混ざってしまうとうま 計量をしつかりおこなう 卵白をしつかり泡立てる 卵が新鮮である 小麦粉をよくふるう スポンジ・ケーキを上手につくるには 4. 3. 2. 1. 眠っているあいだに胃のなかに食物があると脂肪の 42 ペーシ 詳しくは 42 ページを参照してください 脂肪 \ label { ( fat , } の原因となリます。 眠っているあいだに胃のなかに食物があると 参照してください。 詳しくは \pageref{'fat'}R—シを を参照することができます。 えば、ラベルをブナたテキストが出力されたページ番号 \ref コマンドの代わりに \pageref コマンドを使 ペーシの参照 原因となります。 139
連載 / てくてく価び 26 \ref コマンドの位置には「 ? ? 」が出力されています ね。 I*TEX は定義されていないラベルがあると、この ような警告メッセージを画面に表示し、 \ref コマンド の位置に「 ? ? 」を出力します。 しかし nothing というラベルは、たしカこ定義した はずです。おかしいですねえ Rerun to get cross-references right 前回お話しした目次では、最初の I 'FfX で目次ファ イルを作成し、 2 度目のい TFfX で目次を出力するよう になっていました。 相互参照も同じように、最初の INIbX でラベルの 定義をおこない、 2 度目の I*TEX で \ref コマンド で参照した位置にラベルに対応する番号を出力します。 つまり、前回 IMbX を実行したときの結果にもとづし、 て、出力される参照番号が決まるナです。 ラベルと番号との対応を保持しているのは、 aux ファ イルです。最初のの実行時には \label コマ ンドで定義されているラベルをどんどん aux ファイル に書き込んでいきます。途中に \ref コマンドがある と、 "LaTex warning' を表示し、参照番号の代わり 「 ? ? 」を出力していきます。 2 度目の I ?X の実行時には、 aux ファイルの内容 をもとに \ref コマンドの位置に正しい参照番号を出力 してくれます。 もちろん 2 度目の T の実行中にも \label コ マンドは、ラベルと番号の対応を aux ファイルに書ぎ 込んでいきます。そのとき、前回にはなかったラベル が定義されていたり、前回と今回とで番号が変わって しまったラベルがあると、最後に次のような警告メッ セージを表示します。 LaTeX Warning : Labe1 (s) may have changed. Rerun tO get cross—references right この警告メッセージは、「どこかの相互参照の番号が 実際とは違っているかもしれません」と注意していま す。この警告メッセージが表示されたときには、同し 入力ファイルに対してもう 1 度獰 TEX を実行してくだ さい。 138 さきほどハ Tj さを実行したときにも、最後にこの警 告メッセージが表示されており、もう 1 度 I*TEX を 実行するように言っていましたれ もう 1 度 I 1 度目のハさの実行の最後の警告メッセージは、 新しいラベルが定義されたために表示されたのでしょ う。ということは、いまは「Ⅱ。 t 五土 ng 」という名前の ラベルが定義されて、 aux ファイルに登録されている 同じファイルにもう 1 度ハ TEX を実行します。 This is TeX, C Version 2 .99 (kame . tex Chapt er 1. [ 1 ] Chapter 2. [ 2 ] (kame . aux) Output vritten on kame. dvi ( 2 pages , Transcript vritten 0 Ⅱ kame ・ 10g. ほら、もう最初のような警告メッセージは表示され ないでしよう ? 出力にも、正しい番号が出力されます。 2.3 何も思いつかない日 今日は何も思いつかない日。空は青いし、気温も 暑すぎず、寒すぎず。 こはどこ ? 「こ一 は 2.3 節だよ」誰かが答えた。 参照てきる番号 I*TEX の相互参照では、セクション番号たけではな く、図表番号や enumerate 環境の番号なども扱うこ とができます。 ラベルにどの番号が割り当てられるカ寸よ、 \label コ マンドの指定位置によって決まります。 equation 環境→数式番号 equation 環境や eqnarray 環境など、数式番号カ : 出力される環境のな力に \label コマンドを指定す ると、ラベルには数式番号が割り当てられます。 UNIX MAGAZINE 1991.6