Ajude a melhorar este gráfico tikz de um conjunto direcionado

Ajude a melhorar este gráfico tikz de um conjunto direcionado

Eu sou um novato em tikz. Eu queria desenhar um gráfico de um conjunto direcionado e consegui juntar códigos de exemplos online, sem entender muito o que estava acontecendo. Agora gostaria de fazer algumas melhorias, para as quais não encontrei exemplos (que pudessem ser integrados ao meu código).

Meu código até agora:

\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}

Minha saída até agora:Gráfico

Melhorias que gostaria de fazer:

1) Gostaria de indicar que o gráfico continua. Por exemplo, o nó superior direito e a aresta que gostaria de substituir por três traços na direção da aresta atual. Essas "extensões de três traços" eu também gostaria de acrescentar aos filhos de $\alpha$.

2) Gostaria de desenhar um retângulo ao redor de todos os descendentes de $\alpha$, incluindo a extensão indicada no ponto 1). Eu gostaria de colocar um texto no topo desta caixa dizendo$\geq\alpha$

3) Gostaria que todos os círculos tivessem o mesmo tamanho, que é determinado automaticamente pelo rótulo maior.

EDITAR:

Posso resolver parcialmente 3) usando minimum size=1cmpara o estilo dos nós. No entanto, isso exigiria um ajuste de 1 cm sempre que rótulos, fontes e outros tamanhos fossem alterados

Responder1

1 pode ser feito tornando os nós invisíveis (omitindo draw) e tornando as arestas dashed.

2 pode ser feito usando a fitbiblioteca tikz.

3 é bastante difícil, porque você precisa definir o tamanho do nó antecipadamente, enquanto você conhece o maior nó somente depois que todos os nós tiverem sido processados. Existem maneiras de resolver isso, mas será (muito) mais fácil definir um tamanho absoluto (como você mesmo sugere) ou, alternativamente, calcular o tamanho máximo de um nó maior fornecido pelo usuário (no MWE abaixo).

Nota: esta solução é baseada em questões existentes: por exemplo,Tikz - Como desenhar caixas em torno de um conjunto de nós. Certifique-se de fazer uma pesquisa extensa antes de fazer uma nova pergunta. Para o seu MWE, certifique-se de que ele seja compilado, ou seja, incluindo o \documentclass, \begin{document}e sem o ....

MWE:

\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}

Resultado:

insira a descrição da imagem aqui

informação relacionada