
Fiquei preso com o seguinte pedaço de 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}
Este pedaço de TeX é renderizado da seguinte forma:
1: A
2: B
3: C
4: D
5: B
6: E
7: F
8: F
Agora, as linhas 1 e 2 se comportam conforme o esperado, após a redefinição \foo
, o novo valor é impresso. No entanto, quando agrupada em uma matriz, a linha 5 é impressa B
onde eu esperaria D
. As macros funcionam conforme esperado quando dentro de enumerate (linhas 6-8).
Como é que a linha 5 imprime as em B
vez de D
e como corrigir a definição das macros? Presumo que haja algo estranho acontecendo com a expansão dentro do array. Tentei alterar o array para alinhar, mas isso manifesta o mesmo problema.
Responder1
Isso é completamente esperado
\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}
Células em array
grupos de formulários. Não está claro o que você deseja alcançar, mas se quiser que a definição de \foo
transcenda grupos, você precisa, \gdef
em vez de \def
.
Em particular, qual é o papel de \bar
? Você nunca o usa, exceto ao definir \baz
um alias para ele.