Ошибка пакета алгоритма в Beamer

Ошибка пакета алгоритма в Beamer

У меня есть следующий тривиальный пример, который я просто не могу скомпилировать.

\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}

Это приводит к ошибке

 ! Отсутствует \endcsname вставлен. \ALG@currentblock@2

от которого я просто не могу избавиться. Как ни странно, если я добавляю оператор if, я не получаю ошибку.

Примечание: я могу поместить любое количество \Stateоператоров без тела \Function, так что ошибка, по-видимому, как-то связана с этим.

решение1

Проблема здесь в вашей интерпретации макросов, задействованных в конструкции algorithmic. \StateМакрос не принимает аргумент. Поэтому используйте

\State <state content>

и не

\State{<state content>}

Аналогичным образом, вы думаете, \Functionчто принимает три аргумента, последний из которых является телом функции. Это неверно, так как начало и конец функции задаются \Functionи \EndFunction, соответственно (см. раздел3.1.6. функциональный блокпринадлежащийalgorithmicx документация). Итак, используйте

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

и не

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

Вот минимальный пример, который обеспечивает то, что я описал выше:

введите описание изображения здесь

\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}

Связанный контент