配列内のマクロ展開

配列内のマクロ展開

私は次の TeX の部分で行き詰まりました:

\def\foo{A}
\def\bar{\foo}
\let\baz\bar
1: \baz
\def\foo{B}
\\
2: \baz
\\

\begin{array}[t]{r}
\def\foo{C}
3: \baz
\\
\def\foo{D}
4: \baz
\\
5: \baz
\end{array}

\begin{enumerate}
\def\foo{E}
\item[6:] \baz

\item[7:]
\def\foo{F}
\baz

\item[8:] \baz
\end{enumerate}

この TeX 部分は次のようにレンダリングされます。

1: A
2: B

3: C
4: D
5: B

6: E
7: F
8: F

これで、 を再定義した後、 1 行目と 2 行目は期待どおりに動作し\foo、新しい値が出力されます。ただし、配列にラップされている場合、Bが期待される場所に5 行目が出力されますD。マクロは、enumerate 内 (行 6 ~ 8) では期待どおりに動作します。

B5 行目が ではなく と印刷されるのはなぜですかD。マクロの定義を修正するにはどうすればよいでしょうか。配列内の展開で何かおかしなことが起こっているのではないかと思います。配列を align に変更しようとしましたが、同じ問題が発生します。

答え1

これは完全に予想通りだ

\def\foo{A}     % now \foo expands to A
\def\bar{\foo}  % now \bar expands to \foo
\let\baz\bar    % now \baz expands to \foo
1: \baz         % we get \foo, then A
\def\foo{B}     % now \foo expands to B
\\
2: \baz         % we get \foo, then B
\\

\begin{array}[t]{r}
\def\foo{C}     % now \foo expands to C
3: \baz         % we get \foo, then C
\\              % end of cell, \foo reverts to B
\def\foo{D}     % now \foo expands to D
4: \baz         % we get \foo, then D
\\              % end of cell, \foo reverts to B
5: \baz         % we get \foo, then B
\end{array}

\begin{enumerate}
\def\foo{E}     % now \foo expands to E
\item[6:] \baz  % we get \foo, then E

\item[7:]
\def\foo{F}     % now \foo expands to F
\baz            % we get \foo, then F

\item[8:] \baz  % we get \foo, then F
\end{enumerate}

内のセルはarrayグループを形成します。何を達成したいのか明確ではありませんが、 の定義がグループを超えるようにしたい場合は、ではなく が\foo必要です。\gdef\def

特に、 の役割は何でしょうか?エイリアスとして\bar定義する場合を除いて、 を使用することはありません。\baz

関連情報