%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The cellular automata code was copied and pasted from: http://tex.stackexchange.com/questions/118377/drawing-multiple-iterations-of-cellular-automatons-inline-possibly-with-tikz %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[11pt]{beamer} \usepackage{tikz} % Each cell is stored globally as a macro % for example \csname cell-glider-1-7\endcsname \def\setcell#1#2#3{% \pgfmathparse{int(#2)}\let\cx=\pgfmathresult% \pgfmathparse{int(#3)}\let\cy=\pgfmathresult% \expandafter\xdef\csname cell-#1-\cx-\cy\endcsname% } % Cells are accessed by parsing #2 and #3 to integers % and assigning the cell contents to the macro #4 \def\getcell#1#2#3#4{% \pgfmathparse{int(#2)}\let\cx=\pgfmathresult% \pgfmathparse{int(#3)}\let\cy=\pgfmathresult% \def\marshal{\xdef#4}% \marshal{\csname cell-#1-\cx-\cy\endcsname}% } % We flip the current from `current' to `next' % which is probably misleading. The texts can be % any arbitrary string as long as they are different. \def\currenttext{current} \def\nexttext{next} \let\currentgeneration=\currenttext \let\nextgeneration=\nexttext \def\switchgenerations{% \ifx\currentgeneration\currenttext% \global\let\currentgeneration=\nexttext% \global\let\nextgeneration=\currenttext% \else% \global\let\currentgeneration=\currenttext% \global\let\nextgeneration=\nexttext% \fi% } % Define colors \csname color-#1\endcsname % Which can be used according to the cell contents % So \csname color-0\endcsname holds the color for cells with value 0 \def\setcolor#1{\expandafter\xdef\csname color-#1\endcsname} \def\getcolor#1{\csname color-#1\endcsname} % Define a 10x10 board with a border of 1 so edge % detection is not necessary. \foreach \x in {0,...,11}{% \foreach \y in {0,...,11}{% \setcell{\currentgeneration}{\x}{\y}{0}% }% % }% % Copy this board for the next generation % This is HUGELY inefficient. What would be better is % to maintain a list of only changing cells (hard in LaTeX) \foreach \x in {0,...,11}{% \foreach \y in {0,...,11}{% \setcell{\nextgeneration}{\x}{\y}{0}% }% } \newcount\neighbors \def\updategenerations{% \begingroup\nullfont% Hmm lots of unwanted spaces occur here \foreach \x in {1,...,10}{% \foreach \y in {1,...,10}{% \getcell{\currentgeneration}{\x}{\y}{\n}% \getcell{\currentgeneration}{\x-1}{\y}{\a}% \getcell{\currentgeneration}{\x+1}{\y}{\b}% \getcell{\currentgeneration}{\x}{\y-1}{\c}% \getcell{\currentgeneration}{\x}{\y+1}{\d}% \getcell{\currentgeneration}{\x-1}{\y-1}{\e}% \getcell{\currentgeneration}{\x+1}{\y-1}{\f} \getcell{\currentgeneration}{\x-1}{\y+1}{\g}% \getcell{\currentgeneration}{\x+1}{\y+1}{\h}% \pgfmathsetcount\neighbors{\a+\b+\c+\d+\e+\f+\g+\h}% % Here are the neighbor rules \ifcase\neighbors % \setcell{\nextgeneration}{\x}{\y}{0}% 0 neighbors \or \setcell{\nextgeneration}{\x}{\y}{0}% 1 neighbors \or \ifnum\n=1\relax \setcell{\nextgeneration}{\x}{\y}{1}% 2 neighbors \fi \or \setcell{\nextgeneration}{\x}{\y}{1}% 3 neighbors \else \setcell{\nextgeneration}{\x}{\y}{0}% more than 3 neighbors \fi% }% }% \endgroup% \switchgenerations% } \def\drawcurrentgeneration{%} \begin{tikzpicture}[x=10pt,y=10pt] \foreach \x in {1,...,10}{% \foreach \y in {1,...,10}{% \setcell{\nextgeneration}{\x}{\y}{0}% Do here for a *minor* increment in speed \getcell{\currentgeneration}{\x}{\y}{\value}% \edef\c{\getcolor{\value}}% \fill [fill=\c](\x, \y) rectangle ++(1,1); } } \end{tikzpicture}% } \setcolor{0}{blue!5} \setcolor{1}{blue!20} \setcell{\currentgeneration}{1}{8}{1} \setcell{\currentgeneration}{2}{8}{1} \setcell{\currentgeneration}{3}{8}{1} \setcell{\currentgeneration}{3}{9}{1} \setcell{\currentgeneration}{2}{10}{1} \title{My Document} \author{Fufu Fang\\ University of East Anglia} \date{\today} \usetheme{CambridgeUS} \usecolortheme{beaver} \begin{document} \maketitle \begin{frame} \frametitle{Introduction} This is a document I created in UEA's \LaTeX\ class. \end{frame} \begin{frame} \frametitle{Iteration 0} \drawcurrentgeneration \end{frame} \foreach \iteration in {1,...,32}{ \begin{frame} \frametitle{Iteration \iteration} \updategenerations \drawcurrentgeneration \end{frame} } \end{document}