Beamer:双重揭开隐藏内容而非水印

Beamer:双重揭开隐藏内容而非水印

当我制作带有嵌套枚举的演示文稿时,其中每个枚举都需要动画,内部枚举在幻灯片中完全隐藏,直到其父级变为可见,而其他项目仅带有水印。有没有办法让所有项目都带有水印,直到它们变为活动状态?

代码:

\begin{frame}{Test}
   \begin{enumerate}[<+->]
      \item Item1
      \item Item2
      \begin{enumerate}[<+->]
         \item Item2A
         \item Item2B
      \end{enumerate}
      \item Item3
   \end{enumerate}
\end{frame}

答案1

您可以使用\only来更改嵌套环境的透明度级别:

\documentclass{beamer}

\setbeamercovered{transparent}

\begin{document}

\begin{frame}{Test}
\begin{enumerate}[<+->]
  \item Item1
  \item Item2
  \only<1->{\setbeamercovered{transparent=100}}
  \only<2->{\setbeamercovered{transparent=15}}
  \begin{enumerate}[<+->]
    \item Item2A
    \item Item2B
  \end{enumerate}
  \item Item3
\end{enumerate}
\end{frame}

\end{document}

第一帧的图像:

在此处输入图片描述

代码可以在etoolbox包的帮助下实现自动化:

\documentclass{beamer}
\usepackage{etoolbox}

\setbeamercovered{transparent}

\makeatletter
\BeforeBeginEnvironment{enumerate}{\ifnum\@enumdepth=1 
  \only<1->{\setbeamercovered{transparent=100}}%
  \only<\theenumi->{\setbeamercovered{transparent=20}}%
\fi
}
\makeatother

\begin{document}

\begin{frame}{Test}
\begin{enumerate}[<+->]
  \item Item1
  \item Item2
  \item Item3
  \begin{enumerate}[<+->]
    \item Item3A
    \item Item3B
    \item Item3C
  \end{enumerate}
  \item Item4
\end{enumerate}
\end{frame}

\end{document}

第一帧:

在此处输入图片描述

答案2

正如 percusse 在其评论中指出的那样,子项并非不可见,只是比项暗得多。我不认为这是预期的行为!这里发生的事情是嵌套的enumerates 会给您嵌套的actionenvs,并且每个动作环境级别都会使亮度降低 85%。

要解决此问题,最好摆脱动作环境的嵌套。从 Gonzalo 的回答中,我采用了使用包中的\BeforeBeginEnvironment和的想法。下面的代码适用于嵌套的、和。以下输出是用而不是创建的,只是为了证明这也有效。\AfterEndEnvironmentetoolboxenumerateitemizedescription\setbeamercovered{highly dynamic}\setbeamercovered{transparent}

动画输出

\documentclass{beamer}
\usepackage{etoolbox}
%\setbeamercovered{transparent}
\setbeamercovered{highly dynamic}
\makeatletter
\newcommand*\fix@beamer@close{%
  \ifnum\beamer@trivlistdepth>0
    \beamer@closeitem
  \fi
  }
\newcommand*\fix@beamer@open{%
  \ifnum\beamer@trivlistdepth>0
    \gdef\beamer@closeitem{}%
  \fi
  }
\BeforeBeginEnvironment{enumerate}{\fix@beamer@close}
\AfterEndEnvironment{enumerate}{\fix@beamer@open}
\BeforeBeginEnvironment{itemize}{\fix@beamer@close}
\AfterEndEnvironment{itemize}{\fix@beamer@open}
\BeforeBeginEnvironment{description}{\fix@beamer@close}
\AfterEndEnvironment{description}{\fix@beamer@open}
\makeatother
\begin{document}
\begin{frame}{Test}
   \begin{enumerate}[<+->]
      \item Item1
      \item Item2
      \begin{itemize}%[<+->]
         \item Item2A
         \item Item2B
      \end{itemize}
      \item Item3
   \end{enumerate}
\end{frame}
\end{document}

请注意,您不需要[<+->]内部enumerateitemize环境中的。 (默认情况下,[<+->]使用外部环境的。)

相关内容