[Tex/LaTex] Switch cases in algorithmic

algorithmicxalgorithms

How can I use switch cases in algorithmicx? For example a code like this:

switch s do
--case a
----assert(1)
--case b
----assert(0)

etc.
Is is possible to define it as a command?

Best Answer

Use the following:

enter image description here

\documentclass{article}
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx
\begin{document}
% New definitions
\algnewcommand\algorithmicswitch{\textbf{switch}}
\algnewcommand\algorithmiccase{\textbf{case}}
\algnewcommand\algorithmicassert{\texttt{assert}}
\algnewcommand\Assert[1]{\State \algorithmicassert(#1)}%
% New "environments"
\algdef{SE}[SWITCH]{Switch}{EndSwitch}[1]{\algorithmicswitch\ #1\ \algorithmicdo}{\algorithmicend\ \algorithmicswitch}%
\algdef{SE}[CASE]{Case}{EndCase}[1]{\algorithmiccase\ #1}{\algorithmicend\ \algorithmiccase}%
\algtext*{EndSwitch}%
\algtext*{EndCase}%

\begin{algorithmic}[1]
  \Switch{$s$}
    \Case{$a$}
      \Assert{0}
    \EndCase
    \Case{$b$}
      \Assert{1}
    \EndCase
  \EndSwitch
\end{algorithmic}
\end{document}​

Both new "environments" \Switch...\EndSwitch and \Case...\EndCase are defined to have beginning and ending text. However, using \algnotext*{<env>} removes any typesetting of that command, effectively removing the ending command for both \Switch and \Case. It's still needed, since there may be more than one entry so its not possible to generalise with some number-of-lines-termination.