[Tex/LaTex] Tabbing for math mode

alignmath-modetabbing

I'm looking for something synonymous to tabbing, but for math mode.

I read that alignat* should do the trick, but this behaves differently it seems. For example:

\documentclass{article}
\usepackage{amsmath}
\begin{document}

\begin{alignat*}{2}
S_4^{t} &= \{&\langle rdi, r12, rax' \rangle \mid \langle rdi, r12, rax \rangle \in S_4~\wedge \\
&& rax' = \{ rax \mid rax > 0 \} \}\\
\end{alignat*}

\end{document}

The second line appears to be right aligned, whereas I would like the & markers to be aligned with each other and then all text left aligned (like in tabbing).

Is anyone able to fix this code, or suggest an alternative.

Best Answer

As per Math indentation environment, the alignat provides multiple rl align pairs. Since your second alignment is intended to be l aligned, you need to use a double &&. The first & skips over the r aligned column of the rl align pair:

enter image description here

Notes:

  • The align environment also provides multiple rl alignment pairs. However, the alignat does not insert additional space that the align environment does between the rl alignment pairs. So, for cases where a separation is required between the alignment points with the alignat environment those would need to be inserted manually.
  • An alternative is to use the array environment. But one does need to be careful to remove inter column spacing using @{}, and to ensure that the relational or binary operators have the correct spacing by using {} to make TeX think that there is an element on the other side of the operator. This produces results identical to the above.

Code:

\documentclass{article}
\usepackage{amsmath}
\begin{document}

\begin{alignat*}{3}
S_4^{t} &= \{&&\langle rdi, r12, rax' \rangle \mid \langle rdi, r12, rax \rangle \in S_4~\wedge \\
        &    &&rax' = \{ rax \mid rax > 0 \} \}
\end{alignat*}

\[\begin{array}{l@{}l@{}l}
S_4^{t} &{}= \{&\langle rdi, r12, rax' \rangle \mid \langle rdi, r12, rax \rangle \in S_4~\wedge \\
        &      &rax' = \{ rax \mid rax > 0 \} \} \\
\end{array}\]
\end{document}
Related Question