Tikz:在多輸入多輸出圖中排列輸入和輸出節點

Tikz:在多輸入多輸出圖中排列輸入和輸出節點

我正在嘗試使用以下結構的程式碼繪製多輸入多輸出樣式圖:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}


\begin{document}

\begin{tikzpicture}
\tikzset{packet/.style={rectangle, draw, very thick, minimum size=8mm, rounded corners=1mm, fill=blue!50!white!30}}
\tikzset{mixing/.style={rectangle, draw, very thick, minimum width=35ex, rounded corners=1mm, fill=red!70!orange!30,rotate=90}}

\node[packet] (A) at (0,0) {Node A};
\node[packet] (B) [right=2cm of A] {Node B};
\node[mixing] (pro) at ($(A) !.5! (B) + (0.0,-1.0)$) {Multiple Input Multiple Output process};

\node[packet] (C) at (0.0,-2.1) {Node C};
\node[packet] (D) [right=2cm of C] {Node D};

\draw[->] (A.east) -- (B.west);
\draw[->] (C.east) -- (D.west);
\end{tikzpicture}
\end{document} 

產生下圖: 在此輸入影像描述

我想知道的是如何繪製箭頭,以便“多輸入多輸出過程”將線一分為二,以便將其分成兩部分,因此有一個箭頭進入左側的過程(從節點 A例如),一個從右側出去(例如到節點B)。

我知道將線的入口/出口設定為節點的符號(類似於 name_of_node.180,其中 180 指定相對於節點中心的節點的入口/出口角度),例如這裡TikZ 中的多輸入-多輸出組件框圖

然而,是否可以強制「流程」節點的箭頭的入口點和出口點與一對節點(A 和 B,或 C 和 D)處於「水平」。 (實際上,在下圖中,就好像流程節點將箭頭一分為二,如前所述)。

答案1

您可以使用垂直座標系:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}


\begin{document}

\begin{tikzpicture}
\tikzset{packet/.style={rectangle, draw, very thick, minimum size=8mm, rounded corners=1mm, fill=blue!50!white!30}}
\tikzset{mixing/.style={rectangle, draw, very thick, minimum width=35ex, rounded corners=1mm, fill=red!70!orange!30,rotate=90}}

\node[packet] (A) at (0,0) {Node A};
\node[packet] (B) [right=2cm of A] {Node B};
\node[mixing] (pro) at ($(A) !.5! (B) + (0.0,-1.0)$) 
  (mult) {Multiple Input Multiple Output process};

\node[packet] (C) at (0.0,-2.1) {Node C};
\node[packet] (D) [right=2cm of C] {Node D};

\draw[->] (A.east) -- (mult.north|-A.east);
\draw[->] (mult.south|-A.east) -- (B.west);
\draw[->] (C.east) -- (mult.north|-C.east);
\draw[->] (mult.south|-C.east) -- (D.west);
\end{tikzpicture}
\end{document} 

在此輸入影像描述

更好的選擇是使用:

\draw[->] (A.east) -- (mult.north|-A.east);
\draw[->] (mult.south|-A.east) -- (B.west|-A.east);
\draw[->] (C.east) -- (mult.north|-C.east);
\draw[->] (mult.south|-C.east) -- (D.west|-C.east);

相關內容