algorithm2e - Bug (?) avec \ SetKwSwitch

Sep 10 2020

Le M (non) WE suivant devrait fonctionner. Ai-je trouvé un bug?

\documentclass{article}

\usepackage{algorithm2e}

\SetKwSwitch{Switch}{Case}{Other}{Switch}{:}{Case}{Other}{} 

\begin{document}

\begin{algorithm}
    \Switch{X}{
        \Case{1}{A}
        \Other{Other}
    }
\end{algorithm}

\end{document}

Réponses

2 egreg Sep 10 2020 at 04:17

Pas de bogue: \SetKwSwitchnécessite neuf arguments et vous n'en fournissez que huit, donc le \pargénéré par la ligne vide est pris comme neuvième. Et \parest illégal dans le contexte où le neuvième argument est utilisé.

\newcommand{\SetKwSwitch}[9]{% #1=\Switch #2=\Case #3=\Other #4=switch #5=do #6=case #7=otherwise #8=endcase #9=endsw
%       \algocf@newcmdside{#1}{3}%
        \algocf@newcmdside@koif{#1}%
                {\KwSty{#4}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#9} {##4\relax}}%

Le manuel a une description où le dernier argument (symbolique) n'est pas accolade, donc il y a un bogue, mais seulement dans la documentation. À la page 39, au début de la section 11.6, vous lisez

 \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endcase}endsw

mais ça devrait être

\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endcase}{endsw}

Exemple fixe:

\documentclass{article}

\usepackage{algorithm2e}

\SetKwSwitch{Switch}{Case}{Other}{Switch}{:}{Case}{Other}{EndCase}{EndSwitch}

\begin{document}

\begin{algorithm}
    \Switch{X}{
        \Case{1}{A}
        \Other{Other}
    }
\end{algorithm}

\end{document}