Wie erstelle ich ein Ding, das wie ein HTA aussieht?

Wie erstelle ich ein Ding, das wie ein HTA aussieht?

Ich versuche, etwas in dieser Art zu erreichen:

HTA-Beispiel

Ich kann jedoch nicht herausfinden, wie ich diese Pfeile mache. Ich habe einen Code, der mir etwas liefert, das fast richtig ist, aber an einigen Stellen ist er durcheinander und wählt den gewünschten Pfad nicht automatisch aus (überlappende Knoten oder so).

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

Ich habe zwei Dummyknoten erstellt, um das Ding dazu zu bringen, dem gewünschten Pfad zu folgen, nämlich NACH UNTEN, LINKS, NACH UNTEN, wie beim Schritt „Ofen aufwärmen“ -> „Anlage und Dienste vorbereiten“ im Bild oben.

Kann mir jemand ein wenig helfen, wie ich diese Pfade besser und möglichst ohne zusätzliche Knoten leiten kann? Ich stecke derzeit fest und habe keine Ahnung, was ich tun soll. Ich habe viel gegoogelt, aber nur Teilantworten erhalten (wie die oben).

Antwort1

Stellen Sie das nächste Mal bitte ein minimales funktionierendes Beispiel zur Verfügung, sodass die Leute nicht jedes Wort aus einem Bild kopieren müssen, sondern zumindest die Grundstruktur des Dokuments und den Textinhalt des Diagramms ausschneiden und einfügen können.

Diese Lösung verwendet forestund erstellt die Beschriftungen am Anfang der Knoten automatisch und fügt sie hinzu. Dafür bekam ich sehr schnelle und präzise Hilfe vonSašo Živanovićs Antwortzu meinemFrage zur Vermeidung mehrfacher Beschriftungen.

Ofenwald

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

Antwort2

Eine pstricksLösung mit einer psmatrixUmgebung und einem relativ kurzen Code:

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

Bildbeschreibung hier eingeben

verwandte Informationen