我刚刚收到一份关于我提交给期刊的论文的报告,编辑希望我做的一件事就是将所有 替换为array
。align
提交的论文包含以下内容:
\[ \begin{array}{l@{}l@{}lcc@{}c@{}ccr@{}r@{}r@{}r@{}r@{}r@{}r}
\sigma^{\ast}(x^3) &+& \tau^{\ast}(x^3) &=& (x+y)^3 &+& x^3 &=& 2 x^3 &+& 3 x^2 y &+& 3 x y^2 &+& y^3 \\
\sigma^{\ast}(x^2 y) &+& \tau^{\ast}(x^2 y) &=& (x+y)^2 y &+& x^2 (x+y) &=& x^3 &+& 2 x^2 y &+& 2 x y^2 &+& y^3 \\
\sigma^{\ast}(x y^2) &+& \tau^{\ast}(x y^2) &=& (x+y) y^2 &+& x (x+y)^2 &=& x^3 &+& 2x^2 y &+& 2 x y^2 &+& y^3 \\
\sigma^{\ast}(y^3) &+& \tau^{\ast}(y^3) &=& y^3 &+& (x+y)^3 &=& x^3 &+& 3 x^2 y &+& 3 x y^2 &+& 2 y^3 \\
\end{array} \]
尝试用写这篇文章align
,我想到了
\begin{align*}
\sigma^{\ast}(x^3) &+ \tau^{\ast}(x^3) &= (x+y)^3 &+ x^3 &= 2 x^3 &+ 3 x^2 y &+ 3 x y^2 &+ y^3 \\
\sigma^{\ast}(x^2 y) &+ \tau^{\ast}(x^2 y) &= (x+y)^2 y &+ x^2 (x+y) &= x^3 &+ 2 x^2 y &+ 2 x y^2 &+ y^3 \\
\sigma^{\ast}(x y^2) &+ \tau^{\ast}(x y^2) &= (x+y) y^2 &+ x (x+y)^2 &= x^3 &+ 2x^2 y &+ 2 x y^2 &+ y^3 \\
\sigma^{\ast}(y^3) &+ \tau^{\ast}(y^4) &= y^3 &+ (x+y)^3 &= x^3 &+ 3 x^2 y &+ 3 x y^2 &+ 2 y^3
\end{align*}
我认为,第二个更糟糕。+ 和 = 符号没有对齐;为了便于解析,在 = 周围使用空格而不是在 + 周围使用空格的选择已被删除;匹配的单项式不再对齐。
经过一番折腾,我想出了
\begin{alignat*}{14}
&\sigma^{\ast}(x^3) &&+ \tau^{\ast}(x^3) & \ \ = \ \ & (x+y)^3 &+& x^3 & \ \ = \ \ && 2 x^3 &+& 3 x^2 y &+& 3 x y^2 &+& y^3 \\
&\sigma^{\ast}(x^2 y) &&+ \tau^{\ast}(x^2 y) & \ \ = \ \ & (x+y)^2 y &+& x^2 (x+y) & \ \ = \ \ && x^3 &+& 2 x^2 y &+& 2 x y^2 &+& y^3 \\
&\sigma^{\ast}(x y^2) &&+ \tau^{\ast}(x y^2) & \ \ = \ \ & (x+y) y^2 &+& x (x+y)^2 & \ \ = \ \ && x^3 &+& 2x^2 y &+& 2 x y^2 &+& y^3 \\
&\sigma^{\ast}(y^3) &&+ \tau^{\ast}(y^4) & \ \ = \ \ & y^3 &+& (x+y)^3 & \ \ = \ \ && x^3 &+& 3 x^2 y &+& 3 x y^2 &+& 2 y^3
\end{alignat*}
这并不糟糕——我更喜欢将中间的方程式项居中,而不是左对齐,但这没什么大不了的——但这显然像是在滥用环境alignat
,而且 + 周围的间距似乎不太一致。有没有一种更易读的方式来生成类似顶部版本的内容,而无需使用array
?
答案1
很可能评论者更多反对的是间距不均匀,而不是显示的具体实现方式。
\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\begin{document}
\[
\setlength{\arraycolsep}{0pt}% let TeX add spaces
\renewcommand{\arraystretch}{1.2}% emulate align
\newcolumntype{O}{>{{}}c<{{}}}% operations and relations
\begin{array}{
l % first column
O % operation
l % second column
O % relation
c % third column
O % operation
c % fourth column
O % relation
r % fifth column
O % operation
r % sixth column
}
\sigma^{*}(x^3) &+& \tau^{*}(x^3) &=& (x+y)^3 &+& x^3 &=& 2x^3 + 3x^2y + 3xy^2 &+& y^3 \\
\sigma^{*}(x^2y) &+& \tau^{*}(x^2y) &=& (x+y)^2y &+& x^2(x+y) &=& x^3 + 2x^2y + 2xy^2 &+& y^3 \\
\sigma^{*}(xy^2) &+& \tau^{*}(xy^2) &=& (x+y)y^2 &+& x(x+y)^2 &=& x^3 + 2x^2y + 2xy^2 &+& y^3 \\
\sigma^{*}(y^3) &+& \tau^{*}(y^3) &=& y^3 &+& (x+y)^3 &=& x^3 + 3x^2y + 3xy^2 &+& 2y^3\\
\end{array}
\]
\end{document}
我删除了一些对齐点,因为最终多项式的中间项具有相似的结构,所以它们自然对齐,但如果需要,可以使用相同的方案将它们添加回来。
列O
类型在本地引入只是为了方便输入。它是如何工作的?首先,我将列间距设置为零,但{}
在操作或关系符号的两侧添加,因此 TeX 的空格插入规则会自动起作用。
使用 可以获得非常相似的输出IEEEeqnarray
。请参阅https://moser-isi.ethz.ch/docs/typeset_equations.pdf了解使用说明。
\documentclass{article}
\usepackage{amsmath}
\usepackage{IEEEtrantools}
\begin{document}
\begin{IEEEeqnarray*}{lClCcCcCrCr}
\sigma^{*}(x^3) &+& \tau^{*}(x^3) &=& (x+y)^3 &+& x^3 &=& 2x^3 + 3x^2y + 3xy^2 &+& y^3 \\
\sigma^{*}(x^2y) &+& \tau^{*}(x^2y) &=& (x+y)^2y &+& x^2(x+y) &=& x^3 + 2x^2y + 2xy^2 &+& y^3 \\
\sigma^{*}(xy^2) &+& \tau^{*}(xy^2) &=& (x+y)y^2 &+& x(x+y)^2 &=& x^3 + 2x^2y + 2xy^2 &+& y^3 \\
\sigma^{*}(y^3) &+& \tau^{*}(y^3) &=& y^3 &+& (x+y)^3 &=& x^3 + 3x^2y + 3xy^2 &+& 2y^3\\
\end{IEEEeqnarray*}
\end{document}
答案2
array
编辑器对使用和环境可以生成的内容进行了过多区分alignat*
。下面演示了array
和alignat*
环境的输出实际上几乎无法区分 —— 当然,它们在排版上也是正确的。
有四个不同的方面可以使 的输出array
看起来与 的输出相同alignat*
:(a)设置\arraycolsep
为 0pt;(b)创建定制的列类型来“容纳”+
和=
符号,以确保它们分别被 TeX 视为二进制和关系运算符;(c)确保其他数学部分默认处理\displaystyle
;(d)将 的值增加\arraystretch
约三分之一。
\documentclass{article} % or some other suitable document class
\usepackage{amsmath} % for 'alignat*' env.
\usepackage{array} % for '\newcolumntype' macro
\newcolumntype{C}{>{{}}c<{{}}} % for binary and relational operators
\newcolumntype{L}{>{\displaystyle}l} % automatic display-style math mode
\begin{document}
% Solution 1: An 'array' env. inside a \[ ... \] group
\[
\setlength\arraycolsep{0pt} % default: 5pt
\renewcommand\arraystretch{1.35} % default: 1.0
\begin{array}{ *{7}{LC} L } % make full use of 'L' and 'C' column types
\sigma^*(x^3) &+& \tau^*(x^3) &=& (x+y)^3 &+& x^3 &=& 2 x^3 &+& 3 x^2 y &+& 3 x y^2 &+& y^3 \\
\sigma^*(x^2 y) &+& \tau^*(x^2 y) &=& (x+y)^2 y &+& x^2 (x+y) &=& x^3 &+& 2 x^2 y &+& 2 x y^2 &+& y^3 \\
\sigma^*(x y^2) &+& \tau^*(x y^2) &=& (x+y) y^2 &+& x (x+y)^2 &=& x^3 &+& 2x^2 y &+& 2 x y^2 &+& y^3 \\
\sigma^*(y^3) &+& \tau^*(y^3) &=& y^3 &+& (x+y)^3 &=& x^3 &+& 3 x^2 y &+& 3 x y^2 &+& 2 y^3
\end{array}
\]
% Solution 2: Standalone alignat* environment
\begin{alignat*}{8} % Why 8? There are 15 '&' symbols per row, and (15+1)/2=8.
&\sigma^*(x^3) &&+ \tau^*(x^3) &&= (x+y)^3 &&+ x^3 &&= 2 x^3 &&+ 3 x^2 y &&+ 3 x y^2 &&+ y^3 \\
&\sigma^*(x^2 y) &&+ \tau^*(x^2 y) &&= (x+y)^2 y &&+ x^2 (x+y) &&= x^3 &&+ 2 x^2 y &&+ 2 x y^2 &&+ y^3 \\
&\sigma^*(x y^2) &&+ \tau^*(x y^2) &&= (x+y) y^2 &&+ x (x+y)^2 &&= x^3 &&+ 2x^2 y &&+ 2 x y^2 &&+ y^3 \\
&\sigma^*(y^3) &&+ \tau^*(y^3) &&= y^3 &&+ (x+y)^3 &&= x^3 &&+ 3 x^2 y &&+ 3 x y^2 &&+ 2 y^3
\end{alignat*}
\end{document}