通过使用 Tikz,我想创建如下图表:
所以我想要一个经典的有向图,其中每个节点都有一些文本。此外,每个节点都有一个关联的框架,框架中充满了一堆项目符号。
此外,还有三个可选但需要的属性:
所有节点的大小都相同。如果它们能够正确容纳其中的文本,那就太好了,因此节点大小会根据文本最大的节点进行调整。
能够将框架置于节点的所需位置(参见图中 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 的定制版本,其中没有额外的垂直间距,也没有左边距。