创建一个结合 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}遇到了环境的结束 ( SPalignX) 。align

顺便说一句,默认情况下,环境中不应该出现分页符align除非提供了这样的指令\allowdisplaybreaks。您可能想检查文档中的代码,以发现这样的命令是否潜伏在某处。从根本上解决问题应该比提供症状治疗更容易,对吧?

相关内容