Criando um novo ambiente que combina Samepage com Align

Criando um novo ambiente que combina Samepage com Align

Quero evitar quebras de página em um alignambiente. Posso fazer isso com samepageos minipageambientes. No entanto, quando tento criar um novo ambiente que combine aligncom qualquer um deles, recebo erros. O seguinte ilustra; até onde posso ver, meu uso do newenvironmentcomando é completamente padrão. No entanto, ambos os meus novos ambientes SPalignOnegeram SPalignTwoo mesmo erro, ou seja, LaTeX Error: \begin{align} on input line 26 ended by \end{SPalignTwo} alguém poderia explicar o que estou fazendo de errado? Muito obrigado, Léo

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

Responder1

O erro ocorre devido à maneira como o alignambiente processa o material em seu escopo: o LaTeX está configurado para procurar a string codificada \end{align}, ponto em que o processamento do material no alignambiente começa para valer.

Com suas definições dos SPalignXambientes, depois que \begin{align}o LaTeX eventualmente aparecer \end{SPalignX}; entretanto, ele não está configurado para avaliar imediatamente o que acontece no final de um SPalignXambiente - e assim perceber que a primeira instrução a ser executada seria \end{align}. Daí a mensagem de erro: LaTeX encontrou o fim de um ambiente ( SPalignX) antes que aquele em que está atualmente ( align) seja fechado.

Aliás, por padrão, nenhuma quebra de página deve ocorrer dentro de um alignambiente,a menos queuma instrução como a que \allowdisplaybreaksfoi fornecida. Você pode querer verificar o código em seu documento para descobrir se tal comando está escondido em algum lugar. Deveria ser mais fácil curar o problema pela raiz do que tratar os sintomas, certo?

informação relacionada