Изменить стиль Tikz в зависимости от значения счетчика foreach

Изменить стиль Tikz в зависимости от значения счетчика foreach

У меня есть рекурсивный макрос, который полагается на счетчик в tikz \foreachцикле. Чего я не добился, так это того, как сделать так, чтобы стиль tikz (то, что я назвал fillMod) зависел от значения счетчика (т. е. в зависимости от того, является \n нечетным или четным). Ниже приведен MWE того, что у меня есть на данный момент.

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

Я знаю, что могу определить в цикле два \drawпути, один для красного и один для синего, но это значит, что я могу создавать только картинки с четным числом квадратов. Есть ли способ сделать это?

решение1

Возможно, что-то вроде этого.

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

введите описание изображения здесь

решение2

Вот как решение без явного теста. Второй пример показывает пример с четырьмя стилями.

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

Пример с четырьмя стилями:

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

введите описание изображения здесь

Связанный контент