7

When I try to compile my LaTeX file, where begin{align*} environment is to be used, I constantly get an error:

! Missing } inserted.
<inserted text>
                 }
 1.164 \end{align*}

My LaTeX snippet:

\begin{align*}
X^{(0)} = \lbrace \mathsf{PR \ R \ ST0 \ T+ \ TP \ PR \ , \ PR \ R \ ST- \ T- \ TP \ PR \ , \\ \ PR \ rs \ ST0 \ T- \ TP \ PR \ , \ PR \ rS \ ST+ \ T+ \ TP \ PR \ , \\ \ PR \ Rs \ ST+ \ T+ \ TP \ PR} \rbrace
\end{align*}

The reason I would like to use align*environment is to make the long math mode line to break. I tried to use different commands (linebreak, allowbreak, //, etc.), but they would not help.

5
  • Welcome to TeX.SX! I guess the problem is that you open \mathsf in the first line and then don't close it with } before the end of the line marked by \\ . If you want to keep this approach of \mathsfying everything at once, you have to repeat it in every line of align*.
    – gernot
    Sep 18, 2016 at 11:14
  • @gernot the problem lies with the linebreaking inside the align*. all braces are present and accounted for.
    – naphaneal
    Sep 18, 2016 at 12:42
  • 1
    @naphaneal \mathsf{ ... \\ ...} causes the problem. If you want to do a general switch to mathsf (probably not, but if) then you have to repeat it, like \mathsf{ ... } \\ \mathsf{ ...}.
    – gernot
    Sep 18, 2016 at 12:56
  • Could you give details of what does that represent? Just to understand what exactly are you writing about, and may be suggest better ways.
    – Manuel
    Sep 18, 2016 at 13:46
  • Hi, these are "structural primitives" representing ECG signal elements. Sep 19, 2016 at 12:54

2 Answers 2

6

In my comment above I have already pointed out what causes the error message. Beyond that, I'm not convinced that you are on the right track. Pure guessing, but I suppose that each of these letter combinations designates some entity that will occur more frequently. To achieve consistent typesetting I suggest to use macros. E.g., you can rewrite your example as follows.

\documentclass{article}
\usepackage{amsmath}
\newcommand\PR{\mathsf{PR}}
\newcommand\R{\mathsf{R}}
\newcommand\STz{\mathsf{ST_0}}
\newcommand\STm{\mathsf{ST_-}}
\newcommand\STp{\mathsf{ST_+}}
\newcommand\Tp{\mathsf{T_+}}
\newcommand\Tm{\mathsf{T_-}}
\newcommand\TP{\mathsf{TP}}
\newcommand\rs{\mathsf{rs}}
\newcommand\rS{\mathsf{rS}}
\newcommand\Rs{\mathsf{Rs}}
\begin{document}
\begin{align*}
  X^{(0)} = \lbrace\;
    & \PR\;\R\;\STz\;\Tp\;\TP\;\PR,\;
      \PR\;\R\;\STm\;\Tm\;\TP\;\PR, \\
    & \PR\;\rs\;\STz\;\Tm\;\TP\;\PR,\;
      \PR\;\rS\;\STp\;\Tp\;\TP\;\PR, \\
    & \PR\;\Rs\;\STp\;\Tp\;\TP\;\PR\;\rbrace
\end{align*}
\end{document}

This will give the following output.

enter image description here

To avoid to hard-code the formatting of the chains of identifiers (like putting some space inbetween), you can put the definitions

\newcommand\chainend{\chainend}
\newcommand\chain[1]{\chainx#1\chainend}
\newcommand\chainx[1]%
  {\ifx\chainend#1\let\chainy\unskip % at the end, remove the last \;
   \else#1\;\let\chainy\chainx % here \; is inserted between any two items of the chain
   \fi
   \chainy
  }
\newcommand\chainy{}

into the preamble and then just write

 \chain{\PR\R\STz\Tp\TP\PR}

instead of

 \PR\;\R\;\STz\;\Tp\;\TP\;\PR
4

The problem is that you can't end a line when \mathsf has not yet ended.

Decide where the breaks should go and add \mathsf:

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\begin{equation*}
\begin{aligned}
X^{(0)} = \lbrace
 & \mathsf{PR \ R \ ST0 \ T{+} \ TP \ PR, \ PR \ R \ ST{-} \ T{-} \ TP \ PR,} \\
 & \mathsf{PR \ rs \ ST0 \ T{-} \ TP \ PR, \ PR \ rS \ ST{+} \ T{+} \ TP \ PR,} \\
 & \mathsf{PR \ Rs \ ST{+} \ T{+} \ TP \ PR} \rbrace
\end{aligned}
\end{equation*}

\end{document}

Note also {+} and {-} in order not to get bad spacing. I believe it's conceptually preferable to use aligned rather than align*. Also I wouldn't space the commas.

enter image description here

A more complicated setting, but ending in simpler input, with the same output.

\documentclass{article}
\usepackage{amsmath}

\newcommand{\entity}[1]{%
  \mathsf{%
    \catcode`\ =12
    \begingroup\lccode`~=`\ \lowercase{\endgroup\def~{\mathclose{\ }}}%
    \scantokens{#1\empty}%
  }%
}

\begin{document}

\begin{equation*}
\begin{aligned}
X^{(0)} = \lbrace
 & \entity{PR R ST0 T+ TP PR}, \entity{PR R ST- T- TP PR}, \\
 & \entity{PR rs ST0 T{-} TP PR}, \entity{PR rS ST{+} T{+} TP PR}, \\
 & \entity{PR Rs ST{+} T{+} TP PR} \rbrace
\end{aligned}
\end{equation*}

\end{document}

With less tricky code: we split the input at spaces, then reinsert \mathclose{\ } at their place; different spacings can be obtained by changing the argument to \mathclose.

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\entity}{m}
 {
  \seq_set_split:Nnn \l_piotr_entity_seq { ~ } { #1 } %split at spaces
  \mathsf
   {
    \seq_use:Nn \l_piotr_entity_seq { \mathclose{\ } }
   }
 }
\ExplSyntaxOff

\begin{document}

\begin{equation*}
\begin{aligned}
X^{(0)} = \lbrace
 & \entity{PR R ST0 T+ TP PR}, \entity{PR R ST- T- TP PR}, \\
 & \entity{PR rs ST0 T{-} TP PR}, \entity{PR rS ST{+} T{+} TP PR}, \\
 & \entity{PR Rs ST{+} T{+} TP PR} \rbrace
\end{aligned}
\end{equation*}

\end{document}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .