我正在使用 为演示文稿制作自定义样式beamer
。我使用分别\getbeamercolor
将给定投影仪颜色的前景色和背景色设置为fg
和bg
。
我意识到我需要多次获取这些颜色,因此我编写了一个命令来包装以下代码片段并在每次需要时调用它:
\newcommand{\getbeamercolors}[1]{%
\usebeamercolor{#1}%
\colorlet{fgColor}{fg}%
\colorlet{bgColor}{bg}%
}
不幸的是,我还需要调用该命令两次,并让所有这些颜色同时使用它们。然后我想我可以简单地修改上面的命令,为每种颜色添加一个后缀,如下所示:
\newcommand{\getbeamercolors}[2]{%
\usebeamercolor{#1}%
\colorlet{fg#2}{fg}%
\colorlet{bg#2}{bg}%
}
但那没用。我甚至在这个网站上寻找答案,甚至读到这,但无济于事。
在定义颜色名称时,有没有办法将命令参数中的文本附加到颜色名称中?
简单的MWE:
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage{xcolor}
\newcommand{\getbeamercolors}[1]{%
\usebeamercolor{#1}%
\colorlet{fgColor}{fg}%
\colorlet{bgColor}{bg}%
}
% This didn't work!
%\newcommand{\getbeamercolors}[2]{%
% \usebeamercolor{#1}%
% \colorlet{fg#2}{fg}%
% \colorlet{bg#2}{bg}%
%}
\begin{document}
\begin{frame}
\frametitle{This is a test!}
\getbeamercolors{frametitle}{title}
Some text to color with \texttt{\textbackslash getbeamercolors}...
\textcolor{bgColor}{Text with frame title background color.}
\colorbox{black}{\textcolor{fgColor}{Text with frame title foreground color.}}
\end{frame}
\end{document}
答案1
无需定义新的颜色,您可以简单地使用已经定义的投影仪颜色:
\documentclass{beamer}
\usetheme{Warsaw}
\begin{document}
\begin{frame}
\frametitle{This is a test!}
\usebeamercolor{frametitle}
normal text
\textcolor{frametitle.bg}{Text with frame title background color.}
\colorbox{black}{\textcolor{frametitle.fg}{Text with frame title foreground color.}}
\end{frame}
\end{document}
题外话:您不需要,xcolor
因为 beamer 已经为您提供了此功能。
答案2
我终于明白了!我使用了该etoolbox
软件包,这个答案解释道。
更新:确保加载第一的颜色主题,否则命令将不起作用!
平均能量损失
\documentclass{beamer}
\usetheme{Warsaw}
\usepackage{etoolbox}
\usepackage{xcolor}
\newcommand{\getbeamercolors}[2]{%
\usebeamercolor{#1}%
\def\backName{back}
\def\foreName{fore}
\appto\backName{#2}
\appto\foreName{#2}
\colorlet{\foreName}{fg}%
\colorlet{\backName}{bg}%
}
\begin{document}
\begin{frame}
\frametitle{This is a test!}
\getbeamercolors{frametitle}{title}
Some text to color with \texttt{\textbackslash getbeamercolors}...
\textcolor{backtitle}{Text with frame title background color.}
\colorbox{black}{\textcolor{foretitle}{Text with frame title foreground color.}}
\end{frame}
\end{document}
输出: