That's right, the beamer
package only calculates the height of the headline once, at the beginning of the document. The macro responsible for this task is called \beamer@calculateheadfoot
, and is defined in beamerbaseframecomponents.sty
(ll. 161-182). If the head of your headline changes in the course of the presentation (which doesn't sound like a terribly good idea to my mind, BTW), you'll have to issue this command manually.
This can be done for example by adding it to the internal macro \beamer@@@@frame
: Like this, the head of head- and footlines etc. are recalculated each time a frame is being built:
\usepackage{etoolbox}
\makeatletter
\pretocmd{\beamer@@@@frame}{%
\addtocounter{framenumber}{1}%
\beamer@calculateheadfoot%
\addtocounter{framenumber}{-1}}{}{}
\makeatother
Add this code snippet to your document or your theme file. (The manual change of framenumber
is necessary to get the correct headline as beamer
hasn't stepped the counter at this point.)
Minimal example:
\documentclass{beamer}
% To make a compilable example, these definitions are necessary - you can replace them by your own
\colorlet{LightBlue}{blue}
\colorlet{DarkGray}{gray}
\setbeamercolor{linemid}{bg=green}
\newlength{\headerheight}
\setlength{\headerheight}{10pt}
\makeatletter
\setbeamertemplate{headline}
{ \ifnum\c@framenumber>1
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=\paperwidth,ht=\headerheight,dp=0pt]{}%
\ifx\insertsection\@empty
\else
{
{\usebeamerfont{headsection}\hspace{1em} \color{LightBlue}\insertsection}
\ifx\insertsubsection\@empty
\else
{\hspace{0.5em}$\vert$ \hspace{0.5em}{\usebeamerfont{headsubsection}\color{DarkGray}\insertsubsection}}%
\fi
}
\fi
\end{beamercolorbox}%
} %
\vskip0pt%
\else
\hbox{%
\begin{beamercolorbox}[wd=\paperwidth,ht=20pt,dp=0pt]{linemid}
\end{beamercolorbox}%
}
\fi
}
% Recalculate the head of head- and footlines for each frame
% (http://tex.stackexchange.com/a/61788/3323)
\usepackage{etoolbox}
\makeatletter
\pretocmd{\beamer@@@@frame}{%
\addtocounter{framenumber}{1}%
\beamer@calculateheadfoot%
\addtocounter{framenumber}{-1}}{}{}
\makeatother
\begin{document}
\section{section}
\subsection{subsection}
\frame{Title page with special headline}
\frame{Normal frame}
\frame{Normal frame 2}
\end{document}
You can adapt this answer to How to make beamer overlays with Tikz node:
\tikzset{onslide/.code args={<#1>#2}{%
\only<#1>{\pgfkeysalso{#2}} % \pgfkeysalso doesn't change the path
}}
\tikzset{alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
}}
\tikzset{temporal/.code args={<#1>#2#3#4}{%
\temporal<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}{\pgfkeysalso{#4}} % \pgfkeysalso doesn't change the path
}}
This allows you to put for instance temporal=<overlay specification>{before}{during}{after}
in the keyval list anywhere in a TikZ command. onslide
works the same way with \only
and I included \alt
to round out the set.
Here is the complete code:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows}
\usepackage{xcolor}
\definecolor{uablue}{RGB}{0,61,100}
\colorlet{uablue100}{uablue}
\colorlet{uablue75} {uablue!75!white}
\colorlet{uablue50} {uablue!50!white}
\colorlet{uablue25} {uablue!25!white}
\colorlet{uablue10} {uablue!10!white}
\colorlet{uablue5} {uablue!5!white}
\definecolor{uared}{RGB}{126,0,47}
\colorlet{uared100}{uared}
\colorlet{uared75} {uared!75!white}
\colorlet{uared50} {uared!50!white}
\colorlet{uared25} {uared!25!white}
\colorlet{uared10} {uared!10!white}
\colorlet{uared5} {uared!5!white}
\tikzset{onslide/.code args={<#1>#2}{%
\only<#1>{\pgfkeysalso{#2}} % \pgfkeysalso doesn't change the path
}}
\tikzset{alt/.code args={<#1>#2#3}{%
\alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
}}
\tikzset{temporal/.code args={<#1>#2#3#4}{%
\temporal<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}{\pgfkeysalso{#4}} % \pgfkeysalso doesn't change the path
}}
\begin{document}
\begin{frame}<1>[label=overview]
\frametitle{Overview}
\begin{figure}
\centering
\tikzstyle{block} = [rectangle, draw, fill=uablue25,
text width=4em, text centered, rounded corners, minimum height=2em, line width=1pt ]
\tikzstyle{line} = [line width=1pt, -triangle 45]
\tikzstyle{alert} = [text=uared100, fill=uared25, draw=uared100]
\tikzstyle{dim} = [text=uablue25, fill=uablue5, draw=uablue25]
\begin{tikzpicture}[node distance=1.5cm, auto]
% Place nodes
\node [block,onslide=<2->{dim}] (client) {Web Client};
\node [block,onslide=<2->{dim}] (python) [right of=client, node distance=3cm] {Python Service};
\node [block,onslide=<2->{dim}] (wavefront) [right of=python, node distance=3cm] {Wavefront};
\node [block,onslide=<2->{dim}] (AMCL) [above of=wavefront] {AMCL};
\node [block,temporal=<2>{}{alert}{dim}] (VFH) [below of=wavefront] {VFH};
\node [block,onslide=<2->{dim}] (laser) [above right=0.5cm and 1.2cm of AMCL] {Laser};
\node [block,onslide=<2->{dim}] (dash7) [right of=AMCL, node distance=3cm] {DASH7};
\node [block,onslide=<2->{dim},temporal=<3>{}{alert}{dim}] (robot) [right of=wavefront, node distance=3cm] {Robot};
% Draw edges
\draw [line] (client.east) -> (python.west);
\draw [line] (python) -> (client);
\draw [line] (python) -- (wavefront);
\draw [line] (AMCL) -- (wavefront);
\draw [line] (AMCL) edge[out=180,in=90] (python);
\draw [line] (python) edge[out=270,in=180] (VFH);
\draw [line] (wavefront) -- (VFH);
\draw [line] (laser) -> (AMCL);
\draw [line] (dash7) -> (AMCL);
\draw [line] (robot) -> (AMCL);
\draw [line] (VFH) edge[out=0,in=270] (robot);
\end{tikzpicture}
\end{figure}
\end{frame}
\begin{frame}{Introductory stuff}
\begin{itemize}[<+->]
\item Stuff
\item Stuff
\item Stuff
\item Stuff
\end{itemize}
\end{frame}
\againframe<2>{overview}
\begin{frame}{Stuff about VFH}
\begin{itemize}[<+->]
\item Stuff
\item Stuff
\item Stuff
\item Stuff
\item Stuff
\end{itemize}
\end{frame}
\againframe<3>{overview}
\begin{frame}{Stuff about Robot}
\begin{itemize}[<+->]
\item Stuff
\item Stuff
\item Stuff
\end{itemize}
\end{frame}
\end{document}
Best Answer
Found it myself when scanning the beamer theme again. There was some code
I deleted
\thesection ~~
and it worked!