42

I've come across some strange interaction between overlay specification and \pause. Basically I have an itemize and after some text(or block). I want to step through the itemize and after that show the text/block.

I've tried to put a simple \pause between the itemize and the text, but in this way two slides are created, both with the full itemize and no text.

If I don't put the \pause the text is visible from the start(which I don't want).

I've already found a simple work-around: instead of using itemize[<+->] I can specify the slides on the items(e.g item<1->, ...item<2->,... \pause), but I don't like this solution for some reasons:

  • I have to type more than before
  • I have to hard-code the slide numbers
  • This is solution is not robust. Modification on the item order, removal or addition of new items would break it.
  • I think there has to be some better solution.

So, how should I do?

By the way, a minimal example:

\documentclass{beamer}

\usepackage[utf8]{inputenc}
\usepackage{default}

\begin{document}

\begin{frame}
    \begin{itemize}[<+->]
        \item A
        \item B
        \item C
    \end{itemize}

    \pause  % double pause here

    Some text.
\end{frame}

\end{document}
Bakuriu
  • 2,218

1 Answers1

49

It's a sync problem; if you add \thebeamerpauses in some places (to get the value of the beamerpauses counter), you can see what's going on:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{default}

\begin{document}

\begin{frame}
\begin{itemize}[<+->]
\item A\thebeamerpauses
\item B\thebeamerpauses
\item C\thebeamerpauses
\end{itemize}\thebeamerpauses
\pause
Some text.\thebeamerpauses 
\end{frame}

\end{document}

At the end of the itemize environment the counter has a value of four, and \pause steps it to 5, so the text will appear on the fifth slide.

To obtained the expected result you can use the optional argument of \pause and the value of the beamerpauses counter:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{default}

\begin{document}

\begin{frame}
\begin{itemize}[<+->]
\item A
\item B
\item C
\end{itemize}
\pause[\thebeamerpauses]
Some text.
\end{frame}

\end{document}

Another option is to use \onslide<+-> instead of \pause:

\documentclass{beamer}
\usepackage[utf8]{inputenc}
\usepackage{default}

\begin{document}

\begin{frame}
\begin{itemize}[<+->]
\item A
\item B
\item C
\end{itemize}
\onslide<+->{Some text.}
\end{frame}

\end{document}
Gonzalo Medina
  • 505,128
  • I've still got two questions: what If I have a \begin{block} .. \end{block} instead of the simple text? Would you mind explaining a bit, if possible, why a simple \pause wont give the desired output? – Bakuriu Sep 11 '12 at 18:00
  • @Bakuriu same idea: \onslide<+->{\begin{block}{title}Some text.\end{block}}. \pause can be used for basic overlay specifications; much finer control is obtained using \only, \onslide, \uncover. – Gonzalo Medina Sep 11 '12 at 18:04
  • @Bakuriu I updated my answer with another option. – Gonzalo Medina Sep 11 '12 at 18:10
  • 1
    Okay, thank you. But still I think that what I'm doing is not advanced. I wonder why something simple like this screws up \pause. I'd really like to understand why what I wrote does not work as intended. – Bakuriu Sep 11 '12 at 18:19
  • @Bakuriu I just added an explanation of the unexpected result. – Gonzalo Medina Sep 11 '12 at 18:20
  • Perfect! I've still something I don't completely get about pauses count, but I think I'll eventually open a more specific question after reading again the beamer user guide. – Bakuriu Sep 11 '12 at 18:35
  • I had the exactly the same question as the OP and your answer is perfect. Does that mean that \onslide<+-> is always better? It seems to me so. I've found that \onslide doesn't require an argument. You can use it just like \pause. – Ryo Jul 17 '23 at 04:19