Beamer 自定义模板:简单的页眉和页脚以及标题页

Beamer 自定义模板:简单的页眉和页脚以及标题页

我正在准备演讲,我不喜欢现有的 Beamer 主题。它们对我来说似乎都太臃肿了,那些简约的主题在我看来太“松散”了。我喜欢在内容周围设置一个框架,就像我在文章中使用页眉和页脚一样。

我采用了一些其他人制作的自定义主题,并将它们与可用的主题相结合,几乎达到了我想要的效果。

我的目标是制作一个带有框架标题的彩色标题(矩形)。标题应该始终存在,但由于您不应该使用没有标题的框架,因此这应该不是问题。

因为脚注应该与右下角的帧号几乎相同。

标题框应该一半是彩色,一半是白色。

以下是我得到的:主题:

\usepackage{tikz}

\colorlet{sharky_main}{DodgerBlue3!80}
\colorlet{sharky_secondary}{white}
\definecolor{sharky_black}{RGB}{43,40,40}

\setbeamercolor{section in head/foot}{fg=white, bg=sharky_main}

\newdimen\sharky@titleheight
\sharky@titleheight=0.5\paperheight

\newdimen\sharky@authorheight
\sharky@authorheight=3cm

\newdimen\sharky@framebarheight
\sharky@framebarheight=1cm

\newdimen\sharky@frametitlespace
\sharky@frametitlespace=0.25cm

\newdimen\sharky@footbarheight
\sharky@footbarheight=0.35cm

% disable navigation
\setbeamertemplate{navigation symbols}{}

% custom draw the title page above
\setbeamertemplate{title page}{
    \begin{beamercolorbox}[wd=\paperwidth, ht=0.99\paperheight]{title page}
        \begin{tikzpicture}
            % set up the entire slide as the canvas
            \useasboundingbox (0,0) rectangle(\the\paperwidth,\the\paperheight);

            % the background
            \fill[color=sharky_secondary] (0,0) rectangle(\the\paperwidth,\the\paperheight);

            % draw the fills
            \fill[color=sharky_main] (\paperwidth,\paperheight) rectangle +(-\paperwidth,-\paperheight+\sharky@titleheight);

            % draw the actual text
            \node[above, text width=\paperwidth-0.5cm, align=center] at (0.5\paperwidth, \paperheight-\sharky@titleheight) {
                \color{sharky_secondary}\Huge\bfseries\inserttitle \par\vspace{0.5cm} \small\insertsubtitle };
            %\node[above] at(0.5\paperwidth,2.3cm) {\color{sharky_black}\tiny by};
            \node at (0.5\paperwidth, \sharky@authorheight) { \color{sharky_black}\LARGE\bfseries\insertauthor };

            % add the date in the corner
            \node[above] at(0.5\paperwidth,2cm) {\color{sharky_black}\small\insertdate};
        \end{tikzpicture}
    \end{beamercolorbox}
}

\setbeamertemplate{frametitle}
{
    \begin{beamercolorbox}[wd=\paperwidth, ht=0.95\sharky@framebarheight]{frametitle}
        \begin{tikzpicture}
            \path[fill=sharky_main] (0, \paperheight) rectangle (\paperwidth, \paperheight-\sharky@framebarheight);
            \node[right, color=sharky_secondary] at (0, \paperheight-0.5\sharky@framebarheight)
            {\hspace{\sharky@frametitlespace}\color{sharky_secondary}\LARGE\textbf{\insertframetitle}};
        \end{tikzpicture}
    \end{beamercolorbox}
}

\setbeamertemplate{footline}%
{
  \leavevmode%
  \begin{beamercolorbox}[wd=\paperwidth,ht=0.95\sharky@footbarheight]{section in head/foot}%
      \begin{tikzpicture}
          \path[fill=sharky_main] (0, 0) rectangle (\paperwidth, \sharky@footbarheight);
          \node[left=0.15cm, color=sharky_secondary] at (\paperwidth, 0.5*\sharky@footbarheight) { \scriptsize \insertframenumber/\inserttotalframenumber };
      \end{tikzpicture}
  \end{beamercolorbox}
}

测试文件:

\documentclass[x11names, svgnames]{beamer}

\usetheme{sharky}

\title{A nice beamer theme}
\subtitle{Some thoughts}
\author{Patrick Schulz}
\date{Today}

\begin{document}
\frame{\maketitle}
\begin{frame}
    \frametitle{A sample frame}
    Did we get what we wanted?
\end{frame}
\end{document}

标题框 样本框架

