samepageとalignを組み合わせた新しい環境の作成

samepageとalignを組み合わせた新しい環境の作成

環境内での改ページを避けたいのですが、と のalign両方の環境でこれを実現できます。ただし、どちらかの環境と組み合わせた新しい環境を作成しようとすると、エラーが発生します。次の図に示すように、私が見る限り、コマンドの使用は完全に標準的です。しかし、新しい環境と の両方で同じエラーが発生します。つまり、 だれか、私が間違っていることを説明してください。どうもありがとうございます。LeosamepageminipagealignnewenvironmentSPalignOneSPalignTwoLaTeX 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、実行される最初の命令は になることがわかります。そのため、エラー メッセージ: LaTeX は、現在存在する環境 ( ) が閉じられる前に、\end{align}環境 ( ) の終わりに遭遇しました。SPalignXalign

ちなみに、デフォルトでは環境内で改ページは発生しませんalignない限りのような指示が\allowdisplaybreaks提供されました。ドキュメント内のコードをチェックして、そのようなコマンドがどこかに潜んでいるかどうかを調べるとよいでしょう。症状に対処するよりも、問題の根本を解決する方が簡単なはずですよね?

関連情報