Problem mit Baum und Beschriftungen in Tikz

Problem mit Baum und Beschriftungen in Tikz

Ich möchte eine Beschriftung so an der Kante eines Baumes platzieren, dass sie die Kante unterbricht. Ich habe etwas Dummes versucht, indem ich den Hintergrund auf Weiß gesetzt habe, aber dann habe ich es geschafft, dass die Beschriftung andere nahe gelegene Kanten überdeckt:

Beispiel

Außerdem habe ich anscheinend Knoten mit Beschriftungen, bei denen die Ziffern um zwei Ziffern größer sind. Wie kann ich alles vereinheitlichen?

Hier ist mein MWE:

\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{shapes.geometric}
\begin{document}
    \begin{tikzpicture}[level/.style={sibling distance=15mm/#1}]
        \node [circle,draw] {0}
        child[very thick,red] {node [thin, black,circle,draw] {$1$} edge from parent node [fill=white] {$s_1$}}
        child[very thick,blue] {node [thin, black,circle,draw] {$2$}
            child[very thick, red] {node [thin, black,circle,draw] {$3$}}
            child[very thick, blue] {node [thin, black,circle,draw] {$4$}}
            child[very thick, orange] {node [thin, black,circle,draw] {$8$}}
            edge from parent node [fill=white] {$s_2$} }
        child[very thick,orange] {node [thin, black,circle,draw] {$6$}}
        child[very thick,orange] {node [thin, black,circle,draw] {$7$}}
        child[very thick,blue] {node [thin, black,circle,draw] {$11$}
            child[very thick, red] {node [thin, black,circle,draw] {$10$}}
            child[very thick, blue] {node [thin, black,circle,draw] {$9$}}
            child[very thick, orange] {node [thin, black,circle,draw] {$5$}}
        }
        child[very thick,red] {node [thin, black,circle,draw] {$12$}};
    \end{tikzpicture}
\end{document}

Antwort1

Durch die Verwendung des forestPakets wird der Tree-Code kürzer:

\documentclass{article}
\usepackage{forest}

\begin{document}
\forestset{
  EL/.style={% abbreviation for Edge Label
             edge label={node[midway, font=\small, text=black,
                         fill=white, inner sep=2pt]{$#1$}} 
             }
          }% end of forestset
  
\begin{forest}
for tree = {
% node style
    circle,
    draw, 
    minimum size = 1.5em,
    inner sep=0pt,
    math content,
% tree style
    edge={very thick},
    s sep=3mm,
    l sep=12mm,
           }
[0,
    [1, edge=red, EL=s_1]
    [2, edge=blue,EL=s_2,fit=band
        [3, edge=orange]
        [4, edge=blue]
        [8, edge=orange]
    ]
    [6,edge=orange]
    [7,edge=orange]
    [11,edge=blue,fit=band
        [10,edge=red]
        [9, edge=blue]
        [5, edge=orange]
    ]
    [12, edge=red]
]
    \end{forest}
\end{document}

Bildbeschreibung hier eingeben

Nachtrag (1): wenn Sie nur den Abstand zwischen den Knoten „6“ und „7“ vergrößern möchten, fügen Sie am einfachsten einen Phantomknoten zwischen ihnen ein:

\documentclass{article}
\usepackage{forest}

\begin{document}
\forestset{
  EL/.style={% shortens for (my) edge label
             edge label={node[midway, font=\small, text=black,
                         fill=white, inner sep=2pt]{$#1$}}
             }
          }% end of forestset

\begin{forest}
for tree = {
% node style
    circle,
    draw,
    minimum size = 1.5em,
    inner sep=0pt,
    math content,
% tree style
    edge={very thick},
    s sep=3mm,
    l sep=12mm,
           }
[0,
    [1, edge=red, EL=s_1]
    [2, edge=blue,EL=s_2, fit=band
        [3, edge=orange]
        [4, edge=blue]
        [8, edge=orange]
    ]
    [6,edge=orange]
    [, phantom, no edge]  % <---
    [7,edge=orange]
    [11,edge=blue,fit=band
        [10,edge=red]
        [9, edge=blue]
        [5, edge=orange]
    ]
    [12, edge=red]
]
    \end{forest}
\end{document}

Bildbeschreibung hier eingeben

Nachtrag (2): Wenn Sie ein schmaleres Bild des Baums haben möchten, können Sie Folgendes einstellen:

  • s sep=1mmS
  • fit=bandOptionen auf der untersten Ebene des Baums entfernen
  • Reduzieren Sie die Schriftgröße der Randbeschriftungen auffont=\footnotesize
  • Rand Etikettenposition nach unten schieben mit Ersetzen midwaydurchpos=0.65
  • Reduzieren Sie die Schriftgröße der Baumknoten durch Hinzufügen einer Option font=\smallin \for treeden Einstellungen
  • Reduzieren Sie die Knotengröße auf „Mindestgröße = 1,2em“. Der neue MWE lautet dann:
\documentclass{article}
\usepackage{forest}

\begin{document}
\forestset{
  EL/.style={% abbreviation for Edge Label
             edge label={node[pos=0.65, font=\footnotesize, text=black,
                         fill=white, inner sep=2pt]{$#1$}}
             }
          }% end of forestset

\begin{forest}
for tree = {
% node style
    circle,
    draw,
    font=\small,
    minimum size = 1.2em,
    inner sep=0pt,
    math content,
% tree style
    edge={very thick},
    s sep=2mm,
    l sep=12mm,
           }
[0,
    [1, edge=red, EL=s_1]
    [2, edge=blue,EL=s_2,
        [3, edge=orange]
        [4, edge=blue]
        [8, edge=orange]
    ]
    [6,edge=orange]
    [7,edge=orange]
    [11,edge=blue,
        [10,edge=red]
        [9, edge=blue]
        [5, edge=orange]
    ]
    [12, edge=red]
]
    \end{forest}
\end{document}

die produzieren:

Bildbeschreibung hier eingeben

Antwort2

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage{tikz}

\usetikzlibrary{shapes.geometric}
\begin{document}
    \begin{tikzpicture}[
        every node/.style={% standard style for all nodes no repetition required every time
            thin, 
            black,
            draw,
            circle,
            inner sep=1pt,% space around the text in the circle
            text width=10pt,%uniform circles minimum size
            text centered
        },
    level/.style={
        sibling distance=15mm/#1
    },
        level distance=5em% can vary to suit 
]
        \node [] {0}
        child[very thick,red] {node [] {$1$} edge from parent node [draw=none,fill=white] {$s_1$}}
        child[very thick,blue] {node [] {$2$}
            child[very thick, red] {node [] {$3$}}
            child[very thick, blue] {node [] {$4$}}
            child[very thick, orange] {node [] {$8$}}
            edge from parent node [fill=white,draw=none] {$s_2$} }
        child[very thick,orange] {node [] {$6$}}
        child[very thick,orange] {node [] {$7$}}
        child[very thick,blue] {node [] {$11$}
            child[very thick, red] {node [] {$10$}}
            child[very thick, blue] {node [] {$9$}}
            child[very thick, orange] {node [] {$5$}}
        }
        child[very thick,red] {node [] {$12$}};
    \end{tikzpicture}
\end{document}

verwandte Informationen