
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 \foo
wird der neue Wert ausgegeben. Wenn sie jedoch in ein Array eingeschlossen wird, wird Zeile 5 dort ausgegeben, B
wo 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 B
statt als ausgegeben wird D
und 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 array
bilden Gruppen. Es ist nicht klar, was Sie erreichen möchten, aber wenn Sie möchten, dass die Definition von \foo
Gruppen überschreitet, benötigen Sie \gdef
anstelle von \def
.
Welche Rolle spielt insbesondere \bar
? Sie verwenden es nie, außer wenn Sie \baz
es als Alias dafür definieren.