次の構造を使用するコードを使用して、複数入力複数出力スタイルの図を描画しようとしています。
\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}
次の図が生成されます。
私が知りたいのは、矢印をどのように描いて、「複数入力複数出力プロセス」が線を二分して 2 つの部分に分割し、1 つの矢印が左側のプロセスに入り (たとえば、ノード A から)、もう 1 つの矢印が右側から出る (たとえば、ノード B へ) ようにするかということです。
ノードへのラインの入口/出口を設定する表記法(name_of_node.180のようなもので、180はノードの中心に対するノードへの入口/出口の角度を指定します)は知っています。たとえば、ここです。TikZ のブロック図 マルチ入力 - マルチ出力コンポーネント
ただし、「プロセス」ノードの矢印の入口と出口のポイントを、ノードのペア (A と B、または C と D) と同じレベルに強制することは可能です。(実際には、下の図では、プロセス ノードが矢印を二分して 2 つに分割しているかのように見えます (前述のとおり))。
答え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);