用于居中、等间距表达式列的方程环境

用于居中、等间距表达式列的方程环境

我想要一个环境来显示数学表达式的行和列,这样每列的内容都居中,并且列间距相等。行必须具有可选的方程编号,与环境一样align*

我几个月前发布了一个类似的问题,答案如下: 表达式等距列的标准数学环境?

虽然我当时接受了那里的答案,但它存在一些缺点:我必须提前指定我需要多少列(align*例如,与现有环境不同),并且它不允许我以直接的方式获得行的方程编号。

2012 年 4 月 3 日编辑:语法必须如下:

\begin{newenvironment}
A & B & C
\\
\nonumber
f & g & h
\end{newenvironment}

这应该会在三列中显示两行数学公式,所有公式与页边距和彼此之间的间距均相等。第一行应该有方程编号,第二行则不应该。

答案1

好吧,下面的内容可能已经够脏了,而且我不得不承认我是通过反复试验才将它拼凑起来的,但至少它可能会激发精神来找到更好的解决方案。

尝试

\documentclass{article}

\usepackage{amsmath}

\usepackage{etoolbox}

\makeatletter
\def\calign@preamble{%
   &\hfil\strut@
    \setboxz@h{\@lign$\m@th\displaystyle{##}$}%
    \ifmeasuring@\savefieldlength@\fi
    \set@field
    \hfil
    \tabskip\alignsep@
}
\let\cmeasure@\measure@
\patchcmd\cmeasure@{\divide\@tempcntb\tw@}{}{}{}
\patchcmd\cmeasure@{\divide\@tempcntb\tw@}{}{}{}
\patchcmd\cmeasure@{\ifodd\maxfields@
  \global\advance\maxfields@\@ne
  \fi}{}{}{}    
\newenvironment{calign}
{%
  \let\align@preamble\calign@preamble
  \let\measure@\cmeasure@
  \align
}
{%
  \endalign
}  
\makeatother

\begin{document}

\begin{calign}
  A & \min(B,Z) & C
\\
\nonumber
f & g & h
\end{calign}

\end{document}

calign 示例

答案2

试试这个。虽然你仍然需要事先指定需要多少列,但添加方程编号很容易。

\documentclass{article}
\usepackage{lipsum,array,eqnarray,amsmath}

\begin{document}
\lipsum[1]
\newcolumntype{S}{@{}c@{}}
\newcolumntype{E}{@{}c@{\phantom{(1)}}} %Provision for eq number
\arraycolsep 0.2em
\begin{equationarray*}{@{\extracolsep{\fill}}S*{3}{c}E}
  & x+y & e^{2 \pi i} & \sigma & \\
  & \text{First} & \text{Second} & \text{Third} & \yesnumber \\
  & \sqrt{x+y+z} & \int{x^2} dx & \Omega & \\
\end{equationarray*}
\lipsum[2]

\end{document}

\yesnumber然后,您只需对要插入方程编号的每一行使用。如果您希望在行之间增加高度,则可以使用\setlength{\extrarowheight}{10pt}例如,但我个人会将其附加到幻影命令所在的位置,\vspace*{*max height*}因为这将确保无论内容如何,​​每行的高度都相同。例如,上面的积分会拉伸垂直空间。重新定义 E 可以\newcolumntype{E}{@{}c@{\phantom{\int{x^2}}\vspace*{0.1cm}}}解决它。

相关内容