![一个投影仪演示文稿中有多种颜色主题](https://linux22.com/image/232833/%E4%B8%80%E4%B8%AA%E6%8A%95%E5%BD%B1%E4%BB%AA%E6%BC%94%E7%A4%BA%E6%96%87%E7%A8%BF%E4%B8%AD%E6%9C%89%E5%A4%9A%E7%A7%8D%E9%A2%9C%E8%89%B2%E4%B8%BB%E9%A2%98.png)
我正在准备一个关于三个或多或少不相关的结果的研讨会演讲。为了在视觉上区分这些结果,我想为相应的投影仪幻灯片赋予每个结果不同的(自定义)颜色主题。我知道我可以制作三个不同的演示文稿并将它们的 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}