模拟聚集或对齐的自定义环境

模拟聚集或对齐的自定义环境

我想定义一个新的环境,但也许它已经存在,而我不知道要搜索什么。

如果不存在,我想要的环境应该让方程式中心对齐,如果&存在,则应该保持=符号对齐。

\documentclass{article}
\begin{document}

\begin{customEnv}%behave like gather
   a=1,\\
   b=1111111111111111111111111111.
\end{customEnv}

\begin{customEnv}%behave like align
   a&=1,\\
   b&=1111111111111111111111111111.
\end{customEnv}

\end{document}

PS:如果我们可以使用一些参数来改变环境在没有时的行为&,那么它会根据这个参数默认为中心、左边或右边,这样就可以获得加分!

PPS:如果可能的话,请尝试仅使用可用的标准包。

答案1

align你确定你得到了什么吗?我不确定。例如,你放弃了嵌套或aligned嵌套的能力gather

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse,environ}

\ExplSyntaxOn
\NewEnviron{customEnv}
 {
  \tl_if_in:NnTF \BODY { & }
   {
    \begin{align}\BODY\end{align}
   }
   {
    \begin{gather}\BODY\end{gather}
   }
 }
\ExplSyntaxOff

\begin{document}

\begin{customEnv}%behave like gather
   a=1,\\
   b=1111111111111111111111111111.
\end{customEnv}

\begin{customEnv}%behave like align
   a&=1,\\
   b&=1111111111111111111111111111.
\end{customEnv}

\end{document}

在此处输入图片描述

答案2

这里我使用 TABstacks。我使用\readTABstack功能来吸收数据并分析输入。该\TABcells功能告诉我第 1 行有多少列。如果是 1,我使用\Centerstack,否则使用\alignCenterstack

然而,我必须补充声明:TABstack 不会对每个方程进行唯一的编号。

\documentclass{article}
\usepackage{tabstackengine}
\newcommand\mystack[2][c]{%
  \readTABstack{#2}%
  \ifnum\TABcells{1}=1\relax%
    \Centerstack[#1]{#2}%
  \else%
    \alignCenterstack{#2}%
  \fi%
}
\stackMath
\begin{document}
\[\mystack[l]{%behave like gather
   W=1,\\
   b=1111111111111111111111111111.
}\]
\[\mystack[c]{%behave like gather
   W=1,\\
   b=1111111111111111111111111111.
}\]
\[\mystack[r]{%behave like gather
   W=1,\\
   b=1111111111111111111111111111.
}\]
\[\mystack{%behave like align
   W=&1,\\
   b=&1111111111111111111111111111.
}\]
\end{document}

在上面的 MWE 中,显示了三个单独对齐(左、中、右)的无标签堆栈,然后使用对齐标签进行输入。

在此处输入图片描述

相关内容