我想将 beamer 定义的颜色用到我的文档的 beamerarticle 版本中。这样我就可以更改 beamer 主题(或颜色主题),颜色也会随之改变。
这里有一个 MWE。一个使用 beamer 颜色 fg 和 bg 的 tikz 图形框架。
\documentclass[ignorenonframetext]{beamer}
%\documentclass{article}
%\usepackage{beamerarticle}
\usepackage{tikz}
\usecolortheme{beaver}
\begin{document}
This is some text outside any frame.
\begin{frame}{Frame}
\begin{alertblock}{Block}
\usebeamercolor[fg]{example text}
\begin{tikzpicture}
\filldraw[color=fg, fill=bg!50!white] (0,0) rectangle (5,3);
\draw[line width=5mm] (1,1)--(2,2);
\end{tikzpicture}
\end{alertblock}
\end{frame}
\end{document}
当我尝试使用 beamerarticle 包的文章时,pdflatex 会抱怨
! Package xcolor Error: Undefined color `fg'.
See the xcolor package documentation for explanation.
Type H <return> for immediate help.
...
l.16 ..., fill=bg!50!white] (0,0) rectangle (5,3);
该示例包含一个 tikz 图形,但我的问题想要更加通用,例如用投影仪颜色声明部分(或任何其他文本)并在文章模式下保留此颜色。
答案1
我只是想在回答另一个问题时这样做,我可以告诉你,这不是打算做的!当article
使用 beamer 版本时,许多主题和颜色命令只是设置为“不执行任何操作”。但是,使用一些技巧,我们可以重新加载命令,从而使颜色可用。这应该与极度谨慎因为它可能会破坏一些我还没有测试过的东西(几乎所有东西都是这样)。
这是根据您的示例稍加修改的版本制作的图片:
代码如下:
\documentclass{standalone}
%\url{http://tex.stackexchange.com/q/22768/86}
\PassOptionsToPackage{svgnames}{xcolor}
\usepackage{beamerarticle}
\usepackage{tikz}
\makeatletter
\def\beamer@currentmode{beamer}
\def\beamer@colorhook{}
\newskip\beamer@lastskip
\let\beamercolorbox=\relax
\let\endbeamercolorbox=\relax
\let\usetheme=\relax
\let\usecolortheme=\relax
\let\usefonttheme=\relax
\let\useoutertheme=\relax
\let\useinnertheme=\relax
\input{beamerbasethemes.sty}
\input{beamerbasecolor.sty}
\usecolortheme{default}
\usecolortheme{beaver}
\makeatother
\setbeamercolor{example text}{bg=Maroon}
\begin{document}
This is some text outside any frame.
\begin{frame}{Frame}
\begin{alertblock}{Block}
\usebeamercolor{example text}%
\begin{tikzpicture}
\filldraw[color=fg, fill=bg!50!white] (0,0) rectangle (5,3);
\draw[line width=5mm] (1,1)--(2,2);
\end{tikzpicture}
\end{alertblock}
\end{frame}
\end{document}
主要部分是\makeatletter
和之间的内容\makeatother
。我们需要加载 beamer 颜色管理。不幸的是,包含命令的文件检查mode
并跳过article
模式中的大多数内容。所以我们需要暂时更改为beamer
模式以说服它我们确实想要定义这些内容。但是由于文件已经读入(通过\usepackage{beamerarticle}
),我们不能\usepackage
再次读取它们而必须读取\input
它们(这会在日志中产生几个警告,但请忽略它们)。我们加载集合themes
和color
集合。有几件事情在中定义,beamer.cls
这些依赖于所以我们必须设置它们:\beamer@colorhook
和\beamer@lastskip
。此外,有些东西是由和定义的,\newcommand
在第一次读取时被定义为(错误的东西)。所以我们需要将它们全部设置为以\relax
避免错误。之后,一切都很顺利!