![如何通过 = 对齐方程式并通过索引对齐项?](https://linux22.com/image/436035/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20%3D%20%E5%AF%B9%E9%BD%90%E6%96%B9%E7%A8%8B%E5%BC%8F%E5%B9%B6%E9%80%9A%E8%BF%87%E7%B4%A2%E5%BC%95%E5%AF%B9%E9%BD%90%E9%A1%B9%EF%BC%9F.png)
我需要写一些大致类似这样的内容。
S = a(1) + a(2) + a(3) + a(4) + a(5) + a(6) + a(7) + a(8) + ...
+ b(2) + b(4) + b(6) + b(8) + ...
+ c(3) + c(6) + ...
+ d(4) + d(8) + ...
+ ...
S =
S =
那是几个在 = 处对齐的方程式,我习惯使用 align 和 &= 来实现这一点。这次的不同之处在于我想按索引对齐项,即 a(4)、b(4) 和 d(4) 在同一“列”中对齐。
您对如何干净地实现这种布局有什么建议吗?
答案1
必须对齐操作和关系符号;而且字母不需要具有相同的宽度,因此为了获得对齐,(n)
我们需要对这些条目进行右对齐。
您所需要的是一个具有 19 列的数组:奇数列右对齐,偶数列居中对齐(对于符号而言),但项目周围有空原子,因此 TeX 将自行提供正确的间距。
该语法>{{}}c<{{}}
意味着列居中对齐,但列中的每个项目前面{}
和后面都有{}
。因此,您可以得到,${}+{}$
这就是获得自动间距所需的内容。
列之间的分隔(本地)设置为零,因此只会插入那些自动空格。
\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\begin{document}
\[
\renewcommand*{\arraystretch}{1.5}
\setlength{\arraycolsep}{0pt}
\begin{array}{
r
*{9}{ >{{}}c<{{}} r }
}
S &=& a(1) &+& a(2) &+& a(3) &+& a(4) &+& a(5) &+& a(6) &+& a(7) &+& a(8) &+& \dotsb \\
& & &+& b(2) & & &+& b(4) & & &+& b(6) & & &+& b(8) &+& \dotsb \\
& & & & &+& c(3) & & & & &+& c(6) & & & & &+& \dotsb \\
& & & & & & &+& d(4) & & & & & & &+& d(8) &+& \dotsb \\
S &=& \\
S &=& \\
\end{array}
\]
\end{document}
答案2
我不得不同意 campa 的观点:array
确实需要更少的打字。
但仅用于文档:您可以使用 AMS 的环境执行相同的操作alignat
。(alignat
不插入空格,因此您必须自己添加空格)
\documentclass{amsart}
\usepackage{amsmath}
\begin{document}
\begin{alignat*}{10}
S =& a(1) &+& a(2) &+& a(3) &+& a(4) &+& a(5)& +& a(6)& +& a(7) &+& a(8) &+ &\ldots\\
+& && b(2) && &+& b(4) && &+& b(6)&& &+& b(8) &+& \ldots \\
+& && && c(3) && && &+& c(6) && && &+& \dots\\
+& && && && d(4) && && && &+& d(8) &+& \dots\\
+& ...
\end{alignat*}
\end{document}
编辑正如评论中指出的那样,上面的间距相当糟糕。这主要是因为需要将+
每行的符号直接对齐在等号下方,而不是与术语对齐b(2)
,c(3)
等等(这也可以通过一些幻像来解决,但对我来说似乎工作量太大)。
如果人们乐意将运算符与术语分组,而不要求符号+
在左侧排列,那么以下是一种更自然的方式(至少对我[以及下面的评论者]来说)来输入和格式化相同的信息:
\begin{alignat*}{10}
S &= a(1) &&+ a(2) &&+ a(3) &&+ a(4) &&+ a(5)&& + a(6)&& + a(7) &&+ a(8) &&+ \ldots\\
& && + b(2) && &&+ b(4) && &&+ b(6)&& &&+ b(8) && + \ldots \\
& && && + c(3) && && &&+ c(6) && && &&+ \dots\\
& && && && + d(4) && && && && + d(8) && + \dots\\
& && && && &&+ \ldots
\end{alignat*}