使用 Metropolis 包在演示过程中更改主题

使用 Metropolis 包在演示过程中更改主题

我正在使用beamer 主题metropolis。根据手册(第 6 页),metropolis提供了背景选项,即darklight,可以设置任何时候,即,甚至在演示过程中,也可以使用\metroset宏。

正如预期的那样,在前言中设置\metroset{background=dark}会导致背景变暗,而 则变亮normal text

但是,\metroset{background=dark}在文档中间使用 并不能按预期工作。确实将下一张幻灯片的背景设置为深色,但不会将\metroset{background=dark}的颜色更改为。因此,深色背景上的文本是不可见的。normal textdarklight

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

黑暗来临,光明回归

相关内容