定义一个随主题变化的“beamer”块类型

定义一个随主题变化的“beamer”块类型

我想定义一个beamer具有特征颜色的块;例如的特征颜色alertblock是红色,的特征颜色exampleblock是绿色。

但是,我希望这个块的样式、亮度和饱和度能够根据beamer主题和颜色主题而改变。

首先,假设我的块名为myblock,其特征颜色为橙色。在default主题中,它的定义大致如下:

\newenvironment<>{myblock}[1]{%
  \setbeamercolor{block title}{fg=orange,bg=white}%
  \setbeamercolor{block body}{fg=black,bg=white}%
  \begin{block}#2{#1}}{\end{block}}

但主题Madrid是:

\newenvironment<>{myblock}[1]{%
  \setbeamercolor{block title}{fg=white,bg=orange}%
  \setbeamercolor{block body}{fg=black,bg=orange!25!white}%
  \begin{block}#2{#1}}{\end{block}}

当然,这是在default颜色主题中。但是,有些颜色主题,例如beaver,会使这些颜色更不透明或更闪亮。有没有办法确保这种不透明度也转化为myblock

我的策略建立在以下答案之上@薛定谔的猫。我定义了一个命令,它创建了四种颜色,用于为我们的自定义块的body.fgbody.bgtitle.fg和着色。这些颜色将通过将每个、、和的色调更改为所需特征颜色的色调来定义。这样,我们保持了颜色的原始饱和度和亮度。例如,如果我们想要的特征颜色是橙色,则以下内容将对应于我们的自定义块的颜色、、和。title.bgblock body.fgblock body.bgblock title.fgblock title.bgblockblock body.fgblock body.bgblock title.fgblock title.bg

  • blorangebodyfg: 的色调orange、 的饱和度和 的亮度block body.fg
  • blorangebodybg:色调orange、饱和度和亮度block body.bg
  • blorangetitlefg: 的色调orange、 的饱和度和 的亮度block title.fg
  • blorangetitlebg: 的色调orange、 的饱和度和 的亮度block title.bg

为此,beamerplus我定义了一个特殊的类(),用于存储必要的命令。由于文件有点长,我将其链接到这里

最重要的命令是\customblock,其定义如下:

\newenvironment<>{customblock}[2][orange]{%
    \blockcolorset{bl#1}{#1}
    \setbeamercolor{block title}%
        {fg=bl#1titlefg,bg=bl#1titlebg}%
    \setbeamercolor{block body}%
        {fg=bl#1bodyfg,bg=bl#1bodybg}%
    \begin{block}#3{#2}}{\end{block}}

哪里\blockcolorset会自动创建前面列出的所有颜色。但是当我调用它时,它会获取一些颜色,但不是按照预期的方式。以下是代码:

\documentclass{beamerplus}

\usetheme{Berlin}
\usecolortheme{wolverine}    


\begin{document}
\begin{frame}


\begin{block}{Normal block}

  Sic mundus creatus est.

\end{block}

\begin{customblock}{Neutral (orange) block}

  Sic mundus creatus est.

\end{customblock}

\begin{customblock}[yellow]{Yellow block}

  Sic mundus creatus est.

\end{customblock}


\end{frame}
\end{document}

输出如下:

输出 pdf。

让我头疼的是,如果我使用exampleblockas 范例(而不是block),它根本无法获得颜色。这是修改后的cls 文件

这是输出。

输出 pdf(exampleblock)。

我做错了什么?

提前感谢任何答复。

相关内容