summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-trees.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-trees.tex')
-rw-r--r--Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-trees.tex179
1 files changed, 179 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-trees.tex b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-trees.tex
new file mode 100644
index 00000000000..f4e6f591c1c
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-trees.tex
@@ -0,0 +1,179 @@
+% Copyright 2006 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Free Documentation License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+
+\section{Tree Library}
+
+\label{section-tree-library}
+
+
+\begin{tikzlibrary}{trees}
+ This packages defines styles to be used when drawing trees.
+\end{tikzlibrary}
+
+\subsection{Growth Functions}
+
+The package |pgflibrarytikztrees| defines two new growth
+functions. They are installed using the following options:
+
+\begin{itemize}
+ \itemoption{grow via three points}|=one child at (|\meta{x}%
+ |) and two children at (|\meta{y}|) and (|\meta{z}|)|
+ This option installs a growth function that works as follows: If a
+ parent node has just one child, this child is placed at \meta{x}. If
+ the parent node has two children, these are placed at \meta{y} and
+ \meta{z}. If the parent node has more than two children, the
+ children are placed at points that are linearly extrapolated from
+ the three points \meta{x}, \meta{y}, and \meta{z}. In detail, the
+ position is $x + \frac{n-1}{2}(y-x) + (c-1)(z-y)$, where $n$ is the
+ number of children and $c$ is the number of the current child
+ (starting with~$1$).
+
+ The net effect of all this is that if you have a certain ``linear
+ arrangement'' in mind and use this option to specify the placement
+ of a single child and of two children, then any number of children
+ will be placed correctly.
+
+ Here are some arrangements based on this growth function. We start
+ with a simple ``above'' arrangement:
+\begin{codeexample}[]
+\begin{tikzpicture}[grow via three points={%
+ one child at (0,1) and two children at (-.5,1) and (.5,1)}]
+ \node at (0,0) {one} child;
+ \node at (0,-1.5) {two} child child;
+ \node at (0,-3) {three} child child child;
+ \node at (0,-4.5) {four} child child child child;
+\end{tikzpicture}
+\end{codeexample}
+
+ The next arrangement places children above, but ``grows only to the
+ right.''
+\begin{codeexample}[]
+\begin{tikzpicture}[grow via three points={%
+ one child at (0,1) and two children at (0,1) and (1,1)}]
+ \node at (0,0) {one} child;
+ \node at (0,-1.5) {two} child child;
+ \node at (0,-3) {three} child child child;
+ \node at (0,-4.5) {four} child child child child;
+\end{tikzpicture}
+\end{codeexample}
+
+ In the final arrangement, the children are placed along a line going
+ down and right.
+\begin{codeexample}[]
+\begin{tikzpicture}[grow via three points={%
+ one child at (-1,-.5) and two children at (-1,-.5) and (0,-.75)}]
+ \node at (0,0) {one} child;
+ \node at (0,-1.5) {two} child child;
+ \node at (0,-3) {three} child child child;
+ \node at (0,-4.5) {four} child child child child;
+\end{tikzpicture}
+\end{codeexample}
+
+ These examples should make it clear how you can create new styles to
+ arrange your children along a line.
+
+ \itemstyle{grow cyclic}
+ This style causes the children to be arranged ``on a circle.'' For
+ this, the children are placed at distance |\tikzleveldistance| from
+ the parent node, but not on a straight line, but points on a
+ circle. Instead of a sibling distance, there is a |sibling angle|
+ that denotes the angle between two given children.
+ \begin{itemize}
+ \itemoption{sibling angle}|=|\meta{angle}
+ Sets the angle between siblings in the |grow cyclic| style.
+ \end{itemize}
+ Note that this function will rotate the coordinate system of the
+ children to ensure that the grandchildren will grow in the right
+ direction.
+\begin{codeexample}[]
+\begin{tikzpicture}[grow cyclic]
+ \tikzstyle{level 1}=[level distance=8mm,sibling angle=60]
+ \tikzstyle{level 2}=[level distance=4mm,sibling angle=45]
+ \tikzstyle{level 3}=[level distance=2mm,sibling angle=30]
+ \coordinate [rotate=-90] % going down
+ child foreach \x in {1,2,3}
+ {child foreach \x in {1,2,3}
+ {child foreach \x in {1,2,3}}};
+\end{tikzpicture}
+\end{codeexample}
+
+ \itemoption{clockwise from}|=|\meta{angle}
+ This option also cuases children to be arranged on a
+ circle. However, the rule for placing children is simpler thatn with
+ the |grow cyclic| style: The first child is placed at
+ \meta{angle} at a distance of |\tikzleveldistance|. The second child
+ is placed at the same distance from the parent, but at angle
+ \meta{angle}${}-{}$|\tikzsiblingangle|. The third child is displaced
+ by another |\tikzsiblingangle| in a clockwise fashion, and so on.
+
+ Note that this function will not rotate the coordinate system.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node {root}
+ [clockwise from=30,sibling angle=30]
+ child {node {$30$}}
+ child {node {$0$}}
+ child {node {$-30$}}
+ child {node {$-60$}};
+\end{tikzpicture}
+\end{codeexample}
+ \itemoption{counterclockwise from}|=|\meta{angle}
+ Works the same way as |clockwise from|, but sibling angles are added
+ instead of subtracted.
+\end{itemize}
+
+\subsection{Edges From Parent}
+
+The following styles can be used to modify how the edges from parents
+are drawn:
+
+\begin{itemize}
+ \itemstyle{edge from parent fork down}
+ This style will draw a line from the parent downwards (for half the
+ level distance) and then on to the child using only horizontal and
+ vertical lines.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node {root}
+ [edge from parent fork down]
+ child {node {left}}
+ child {node {right}
+ child[child anchor=north east] {node {child}}
+ child {node {child}}
+ };
+\end{tikzpicture}
+\end{codeexample}
+ \itemstyle{edge from parent fork right}
+ This style behaves similarly, only it will first draw its edge to
+ the right.
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \node {root}
+ [edge from parent fork right,grow=right]
+ child {node {left}}
+ child {node {right}
+ child {node {child}}
+ child {node {child}}
+ };
+\end{tikzpicture}
+\end{codeexample}
+ \itemstyle{edge from parent fork left}
+ behaves similary.
+ \itemstyle{edge from parent fork up}
+ behaves similary.
+\end{itemize}
+
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "pgfmanual-pdftex-version"
+%%% End: