
\documentclass[png,tikz,border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{trees,decorations,shadows}
% style definitions
\tikzset{level 1/.style={sibling angle=90,level distance=25mm}}
\begin{document}
\begin{tikzpicture}
[grow cyclic,cap=round]
\node[shape=circle, draw, minimum size=12pt] {\large PL}
child {node[shape=circle, draw, minimum size=8pt] {}
[level distance=1cm]
child {node {Textual}}
child {node {Visual}}
}
child {node[shape=circle, draw, minimum size=8pt] {}
[level distance=1cm]
child {node {General-purpose}}
child {node {Special-purpose}}
}
child {node[shape=circle, draw, minimum size=8pt] {}}
child {node[shape=circle, draw, minimum size=8pt] {}}
;
\end{tikzpicture}
\end{document}
Como podéis ver, aunque especifico level distance=1cm
. Mide desde el centro, por lo que "Propósito especial" está demasiado cerca de su padre. Las longitudes de los bordes de "Textual" y "Visual" también son diferentes.
¿Puedo medir la distancia nivelada desde los bordes de modo que la longitud del borde sea de 1 cm independientemente de la longitud del texto?
Este problema es similar aEstablecer la distancia de los nodos entre los bordes en tikzpero ese puesto no es construir árboles.
Respuesta1
Una alternativa es utilizar chains
, que mide de forma predeterminada la distancia entre los bordes de los nodos. La scopes
biblioteca hace que el código sea más limpio cuando tienes muchas ramas.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{chains, scopes}
\begin{document}
\begin{tikzpicture}[start chain, every on chain/.style=join, node distance=10mm and 10mm]
\node [on chain, draw, circle] {PL};
{[start branch=1 going above right]
\node [on chain, draw, circle] {};
}
{[start branch=2 going above left]
\node [on chain, draw, circle] {};
}
{[start branch=3 going below left]
\node [on chain, draw, circle] {};
{[start branch=31 going left]
\node [on chain] {Textual};
}
{[start branch=32 going below]
\node [on chain] {Visual};
}
}
{[start branch=4 going below right]
\node [on chain, draw, circle] {};
{[start branch=41 going right]
\node [on chain] {Special purpose};
}
{[start branch=42 going below]
\node [on chain] {General purpose};
}
}
\end{tikzpicture}
\end{document}
Respuesta2
Esto se debe a que el coorinado utilizado para posicionar los nodos se encuentra en el centro de cada nodo. Puedes cambiar eso usando anchor
:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{trees}
% style definitions
\tikzset{level 1/.style={sibling angle=90,level distance=25mm}}
\begin{document}
\begin{tikzpicture}[grow cyclic,cap=round]
\node[shape=circle, draw, minimum size=12pt] {\large PL}
child {node[shape=circle, draw, minimum size=8pt] {}
[level distance=1cm]
child {node[anchor=east] {Textual}}
child {node[anchor=north] {Visual}}
}
child {node[shape=circle, draw, minimum size=8pt] {}
[level distance=1cm]
child {node[anchor=north] {General-purpose}}
child {node[anchor=west] {Special-purpose}}
}
child {node[shape=circle, draw, minimum size=8pt] {}}
child {node[shape=circle, draw, minimum size=8pt] {}}
;
\end{tikzpicture}
\end{document}