Makroerweiterung innerhalb eines Arrays

Makroerweiterung innerhalb eines Arrays

Ich stecke bei folgendem TeX-Teil fest:

\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}

Dieser TeX-Teil wird wie folgt wiedergegeben:

1: A
2: B

3: C
4: D
5: B

6: E
7: F
8: F

Nun verhalten sich die Zeilen 1 und 2 wie erwartet. Nach der Neudefinition \foowird der neue Wert ausgegeben. Wenn sie jedoch in ein Array eingeschlossen wird, wird Zeile 5 dort ausgegeben, Bwo ich erwarten würde D. Die Makros funktionieren wie erwartet, wenn sie sich innerhalb einer Aufzählung befinden (Zeilen 6-8).

Wie kommt es, dass Zeile 5 als Bstatt als ausgegeben wird Dund wie kann die Definition der Makros korrigiert werden? Ich nehme an, dass bei der Erweiterung innerhalb des Arrays etwas Seltsames vor sich geht. Ich habe versucht, das Array für align zu ändern, aber das führt zum selben Problem.

Antwort1

Das ist völlig zu erwarten

\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}

Zellen arraybilden Gruppen. Es ist nicht klar, was Sie erreichen möchten, aber wenn Sie möchten, dass die Definition von \fooGruppen überschreitet, benötigen Sie \gdefanstelle von \def.

Welche Rolle spielt insbesondere \bar? Sie verwenden es nie, außer wenn Sie \bazes als Alias ​​dafür definieren.

verwandte Informationen