如何在数学模式中添加幻影空间而不丢失“自然”间距?

如何在数学模式中添加幻影空间而不丢失“自然”间距?

我想在已经对齐的环境中对齐方程的内容,例如align

使用 mathcolor 命令实现良好对齐

下面是我使用\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 + b4 + \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{+}将其视为一种关系。

相关内容