
Tikz を利用して、次のようなグラフを作成したいと思います。
そこで、各ノードにテキストがある、古典的な有向グラフを作成したいと思います。さらに、各ノードには 1 つのフレームが関連付けられており、そのフレームには多数の箇条書きが記入されています。
さらに、オプションではあるが望ましい 3 つのプロパティ:
ノードはすべて同じサイズです。ノード内にテキストを適切に保持できれば、最も大きなテキストを含むノードに合わせてノードのサイズが調整されるので、さらに便利です。
フレームをノードの希望の位置に配置できます (グラフの A、C と B の違いを参照)。座標ごとの配置の代わりに、上、下、左、右などのオプション セットと、それらの組み合わせで十分です。
箇条書きの数に応じてフレーム サイズが調整されます (グラフからフレーム サイズの変化を確認してください)。
現在の私の知識では、ノードとエッジで構成される一般的な有向グラフしか作成できません。ドキュメントを読んで、これらすべてを実現する方法(方法があると仮定)を見つけようとしますが、誰かが手を貸してくれると非常にありがたいです。
答え1
いくつかのスタイルを用意すれば準備完了です:
\documentclass{article}
\usepackage{enumitem}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newlist{tikzitem}{itemize}{1}
\setlist[tikzitem,1]{label=$\bullet$,nolistsep,leftmargin=*}
\begin{document}
\begin{tikzpicture}[
mynode/.style={
circle,
draw,
fill=yellow,
minimum size=1cm,
align=center
},
frame/.style={
draw=cyan,
line width=3pt,
text width=2cm,
rounded corners
},
ar/.style={
->,
>=latex
}
]
\node[mynode] (a) {Some text};
\node[mynode,below right=2cm and 6cm of a] (c) {Some text};
\node[mynode,below left=2cm and 6cm of c] (b) {Some text};
\node[frame,anchor=north west] at (a.-90)
{%
\begin{tikzitem}
\item First.
\item Second.
\item Third.
\end{tikzitem}%
};
\node[frame,anchor=south west] at (b.90)
{%
\begin{tikzitem}
\item First.
\item Second.
\item Third.
\end{tikzitem}%
};
\node[frame,anchor=west] at (c.0)
{%
\begin{tikzitem}
\item First.
\item Second.
\item Third.
\item Fourth.
\item Fifth.
\end{tikzitem}%
};
\draw[ar] (a) to[bend left] (c);
\draw[ar] (b) to[bend right] (c);
\end{tikzpicture}
\end{document}
円に対するフレームの位置は、at (<name>.<angle>)
構文とフレームの適切なアンカーを使用して制御できます。
このenumitem
パッケージを使用して、余分な垂直方向のスペースと左余白のない itemize のカスタマイズされたバージョンを作成しました。