我是 tikz 新手。我想绘制一个有向集的图形,我通过将在线示例中的代码放在一起来做到这一点,但并没有太多地了解发生了什么。现在我想做一些改进,但我没有找到示例(可以与我的代码集成)。
我迄今为止的代码:
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{main node/.style={circle,draw}}
...
\begin{tikzpicture}
\node[main node] (B) {};
\node[main node] (a) [above left = 1 cm and 1cm of B] {$\alpha$};
\node[main node] (a1) [above left = 1 cm and 1cm of a] {};
\node[main node] (a2) [above right = 1 cm and 1cm of a] {};
\node[main node] (g) [above right = 1cm and 1cm of B] {$\gamma$};
\node[main node] (g1) [above left = 1 cm and 1cm of g]{};
\node[main node] (g2) [above right = 1 cm and 1cm of g]{};
\node[main node] (g3) [above right = 1 cm and 1cm of g2]{};
\path[draw,thick]
(B) edge node {} (a)
(B) edge node {} (g)
(a) edge node {} (a1)
(a) edge node {} (a2)
(g) edge node {} (g1)
(g) edge node {} (g2)
(g2) edge node {} (g3);
\end{tikzpicture}
我想做的改进:
1) 我想表明图形是连续的。例如,我想用当前边方向上的三条虚线替换右上角的节点和边。我还想将这种“三条虚线延伸”添加到 的子节点中$\alpha$
。
2) 我想在 的所有后代周围绘制一个矩形$\alpha$
,包括从点 1) 指示的延伸。我想在这个框的顶部放置一个文本,说明$\geq\alpha$
3)我希望所有圆圈的大小都相同,这由最大的标签自动决定。
编辑:
我可以通过使用minimum size=1cm
节点的样式部分解决 3)。但是,每当标签、字体和其他大小发生变化时,这就需要调整 1cm
答案1
1 可以通过使节点不可见(省略draw
)并使边来实现dashed
。
2 可以使用 tikzlibrary 完成fit
。
3 相当困难,因为您必须事先设置节点大小,而只有在处理完所有节点后才能知道最大的节点。有办法解决这个问题,但定义绝对大小(如您自己建议的那样)或从用户提供的最大节点计算最大大小(在下面的 MWE 中)会更容易(得多)。
注意:此解决方案基于现有问题:例如,Tikz - 如何在节点集周围绘制框。在提出新问题之前,请务必进行广泛的搜索。对于您的 MWE,请确保它编译,即包括\documentclass
,\begin{document}
并且不包括...
。
梅威瑟:
\documentclass{article}
\usepackage{tikz}
\usepackage{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{fit}
\tikzset{main node/.style={circle,draw}}
\newcommand{\largest}{$\gamma$}
\newlength{\sizemax}
\setlength{\sizemax}{\maxof{\widthof{\largest}}{\totalheightof{\largest}}}
\tikzset{minimum size=\sizemax+10pt}
\begin{document}
\begin{tikzpicture}
\node[main node] (B) {};
\node[main node] (a) [above left = 1cm and 1cm of B] {$\alpha$};
\node[main node] (a1) [above left = 1cm and 1cm of a] {};
\node[main node] (a2) [above right = 1cm and 1cm of a] {};
\node (a1x) [above left = 1cm and 1cm of a1]{};
\node (a2x) [above left = 1cm and 1cm of a2]{};
\node[main node] (g) [above right = 1cm and 1cm of B] {$\gamma$};
\node[main node] (g2) [above right = 1cm and 1cm of g]{};
\node (g3) [above right = 1cm and 1cm of g2]{};
\path[draw,thick]
(B) edge (a)
(B) edge (g)
(a) edge (a1)
(a) edge (a2)
(g) edge (a2)
(g) edge (g2)
(g2) edge[dashed] (g3)
(a1) edge[dashed] (a1x)
(a2) edge[dashed] (a2x);
\node[draw,fit=(a) (a1) (a2) (a1x) (a2x)] (ad) {};
\node[above=0mm of ad] {$\geq\alpha$};
\end{tikzpicture}
\end{document}
结果: