TeXの記憶(10) — \refの色付けと、\labelのカスタマイズ

LaTeXの\labelコマンドは、\captionとか\equationとかの決まった箇所に挿入すると必要なラベルが設定されて\refコマンドで参照できます。きちんとラベルを付けながらTeXの文書を作っていけばこれでうまくいくはずですが、その場しのぎで設定しているとうまくラベルが付けられないことがあるので、どこでも適当な文字列をラベルにできるようなマクロを作ってみました。

ついでに、\refで参照するときに色付けして一見して分かるように\refコマンドを再定義直してみました。最終的には不要なのでドラフトのときだけ赤色が付くようにしています。

\newcommand{\LABEL}[2]{\protected@edef\@currentlabel{#2}\label{#1}}

\ifdraft

\let\origref\ref % 元の\ref(の実体)を保存していおいて
\def\ref#1{{\color{red}\origref{#1}}} % この中で呼び出す

\let\origpageref\pageref
\def\pageref#1{{\color{RED}\origpageref{#1}}}

\def\@setref#1#2#3{% ltxref.dtxの中に定義されている
  \ifx#1\relax
   \protect\G@refundefinedtrue
   \nfss@text{\underline{\reset@font\color{red}{★}}}% 未定義の場合
   \@latex@warning{Reference `#3' on page \thepage \space
             undefined}%
  \else
   \expandafter#2#1\relax
  \fi}

\fi

LaTeXの多くの定義は「lt***.dtx」のようなファイル名の中にあります。 refとか\labelは「ltxref.dtx」の中で定義されているので、これをコピーして使いました。\refと\pagerefの再定義は\ifdraft〜\fiの中にあるので、「draft」が設定されていない場合は無視されます。

入力例です。定義されている参照は赤字で、「★」の箇所は未定義のラベルを参照した場合です。

\LABEL{label1}{testLabel}□□□□□□□□□□□□□□□□□□
\ref{label1}□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□\ref{label2}□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

20130513

コメント