我想定义一个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.fg
、body.bg
、title.fg
和着色。这些颜色将通过将每个、、和的色调更改为所需特征颜色的色调来定义。这样,我们保持了颜色的原始饱和度和亮度。例如,如果我们想要的特征颜色是橙色,则以下内容将对应于我们的自定义块的颜色、、和。title.bg
block body.fg
block body.bg
block title.fg
block title.bg
block
block body.fg
block body.bg
block title.fg
block 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}
输出如下:
让我头疼的是,如果我使用exampleblock
as 范例(而不是block
),它根本无法获得颜色。这是修改后的cls 文件。
这是输出。
我做错了什么?
提前感谢任何答复。