名前: 北見 けん 日時: 2006-08-08 11:47:39 IPアドレス: 211.128.71.*
>>44206 ちょっとやってみたので。 amsmath の場合は \label 自体が動的に変更されるようなので、 変更を加えるのは \label@in@display にしました。 amsmath の数式環境はバラエティに富んでいるので、 他の数式環境でうまくいくかどうか検証し切れていません。 とりあえずの試作品ということで、実際に使うならもっと検討が必要でしょう。 さて以下のサンプルでは、 本文中の三つの行を適当にコメントアウトしてみて下さい。 変更を加えた場合は数回タイプセットが必要です。 一回目は参照している本文が変更されて、 二回目はどの数式に番号が付くかが変化して、 三回目で参照する番号が修正されます。 \documentclass{article} \usepackage{amsmath} \makeatletter \def\label@in@display{% amsmath.sty より \ifx\df@label\@empty\else \@amsmath@err{Multiple \string\label's: label '\df@label' will be lost}\@eha \fi \afterassignment\@notag@or@relax% この行を追加 \gdef\df@label } \newcommand*\@notag@or@relax{\csname gobble@or@relax@\df@label\endcsname\notag}% 新規 \def\eqref#1{% amsmath.sty より \@bsphack\protected@write\@auxout{}{\string\@labelused{#1}}\@esphack% この行を追加 \textup{\tagform@{\ref{#1}}}} \newcommand*\@labelused[1]{\global\expandafter\let\csname gobble@or@relax@#1\endcsname\@gobble}% 新規 \makeatother \begin{document} 一番上は\eqref{a}. %二番目は\eqref{b}. 三番目は\eqref{c}. \begin{equation}\label{a}testa\end{equation} \begin{equation}\label{b}testb\end{equation} \begin{equation}\label{c}testc\end{equation} \end{document}
この書き込みへの返事: