tikz로 화살표와 와이드 노드를 결합하세요

tikz로 화살표와 와이드 노드를 결합하세요

다음과 같은 tikz를 사용하여 순서도를 만들고 싶습니다.

-------------------------------
|  wide node                  |
-------------------------------
            |
-------------------------------
|  wide node                  |
-------------------------------
            |
 -------------------------
 |         |              |
------   ------       ------
|sub1|   |sub2|       |sub3|
------   ------       ------
  |        |            |
  -----------------------
           |
-------------------------------
|  wide node                  |
-------------------------------

꽤 기본적인 흐름도처럼 보입니다. 화살표를 결합하고 하위 노드를 다른 노드만큼 넓게 만들기 위해 많은 것을 시도했지만 작동하지 못했습니다. 현재 코드는 다음과 같습니다.

\documentclass{minimal}
\usepackage{tikz}

\usetikzlibrary{shapes,arrows,arrows,decorations.pathmorphing,backgrounds,fit,positioning,
shapes.symbols,chains}

\begin{document}
\tikzstyle{block} = [rectangle, draw=black, thick, fill=white, text width=8em,
 text centered, minimum height=4em]
\tikzstyle{dummyblock} = [rectangle]
\tikzstyle{line} = [draw, -latex']
\begin{center}
\begin{tikzpicture}[node distance=3.5cm]
\node [block] (A) {A};
\node [block,below of= A] (B) {B};
\node [dummyblock,below of=B] (BB) {};
\node [block, below of = BB] (D) {D};
\node [block, left of=D] (C) {C};
\node [block, right of=D] (E) {E};
\node [block, below of=D] (F) {F};
\path [line] (A.south) -| (B.north);
\path [line] (B.south) -| (BB.north);
\path [line] (BB.south) -| (C);
\path [line] (BB.south) -| (D);
\path [line] (BB.south) -| (E);
\path [line] (C.south) -| (F.north);
\path [line] (D.south) -| (F.north);
\path [line] (E.south) -| (F.north);
\end{tikzpicture}\end{center}
\end{document}

누군가 이 문제를 해결하는 방법에 대한 단서가 있습니까? 어떤 도움이라도 주시면 감사하겠습니다!

답변1

\documentclass{standalone}
\usepackage{tikz}

\usetikzlibrary{shapes,arrows,arrows,decorations.pathmorphing,backgrounds,
 fit,positioning,shapes.symbols,chains}
\tikzstyle{block} = [rectangle, draw=black, thick, fill=white, text width=8em,
 text centered, minimum height=4em]
\tikzstyle{dummyblock} = [rectangle]
\tikzstyle{line} = [draw, -latex']


\begin{document}
\begin{tikzpicture}[node distance=3.5cm]
\node [block] (A) {A};
\node [block,below =of A] (B) {B};
\coordinate [below = of B] (BB) {};
\node [block, below = of BB] (D) {D};
\node [block, left  = of D] (C) {C};
\node [block, right = of D] (E) {E};
\coordinate[below = of D] (fn);
\node [block, below = of fn] (F) {F};
\path [line] (A) -- (B);
\draw (B) -- (BB);
\path [line] (BB) -| (C);
\path [line] (BB) -- (D);
\path [line] (BB) -| (E);
\draw (C) |- (fn);
\draw (D) |- (fn);
\draw (E) |- (fn);
\path[line] (fn) -- (F);
\end{tikzpicture}
\end{document}

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

답변2

Percusse님, 도와주셔서 정말 감사드립니다! 위의 모든 내용을 최종 솔루션에 결합했습니다.

\documentclass{minimal}
\usepackage{tikz}

\usetikzlibrary{arrows,positioning,fit}
\tikzstyle{block} = [rectangle, draw=black, thick, fill=white, text width=8em,
text centered, minimum height=4em]
\tikzstyle{line} = [draw, -latex']


\begin{document}
\begin{tikzpicture}[node distance=0.5cm]
\node [block] (D) {D};
\node [block, left  = of D] (C) {C};
\node [block, right = of D] (E) {E};
\coordinate[below = of D] (FF);
\node [ block,  fit={(C) (D) (E)},label=center:F, below = of FF] (F) {};
\coordinate [above = of D] (BB) {};
\node [ block,  fit={(C) (D) (E)},label=center:B, above = of BB] (B) {};
\node [ block,  fit={(C) (D) (E)},label=center:A, above = of B] (A) {};
\path [line] (A) -- (B);
\draw (B) -- (BB);
\path [line] (BB) -| (C);
\path [line] (BB) -- (D);
\path [line] (BB) -| (E);
\draw (C) |- (FF);
\draw (D) |- (FF);
\draw (E) |- (FF);
\path[line] (FF) -- (F);
\end{tikzpicture}
\end{document}

그런데 어떤 이유로 내 Linux texlive latex 배포판에서 오류가 발생합니다(내 Windows miktex 배포판에서는 오류가 발생하지 않습니다).

\node [ block,  fit={(C) (D) (E)},label=center:A, above = of B] (A) {};

이 줄을 다음으로 바꾸면 해결할 수 있습니다.

\node [ block,  fit={(C) (D) (E)}, above = of B] (A) {A};

답변3

위의 모든 제안을 결합하여 거의 작동합니다.

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{positioning,fit,arrows}
\tikzstyle{line} = [draw, -latex']
\begin{document}
  \begin{tikzpicture}[node distance=0.2cm,mynode/.style={outer sep=0pt, draw}]
    \node[mynode] (foo)                {foo};
    \node[mynode] (bar) [right=of foo] {bar};
    \node[mynode] (bar2) [right=of bar] {bar2};
    \coordinate[below = of bar] (cbar);
    \node [ mynode,
        inner sep=0pt,
        yshift=-1cm,
        fit={(foo) (bar) (bar2)},label=center:foobar
       ] (foobar) {};
  \draw (foo.south) |- (cbar);
  \draw (bar.south) |- (cbar);
  \draw (bar2.south) |- (cbar);
  \path[line] (cbar) -- (foobar.north);
  \end{tikzpicture}
\end{document}

어떤 이유로든 화살표가 세 노드 아래의 좌표에서 더 넓은 노드로 직선으로 그려지지 않습니다. 이 문제를 해결하는 방법을 아는 사람이 있습니까?

관련 정보