Помогите улучшить этот tikz-граф направленного множества

Помогите улучшить этот tikz-граф направленного множества

Я новичок в 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) Я бы хотел, чтобы все круги были одинакового размера, который автоматически определяется по наибольшему размеру метки.

РЕДАКТИРОВАТЬ:

Я могу частично решить 3) используя minimum size=1cmдля стиля узлов. Однако это потребует корректировки на 1 см всякий раз, когда меняются метки, шрифты, другие размеры

решение1

1 можно сделать, сделав узлы невидимыми (исключив draw) и сделав ребра dashed.

2 можно сделать с помощью fitбиблиотеки tikzlibrary.

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}

Результат:

введите описание изображения здесь

Связанный контент