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하고 각 노드를 다음에 고정했습니다 west.below=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}

여기에 이미지 설명을 입력하세요

관련 정보