von iTob » Do 9. Nov 2017, 10:06
Das Problem ist deine Verwendung der ganzen \if-Konstrukte: Du benutzt dort geschweifte Klammern, so als gebe es Argumente, die die TeX-Primitiven hier aber nicht haben. Folglich werden diese als Gruppen-Klammern interpretiert und damit deine Umdefinition der Kopfmarken lokal auf diese Gruppe beschränkt. Die Lösung ist also, alle diese Klammern zu entfernen …
Hier mal ein vereinfachtes Beispiel (ohne auskommentiere Zeilenenden etc …)
\documentclass{article}
\begin{document}
Zuweisungen in TF-Konstrukten
\ifnum0=1\relax
\def\XXX{TRUE}
\else
\def\XXX{FALSE}
\fi
Ergebnis: \XXX
Zuweisungen in TF-Konstrukten mit (falschen) Gruppen
\ifnum0=1
{
\def\YYY{TRUE}
}
\else
{
\def\YYY{FALSE}
}
\fi
Ergebnis: \YYY (undefined)
\end{document}
Bei solchen Vergleichen ist es (häufig) sinnvoll oder sogar nötig, nach dem Vergleich ein \relax[\t] zu ergänzen, damit TeX das Ende des Vergleichs vom Beginn des Fall-Codes unterscheiden kann.
[code]
\documentclass{article}
\begin{document}
\ifnum11=1%
1 mal 11 ist \textbf{nicht} 121
\else
11 mal 11 ist 121
\fi
\ifnum11=1\relax
11 mal 11 ist \textbf{nicht} 121
\else
11 mal 11 ist 121
\fi
\end{document}
[/code]
Noch ein kleiner Hinweis: Wenn eine Zeile it einem Befehl ohne Argumente endet, z.B. Z. 65 bei dir, kannst du dir das Prozentzeichen auch spare, weil der Befehl das folgende Leerzeichen eh verschluckt, da dieses als Befehlende gelesen wird, folgt auf den Befehl aber ein anderes Zeichen als ein Leerzeichen (z.B. Argumentklammern) wird das darauf folgende Leerzeichen ausgeben und das Prozentzeichen wird Pflicht. Das musst du aber auch nur beachten, an Stellen, die tatsächlich mehr oder weniger unmittelbar zu einer Textausgabe führen. Zuweisungen in der Präambel (bei dir Z. 38–45) ist es überflüssig.
Diese Sorgen hat man mit LaTeX3 übrigens nicht, in Definitionen werden alle (!) Leerzeichen ignoriert, was durchaus praktisch ist.
Das Problem ist deine Verwendung der ganzen [tt]\if[/tt]-Konstrukte: Du benutzt dort geschweifte Klammern, so als gebe es Argumente, die die TeX-Primitiven hier aber nicht haben. Folglich werden diese als Gruppen-Klammern interpretiert und damit deine Umdefinition der Kopfmarken lokal auf diese Gruppe beschränkt. Die Lösung ist also, alle diese Klammern zu entfernen …
Hier mal ein vereinfachtes Beispiel (ohne auskommentiere Zeilenenden etc …)
[code]
\documentclass{article}
\begin{document}
Zuweisungen in TF-Konstrukten
\ifnum0=1\relax
\def\XXX{TRUE}
\else
\def\XXX{FALSE}
\fi
Ergebnis: \XXX
Zuweisungen in TF-Konstrukten mit (falschen) Gruppen
\ifnum0=1
{
\def\YYY{TRUE}
}
\else
{
\def\YYY{FALSE}
}
\fi
Ergebnis: \YYY (undefined)
\end{document}
[/code]
Bei solchen Vergleichen ist es (häufig) sinnvoll oder sogar nötig, nach dem Vergleich ein [tt]\relax[\t] zu ergänzen, damit TeX das Ende des Vergleichs vom Beginn des Fall-Codes unterscheiden kann.
[code]
\documentclass{article}
\begin{document}
\ifnum11=1%
1 mal 11 ist \textbf{nicht} 121
\else
11 mal 11 ist 121
\fi
\ifnum11=1\relax
11 mal 11 ist \textbf{nicht} 121
\else
11 mal 11 ist 121
\fi
\end{document}
[/code]
Noch ein kleiner Hinweis: Wenn eine Zeile it einem Befehl ohne Argumente endet, z.B. Z. 65 bei dir, kannst du dir das Prozentzeichen auch spare, weil der Befehl das folgende Leerzeichen eh verschluckt, da dieses als Befehlende gelesen wird, folgt auf den Befehl aber ein anderes Zeichen als ein Leerzeichen (z.B. Argumentklammern) wird das darauf folgende Leerzeichen ausgeben und das Prozentzeichen wird Pflicht. Das musst du aber auch nur beachten, an Stellen, die tatsächlich mehr oder weniger unmittelbar zu einer Textausgabe führen. Zuweisungen in der Präambel (bei dir Z. 38–45) ist es überflüssig.
Diese Sorgen hat man mit LaTeX3 übrigens nicht, in Definitionen werden alle (!) Leerzeichen ignoriert, was durchaus praktisch ist.