
Tengo una macro recursiva que se basa en un contador dentro de un tikz
\foreach
bucle. Lo que no he logrado es cómo hacer que un estilo tikz (lo que he llamado fillMod) dependa del valor del contador (es decir, dependiendo de si \n es par o impar). A continuación se muestra un MWE de lo que tengo hasta ahora.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\newcommand{\pic}[1]{%
\begin{tikzpicture}[scale=3,
fillEven/.style={fill=red},
fillOdd/.style= {fill=blue},
fillMod/.style= {}]
\coordinate (A0) at (0,0);
\foreach \n in {1,2,...,#1}
{
\draw[fillMod,scale={pow(0.8,\n)}] (A0)--++(1,0)node(D0){}--++(0,-1)--++(-1,0)--++(0,1);
\coordinate (A0) at (D0);
\coordinate[below=30mm of A0] (D0);
}
\end{tikzpicture}
}
\pic{2}
\pic{3}
\pic{4}
\pic{5}
\end{document}
Sé que puedo definir dentro del bucle dos \draw
caminos, uno para el rojo y otro para el azul, pero eso significa que sólo puedo producir imágenes con un número par de cuadrados. ¿Hay alguna forma de hacer esto?
Respuesta1
Algo como esto quizás.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcommand{\pic}[1]{%
\begin{tikzpicture}[scale=3]
\coordinate (A0) at (0,0);
\foreach \n in {1,2,...,#1}
{
\ifodd\n
\tikzset{fillMod/.style={fill=blue}}
\else
\tikzset{fillMod/.style={fill=red}}
\fi
\draw[fillMod,scale={pow(0.8,\n)}] (A0)--++(1,0)node(D0){}--++(0,-1)--++(-1,0)--++(0,1);
\coordinate (A0) at (D0);
\coordinate[below=30mm of A0] (D0);
}
\end{tikzpicture}
}
\begin{document}
\pic{2}
\pic{3}
\pic{4}
\pic{5}
\end{document}
Respuesta2
Aquí hay una solución sin prueba explícita. El segundo ejemplo muestra un ejemplo con cuatro estilos.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\newcommand{\pic}[1]{%
\begin{tikzpicture}[scale=3]
\tikzset{
fill 0/.style={fill=red},
fill 1/.style= {fill=blue},
}
\coordinate (A0) at (0,0);
\foreach \n [evaluate=\n as \snum using {int(mod(\n,2))}] in {1,2,...,#1} {
\draw[fill \snum,scale={pow(0.8,\n)}]
(A0)--++(1,0)node(D0){}--++(0,-1)--++(-1,0)--++(0,1);
\coordinate (A0) at (D0);
\coordinate[below=30mm of A0] (D0);
}
\end{tikzpicture}
}
\pic{2}
\pic{3}
\pic{4}
\pic{5}
\end{document}
Ejemplo con cuatro estilos:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newcommand{\pic}[1]{%
\begin{tikzpicture}[scale=3]
\tikzset{
fill 0/.style={fill=red},
fill 1/.style= {fill=blue},
fill 2/.style= {fill=green},
fill 3/.style= {fill=orange},
}
\coordinate (A0) at (0,0);
\foreach \n [evaluate=\n as \snum using {int(mod(\n,4))}] in {1,2,...,#1} {
\draw[fill \snum,scale={pow(0.8,\n)}]
(A0)--++(1,0)node(D0){}--++(0,-1)--++(-1,0)--++(0,1);
\coordinate (A0) at (D0);
\coordinate[below=30mm of A0] (D0);
}
\end{tikzpicture}
}
\begin{document}
\pic{2}\par
\pic{3}\par
\pic{4}\par
\pic{5}\par
\end{document}