我正在尝试创建自己的 Beamer 主题,默认情况下应使用 Beamercompress
选项加载。我尝试使用以下声明,我在几个不同的答案和主题中看到了它:
\DeclareOptionBeamer{compress}{\beamer@compresstrue}
\ProcessOptionsBeamer
但以下 MWE 生成了导航栏的非压缩版本,每个导航栏都subsection
创建了自己的点线:
\begin{filecontents}{beamerthemeCompress.sty}
\DeclareOptionBeamer{compress}{\beamer@compresstrue}
\ProcessOptionsBeamer
\setbeamertemplate{headline}{%
\begin{beamercolorbox}[ht=2.25ex,dp=3.25ex]{section in head/foot}
\tiny\insertnavigation{.2\paperwidth}
\end{beamercolorbox}%
}
\end{filecontents}
\documentclass{beamer}
\usetheme{Compress}
\begin{document}
\section{Intro}
\subsection{Intro Sub1}
\begin{frame}{Frame 1}
Some Text
\end{frame}
\subsection{Intro Sub2}
\begin{frame}{Frame 2}
Some Text
\end{frame}
\section{Cont}
\subsection{Cont Sub1}
\begin{frame}{Frame 3}
Some Text
\end{frame}
\subsection{Cont Sub2}
\begin{frame}{Frame 4}
Some Text
\end{frame}
\end{document}
仅当我使用时,\documentclass[compress]{beamer}
我才能获得所需的压缩版本,并且所有点都在同一行上:
如何才能使我的主题始终看起来像这样而不需要加载类[compress]
?
答案1
重新定义时,您\DeclareOptionBeamer
只是重新定义,而不是执行它。然后,\ProcessOptionsBeamer
您只执行给定的选项,而不是每个定义的选项。
因此,您的代码实际上什么也不做,如果您完全放弃它,您只会得到相同的结果,因为该类beamer
已经处理了您的compress
选项。
相反,只需执行选项的代码,就好像它被给定了一样,你就会得到你想要的结果:
\begin{filecontents}{beamerthemeCompress.sty}
\beamer@compresstrue
\setbeamertemplate{headline}{%
\begin{beamercolorbox}[ht=2.25ex,dp=3.25ex]{section in head/foot}
\tiny\insertnavigation{.2\paperwidth}
\end{beamercolorbox}%
}
\end{filecontents}
\documentclass{beamer}
\usetheme{Compress}
\begin{document}
\section{Intro}
\subsection{Intro Sub1}
\begin{frame}{Frame 1}
Some Text
\end{frame}
\subsection{Intro Sub2}
\begin{frame}{Frame 2}
Some Text
\end{frame}
\section{Cont}
\subsection{Cont Sub1}
\begin{frame}{Frame 3}
Some Text
\end{frame}
\subsection{Cont Sub2}
\begin{frame}{Frame 4}
Some Text
\end{frame}
\end{document}