TeXマクロメモ

理由がよく分からないのだが,とりあえず動いたのでメモ。

丸数字(数字を○で囲んだもの)を実現するマクロ \Maru{数字} を適当に組んで使っている。あちこちのサイトや書籍で紹介されているのと基本的には同じで,数字と○を重ねて表示する。それはそれで良いのだが,utfパッケージを利用して,ヒラギノフォントなどで使える本物(?)の丸数字を使おうと

\def\Maru#1{\ajMaru{#1}}

などとマクロを組んでいたのだが,相互参照でうまく行かない。数式番号として丸数字を使うマクロを組んでいるのだが,\eqref{hoge} で hoge というラベルを付けた数式番号を表示しようとするとエラーになってしまう。一回目のLaTeX処理ではまだ hoge が何番か分かってないので,hogeを参照するマクロ \r@hoge は未定義(つまり \relax と同じ値)。そこで,未定義の時は■を出力し,定義されているときは丸数字を表示させようと,

\def\eqref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
     \hbox{■}%
  \else\Maru{\ref{#1}\fi }

と定義した。\Maru の定義が以前のものだと問題なく動くのだが,\Maru を \ajMaru を呼び出す形だと,何故かエラーになる。どうも引数が数字と認識されてない様子。あれこれ試したけどダメ。最後にままよ,とカウンター変数を使って次のようにしたらうまくいった。

\newcount\eqcounter
\def\eqref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
     \hbox{■}%
  \else\eqcounter=\ref{#1}\Maru{\the\eqcounter}%
  \fi}

しかし,何故これで上手く行って,それまでのマクロはダメなのか,理解できていない。要は,きちんと数字を渡せれば良いはずなのだが。

カテゴリーTeX

コメントを残す

メールアドレスが公開されることはありません。