我被下面的 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
以及如何修复宏的定义?我推测数组内部的扩展出现了一些奇怪的问题。我尝试将数组更改为 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
为它的别名。