Me gustaría colocar una etiqueta en el borde de un árbol de manera que rompa el borde. Intenté algo tonto, estableciendo el fondo en blanco, pero luego la etiqueta cubre otros bordes cercanos:
También parece que tengo nodos con etiquetas con 2 dígitos más grandes. ¿Cómo puedo hacer que todo sea uniforme?
Aquí está mi 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}
Respuesta1
Con el uso del forest
paquete el código del árbol es más corto:
\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}
Anexo (1): Si desea aumentar la distancia entre los nodos "6" y "7" únicamente, lo más simple es insertar un nodo fantasma entre ellos:
\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}
Anexo (2): Si desea tener una imagen más estrecha del árbol, puede configurar:
s sep=1mm
s- eliminar
fit=band
opciones en el nivel inferior del árbol - reducir el tamaño de fuente de las etiquetas de borde a
font=\footnotesize
- Empuje la posición de la etiqueta del borde hacia abajo reemplazando
midway
conpos=0.65
- Reduzca el tamaño de fuente de los nodos del árbol agregando una opción
font=\small
en\for tree
la configuración. - reduzca el tamaño del nodo a `tamaño mínimo = 1,2 em El nuevo MWE es:
\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}
que producen:
Respuesta2
\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}