由于我必须生成许多放置在整个图像上的“房屋”,如果我可以使用\pic
并给出每个参数的名称,那就太好了。
如果“房屋标签”和“公寓”是可以参考的节点(例如,绘制箭头),我会很高兴。如果能有第三个参数来为不同的公寓着色就更好了(假设本的公寓是红色的,安娜的公寓是绿色的)。
如果还有其他可能性,\pic
我也会接受。
我目前拥有的:
\documentclass{article}
\usepackage{tikz}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
% define house node
\tikzset{pics/house/.style 2 args={code={
\node[rectangle, draw = red, fill = green, minimum width = 4 cm, minimum height = 0.5 cm] (#1) {#1};
\foreach \x [count = \i] in {#2}
\ifthenelse{\ifodd\i}{
\node[rectangle, draw = red, minimum width = 2 cm, minimum height = 0.5 cm] at(#1) [xshift = -2cm, yshift = 0.5cm] (\x) {\x};
}{
\node[rectangle, draw = red, minimum width = 2 cm, minimum height = 0.5 cm] at(#1) [xshift = 2cm, yshift = 0.5cm] (\x) {\x};
}
}}
}
\begin{document}
\begin{tikzpicture}[thick]
\draw pic at(0,2) {house={House one}{Peter,Anna,Lisa}}
\draw pic at(0,2) {house={House two}{Robert,Ben,Jessica,Sophie}}
% Or with 3 arguments
\draw pic at(0,2) {house={House two}{Robert,Ben,Jessica,Sophie}{red,green,blue,grey}}
\end{tikzpicture}
\end{document}
答案1
Amatrix
可以作为 的替代方案pic
。以下代码显示了matrixhouse
定义矩阵主要选项的样式。它有一个参数,即标签。在这种情况下,标签未附加到建筑物上,但很容易更改它。
由于建筑物以 定义matrix
,因此您可以在需要时添加所有细节。看看第三栋建筑的二楼。如果您忘记了它们,也可以稍后添加,例如 Patrick 的公寓。
每个公寓都是一个具有单独名称的特定节点。主要的困难可能是公寓从顶部开始计数。
\documentclass[tikz, border=2mm]{独立}
\usetikzlibrary{matrix, positioning, backgrounds}
% define house node
\tikzset{
matrixhouse/.style={matrix of nodes,
matrix anchor = south,
nodes={draw=red, minimum width=2cm, minimum height=.5cm},
row sep=-\pgflinewidth, column sep=-\pgflinewidth,
label={[minimum width=4cm, minimum height=.5cm, draw=red, fill=green]below:#1},
},
}
\begin{document}
\begin{tikzpicture}[thick]
\matrix[matrixhouse={House one}] (one) {Ben & Anna \\ Peter & Lisa\\};
\matrix[matrixhouse={House two}] (two) at (5,0) {Sophie & \\ Robert & Patrick\\};
\matrix[matrixhouse={House three}, row 2/.style={nodes={fill=cyan}}] (three) at (10,0) {Jessica \\ Michelle & Simone \\ Francis & Rick \\};
\draw[->] (one-1-1)--++(90:1cm)-|(three-1-1.north);
\begin{scope}[on background layer]
\fill[red!30] (two-2-2.south west) rectangle (two-2-2.north east);
\end{scope}
\end{tikzpicture}
\end{document}