所以这看起来不太糟糕,但我有一些担心:

  1. 标题页上可以看到脚注线。我读过这里一个问题的答案,他们建议使用\ifnum\thepage=1\else。使用这个,脚注线会向下移动,并且只有一半可见。为什么会发生这种情况?

  2. 我尝试了很多,但还是不明白如何放置投影仪框。为什么我需要在框架标题中使用投影仪颜色框?据我所知,我可以使用它来获取此特定项目的字体和颜色。但它也有助于框架标题的放置。如果没有它,框架标题的整个蓝色矩形就会向右移动。

    1. 我感觉我使用 beamer 的方式不对。我更愿意使用内置模板,只调整颜色、尺寸和字体,但我尝试了一些方法,但没有成功(我知道这很荒谬。我很抱歉)。我不觉得“我的”主题如此复杂,但看起来确实如此。

我很高兴能得到一个关于 Beamer 如何放置模板的一般描述。我经常使用 tikz,在这里我对事物如何运作以及如何改变它们的直觉大多是正确的。如果不对,我可以查阅手册。在 Beamer 中我感到非常迷茫。非常感谢您阅读这篇长文。

附言:这个主题叫做sharky,因为我喜欢鲨鱼。

答案1

我只需将标题页放入plain框架中。

\frame[plain]{\titlepage}

我个人重新定义标题如下:

\def\maketitle{%
  \ifbeamer@inframe
    \titlepage
  \else
    \frame[plain]{\titlepage}
  \fi
}

这样,我就可以\maketitle直接在演示文稿中使用它,而不必将其放入框架中。

我不太明白你的第二个问题。

回答你的第三个问题。是的,你的实现不太“像 Beamer”。例如,你不使用\setbeamerfont{•}{•}。而且在我看来,你到处使用 tikz 让事情变得过于复杂。所以这里有一个实现,我认为它更符合 Beamer 的预期用途。

\colorlet{sharky_main}{DodgerBlue3!80}
\colorlet{sharky_secondary}{white}
\definecolor{sharky_black}{RGB}{43,40,40}

\setbeamercolor{section in head/foot}{fg=white, bg=sharky_main}
\setbeamercolor{frametitle}{fg=white, bg=sharky_main}
\setbeamercolor{title page top}{fg=sharky_secondary, bg=sharky_main}
\setbeamercolor{title page bottom}{fg=sharky_black, bg=sharky_secondary}

\setbeamerfont{frametitle}{size=\Large, series=\bfseries}
\setbeamerfont{title}{size=\Huge, series=\bfseries}
\setbeamerfont{subtitle}{size=\small}
\setbeamerfont{author}{size=\LARGE, series=\bfseries}
\setbeamerfont{date}{size=\small}

\newdimen\sharky@frametitlesep
\sharky@frametitlesep=1.5ex
\newdimen\sharky@footbarsep
\sharky@footbarsep=1ex

% disable navigation
\setbeamertemplate{navigation symbols}{}

\def\maketitle{%
  \ifbeamer@inframe
    \titlepage
  \else
    \frame[plain]{\titlepage}
  \fi
}

% custom draw the title page above
\setbeamertemplate{title page}{%
    \begin{beamercolorbox}[wd=\paperwidth, ht=0.5\paperheight, center, sep=0pt]{title page top}
        \usebeamerfont{title}\inserttitle\par
        \vspace{0.5em}%
        \usebeamerfont{subtitle}\insertsubtitle\par
        \vspace{1em}%
    \end{beamercolorbox}%
    \begin{beamercolorbox}[wd=\paperwidth, ht=0.5\paperheight, center]{title page bottom}
    \vbox to 0.5\paperheight{%
        \vfil%
        \usebeamerfont{author}\insertauthor\par%
        \vspace{0.5em}%
        \usebeamerfont{date}\insertdate\par%
        \vfil%
    }%
    \end{beamercolorbox}
}

\setbeamertemplate{frametitle}{%
    \nointerlineskip%
    \usebeamerfont{frametitle}%
    \begin{beamercolorbox}[wd=\paperwidth,sep=\sharky@frametitlesep]{frametitle}
        \usebeamerfont{frametitle}\insertframetitle%
    \end{beamercolorbox}
}

\setbeamertemplate{footline}{
    \nointerlineskip%
    \usebeamerfont{frametitle}%
    \begin{beamercolorbox}[wd=\paperwidth, sep=\sharky@footbarsep]{section in head/foot}
        \hfill\scriptsize\insertframenumber/\inserttotalframenumber%
    \end{beamercolorbox}
}

相关内容