6

So I have two sets of equations that I'd like to be aligned, but they're broken up by two lines of text, the second of which should be indented.

MWE with Comments

\documentclass{article}
\usepackage{amsmath,mathtools,amssymb}
\DeclarePairedDelimiter{\sbar}{\lvert}{\rvert}
\newcommand{\tsbar}[1]{\sbar{#1}^\sigma_s}
\begin{document}
For this first one, I can't figure out an appropriate width for the parbox and I can't figure out how to indent the second line of text (neither the indent command nor an hspace works).
\begin{align*}
        \tsbar{\phi x_1,\dots,v_k} &= T \text{ iff } \langle \sigma(v_1),\dots,\sigma(v_k) \rangle \in \sbar{\phi}_s;\\
        \tsbar{\lnot \phi} &= T \text{ iff } \tsbar{\phi} \neq T;\\
        \tsbar{\phi \rightarrow \psi} &= T \text{ iff } \tsbar{\phi}\neq T \text{ or } \tsbar{\psi}=T;\\
        \tsbar{\forall x \phi} &= T \text{ iff, for every } a\in D_s,\ \sbar{\phi}^{[v/a]} = T;\\
        \tsbar{\Box_> \phi} &= T \text{ iff, for every } t > s, \tsbar{\phi} = T;\\
        \tsbar{\Box_< \phi} &= T \text{ iff, for every } t < s, \tsbar{\phi} = T.\\
\parbox{15em}{(Later-than is given the obvious definition: $t > s =_{df} s < t$.)\\[1ex]
%
\indent Then, the defined operators:}\\
        \tsbar{\Box_\geq \phi} &= T \text{ iff, for every } t \geq s, \tsbar{\phi} = T;\\
        \tsbar{\Box_\leq \phi} &= T \text{ iff, for every } t \leq s, \tsbar{\phi} = T;\\
        \tsbar{\Box \phi} &= T \text{ iff, for every } t \leq s \vee s \leq t, \tsbar{\phi} = T.
\end{align*}
This one gives me everything I want, but yields a ``misplaced alignment character'' error that only disappears when I remove the double backslash before the second line in the intertext (and I haven't figured out how to produce the requisite spacing without it). 
\begin{align*}
        \tsbar{\phi x_1,\dots,v_k} &= T \text{ iff } \langle \sigma(v_1),\dots,\sigma(v_k) \rangle \in \sbar{\phi}_s;\\
        \tsbar{\lnot \phi} &= T \text{ iff } \tsbar{\phi} \neq T;\\
        \tsbar{\phi \rightarrow \psi} &= T \text{ iff } \tsbar{\phi}\neq T \text{ or } \tsbar{\psi}=T;\\
        \tsbar{\forall x \phi} &= T \text{ iff, for every } a\in D_s,\ \sbar{\phi}^{[v/a]} = T;\\
        \tsbar{\Box_> \phi} &= T \text{ iff, for every } t > s, \tsbar{\phi} = T;\\
        \tsbar{\Box_< \phi} &= T \text{ iff, for every } t < s, \tsbar{\phi} = T.\\
\intertext{(The later-than relation on stages is given the obvious definition: $t > s =_{df} s < t$.)\\
%
Then, the defined operators:}
        \tsbar{\Box_\geq \phi} &= T \text{ iff, for every } t \geq s, \tsbar{\phi} = T;\\
        \tsbar{\Box_\leq \phi} &= T \text{ iff, for every } t \leq s, \tsbar{\phi} = T;\\
        \tsbar{\Box \phi} &= T \text{ iff, for every } t \leq s \vee s \leq t, \tsbar{\phi} = T.
\end{align*}
\end{document}

The desired formatting (the one produced by the second attempt in the MWE, the one with the alignment character error) is as follows:

enter image description here

How can I get this accomplished?

5

I'd use \linewidth for the width of the \parbox. There is a small catch: the macro called by align (or the *-variant thereof) doesn't accept \par inside it, so you can't use \par (or a blank line) for ending paragraphs in the \longintertext macro I suggest. A workaround is to use \endgraf.

\documentclass{article}
\usepackage{amsmath,mathtools,amssymb}
\DeclarePairedDelimiter{\sbar}{\lvert}{\rvert}

\newcommand{\tsbar}[1]{\sbar{#1}^\sigma_s}

\newlength{\normalparindent}
\AtBeginDocument{\setlength{\normalparindent}{\parindent}}
\newcommand{\longintertext}[1]{%
  \intertext{%
    \parbox{\linewidth}{%
      \setlength{\parindent}{\normalparindent}
      \noindent#1%
    }%
  }%
}

\begin{document}

For this first one, I can't figure out an appropriate width for the parbox and I can't figure out how 
to indent the second line of text (neither the indent command nor an hspace works).
\begin{align*}
        \tsbar{\phi x_1,\dots,v_k} &= T \text{ iff } \langle \sigma(v_1),\dots,\sigma(v_k) \rangle \in \sbar{\phi}_s;\\
        \tsbar{\lnot \phi} &= T \text{ iff } \tsbar{\phi} \neq T;\\
        \tsbar{\phi \rightarrow \psi} &= T \text{ iff } \tsbar{\phi}\neq T \text{ or } \tsbar{\psi}=T;\\
        \tsbar{\forall x \phi} &= T \text{ iff, for every } a\in D_s,\ \sbar{\phi}^{[v/a]} = T;\\
        \tsbar{\Box_> \phi} &= T \text{ iff, for every } t > s, \tsbar{\phi} = T;\\
        \tsbar{\Box_< \phi} &= T \text{ iff, for every } t < s, \tsbar{\phi} = T.\\
\longintertext{%
  (Later-than is given the obvious definition: $t > s =_{df} s < t$.)\endgraf
  Then, the defined operators:
}
        \tsbar{\Box_\geq \phi} &= T \text{ iff, for every } t \geq s, \tsbar{\phi} = T;\\
        \tsbar{\Box_\leq \phi} &= T \text{ iff, for every } t \leq s, \tsbar{\phi} = T;\\
        \tsbar{\Box \phi} &= T \text{ iff, for every } t \leq s \vee s \leq t, \tsbar{\phi} = T.
\end{align*}
\end{document}

enter image description here

  • Another great solution! Is there any practical difference between this and simply putting \endgraf after the first line in an \intertext? – Dennis Nov 30 '15 at 0:02
  • 1
    \intertext uses \vbox, which doesn't do all the initializations performed by \parbox, so some unexpected results can show up. Perhaps \linewidth is better than \displaywidth, though. If you don't plan to use \\ for other reasons, you can add \let\\=\par to the code, before \noindent, and use \\ instead of \endgraf. – egreg Nov 30 '15 at 0:08
4

An alternative solution (with desired indent and vertical space between lines in the inter text):

    \documentclass{article}
    \usepackage{amsmath,mathtools,amssymb}
    \DeclarePairedDelimiter{\sbar}{\lvert}{\rvert}
    \newcommand{\tsbar}[1]{\sbar{#1}^\sigma_s}

\begin{document}
    For this first one, I can't figure out an appropriate width for the parbox and I can't figure out how to indent the second line of text (neither the indent command nor an hspace works).
        \begin{align*}
    \tsbar{\phi x_1,\dots,v_k} 
        &= T \text{ iff } \langle \sigma(v_1),\dots,\sigma(v_k) \rangle \in \sbar{\phi}_s;\\
    \tsbar{\lnot \phi} 
        &= T \text{ iff } \tsbar{\phi} \neq T;\\
    \tsbar{\phi \rightarrow \psi} 
        &= T \text{ iff } \tsbar{\phi}\neq T \text{ or } \tsbar{\psi}=T;\\
    \tsbar{\forall x \phi} 
        &= T \text{ iff, for every } a\in D_s,\ \sbar{\phi}^{[v/a]} = T;\\
    \tsbar{\Box_> \phi} 
        &= T \text{ iff, for every } t > s, \tsbar{\phi} = T;\\
    \tsbar{\Box_< \phi} 
        &= T \text{ iff, for every } t < s, \tsbar{\phi} = T.\\
    \intertext{(Later-than is given the obvious definition: $t > s =_{df} s < t$.)
        \smallskip\newline
        \hspace*{\parindent}
               Then, the defined operators:}
    \tsbar{\Box_\geq \phi}  
        & = T \text{ iff, for every } t \geq s, \tsbar{\phi} = T;\\
    \tsbar{\Box_\leq \phi}  
        & = T \text{ iff, for every } t \leq s, \tsbar{\phi} = T;\\
    \tsbar{\Box \phi}       
        & = T \text{ iff, for every } t \leq s \vee s \leq t, \tsbar{\phi} = T.
        \end{align*}
    \end{document}

enter image description here

Edit: Before David Carlisle comment I was not aware of \endgraf. By it can be rude solution:

        \smallskip\newline
        \hspace*{\parindent}

replaced by simple

        \endgraf
  • This gets exactly what I want, thanks. As a side note, the \mbox{} is not necessary when \hspace*{\parindent} is used, but there might be some subtle difference I'm missing. – Dennis Nov 29 '15 at 23:38
  • @Denis, you have right. It was forgetting there, since in the first I test with \quad. I will correct the answer. – Zarko Nov 29 '15 at 23:42
  • Also, what's the purpose of the \smallskip before \newline? I see it provides a little bit of extra spacing, does the article class typically put a little extra space between paragraphs as opposed to simply arbitrary new lines? – Dennis Nov 29 '15 at 23:43
  • 2
    If you want a paragraph indentation simpler just to use \endgraf instead of \newline and none of the \mbox and \hspace weirdness – David Carlisle Nov 29 '15 at 23:45
  • 1
    @Dennis, I just overtaken it from your MWE. I assumed, that you like with it emulate \parskip between paragraphs, so I left it there. For exact emulation it should be replaced with \vspace{\parskip} (not yet tested,). – Zarko Nov 29 '15 at 23:48
1

\\ is defined for the alignment, but you can use \newline

\intertext{(The later-than relation on stages is given the obvious definition: $t > s =_{df} s < t$.)\newline
%
Then, the defined operators:}

(But you get a terrible line break with the text width in the MWE, just before the forced break)

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.