Beamer:如何在当前幻灯片中精确地发现一次内容?

Beamer:如何在当前幻灯片中精确地发现一次内容?

虽然beamer手册中没有明确说明,但我认为<+>覆盖规范的意思是“仅限当前幻灯片”。我现在正在用 编写一个相当复杂的幻灯片,beamer但我被 的确切语义所困扰<+>。这是我的尝试,它似乎对普通文本很有效,但之后就搞砸了:

\PassOptionsToPackage{usenames,dvipsnames}{xcolor}
\documentclass{beamer}
\usepackage{listings,tikz}
\lstset{
        basicstyle=\scriptsize\ttfamily, 
        tabsize=2,                 
        extendedchars=true,       
        breaklines=true,         
        keywordstyle=\color{RoyalBlue}\textbf,
        commentstyle=\color{ForestGreen},
        stringstyle=\color{WildStrawberry}\ttfamily, 
        escapechar=`
 }

 \newcommand\M[1]{\tikz[overlay,remember picture]{\node[yshift=0.7ex](#1){};}}
 \newcommand\PC[1]{\tikz[overlay,remember picture]{\node[circle,inner sep=2pt,fill=red!50] at (#1) {};}}

 \begin{document}
 \begin{frame}[fragile]\frametitle{Program}
\begin{lstlisting}[language=pascal]
Program My;
VAR
  one, two: Integer;
Begin `\M{pc1}`
    one := 1; `\M{pc2}`
    two := 2; `\M{pc3}`
    one := one + two; `\M{pc4}`
    two := two + one; `\M{pc5}`
end. `\M{pc6}`
\end{lstlisting}
\uncover<+>{One}%
\uncover<+>{Two}%
\uncover<+>{Three}%
\uncover<+>{Four}%
\begin{uncoverenv}<+->\PC{pc1}\end{uncoverenv}%
\begin{uncoverenv}<+->\PC{pc2}\end{uncoverenv}%
\begin{uncoverenv}<+->\PC{pc3}\end{uncoverenv}%
\begin{uncoverenv}<+>\PC{pc4}\end{uncoverenv}% Note that we use <+> here, not <+->
\begin{uncoverenv}<+->\PC{pc5}\end{uncoverenv}%
\begin{uncoverenv}<+->\PC{pc6}\end{uncoverenv}%
\uncover<+->{After}%
\end{frame}
\end{document}

这是我得到的结果(见附件的动图)

  • 文本“一”、“二”等按预期显示;每张幻灯片一个。
  • 程序计数器 1-3 按预期显示,从当前幻灯片到结尾。
  • 程序计数器 4 显示并消失(如预期的那样?)
  • 程序计数器 5-6 从未出现。

在此处输入图片描述

硬编码数字也会出现类似的问题,例如以下输入:

\PassOptionsToPackage{usenames,dvipsnames}{xcolor}
\documentclass{beamer}
\usepackage{listings,tikz}
\lstset{
      basicstyle=\scriptsize\ttfamily, 
      tabsize=2,                 
      extendedchars=true,       
      breaklines=true,         
      keywordstyle=\color{RoyalBlue}\textbf,
      commentstyle=\color{ForestGreen},
      stringstyle=\color{WildStrawberry}\ttfamily, 
      escapechar=`
}

\newcommand\M[1]{\tikz[overlay,remember picture]{\node[yshift=0.7ex](#1){};}}
\newcommand\PC[1]{\tikz[overlay,remember picture]{\node[inner sep=1pt,circle,radius=2pt,fill=red!50] at (#1) {};}}

\begin{document}
\begin{frame}[fragile]\frametitle{Program}
\begin{lstlisting}[language=pascal]
Program My;
VAR
  one, two: Integer;
Begin `\M{pc1}`
    one := 1; `\M{pc2}`
    two := 2; `\M{pc3}`
    one := one + two; `\M{pc4}`
    two := two + one; `\M{pc5}`
end. `\M{pc6}`
\end{lstlisting}
\uncover<+>{One}%
\uncover<+>{Two}%
\uncover<+>{Three}%
\uncover<+>{Four}%
\uncover<5-6>{\PC{pc1}}
\uncover<6-6>{\PC{pc2}}
\uncover<7-7>{\PC{pc3}}
\uncover<8-8>{\PC{pc4}}
\uncover<9>{\PC{pc5}}
\uncover<10>{\PC{pc6}}
\uncover<11>{After}%
\end{frame}
\end{document}

输出如下所示:

在此处输入图片描述

然而,这真的很奇怪,当我使用普通的覆盖规范时,问题不存在<+->,如beamer手册中所述。也就是说,如果我写

\PassOptionsToPackage{usenames,dvipsnames}{xcolor}
\documentclass{beamer}
\usepackage{listings,tikz}
\lstset{
      basicstyle=\scriptsize\ttfamily, 
      tabsize=2,                 
      extendedchars=true,       
      breaklines=true,         
      keywordstyle=\color{RoyalBlue}\textbf,
      commentstyle=\color{ForestGreen},
      stringstyle=\color{WildStrawberry}\ttfamily, 
      escapechar=`
}

\newcommand\M[1]{\tikz[overlay,remember picture]{\node[yshift=0.7ex](#1){};}}
\newcommand\PC[1]{\tikz[overlay,remember picture]{\node[inner sep=1pt,circle,radius=2pt,fill=red!50] at (#1) {};}}

\begin{document}
\begin{frame}[fragile]\frametitle{Program}
\begin{lstlisting}[language=pascal]
Program My;
VAR
  one, two: Integer;
Begin `\M{pc1}`
    one := 1; `\M{pc2}`
    two := 2; `\M{pc3}`
    one := one + two; `\M{pc4}`
    two := two + one; `\M{pc5}`
end. `\M{pc6}`
\end{lstlisting}
\uncover<+>{One}%
\uncover<+>{Two}%
\uncover<+>{Three}%
\uncover<+>{Four}%
\uncover<+->{\PC{pc1}}
\uncover<+->{\PC{pc2}}
\uncover<+->{\PC{pc3}}
\uncover<+->{\PC{pc4}}
\uncover<+->{\PC{pc5}}
\uncover<+->{\PC{pc6}}
\uncover<11>{After}%
\end{frame}
\end{document}

我得到:在此处输入图片描述

答案1

事实证明,它<+>确实指的是单张幻灯片,并且没有任何副作用。我所看到的很可能是 TeX live 软件包中的一个错误。我在 2013 年 11 月的某个时候安装了我的版本。今天(2014 年 1 月 19 日)更新后,问题解决了。

相关内容