[Tex/LaTex] Beamer – How to customise the header of a frankfurt slide

beamerheader-footer

I use the following options:

\usetheme{Frankfurt}
\setbeamercolor{section in head/foot}{fg=black, bg=white}

and this yields a slide which looks like this:

enter image description here

Is it possible

  • to bring 'Section 1' and 'Section 2' closer together?
  • to draw a separation line before the frame title ?

Best Answer

Sure. You can redefine the headline template; I produced the separation line by using a beamercolorbox of .75ex height and using the upper separation line head color previously set.

Instead of using \insertnavigation, I used \insertsectionnavigationhorizontal which allows for more control. I used the red color, since you didn't provide complete information on the color schema used in your code snippet.Feel free to change the settings according to your needs:

\documentclass{beamer}
\usetheme{Frankfurt}

\setbeamercolor{section in head/foot}{fg=black, bg=white}
\setbeamercolor{frametitle}{fg=red, bg=white}
\setbeamercolor{upper separation line head}{bg=red}

\makeatletter
\setbeamertemplate{headline}
{%
  \pgfuseshading{beamer@barshade}%
  \ifbeamer@sb@subsection%
    \vskip-9.75ex%
  \else%
    \vskip-7ex%
  \fi%
  \begin{beamercolorbox}[ignorebg,ht=2.25ex,dp=3.75ex]{section in head/foot}
    \insertsectionnavigationhorizontal{\paperwidth}{}{\hfill\hfill}
  \end{beamercolorbox}%
  \ifbeamer@sb@subsection%
    \begin{beamercolorbox}[ignorebg,ht=2.125ex,dp=1.125ex,%
      leftskip=.3cm,rightskip=.3cm plus1fil]{subsection in head/foot}
      \usebeamerfont{subsection in head/foot}\insertsubsectionhead
    \end{beamercolorbox}%
  \fi%
 \begin{beamercolorbox}[colsep=1.5pt,ht=.75ex]{upper separation line head}
 \end{beamercolorbox}
}%
\makeatother

\begin{document}

\section{Section One}

\begin{frame}
\frametitle{Test Frame One}
test
\end{frame}

\section{Section Two}

\begin{frame}
\frametitle{Test Frame Two}
test
\end{frame}

\end{document}

enter image description here

enter image description here

As Claudio Fiandrino mentions in his comment, using

\insertsectionnavigationhorizontal{\paperwidth}{\hskip0pt plus1fill}{\hskip0pt plus1fill}

instead of

\insertsectionnavigationhorizontal{\paperwidth}{}{\hfill\hfill}

will produce centered sections in the navigation bar.

The previous approach has a disadvantage: the indicators for subsections are no longer included. To recover the indicators and to get the section titles closer, a redefinition of \insertnavigation will be needed:

\documentclass{beamer}
\usetheme{Frankfurt}

\setbeamercolor{section in head/foot}{fg=black, bg=white}
\setbeamercolor{frametitle}{fg=red!70!black, bg=white}
\setbeamercolor{upper separation line head}{bg=red!70!black}

\makeatletter
\def\insertnavigation#1{%
  \vbox{{%
    \usebeamerfont{section in head/foot}\usebeamercolor[fg]{section in head/foot}%
    \beamer@xpos=0\relax%
    \beamer@ypos=1\relax%
    \hbox to #1{\hskip.3cm\setbox\beamer@sectionbox=\hbox{\kern1sp}%
      \ht\beamer@sectionbox=1.875ex%
      \dp\beamer@sectionbox=0.75ex%
        \hskip.3cm%
        \global\beamer@section@min@dim\z@
        \dohead%
        \beamer@section@set@min@width
      \box\beamer@sectionbox\hfill\hskip.3cm}%
  }}}

\setbeamertemplate{headline}
{%
  \pgfuseshading{beamer@barshade}%
  \ifbeamer@sb@subsection%
    \vskip-9.75ex%
  \else%
    \vskip-7ex%
  \fi%
  \begin{beamercolorbox}[ignorebg,ht=2.25ex,dp=3.75ex]{section in head/foot}
    \insertnavigation{\paperwidth}
  \end{beamercolorbox}%
  \ifbeamer@sb@subsection%
    \begin{beamercolorbox}[ignorebg,ht=2.125ex,dp=1.125ex,%
      leftskip=.3cm,rightskip=.3cm plus1fil]{subsection in head/foot}
      \usebeamerfont{subsection in head/foot}\insertsubsectionhead
    \end{beamercolorbox}%
  \fi%
 \begin{beamercolorbox}[colsep=1.5pt,ht=.75ex]{upper separation line head}
 \end{beamercolorbox}
}%
\makeatother

\begin{document}

\section{Section One}
\subsection{Test Subsection One One}
\begin{frame}
\frametitle{Test Frame}
test
\end{frame}
\subsection{Test Subsection One Two}
\begin{frame}
\frametitle{Test Frame}
test
\end{frame}

\section{Section Two}
\subsection{Test Subsection Two One}
\begin{frame}
\frametitle{Test Frame}
test
\end{frame}
\subsection{Test Subsection Two Two}
\begin{frame}
\frametitle{Test Frame}
test
\end{frame}

\section{Section Three}
\subsection{Test Subsection Three One}
\begin{frame}
\frametitle{Test Frame}
test
\end{frame}
\subsection{Test Subsection Three Two}
\begin{frame}
\frametitle{Test Frame}
test
\end{frame}

\end{document}

enter image description here