
루프 내의 카운터에 의존하는 재귀 매크로가 있습니다 tikz
\foreach
. 내가 달성하지 못한 것은 카운터 값에 종속되도록(즉, \n이 홀수인지 짝수인지에 따라) tikz 스타일(fillMod라고 부르는 것)을 얻는 방법입니다. 다음은 내가 지금까지 가지고 있는 것의 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}