5

I use the following code to repeat a drawing. Can it be simplified?

\documentclass{beamer}
\setbeamertemplate{navigation symbols}{}
\usepackage{tikz}
\begin{document}
\begin{frame}[fragile,t]
\frametitle{}
\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75,1,1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25,3.5,3.75,4,4.25}
  \draw<2-4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {4.25}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {4.25}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {4.25}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {4.25}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {4.25}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75,4.25}
  \draw<2> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {.75,1,1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25,3.5,3.75,4,4.25}
  \draw<3,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {.75}
  \foreach \x in {4.25}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {4.25}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {4.25}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {4.25}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75}
  \draw<2,3> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
  \foreach \x in {4.25}
  \draw<2,4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
  \foreach \x in {.75,1,1.25,1.5,1.75,2,2.25,2.5,2.75,3,3.25,3.5,3.75,4,4.25}
  \draw<2-4> (\x,0) node [circle, draw, very thick, green!40!black, fill=green, scale=0.6]{};
\end{tikzpicture}

\vspace {-.18cm}

\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5}
  \draw (\x,0) node [circle, draw, brown, fill=yellow, scale=0.5]{};
\end{tikzpicture}
\end{frame}
\end{document}

Enter image description here

Enter image description here

Enter image description here

Enter image description here

  • 2
    Maybe you should think about using decorated paths (with dot-like markers), but then you would not need to draw every circle, only the "paths". – TeXnician Sep 25 '18 at 5:57
  • Thank you. Can you please post your suggested code. I do not know how to do it. – Hany Sep 25 '18 at 6:02
  • Unfortunately, I do not have that much experience in markers, but that's what a manual is for. – TeXnician Sep 25 '18 at 6:11
7

Very simple suggestion: use only one TikZpicture and only draw what is needed accounting the duplication of some nodes in the different stages.

\documentclass[svgnames]{beamer}
\setbeamertemplate{navigation symbols}{}
\usepackage{tikz} 
\begin{document}
\begin{frame}[fragile,t]
\frametitle{}
\begin{tikzpicture}
  \foreach \x in {0,.25,.5,.75,1,...,5} {
        \foreach \y in {0,.25,.5,.75,1,...,4} {
            \fill[draw=brown, fill=yellow] (\x,-\y) circle (3pt);
      }
    }
    \only<2-4>{
    \foreach \x in {.75,1,1.25,...,4.25} {
        \fill[draw=DarkGreen, fill=green] (\x,-.25) circle (3pt);
        \fill[draw=DarkGreen, fill=green] (\x,-3.75) circle (3pt);
    }
    }
    \only<2,4> {
    \foreach \x in {-.5,-.75,-1,...,-2} {
        \pgfmathsetmacro\y{\x-1.75}
        \fill[draw=DarkGreen, fill=green] (.75,\x) circle (3pt);
        \fill[draw=DarkGreen, fill=green] (4.25,\y) circle (3pt);
    }
    }
    \only<2-3> {
    \foreach \x in {-.5,-.75,-1,...,-2} {
        \pgfmathsetmacro\y{\x-1.75}
        \fill[draw=DarkGreen, fill=green] (4.25,\x) circle (3pt);
        \fill[draw=DarkGreen, fill=green] (.75,\y) circle (3pt);
    }
    }
    \only<3-4> {
    \foreach \x in {.75,1,1.25,...,4.25} {
        \fill[draw=DarkGreen, fill=green] (\x,-2) circle (3pt);
    }
    }
\end{tikzpicture}
\end{frame}
\end{document}
  • Thank you very much. Just one enquiry. What is [svgnames] used for? – Hany Sep 25 '18 at 6:17
  • @Hany DarkGreen. – TeXnician Sep 25 '18 at 6:20
9

You can cheat:

  1. Fill a rectangle.
  2. Draw the path.
  3. Fill everything but the rectangles circles white.

Code:

\documentclass{beamer}
\setbeamertemplate{navigation symbols}{}
\usepackage{tikz} 
\begin{document}
\begin{frame}[fragile,t]
\frametitle{Some dotted path}
\only<1>{Fill a rectangle}
\only<2>{Draw the path}
\only<3>{Fill everything but the circles white}

\begin{tikzpicture}
\clip (-4pt,-4pt) rectangle (25.5*8pt,25.5*8pt);
\fill[yellow] (-4pt,-4pt) rectangle (25.5*8pt,25.5*8pt);
\pause
\draw[line width=7pt,green!40!black] (3*8pt,1*8pt) rectangle (22*8pt,24*8pt);
\pause
\draw[brown,fill=white,even odd rule] 
(-5pt,-5pt) rectangle (25.5*8pt+1pt,25.5*8pt+1pt)
foreach \X in {0,...,25}
{foreach \Y in {0,...,25}
{ (\X*8pt,\Y*8pt) circle (3.5pt)
}
};
\end{tikzpicture}
\end{frame}

\begin{frame}[fragile,t]
\frametitle{Some dotted path (cont'd)}

\begin{tikzpicture}
\clip (-4pt,-4pt) rectangle (25.5*8pt,25.5*8pt);
\fill[yellow] (-4pt,-4pt) rectangle (25.5*8pt,25.5*8pt);
\draw[line width=7pt,green!40!black,line cap=round] (3*8pt,24*8pt) 
 --  (22*8pt,24*8pt)  -- (22*8pt,13*8pt)
 -- (3*8pt,13*8pt) -- (3*8pt,1*8pt) -- (22*8pt,1*8pt);
\draw[brown,fill=white,even odd rule] 
(-5pt,-5pt) rectangle (25.5*8pt+1pt,25.5*8pt+1pt)
foreach \X in {0,...,25}
{foreach \Y in {0,...,25}
{ (\X*8pt,\Y*8pt) circle (3.5pt)
}
};
\end{tikzpicture}
\end{frame}

\begin{frame}[fragile,t]
\frametitle{Some dotted path (cont'd)}

\begin{tikzpicture}[xscale=-1]
\clip (-4pt,-4pt) rectangle (25.5*8pt,25.5*8pt);
\fill[yellow] (-4pt,-4pt) rectangle (25.5*8pt,25.5*8pt);
\draw[line width=7pt,green!40!black,line cap=round] (3*8pt,24*8pt) 
 --  (22*8pt,24*8pt)  -- (22*8pt,13*8pt)
 -- (3*8pt,13*8pt) -- (3*8pt,1*8pt) -- (22*8pt,1*8pt);
\draw[brown,fill=white,even odd rule] 
(-5pt,-5pt) rectangle (25.5*8pt+1pt,25.5*8pt+1pt)
foreach \X in {0,...,25}
{foreach \Y in {0,...,25}
{ (\X*8pt,\Y*8pt) circle (3.5pt)
}
};
\end{tikzpicture}
\end{frame}
\end{document}

Result:

enter image description here

  • Thank you very much. How to draw the other figures (2) and (5)? – Hany Sep 25 '18 at 6:21
  • 2
    That's a great idea :) – TeXnician Sep 25 '18 at 6:21
  • 2
    @Hany I added them. I guess this method becomes more advantageous the more complex the curve is. – user121799 Sep 25 '18 at 6:28
  • @marmot Is that gif image? and How to create? thanks – Black Mild Sep 25 '18 at 9:06
  • 1
    @BlackMild Yes, it is an animated gif, created by convert -density 300 -delay 96 -loop 0 -alpha remove multipage.pdf animated.gif, see this answer. – user121799 Sep 25 '18 at 12:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.