Une flechas y nodos anchos con tikz.

Une flechas y nodos anchos con tikz.

Quiero crear un diagrama de flujo con tikz que se vea así:

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

Parece un diagrama de flujo bastante básico. Intenté muchas cosas para unir las flechas y hacer que los subnodos fueran tan anchos como los otros nodos, pero no pude hacerlo funcionar, mi código actual se ve así:

\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}

¿Alguien tiene alguna idea sobre cómo solucionar este problema? ¡Cualquier ayuda sería muy apreciada!

Respuesta1

\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}

ingrese la descripción de la imagen aquí

Respuesta2

Percusse, ¡muchas gracias por toda tu ayuda! Combiné todo lo anterior en la solución final:

\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}

Por cierto, por alguna razón mi distribución de Linux texlive latex da errores (mi distribución de Windows miktex no da error):

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

Esto se puede resolver reemplazando esta línea con

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

Respuesta3

Casi funciona combinando todas las sugerencias anteriores:

\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}

Sólo que por alguna razón las flechas no se dibujan directamente desde la coordenada debajo de los tres nodos hasta el nodo más ancho... ¿Alguien sabe cómo solucionar este problema?

información relacionada