clean, breakable left-aligned array-like environment

The centered, yet left-aligned aspect of \begin{array}{lll} ... \end{array} is what I usually go with to give a list of conditions. My only problem with it, is that it is not breakable, so I try to replace it with \begin{align}... \end{align}-like environments.

The closest result I get is with \begin{flalign*} ...\end{flalign*}. Then I can use \allowdisplaybreaks[2]. But I generally have to play around with &'s to get the "look" I want.

Is there a cleaner way to achieve a breakable left-aligned array-like environment?

Below is a concrete example, comparing the result with both array and flalign.

(Also, as a side question, is it me, or are there some irregularities in the vertical spacing in the flalign version: namely there is more vertical spacing between line 5 and line 6, than between others, because of the subscript at the end of line 6. If so, can I avoid that?)

\documentclass[draft,11pt]{article}
\sloppy

\usepackage{amsmath,amssymb}

\newcommand{\labarrow}[1]{\ensuremath{\overset{#1}{\rightarrow} }}
\newcommand{\N}{\ensuremath{\mathsf{N}}}
\newcommand{\diam}[1]{\ensuremath{\langle #1 \rangle}}
\newcommand{\da}{\mathopen{\downarrow}}
\newcommand{\model}{\mathbb{M}}
\newcommand{\logic}[1]{\textsf{#1}}

\allowdisplaybreaks[2]

\begin{document}

$$\begin{array}{lll} \model,w,g \models x & \textup{ iff } & g(x)=w\\ \model,w,g \models \logic{turn}_i & \textup{ iff } & \rho(x)=i\\ \model,w,g \models @_x \phi & \textup{ iff } & g(x)\in|\model| \textup{ and } \model,g(x),g\models\phi\\ \model,w,g \models \da x.\phi & \textup{ iff } & \model,w,g[g(x):=w]\models\phi\\ \model,w,g \models [!\N_i]\phi & \textup{ iff } & {\model|_{\N_i(w)}},w,g \models \phi\\ \model,w,g \models \diam{\alpha}\phi & \textup{ iff } & \textup{there exists some }v\textup{ with }(w,v)\in||\alpha||^\model\\ & &\textup{and }\model,v,g \models \phi \end{array}$$

\begin{flalign*}
&&&\model,w,g \models x && \textup{ iff } && g(x)=w&&\\
&&&\model,w,g \models \logic{turn}_i && \textup{ iff } && \rho(x)=i&&\\
&&&\model,w,g \models @_x \phi && \textup{ iff } && g(x)\in|\model| \textup{ and } \model,g(x),g\models\phi&&\\
&&&\model,w,g \models \da x.\phi && \textup{ iff } && \model,w,g[g(x):=w]\models\phi&&\\
&&&\model,w,g \models [!\N_i]\phi && \textup{ iff } && {\model|_{\N_i(w)}},w,g \models \phi&&\\
&&&\model,w,g \models \diam{\alpha}\phi && \textup{ iff } && \textup{there exists some }v\textup{ with }(w,v)\in||\alpha||^\model&&\\
&&& && &&\textup{and }\model,v,g \models \phi&
\end{flalign*}

\end{document}

• – Werner Jan 19 '14 at 16:34

You want alignat rather than flalign. Note the tabular used for splitting the last item into two lines, so that no page break is taken here and the vertical spacing is better.

\documentclass[draft,11pt]{article}
\usepackage[pass,showframe]{geometry} % just to show page frames
\setlength{\textheight}{5cm} % just to induce a page break
\usepackage{lipsum} % for some text

\usepackage{amsmath,amssymb}

\newcommand{\labarrow}[1]{\overset{#1}{\rightarrow}}
\newcommand{\N}{\mathsf{N}}
\newcommand{\diam}[1]{\langle #1 \rangle}
\newcommand{\da}{\mathopen{\downarrow}}
\newcommand{\model}{\mathbb{M}}
\newcommand{\logic}[1]{\textsf{#1}}

% for the iff'' separator

\allowdisplaybreaks[2]

\begin{document}

\lipsum*[2]
\begin{alignat*}{3}
&\model,w,g \models x                 && \eiff &&
g(x)=w \\
&\model,w,g \models \logic{turn}_i    && \eiff &&
\rho(x)=i \\
&\model,w,g \models @_x \phi          && \eiff &&
g(x)\in|\model| \textup{ and } \model,g(x),g\models\phi \\
&\model,w,g \models \da x.\phi        && \eiff &&
\model,w,g[g(x):=w]\models\phi \\
&\model,w,g \models [!\N_i]\phi       && \eiff &&
{\model|_{\N_i(w)}},w,g \models \phi \\
&\model,w,g \models \diam{\alpha}\phi && \eiff &&
\begin{tabular}[t]{@{}l@{}}
there exists some $v$ with $(w,v)\in||\alpha||^\model$ \\
and $\model,v,g \models \phi$
\end{tabular}
\end{alignat*}

\end{document}


I would suggest alignat. Consider

\begin{alignat*}{3}
&pp && qq && rr
\end{alignat*}


Then each piece of mathematics will be left aligned in its column, and the space between the columns will be given by \quad. You could adjust this spacing by using other spacing commands, \hspace{1em} will be the same as one quad.

\documentclass[draft,11pt]{article}

\usepackage{amsmath,amssymb}

\newcommand{\labarrow}[1]{\ensuremath{\overset{#1}{\rightarrow} }}
\newcommand{\N}{\ensuremath{\mathsf{N}}}
\newcommand{\diam}[1]{\ensuremath{\langle #1 \rangle}}
\newcommand{\da}{\mathopen{\downarrow}}
\newcommand{\model}{\mathbb{M}}
\newcommand{\logic}[1]{\textsf{#1}}

\allowdisplaybreaks[2]

\begin{document}

\begin{alignat*}{3}