20

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?

1 Answer 1

27

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.

You must log in to answer this question.

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