
Ich möchte Seitenumbrüche innerhalb einer align
Umgebung vermeiden. Dies kann ich sowohl mit den samepage
als auch mit den minipage
Umgebungen erreichen. Wenn ich jedoch versuche, eine neue Umgebung zu erstellen, die align
mit einer der beiden kombiniert wird, erhalte ich Fehler. Das Folgende veranschaulicht dies; soweit ich sehen kann, newenvironment
ist meine Verwendung des Befehls völlig standardmäßig. Dennoch werfen sowohl meine neuen Umgebungen SPalignOne
als auch SPalignTwo
den gleichen Fehler aus, d. h.
LaTeX Error: \begin{align} on input line 26 ended by \end{SPalignTwo}
Kann mir bitte jemand erklären, was ich falsch mache? Vielen Dank, Leo
\documentclass{minimal}
\usepackage{amsmath}
\newenvironment{SPalignOne}
{\begin{samepage}\begin{align}}
{\end{align}\end{samepage}}
\newenvironment{SPalignTwo}
{\begin{minipage}{\textwidth}\begin{align}}
{\end{align} \end{minipage} }
\begin{document}
\begin{samepage}
\begin{align}
x
\end{align}
\end{samepage}
\begin{minipage}{\textwidth}
\begin{align}
x
\end{align}
\end{minipage}
\begin{SPalignOne}
x
\end{SPalignOne}
\begin{SPalignTwo}
x
\end{SPalignTwo}
\end{document}
Antwort1
Der Fehler tritt aufgrund der Art und Weise auf, wie die align
Umgebung das Material in ihrem Bereich verarbeitet: LaTeX ist so eingestellt, dass es voraus nach der fest codierten Zeichenfolge sucht. \end{align}
An diesem Punkt beginnt die Verarbeitung des Materials in der align
Umgebung ernsthaft.
Mit Ihren Definitionen der SPalignX
Umgebungen \begin{align}
wird LaTeX irgendwann auf stoßen \end{SPalignX}
; es ist jedoch nicht so eingestellt, dass es sofort auswertet, was am Ende einer SPalignX
Umgebung passiert – und dadurch bemerkt, dass die erste auszuführende Anweisung wäre \end{align}
. Daher die Fehlermeldung: LaTeX hat das Ende einer Umgebung erreicht ( SPalignX
), bevor die Umgebung, in der es sich gerade befindet ( align
), geschlossen wird.
Im Übrigen sollten standardmäßig keine Seitenumbrüche innerhalb einer align
Umgebung erfolgen,es sei denneine Anweisung wie die \allowdisplaybreaks
hier angegebene. Sie sollten den Code in Ihrem Dokument überprüfen, um herauszufinden, ob sich ein solcher Befehl irgendwo versteckt. Es sollte doch einfacher sein, das Problem an der Wurzel zu packen, als die Symptome zu behandeln, oder?