Beamer - 未定义颜色:“局部结构”

Beamer - 未定义颜色:“局部结构”

我对投影仪有一些疑问\setbeamercolor{<element>}{local structure}

在演示文稿中,我使用 biblatex 命令直接在相关幻灯片上提供完整的参考书目\fullcite。参考文献的配色方案可以通过 进行操作\setbeamercolor{bibliography entry author}{<color definition>}。我的问题是,我在不同的元素中使用了不同的颜色——例如在纯白色背景上以及在具有深色背景和明亮文本颜色的块中。因此,我希望参考书目元素的颜色根据它们所使用的配色方案而变化。

据我了解,beameruserguide 正是为此而设计的“局部结构”样式元素。如果我将某个元素的颜色设置为“局部结构”,它会按预期工作,并根据父元素更改颜色(比较下面的示例代码)。但是,同时我得到了一个Package xcolor Error: Undefined color局部结构“。”错误,这让我觉得这似乎不是使用这个局部结构的正确方法。

是否有人知道如何以干净的方式获得这一点并且不会让每次引用都出现错误?

\begin{filecontents}{test.bib}
    @ARTICLE{Test,
      author = {Any Author},
      title = {A title},
      journal = {Random Journal},
      year = {1989},
      volume = {23},
      pages = {13-23}
    }
\end{filecontents}

\documentclass{beamer}
\usepackage[]{biblatex}

\bibliography{test}

\begin{document}
\begin{frame}
    \begin{itemize}
        \item default color:\\
        \fullcite{Test}\\
        \item default color alerted:\\
        \alert{\fullcite{Test}}\\
    \end{itemize}
    \setbeamercolor{bibliography entry author}{fg=local structure}
    Set color for author entry to "local structure"\\
    \begin{itemize}
        \item local structure:\\
        \fullcite{Test}\\
        \item local structure alerted:\\
        \alert{\fullcite{Test}}
    \end{itemize}
\end{frame}
\end{document}

我的 TeX 系统:Texlive2012 pdfTeX,版本 3.1415926-2.4-1.40.13(TeX Live 2012)beamer.cls 2011/09/12 开发版本 3.21 用于排版演示文稿的类(rcs-revision 70f9d8411e54)

答案1

从评论中可以明显看出,我误解了期望的目标。我会将原始答案保留在这里,但也会将解决方案从评论移到这里。

如果一个 beamer 对象具有指定的 (beamer) 颜色,并且您希望将该颜色设置为“与周围文本的颜色相同”,那么实现此目的的最佳方法是将指定的 beamer 颜色清空(我猜字体也是如此,但我没有测试过)。然后当 beamer 尝试使用该 (beamer) 颜色时,不会发生任何事情(包括没有投诉)。在这种情况下,分配给书目条目的 beamer 颜色是bibliography entry authortitlelocationnote。因此,要将它们全部清空,请执行以下操作:

\setbeamercolor{bibliography entry author}{fg=,bg=}
\setbeamercolor{bibliography entry title}{fg=,bg=}
\setbeamercolor{bibliography entry location}{fg=,bg=}
\setbeamercolor{bibliography entry note}{fg=,bg=}

(我希望我得到了它们全部。)然后,书目条目将以与周围文本相同的颜色排版,无论它是什么颜色。


原始答案

问题是,beamer 颜色不是真正的颜色,而是更高级的对象。因此,当命令需要颜色时,您无法为其提供 beamer 颜色:它不知道如何处理它。要从 beamer 颜色中获取颜色,请使用<colour name>.fg<colour name>.bg。因此,您可以将定义命令编写为:

\setbeamercolor{bibliography entry author}{fg=local structure.fg,bg=local structure.bg}

但那不起作用!这会报错,因为local structure是一个更复杂的对象,而且此时没有定义颜色。一种选择是使用语法parent

\setbeamercolor{bibliography entry author}{parent=local structure}

这可以编译,但不能提供正确的颜色。这是因为 beamer 很懒惰,当 beamer 颜色改变时,其实际颜色不一定立即更新。因此,完全有可能在bibliography entry author计算时,中的颜色local structure仍然是旧的颜色。

幸运的是,beamer 的作者想到了这一点。这就是关键use所在。这确保在计算新颜色之前,指定的颜色是最新的。

因此,为了获得完整的继承,需要执行以下操作:

\setbeamercolor{bibliography entry author}{use=local structure, fg=local structure.fg,bg=local structure.bg}

(也就是说,假设我已经明白了期望的结果应该是什么!)

\begin{filecontents}{test.bib}
    @ARTICLE{Test,
      author = {Any Author},
      title = {A title},
      journal = {Random Journal},
      year = {1989},
      volume = {23},
      pages = {13-23}
    }
\end{filecontents}

\documentclass{beamer}
\usepackage[]{biblatex}

\bibliography{test}

\begin{document}
\begin{frame}
    \begin{itemize}
        \item default color:\\
        \fullcite{Test}\\
        \item default color alerted:\\
        \alert{\fullcite{Test}}\\
    \end{itemize}
    \setbeamercolor{bibliography entry author}{use=local structure, fg=local structure.fg,bg=local structure.bg}
    Set color for author entry to "local structure"\\
    \begin{itemize}
        \item local structure:\\
        \fullcite{Test}\\
        \item local structure alerted:\\
        \alert{\fullcite{Test}}
    \end{itemize}
\end{frame}
\end{document}

结果:

提醒书目条目

相关内容