暂停命令后使逐项列表不透明

暂停命令后使逐项列表不透明

我正在用 Beamer 制作演示文稿。我在\pause命令后有一个逐项列表,我希望在逐项显示之前整个列表显示为不透明。但是,列表显示不透明(根本不显示)。更奇怪的是,列表后的文本显示为不透明,没有任何问题。我做错了什么?

这是我的 LaTeX 代码:

\documentclass{beamer}
\begin{document}

\setbeamercovered{transparent}

\begin{frame}{Title}

    \pause

    Some text

    \pause

    \begin{itemize}[<+->]
        \item First
        \item Second
        \item Third
    \end{itemize}

    \pause[\thebeamerpauses]

    Other text

\end{frame}

\end{document}

其显示方式如下。

不良行为

以下是我希望它出现的样子。

期望行为

答案1

列表确实出现了,它的透明度比其他未覆盖的文本更高,因为透明度在增加(列表从暂停和覆盖中获得透明度)。一个笨拙的解决方法是确保它在前两张幻灯片上未被覆盖,因此它只从暂停中获得透明度:

\documentclass{beamer}
\begin{document}

\setbeamercovered{transparent}

\begin{frame}
    \frametitle{Title}

    \pause

    Some text

    \pause

    \begin{itemize}[<1-2,+->]
        \item First
        \item Second
        \item Third
    \end{itemize}

    \pause[\thebeamerpauses]

    Other text

\end{frame}

\end{document}

但是,您可以通过不使用暂停来更优雅地避免该问题,无论如何,这是一个非常粗糙的命令,您可以从 beamer 的其他覆盖宏中获得更多灵活性:

\documentclass{beamer}
\begin{document}

\setbeamercovered{transparent}

\begin{frame}
    \frametitle{Title}

    \only<+>{}\uncover<+->{Some text}

    \begin{itemize}[<+->]
        \item First
        \item Second
        \item Third
    \end{itemize}

    \uncover<+->{other text}

\end{frame}

\end{document}

在此处输入图片描述


如果您坚持使用暂停,您可以重新定义一些投影仪内部结构(不能保证这不会破坏其他东西......):

\documentclass{beamer}

\setbeamercovered{transparent}

\makeatletter
\def\beamer@startcovered{%
  \beamer@smuggle{%
  \global\advance\beamer@coveringdepth by 1\relax%
  \beamer@actions{\pgfsys@begininvisible\aftergroup\beamer@@spacingcover}{%
     \pgfsys@endinvisible\aftergroup\beamer@@spacingcover%
     }%
  \def\opaqueness<##1>##2{%
    \only<##1>{%
      \beamer@actions{%
        \expandafter\xdef\csname beamer@oldcolorhook%
        \the\beamer@coveringdepth\endcsname{\beamer@colorhook}%
        \expandafter\xdef\csname beamer@oldpgfextension%
        \the\beamer@coveringdepth\endcsname{\beamer@pgfextension}%
        {\globalcolorstrue\colorlet{beamer@freeze\the\beamer@coveringdepth}{bg}}%
        \xdef\beamer@colorhook{!##2!}%
        \gdef\beamer@pgfextension{!##2opaque}%
        \color{.}%
      }%
      {%
        \xdef\beamer@colorhook{\csname beamer@oldcolorhook%
          \the\beamer@coveringdepth\endcsname}%
        \xdef\beamer@pgfextension{\csname beamer@oldpgfextension%
          \the\beamer@coveringdepth\endcsname}%
        \color{.}%
      }}}%
  \ifnum\beamer@slideinframe<\beamer@minimum %ok, at beginning
    \begingroup
      \beamer@saveanother
      \advance\beamer@minimum by-\beamer@slideinframe
      \beamer@slideinframe=\beamer@minimum
      \beamer@uncoverbeforeactions
      \beamer@restoreanother
    \endgroup
  \else
    \begingroup
      \beamer@saveanother
      \advance\beamer@slideinframe by-\beamer@minimum
      \beamer@uncoverafteractions
      \beamer@restoreanother
    \endgroup
  \fi
  \beamer@do
  }%
}
\makeatother

\begin{document}

\begin{frame}{Title}

    \pause

    Some text

    \pause

    \begin{itemize}[<+->]
        \item First
        \item Second
        \item Third
    \end{itemize}

    \pause[\thebeamerpauses]

    Other text

\end{frame}

\end{document}

相关内容