Erro de pacote de algoritmo no Beamer

Erro de pacote de algoritmo no Beamer

Eu tenho o seguinte exemplo trivial que simplesmente não consigo compilar.

\documentclass{beamer}

\mode<presentation> {
\usetheme{Madrid}
\usecolortheme[RGB={0,0,0}]{structure}
}

\usepackage{amsmath,amsfonts,graphicx}
\usepackage{algpseudocode}
\usepackage{tikz, nth}
\usepackage{tkz-graph}

\begin{document}

\begin{frame}
\begin{algorithmic}
\Function{deleteMax}{}{
\State{$P \gets$ \Call{Skip-Search}{$L$, Max}}
}
\EndFunction
\end{algorithmic}
\end{frame}

\end{document}

Isso produz o erro

 ! \endcsname ausente inserido. \ALG@blocoatual@2

do qual simplesmente não consigo me livrar. Estranhamente, se eu adicionar uma instrução if, não recebo nenhum erro.

Nota: posso colocar qualquer quantidade de \Stateinstruções sem o corpo \Function, então o erro parece estar relacionado a isso de alguma forma.

Responder1

O problema aqui é a sua interpretação das macros envolvidas na algorithmicconstrução. A \Statemacro não aceita argumentos. Então, use

\State <state content>

e não

\State{<state content>}

De maneira semelhante, você pensa \Functionque leva três argumentos, o último dos quais é o corpo da função. Isto não é verdade, pois o início e o fim da função são dados por \Functione \EndFunction, respectivamente (veja a seção3.1.6. o bloco de funçãodoalgorithmicx documentação). Então, use

\Function{<name>}{<parms>}
  <body>
\EndFunction

e não

\Function{<name>}{<parms>}{
  <body>
}
\EndFunction

Aqui está um exemplo mínimo que fornece o que descrevi acima:

insira a descrição da imagem aqui

\documentclass{beamer}

\usepackage{algpseudocode}

\begin{document}

\begin{frame}
  \begin{algorithmic}
    \Function{deleteMax}{}
      \State $P \gets$ \Call{Skip-Search}{$L$, Max}
    \EndFunction
  \end{algorithmic}
\end{frame}

\end{document}

informação relacionada