使用 Beamer 逐步执行用伪代码编写的算法。

使用 Beamer 逐步执行用伪代码编写的算法。

我正在尝试创建一个 beamer 演示文稿,在其中我将逐步介绍一种算法,并在每张幻灯片上突出显示算法中的当前行。我知道可以使用环境来实现semiverbatim,但是,我的算法必须以伪代码编写。我试图匹配我正在使用的教科书使用的伪代码格式,为此,algpseudocode作为包的一部分的包algorithmicx似乎做得非常出色。

但是,我不知道如何在环境中突出显示当前行algorithmic。我尝试这样做:

\documentclass[ignorenonframetext]{beamer}
\usepackage{algpseudocode}

\begin{document}
\section{Blah}
\begin{frame}
   \frametitle{Blah}
   \begin{columns}
 \begin{column}{.4\hsize}
    \begin{algorithmic}
       \alert<1>{\State $z \gets 1$}
       \alert<2>{\For{$i = 1 \to n$}}
       \alert<3>{\State $z \gets z + \frac{1}{i}$}
       \alert<4>{\EndFor}
    \end{algorithmic}
 \end{column}%
 \begin{column}{.6\hsize}
    Some text discussing the current line.
 \end{column}
   \end{columns}
\end{frame}
\end{document}

但是这给了我一个关于缺失的错误\endcsname。有人对如何实现这一点有什么建议吗?

答案1

问题似乎是环境algorithmic需要能够“看到”顶层的命令\State\For、 。它不喜欢在环境中有这些命令。解决这个问题的一种方法是仅通过更改每行的文本颜色来模拟警报。以下是实现此目的的方法:\EndFor\alert

\documentclass[ignorenonframetext]{beamer}
\usepackage{algpseudocode}

\newcommand{\alertline}{%
 \usebeamercolor[fg]{normal text}%
 \only{\usebeamercolor[fg]{alerted text}}}

\begin{document}
\section{Blah}
\begin{frame}
   \frametitle{Blah}
   \begin{columns}
 \begin{column}{.4\hsize}
    \begin{algorithmic}
\alertline<1>\State  $z \gets 1$
\alertline<2>\For    {$i = 1 \to n$}
\alertline<3>\State  $z \gets z + \frac{1}{i}$
\alertline<4>\EndFor
    \end{algorithmic}
 \end{column}%
 \begin{column}{.6\hsize}
    Some text discussing the current line.
 \end{column}
   \end{columns}
\end{frame}
\end{document}

如果您想要突出显示背景,则这种方法不起作用,因为这会使文本处于\colorbox似乎隐藏在algorithmic环境中的状态。

(注意:我对正在发生的事情的假设纯粹基于观察,而不是基于对引擎盖下发生的事情的任何了解。)

答案2

我不知道您喜欢哪种覆盖,但它可以与以下方式配合使用\uncover

\documentclass[ignorenonframetext]{beamer}
\setbeamercovered{transparent}
\usepackage[T1]{fontenc}
\usepackage{bera}
\usepackage{algpseudocode}

\begin{document}
\section{Blah}
\begin{frame}{Blah}
   \begin{columns}
 \begin{column}{.4\hsize}
    \begin{algorithmic}
       \uncover<1>{\State $z \gets 1$}
       \uncover<2>{\For{$i = 1 \to n$}}
       \uncover<3>{\State $z \gets z + \frac{1}{i}$}
       \uncover<4>{\EndFor}
    \end{algorithmic}
 \end{column}%
 \begin{column}{.6\hsize}
    Some text discussing the current line.
 \end{column}
   \end{columns}
\end{frame}
\end{document}

相关内容