マイナス記号をスペースを取らないようにする

マイナス記号をスペースを取らないようにする

スペースを取らないテキストを作成する方法を詳しく説明した投稿はすでに読みました。私の質問は、この場合、それを正しく行っているかどうかです。

\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

あなたの定義はそれほどハッキーではありません。次のようにしてもう少し簡単に定義できます\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} 

ここに画像の説明を入力してください

関連情報