9

I want to create a slide to show how the clipping works as shown in the following animation.

enter image description here

I used two frames, the last frame is needed because I want to hide the unwanted (trimmed) parts of cropped areas of the previous slides. I want to avoid using two frames and repeating the codes.

Can we force beamer to delay the clipping code and hiding the previous painting? I am new to beamer, only knows \pause. :-)

\documentclass{beamer}
\usepackage{pstricks-add}
\usepackage[active,tightpage]{preview}
\PreviewBorder=0pt
\PreviewEnvironment{pspicture}

\begin{document}

\begin{frame}
    \begin{pspicture}(6,6)
        \pnode(0,0){A}
        \pnode(6,0){B}
        \pnode(6,6){C}
        \pnode(0,6){D}
        \pnode(1,1){P}
        \pnode(5,1){Q}
        \pnode(3,5){R}
        \pspolygon*[linecolor=red](A)(B)(Q)(P)\pause
        \pspolygon*[linecolor=green](B)(C)(R)(Q)\pause
        \pspolygon*[linecolor=blue](C)(D)(R)\pause
        \pspolygon*[linecolor=yellow](D)(A)(P)(R)
    \end{pspicture}
\end{frame}

\begin{frame}
    \begin{pspicture}(6,6)  
        \pnode(0,0){A}
        \pnode(6,0){B}
        \pnode(6,6){C}
        \pnode(0,6){D}
        \pnode(1,1){P}
        \pnode(5,1){Q}
        \pnode(3,5){R}
        \psclip{\pscircle[linestyle=none,dimen=middle](3,3){3}}
            \pspolygon*[linecolor=red](A)(B)(Q)(P)
            \pspolygon*[linecolor=green](B)(C)(R)(Q)
            \pspolygon*[linecolor=blue](C)(D)(R)
            \pspolygon*[linecolor=yellow](D)(A)(P)(R)
        \endpsclip
    \end{pspicture}
\end{frame}
\end{document}
0

2 Answers 2

11

You can use \only or \onslide; an example with \only:

\documentclass{beamer}
\usepackage{pstricks-add}
\usepackage[active,tightpage]{preview}
\PreviewBorder=0pt
\PreviewEnvironment{pspicture}

\begin{document}

\begin{frame}
    \begin{pspicture}(6,6)
        \pnode(0,0){A}
        \pnode(6,0){B}
        \pnode(6,6){C}
        \pnode(0,6){D}
        \pnode(1,1){P}
        \pnode(5,1){Q}
        \pnode(3,5){R}
        \only<5>{\psclip{\pscircle[linestyle=none,dimen=middle](3,3){3}}}
        \only<1->{\pspolygon*[linecolor=red](A)(B)(Q)(P)}
        \only<2->{\pspolygon*[linecolor=green](B)(C)(R)(Q)}
        \only<3->{\pspolygon*[linecolor=blue](C)(D)(R)}
        \only<4->{\pspolygon*[linecolor=yellow](D)(A)(P)(R)}
       \only<5>{\endpsclip}
     \end{pspicture}
\end{frame}

\end{document}

enter image description here

Edit: After getting a multipe-page PDF, we can also make use of it to create a PDF animation, a GIF animation and PNG images. TeX the following with pdflatex --shell-escape. ImageMagick must be installed in your computer.

\documentclass[preview,border=0pt]{standalone}

\usepackage{filecontents}

\begin{filecontents*}{dummy.tex}
\documentclass[serif]{beamer}
\usepackage{pstricks-add}
\usepackage[active,tightpage]{preview}
\PreviewBorder=0pt
\PreviewEnvironment{pspicture}


\begin{document}
\begin{frame}
    \begin{pspicture}(6,6)
        \pnode(0,0){A}
        \pnode(6,0){B}
        \pnode(6,6){C}
        \pnode(0,6){D}
        \pnode(1,1){P}
        \pnode(5,1){Q}
        \pnode(3,5){R}
        \only<5>{\psclip{\pscircle[linestyle=none,dimen=middle](3,3){3}}}
        \only<1->{\pspolygon*[linecolor=red](A)(B)(Q)(P)}
        \only<2->{\pspolygon*[linecolor=green](B)(C)(R)(Q)}
        \only<3->{\pspolygon*[linecolor=blue](C)(D)(R)}
        \only<4->{\pspolygon*[linecolor=yellow](D)(A)(P)(R)}
       \only<5>{\endpsclip}
     \end{pspicture}
\end{frame}
\end{document}
\end{filecontents*}

\usepackage{animate}

\begin{document}

% create PDF
\immediate\write18{latex dummy}
\immediate\write18{dvips dummy}
\immediate\write18{ps2pdf dummy.ps}

% convert to GIF animation
\immediate\write18{convert -delay 100 -loop 0 -density 200 -alpha remove dummy.pdf \jobname.gif}

% convert to PNG
\makeatletter
\immediate\write18{convert -density 200 -alpha remove dummy.pdf \jobname-\@percentchar02d.png}
\makeatother

% create PDF animation
\begin{preview}
    \animategraphics[controls]{2}{dummy}{}{}
\end{preview}
\end{document}
4
  • 1
    @HiggsBoson thank you very much! Animation added! Commented Jul 27, 2012 at 19:13
  • For those who want to make use of the produced multiple-page PDF to create a PDF animation, a GIF animation and PNG images, please see the last edit. Commented Jul 29, 2012 at 11:14
  • Which is the most appropriate among \uncover, \only, \onslide, etc for my problem above? Commented Oct 18, 2012 at 9:48
  • Why cannot your first code be compiled now while it worked several times ago? Commented Jul 22, 2014 at 8:19
7

You could use TikZ, which is reasonably well integrated with Beamer already, and do something like:

\begin{frame}
  \begin{tikzpicture}
    \clip<5> (3,3) circle (3);
    \node [coordinate] (A) at (0,0) {};
    \node [coordinate] (B) at (6,0) {};
    \node [coordinate] (C) at (6,6) {};
    \node [coordinate] (D) at (0,6) {};
    \node [coordinate] (P) at (1,1) {};
    \node [coordinate] (Q) at (5,1) {};
    \node [coordinate] (R) at (3,5) {};
    \fill<1-> [red] (A) -- (B) -- (Q) -- (P) -- cycle;
    \fill<2-> [green] (B) -- (C) -- (R) -- (Q) -- cycle;
    \fill<3-> [blue] (C) -- (D) -- (R) -- cycle;
    \fill<4-> [yellow] (D) -- (A) -- (P) -- (R) -- cycle;
  \end{tikzpicture}
 \end{frame}

Result: Solution with Beamer/TikZ

2
  • The first slide is wrong; the red trapezoid "jumps". Commented Jul 27, 2012 at 22:37
  • 1
    @GonzaloMedina: The first canvas might have different dimension as TikZ provides the smallest but enough canvas automatically. Specifying the canvas dimension in advance will solve this issue. Commented Jul 28, 2012 at 5:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .