名前: トノ 日時: 2004-12-08 11:29:42 IPアドレス: 220.219.77.*
>>32990 TeX は、$ が現れたときに、文中数式モードへの移行を表す $ なのか、 別行立て数式モードへの意向を表す $$ の1文字目なのかを判別するため、 \everymath をトークン・リストに挿入する前に1文字先読みします。 文中数式モードの先頭が @ である場合は、その @ が先読みされるわけですが、 一旦先読みされた文字のカテゴリー・コードは後から変更されることが ないため、\everymath の影響を受けずに処理されてしまうのでしょう。 アクティブな @ の定義部分をそのままにして、文中数式モードの先頭に ダミーの半角空白を置くようにするか、文中数式モードへの移行を $ で行なわずに \( や \begin{math} を使うようにすれば、期待どおりの出力が得られます。 もっとスマートなやり方としては、LaTeX 標準での ' のように、 カテゴリー・コードではなく、数式コード(\mathcode)を "8000 にするという 方法があると思います。\mathcode が "8000 の文字は、数式中では アクティブ文字のように振る舞います。 \documentclass{article} \begin{document} \catcode`\@=\active %** 以下の4行の代わりに、単に \let@=\mathbf としてもいい \everymath={% \let@=\mathbf} \everydisplay={% \let@=\mathbf} \catcode`\@=12 \mathcode`\@="8000\relax $@A$ $@C= @A + @B$ $c = @a \cdot @b$ \[ @A \] \[ @C= @A + @B \] \[ c = @a \cdot @b \] \end{document}
この書き込みへの返事: