
\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}
Wie Sie sehen, habe ich zwar angegeben level distance=1cm
. Es misst vom Mittelpunkt aus, daher ist „Special-purpose“ zu nah an seinem übergeordneten Element. Die Kantenlängen von „Textual“ und „Visual“ sind ebenfalls unterschiedlich.
Kann ich den waagerechten Randabstand so messen, dass die Randlänge unabhängig von der Textlänge 1cm beträgt?
Dieses Problem ähnelt in gewisser WeiseKnotenabstand zwischen Rändern in Tikz festlegenaber dieser Beitrag baut keine Bäume.
Antwort1
Eine Alternative besteht darin, zu verwenden chains
, das standardmäßig den Abstand zwischen Knotengrenzen misst. Die scopes
Bibliothek macht den Code übersichtlicher, wenn Sie viele Zweige haben.
\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}
Antwort2
Dies liegt daran, dass die zur Positionierung der Knoten verwendete Koordinate in der Mitte jedes Knotens liegt. Sie können dies ändern mit 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}