
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 \State
instruçõ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 algorithmic
construção. A \State
macro não aceita argumentos. Então, use
\State <state content>
e não
\State{<state content>}
De maneira semelhante, você pensa \Function
que 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 \Function
e \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:
\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}