在 beamer 中隐藏 algorithm2e 代码的特定行

在 beamer 中隐藏 algorithm2e 代码的特定行

我在讲座中介绍了一个很长的算法,我想将其分散到几个帧中,以便能够慢慢地讲解细节。我在一个algorithm2e环境中拥有整个算法,当然可以将其拆分到几个帧中,同时利用\setcounter{AlgorLine}(x)行号调整省略的部分(或直接删除部分以获得更紧凑的演示,如在隐藏 algorithm2e 中的输入/输出)。这有点麻烦,因为我必须多次复制代码并根据要在特定帧幻灯片上显示的部分进行修改。另一种可能的方法是使用scalebox在 Beamer 中使用 Algorithm2e 包) ,但我不喜欢在我的讲座幻灯片上使用太小而难以辨认的字体。

现在,在某处指定此环境中的哪些行显示/分别省略会非常方便algorithm2e。因此,这不会阻止有多个副本,但至少我不必明确修改它们,只需提及显示哪些行即可。

这样做的另一个好处是,可以在算法的中间显示特定的行并保持相同的缩进(当我修改代码时,我必须删除周围的循环等,然后删除缩进)。

以下是代码示例。例如,我想在幻灯片上显示

  1. 1-8 行
  2. 9/10
  3. 12-18

我希望找到一种解决方案,以某种方式利用这样一个事实algorithm2e,即原则上(如果我没记错的话)itemize可以使用投影仪覆盖(only)来仅显示特定部分的环境……?

这是一个玩具 MWE:

\documentclass{beamer}
\usepackage[linesnumbered,noend,noline]{algorithm2e}
\begin{document}

\begin{frame}
    \frametitle{Algorithm 1}
    \begin{algorithm}[H]
      \SetKwFunction{Test}{Test}
      \SetKwProg{Fn}{}{:}{}
      \Fn{\Test{$A,B$}}{
        \While{true}{
          \If{$X$}{
            line 1\;
            \If{line 2}{
              line 3\;
              line 4\;
              line 5\;
            }
            \If{$Y$}{
              line 6\;
            }
            \Else{
              \If{$Z$}{
                line 7\;
                line 8\;
                line 9\;
              }
              line 10\;
              line 11\;
              line 12\;
              line 13\;
            }
          }
          \lElse{do something}
        }
        line 14\;
      }
    \end{algorithm}
\end{frame}
\end{document}

相关内容