Basically there are two issues to solve:
- How to get stuff atop of the ordinary content at an arbitrary postion.
- How to draw a callout box there.
For (1), the beamer documentation recommends the textpos
package, which provides (with the options [absolute, overlay]
the necessary means to put "something" at an absolute position over every other content.
For (2) there are many, many options. I personally prefer some snippets of TikZ-code to typeset the boxes, which gives me enough flexibility to influence the typesetting in specific situations.
Putting it all togetherm my usual setup is as follows:
\documentclass{beamer}
\usepackage[absolute,overlay]{textpos}
\usepackage{tikz}
\usetikzlibrary{shadows}
%**
% \PutAt<overlay spec>[<box width>]{(<x>, <y>)}{<content>}
%
% real absolute positioning of <content> on a slide, if content is a figure,
% minipage or whatever kind of LR-box, the <box width> argument may be omitted
%
%
% implementation notes:
% - based on \usepackage[absolute,overlay]{textpos}
% - NOT combinable with any beamer feature that is based on pgfpages
% (such as dual-screen support, built-in 2up handouts, etc.), as textpos
% and pgfpates interfere at the shippout-level.
%
\newcommand<>{\PutAt}[3][0pt]{%
{\only#4{\begin{textblock*}{#1}#2%
#3
\end{textblock*}}}%
}
%**
% \ShowPutAtGrid
%
% draws a helpful grid on the current slide to figure <x> and <y> parameters for \PutAt
%
\newcommand{\ShowPutAtGrid}{
\begin{textblock*}{128mm}(0cm,0cm)
\tikz[color=red!20!white]\draw[very thin, step=5mm] (0mm,0mm) grid (130mm,100mm);
\end{textblock*}
\begin{textblock*}{128mm}(0cm,0cm)
\begin{tikzpicture}[color=red]
\draw[step=1cm] (0,0mm) grid (130mm,100mm);
\foreach \n in {0,...,12}
\draw[xshift=.5mm,yshift=-1.5mm, inner sep=0pt, anchor=west] (\n,10) node {\scriptsize{\textbf{\n}}};
\foreach \n in {1,...,9}
\draw[xshift=.5mm,yshift=-1.5mm, inner sep=0pt, anchor=west] (0,10-\n) node {\scriptsize{\textbf{\n}}};
\end{tikzpicture}
\end{textblock*}
}
%**
% \NormalBox<overlay spec>[tikz picture/node options]{<content>}
%
% draws content boxed in a nice box
%
\newcommand<>{\NormalBox}[2][]{%
\only#3{\tikz[#1, every node/.style={shape=rectangle,draw,fill=white, drop shadow, #1}]\node []{#2};}
}
%**
% \OrangeBox<overlay spec>[tikz picture/node options]{<content>}
%
% draws content boxed in an orange call-out box
%
\newcommand<>{\OrangeBox}[2][]{%
\onslide#3{\NormalBox[fill=orange!30,draw=black!30,rounded corners=4pt,#1]{#2}}%
}
\begin{document}
\begin{frame}{My frame}
\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}
\PutAt<+>{(2cm,2cm)}{
\NormalBox[text width=4cm, font=\footnotesize]{A absolute positioned overlay box}
}
\PutAt<+>{(5cm,4cm)}{
\OrangeBox[text width=4cm, font=\footnotesize]{A more callout-like orange box that provides some really helpfull content}
}
\end{frame}
\begin{frame}{My frame}
\begin{itemize}
\item Foo
\item Bar
\item Baz
\end{itemize}
\PutAt{(2cm,2cm)}{
\NormalBox[text width=4cm, font=\footnotesize]{A absolute positioned overlay box}
}
\PutAt{(5cm,4cm)}{
\OrangeBox[text width=4cm, font=\footnotesize]{A more callout-like orange box that provides some really helpfull content}
}
\ShowPutAtGrid
\end{frame}
\end{document}