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

Diaa
  • 9,599
Hany
  • 4,709
  • 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 05:57
  • Thank you. Can you please post your suggested code. I do not know how to do it. – Hany Sep 25 '18 at 06:02
  • Unfortunately, I do not have that much experience in markers, but that's what a manual is for. – TeXnician Sep 25 '18 at 06:11

2 Answers2

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

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}
TeXnician
  • 33,589