![用于居中、等间距表达式列的方程环境](https://linux22.com/image/247424/%E7%94%A8%E4%BA%8E%E5%B1%85%E4%B8%AD%E3%80%81%E7%AD%89%E9%97%B4%E8%B7%9D%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%88%97%E7%9A%84%E6%96%B9%E7%A8%8B%E7%8E%AF%E5%A2%83.png)
我想要一个环境来显示数学表达式的行和列,这样每列的内容都居中,并且列间距相等。行必须具有可选的方程编号,与环境一样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}
答案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}}}
解决它。