我想定义一个新的环境,但也许它已经存在,而我不知道要搜索什么。
如果不存在,我想要的环境应该让方程式中心对齐,如果&
存在,则应该保持=
符号对齐。
\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 中,显示了三个单独对齐(左、中、右)的无标签堆栈,然后使用对齐标签进行输入。