我想創建一個代表一堆矩形的圖形。理想情況下,我希望使用像 \stack{5} 這樣的簡單命令來建立 5 個堆疊。
我可以使用以下程式碼:
\draw[fill=blue] (0.4,-0.4) rectangle +(3,2);
\draw[fill=blue] (0.3,-0.3) rectangle +(3,2);
\draw[fill=blue] (0.2,-0.2) rectangle +(3,2);
\draw[fill=blue] (0.1,-0.1) rectangle +(3,2);
\draw[fill=blue] (0.0,-0.0) rectangle +(3,2);
然而,似乎很難將其轉化為命令,如果我們需要圍繞它移動堆疊,則更改所有座標會很麻煩。我想這可能會更好:
\draw[fill=blue] (0.4,-0.4)
rectangle +(3,2) ++(-0.1,0.1)
rectangle +(3,2) ++(-0.1,0.1)
rectangle +(3,2) ++(-0.1,0.1)
rectangle +(3,2) ++(-0.1,0.1)
rectangle +(3,2) ++(-0.1,0.1);
這樣做的好處是,移動它只會改變一個明顯位置的座標,並且更清楚地了解其意圖。
不幸的是,第二個版本首先填入所有矩形,然後繪製它們的輪廓,因此「頂部」矩形不會覆蓋堆疊的其餘部分。
有沒有簡單的方法可以使用相對繪製指令繪製重疊區域?
答案1
這是一個解決方案,它利用了使用該命令建立的路徑edge
是獨立的,因此是單獨繪製的事實。路徑edge
與路徑一樣靈活,to
因此可以適用於繪製幾乎任何東西,包括矩形。因此,我們定義了一個新的呼叫樣式to path
。edge
它。
\documentclass{article}
%\url{http://tex.stackexchange.com/q/68555/86}
\usepackage{tikz}
\tikzset{
edge rectangle/.style={
to path={ rectangle (\tikztotarget)}
}
}
\begin{document}
\begin{tikzpicture}
\draw[every edge/.append style={edge rectangle,fill=blue}] (0.4,-0.4)
edge +(3,2) ++(-0.1,0.1)
edge +(3,2) ++(-0.1,0.1)
edge +(3,2) ++(-0.1,0.1)
edge +(3,2) ++(-0.1,0.1)
edge +(3,2) ++(-0.1,0.1);
\end{tikzpicture}
\end{document}
結果如下:
答案2
您可以簡單地將所有內容打包到命令中。
\documentclass{article}
\usepackage{tikz}
\newcommand{\stack}[3][5]{
\foreach \x in {1,...,#1}
{ \draw[fill=blue] (\x/10,-\x/10) rectangle +(#2,#3); }
}
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}
\stack{3}{2};
\stack[2]{-2}{3};
\end{tikzpicture}
\end{document}
答案3
這是一個基於 Andrew Swann 答案的簡單解決方案:
\documentclass{article}
\usepackage{tikz}
% \stack{5}{(4,0)}{(3,2)}{Label} draws a stack of 5 at (4,0) with dimensions (3,2)
% and labels the center with "Label"
\newcommand{\stack}[4]{
\foreach \i in {1,...,#1} {
\draw[fill=blue!50] #2 ++({0.1*(#1)},{-0.1*(#1)}) ++({-0.1*\i},{0.1*\i}) rectangle +#3;
}
\path #2 -- +#3 node[pos=0.5] {#4};
}
\begin{document}
\begin{tikzpicture}
\stack{5}{(0,0)}{(3,2)}{I}
\stack{3}{(4,0)}{(3,2)}{II}
\stack{1}{(8,0)}{(3,2)}{III}
\end{tikzpicture}
\end{document}