數組內的巨集擴展

數組內的巨集擴展

我被下面的 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,將列印新值。然而,當包裝在陣列中時,第 5 行B會在我期望的位置列印D。巨集在枚舉內部時如預期運作(第 6-8 行)。

第 5 行如何列印為B而不是D以及如何修復巨集的定義?我認為數組內部的擴展發生了一些奇怪的事情。我嘗試更改數組以進行對齊,但這顯示了相同的問題。

答案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為它的別名。

相關內容