직사각형 스택을 나타내는 그래픽을 만들고 싶습니다. 이상적으로는 \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}