Beamer 标题设置

Beamer Headline setup

我目前正在开发自己的 beamer 模板(实际上,我正在尝试改造现有的 power point 设计,以便我可以使用 Latex 进行演示)。

现有模板有一个标题栏,右侧显示徽标,栏下方有一个小彩色栏。此标题栏显示在标题页以及文本幻灯片中。在文本幻灯片中,标题栏还包含当前帧的标题和副标题,每个都有自己的字体大小和颜色。

使用 beamer 用户指南和其他模板,我发现每个框架都有一个标题,有时用于显示当前部分,以及一个通常显示框架标题和副标题的框架标题。标题显示在最上面,然后是框架标题。但是,框架标题未显示在标题页上。

我的设置的一个(我希望尽可能少)工作示例是:

\setbeamercolor*{frametitle}{fg=white,bg=blue}
\setbeamercolor*{framesubtitle}{fg=gray,bg=blue}

\defbeamertemplate*{headline}{formusic}
    \ifx\insertframetitle\@empty%
        \begin{beamercolorbox}[wd=\paperwidth, ht=1.5cm]{frametitle}
            \hfill
            \includegraphics[scale=0.15]{logo.png}
        \end{beamercolorbox}
    \else%
    \fi%

\defbeamertemplate*{frametitle}{formusic}
    \ifx\insertframetitle\@empty%
        \begin{beamercolorbox}[wd=\paperwidth, ht=1.5cm]{frametitle}
        \end{beamercolorbox}
    \else%
        \ifx\insertframesubtitle\@empty%
            \begin{beamercolorbox}[wd=\paperwidth, ht=1.5cm]{frametitle}
                \raisebox{0.55cm}{\insertframetitle}
                \hfill
                \includegraphics[scale=0.15]{logo.png}
            \end{beamercolorbox}
        \else%
            \hbox{
                \vbox{
                \begin{beamercolorbox}[wd=\paperwidth, ht=0.7cm]{frametitle}
                    \insertframetitle
                \end{beamercolorbox}
                \begin{beamercolorbox}[wd=\paperwidth, ht=0.7cm]{framesubtitle}
                    \insertframesubtitle
                \end{beamercolorbox}}
                \includegraphics[scale=0.15]{logo.png}}
        \fi
    \fi%

这样的结果可见in these slide headers。首先,标题页看起来不错(我使用蓝色背景颜色来形象化我的问题),但是对于其他幻灯片来说,它看起来不太好。

标题似乎不支持'\insertframe(sub)title'命令。因此,我使用了一种变通方法,在第一页的标题中显示空标题栏 ifnum\c@framenumber=1,并为所有其他页面显示空标题。在这些幻灯片上,标题栏由 frametitle 显示。这几乎有效,因为在 frametitle 和幻灯片的顶部边框之间仍然可以看到一条小白线。

我的第二个问题是:如何在我的标题栏中理想地排列 frametitle、-subtitle 和 logo?我经常使用 beamercolorboxes,但我对目前所取得的成就并不是 100% 满意。我的尝试是将 frametitle 和副标题放在单独的 beamercolorboxes 中(这似乎是最干净的尝试,因为我可以为每个使用单独定义的布局,而不是切换字体大小和颜色),它们彼此下方。但是现在我不知道如何定位标志。


编辑:根据 Werners 的建议添加了代码示例和图像,并相应地编辑了文本。

快速解决方法:根本不使用标题,但要确保 frametitle 将显示在所有框架上,即使是那些没有 frametitle 的框架:

\documentclass{beamer}

\setbeamertemplate{headline}{}

\setbeamercolor{frametitle}{fg=white,bg=blue}
\setbeamercolor{framesubtitle}{fg=gray,bg=blue}

\makeatletter
\patchcmd{\endbeamer@frameslide}{\ifx\beamer@frametitle\@empty}{\iffalse}{}{\errmessage{failed to patch}}
\makeatother

\makeatletter
\setbeamertemplate{frametitle}{%
  \ifbeamercolorempty[bg]{frametitle}{}{\nointerlineskip}%
  \@tempdima=\textwidth%
  \advance\@tempdima by\beamer@leftmargin%
  \advance\@tempdima by\beamer@rightmargin%
  \begin{beamercolorbox}[sep=0.3cm,left,wd=\the\@tempdima]{frametitle}
    \begin{minipage}{.81\paperwidth}
    \usebeamerfont{frametitle}%
    \vbox{}\vskip-1ex%
    \if@tempswa\else\csname beamer@fteleft\endcsname\fi%
    \strut\insertframetitle\par%
    {%
      \ifx\insertframesubtitle\@empty%
      \else%
      {\usebeamerfont{framesubtitle}\usebeamercolor[fg]{framesubtitle}\strut\insertframesubtitle\par}%
      \fi
    }%
    \end{minipage}%
    \quad\raisebox{-0.3cm}{\includegraphics[width=.1\paperwidth]{example-image-duck}}
    \if@tempswa\else\vskip-.3cm\fi% set inside beamercolorbox... evil here...
  \end{beamercolorbox}%
}
\makeatother 

\begin{document}

\begin{frame}
    abc
\end{frame} 

\begin{frame}
\frametitle{title}
    abc
\end{frame} 

\begin{frame}
\frametitle{very long title which possible spans over multiples lines...}
    abc
\end{frame} 

\begin{frame}
\frametitle{title}
\framesubtitle{subtitle}
    abc
\end{frame} 


\begin{frame}
    abc
\end{frame} 


\end{document}