
私は次の 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) では期待どおりに動作します。
B
5 行目が ではなく と印刷されるのはなぜですか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