summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-mindmaps.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-mindmaps.tex')
-rw-r--r--Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-mindmaps.tex489
1 files changed, 489 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-mindmaps.tex b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-mindmaps.tex
new file mode 100644
index 00000000000..102fd8b41e5
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-mindmaps.tex
@@ -0,0 +1,489 @@
+% 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{Mindmap Drawing Library}
+
+\begin{tikzlibrary}{mindmap}
+ This packages provides styles for drawing mindmap diagrams.
+\end{tikzlibrary}
+
+\subsection{Overview}
+
+This library is intended to make the creation of mindmaps easier. A
+\emph{mindmap} is a graphical representation of a concept together
+with related concepts and annotations. Mindmaps are, essentially,
+trees, possibly with a few extra edges added, but they are usually
+drawn in a special way: The root concept is placed in the middle of
+the page and is drawn as a huge circle, ellipse, or cloud. The related
+concepts then ``leave'' this root concept in branch-like tendrils.
+
+The mindmap library of \tikzname\ produces mindmaps that look a bit
+different from the standard mindmaps: While the big root concept is
+still a circle, related concepts are also depicted as (smaller)
+circles. The related concepts are linked to the root concept via
+organic-looking connections. The overall effect is visually rather
+pleasing, but readers may not immediately think of a mindmap when they
+see a picture created with this library.
+
+Although it is not strictly necessary, you will usually create
+mindmaps using \tikzname's tree mechanism and some of the styles and
+macros of the package work best when used inside trees. However, it is
+still possible and sometimes necessary to treat parts of a mindmap as
+a graph with arbitrary edges and this is also possible.
+
+
+\subsection{The Mindmap Style}
+
+Every mindmap should be put in a scope or a picture where the
+|mindmap| style is used. This style installs some internal settings.
+
+\begin{itemize}
+ \itemstyle{mindmap}
+ Use this style with all pictures or at least scopes that contain a
+ mindmap. It installs a whole bunch of settings that are useful for
+ drawing mindmaps.
+\begin{codeexample}[]
+\tikz[mindmap,concept color=red!50]
+ \node [concept] {Root concept}
+ child[grow=right] {node[concept] {Child concept}};
+\end{codeexample}
+ The sizes of concepts are predefined in such a way that a
+ medium-size mindmap will fit on an A4 page (more or less).
+ \itemstyle{every mindmap}
+ This style is included by the |mindmap| style. Change this style to
+ add special settings to your mindmaps.
+\begin{codeexample}[]
+\tikz[large mindmap,concept color=red!50]
+ \node [concept] {Root concept}
+ child[grow=right] {node[concept] {Child concept}};
+\end{codeexample}
+ \itemstyle{large mindmap}
+ This style includes the |mindmap| style, but additionally changes
+ the default size of concepts and of distances so that a medium-sized
+ mindmap will fit on an A3 page (A3 pages are twice as large as A4
+ pages).
+ \itemstyle{huge mindmap}
+ This style causes conepts to be even bigger and it is best used with
+ A2 paper and above.
+\end{itemize}
+
+\subsection{Concepts Nodes}
+
+The basic entities of mindmaps are called \emph{concepts} in
+\tikzname. A concept is a node of style |concept| and it must be
+circular for some of the connection macros to work.
+
+
+\subsubsection{Isolated Concepts}
+
+The following styles influence how isolated concepts are rendered:
+
+\begin{itemize}
+ \itemstyle{concept}
+ This style should be used with all nodes that are concepts, although
+ some styles like |extra concept| install this style automatically.
+
+ Bascially, this style makes the concept node circular and installs a
+ uniform color called |concept color|, see below. Additionally, the
+ style |every concept| is called.
+\begin{codeexample}[]
+\tikz[mindmap,concept color=red!50] \node [concept] {Some concept};
+\end{codeexample}
+ \itemstyle{every concept}
+ In order to change the appearance of concept nodes, you should
+ change this style. Note, however, that the color of a concept should
+ be uniform for some of the connection bar stuff to work, so you
+ should not change the color or the draw/fill state of concepts using
+ this option. It is mostly useful for changing the text color and
+ font.
+ \itemoption{concept color}|=|\meta{color}
+ This option tells \tikzname\ which color should be used for filling
+ and stroking concepts. The difference between this option and just
+ setting |every concept| to the desired color is that this option
+ allows \tikzname\ to keep track of the colors used for
+ concepts. This is important when you \emph{change} the color between
+ two connected concepts. In this case, \tikzname\ can automatically
+ create a shading that provides a smooth transition between the old
+ and the new concept color; we will come back to this in the next
+ section.
+ \itemstyle{extra concept}
+ This style is intended for concepts that are not part of the
+ ``mindmap tree,'' but stand beside it. Typically, they will have a
+ subdued color are be smaller. In order to have these concepts appear
+ in a uniform way and in order to indicate in the code that these
+ concepts are extra, you can use this style.
+\begin{codeexample}[]
+\begin{tikzpicture}[mindmap,concept color=blue!80]
+ \node [concept] {Root concept};
+ \node [extra concept] at (10,0) {extra concept};
+\end{tikzpicture}
+\end{codeexample}
+ \itemstyle{every extra concept}
+ Change this style to change the appearance of extra concepts.
+\end{itemize}
+
+
+\subsubsection{Concepts in Trees}
+
+As pointed out earlier, \tikzname\ assumes that your mindmap is build
+using the |child| facilities of \tikzname. There are numerous options
+that influence how concepts are rendered at the different levels of a
+tree.
+
+\begin{itemize}
+ \itemstyle{root concept}
+ This style is used for the roots of mindmap trees. More precisely,
+ this style is included by the |mindmap| style. Thus, by adding
+ something to this, you can change how the root of a mindmap will be
+ rendered.
+\begin{codeexample}[]
+\tikzstyle{root concept}+=[concept color=blue!80,minimum size=3.5cm]
+\tikz[mindmap] \node [concept] {Root concept};
+\end{codeexample}
+
+ Note that styles like |large mindmap| redefine these styles, so you
+ should add something to this style only inside the picture.
+ \itemstyle{level 1 concept}
+ The |mindmap| style adds this style to the |level 1| style. This
+ means that the first level children of a mindmap tree will use this
+ style.
+\begin{codeexample}[]
+\tikzstyle{root concept}+=[concept color=blue!80]
+\tikzstyle{level 1 concept}+=[concept color=red!50]
+\tikz[mindmap]
+ \node [concept] {Root concept}
+ child[grow=30] {node[concept] {child}}
+ child[grow=0 ] {node[concept] {child}};
+\end{codeexample}
+ \itemstyle{level 2 concept}
+ works like |level 1 concept|, only for second level children.
+ \itemstyle{level 3 concept}
+ works like |level 1 concept|.
+ \itemstyle{level 4 concept}
+ works like |level 1 concept|. Note that there are not fifth and
+ higher level styles, you need to modify |level 5| directly in such
+ cases.
+
+ \itemoption{concept color}|=|\meta{color}
+ We saw already that this option is used to change the color of
+ concepts. We now have a look at its effect when used on child nodes
+ of a concept. Normally, this option simply changes the color of the
+ children. However, when the option is given as an option to the
+ |child| operation (and not to the |node| operation and also not as
+ an option to all children via the |level 1| style), \tikzname\ will
+ smoothly change the concept color from the parent's color to the
+ color of the child concept.
+
+ Here is an example:
+\begin{codeexample}[]
+\tikz[mindmap,concept color=blue!80]
+ \node [concept] {Root concept}
+ child[concept color=red,grow=30] {node[concept] {Child concept}}
+ child[concept color=orange,grow=0] {node[concept] {Child concept}};
+\end{codeexample}
+
+ In order to have all children of a certain level have a different
+ concept color, a tiny bit of magic is needed:
+\begin{codeexample}[]
+\tikzstyle{root concept}+=[concept color=blue]
+\tikzstyle{level 1 concept}+=[set style={{every child}=[concept color=blue!50]}]
+\tikz[mindmap,text=white]
+ \node [concept] {Root concept}
+ child[grow=30] {node[concept] {child}}
+ child[grow=0 ] {node[concept] {child}};
+\end{codeexample}
+\end{itemize}
+
+\subsection{Connecting Concepts}
+
+\subsubsection{Simple Connections}
+
+The easiest way to connect two concepts is to draw a line between
+them. In order to give such lines a consistent appearance, it is
+recommendable to use the following style when drawing such lines:
+
+\begin{itemize}
+ \itemstyle{concept connection}
+ This style can be used for lines between two concepts. Feel free to
+ redefine this style.
+\end{itemize}
+
+A problem arises when you need to connect concepts after the main
+mindmap has been drawn. In this case you will want the connection
+lines to lie \emph{behind} the main mindmap. However, you can draw the
+lines only after the coordinates of the concepts have been
+determined. In this case you should place the connecting lines on a
+background layer as in the following example:
+
+\begin{codeexample}[]
+\tikzstyle{root concept}+=[concept color=blue!20,minimum size=2cm]
+\tikzstyle{level 1 concept}+=[sibling angle=45]
+\begin{tikzpicture}[mindmap]
+ \node [concept] {Root concept}
+ [clockwise from=45]
+ child { node[concept] (c1) {child}}
+ child { node[concept] (c2) {child}}
+ child { node[concept] (c3) {child}};
+ \begin{pgfonlayer}{background}
+ \draw [concept connection] (c1) edge (c2)
+ edge (c3)
+ (c2) edge (c3);
+ \end{pgfonlayer}
+\end{tikzpicture}
+\end{codeexample}
+
+
+\subsubsection{The Circle Connection Bar Snake}
+
+Instead of a simple line between two concepts, you can also add a bar
+between the two nodes that has slightly organic ends. These bars are
+also used by default as the edges from parents in the mindmap tree.
+
+For the drawing of the bars a special snake is used, which is defined
+in the mindmap library:
+
+\begin{snake}{circle connection bar}
+ This snake can be used to connect two circles. The start of the
+ snake should lie on the border of the first circle, the end should
+ lie on the border of the second circle. The following two macros should be
+ initialized with the sizes of the circles:
+ \begin{itemize}
+ \item |\pgfsnakecirclestartradius|
+ \item |\pgfsnakecircleendradius|
+ \end{itemize}
+ Furthermore, the following two macros influence the snake:
+ \begin{itemize}
+ \item |\pgfsnakesegmentamplitude|
+ \item |\pgfsnakesegmentangle|
+ \end{itemize}
+ The snake itself will be a path that starts on the border of the
+ first circle at the specified angle relative to the line connecting
+ the centers of the circles. The path then changes into a rectangle
+ whose thickness is given by the amplitude. Finally, the path ends
+ with the same angles on the second circle.
+
+ Here is an example that should make this clearer:
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \fill[blue!20] (0,0) circle (1cm);
+ \fill[red!20] (2.5,0) circle (.5cm);
+
+ \def\pgfsnakecirclestartradius{1cm}
+ \def\pgfsnakecircleendradius{.5cm}
+ \def\pgfsnakesegmentamplitude{2mm}
+ \def\pgfsnakesegmentangle{30}
+
+ \filldraw [draw=red,fill=black,snake=circle connection bar] (1,0) -- (2,0);
+\end{tikzpicture}
+\end{codeexample}
+
+ As can be seen, the snake consists of three parts and is not really
+ useful for drawing. However, if you fill the snake only and if you
+ use the same color as for the circles, the result is better.
+\begin{codeexample}[]
+\begin{tikzpicture}[blue!50]
+ \fill (0,0) circle (1cm);
+ \fill (2.5,0) circle (.5cm);
+
+ \def\pgfsnakecirclestartradius{1cm}
+ \def\pgfsnakecircleendradius{.5cm}
+ \def\pgfsnakesegmentamplitude{2mm}
+ \def\pgfsnakesegmentangle{30}
+
+ \fill [snake=circle connection bar] (1,0) -- (2,0);
+\end{tikzpicture}
+\end{codeexample}
+
+ In the above example you may notice the small white line between the
+ circles and the snake. This is due to rounding
+ errors. Unfortunately, for larger distances, there errors can
+ accumulate quite strongly, especially since \tikzname\ and \TeX\ are
+ not very good at computing square roots. For this reason, it is a
+ good idea to make the circles slightly larger to cover up such
+ problems. When using nodes of shape |circle|, you can just add the
+ |draw| option with a |line width| or one or two points (for very
+ large distances you may need line width up to 4pt).
+\begin{codeexample}[]
+\begin{tikzpicture}[blue!50]
+ \fill (0,0) circle (1cm+1pt);
+ \fill (2.4,0) circle (.5cm+1pt);
+
+ \def\pgfsnakecirclestartradius{1cm}
+ \def\pgfsnakecircleendradius{.5cm}
+ \def\pgfsnakesegmentamplitude{2mm}
+ \def\pgfsnakesegmentangle{30}
+
+ \fill [snake=circle connection bar] (1,0) -- (1.9,0);
+\end{tikzpicture}
+\end{codeexample}
+
+ Note the slightly strange |outer sep=0pt|. This is needed so that
+ the snakes being on the border of the filled circle, not on the
+ border of the stroked circle (which is slightly larger and this
+ slightly larger size is exactly what we wish to use to cover up the
+ rounding errors).
+\end{snake}
+
+
+
+\subsubsection{The Circle Connection Bar To-Path}
+
+The circle connection bar snake is a bit complicated to
+use. Especially specifying the radii is quite bothersome (the
+amplitude and the angle can be set once and for all). For this reason,
+the mindmap library defines a special to-path, that performs the
+necessary computations for you.
+
+\begin{itemize}
+ \itemstyle{circle connection bar}
+ This style installs a rather involved to-path. Unlike normal
+ to-paths, this path requires that the start and the target of the
+ to-path are named nodes of shape |circle| -- if this is not the case,
+ this path will produce errors.
+
+ Assuming that the start and the target are circles, the to-path will
+ first compute the radii of these circles (by measuring the distance
+ from the |center| anchor to some anchor on the border) and will set
+ the |\pgfsnakecirlce...| macros accordingly. Next, the |fill| option
+ is set to the |concept color| while |draw=none| is set. The snake is
+ set to |circle conncetion bar|. Finally, the following style is
+ included:
+ \begin{itemize}
+ \itemstyle{every circle connection bar}
+ Redefine this sytle to change the appearance of circle connection
+ bar to-paths.
+ \end{itemize}
+\begin{codeexample}[]
+\begin{tikzpicture}[concept color=blue!50,blue!50,outer sep=0pt]
+ \node (n1) at (0,0) [circle,minimum size=2cm,fill,draw,thick] {};
+ \node (n2) at (2.5,0) [circle,minimum size=1cm,fill,draw,thick] {};
+
+ \path (n1) to[circle connection bar] (n2);
+\end{tikzpicture}
+\end{codeexample}
+ Note that it is not a good idea to have more than one |to| operation
+ together this the option |circle connection bar| in a single
+ |\path|. Use the |edge| operation, instead, for creating multiple
+ connections and this operation creates a new scope for each edge.
+\end{itemize}
+
+In a mindmap we sometimes want colors to change from one concept color
+to another. Then, the connection bar should, ideally, consist of a
+smooth transition between these two colors. Getting this right using
+shadings is a bit tricky if you try this ``by hand,'' so the mindmap
+library provides a special option for facilitating this procedure.
+
+\begin{itemize}
+ \itemoption{circle connection bar switch color}|=from (|\meta{first
+ color}|) to (|\meta{second color}|)|
+ This style works similarly to the |circle connection bar|. The only
+ difference is that instead of filling the path with a single color a
+ shading is used.
+\begin{codeexample}[]
+\begin{tikzpicture}[outer sep=0pt]
+ \node (n1) at (0,0) [circle,minimum size=2cm,fill,draw,thick,red] {};
+ \node (n2) at (30:2.5) [circle,minimum size=1cm,fill,draw,thick,blue] {};
+
+ \path (n1) to[circle connection bar switch color=from (red) to (blue)] (n2);
+\end{tikzpicture}
+\end{codeexample}
+\end{itemize}
+
+
+\subsubsection{Tree Edges}
+
+Most of the time, concepts in a mindmap are connected automatically
+when the mindmap is build as a tree. The reason is that the |mindmap|
+installs a |circle connection bar| path as the edge from parent
+path. Also, the |mindmap| option takes care of things like setting the
+correct |draw| and |outer sep| settings and some other stuff.
+
+In detail, the |mindmap| option sets the |edge from parent path| to a
+path that uses the to-path |circle connection bar| to connect the parent node
+and the child node. The |concept color| option (locally) changes this
+by using |circle connection bar switch color| instead with the
+from-color set to the old (parent's) concept color and the to-color
+set to the new (child's) concept color. This menas that when you
+provide the |concept color| option to a |child| command, the color
+will change from the parent's concept color to the specified color.
+
+Here is an example of a tree build in this way:
+
+\begin{codeexample}[]
+\begin{tikzpicture}
+ \path[mindmap,concept color=black,text=white]
+ node[concept] {Computer Science}
+ [clockwise from=0]
+ child[concept color=green!50!black] {
+ node[concept] {practical}
+ [clockwise from=90]
+ child { node[concept] {algorithms} }
+ child { node[concept] {data structures} }
+ child { node[concept] {pro\-gramming languages} }
+ child { node[concept] {software engineer\-ing} }
+ }
+ child[concept color=blue] {
+ node[concept] {applied}
+ [clockwise from=-30]
+ child { node[concept] {databases} }
+ child { node[concept] {WWW} }
+ }
+ child[concept color=red] { node[concept] {technical} }
+ child[concept color=orange] { node[concept] {theoretical} };
+\end{tikzpicture}
+\end{codeexample}
+
+
+
+\subsection{Adding Annotations}
+
+An \emph{annotation} is some text outside a mindmap that, unlike an
+extra concept, simply explains something in the mindmap. The following
+style is mainly intended to help readers of the code see that a node
+in an annotation node.
+
+\begin{itemize}
+ \itemstyle{annotation}
+ This style indicates that a node is an annotation node. It includes
+ the style |every annotation|, which allows you to change this style
+ in a convenient fashion.
+\begin{codeexample}[]
+\tikzstyle{every annotation}=[fill=red!20]
+\begin{tikzpicture}[mindmap,concept color=blue!80]
+ \node [concept] (root) {Root concept};
+
+ \node [annotation,right] at (root.east)
+ {The root concept is, in general, the most important concept.};
+\end{tikzpicture}
+\end{codeexample}
+ \itemstyle{every annotation}
+ This style is included by |annotation|.
+\end{itemize}
+
+
+\subsection{Examples}
+
+The following pictures show examples of more complicated mindmaps that
+have been created using the mindmap library. Note that these mindmaps
+should be printed on A1 paper.
+
+\medskip
+\noindent
+\pgfimage[width=\textwidth]{pgfmanual-mindmap-1}
+
+\medskip
+\noindent
+\pgfimage[width=\textwidth]{pgfmanual-mindmap-2}
+
+
+
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "pgfmanual-pdftex-version"
+%%% End: