summaryrefslogtreecommitdiff
path: root/graphics/pgf/base/doc/text-en/pgfmanual-en-library-fit.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/pgf/base/doc/text-en/pgfmanual-en-library-fit.tex
Initial commit
Diffstat (limited to 'graphics/pgf/base/doc/text-en/pgfmanual-en-library-fit.tex')
-rw-r--r--graphics/pgf/base/doc/text-en/pgfmanual-en-library-fit.tex161
1 files changed, 161 insertions, 0 deletions
diff --git a/graphics/pgf/base/doc/text-en/pgfmanual-en-library-fit.tex b/graphics/pgf/base/doc/text-en/pgfmanual-en-library-fit.tex
new file mode 100644
index 0000000000..1e0fbbd8f2
--- /dev/null
+++ b/graphics/pgf/base/doc/text-en/pgfmanual-en-library-fit.tex
@@ -0,0 +1,161 @@
+% 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{Fitting Library}
+\label{section-library-fit}
+
+\begin{tikzlibrary}{fit}
+ The library defines (currently only two) options for fitting a node so that
+ it contains a set of coordinates.
+\end{tikzlibrary}
+
+When you load this library, the following options become available:
+
+\begin{key}{/tikz/fit=\meta{coordinates or nodes}}
+ This option must be given to a |node| path command. The \meta{coordinates
+ or nodes} should be a sequence of \tikzname\ coordinates or node names,
+ one directly after the other without commas (like with the
+ |plot coordinates| path operation). Examples are |(1,0) (2,2)| or
+ |(a) (1,0) (b)|, where |a| and |b| are nodes.
+
+ For this sequence of coordinates, a minimal bounding box is computed that
+ encompasses all the listed \meta{coordinates or nodes}. For coordinates in
+ the list, the bounding box is guaranteed to contain this coordinate, for
+ nodes it is guaranteed to contain the |east|, |west|, |north| and |south|
+ anchors of the node. In principle (the details will be explained in a
+ moment), things are now set up such that the text box of the node will be
+ exactly this bounding box.
+
+ Here is an example: We fit several points in a rectangular node. By setting
+ the |inner sep| to zero, we see exactly the text box of the node. Then we
+ fit these points again in a circular node. Note how the circle encompasses
+ exactly the same bounding box.
+ %
+\begin{codeexample}[]
+\begin{tikzpicture}[inner sep=0pt,thick,
+ dot/.style={fill=blue,circle,minimum size=3pt}]
+ \draw[help lines] (0,0) grid (3,2);
+ \node[dot] (a) at (1,1) {};
+ \node[dot] (b) at (2,2) {};
+ \node[dot] (c) at (1,2) {};
+ \node[dot] (d) at (1.25,0.25) {};
+ \node[dot] (e) at (1.75,1.5) {};
+
+ \node[draw=red, fit=(a) (b) (c) (d) (e)] {box};
+ \node[draw,circle,fit=(a) (b) (c) (d) (e)] {};
+\end{tikzpicture}
+\end{codeexample}
+
+ Every time the |fit| option is used, the following style is also applied to
+ the node:
+ %
+ \begin{stylekey}{/tikz/every fit (initially \normalfont empty)}
+ Set this style to change the appearance of a node that uses the |fit|
+ option.
+ \end{stylekey}
+
+ The exact effects of the |fit| option are the following:
+ %
+ \begin{enumerate}
+ \item A minimal bounding box containing all coordinates is computed.
+ Note that if a coordinate like |(a)| is used that contains a node
+ name, this has the same effect as explicitly providing the
+ |(a.north)| and |(a.south)| and |(a.west)| and |(a.east)|. If you
+ wish to refer only to the center of the |a| node, use |(a.center)|
+ instead.
+ \item The |text width| option is set to the width of this bounding box.
+ \item The |align=center| option is set.
+ \item The |anchor| is set to |center|.
+ \item The |at| position of the node is set to the center of the
+ computed bounding box.
+ \item After the node has been typeset, its height and depth are
+ adjusted such that they add up to the height of the computed
+ bounding box and such that the text of the node is vertically
+ centered inside the box.
+ \end{enumerate}
+ %
+ The above means that, generally speaking, if the node contains text like
+ |box| in the above example, it will be centered inside the box. It will be
+ difficult to put the text elsewhere, in particular, changing the |anchor|
+ of the node will not have the desired effect. Instead, what you should do
+ is to create a node with the |fit| option that does not contain any text,
+ give it a name, and then use normal nodes to add text at the desired
+ positions. Alternatively, consider using the |label| or |pin| options.
+
+ Suppose, for instance, that in the above example we want the word ``box''
+ to appear inside the box, but at its top. This can be achieved as follows:
+ %
+\begin{codeexample}[]
+\begin{tikzpicture}[inner sep=0pt,thick,
+ dot/.style={fill=blue,circle,minimum size=3pt}]
+ \draw[help lines] (0,0) grid (3,2);
+ \node[dot] (a) at (1,1) {};
+ \node[dot] (b) at (2,2) {};
+ \node[dot] (c) at (1,2) {};
+ \node[dot] (d) at (1.25,0.25) {};
+ \node[dot] (e) at (1.75,1.5) {};
+
+ \node[draw=red,fit=(a) (b) (c) (d) (e)] (fit) {};
+ \node[below] at (fit.north) {box};
+\end{tikzpicture}
+\end{codeexample}
+
+ Here is a real-life example that uses fitting:
+ %
+\begin{codeexample}[]
+\begin{tikzpicture}
+ [vertex/.style={minimum size=2pt,fill,draw,circle},
+ open/.style={fill=none},
+ sibling distance=1.5cm,level distance=.75cm,
+ every fit/.style={ellipse,draw,inner sep=-2pt},
+ leaf/.style={label={[name=#1]below:$#1$}},auto]
+
+ \node [vertex] (root) {}
+ child { node [vertex,open] {}
+ child { node [vertex,open] {}
+ child { node [vertex] (b's parent) {}
+ child { node [vertex] {}
+ child { node [vertex,leaf=d] {} }
+ child { node [vertex,leaf=e] {} } }
+ child { node [vertex,leaf=b] {} } }
+ child { node [vertex,leaf=a] {} } }
+ child { node [coordinate] {}
+ child[missing]
+ child { node [vertex] (f's parent) {}
+ child { node [vertex,leaf=c] {} }
+ child { node [vertex,leaf=f] {} } } }
+ edge from parent node {$\rho$} };
+
+ \node [fit=(d) (e) (b) (b's parent),label=above left:$F^{(b,R)}$] {};
+ \node [fit=(c) (f) (f's parent),label=above right:$F^{(c,R)}$] {};
+\end{tikzpicture}
+\end{codeexample}
+ %
+\end{key}
+
+\begin{key}{/tikz/rotate fit=\meta{angle} (initially 0)}
+ This key fits \meta{coordinates or nodes} inside a node that is rotated by
+ \meta{angle}. As a side effect, it also sets the |/tikz/rotate| key.
+ %
+\begin{codeexample}[]
+\begin{tikzpicture}[inner sep=0pt,thick,
+ dot/.style={fill=blue,circle,minimum size=3pt}]
+ \draw[help lines] (0,0) grid (3,2);
+ \node[dot] (a) at (1,1) {};
+ \node[dot] (b) at (2,2) {};
+ \node[dot] (c) at (1,2) {};
+ \node[dot] (d) at (1.25,0.25) {};
+ \node[dot] (e) at (1.75,1.5) {};
+ \node[draw, fit=(a) (b) (c) (d) (e)] {};
+ \node[draw=red, rotate fit=30, fit=(a) (b) (c) (d) (e)] {};
+\end{tikzpicture}
+\end{codeexample}
+ %
+\end{key}