diff options
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.tex | 179 |
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: |