当前活动主题的 Beamer 名称

当前活动主题的 Beamer 名称

有没有办法beamer获取当前活动主题的字符串名称?我想编写一个基于 beamer 的类,该类 (1) 如果用户未指定主题,则加载特定主题,并且 (2) 根据加载的主题执行某些修改。

以下是我正在寻找的 MWE:

\documentclass[11pt]{beamer}
\usepackage{xstring}
\usepackage{etoolbox}

\AtEndPreamble{
\makeatletter

\IfStrEqCase*{\beamer@theme}{
  {default}{%
    \usetheme{Berlin}
  }{Madrid}{%
    % do something
  }{metropolis}{%
    % do something else
  }%
}[]

\makeatother
}

\begin{document}

\begin{frame}{Title}
  Hello World
\end{frame}

\end{document}

答案1

如果加载了某些主题文件,您可以使用钩子来更改变量:

\documentclass{beamer}

\def\beamertheme{default}
\AddToHook{file/beamerthememoloch.sty/after}{\def\beamertheme{moloch}}
\AddToHook{file/beamerthemeMadrid.sty/after}{\def\beamertheme{Madrid}}

\usetheme{Madrid}

\begin{document}

\begin{frame}{Title}
  Hello World \beamertheme
\end{frame}

\end{document}

(请记住,默认主题始终会被加载,即使它的某些部分后来被其他主题覆盖)

相关内容