
実際、私は不器用にノードを印刷し、フィットノードを使用して複数の子をカバーしています。
それは美しくありません。もっと賢く、もっと自然なものがあるはずです。
ムウェ
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,shadows,fit,matrix}
\usepackage{duckuments}
\begin{document}
\def\myimageA{\includegraphics[width=2cm]{example-image-duck}}
\def\myimageB{\includegraphics[width=1cm]{example-image-duck}}
\def\d{\textbf{Selling group}}
\def\e{\textbf{Investors}}
\begin{tikzpicture}[
font=\sffamily,
level1/.style={
rounded corners,
fill=#1,
inner sep=5pt,
text=black,
text centered,
opacity = 0.5,
text opacity = 1,
},
level2/.style={
rounded corners,
fill=#1,
inner sep=7pt,
text=black,
text centered,
opacity = 0.5,
text opacity = 1,
},
rectnode/.style={
rounded corners,
fill=#1,
inner sep=7pt,
text=black,
text centered,
text opacity = 1,
},
level4/.style={
fill=#1,
draw=gray,
inner sep=5pt,
text=black,
text width=1.5cm,
text centered,
font=\tiny,
anchor=north,
opacity = 0.5,
text opacity = 1,
},
myline/.style={
draw=gray,
opacity=0.7,
arrows = {-latex},
line width=1pt,
},
]
\matrix[
matrix of nodes,
column sep=0.5ex,
row sep=3ex,
row 1/.style={nodes={level1={gray}}},
row 2/.style={nodes={level2={gray}}},
row 3/.style={nodes={rectnode={gray}}},
row 4/.style={nodes={level4={gray}}},
row 5/.style={nodes={rectnode={gray}}},
] (m) {
& & & {\myimageA} \\
& & & {\myimageB} \\
& {\myimageB} & & {\myimageB} & & {\myimageB} \\
{\d}& {\d} & {\d} & {\d} & {\d} & {\d} \\
x & x & x & x & x & {\e} \\ % <- I clumsily put the nodes like this
};
% I certainly should use a \path but not confortable with its syntax.
\draw[myline] (m-1-4.south) -- (m-2-4);
\draw[myline] (m-2-4.west) -| (m-3-2);
\draw[myline] (m-2-4.east) -| (m-3-6);
\draw[myline] (m-2-4.190) -| (m-4-3);
\draw[myline] (m-2-4.south) -| (m-3-4);
\draw[myline] (m-3-2.west) -| (m-4-1);
\draw[myline] (m-3-2.south) -| (m-4-2);
\draw[myline] (m-3-4.south) -| (m-4-4);
\draw[myline] (m-3-4.east) -| (m-4-5);
\draw[myline] (m-3-6.south) -- (m-4-6);
\draw[myline] (m-3-6.south) -- (m-4-6);
\draw[myline] (m-4-1.south) -- (m-5-1);
\draw[myline] (m-4-2.south) -- (m-5-2);
\draw[myline] (m-4-3.south) -- (m-5-3);
\draw[myline] (m-4-4.south) -- (m-5-4);
\draw[myline] (m-4-5.south) -- (m-5-5);
\draw[myline] (m-4-6.south) -- (m-5-6);
\node[align=center,rectnode={gray},inner sep=0pt,fit=(m-5-1)(m-5-2)] {\e};
\node[align=center,rectnode={gray},inner sep=0pt,fit=(m-5-3)(m-5-5)] {\e};
\end{tikzpicture}
\end{document}
答え1
既存のノードから既存のノードの北端(北端の中心ではない)に垂直線を描く構文は次のとおりです。
\draw (node1) -- (node1.south|-node2.north)
したがって、マトリックスの最後の行を削除し、「投資家」ノードを必要な場所に配置します。私はそれらを1.2cm
マトリックスの最後の行の下に配置します。最初のノードはノードの下にあり、2 番目のノードはとm-4-2
の中点の下にあります。m-4-4
m-4-5
次にコマンド
\draw[myline] (m-4-1.south) -- (m-4-1.south|-new1.north);
(m-4-1.south)
は、 の北端までまっすぐ下から描画します(new1)
。これが、最初の「Investor」ノードに付けた名前です。
\matrix[
matrix of nodes,
column sep=0.5ex,
row sep=3ex,
row 1/.style={nodes={level1={gray}}},
row 2/.style={nodes={level2={gray}}},
row 3/.style={nodes={rectnode={gray}}},
row 4/.style={nodes={level4={gray}}},
row 5/.style={nodes={rectnode={gray}}},
] (m) {
& & & {\myimageA} \\
& & & {\myimageB} \\
& {\myimageB} & & {\myimageB} & & {\myimageB} \\
{\d}& {\d} & {\d} & {\d} & {\d} & {\d} \\
%x & x & x & x & x & {\e} \\ % <- I clumsily put the nodes like this
};
\draw[myline] (m-1-4.south) -- (m-2-4);
\draw[myline] (m-2-4.west) -| (m-3-2);
\draw[myline] (m-2-4.east) -| (m-3-6);
\draw[myline] (m-2-4.190) -| (m-4-3);
\draw[myline] (m-2-4.south) -| (m-3-4);
\draw[myline] (m-3-2.west) -| (m-4-1);
\draw[myline] (m-3-2.south) -| (m-4-2);
\draw[myline] (m-3-4.south) -| (m-4-4);
\draw[myline] (m-3-4.east) -| (m-4-5);
\draw[myline] (m-3-6.south) -- (m-4-6);
\draw[myline] (m-3-6.south) -- (m-4-6);
\node[align=center, rectnode={gray}, minimum width=5cm] at ([yshift=-1.2cm]m-4-2)(new1){\e};
\node[align=center, rectnode={gray}, minimum width=3.5cm]at ([yshift=-1.2cm]$.5*(m-4-4)+.5*(m-4-5)$)(new2){\e};
\node[align=center, rectnode={gray}]at ([yshift=-1.2cm]m-4-6)(new3){\e};
\draw[myline] (m-4-1.south) -- (m-4-1.south|-new1.north);
\draw[myline] (m-4-2.south) -- (new1);
\draw[myline] (m-4-3.south) -- (m-4-3.south|-new1.north);
\draw[myline] (m-4-4.south) -- (m-4-4.south|-new2.north);
\draw[myline] (m-4-5.south) -- (m-4-5.south|-new2.north);
\draw[myline] (m-4-6.south) -- (new3);