Helfen Sie mit, diesen Tikz-Graphen eines gerichteten Satzes zu verbessern

Helfen Sie mit, diesen Tikz-Graphen eines gerichteten Satzes zu verbessern

Ich bin ein Tikz-Neuling. Ich wollte einen Graphen einer gerichteten Menge zeichnen und habe dies geschafft, indem ich Code aus Online-Beispielen zusammengefügt habe, ohne wirklich zu verstehen, was vor sich geht. Jetzt möchte ich einige Verbesserungen vornehmen, für die ich keine Beispiele gefunden habe (die in meinen Code integriert werden könnten).

Mein Code bisher:

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

Meine bisherige Ausgabe:Graph

Verbesserungen, die ich gerne vornehmen würde:

1) Ich möchte angeben, dass der Graph weitergeht. Beispielsweise möchte ich den oberen rechten Knoten und die Kante durch drei Striche in Richtung der aktuellen Kante ersetzen. Solche „Drei-Striche-Erweiterungen“ möchte ich auch den Kindern von hinzufügen $\alpha$.

2) Ich möchte ein Rechteck um alle Nachkommen von zeichnen $\alpha$, einschließlich der angegebenen Erweiterung aus Punkt 1). Ich möchte oben auf dieses Feld einen Text einfügen, der besagt$\geq\alpha$

3) Ich möchte, dass alle Kreise die gleiche Größe haben, die automatisch durch das größte Etikett bestimmt wird.

BEARBEITEN:

Ich kann 3) teilweise lösen, indem ich minimum size=1cmfür den Stil der Knoten verwende. Dies würde jedoch eine Anpassung von 1 cm erfordern, wenn Beschriftungen, Schriftarten und andere Größen geändert werden

Antwort1

1 kann erreicht werden, indem die Knoten unsichtbar gemacht (weggelassen draw) und die Kanten erstellt werden dashed.

2 kann mithilfe der fitTikzlibrary durchgeführt werden.

3 ist ziemlich schwierig, da Sie die Knotengröße im Voraus festlegen müssen, während Sie den größten Knoten erst kennen, nachdem alle Knoten verarbeitet wurden. Es gibt Möglichkeiten, dies zu beheben, aber es wird (viel) einfacher sein, eine absolute Größe zu definieren (wie Sie selbst vorschlagen) oder alternativ die maximale Größe aus einem vom Benutzer angegebenen größten Knoten zu berechnen (in MWE unten).

Hinweis: Diese Lösung basiert auf vorhandenen Fragen: z. B.Tikz - So zeichnen Sie Kästen um einen Satz von Knoten. Bitte führen Sie eine umfassende Suche durch, bevor Sie eine neue Frage stellen. Stellen Sie für Ihr MWE sicher, dass es kompiliert wird, d. h. einschließlich \documentclassund \begin{document}ohne ....

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}

Ergebnis:

Bildbeschreibung hier eingeben

verwandte Informationen