Re: 条件分岐を行う際に\pageref{}が機能しない

名前: しっぽ愛好家
日時: 2004-08-12 00:48:10
IPアドレス: 210.224.215.*

>>30841 %%% まず,\if,\ifx,\ifnum などの primitive によって行われる %%% 条件処理の内容について確認した方がよろしいでしょう. ここでは, >\if \pageref{test-begin}\pageref{test-end} のような比較を行っても, \@setref の置換テキストに含まれる \relax(オリジナルの LaTeX では \null) のために,数字どうしの比較にはなるとは限りません. %%% それ以前に,ラベル text-begin などが設定される前(e.g. aux ファイルが %%% 存在しない状態でタイプセットした場合)などには不都合があります. また,ラベル test-begin が 11 ページに存在した場合, \if の比較ではその“11”の 2 個の“1”が比較され ラベル test-end の位置に関わらず比較結果は真になってしまいます. %%% 同様にラベル test-begin が 12 ページに存在すると, %%% 比較結果は常に偽になってしまいます. そこで,このような場合には \protected@edef\@tempa{\pageref{test-begin}}% \protected@edef\@tempb{\pageref{test-end}}% \ifx\@tempa\@tempb ... \fi のように参照結果を“文字列として”取得してその文字列を 比較することになるでしょう. %%% ページ番号を(算用数字を用いて)10 進表記している場合には, %%% \pageref による参照結果を(\ifnum を用いて)数値として比較することも %%% できます.この場合には,次のように処理できます. %%% \@ifundefined{r@test-begin}% %%% {\@tempcnta=\m@ne}%%% ←ラベルが未定義なら,\pageref の結果は %%% %%% 数値として読み取れないことに注意してください %%% {\@tempcnta=\pageref{test-begin}\relax}% %%% \@ifundefined{r@test-end}% %%% {\@tempcntb=\m@ne}% %%% {\@tempcntb=\pageref{test-end}\relax}% %%% \ifnum\@tempcnta=\@tempcntb ... \fi

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)