Tikz 相交节点和适合框

Tikz 相交节点和适合框

我是 tikz 新手,正在尝试创建一个带有一些相交/重叠矩形的简单图表。但我在对齐适合框内的节点时遇到了一些问题,以至于它们会重叠到下一个框中。我还需要剪切/隐藏它们相交的背景线。这些图应该很清楚:

期望输出:

在此处输入图片描述

电流输出:

在此处输入图片描述

代码:

\documentclass{article}
\usepackage[margin=20mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{chains,
                fit,
                positioning,
               }
\tikzstyle{link} = [->, thick, >=stealth]
\makeatletter
\tikzset{reset join/.code={\def\tikz@lib@on@chain{}}}
\makeatother

\begin{document}
\begin{tikzpicture}[
node distance = 8mm and 6mm,
  start chain = going below,
box/.style = {draw, thick, rounded corners,
              text width=10em, align=left, minimum height=1cm, minimum width=30mm,
              font=\footnotesize},
cs2box/.style = {draw, thick, rounded corners,
    text width=10em, align=left, minimum height=1cm, minimum width=100mm,
    font=\footnotesize},
cs3box/.style = {draw, thick, rounded corners,
    text width=10em, align=left, minimum height=1cm, minimum width=60mm,
    font=\footnotesize},
FITout/.style = {box, thin,inner xsep=1mm, inner ysep=6mm, yshift=5mm, fit=#1},
every label/.style = {text width=11em, align=center, 
                      font=\footnotesize\linespread{0.84}\selectfont}
                ]
\node (p1) [box] {Case Study 1};
\node (p2) [cs2box, below=1cm of p1] {Case Study 2};
\node (p3) [cs3box, below=1cm of p2] {Case Study 3};
\node (p4) [below=1cm of p3,box] {Case Study 4};
\node (p5) [below=1cm of p4,box] {Case Study 5};
\node[FITout={(p1) (p5)}, 
      label={[anchor=north]{Phase 1}}] (x1) {};
\node (p6) [right=1cm of x1, draw, thick, rounded corners,
text width=10em, align=left, minimum height=6cm, minimum width=30mm,
font=\footnotesize, label={[anchor=north]{Phase 2}} ];
\node (p7) [right=1cm of p6, draw, thick, rounded corners,
text width=10em, align=left, minimum height=6cm, minimum width=30mm,
font=\footnotesize, label={[anchor=north]{Phase 3}} ];


\end{tikzpicture}
\end{document}

如何对齐p2, p3以在合适框内开始x1?当背景线与其他节点相交时,如何剪切背景线?

答案1

为了将节点在左侧彼此对齐,我将它们放在锚点下方west,并将每个节点锚定到westbelow=1.5cm of p1.west,anchor=west

为了隐藏最后放置的节点,我使用了该background库:

\begin{scope}[on background layer]
\node[FITout={(p1) (p5)}, 
      label={[anchor=north]{Phase 1}}] (x1) {};
\node (p6) [right=1cm of x1, draw, thick, rounded corners,
text width=10em, align=left, minimum height=6cm, minimum width=30mm,
font=\footnotesize, label={[anchor=north]{Phase 2}} ]{};
\node (p7) [right=1cm of p6, draw, thick, rounded corners,
text width=10em, align=left, minimum height=6cm, minimum width=30mm,
font=\footnotesize, label={[anchor=north]{Phase 3}} ]{};
\end{scope}

我将节点的底部涂成白色:

cs2box/.style = {draw, thick, rounded corners,fill=white,
    text width=10em, align=left, minimum height=1cm, minimum width=120mm, font=\footnotesize},
cs3box/.style = {draw, thick, rounded corners,fill=white,
    text width=10em, align=left, minimum height=1cm, minimum width=60mm,
    font=\footnotesize},

截屏

\documentclass{article}
\usepackage[margin=20mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{chains,
                fit,
                positioning,backgrounds
               }
\tikzstyle{link} = [->, thick, >=stealth]
\makeatletter
\tikzset{reset join/.code={\def\tikz@lib@on@chain{}}}
\makeatother

\begin{document}
\begin{tikzpicture}[
node distance = 8mm and 6mm,
  start chain = going below,
box/.style = {draw, thick, rounded corners,
              text width=10em, align=left, minimum height=1cm, minimum width=30mm, font=\footnotesize},
cs2box/.style = {draw, thick, rounded corners,fill=white,
    text width=10em, align=left, minimum height=1cm, minimum width=120mm, font=\footnotesize},
cs3box/.style = {draw, thick, rounded corners,fill=white,
    text width=10em, align=left, minimum height=1cm, minimum width=60mm,
    font=\footnotesize},
FITout/.style = {box, thin,inner xsep=1mm, inner ysep=6mm, yshift=5mm, fit=#1},
every label/.style = {text width=11em, align=center, 
                      font=\footnotesize\linespread{0.84}\selectfont}
                ]
\node (p1) [box] {Case Study 1};
\node (p2) [cs2box, below=1.5cm of p1.west,anchor=west] {Case Study 2};
\node (p3) [cs3box, below=1.5cm of p2.west,anchor=west] {Case Study 3};
\node (p4) [below=1.5cm of p3.west,anchor=west,box] {Case Study 4};
\node (p5) [below=1.5cm of p4.west,anchor=west,box] {Case Study 5};
\begin{scope}[on background layer]
\node[FITout={(p1) (p5)}, 
      label={[anchor=north]{Phase 1}}] (x1) {};
\node (p6) [right=1cm of x1, draw, thick, rounded corners,
text width=10em, align=left, minimum height=6cm, minimum width=30mm,
font=\footnotesize, label={[anchor=north]{Phase 2}} ]{};
\node (p7) [right=1cm of p6, draw, thick, rounded corners,
text width=10em, align=left, minimum height=6cm, minimum width=30mm,
font=\footnotesize, label={[anchor=north]{Phase 3}} ]{};
\end{scope}

\end{tikzpicture}
\end{document}

答案2

您可以使用矩阵代替链条,这样就不会那么混乱。

\documentclass{article}
\usepackage[margin=20mm]{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix,fit,backgrounds}
\begin{document}
\begin{tikzpicture}[font=\sffamily]
\matrix[matrix of nodes,nodes={anchor=west,minimum
height=1cm,align=center,draw,minimum width=30mm,fill=white},row sep=1em]
(mat){
Case Study 1\\
|[minimum width=100mm]| Case Study 2\\
|[minimum width=60mm]| Case Study 3\\
Case Study 4\\
Case Study 5\\
};
\begin{scope}[on background layer,nodes={draw}]
 \node[fit=(mat-1-1)(mat-5-1),inner ysep=2em,yshift=1em,label={[anchor=north
  west]north west:Phase 1}]{};
 \node[fit={([xshift=5mm]mat-3-1.south east)([xshift=-20mm]mat-3-1.south
 east|-mat-2-1.north)},inner ysep=2em,yshift=1em,label={[anchor=north
  west]north west:Phase 2}]{};
 \node[fit={(mat-2-1.south east)([xshift=-25mm]mat-2-1.south
 east|-mat-2-1.north)},inner ysep=2em,yshift=1em,label={[anchor=north
  west]north west:Phase 3}]{};
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容