答案1
你可以用 l 系统来做这件事,但经典的宏也可以。这是其中一种方法。
\documentclass[tikz,border=7pt]{standalone}
% #1 is a countdown parameter
\newcommand{\fillsquare}[1]{
% last step is 1, after that do nothing
\ifnum #1 > 0\relax
% fill and draw
\fill[orange] (0,0) rectangle (1,1);
\draw (-1,-1) grid (1,1);
% recursive call to \fillsquare after scale and translate
\begin{scope}[scale=.5]
\foreach \p in {(-1,1),(-1,-1),(1,-1)}{
\begin{scope}[shift={(\p)}]
\fillsquare{\numexpr #1-1}
\end{scope}
}
\end{scope}
\fi
}
\begin{document}
\begin{tikzpicture}
\fillsquare{4}
\end{tikzpicture}
\end{document}
我的系统最高可以达到 7 个级别。
\begin{tikzpicture}[line width=0.05pt]
\fillsquare{7}
\end{tikzpicture}
答案2
我可以建议通过添加另一个参数让用户选择原始正方形的长度吗?
请不要接受我的答案,因为这只是 Kpym 上面做得非常好的一个小升级。
他值得所有的爱^^。
\documentclass[tikz,border=7pt]{standalone}
% #1 is a countdown parameter
\newcommand{\fillsquare}[2]{
% last step is 1, after that do nothing
\ifnum #1 > 0\relax
% fill and draw
\fill[orange] (0,0) rectangle (#2,#2);
\draw (-#2,-#2) grid[step=#2] (#2,#2);
% recursive call to \fillsquare after scale and translate
\begin{scope}[scale=.5]
\foreach \p in {(-#2,#2),(-#2,-#2),(#2,-#2)}{
\begin{scope}[shift={(\p)}]
\fillsquare{\numexpr #1-1}{#2}
\end{scope}
}
\end{scope}
\fi
}
\begin{document}
\begin{tikzpicture}[line width=0.05pt]
% First parameter is the number of steps
% Second parameter is the length of the initial square
\fillsquare{6}{4}
\end{tikzpicture}
\end{document}