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

类似地,你 think\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}

相关内容