我正在使用beamer
主题metropolis
。根据手册(第 6 页),metropolis
提供了背景选项,即dark
和light
,可以设置任何时候,即,甚至在演示过程中,也可以使用\metroset
宏。
正如预期的那样,在前言中设置\metroset{background=dark}
会导致背景变暗,而 则变亮normal text
。
但是,\metroset{background=dark}
在文档中间使用 并不能按预期工作。确实将下一张幻灯片的背景设置为深色,但不会将\metroset{background=dark}
的颜色更改为。因此,深色背景上的文本是不可见的。normal text
dark
light
\documentclass{beamer}
\usetheme[progressbar=frametitle,block=fill]{metropolis}
\begin{document}
\begin{frame}{Light Theme}
Hello, world!
\end{frame}
\metroset{background=dark} % change background theme according to manual
\begin{frame}{Dark Theme}
Hello, world! % invisible
\end{frame}
\end{document}
答案1
主题没有充分考虑 Beamer 颜色的工作方式。特别是,当您更改颜色时,代码会使用 ,\setbeamercolor
但不会使用\usebeamercolor
,而 是更改生效所必需的。
例如,以下内容有效。
\documentclass{beamer}
\usetheme[progressbar=frametitle,block=fill]{metropolis}
\begin{document}
\begin{frame}{Light Theme}
Hello, world!
\end{frame}
\metroset{background=dark} % change background theme according to manual
\usebeamercolor[fg]{normal text}
\begin{frame}{Dark Theme}
Hello, world! % invisible
\end{frame}
\end{document}
如果您在使用此主题时遇到任何奇怪的间距问题,请考虑它引入了虚假空格的可能性,因为代码表明它可能非常热衷于这样做。
为了使事情按预期进行,您可以按如下方式重新定义命令。
\documentclass{beamer}
\usetheme[progressbar=frametitle,block=fill]{metropolis}
\makeatletter
\renewcommand{\metropolis@colors@dark}{%
\setbeamercolor{normal text}{%
fg=black!2,
bg=mDarkTeal
}%
\usebeamercolor[fg]{normal text}%
}
\renewcommand{\metropolis@colors@light}{%
\setbeamercolor{normal text}{%
fg=mDarkTeal,
bg=black!2
}%
\usebeamercolor[fg]{normal text}%
}
\makeatother
\begin{document}
\begin{frame}{Light Theme}
Hello, world!
\end{frame}
\metroset{background=dark} % change background theme according to manual
\begin{frame}{Dark Theme}
Hello, world! % invisible
\end{frame}
\metroset{background=light} % change background theme according to manual
\begin{frame}{Light Again}
Hello, world! % invisible
\end{frame}
\end{document}