在 tikz 中使用链的奇怪图表

Weird diagrams using chains within tikz

我正在尝试使用 LaTeX 中的 tikz 包复制一些我使用 Microsoft Visio 制作的图表。基本图表相对容易构建,但是当要添加两个以上的节点时,它会变得非常棘手......我似乎找不到任何文档来证明我需要居中和对齐节点就像我在 Visio 中所做的那样。

这些是 MS Visio 图表:

但这就是我现在使用 Tikz 得到的:

这是一个最小的可重现示例:

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usepackage{svg}
\usepackage{amsmath}

\usetikzlibrary{shapes.geometric, arrows, chains}

%%
%%TikZ Settings
\tikzstyle{main} = [rectangle, minimum width=3cm, minimum height=0.6cm,text centered, text width=3cm, draw=black, fill=black!30]
\tikzstyle{arrow} = [thick,->,>=stealth]

\begin{document}

%The "Remediação" diagram

\begin{tikzpicture}[node distance=1.5cm]

    \node (principal) [main] {Remediação};
    \coordinate[below of=principal] (a);
    \begin{scope}[start chain=going right]
    \node (rem-vuln-c-patch) [main, on chain, below of=principal, left of=a] {Remediação de Vulnerabilidade Normal com \textit{patch}};
    \node (rem-vuln-c-c-patch) [main, on chain] {Remediação de Vulnerabilidade Crítica com \textit{patch}};
    \node (rem-vuln-config) [main, on chain] {Remediação de Vulnerabilidade por má configuração};
    \node (gest-vuln-s-patch) [main, on chain] {Gestão de Vulnerabilidade sem \textit{patch}};
    \end{scope}
    
    \node(gest-risco) [main, align=center, below of=rem-vuln-c-c-patch] {Gestão de Risco};
    
    \draw [arrow] (principal) -| (rem-vuln-c-patch);
    \draw [arrow] (principal) -| (rem-vuln-c-c-patch);
    \draw [arrow] (principal) -| (rem-vuln-config);
    \draw [arrow] (principal) -| (gest-vuln-s-patch);
    \draw [arrow] (gest-vuln-s-patch) |- (gest-risco);
    \draw [arrow] (gest-risco) -| (rem-vuln-c-patch);
    \draw [arrow] (gest-risco) -- (rem-vuln-c-c-patch);
    
\end{tikzpicture}

% The "Balanço" diagram

\begin{tikzpicture}[node distance=1.5cm]

    \node (principal) [main] {Balanço};
    \coordinate[below of=principal] (a);
    \begin{scope}[start chain=going right]
    \node (lic-apr) [main, on chain, below of=principal, left of=a] {Lições aprendidas};
    \node (reu-retro) [main, on chain] {Reunião de Retrospetiva};
    \node (cri-rel-exec) [main, on chain] {Criação do relatório executivo};
    \end{scope}
    
    \draw [arrow] (principal) -| (lic-apr);
    \draw [arrow] (principal) -| (reu-retro);
    \draw [arrow] (principal) -| (cri-rel-exec);
    
\end{tikzpicture}

\end{document}

使用树可能比使用链更容易:

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usepackage{svg}
\usepackage{amsmath}

\usetikzlibrary{shapes.geometric, arrows, chains,positioning}

%%
%%TikZ Settings
\tikzstyle{main} = [rectangle, minimum width=3cm, minimum height=2cm,text centered, text width=3cm, draw=black, fill=black!30]
\tikzstyle{arrow} = [thick,->,>=stealth]

\begin{document}

%The "Remediação" diagram

\begin{tikzpicture}[
  level distance=3cm,
  sibling distance=4cm,
  edge from parent path={[thick,->](\tikzparentnode.south) -- ++(0,-1cm) -| (\tikzchildnode.north)}
]

  \node[main,minimum height=0.6cm] (principal) {Remediação}
    child { node[main] (rem-vuln-c-c-patch)  {Remediação de Vulnerabilidade Crítica com \textit{patch}} }
    child { node[main] (rem-vuln-c-patch)  {Remediação de Vulnerabilidade Normal com \textit{patch}} }
    child { node[main] (rem-vuln-config)  {Remediação de Vulnerabilidade por má configuração} }
    child { node[main] (gest-vuln-s-patch) {Gestão de Vulnerabilidade sem \textit{patch}} };
    
  \node(gest-risco) [main, align=center, below=4.5cm of principal,minimum height=0.6cm] {Gestão de Risco};
    
  \draw[->,thick] (gest-risco) -| (rem-vuln-c-c-patch);
  \draw[->,thick] (gest-risco) -| (gest-vuln-s-patch);
  \draw[->,thick] ([xshift=-1.0cm]gest-risco.north) -| ([xshift=1.8cm]rem-vuln-c-patch);

\end{tikzpicture}



\end{document}