Creando un nuevo entorno que combina la misma página con align

Creando un nuevo entorno que combina la misma página con align

Quiero evitar saltos de página dentro de un alignentorno. Puedo lograr esto tanto con el samepagecomo con los minipageentornos. Sin embargo, cuando intento crear un nuevo entorno que combine aligncon cualquiera de los dos, obtengo errores. Lo siguiente ilustra; Por lo que puedo ver, mi uso del newenvironmentcomando es completamente estándar. Sin embargo, mis nuevos entornos SPalignOnearrojan SPalignTwoel mismo error, es decir, LaTeX Error: \begin{align} on input line 26 ended by \end{SPalignTwo} ¿podría alguien explicar qué estoy haciendo mal? Muchas gracias 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}

Respuesta1

El error se produce debido a la forma en que el alignentorno procesa el material en su alcance: LaTeX está configurado para buscar la cadena codificada \end{align}, momento en el que el procesamiento del material en el alignentorno comienza en serio.

Con sus definiciones de los SPalignXentornos, después de que \begin{align}LaTeX eventualmente se encuentre \end{SPalignX}; sin embargo, no está configurado para evaluar inmediatamente lo que sucede al final de un SPalignXentorno y, por lo tanto, observar que la primera instrucción a ejecutar sería \end{align}. De ahí el mensaje de error: LaTeX ha encontrado el final de un entorno ( SPalignX) antes de que se cierre el que se encuentra actualmente ( align).

Por cierto, de forma predeterminada no deberían producirse saltos de página dentro de un alignentorno,a menos queuna instrucción como la que \allowdisplaybreaksse le proporcionó. Es posible que desees comprobar el código de tu documento para descubrir si dicho comando se esconde en alguna parte. Debería ser más fácil curar el problema desde su raíz que proporcionar un tratamiento a los síntomas, ¿verdad?

información relacionada