
我有一個遞歸宏,它依賴於循環內的計數器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}