使负号不占用空间

使负号不占用空间

我已经阅读了详细介绍如何创建不占用任何空间的文本的帖子。我的问题是,在这种情况下我是否做得正确。

\documentclass{article}

\usepackage{mathtools}

\newcommand{\n}{\makebox[0pt][r]{$-$}}

\begin{document}
Not using my custom command
\begin{alignat*}{3}
  a_1 & {}-{} & a_2 & {}={} & -3\\
      && a_2 & {}={} & 8\\
      && - a_2 & {}={} & 8
\end{alignat*}

Using my custom command
\begin{alignat*}{3}
  a_1 & {}-{} & a_2 & {}={} & -3\\
      && a_2 & {}={} & 8\\
      && \n a_2 & {}={} & 8
\end{alignat*}
\end{document}

这个命令\n对我来说似乎有点奇怪,所以我想知道是否有更好的方法来解决我的问题。

答案1

你的定义并不是很 hack。你可以使用以下方法更简单地定义它\llap

\newcommand\n{\llap{$-$}}

\llap和基本分别与和\rlap相同。\makebox[0pt][r]\makebox[0pt][l]

答案2

还有更好的方法:包systemeautoaligne。前者的语法更简单,后者功能更强大,但在缺少术语时也会更困难一些。

\documentclass{article}

\usepackage{autoaligne}
\usepackage{systeme}
\usepackage{regexpatch}

% see http://tex.stackexchange.com/questions/247070/
\makeatletter
\xpatchcmd{\SYS@makesyspreamble@i}
  {$##$\hfil\null}% left alignment
  {\hfil$##$\null}% right alignment
  {}{}
\makeatother

\begin{document}
\[
\sysdelim..
\systeme{
  a_1 - a_2 = -3,
  a_2 = 8,
 -a_2= -8
}
\]

\[
\autoaligne[dd]{%
a_1-a_2=-3 \\%
+a_2=8 \\
-a_2=-8
}
\]

\end{document}

在此处输入图片描述

答案3

正确使用alignat会让事情变得简单很多。请记住,n 个对齐组需要 2n – 1 个 & 符号。实际上,这里 2 个组就足够了:

\documentclass{article}

\usepackage{mathtools}

\begin{document}

\begin{alignat*}{2}
  a_1- a_2 &={} & -3 & \\
       a_2 &= & 8 & \\
       - a_2 & = & 8 & %
\end{alignat*}

\end{document} 

在此处输入图片描述

相关内容