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:
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 forest
Pakets 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}
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}
Nachtrag (2): Wenn Sie ein schmaleres Bild des Baums haben möchten, können Sie Folgendes einstellen:
s sep=1mm
Sfit=band
Optionen auf der untersten Ebene des Baums entfernen- Reduzieren Sie die Schriftgröße der Randbeschriftungen auf
font=\footnotesize
- Rand Etikettenposition nach unten schieben mit Ersetzen
midway
durchpos=0.65
- Reduzieren Sie die Schriftgröße der Baumknoten durch Hinzufügen einer Option
font=\small
in\for tree
den 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:
Antwort2
\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}