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:

enter image description here

\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}

Tags:

Beamer