Uncovering underbrace without shift
Dirty dirty trick:
\documentclass{beamer}
\begin{document}
\begin{frame}
\[
\color<1>{normal text.bg}
\underbrace{\textcolor<1-2>{normal text.fg}{formula}}_{text}
\color{normal text.fg}
\]
bla
\end{frame}
\end{document}
Applied to your MWE:
\documentclass{beamer}
\usepackage{amsmath}
\begin{document}
\begin{frame}
\[
\color<1-2>{normal text.bg}
\textcolor<1-3>{normal text.fg}{\overbrace{a+b}^{\text{qq}} =}
\underbrace{%
\textcolor<1-3>{normal text.fg}{\overbrace{c+d+e}^{\text{abc}}}
\textcolor<2-3>{normal text.fg}{+\overbrace{f+g+h+i+j+k+l}^{\text{def}}}
}_{\text{too long!}}
\color{normal text.fg}
\]
\end{frame}
\end{document}
Just put an \onslide
before the end of the \underbrace
:
\documentclass{beamer}
\usepackage{amsmath}
\begin{document}
\begin{frame}
\frametitle{Frame title}
\only<1-3>{
\[
\overbrace{a+b}^{\text{qq}} =
\underbrace{
\overbrace{c+d+e}^{\text{abc}} +
\onslide<2->{\overbrace{f+g+h+i+j+k+l}^{\text{def}}}
\onslide<3->}_{\text{too long!}}
\onslide<2-> + m + n
\]
}
\end{frame}
\end{document}
EDIT: \onslide
can be used after the \underbrace
to show later parts of the formula (+m+n above) earlier
Interestingly enough, just adding a \thinmuskip
space (or \,
) at the end of slide three removes the jumping:
\documentclass{beamer}
\usepackage{amsmath}
\begin{document}
\begin{frame}
\frametitle{Frame title}
\begin{overlayarea}{\textwidth}{0.3\textheight}
\only<1-2>{
\[
\overbrace{a+b}^{\text{qq}} = \overbrace{c+d+e}^{\text{abc}}+\onslide<2->{\overbrace{f+g+h+i+j+k+l}^{\text{def}}}
\]
}
\onslide<3->{
\[
\overbrace{a+b}^{\text{qq}} = \underbrace{\overbrace{c+d+e}^{\text{abc}}+\overbrace{f+g+h+i+j+k+l}^{\text{def}}}_{\text{too long!}}
\,
\]
}\end{overlayarea}
\end{frame}
\end{document}