覆盖块中的警报项

覆盖块中的警报项

考虑以下 MWE:

\documentclass{beamer}
\begin{document}
  \begin{frame}
  \frametitle{Test}
  \begin{block}{First}
    block
  \end{block}
  \begin{block}{Second}
    \begin{itemize}
    \item Foo
    \item Bar
    \end{itemize}
  \end{block}
  \end{frame}
\end{document}

到目前为止,一切都很简单。现在,让我们叠加这些块:

\documentclass{beamer}
\begin{document}
  \begin{frame}
  \frametitle{Test}
  \begin{block}<1->{First}
    block
  \end{block}
  \begin{block}<2->{Second}
    \begin{itemize}
    \item Foo
    \item Bar
    \end{itemize}
  \end{block}
  \end{frame}
\end{document}

仍然很好很简单。现在,我想要的是覆盖第二个块中的项目并提醒它们。

 \documentclass{beamer}
 \begin{document}
 \begin{frame}
 \frametitle{Test}
   \begin{block}<1->{First}
     block
   \end{block}
   \begin{block}<2->{Second}
     \begin{itemize}
     \item\alert<+(1)> {Foo}
     \item\alert<+(1)> {Bar}
     \end{itemize}
   \end{block}
 \end{frame}
 \end{document}

有没有办法缩短覆盖规范?我尝试了很多变体,<+-| @alert+>但都没有用。我可以从中编写代码这个答案可以工作,但它仍然不够灵活。所以我的问题是:有没有更好、更灵活、更通用的方法来实现这种覆盖?

答案1

包含 3 张幻灯片

在此处输入图片描述

\documentclass{beamer}
\begin{document}
\begin{frame}
  \frametitle{Test}
  \begin{block}<+->{First}
    block
  \end{block}
  \begin{block}<+->{Second}
    \begin{itemize}
    \item<.-|alert@.> Foo
    \item<+-|alert@+> Bar
    \end{itemize}
  \end{block}
\end{frame}
\end{document}

分解后的版本:

\documentclass{beamer}
\begin{document}
\begin{frame}
  \frametitle{Test}
  \begin{block}<+->{First}
    block
  \end{block}
  \begin{block}<+->{Second}
    \begin{itemize}[<+-|alert@+>]
    \item<.-|alert@.> Foo
    \item Bar
    \end{itemize}
  \end{block}
\end{frame}
\end{document}

包含 4 张幻灯片

在此处输入图片描述

语法与第一个例子类似的版本:

\documentclass{beamer}
\begin{document}
\begin{frame}
  \frametitle{Test}
  \begin{block}<+->{First}
    block
  \end{block}
  \begin{block}<+->{Second}
    \begin{itemize}
    \item<+-|alert@+> Foo
    \item<+-|alert@+> Bar
    \end{itemize}
  \end{block}
\end{frame}
\end{document}

具有分解语法的版本:

\documentclass{beamer}
\begin{document}
\begin{frame}
  \frametitle{Test}
  \begin{block}<+->{First}
    block
  \end{block}
  \begin{block}<+->{Second}
    \begin{itemize}[<+-|alert@+>]
    \item Foo
    \item Bar
    \end{itemize}
  \end{block}
\end{frame}
\end{document}

答案2

也许这就是你要找的。我创建了一个宏(不是环境!),\makealerts{}你可以通过它传递要连续用警报突出显示的组。

已编辑,以宽容参数列表末尾的额外空格\makealerts(在此 MWE 中,宽容随后的换行符{Bar none})。

\documentclass{beamer}
\usepackage{readarray}
\usepackage{ifthen}
\newcounter{index}
\newcommand\makealerts[1]{\itemize\relax
  \getargsC{#1}%
  \ifthenelse{\equal{\csname arg\romannumeral\narg\endcsname}{}}%
    {\def\maxnarg{\numexpr\narg-1\relax}}{\def\maxnarg{\narg}}%
  \setcounter{index}{0}%
  \whiledo{\theindex<\maxnarg}{%
    \stepcounter{index}%
    \item\alert<+(1)> {\csname arg\romannumeral\theindex\endcsname}%
  }%
  \enditemize%
}
\begin{document}
 \begin{frame}
 \frametitle{Test}
   \begin{block}<1->{First}
     block
   \end{block}
   \begin{block}<2->{Second}
     \makealerts{%
       {Foo of many words}
       {Bar none}
     }
   \end{block}
 \end{frame}
\end{document}

在此处输入图片描述

相关内容