我正在尝试创建一个 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}