名前: 北見 けん 日時: 2006-05-23 17:44:42 IPアドレス: 211.128.71.*
>>42984 > \@nameuse{item\ref{#1}} したとき > ! Missing \endcsname inserted. > のエラーになったので上のようにしました. \@nameuse(あるいはその実体である \csname)では単純な文字列になるものでないといけないので、 \ref は使えません。\ref はラベルが定義済みであるかをチェックしたりいろいろやるからです。 LaTeX の \ref を少しいじって \@nameuse や \csname で \ref の代わりに使える \ref@csname を作ってみました。 \def\ref@csname#1{\expandafter\@setref@csname\csname r@#1\endcsname\@firstoftwo{#1}}% \@setref を \@setref@csname に変更 \def\@setref@csname#1#2#3{% \ifx#1\relax \afterfi{\afterendcsname{% 追加 \protect\G@refundefinedtrue %\nfss@text{\reset@font\bfseries ??}% コメントアウト。これは表示してもよいかも \@latex@warning{Reference `#3' on page \thepage \space undefined}% }}% 追加 \else \expandafter#2#1% LaTeX では \null, pLaTeX では \relax が補われているが、それを削除。 \fi} \def\afterfi#1#2\fi{\fi#1}% 任意の処理を \fi の後に持ち越す \def\afterendcsname#1#2\endcsname{#2\endcsname#1}% 任意の処理を \endcsname の後に持ち越す 直接 \r@<ラベル> を使ってもよいのですが、 ラベルが定義済みであるかのチェックはどのみち必要ですし、 それなら警告を出したりしても手間は変わらないので いっそのこと \ref の機能を丸ごと残そうというわけです。
この書き込みへの返事: