xcolor:在定义颜色名称时,在颜色名称内附加来自命令参数的文本

xcolor:在定义颜色名称时,在颜色名称内附加来自命令参数的文本

我正在使用 为演示文稿制作自定义样式beamer。我使用分别\getbeamercolor将给定投影仪颜色的前景色和背景色设置为fgbg

我意识到我需要多次获取这些颜色,因此我编写了一个命令来包装以下代码片段并在每次需要时调用它:

\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}

输出:

给定 MWE 的输出

相关内容