Создание новой среды, которая объединяет samepage с align

Создание новой среды, которая объединяет samepage с align

Я хочу избежать разрывов страниц в alignсреде. Я могу сделать это с помощью как среды , так samepageи minipageсреды . Однако, когда я пытаюсь создать новую среду, которая сочетается alignс любой из них, я получаю ошибки. Ниже приведена иллюстрация; насколько я могу судить, мое использование команды newenvironmentполностью стандартно. Однако обе мои новые среды SPalignOneи SPalignTwoвыдают ошибку ame, т. е. LaTeX Error: \begin{align} on input line 26 ended by \end{SPalignTwo} Может ли кто-нибудь объяснить, что я делаю неправильно? Большое спасибо, Лео

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

решение1

Ошибка возникает из-за способа, которым alignсреда обрабатывает материал в своей области действия: LaTeX настроен на опережение для жестко закодированной строки , после чего начинается серьезная \end{align}обработка материала в среде.align

С вашими определениями сред SPalignXпосле \begin{align}LaTeX в конечном итоге встретится \end{SPalignX}; однако, он не настроен на немедленную оценку того, что происходит в конце среды SPalignX, — и, таким образом, обратите внимание, что первой выполняемой инструкцией будет \end{align}. Отсюда и сообщение об ошибке: LaTeX обнаружил конец среды ( SPalignX) до того, как та, в которой он находится в данный момент ( align), будет закрыта.

Кстати, по умолчанию внутри alignсреды не должно быть разрывов страниц,пока неинструкция, такая как \allowdisplaybreaksбыла предоставлена. Вы можете проверить код в вашем документе, чтобы обнаружить, не скрывается ли где-то такая команда. Должно быть проще вылечить проблему в корне, чем предоставлять лечение симптомов, верно?

Связанный контент