我想在已经对齐的环境中对齐方程的内容,例如align
:
下面是我使用\phantom
命令技巧来获取先前的间距以及一个最小的工作示例:
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{amsmath}
\begin{document}
\begin{align*}
N &= (-9) - (+5) &
O &= (+7) - (-8) &
P &= (+5) + (-6) &
Q &= (-3) + (+2) \\
%
&=\phantom{(} -9 \phantom{)-(} -5 &
&=\phantom{(+} 7 \phantom{)-(} +8 &
&=\phantom{(+} 5 \phantom{)+(} -6 &
&=\phantom{(} -3 \phantom{)+(} +2
\end{align*}
\end{document}
我好像遇到了类似的问题问题 28075(二元运算符的幻像宽度)。 阅读这个答案对于问题 38984,我感觉我正在失去角色的类别,从而失去了“自然”的间距。
有没有在数学模式中添加幻象空间的正确方法?
答案1
简单的解决方法:只需将一元减号和加号括在花括号中{
}
:
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{amsmath}
\begin{document}
\begin{align*}
N &= (-9) - (+5) &
O &= (+7) - (-8) &
P &= (+5) + (-6) &
Q &= (-3) + (+2) \\
%
&=\hphantom{(} {-}9 \hphantom{)-(} {-}5 &
&=\hphantom{(+} 7 \hphantom{)-(} {+}8 &
&=\hphantom{(+} 5 \hphantom{)+(} {-}6 &
&=\hphantom{(} {-}3 \hphantom{)+(} {+}2
\end{align*}
\end{document}
二进制原子的规则有点特殊,以区分二进制减法 ( a + b
) 和一元减法 ( -1
)。在二进制情况下,运算符周围有额外的空格,而在后一种情况下则没有。
TeX 允许保留二进制运算符,如果它被兼容的上下文包围:a + b
,4 + \int
, ... 其他原子(如左侧的开括号)会阻止二进制间距:(-9)
设置时无需额外空格。但是,开括号的属性不会超出\phantom
。在这种情况下,TeX 将整个子公式\phantom{(}
视为二进制减法的可接受伙伴,并且间距会增加。
\mathord{-}
或者更短的{-}
强制 TeX 设置一元减号。后者有效,因为数学模式中的独立花括号会形成一个子公式,其作用相当于\mathord
。
答案2
对齐的 TABstack:
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{tabstackengine}
\stackMath
\setstackaligngap{0pt}
\begin{document}
\[
%\TABunaryLeft% IS ALREADY THE DEFAULT
\alignstackanchor[8pt]{
N =& (&-9&) - (&+5&) &\quad
O =& (&+7&) - (&-8&) &\quad
P =& (&+5&) + (&-6&) &\quad
Q =& (&-3&) + (&+2&)
}{
=& & -9& &-5 &&
=& & 7& &+8 &&
=& & 5& &-6 &&
=& & -3& & +2&
}
\]
\end{document}
答案3
您可以使用幻像,声明正确的类型,例如\mathopen{\hphantom{(}}
或\mathbin{\hphantom{+}}
,但也许更可定制的版本更好。
\documentclass[varwidth,margin=0.5cm]{standalone}
\usepackage{amsmath,array}
\begin{document}
\begin{equation*}
\renewcommand{\arraystretch}{1.5}
\setlength{\arraycolsep}{0pt}
\newcolumntype{E}{
r % left-hand side
>{{}}c<{{}} % equals
c % open parenthesis
r % number
c % closed parenthesis
>{{}}c<{{}} % operator
c % open parenthesis
r % number
c % closed parenthesis
}
\newcolumntype{?}{@{\hspace{.5em}}|@{\hspace{.5em}}}
\begin{array}{E ? E ? E ? E}
N &= &(& -9 &)& - &(& +5 &)&
O &= &(& +7 &)& - &(& -8 &)&
P &= &(& +5 &)& + &(& -6 &)&
Q &= &(& -3 &)& + &(& +2 &) \\
%
&= & & -9 & & & & -5 & &
&= & & 7 & & & & +8 & &
&= & & 5 & & & & -6 & &
&= & & -3 & & & & +2 &
\end{array}
\end{equation*}
\end{document}
如果您不想要规则,您可以重新定义列类型?
,在这种情况下,为了清楚地区分各种表达式,可能会更好。
答案4
不要使用\phantom{+}
,因为 (粗略地说)被解释为\phantom{{+}}
,即不是关系,而是使用
\mathrel{\phantom{+}}
这迫使人们\phantom{+}
将其视为一种关系。