根据参数动态构建图片

根据参数动态构建图片

我正在尝试生成这些图像目的

由于我必须生成许多放置在整个图像上的“房屋”,如果我可以使用\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}

在此处输入图片描述

相关内容