Já li os posts detalhando como criar um texto que não ocupe espaço. Minha pergunta é se estou fazendo isso corretamente neste caso.
\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}
O comando \n
parece um pouco hackeado para mim, então gostaria de saber se existe uma solução melhor para o meu problema.
Responder1
Sua definição não é realmente hackeada. Você pode defini-lo um pouco mais simples usando \llap
:
\newcommand\n{\llap{$-$}}
\llap
e \rlap
são essencialmente iguais a \makebox[0pt][r]
e \makebox[0pt][l]
, respectivamente.
Responder2
Existem maneiras melhores: o pacote systeme
e autoaligne
o . O primeiro tem uma sintaxe mais simples, o último é mais poderoso, mas também um pouco mais difícil quando faltam termos.
\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}
Responder3
O uso correto de alignat
torna as coisas muito mais simples. Lembre-se de que n grupos de alinhamento requerem 2n – 1 e comercial. Na verdade, aqui bastam 2 grupos:
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\begin{alignat*}{2}
a_1- a_2 &={} & -3 & \\
a_2 &= & 8 & \\
- a_2 & = & 8 & %
\end{alignat*}
\end{document}