单线与多线聚集的扩展

单线与多线聚集的扩展

正如所述多重分割方程我想创建一个方程式环境,aligned可以插入和拆分方程式\n。我猜我在那里找到的解决方案有点不靠谱,但在一般情况下是可行的。

现在奇怪的是,如果我只将一行(即一行aligned\n无论是否被分割)放入环境中,如下所示:

\documentclass{article}
\usepackage[fleqn]{amsmath}

\usepackage{environ}
\makeatletter
\NewEnviron{multeq}{%
    \let\n\math@cr
    \begin{gather}
        \def\math@cr{\end{aligned}\n\begin{aligned}}
        \begin{aligned}
            \BODY
        \end{aligned}
    \end{gather}
}
\makeatother

\begin{document}
    \begin{multeq}
        1-1=9
    \end{multeq}
\end{document}

编译将失败,错误如下

! Missing $$ inserted.
<to be read again> 
                   \egroup 
l.20    \end{multeq}

所以,我无法弄清楚的问题是:当只有一个时有什么区别?此外,现在在里面使用和aligned似乎存在问题。如果有人有改进建议,那就太好了!\intertext\shortintertextmulteq

答案1

有个想法:我们不要对任何事物进行重新定义(这必然会引起麻烦某处),而是提前进行搜索和替换。

\documentclass{article}
\usepackage[fleqn]{amsmath}
\usepackage{xstring}
\usepackage{environ}

\NewEnviron{multeq}{%
  \def\n{\\}\noexpandarg
  \expandafter\StrSubstitute\expandafter{\BODY}{\\}{\end{aligned}\\\begin{aligned}}[\newBODY]
  \begin{gather}
    \begin{aligned}
      \newBODY
    \end{aligned}
  \end{gather}
}

\begin{document}

\begin{multeq}
    0 + 0 = 0\n
    0 * 0 = 0\\
    1 + 1 = 2\n
    1 * 1 = 1
\end{multeq}

\begin{multeq}
    0 + 0 = 0
\end{multeq}

\end{document}

相关内容