[Tex/LaTex] Multiline statements and conditions in algorithm environment

algorithm2ealgorithms

I have an algorithm that I want to write in mathematical pseudo-code. However, some conditions and statements are very long, e.g. "if (a series of relations and constraints hold) do" or "X gets (a series with several elements)". These statements does not fit nicely into a single line. I don't want to break them into temporary variables just to meet the width limit.

What I would have done in a real program code, is something like:

if (
  long condition 1 and
  long condition 2 ...
) {...}

Or

X <- {
  long element 1,
  long element 2...
}

How can I achieve this effect in some LaTeX algorithmic environment? I am currently using algorithm2e but it's not a must.

Best Answer

Regular line-breaks and associated indentation is discussed in Line-break in package algorithm2e. For conditional adjustments, perhaps the following might be of interest:

enter image description here

\documentclass{article}
\usepackage{algorithm2e}
\SetKwIF{If}{ElseIf}{Else}{if~(\endgraf}{\endgraf)~then}{else if}{else}{end if}%
\begin{document}

\begin{algorithm}[H]
  \SetAlgoLined
  \KwData{this text}
  \KwResult{how to write algorithm with \LaTeX2e }
    initialization\;
  \While{not at end of this document}{
    read current\;
    \eIf{\begin{tabular}{@{\hspace*{1.5em}}l@{}}
        understand {\normalfont and} \\
        understand some more
      \end{tabular}}{
      go to next section\;
    }{
      go back to the beginning of current section\;
    }
  }
  \caption{How to write algorithms}
\end{algorithm}
\end{document}​

I have adjusted the formatting of \eIf - only for the conditional part - to include (..). You'll have to do the same for other structures/conditionals.