¿Cómo hacer que una HTA parezca algo?

¿Cómo hacer que una HTA parezca algo?

Estoy tratando de lograr algo como esto:

Ejemplo de ETS

Sin embargo, no puedo entender cómo hacer estas flechas. Tengo un código que me da algo que es casi correcto, pero está desordenado en algunos lugares y no selecciona automáticamente la ruta que quiero (nodos superpuestos o algo así).

\path [draw, -latex'] (START) |- (DUMMY) |- (DUMMY2) |- (GOAL);

Hice dos nodos ficticios en mi intento de lograr que esto siguiera el camino que quería, que sería ABAJO, IZQUIERDA, ABAJO, como en el paso "Calentar horno" -> "Preparar planta y servicios" en la imagen de arriba.

¿Alguien puede ayudarme un poco sobre cómo dirigir mejor estos caminos y, si es posible, sin el desorden de nodos adicionales? Actualmente estoy estancado en esto y no tengo idea de qué hacer. He buscado mucho en Google pero solo obtuve respuestas parciales (como la de arriba).

Respuesta1

La próxima vez, proporcione un ejemplo práctico mínimo para que las personas no tengan que copiar cada palabra de una imagen, sino que puedan cortar y pegar al menos la estructura básica del documento y el contenido textual del diagrama.

Esta solución utiliza forest, construye y agrega las etiquetas al comienzo de los nodos automáticamente. Para ello, recibí ayuda muy rápida y precisa deLa respuesta de Sašo Živanovićpara mipregunta sobre cómo evitar múltiples etiquetas.

bosque de hornos

\documentclass[tikz, border=5pt]{standalone}
\usepackage{forest}
\usepackage[T1]{fontenc}
\usepackage{textcomp,fixltx2e}
\usetikzlibrary{arrows.meta,shadows}
\begin{document}

\forestset{
  tree node/.style = {inner sep=2pt, rounded corners = 2pt, font=\sffamily, rectangle, draw, thick, fill=white, align=center, drop shadow},
  placing node/.style={inner sep=0pt, outer sep=0pt, draw=none, skipping path},
  skipping path/.style={
    edge path={
      \noexpand\path [\forestoption{edge}, thick]
        (!u.parent anchor) -- (.south)\forestoption{edge label};
    },
  },
  /tikz/plan label/.style={font=\sffamily\scriptsize},
}
\begin{forest}
  for tree={
    parent anchor=south,
    child anchor=north,
    l sep+=5pt,
    edge path={
      \noexpand\path [-{Stealth[]}, \forestoption{edge}, thick]
        (!u.parent anchor) -- +(0,-5pt) -| (.child anchor)\forestoption{edge label};
    },
  },
  set root label/.style={
    content/.wrap 2 pgfmath args={##1. ##2}{n()}{content()},
    tree node
  },
  set node label/.style={
    content/.wrap 3 pgfmath args={##1.##2 ##3}{n("!r")}{n()}{content()},
    tree node
  },
  set node super label/.style={
    content/.wrap 4 pgfmath args={##1.##2.##3 ##4}{n("!r")}{n("!uu")}{n()}{content()},
    tree node
  },
  before typesetting nodes={% where contains implicit for tree loop: https://tex.stackexchange.com/a/218995/: Sašo Živanović
    for tree={
      if level=0{
        set root label,
%       content={O. #1},
      }{
        if level=1{
          set node label,
        }{
          if level=3{
            set node super label,
          }{
          },
        },
      },
    },
  }
  [Warm\\up furnace
    [Prepare\\plant and\\services
    [, placing node, label={[plan label]right:Plan 0.1: Do in any order}
        [Ensure\\plant is\\ready, calign with current
          [,phantom, tier=bottom]
        ]
        [Ensure\\gas-oil is\\available
        ]
        [Ensure O\textsubscript{2}\\analysis system\\is working
        ]
      ]
    ]
    [\\Start air\\blower, edge label={node [plan label, anchor=south east, above left, midway] {Plan 0: Do in order};}
    ]
    [\\Start oil\\pump
    ]
    [Head\\oil to\\800\textcelsius
      [, placing node, tier=bottom, label={[plan label]left:Plan 0.4: Raise temperature to 800\textcelsius{} while monitoring O\textsubscript{2} and $\triangle$T}
        [Increase\\temperature controller\\as per chart
        ]
        [\\Monitor\\O\textsubscript{2}
        ]
        [\\Monitor\\temperature
        ]
        [Switch\\furnace to\\automatic, calign with current
        ]
      ]
    ]
  ]
  ;
\end{forest}
\end{document}

Respuesta2

Una pstrickssolución con un psmatrixentorno y un código relativamente corto:

\documentclass[12pt, a4paper]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[pdf, x11names]{pstricks}%
\usepackage{pst-node, pst-blur}

\usepackage{siunitx}
\sisetup{detect-family, mode=text}

\usepackage{twoopt}
\newcommandtwoopt\mybox[3][1.6cm][2.5cm]{\psframebox[shadow=true, blur=true, framearc=0.05]{\parbox[t][#1][c]{#2}{\centering#3}}}

 \begin{document}
 \psset{nodesep=0pt, arrows=->, angleA=-90,angleB=90, armA = 1.5cm, armB=0.5cm, colsep=0.5cm, rowsep=2cm, linearc=0.05}%

 \sffamily
\begin{psmatrix}
%%% nodes
 & \mybox[1.2cm]{0. Warm up \\ furnace}\psspan{2}\\
\mybox{0.1 Prepare \\ plant and \\ services} & \mybox{0.2 Start \\ air blower} & \mybox{0.3 Start \\ oil pump} & \mybox{0.4 Heat \\ oil to \\ \SI{800}{\celsius}} \\
\mybox{0.1.1 Ensure \\ plant is \\ ready} & \mybox{0.1.2 Ensure \\ gas-oil is \\ avalaible} & \mybox[1.6cm][3.2cm]{0.1.3 Ensure O\textsuperscript2 \\ analysis system \\ is working}\\
\mybox[1.6cm][4cm]{0.4.1 Increase \\ temperature controller \\ as per chart} & \mybox{0.4.2 \\ Monitor \\ O\textsuperscript2} & \mybox{0.4.3 \\ Monitor \\ temperature} & \mybox{0.4.4 Switch \\ furnace to \\ automatic}
%%% arrows
\ncangle{1,2}{2,1}\nbput[npos=1.72]{Plan 0: Do in order}\ncangle{1,2}{2,2}\ncangle{1,2}{2,3}\ncangle{1,2}{2,4}
\ncangle{2,1}{3,1}\ncangle{2,1}{3,2}\ncangle{2,1}{3,3}\naput[npos=1.32]{Plan 0.1: Do in any order}
\psset{armA=5.4cm}
\ncangle{2,4}{4,1}\nbput[npos=0.92 ]{Plan 0.4: Raise temperature to \SI{800}{\celsius} while monitoring O\textsuperscript{2} and $\Delta$T}\ncangle{2,4}{4,2}\ncangle{2,4}{4,3}\ncangle{2,4}{4,4}
\end{psmatrix}

    \end{document} 

ingrese la descripción de la imagen aquí

información relacionada