如何定义带有主题的投影仪选项?

如何定义带有主题的投影仪选项?

我正在尝试创建自己的 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}

相关内容