HTA처럼 보이는 것을 만드는 방법은 무엇입니까?

HTA처럼 보이는 것을 만드는 방법은 무엇입니까?

나는 다음과 같은 내용을 달성하려고 노력하고 있습니다.

HTA 예

그러나 나는 이 화살을 만드는 방법을 알아낼 수 없습니다. 거의 맞는 코드를 제공하는 코드가 있지만 일부 위치에서 엉망이 되어 원하는 경로를 자동으로 선택하지 못합니다(겹치는 노드 등).

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

위 그림의 "용광로 예열" -> "플랜트 및 서비스 준비" 단계에서 원하는 경로(아래, 왼쪽, 아래)를 따르도록 하기 위해 두 개의 더미 노드를 만들었습니다.

가능하다면 추가 노드를 복잡하게 만들지 않고 이러한 경로를 더 잘 지정하는 방법에 대해 누군가 나에게 약간의 도움을 줄 수 있습니까? 나는 현재 이것에 갇혀 있고 무엇을 해야할지 모르겠습니다. 많이 검색했지만 위의 답변과 같이 부분적인 답변만 얻었습니다.

답변1

다음번에는 사람들이 이미지의 모든 단어를 복사할 필요 없이 최소한 문서의 기본 구조와 다이어그램의 텍스트 내용을 잘라내어 붙여 넣을 수 있도록 최소 작업 예제를 제공하십시오.

이 솔루션은 forest노드 시작 부분에 자동으로 레이블을 사용하고 구성하고 추가합니다. 이를 위해 저는 매우 빠르고 정확한 도움을 받았습니다.Sašo Živanović의 답변나에게여러 라벨을 피하는 것에 대한 질문.

용광로 숲

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

답변2

환경과 상대적으로 짧은 코드를 pstricks갖춘 솔루션 :psmatrix

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

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

관련 정보