答案1
使用 TABstacks,这是您想要的东西吗?
\documentclass{article}
\usepackage{tabstackengine}
\TABstackMath
\setstacktabulargap{0pt}
\TABbinary
\begin{document}
\[
\tabularCenterstack{rcl}{
&\vert a-b\vert & < c\\
-c <& a-b & < c
}
\]
\end{document}
在这种特殊情况下(但不是一般情况),\tabbedCenterstack
也可以使用 a 来实现相同的结果:
\documentclass{article}
\usepackage{tabstackengine}
\TABstackMath
\TABbinary
\begin{document}
\[
\tabbedCenterstack{
&\vert a-b\vert & < c\\
-c <& a-b & < c
}
\]
\end{document}
楼主问amsmath
环境是否可以单独使用。这里有个办法,但是用了鞋拔子,不太自然。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{alignat*}{3}
&|&a-b&| & {}< c\\
-c <& &a-b& & {}< c
\end{alignat*}
\end{document}
答案2
本质上,您希望 的宽度|a-b|
与 的宽度相匹配a-b
。这可以通过以下方式实现eqparbox
\eqmakebox[<tag>][<align>]{<stuff>}
,设置与所有 s 的最大宽度<stuff>
相同。默认设置是:<tag>
<tag>
<align>
c
\documentclass{article}
\usepackage{amsmath,eqparbox}
\begin{document}
\begin{align*}
\eqmakebox[abs]{$\lvert a - b \rvert$} & < c \\
-c < \eqmakebox[abs]{$a - b$} & < c
\end{align*}
\end{document}
答案3
alignat
以两组为一组的方式处理元素:l&r & l&r
并且组间不留任何空格。由于第二个“组”的左侧没有数字,因此要解决这个问题,您需要将第二个数字翻倍&
。您还需要在翻倍之后添加一个空组,&&
因为在组的第一个元素的开头没有运算符或关系的自动识别,因此间距不正确。
我也不明白为什么align
不适合——如果只使用一个对齐点,就不应该有任何大的空间。(我能想到的唯一原因是你想要一个没有完全描述的特殊对齐。)无论如何,我已经包含了一个例子align
以及alignat
。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{alignat*}{2}
& |a-b| && {} < c\\
-c & < a-b && {} < c
\end{alignat*}
\begin{align*}
|a-b| & < c\\
-c < a-b & < c
\end{align*}
\end{document}
答案4
有类似问题已经回答过。请参阅例如。 看一个更复杂的例子这里。看起来解决方案\tabularCenterstack
是最稳定的(但我没有测试\le
标志周围的间距是否合适)。
但是,如果您坚持使用alignat*
,请记住,在 中,每行\begin{alignat*}{2}
应该有三个&
符号。通常,在中,\begin{alignat*}{n}
您应该有2n-1
符号&
,以便您有2n
空格可以输入(包括开头、结尾和 s 之间的空格)。这些空格分别&
对应于等式的左侧和右侧。n
问题是alignat*
并不意味着在任何这些列中产生居中对齐(它们在右对齐和左对齐之间交替)。如果特定列中的所有项都相等,通常可以通过正确定位 s 来伪造居中对齐&
。有时您需要{}
在等号/不等号后使用 以获得正确的间距。在其他情况下,您可以尝试使用一些技巧,例如当\eqmakebox
两个项具有相同的大小时,但除非您使用 Wener 的一些技巧,否则解决方案将无法很好地扩展。