一个投影仪演示文稿中有多种颜色主题

一个投影仪演示文稿中有多种颜色主题

我正在准备一个关于三个或多或少不相关的结果的研讨会演讲。为了在视觉上区分这些结果,我想为相应的投影仪幻灯片赋予每个结果不同的(自定义)颜色主题。我知道我可以制作三个不同的演示文稿并将它们的 pdf 输出拼接在一起,但我不想这样做。所以,我的问题是:

有没有什么办法可以在投影仪文档的过程中切换颜色主题?

答案1

这种方法很管用。 \usecolortheme{foo}使用包beamercolorthemefoo.sty,这就是为什么它只能在序言中使用。但是如果你阉割文件中的命令.sty,使其成为一个包,\input那么你就可以在任何地方获得这些命令。所以:

\documentclass{beamer}

\newenvironment{colortheme}[1]{
\def\ProvidesPackageRCS $##1${\relax}
\renewcommand{\DeclareOption[2]}{\relax}
\renewcommand{\ProcessOptions}{\relax}
\makeatletter
\input beamercolortheme#1.sty
\makeatother
}{}

\begin{document}

\begin{frame}
\begin{theorem}[Pythagoras]
If $a$ and $b$ are the legs of a right triangle and $c$ is the hypotenuse, then
\[
    a^2 + b^2 = c^2 
\]
\end{theorem}
\end{frame}


\begin{colortheme}{albatross}
\begin{frame}
\begin{theorem}[Pythagoras]
If $a$ and $b$ are the legs of a right triangle and $c$ is the hypotenuse, then
\[
    a^2 + b^2 = c^2 
\]
\end{theorem}
\end{frame}
\end{colortheme}

\begin{colortheme}{crane}
\begin{frame}
\begin{theorem}[Pythagoras]
If $a$ and $b$ are the legs of a right triangle and $c$ is the hypotenuse, then
\[
    a^2 + b^2 = c^2 
\]
\end{theorem}
\end{frame}
\end{colortheme}

\end{document}

问题是有些主题有可选参数,而这个会忽略它们。您必须重新编程\DeclareOption\ProcessOptions在包文件之外执行您想要的操作。使用pgfkeys包可以做到这一点。

此外,可能还有其他特定于软件包的命令需要被删除。我使用 grep 命令查找我看到的其他几个颜色主题软件包\DeclareBeamerOption\ProcessBeamerOption

我认为对 beamer 的一个不错的改进是更改主题实现,以便可以轻松完成此操作。您可以\loadcolortheme{foo}在序言中设置和配置主题,但在找到之前不调用任何\setbeamercolor命令。为了向后兼容,可以先检查主题是否已加载。\usecolortheme{foo}\usecolortheme

答案2

一个 hack 解决方案就是将颜色主题.sty文件的内容(它们不长)复制到一个新的 tex 文件中,剪掉顶部和底部部分。例如,对于鲸鱼主题,只需一个包含以下内容的文件:

\setbeamercolor*{palette primary}{use=structure,fg=white,bg=structure.fg}
\setbeamercolor*{palette secondary}{use=structure,fg=white,bg=structure.fg!75!black}
\setbeamercolor*{palette tertiary}{use=structure,fg=white,bg=structure.fg!50!black}
\setbeamercolor*{palette quaternary}{fg=white,bg=black}

\setbeamercolor*{sidebar}{use=structure,bg=structure.fg}

\setbeamercolor*{palette sidebar primary}{use=structure,fg=structure.fg!10}
\setbeamercolor*{palette sidebar secondary}{fg=white}
\setbeamercolor*{palette sidebar tertiary}{use=structure,fg=structure.fg!50}
\setbeamercolor*{palette sidebar quaternary}{fg=white}

\setbeamercolor*{titlelike}{parent=palette primary}

\setbeamercolor*{separation line}{}
\setbeamercolor*{fine separation line}{}

然后\input就在你想要改变发生之前。在帧与帧之间。

此解决方案的一个问题是,如果您再次更改主题,如果主题 2 设置了颜色,但主题 3 没有设置颜色(因为它将其保留为默认值),则会发生奇怪的事情,您将看到主题 2 的颜色显示出来。因此,您需要在删除的.sty文件中添加几行,以便将其重置为默认值。

不过,我相信肯定有更简洁的解决方案。让 Beamer 动态更改颜色主题(和其他主题)确实应该很容易。唯一做不到的原因是颜色主题在.sty文件中:它们定义的实际命令在大多数情况下在文本主体中有效...

编辑现在有一个CTAN 上的软件包(我坚持认为)它允许您“动态”更改投影仪演示的颜色。严格来说,它不会改变颜色主题,只会改变结构元素的基色。以下是 MWE:

\documentclass{beamer}
\usepackage{colourchange}
\useoutertheme{infolines}
\begin{document}
\selectmanualcolour{red}
\begin{frame}
  This is a frame
\end{frame}
\selectmanualcolor{green}
\begin{frame}
  This is a frame
\end{frame}
\end{document}

相关内容