
Me quedé atascado con el siguiente fragmento 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}
Esta pieza de TeX se representa de la siguiente manera:
1: A
2: B
3: C
4: D
5: B
6: E
7: F
8: F
Ahora, las líneas 1 y 2 se comportan como se esperaba, después de redefinirlas \foo
, se imprime el nuevo valor. Sin embargo, cuando se envuelve en una matriz, la línea 5 se imprime B
donde esperaría D
. Las macros funcionan como se esperaba cuando se enumeran dentro (líneas 6-8).
¿Cómo es que la línea 5 se imprime como B
en lugar de D
y cómo arreglar la definición de las macros? Supongo que está sucediendo algo extraño con la expansión dentro de la matriz. Intenté cambiar la matriz para alinear pero eso manifiesta el mismo problema.
Respuesta1
Esto es 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 en array
grupos de forma. No está claro qué quiere lograr, pero si desea que la definición de \foo
grupos trascienda, necesita \gdef
en lugar de hacerlo \def
.
En particular, ¿cuál es el papel de \bar
? Nunca lo usas, excepto cuando \baz
lo defines como un alias.