Ändern Sie den Tikz-Stil abhängig vom Foreach-Zählerwert

Ändern Sie den Tikz-Stil abhängig vom Foreach-Zählerwert

Ich habe ein rekursives Makro, das auf einem Zähler innerhalb einestikz \foreach Schleife basiert. Was ich noch nicht geschafft habe, ist, wie ich einen Tikz-Stil (den ich fillMod genannt habe) so hinbekomme, dass er vom Zählerwert abhängig ist (also davon abhängt, ob \n ungerade oder gerade ist). Unten ist ein MWE dessen, was ich bisher habe.

\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}

Ich weiß, dass ich innerhalb der Schleife zwei definieren kann\draw , einen für Rot und einen für Blau, aber das bedeutet, dass ich nur Bilder mit einer geraden Anzahl von Quadraten erzeugen kann. Gibt es eine Möglichkeit, dies zu tun?

Antwort1

So etwas in der Art vielleicht.

\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}

Bildbeschreibung hier eingeben

Antwort2

Hier ist eine Lösung ohne expliziten Test. Das zweite Beispiel zeigt ein Beispiel mit vier Stilen.

\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}

Beispiel mit vier Stilen:

\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}

Bildbeschreibung hier eingeben

verwandte Informationen