diff options
Diffstat (limited to 'Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-paths.tex')
-rw-r--r-- | Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-paths.tex | 1598 |
1 files changed, 820 insertions, 778 deletions
diff --git a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-paths.tex b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-paths.tex index 02456c9c869..340a5cef081 100644 --- a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-paths.tex +++ b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-paths.tex @@ -7,104 +7,111 @@ % % See the file doc/generic/pgf/licenses/LICENSE for more details. + \section{Syntax for Path Specifications} \label{section-paths} -A \emph{path} is a series of straight and curved line segments. It is -specified following a |\path| command and the specification must -follow a special syntax, which is described in the subsections of the -present section. - +A \emph{path} is a series of straight and curved line segments. It is specified +following a |\path| command and the specification must follow a special syntax, +which is described in the subsections of the present section. \begin{command}{\path\meta{specification}|;|} - This command is available only inside a |{tikzpicture}| environment. - - The \meta{specification} is a long stream of \emph{path - operations}. Most of these path operations tell \tikzname\ how the path - is built. For example, when you write |--(0,0)|, you use a - \emph{line-to operation} and it means ``continue the path from - wherever you are to the origin.'' - - At any point where \tikzname\ expects a path operation, you can also - give some graphic options, which is a list of options in brackets, - such as |[rounded corners]|. These options can have different - effects: - \begin{enumerate} - \item - Some options take ``immediate'' effect and apply to all subsequent - path operations on the path. For example, the |rounded corners| - option will round all following corners, but not the corners - ``before'' and if the |sharp corners| is given later on the path - (in a new set of brackets), the rounding effect will end. - + This command is available only inside a |{tikzpicture}| environment. + + The \meta{specification} is a long stream of \emph{path operations}. Most + of these path operations tell \tikzname\ how the path is built. For + example, when you write |--(0,0)|, you use a \emph{line-to operation} and + it means ``continue the path from wherever you are to the origin''. + + At any point where \tikzname\ expects a path operation, you can also give + some graphic options, which is a list of options in brackets, such as + |[rounded corners]|. These options can have different effects: + % + \begin{enumerate} + \item Some options take ``immediate'' effect and apply to all + subsequent path operations on the path. For example, the + |rounded corners| option will round all following corners, but not + the corners ``before'' and if the |sharp corners| is given later on + the path (in a new set of brackets), the rounding effect will end. + % \begin{codeexample}[] \tikz \draw (0,0) -- (1,1) [rounded corners] -- (2,0) -- (3,1) [sharp corners] -- (3,0) -- (2,1); \end{codeexample} - Another example are the transformation options, which also apply - only to subsequent coordinates. - \item - The options that have immediate effect can be ``scoped'' by - putting part of a path in curly braces. For example, the above - example could also be written as follows: - + % + Another example are the transformation options, which also apply + only to subsequent coordinates. + \item The options that have immediate effect can be ``scoped'' by + putting part of a path in curly braces. For example, the above + example could also be written as follows: + % \begin{codeexample}[] \tikz \draw (0,0) -- (1,1) {[rounded corners] -- (2,0) -- (3,1)} -- (3,0) -- (2,1); \end{codeexample} - \item - Some options only apply to the path as a whole. For example, the - |color=| option for determining the color used for, say, drawing - the path always applies to all parts of the path. If several - different colors are given for different parts of the path, only - the last one (on the outermost scope) ``wins'': - + % + \item Some options only apply to the path as a whole. For example, + the |color=| option for determining the color used for, say, + drawing the path always applies to all parts of the path. If + several different colors are given for different parts of the + path, only the last one (on the outermost scope) ``wins'': + % \begin{codeexample}[] \tikz \draw (0,0) -- (1,1) [color=red] -- (2,0) -- (3,1) [color=blue] -- (3,0) -- (2,1); \end{codeexample} - Most options are of this type. In the above example, we would have - had to ``split up'' the path into several |\path| commands: + Most options are of this type. In the above example, we would + have had to ``split up'' the path into several |\path| commands: + % \begin{codeexample}[] \tikz{\draw (0,0) -- (1,1); \draw [color=red] (2,0) -- (3,1); \draw [color=blue] (3,0) -- (2,1);} \end{codeexample} - \end{enumerate} - - By default, the |\path| command does ``nothing'' with the - path, it just ``throws it away.'' Thus, if you write - |\path(0,0)--(1,1);|, nothing is drawn - in your picture. The only effect is that the area occupied by the - picture is (possibly) enlarged so that the path fits inside the - area. To actually ``do'' something with the path, an option like - |draw| or |fill| must be given somewhere on the path. Commands like - |\draw| do this implicitly. - - Finally, it is also possible to give \emph{node specifications} on a - path. Such specifications can come at different locations, but they - are always allowed when a normal path operation could follow. A node - specification starts with |node|. Basically, the effect is to - typeset the node's text as normal \TeX\ text and to place - it at the ``current location'' on the path. The details are explained - in Section~\ref{section-nodes}. - - Note, however, that the nodes are \emph{not} part of the path in any - way. Rather, after everything has been done with the path what is - specified by the path options (like filling and drawing the path due - to a |fill| and a |draw| option somewhere in the - \meta{specification}), the nodes are added in a post-processing - step. - - The following style influences scopes: - \begin{stylekey}{/tikz/every path (initially \normalfont empty)} - This style is installed at the beginning of every path. This can - be useful for (temporarily) adding, say, the |draw| option to - everything in a scope. + \end{enumerate} + + By default, the |\path| command does ``nothing'' with the path, it just + ``throws it away''. Thus, if you write |\path(0,0)--(1,1);|, nothing is + drawn in your picture. The only effect is that the area occupied by the + picture is (possibly) enlarged so that the path fits inside the area. To + actually ``do'' something with the path, an option like |draw| or |fill| + must be given somewhere on the path. Commands like |\draw| do this + implicitly. + + Finally, it is also possible to give \emph{node specifications} on a path. + Such specifications can come at different locations, but they are always + allowed when a normal path operation could follow. A node specification + starts with |node|. Basically, the effect is to typeset the node's text as + normal \TeX\ text and to place it at the ``current location'' on the path. + The details are explained in Section~\ref{section-nodes}. + + Note, however, that the nodes are \emph{not} part of the path in any way. + Rather, after everything has been done with the path what is specified by + the path options (like filling and drawing the path due to a |fill| and a + |draw| option somewhere in the \meta{specification}), the nodes are added + in a post-processing step. + + \begin{key}{/tikz/name=\meta{path name}} + Assigns a name to the path for reference (specifically, for reference + in animations; for reference in intersections, use the |name path| + command, which has a different purpose, see the |intersections| library + for details). Since the name is a ``high-level'' name (drivers never + know of it), you can use spaces, number, letters, or whatever you like + when naming a path, but the name may \emph{not} contain any punctuation + like a dot, a comma, or a colon. + \end{key} + + The following style influences scopes: + % + \begin{stylekey}{/tikz/every path (initially \normalfont empty)} + This style is installed at the beginning of every path. This can be + useful for (temporarily) adding, say, the |draw| option to everything + in a scope. + % \begin{codeexample}[] \begin{tikzpicture} [fill=yellow!80!black, % only sets the color @@ -113,92 +120,89 @@ present section. \shade (2,0) rectangle +(1,1); \end{tikzpicture} \end{codeexample} - \end{stylekey} - + \end{stylekey} \end{command} - \begin{key}{/tikz/insert path=\meta{path}} - This key can be used inside an option to add something to the - current path. This is mostly useful for defining styles that create - graphic contents. This option should be used with care, for instance - it should not be used as an argument of, say, a |node|. In the - following example, we use a style to add little circles to a path. + This key can be used inside an option to add something to the current path. + This is mostly useful for defining styles that create graphic contents. + This option should be used with care, for instance it should not be used as + an argument of, say, a |node|. In the following example, we use a style to + add little circles to a path. + % \begin{codeexample}[] \tikz [c/.style={insert path={circle[radius=2pt]}}] \draw (0,0) -- (1,1) [c] -- (3,2) [c]; \end{codeexample} - The effect is the same as of - |(0,0) -- (1,1) circle[radius=2pt] -- (3,2) circle[radius=2pt]|. + % + The effect is the same as of + |(0,0) -- (1,1) circle[radius=2pt] -- (3,2) circle[radius=2pt]|. \end{key} The following options are for experts only: \begin{key}{/tikz/append after command=\meta{path}} - Some of the path commands described in the following sections take - optional arguments. For these commands, when you use this key inside - these options, the \meta{path} will be inserted \emph{after} the - path command is done. For instance, when you give this command in - the option list of a node, the \meta{path} will be added after the - node. This is used by, for instance, the |label| option to allow you - to specify a label in the option list of a node, but have this - |label| cause a node to be added after another node. + Some of the path commands described in the following sections take optional + arguments. For these commands, when you use this key inside these options, + the \meta{path} will be inserted \emph{after} the path command is done. For + instance, when you give this command in the option list of a node, the + \meta{path} will be added after the node. This is used by, for instance, + the |label| option to allow you to specify a label in the option list of a + node, but have this |label| cause a node to be added after another node. + % \begin{codeexample}[] \tikz \draw node [append after command={(foo)--(1,1)},draw] (foo){foo}; \end{codeexample} - If this key is called multiple times, the effects accumulate, that - is, all of the paths are added in the order to keys were found. + % + If this key is called multiple times, the effects accumulate, that is, all + of the paths are added in the order to keys were found. \end{key} \begin{key}{/tikz/prefix after command=\meta{path}} - Works like |append after command|, only the accumulation order is - inverse: The \meta{path} is added before any earlier paths added - using either |append after command| or |prefix after command|. + Works like |append after command|, only the accumulation order is inverse: + The \meta{path} is added before any earlier paths added using either + |append after command| or |prefix after command|. \end{key} - \subsection{The Move-To Operation} -The perhaps simplest operation is the move-to operation, which is -specified by just giving a coordinate where a path operation is -expected. +The perhaps simplest operation is the move-to operation, which is specified by +just giving a coordinate where a path operation is expected. \begin{pathoperation}[noindex]{}{\meta{coordinate}} - \index{empty@\protect\meta{empty} path operation}% - \index{Path operations!empty@\protect\texttt{\meta{empty}}}% - The move-to operation normally starts a path at a certain - point. This does not cause a line segment to be created, but it - specifies the starting point of the next segment. If a path is - already under construction, that is, if several segments have - already been created, a move-to operation will start a new part of the - path that is not connected to any of the previous segments. - + \index{empty@\protect\meta{empty} path operation}% + \index{Path operations!empty@\protect\texttt{\meta{empty}}}% + The move-to operation normally starts a path at a certain point. This does + not cause a line segment to be created, but it specifies the starting point + of the next segment. If a path is already under construction, that is, if + several segments have already been created, a move-to operation will start + a new part of the path that is not connected to any of the previous + segments. + % \begin{codeexample}[] \begin{tikzpicture} \draw (0,0) --(2,0) (0,1) --(2,1); \end{tikzpicture} \end{codeexample} - In the specification |(0,0) --(2,0) (0,1) --(2,1)| two move-to - operations are specified: |(0,0)| and |(0,1)|. The other two - operations, namely |--(2,0)| and |--(2,1)| are line-to operations, - described next. + In the specification |(0,0) --(2,0) (0,1) --(2,1)| two move-to operations + are specified: |(0,0)| and |(0,1)|. The other two operations, namely + |--(2,0)| and |--(2,1)| are line-to operations, described next. \end{pathoperation} -There is special coordinate called |current subpath start| that is -always at the position of the last move-to operation on the current -path. - +There is special coordinate called |current subpath start| that is always at +the position of the last move-to operation on the current path. +% \begin{codeexample}[] \tikz [line width=2mm] \draw (0,0) -- (1,0) -- (1,1) -- (0,1) -- (current subpath start); \end{codeexample} -Note how in the above example the path is not closed (as |--cycle| -would do). Rather, the line just starts and ends at the origin without -being a closed path. +Note how in the above example the path is not closed (as |--cycle| would do). +Rather, the line just starts and ends at the origin without being a closed +path. \subsection{The Line-To Operation} @@ -206,20 +210,20 @@ being a closed path. \subsubsection{Straight Lines} \begin{pathoperation}{--}{\meta{coordinate or cycle}} - The line-to operation extends the current path from the current - point in a straight line to the given \meta{coordinate} (the ``or - cycle'' part is explained in a moment). The ``current - point'' is the endpoint of the previous drawing operation or the point - specified by a prior move-to operation. - - When a line-to operation is used and some path segment has just been - constructed, for example by another line-to operation, the two line - segments become joined. This means that if they are drawn, the point - where they meet is ``joined'' smoothly. To appreciate the difference, - consider the following two examples: In the left example, the path - consists of two path segments that are not joined, but they happen to - share a point, while in the right example a smooth join is shown. - + The line-to operation extends the current path from the current point in a + straight line to the given \meta{coordinate} (the ``or cycle'' part is + explained in a moment). The ``current point'' is the endpoint of the + previous drawing operation or the point specified by a prior move-to + operation. + + When a line-to operation is used and some path segment has just been + constructed, for example by another line-to operation, the two line + segments become joined. This means that if they are drawn, the point where + they meet is ``joined'' smoothly. To appreciate the difference, consider + the following two examples: In the left example, the path consists of two + path segments that are not joined, but they happen to share a point, while + in the right example a smooth join is shown. + % \begin{codeexample}[] \begin{tikzpicture}[line width=10pt] \draw (0,0) --(1,1) (1,1) --(2,0); @@ -228,18 +232,17 @@ being a closed path. \end{tikzpicture} \end{codeexample} - Instead of a coordinate following the two minus signs, you can also - use the text |cycle|. This causes the straight line from the current - point to go to the last point specified by a move-to operation. Note - that this need not be the beginning of the path. Furthermore, a - smooth join is created between the first segment created after the - last move-to operation and the straight line appended by the cycle - operation. - - Consider the following example. In the left example, two triangles are - created using three straight lines, but they are not joined at the - ends. In the second example cycle operations are used. - + Instead of a coordinate following the two minus signs, you can also use the + text |cycle|. This causes the straight line from the current point to go to + the last point specified by a move-to operation. Note that this need not be + the beginning of the path. Furthermore, a smooth join is created between + the first segment created after the last move-to operation and the straight + line appended by the cycle operation. + + Consider the following example. In the left example, two triangles are + created using three straight lines, but they are not joined at the ends. In + the second example cycle operations are used. + % \begin{codeexample}[] \begin{tikzpicture}[line width=10pt] \draw (0,0) -- (1,1) -- (1,0) -- (0,0) (2,0) -- (3,1) -- (3,0) -- (2,0); @@ -247,31 +250,31 @@ being a closed path. \useasboundingbox (0,1.5); % make bounding box higher \end{tikzpicture} \end{codeexample} + % \end{pathoperation} -Writing |cycle| instead of a coordinate at the end of a path operation -is possible with all path operations that end with a coordinate (such -as |--| or |..| or |sin| or |grid|, but not |graph| or |plot|). -In all cases, the effect is that the coordinate of the last moveto is -used as the coordinate expected by the path operation and that a -smooth join is added. (What actually happens that the text |cycle| -used with any path operation other than |--| gets replaced by +Writing |cycle| instead of a coordinate at the end of a path operation is +possible with all path operations that end with a coordinate (such as |--| or +|..| or |sin| or |grid|, but not |graph| or |plot|). In all cases, the effect +is that the coordinate of the last moveto is used as the coordinate expected by +the path operation and that a smooth join is added. (What actually happens that +the text |cycle| used with any path operation other than |--| gets replaced by |(current subpath start)--cycle|.) \subsubsection{Horizontal and Vertical Lines} -Sometimes you want to connect two points via straight lines that are -only horizontal and vertical. For this, you can use two path -construction operations. +Sometimes you want to connect two points via straight lines that are only +horizontal and vertical. For this, you can use two path construction +operations. {\catcode`\|=12 \begin{pathoperation}[noindex]{-|}{\meta{coordinate or cycle}} - \index{--1@\protect\texttt{-\protect\pgfmanualbar} path operation}% - \index{Path operations!--1@\protect\texttt{-\protect\pgfmanualbar}}% - \pgfmanualpdflabel[\catcode`\|=12 ]{-|}{}% - This operation means ``first horizontal, then vertical.'' - + \index{--1@\protect\texttt{-\protect\pgfmanualbar} path operation}% + \index{Path operations!--1@\protect\texttt{-\protect\pgfmanualbar}}% + \pgfmanualpdflabel[\catcode`\|=12 ]{-|}{}% + This operation means ``first horizontal, then vertical''. + % \begin{codeexample}[] \begin{tikzpicture} \draw (0,0) node(a) [draw] {A} (1,1) node(b) [draw] {B}; @@ -279,44 +282,44 @@ construction operations. \draw[color=red] (a.east) -| (2,1.5) -| (b.north); \end{tikzpicture} \end{codeexample} - Instead of a coordinate you can also write \verb!cycle! to close the - path: + % + Instead of a coordinate you can also write \verb!cycle! to close the path: + % \begin{codeexample}[] \begin{tikzpicture}[ultra thick] \draw (0,0) -- (1,1) -| cycle; \end{tikzpicture} \end{codeexample} \end{pathoperation} + \begin{pathoperation}[noindex]{|-}{\meta{coordinate or cycle}} - \index{--2@\protect\texttt{\protect\pgfmanualbar-} path operation}% - \index{Path operations!--2@\protect\texttt{\protect\pgfmanualbar-}}% - \pgfmanualpdflabel[\catcode`\|=12 ]{|-}{}% - This operations means ``first vertical, then horizontal.'' + \index{--2@\protect\texttt{\protect\pgfmanualbar-} path operation}% + \index{Path operations!--2@\protect\texttt{\protect\pgfmanualbar-}}% + \pgfmanualpdflabel[\catcode`\|=12 ]{|-}{}% + This operations means ``first vertical, then horizontal''. \end{pathoperation} } \subsection{The Curve-To Operation} -The curve-to operation allows you to extend a path using a B\'ezier -curve. +The curve-to operation allows you to extend a path using a Bézier curve. \begin{pathoperation}{..}{\declare{|controls|}\meta{c}\opt{|and|\meta{d}}\declare{|..|\meta{y or cycle}}} - This operation extends the current path from the current - point, let us call it $x$, via a curve to a point~$y$ (if, instead - of a coordinate you say |cycle| at the end, $y$ will be the - coordinate of the last move-to operation). - The curve is a cubic B\'ezier curve. For such a curve, - apart from $y$, you also specify two control points $c$ and $d$. The - idea is that the curve starts at $x$, ``heading'' in the direction - of~$c$. Mathematically spoken, the tangent of the curve at $x$ goes - through $c$. Similarly, the curve ends at $y$, ``coming from'' the - other control point,~$d$. The larger the distance between $x$ and~$c$ - and between $d$ and~$y$, the larger the curve will be. - - If the ``|and|\meta{d}'' part is not given, $d$ is assumed to be - equal to $c$. - + This operation extends the current path from the current point, let us call + it $x$, via a curve to a point~$y$ (if, instead of a coordinate you say + |cycle| at the end, $y$ will be the coordinate of the last move-to + operation). The curve is a cubic Bézier curve. For such a curve, apart + from $y$, you also specify two control points $c$ and $d$. The idea is that + the curve starts at $x$, ``heading'' in the direction of~$c$. + Mathematically spoken, the tangent of the curve at $x$ goes through $c$. + Similarly, the curve ends at $y$, ``coming from'' the other control + point,~$d$. The larger the distance between $x$ and~$c$ and between $d$ + and~$y$, the larger the curve will be. + + If the ``|and|\meta{d}'' part is not given, $d$ is assumed to be equal to + $c$. + % \begin{codeexample}[] \begin{tikzpicture} \draw[line width=10pt] (0,0) .. controls (1,1) .. (4,0) @@ -331,10 +334,10 @@ curve. \end{tikzpicture} \end{codeexample} - As with the line-to operation, it makes a difference whether two curves - are joined because they resulted from consecutive curve-to or line-to - operations, or whether they just happen to have a common (end) point: - + As with the line-to operation, it makes a difference whether two curves are + joined because they resulted from consecutive curve-to or line-to + operations, or whether they just happen to have a common (end) point: + % \begin{codeexample}[] \begin{tikzpicture}[line width=10pt] \draw (0,0) -- (1,1) (1,1) .. controls (1,0) and (2,0) .. (2,0); @@ -342,21 +345,20 @@ curve. (0,0) -- (1,1) .. controls (1,0) and (2,0) .. (2,0); \end{tikzpicture} \end{codeexample} + % \end{pathoperation} - \subsection{The Rectangle Operation} -A rectangle can obviously be created using four straight lines and a -cycle operation. However, since rectangles are needed so often, a -special syntax is available for them. +A rectangle can obviously be created using four straight lines and a cycle +operation. However, since rectangles are needed so often, a special syntax is +available for them. \begin{pathoperation}{rectangle}{\meta{corner or cycle}} - When this operation is used, one corner will be the current point, - another corner is given by \meta{corner}, which becomes the new - current point. - + When this operation is used, one corner will be the current point, another + corner is given by \meta{corner}, which becomes the new current point. + % \begin{codeexample}[] \begin{tikzpicture} \draw (0,0) rectangle (1,1); @@ -364,29 +366,30 @@ special syntax is available for them. \end{tikzpicture} \end{codeexample} - Just for consistency, you can also use |cycle| instead of a - coordinate, but it is a bit unclear what use this might have. + Just for consistency, you can also use |cycle| instead of a coordinate, but + it is a bit unclear what use this might have. \end{pathoperation} \subsection{Rounding Corners} -All of the path construction operations mentioned up to now are -influenced by the following option: -\begin{key}{/tikz/rounded corners=\meta{inset} (default 4pt)} - When this option is in force, all corners (places where a line is - continued either via line-to or a curve-to operation) are replaced by - little arcs so that the corner becomes smooth. +All of the path construction operations mentioned up to now are influenced by +the following option: +\begin{key}{/tikz/rounded corners=\meta{inset} (default 4pt)} + When this option is in force, all corners (places where a line is continued + either via line-to or a curve-to operation) are replaced by little arcs so + that the corner becomes smooth. + % \begin{codeexample}[] \tikz \draw [rounded corners] (0,0) -- (1,1) -- (2,0) .. controls (3,1) .. (4,0); \end{codeexample} - The \meta{inset} describes how big the corner is. Note that the - \meta{inset} is \emph{not} scaled along if you use a scaling option - like |scale=2|. - + The \meta{inset} describes how big the corner is. Note that the + \meta{inset} is \emph{not} scaled along if you use a scaling option like + |scale=2|. + % \begin{codeexample}[] \begin{tikzpicture} \draw[color=gray,very thin] (10pt,15pt) circle[radius=10pt]; @@ -394,10 +397,9 @@ influenced by the following option: \end{tikzpicture} \end{codeexample} - You can switch the rounded corners on and off ``in the middle of - path'' and different corners in the same path can have different - corner radii: - + You can switch the rounded corners on and off ``in the middle of path'' and + different corners in the same path can have different corner radii: + % \begin{codeexample}[] \begin{tikzpicture} \draw (0,0) [rounded corners=10pt] -- (1,1) -- (2,1) @@ -406,65 +408,66 @@ influenced by the following option: \end{tikzpicture} \end{codeexample} -Here is a rectangle with rounded corners: + Here is a rectangle with rounded corners: + % \begin{codeexample}[] \tikz \draw[rounded corners=1ex] (0,0) rectangle (20pt,2ex); \end{codeexample} - You should be aware, that there are several pitfalls when using this - option. First, the rounded corner will only be an arc (part of a - circle) if the angle is $90^\circ$. In other cases, the rounded - corner will still be round, but ``not as nice.'' + You should be aware, that there are several pitfalls when using this + option. First, the rounded corner will only be an arc (part of a circle) if + the angle is $90^\circ$. In other cases, the rounded corner will still be + round, but ``not as nice''. - Second, if there are very short line segments in a path, the - ``rounding'' may cause inadvertent effects. In such case it may be - necessary to temporarily switch off the rounding using - |sharp corners|. + Second, if there are very short line segments in a path, the ``rounding'' + may cause inadvertent effects. In such case it may be necessary to + temporarily switch off the rounding using |sharp corners|. \end{key} \begin{key}{/tikz/sharp corners} - This options switches off any rounding on subsequent corners of the - path. + This options switches off any rounding on subsequent corners of the path. \end{key} - \subsection{The Circle and Ellipse Operations} -Circles and ellipses are common path elements for which there is a -special path operation. +Circles and ellipses are common path elements for which there is a special path +operation. \begin{pathoperation}{circle}{\opt{|[|\meta{options}|]|}} - This command adds a circle to the current path where the center of - the circle is the current point by default, but you can use the |at| - option to change this. The new current point of the path - will be (typically just remain) the center of the circle. - - The radius of the circle is specified using the following options: - \begin{key}{/tikz/x radius=\meta{value}} - Sets the horizontal radius of the circle (which, when this value - is different form the vertical radius, is actually an - ellipse). The \meta{value} may either be a dimension or a - dimensionless number. In the latter case, the number is - interpreted in the $xy$-coordinate system (if the $x$-unit is set - to, say, |2cm|, then |x radius=3| will have the same effect as - |x radius=6cm|). - \end{key} - \begin{key}{/tikz/y radius=\meta{value}} - Works like the |x radius|. - \end{key} - \begin{key}{/tikz/radius=\meta{value}} - Sets the |x radius| and |y radius| simultaneously. - \end{key} - \begin{key}{/tikz/at=\meta{coordinate}} - If this option is explicitly set inside the \meta{options} (or - indirectly via the |every circle| style), the \meta{coordinate} is - used as the center of the circle instead of the current - point. Setting |at| to some value in an enclosing scope has no - effect. - \end{key} - The \meta{options} may also contain additional options like, say, a - |rotate| or |scale|, that will only have an effect on the circle. + This command adds a circle to the current path where the center of the + circle is the current point by default, but you can use the |at| option to + change this. The new current point of the path will be (typically just + remain) the center of the circle. + + The radius of the circle is specified using the following options: + % + \begin{key}{/tikz/x radius=\meta{value}} + Sets the horizontal radius of the circle (which, when this value is + different form the vertical radius, is actually an ellipse). The + \meta{value} may either be a dimension or a dimensionless number. In + the latter case, the number is interpreted in the $xy$-coordinate + system (if the $x$-unit is set to, say, |2cm|, then |x radius=3| will + have the same effect as |x radius=6cm|). + \end{key} + % + \begin{key}{/tikz/y radius=\meta{value}} + Works like the |x radius|. + \end{key} + % + \begin{key}{/tikz/radius=\meta{value}} + Sets the |x radius| and |y radius| simultaneously. + \end{key} + % + \begin{key}{/tikz/at=\meta{coordinate}} + If this option is explicitly set inside the \meta{options} (or + indirectly via the |every circle| style), the \meta{coordinate} is used + as the center of the circle instead of the current point. Setting |at| + to some value in an enclosing scope has no effect. + \end{key} + The \meta{options} may also contain additional options like, say, a + |rotate| or |scale|, that will only have an effect on the circle. + % \begin{codeexample}[] \begin{tikzpicture} \draw (1,0) circle [radius=1.5]; @@ -472,88 +475,92 @@ special path operation. \end{tikzpicture} \end{codeexample} - It is possible to set the |radius| also in some enclosing scope, in - this case the options can be left out (but see the note below on - what may follow): + It is possible to set the |radius| also in some enclosing scope, in this + case the options can be left out (but see the note below on what may + follow): + % \begin{codeexample}[] \begin{tikzpicture}[radius=2pt] \draw (0,0) circle -- (1,1) circle -- ++(0,1) circle; \end{tikzpicture} \end{codeexample} - The following style is used with every circle: - \begin{stylekey}{/tikz/every circle} - You can use this key to set up, say, a default radius for every - circle. The key will also be used with the |ellipse| operation. - \end{stylekey} + The following style is used with every circle: + % + \begin{stylekey}{/tikz/every circle} + You can use this key to set up, say, a default radius for every circle. + The key will also be used with the |ellipse| operation. + \end{stylekey} - In case you feel that the names |radius| and |x radius| are too long - for your taste, you can easily created shorter aliases: + In case you feel that the names |radius| and |x radius| are too long for + your taste, you can easily created shorter aliases: + % \begin{codeexample}[code only] \tikzset{r/.style={radius=#1},rx/.style={x radius=#1},ry/.style={y radius=#1}} \end{codeexample} - You can then say |circle [r=1cm]| or |circle [rx=1,ry=1.5]|. The - reason \tikzname\ uses the longer names by default is that it - encourages people to write more readable code. - - \emph{Note:} There also exists an older syntax for circles, where - the radius of the circle is given in parentheses right after the - |circle| command as in |circle (1pt)|. Although this syntax is a bit - more succinct, it is harder to understand for readers of the code - and the use of parentheses for something other than a coordinate is - ill-chosen. - - \tikzname\ will use the following rule to determine whether the old - or the normal syntax is used: If |circle| is directly followed by - something that (expands to) an opening parenthesis, then the old - syntax is used and inside these following parentheses there must be - a single number or dimension representing a radius. In all other - cases the new syntax is used. + % + You can then say |circle [r=1cm]| or |circle [rx=1,ry=1.5]|. The reason + \tikzname\ uses the longer names by default is that it encourages people to + write more readable code. + + \emph{Note:} There also exists an older syntax for circles, where the + radius of the circle is given in parentheses right after the |circle| + command as in |circle (1pt)|. Although this syntax is a bit more succinct, + it is harder to understand for readers of the code and the use of + parentheses for something other than a coordinate is ill-chosen. + + \tikzname\ will use the following rule to determine whether the old or the + normal syntax is used: If |circle| is directly followed by something that + (expands to) an opening parenthesis, then the old syntax is used and inside + these following parentheses there must be a single number or dimension + representing a radius. In all other cases the new syntax is used. \end{pathoperation} \begin{pathoperation}{ellipse}{|[|\meta{options}|]|} - This command has exactly the same effect as |circle|. The older - syntax for this command is |ellipse (|\meta{x radius} |and| \meta{y - radius}|)|. As for the |circle| command, this syntax is not as - good as the standard syntax. + This command has exactly the same effect as |circle|. The older syntax for + this command is |ellipse (|\meta{x radius} |and| \meta{y radius}|)|. As for + the |circle| command, this syntax is not as good as the standard syntax. + % \begin{codeexample}[] \begin{tikzpicture} \draw [help lines] (0,0) grid (3,2); \draw (1,1) ellipse [x radius=1cm,y radius=.5cm]; \end{tikzpicture} \end{codeexample} + % \end{pathoperation} - \subsection{The Arc Operation} -The \emph{arc operation} allows you to add an arc to the current -path. +The \emph{arc operation} allows you to add an arc to the current path. +% \begin{pathoperation}{arc}{\oarg{options}} - The |arc| operation adds a part of an ellipse to the current - path. The radii of the ellipse are given by the values of |x radius| - and |y radius|, which should be set in the \meta{options}. The arc - will start at the current point and will end at the end of the - arc. The arc will start and end at angles computed from the three - keys |start angle|, |end angle|, and |delta angle|. Normally, the - first two keys specify the start and end angle. However, in case one - of them is empty, it is computed from the other key plus or minus - the |delta angle|. In detail, if |end angle| is empty, it is set to - the start angle plus the delta angle. If the start angle is missing, - it is set to the end angle minus the delta angle. If all three keys - are set, the delta angle is ignored. - \begin{key}{/tikz/start angle=\meta{degrees}} - Sets the start angle. - \end{key} - \begin{key}{/tikz/end angle=\meta{degrees}} - Sets the end angle. - \end{key} - \begin{key}{/tikz/delta angle=\meta{degrees}} - Sets the delta angle. - \end{key} - - \begin{codeexample}[] + The |arc| operation adds a part of an ellipse to the current path. The + radii of the ellipse are given by the values of |x radius| and |y radius|, + which should be set in the \meta{options}. The arc will start at the + current point and will end at the end of the arc. The arc will start and + end at angles computed from the three keys |start angle|, |end angle|, and + |delta angle|. Normally, the first two keys specify the start and end + angle. However, in case one of them is empty, it is computed from the other + key plus or minus the |delta angle|. In detail, if |end angle| is empty, it + is set to the start angle plus the delta angle. If the start angle is + missing, it is set to the end angle minus the delta angle. If all three + keys are set, the delta angle is ignored. + % + \begin{key}{/tikz/start angle=\meta{degrees}} + Sets the start angle. + \end{key} + % + \begin{key}{/tikz/end angle=\meta{degrees}} + Sets the end angle. + \end{key} + % + \begin{key}{/tikz/delta angle=\meta{degrees}} + Sets the delta angle. + \end{key} + +\begin{codeexample}[] \begin{tikzpicture}[radius=1cm] \draw (0,0) arc[start angle=180, end angle=90] -- (2,.5) arc[start angle=90, delta angle=-90]; @@ -575,49 +582,45 @@ path. \end{tikzpicture} \end{codeexample} - There also exists a shorter syntax for the arc operation, namely - |arc| begin directly followed by |(|\meta{start angle}|:|\meta{end - angle}|:|\meta{radius}). However, this syntax is harder to read, - so the normal syntax should be preferred in general. + There also exists a shorter syntax for the arc operation, namely |arc| + begin directly followed by + |(|\meta{start angle}|:|\meta{end angle}|:|\meta{radius}). However, this + syntax is harder to read, so the normal syntax should be preferred in + general. \end{pathoperation} \subsection{The Grid Operation} -You can add a grid to the current path using the |grid| path -operation. +You can add a grid to the current path using the |grid| path operation. \begin{pathoperation}{grid}{\opt{\oarg{options}}\meta{corner or cycle}} - This operations adds a grid filling a rectangle whose two corners - are given by \meta{corner} and by the previous coordinate. (Instead - of a coordinate you can also say |cycle| to use the position of the - last move-to as the corner coordinate, but it not very natural to - do so.) corner Thus, the - typical way in which a grid is drawn is |\draw (1,1) grid (3,3);|, - which yields a grid filling the rectangle whose corners are at - $(1,1)$ and $(3,3)$. All coordinate transformations apply to the - grid. - + This operations adds a grid filling a rectangle whose two corners are given + by \meta{corner} and by the previous coordinate. (Instead of a coordinate + you can also say |cycle| to use the position of the last move-to as the + corner coordinate, but it not very natural to do so.) corner Thus, the + typical way in which a grid is drawn is |\draw (1,1) grid (3,3);|, which + yields a grid filling the rectangle whose corners are at $(1,1)$ and + $(3,3)$. All coordinate transformations apply to the grid. + % \begin{codeexample}[] \tikz[rotate=30] \draw[step=1mm] (0,0) grid (2,2); \end{codeexample} - The \meta{options}, which are local to the |grid| operation, can be - used to influence the appearance of the grid. The stepping of the - grid is governed by the following options: - -\begin{key}{/tikz/step=\meta{number or dimension or coordinate} - (initially 1cm)} - Sets the stepping in both the - $x$ and $y$-direction. If a dimension is provided, this is used - directly. If a number is provided, this number is interpreted in the - $xy$-coordinate system. For example, if you provide the number |2|, - then the $x$-step is twice the $x$-vector and the $y$-step is twice - the $y$-vector set by the |x=| and |y=| options. Finally, if you - provide a coordinate, then the $x$-part of this coordinate will be - used as the $x$-step and the $y$-part will be used as the - $y$-coordinate. - + The \meta{options}, which are local to the |grid| operation, can be used to + influence the appearance of the grid. The stepping of the grid is governed + by the following options: + % + \begin{key}{/tikz/step=\meta{number or dimension or coordinate} (initially 1cm)} + Sets the stepping in both the $x$ and $y$-direction. If a dimension is + provided, this is used directly. If a number is provided, this number + is interpreted in the $xy$-coordinate system. For example, if you + provide the number |2|, then the $x$-step is twice the $x$-vector and + the $y$-step is twice the $y$-vector set by the |x=| and |y=| options. + Finally, if you provide a coordinate, then the $x$-part of this + coordinate will be used as the $x$-step and the $y$-part will be used + as the $y$-coordinate. + % \begin{codeexample}[] \begin{tikzpicture}[x=.5cm] \draw[thick] (0,0) grid [step=1] (3,2); @@ -629,66 +632,72 @@ operation. \end{tikzpicture} \end{codeexample} - A complication arises when the $x$- and/or $y$-vector do not point - along the axes. Because of this, the actual rule for computing the - $x$-step and the $y$-step is the following: As the $x$- and - $y$-steps we use the $x$- and $y$-components or the following two - vectors: The first vector is either $(\meta{x-grid-step-number},0)$ - or $(\meta{x-grid-step-dimension},0\mathrm{pt})$, the second vector - is $(0,\meta{y-grid-step-number})$ or - $(0\mathrm{pt},\meta{x-grid-step-dimension})$. -\end{key} + A complication arises when the $x$- and/or $y$-vector do not point + along the axes. Because of this, the actual rule for computing the + $x$-step and the $y$-step is the following: As the $x$- and $y$-steps + we use the $x$- and $y$-components or the following two vectors: The + first vector is either $(\meta{x-grid-step-number},0)$ or + $(\meta{x-grid-step-dimension},0\mathrm{pt})$, the second vector is + $(0,\meta{y-grid-step-number})$ or + $(0\mathrm{pt},\meta{y-grid-step-dimension})$. + + If the $x$-step or $y$-step is $0$ or negative the corresponding lines + are not drawn. + \end{key} -\begin{key}{/tikz/xstep=\meta{dimension or number} (initially 1cm)} - Sets the stepping in the $x$-direction. + \begin{key}{/tikz/xstep=\meta{dimension or number} (initially 1cm)} + Sets the stepping in the $x$-direction. + % \begin{codeexample}[] -\tikz \draw (0,0) grid [xstep=.5,ystep=.75] (3,2); +\begin{tikzpicture} + \draw (0,0) grid [xstep=.5,ystep=.75] (3,2); + \draw[ultra thick] (0,0) grid [ystep=0] (3,2); +\end{tikzpicture} \end{codeexample} -\end{key} + \end{key} -\begin{key}{/tikz/ystep=\meta{dimension or number} (initially 1cm)} - Sets the stepping in the $y$-direction. -\end{key} + \begin{key}{/tikz/ystep=\meta{dimension or number} (initially 1cm)} + Sets the stepping in the $y$-direction. + \end{key} - It is important to note that the grid is always ``phased'' such that - it contains the point $(0,0)$ if that point happens to be inside the - rectangle. Thus, the grid does \emph{not} always have an intersection - at the corner points; this occurs only if the corner points are - multiples of the stepping. Note that due to rounding errors, the - ``last'' lines of a grid may be omitted. In this case, you have to - add an epsilon to the corner points. - - The following style is useful for drawing grids: -\begin{stylekey}{/tikz/help lines (initially {line width=0.2pt,gray})} - This style makes lines ``subdued'' by using thin gray lines for - them. However, this style is not installed automatically and you - have to say for example: + It is important to note that the grid is always ``phased'' such that it + contains the point $(0,0)$ if that point happens to be inside the + rectangle. Thus, the grid does \emph{not} always have an intersection at + the corner points; this occurs only if the corner points are multiples of + the stepping. Note that due to rounding errors, the ``last'' lines of a + grid may be omitted. In this case, you have to add an epsilon to the corner + points. + + The following style is useful for drawing grids: + % + \begin{stylekey}{/tikz/help lines (initially {line width=0.2pt,gray})} + This style makes lines ``subdued'' by using thin gray lines for them. + However, this style is not installed automatically and you have to say + for example: + % \begin{codeexample}[] \tikz \draw[help lines] (0,0) grid (3,3); \end{codeexample} -\end{stylekey} - + \end{stylekey} \end{pathoperation} - \subsection{The Parabola Operation} -The |parabola| path operation continues the current path with a -parabola. A parabola is a (shifted and scaled) curve defined by the -equation $f(x) = x^2$ and looks like this: \tikz \draw (-1ex,1.5ex) -parabola[parabola height=-1.5ex] +(2ex,0ex);. +The |parabola| path operation continues the current path with a parabola. A +parabola is a (shifted and scaled) curve defined by the equation $f(x) = x^2$ +and looks like this: \tikz \draw (-1ex,1.5ex) parabola[parabola height=-1.5ex] ++(2ex,0ex);. \begin{pathoperation}{parabola}{\opt{\oarg{options}|bend|\meta{bend coordinate}}\meta{coordinate or cycle}} - This operation adds a parabola through the current point and the - given \meta{coordinate} or, if |cycle| is used instead of coordinate - at the end, the \meta{coordinate} is set to the position of the last - move-to and the path gets closed after the parabola. If the |bend| - is given, it specifies where - the bend should go; the \meta{options} can also be used to specify - where the bend is. By default, the bend is at the old current point. - + This operation adds a parabola through the current point and the given + \meta{coordinate} or, if |cycle| is used instead of coordinate at the end, + the \meta{coordinate} is set to the position of the last move-to and the + path gets closed after the parabola. If the |bend| is given, it specifies + where the bend should go; the \meta{options} can also be used to specify + where the bend is. By default, the bend is at the old current point. + % \begin{codeexample}[] \begin{tikzpicture} \draw (0,0) rectangle (1,1.5) @@ -697,42 +706,42 @@ parabola[parabola height=-1.5ex] +(2ex,0ex);. (0,0) parabola[bend at end] (1,1.5); \draw[xshift=3cm] (0,0) rectangle (1,1.5) (0,0) parabola bend (.75,1.75) (1,1.5); - + \draw[yshift=-2cm] (1,1.5) -- (0,0) parabola cycle; \end{tikzpicture} \end{codeexample} - The following options influence parabolas: -\begin{key}{/tikz/bend=\meta{coordinate}} - Has the same effect as saying |bend|\meta{coordinate} outside the - \meta{options}. The option specifies that the bend of the parabola - should be at the given \meta{coordinate}. You have to take care - yourself that the bend position is a ``valid'' position; which means - that if there is no parabola of the form $f(x) = a x^2 + b x + c$ - that goes through the old current point, the given bend, and the new - current point, the result will not be a parabola. - - There is one special property of the \meta{coordinate}: When a - relative coordinate is given like |+(0,0)|, the position relative - to this coordinate is ``flexible.'' More precisely, this - position lies somewhere on a line from the old current point to the - new current point. The exact position depends on the next - option. -\end{key} + The following options influence parabolas: + % + \begin{key}{/tikz/bend=\meta{coordinate}} + Has the same effect as saying |bend|\meta{coordinate} outside the + \meta{options}. The option specifies that the bend of the parabola + should be at the given \meta{coordinate}. You have to take care + yourself that the bend position is a ``valid'' position; which means + that if there is no parabola of the form $f(x) = a x^2 + b x + c$ that + goes through the old current point, the given bend, and the new current + point, the result will not be a parabola. + + There is one special property of the \meta{coordinate}: When a relative + coordinate is given like |+(0,0)|, the position relative to this + coordinate is ``flexible''. More precisely, this position lies + somewhere on a line from the old current point to the new current + point. The exact position depends on the next option. + \end{key} -\begin{key}{/tikz/bend pos=\meta{fraction}} - Specifies where the ``previous'' point is relative to which the bend - is calculated. The previous point will be at the \meta{fraction}th - part of the line from the old current point to the new current - point. - - The idea is the following: If you say |bend pos=0| and - |bend +(0,0)|, the bend will be at the old current point. If you say - |bend pos=1| and |bend +(0,0)|, the bend will be at the new current - point. If you say |bend pos=0.5| and |bend +(0,2cm)| the bend will - be 2cm above the middle of the line between the start and end - point. This is most useful in situations such as the following: + \begin{key}{/tikz/bend pos=\meta{fraction}} + Specifies where the ``previous'' point is relative to which the bend is + calculated. The previous point will be at the \meta{fraction}th part of + the line from the old current point to the new current point. + + The idea is the following: If you say |bend pos=0| and |bend +(0,0)|, + the bend will be at the old current point. If you say |bend pos=1| and + |bend +(0,0)|, the bend will be at the new current point. If you say + |bend pos=0.5| and |bend +(0,2cm)| the bend will be 2cm above the + middle of the line between the start and end point. This is most useful + in situations such as the following: + % \begin{codeexample}[] \begin{tikzpicture} \draw[help lines] (0,0) grid (3,2); @@ -740,88 +749,89 @@ parabola[parabola height=-1.5ex] +(2ex,0ex);. \end{tikzpicture} \end{codeexample} - In the above example, the |bend +(0,2)| essentially means ``a - parabola that is 2cm high'' and |+(3,0)| means ``and 3cm wide.'' - Since this situation arises often, there is a special shortcut - option: - \begin{key}{/tikz/parabola height=\meta{dimension}} - This option has the same effect as - |[bend pos=0.5,bend={+(0pt,|\meta{dimension}|)}]|. + In the above example, the |bend +(0,2)| essentially means ``a parabola + that is 2cm high'' and |+(3,0)| means ``and 3cm wide''. Since this + situation arises often, there is a special shortcut option: + % + \begin{key}{/tikz/parabola height=\meta{dimension}} + This option has the same effect as + |[bend pos=0.5,bend={+(0pt,|\meta{dimension}|)}]|. + % \begin{codeexample}[] \begin{tikzpicture} \draw[help lines] (0,0) grid (3,2); \draw (-1,0) parabola[parabola height=2cm] +(3,0); \end{tikzpicture} \end{codeexample} - \end{key} -\end{key} - -The following styles are useful shortcuts: -\begin{stylekey}{/tikz/bend at start} - This places the bend at the start of a - parabola. It is a shortcut for the following options: - |bend pos=0,bend={+(0,0)}|. -\end{stylekey} + \end{key} + \end{key} -\begin{stylekey}{/tikz/bend at end} - This places the bend at the end of a parabola. -\end{stylekey} + The following styles are useful shortcuts: + % + \begin{stylekey}{/tikz/bend at start} + This places the bend at the start of a parabola. It is a shortcut for + the following options: |bend pos=0,bend={+(0,0)}|. + \end{stylekey} + \begin{stylekey}{/tikz/bend at end} + This places the bend at the end of a parabola. + \end{stylekey} \end{pathoperation} \subsection{The Sine and Cosine Operation} -The |sin| and |cos| operations are similar to the |parabola| -operation. They, too, can be used to draw (parts of) a sine or cosine -curve. +The |sin| and |cos| operations are similar to the |parabola| operation. They, +too, can be used to draw (parts of) a sine or cosine curve. \begin{pathoperation}{sin}{\meta{coordinate or cycle}} - The effect of |sin| is to draw a scaled and shifted version of a sine - curve in the interval $[0,\pi/2]$. The scaling and shifting is done in - such a way that the start of the sine curve in the interval is at the - old current point and that the end of the curve in the interval is at - \meta{coordinate}. Here is an example that should clarify this: - + The effect of |sin| is to draw a scaled and shifted version of a sine curve + in the interval $[0,\pi/2]$. The scaling and shifting is done in such a way + that the start of the sine curve in the interval is at the old current + point and that the end of the curve in the interval is at + \meta{coordinate}. Here is an example that should clarify this: + % \begin{codeexample}[] \tikz \draw (0,0) rectangle (1,1) (0,0) sin (1,1) (2,0) rectangle +(1.57,1) (2,0) sin +(1.57,1); \end{codeexample} + % \end{pathoperation} \begin{pathoperation}{cos}{\meta{coordinate or cycle}} - This operation works similarly, only a cosine in the interval - $[0,\pi/2]$ is drawn. By correctly alternating |sin| and |cos| - operations, you can create a complete sine or cosine curve: - + This operation works similarly, only a cosine in the interval $[0,\pi/2]$ + is drawn. By correctly alternating |sin| and |cos| operations, you can + create a complete sine or cosine curve: + % \begin{codeexample}[] \begin{tikzpicture}[xscale=1.57] \draw (0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0) sin (5,1); \draw[color=red] (0,1.5) cos (1,0) sin (2,-1.5) cos (3,0) sin (4,1.5) cos (5,0); \end{tikzpicture} \end{codeexample} + % \end{pathoperation} -Note that there is no way to (conveniently) draw an interval on a sine -or cosine curve whose end points are not multiples of $\pi/2$. +Note that there is no way to (conveniently) draw an interval on a sine or +cosine curve whose end points are not multiples of $\pi/2$. \subsection{The SVG Operation} -The |svg| operation can be used to extend the current path by a path -given in the \textsc{svg} path data syntax. This syntax is described -in detail in Section 8.3 of the \textsc{svg 1.1} specification, please -consult this specification for details. +The |svg| operation can be used to extend the current path by a path given in +the \textsc{svg} path data syntax. This syntax is described in detail in +Section 8.3 of the \textsc{svg 1.1} specification, please consult this +specification for details. \begin{pathoperation}{svg}{\opt{\oarg{options}}\marg{path data}} - This operation adds the path specified in the \meta{path data} in - \textsc{svg 1.1 path data} syntax to the current path. Unlike the - \textsc{svg}-specification, it \emph{is} permissible that the path - data does not start with a move-to command (|m| or |M|), in which - case the last point of the current path is used as start point. - The optional \meta{options} apply locally to this path operation, - typically you will use them to set up, say, some transformations. - + This operation adds the path specified in the \meta{path data} in + \textsc{svg 1.1 path data} syntax to the current path. Unlike the + \textsc{svg}-specification, it \emph{is} permissible that the path data + does not start with a move-to command (|m| or |M|), in which case the last + point of the current path is used as start point. The optional + \meta{options} apply locally to this path operation, typically you will use + them to set up, say, some transformations. + % \begin{codeexample}[] \begin{tikzpicture} \filldraw [fill=red!20] (0,1) svg[scale=2] {h 10 v 10 h -10} @@ -831,70 +841,66 @@ consult this specification for details. \end{tikzpicture} \end{codeexample} - An \textsc{svg} coordinate like |10 20| is always interpreted as - |(10pt,20pt)|, so the basic unit is always points (|pt|). The - $xy$-coordinate system is not used. However, you can use scaling to - (locally) change the basic unit. For instance, |svg[scale=1cm]| - (yes, this works, although some rather evil magic is involved) will - cause 1cm to be the basic unit. + An \textsc{svg} coordinate like |10 20| is always interpreted as + |(10pt,20pt)|, so the basic unit is always points (|pt|). The + $xy$-coordinate system is not used. However, you can use scaling to + (locally) change the basic unit. For instance, |svg[scale=1cm]| (yes, this + works, although some rather evil magic is involved) will cause 1cm to be + the basic unit. - Instead of curly braces, you can also use quotation marks to - indicate the start and end of the \textsc{svg} path. + Instead of curly braces, you can also use quotation marks to indicate the + start and end of the \textsc{svg} path. - \emph{Warning:} The arc operations (|a| and |A|) are numerically - instable. This means that they will be quite imprecise, except when - the angle is a multiple of $90^\circ$ (as is, fortunately, most - often the case). + \emph{Warning:} The arc operations (|a| and |A|) are numerically instable. + This means that they will be quite imprecise, except when the angle is a + multiple of $90^\circ$ (as is, fortunately, most often the case). \end{pathoperation} + \subsection{The Plot Operation} -The |plot| operation can be used to append a line or curve to the path -that goes through a large number of coordinates. These coordinates are -either given in a simple list of coordinates, read from some file, or -they are computed on the fly. +The |plot| operation can be used to append a line or curve to the path that +goes through a large number of coordinates. These coordinates are either given +in a simple list of coordinates, read from some file, or they are computed on +the fly. + +Since the syntax and the behaviour of this command are a bit complex, they are +described in the separated Section~\ref{section-tikz-plots}. -Since the syntax and the behaviour of this command are a bit complex, -they are described in the separated Section~\ref{section-tikz-plots}. \subsection{The To Path Operation} -The |to| operation is used to add a user-defined path -from the previous coordinate to the following coordinate. When you -write |(a) to (b)|, a straight line is added from |a| -to |b|, exactly as if you had written |(a) -- (b)|. However, if you -write |(a) to [out=135,in=45] (b)| a curve is added to the path, -which leaves at an angle of 135$^\circ$ at |a| and arrives at an angle -of 45$^\circ$ at |b|. This is because the options |in| and |out| -trigger a special path to be used instead of the straight line. +The |to| operation is used to add a user-defined path from the previous +coordinate to the following coordinate. When you write |(a) to (b)|, a straight +line is added from |a| to |b|, exactly as if you had written |(a) -- (b)|. +However, if you write |(a) to [out=135,in=45] (b)| a curve is added to the +path, which leaves at an angle of 135$^\circ$ at |a| and arrives at an angle of +45$^\circ$ at |b|. This is because the options |in| and |out| trigger a special +path to be used instead of the straight line. \begin{pathoperation}{to}{\opt{|[|\meta{options}|]|} - \opt{\meta{nodes}} \meta{coordinate or cycle}} - - This path operation inserts the path currently set via the |to path| - option at the current position. The \meta{options} can be used to - modify (perhaps implicitly) the |to path| and to set up how the path - will be rendered. - - Before the |to path| is inserted, a number of macros are set up that - can ``help'' the |to path|. These are |\tikztostart|, - |\tikztotarget|, and |\tikztonodes|; they are explained in the - following. - - \medskip - \textbf{Start and Target Coordinates.}\ \ - The |to| operation is always followed by a \meta{coordinate}, called - the target coordinate, or the text |cycle|, in which case the last - move-to is used as a coordinate and the path gets closed. The macro - |\tikztotarget| is set to this coordinate (without its - parentheses). There is also a \emph{start coordinate}, which is the - coordinate preceding the |to| operation. This coordinate can be - accessed via the macro |\tikztostart|. In the following example, for - the first |to|, the macro |\tikztostart| is |0pt,0pt| and the - |\tikztotarget| is |0,2|. For the second |to|, the macro - |\tikztostart| is |10pt,10pt| and |\tikztotarget| is |a|. For the - third, they are set to |a| and |current subpath start|. - + \opt{\meta{nodes}} \meta{coordinate or cycle}} + This path operation inserts the path currently set via the |to path| option + at the current position. The \meta{options} can be used to modify (perhaps + implicitly) the |to path| and to set up how the path will be rendered. + + Before the |to path| is inserted, a number of macros are set up that can + ``help'' the |to path|. These are |\tikztostart|, |\tikztotarget|, and + |\tikztonodes|; they are explained in the following. + + \medskip + \textbf{Start and Target Coordinates.}\ \ + The |to| operation is always followed by a \meta{coordinate}, called the + target coordinate, or the text |cycle|, in which case the last move-to is + used as a coordinate and the path gets closed. The macro |\tikztotarget| is + set to this coordinate (without its parentheses). There is also a + \emph{start coordinate}, which is the coordinate preceding the |to| + operation. This coordinate can be accessed via the macro |\tikztostart|. In + the following example, for the first |to|, the macro |\tikztostart| is + |0pt,0pt| and the |\tikztotarget| is |0,2|. For the second |to|, the macro + |\tikztostart| is |10pt,10pt| and |\tikztotarget| is |a|. For the third, + they are set to |a| and |current subpath start|. + % \begin{codeexample}[] \begin{tikzpicture} \draw[help lines] (0,0) grid (3,2); @@ -906,17 +912,15 @@ trigger a special path to be used instead of the straight line. \end{tikzpicture} \end{codeexample} - - \medskip - \textbf{Nodes on to--paths.}\ \ - It is possible to add nodes to the paths constructed by a |to| - operation. To do so, you specify the nodes between the |to| - keyword and the coordinate (if there are options to the |to| - operation, these come first). The effect of |(a) to node {x} (b)| - (typically) is the same as if you had written - |(a) -- node {x} (b)|, namely that the node is placed on the - to. This can be used to add labels to tos: - + \medskip + \textbf{Nodes on to--paths.}\ \ + It is possible to add nodes to the paths constructed by a |to| operation. + To do so, you specify the nodes between the |to| keyword and the coordinate + (if there are options to the |to| operation, these come first). The effect + of |(a) to node {x} (b)| (typically) is the same as if you had written + |(a) -- node {x} (b)|, namely that the node is placed on the to. This can + be used to add labels to tos: + % \begin{codeexample}[] \begin{tikzpicture} \draw (0,0) to node [sloped,above] {x} (3,2); @@ -925,15 +929,15 @@ trigger a special path to be used instead of the straight line. \end{tikzpicture} \end{codeexample} - Instead of writing the node between the |to| keyword and the - target coordinate, you may also use the following keys to create - such nodes: - \begin{key}{/tikz/edge node=\meta{node specification}} - This key can be used inside the \meta{options} of a |to| path - command. It will add the \meta{node specification} to the list of - nodes to be placed on the connecting line, just as if you had - written the \meta{node specification} directly after the |to| - keyword: + Instead of writing the node between the |to| keyword and the target + coordinate, you may also use the following keys to create such nodes: + % + \begin{key}{/tikz/edge node=\meta{node specification}} + This key can be used inside the \meta{options} of a |to| path command. + It will add the \meta{node specification} to the list of nodes to be + placed on the connecting line, just as if you had written the + \meta{node specification} directly after the |to| keyword: + % \begin{codeexample}[] \begin{tikzpicture} \draw (0,0) to [edge node={node [sloped,above] {x}}] (3,2); @@ -942,102 +946,120 @@ trigger a special path to be used instead of the straight line. edge node={node [sloped,above] {x}}] (3,2); \end{tikzpicture} \end{codeexample} - This key is mostly useful to create labels automatically using - other keys. - \end{key} - \begin{key}{/tikz/edge label=\meta{text}} - A shorthand for |edge node={node[auto]{|\meta{text}|}}|. + % + This key is mostly useful to create labels automatically using other + keys. + \end{key} + % + \begin{key}{/tikz/edge label=\meta{text}} + A shorthand for |edge node={node[auto]{|\meta{text}|}}|. + % \begin{codeexample}[] \tikz \draw (0,0) to [edge label=x] (3,2); \end{codeexample} - \end{key} - \begin{key}{/tikz/edge label'=\meta{text}} - A shorthand for |edge node={node[auto,swap]{|\meta{text}|}}|. + \end{key} + % + \begin{key}{/tikz/edge label'=\meta{text}} + A shorthand for |edge node={node[auto,swap]{|\meta{text}|}}|. + % \begin{codeexample}[] \tikz \draw (0,0) to [edge label=x, edge label'=y] (3,2); \end{codeexample} - \end{key} - - When the |quotes| library is loaded, additional ways of specifying - nodes on to--paths become available, see Section~\ref{section-edge-quotes}. - - \medskip - \textbf{Styles for to-paths.}\ \ - In addition to the \meta{options} given after the |to| operation, - the following style is also set at the beginning of the to path: - \begin{stylekey}{/tikz/every to (initially \normalfont empty)} - This style is installed at the beginning of every to. + \end{key} + + When the |quotes| library is loaded, additional ways of specifying nodes on + to--paths become available, see Section~\ref{section-edge-quotes}. + + \medskip + \textbf{Styles for to-paths.}\ \ + In addition to the \meta{options} given after the |to| operation, the + following style is also set at the beginning of the to path: + % + \begin{stylekey}{/tikz/every to (initially \normalfont empty)} + This style is installed at the beginning of every to. + % \begin{codeexample}[] \tikz[every to/.style={bend left}] \draw (0,0) to (3,2); \end{codeexample} - Note that, as explained below, every to path is implicitly - surrounded by curly braces. This means that options like |draw| - given in an |every to| do not actually influence the path. You can - fix this by using the |append after command| option: + % + Note that, as explained below, every to path is implicitly surrounded + by curly braces. This means that options like |draw| given in an + |every to| do not actually influence the path. You can fix this by + using the |append after command| option: + % \begin{codeexample}[] \tikz[every to/.style={append after command={[draw,dashed]}}] \draw (0,0) to (3,2); \end{codeexample} - \end{stylekey} - - \medskip - \textbf{Options.}\ \ - The \meta{options} given with the |to| allow you to influence the - appearance of the |to path|. Mostly, these options are used to - change the |to path|. This can be used to change the path from a - straight line to, say, a curve. - - The path used is set using the following option: - \begin{key}{/tikz/to path=\meta{path}} - Whenever an |to| operation is used, the \meta{path} is - inserted. More precisely, the following path is added: - - \begin{quote} - |{[every to,|\meta{options}|] |\meta{path} |}| - \end{quote} - - The \meta{options} are the options given to the |to| operation, - the \meta{path} is the path set by this option |to path|. - - Inside the \meta{path}, different macros are used to reference the - from- and to-coordinates. In detail, these are: - \begin{itemize} - \item \declareandlabel{\tikztostart} will expand to the from-coordinate - (without the parentheses). - \item \declareandlabel{\tikztotarget} will expand to the to-coordinate. - \item \declareandlabel{\tikztonodes} will expand to the nodes between - the |to| operation and the coordinate. Furthermore, these - nodes will have the |pos| option set implicitly. - \end{itemize} - - Let us have a look at a simple example. The standard straight line - for a |to| is achieved by the following \meta{path}: - \begin{quote} - |-- (\tikztotarget) \tikztonodes| - \end{quote} - - Indeed, this is the default setting for the path. When we write - |(a) to (b)|, the \meta{path} will expand to |(a) -- (b)|, when - we write - \begin{quote} - |(a) to[red] node {x} (b)| - \end{quote} - the \meta{path} will expand to - \begin{quote} - |(a) -- (b) node[red] {x}| - \end{quote} - - It is not possible to specify the path - \begin{quote} - |-- \tikztonodes (\tikztotarget)| - \end{quote} - since \tikzname\ does not allow one to have a macro after |--| - that expands to a node. - - Now let us have a look at how we can modify the \meta{path} - sensibly. The simplest way is to use a curve. + \end{stylekey} + \medskip + \textbf{Options.}\ \ + The \meta{options} given with the |to| allow you to influence the + appearance of the |to path|. Mostly, these options are used to change the + |to path|. This can be used to change the path from a straight line to, + say, a curve. + + The path used is set using the following option: + % + \begin{key}{/tikz/to path=\meta{path}} + Whenever a |to| operation is used, the \meta{path} is inserted. More + precisely, the following path is added: + % + \begin{quote} + |{[every to,|\meta{options}|] |\meta{path} |}| + \end{quote} + + The \meta{options} are the options given to the |to| operation, the + \meta{path} is the path set by this option |to path|. + + Inside the \meta{path}, different macros are used to reference the + from- and to-coordinates. In detail, these are: + % + \begin{itemize} + \item \declareandlabel{\tikztostart} will expand to the + from-coordinate (without the parentheses). + \item \declareandlabel{\tikztotarget} will expand to the + to-coordinate. + \item \declareandlabel{\tikztonodes} will expand to the nodes + between the |to| operation and the coordinate. Furthermore, + these nodes will have the |pos| option set implicitly. + \end{itemize} + + Let us have a look at a simple example. The standard straight line for + a |to| is achieved by the following \meta{path}: + % + \begin{quote} + |-- (\tikztotarget) \tikztonodes| + \end{quote} + + Indeed, this is the default setting for the path. When we write + |(a) to (b)|, the \meta{path} will expand to |(a) -- (b)|, when we + write + % + \begin{quote} + |(a) to[red] node {x} (b)| + \end{quote} + % + the \meta{path} will expand to + % + \begin{quote} + |(a) -- (b) node[red] {x}| + \end{quote} + + It is not possible to specify the path + % + \begin{quote} + |-- \tikztonodes (\tikztotarget)| + \end{quote} + % + since \tikzname\ does not allow one to have a macro after |--| that + expands to a node. + + Now let us have a look at how we can modify the \meta{path} sensibly. + The simplest way is to use a curve. + % \begin{codeexample}[] \begin{tikzpicture}[to path={ .. controls +(1,0) and +(1,0) .. (\tikztotarget) \tikztonodes}] @@ -1051,8 +1073,8 @@ trigger a special path to be used instead of the straight line. \end{tikzpicture} \end{codeexample} - Here is another example: - + Here is another example: + % \begin{codeexample}[] \tikzset{ my loop/.style={to path={ @@ -1068,100 +1090,100 @@ trigger a special path to be used instead of the straight line. \end{tikzpicture} \end{codeexample} - \begin{key}{/tikz/execute at begin to=\meta{code}} - The \meta{code} is executed prior to the |to|. This can be used to - draw one or more additional paths or to do additional - computations. - \end{key} - - \begin{key}{/tikz/execute at end to=\meta{code}} - Works like the previous option, only this code is executed after - the to path has been added. - % FIXME : provide examples... - \end{key} + \begin{key}{/tikz/execute at begin to=\meta{code}} + The \meta{code} is executed prior to the |to|. This can be used to + draw one or more additional paths or to do additional computations. + \end{key} + \begin{key}{/tikz/execute at end to=\meta{code}} + Works like the previous option, only this code is executed after + the to path has been added. + % FIXME : provide examples... + \end{key} - \begin{stylekey}{/tikz/every to (initially \normalfont empty)} - This style is installed at the beginning of every to. - \end{stylekey} - \end{key} + \begin{stylekey}{/tikz/every to (initially \normalfont empty)} + This style is installed at the beginning of every to. + \end{stylekey} + \end{key} \end{pathoperation} -There are a number of predefined |to path|s, see -Section~\ref{library-to-paths} for a reference. +There are a number of predefined |to path|s, see Section~\ref{library-to-paths} +for a reference. \subsection{The Foreach Operation} \begin{pathoperation}{foreach}{\meta{variables}\opt{\oarg{options}} |in| - \marg{path commands}} - The |foreach| operation can be used to repeatedly insert the - \meta{path commands} into the current path. Naturally, the - \meta{path commands} should internally reference some of the - \meta{variables} so that you do not insert exactly the same path - repeatedly, but rather variations. For historical reasons, you can - also write |\foreach| instead of |foreach|. + \marg{path commands}} + The |foreach| operation can be used to repeatedly insert the \meta{path + commands} into the current path. Naturally, the \meta{path commands} should + internally reference some of the \meta{variables} so that you do not insert + exactly the same path repeatedly, but rather variations. For historical + reasons, you can also write |\foreach| instead of |foreach|. + % \begin{codeexample}[] \tikz \draw (0,0) foreach \x in {1,...,3} { -- (\x,1) -- (\x,0) }; \end{codeexample} - See Section~\ref{section-foreach} for more details on the - for-each-command. + % + See Section~\ref{section-foreach} for more details on the for-each-command. \end{pathoperation} + \subsection{The Let Operation} -The \emph{let operation} is the first of a number of path operations -that do not actually extend that path, but have different, mostly -local, effects. +The \emph{let operation} is the first of a number of path operations that do +not actually extend that path, but have different, mostly local, effects. \begin{pathoperation}{let}{\meta{assignment} - \opt{|,|\meta{assignment}}% - \opt{|,|\meta{assignment}\dots}\declare{| in |}} - When this path operation is encountered, the \meta{assignment}s are - evaluated, one by one. This will store coordinate and number in - special \emph{registers} (which are local to \tikzname, they have - nothing to do with \TeX\ registers). Subsequently, one can access the - contents of these registers using the macros |\p|, |\x|, |\y|, and - |\n|. - - The first kind of permissible \meta{assignment}s have the following - form: - \begin{quote} - |\n|\meta{number register}|={|\meta{formula}|}| - \end{quote} - When an assignment has this form, the \meta{formula} is evaluated - using the |\pgfmathparse| operation. The result is stored in the - \meta{number register}. If the \meta{formula} involves a dimension - anywhere (as in |2*3cm/2|), then the \meta{number register} stores - the resulting dimension with a trailing |pt|. A \meta{number register} can - be named arbitrarily and is a normal \TeX\ parameter to the |\n| - macro. Possible names are |{left corner}|, but also just a single - digit like~|5|. - - Let us call the path that follows a let operation its - \emph{body}. Inside the body, the |\n| macro can be used to access - the register. - \begin{command}{\n\marg{number register}} - When this macro is used on the left-hand side of an |=|-sign in a - let operation, it has no effect and is just there for - readability. When the macro is used on the right-hand side of an - |=|-sign or in the body of the let operation, then it expands to - the value stored in the \meta{number register}. This will either - be a dimensionless number like |2.0| or a dimension like |5.6pt|. - - For instance, if we say |let \n1={1pt+2pt}, \n2={1+2} in ...|, then - inside the |...| part the macro |\n1| will expand to |3pt| and - |\n2| expands to |3|. - \end{command} - - The second kind of \meta{assignments} have the following form: - \begin{quote} - |\p|\meta{point register}|={|\meta{formula}|}| - \end{quote} - Point position registers store a single point, consisting - of an $x$-part and a $y$-part measured in \TeX\ points (|pt|). In - particular, point registers do not store nodes or node names. - Here is an example: + \opt{|,|\meta{assignment}}% + \opt{|,|\meta{assignment}\dots}\declare{| in |}} + When this path operation is encountered, the \meta{assignment}s are + evaluated, one by one. This will store coordinate and number in + special \emph{registers} (which are local to \tikzname, they have + nothing to do with \TeX\ registers). Subsequently, one can access the + contents of these registers using the macros |\p|, |\x|, |\y|, and + |\n|. + + The first kind of permissible \meta{assignment}s have the following form: + % + \begin{quote} + |\n|\meta{number register}|={|\meta{formula}|}| + \end{quote} + % + When an assignment has this form, the \meta{formula} is evaluated using the + |\pgfmathparse| operation. The result is stored in the \meta{number + register}. If the \meta{formula} involves a dimension anywhere (as in + |2*3cm/2|), then the \meta{number register} stores the resulting dimension + with a trailing |pt|. A \meta{number register} can be named arbitrarily + and is a normal \TeX\ parameter to the |\n| macro. Possible names are + |{left corner}|, but also just a single digit like~|5|. + + Let us call the path that follows a let operation its \emph{body}. Inside + the body, the |\n| macro can be used to access the register. + % + \begin{command}{\n\marg{number register}} + When this macro is used on the left-hand side of an |=|-sign in a let + operation, it has no effect and is just there for readability. When the + macro is used on the right-hand side of an |=|-sign or in the body of + the let operation, then it expands to the value stored in the + \meta{number register}. This will either be a dimensionless number like + |2.0| or a dimension like |5.6pt|. + + For instance, if we say |let \n1={1pt+2pt}, \n2={1+2} in ...|, then + inside the |...| part the macro |\n1| will expand to |3pt| and |\n2| + expands to |3|. + \end{command} + + The second kind of \meta{assignments} have the following form: + % + \begin{quote} + |\p|\meta{point register}|={|\meta{formula}|}| + \end{quote} + % + Point position registers store a single point, consisting of an $x$-part + and a $y$-part measured in \TeX\ points (|pt|). In particular, point + registers do not store nodes or node names. Here is an example: + % \begin{codeexample}[] \begin{tikzpicture} \draw [help lines] (0,0) grid (3,2); @@ -1171,37 +1193,37 @@ local, effects. \end{tikzpicture} \end{codeexample} - \begin{command}{\p\marg{point register}} - When this macro is used on the left-hand side of an |=|-sign in a - let operation, it has no effect and is just there for - readability. When the macro is used on the right-hand side of an - |=|-sign or in the body of the let operation, then it expands to - the $x$-part (measured in \TeX\ points) of the coordinate stored - in the \meta{register}, followed, by a comma, followed by the - $y$-part. - - For instance, if we say |let \p1=(1pt,1pt+2pt) in ...|, then - inside the |...| part the macro |\p1| will expand to exactly the - seven characters ``1pt,3pt''. This means that you when you write - |(\p1)|, this expands to |(1pt,3pt)|, which is presumably exactly - what you intended. - \end{command} - \begin{command}{\x\marg{point register}} - This macro expands just to the $x$-part of the point - register. If we say as above, as we did above, - |let \p1=(1pt,1pt+2pt) in ...|, then - inside the |...| part the macro |\x1| expands to |1pt|. - \end{command} - \begin{command}{\y\marg{point register}} - Works like |\x|, only for the $y$-part. - \end{command} - Note that the above macros are available only inside a let - operation. - - Here is an example where let clauses are used to assemble a coordinate - from the $x$-coordinate of a first point and the $y$-coordinate of a - second point. Naturally, using the \verb!|-! notation, this could be - written much more compactly. + \begin{command}{\p\marg{point register}} + When this macro is used on the left-hand side of an |=|-sign in a let + operation, it has no effect and is just there for readability. When the + macro is used on the right-hand side of an |=|-sign or in the body of + the let operation, then it expands to the $x$-part (measured in \TeX\ + points) of the coordinate stored in the \meta{register}, followed, by a + comma, followed by the $y$-part. + + For instance, if we say |let \p1=(1pt,1pt+2pt) in ...|, then inside the + |...| part the macro |\p1| will expand to exactly the seven characters + ``1pt,3pt''. This means that you when you write |(\p1)|, this expands + to |(1pt,3pt)|, which is presumably exactly what you intended. + \end{command} + % + \begin{command}{\x\marg{point register}} + This macro expands just to the $x$-part of the point register. If we + say as above, as we did above, |let \p1=(1pt,1pt+2pt) in ...|, then + inside the |...| part the macro |\x1| expands to |1pt|. + \end{command} + % + \begin{command}{\y\marg{point register}} + Works like |\x|, only for the $y$-part. + \end{command} + % + Note that the above macros are available only inside a let operation. + + Here is an example where let clauses are used to assemble a coordinate from + the $x$-coordinate of a first point and the $y$-coordinate of a second + point. Naturally, using the \verb!|-! notation, this could be written much + more compactly. + % \begin{codeexample}[] \begin{tikzpicture} \draw [help lines] (0,0) grid (3,2); @@ -1215,9 +1237,10 @@ local, effects. \end{tikzpicture} \end{codeexample} - Note that the effect of a let operation is local to the body of the - let operation. If you wish to access a computed coordinate outside - the body, you must use a |coordinate| path operation: + Note that the effect of a let operation is local to the body of the let + operation. If you wish to access a computed coordinate outside the body, + you must use a |coordinate| path operation: + % \begin{codeexample}[] \begin{tikzpicture} \draw [help lines] (0,0) grid (3,2); @@ -1237,8 +1260,9 @@ local, effects. \end{tikzpicture} \end{codeexample} - For a more useful application of the let operation, let us draw a - circle that touches a given line: + For a more useful application of the let operation, let us draw a circle + that touches a given line: + % \begin{codeexample}[] \begin{tikzpicture} \draw [help lines] (0,0) grid (3,3); @@ -1254,71 +1278,87 @@ local, effects. in circle [at=(c), radius=\n1]; \end{tikzpicture} \end{codeexample} + % \end{pathoperation} \subsection{The Scoping Operation} -When \tikzname\ encounters and opening or a closing brace (|{| or~|}|) at -some point where a path operation should come, it will open or close a -scope. All options that can be applied ``locally'' will be scoped -inside the scope. For example, if you apply a transformation like -|[xshift=1cm]| inside the scoped area, the shifting only applies to -the scope. On the other hand, an option like |color=red| does not have -any effect inside a scope since it can only be applied to the path as -a whole. +When \tikzname\ encounters and opening or a closing brace (|{| or~|}|) at some +point where a path operation should come, it will open or close a scope. All +options that can be applied ``locally'' will be scoped inside the scope. For +example, if you apply a transformation like |[xshift=1cm]| inside the scoped +area, the shifting only applies to the scope. On the other hand, an option like +|color=red| does not have any effect inside a scope since it can only be +applied to the path as a whole. -Concerning the effect of scopes on relative coordinates, -please see Section~\ref{section-scopes-relative}. +Concerning the effect of scopes on relative coordinates, please see +Section~\ref{section-scopes-relative}. \subsection{The Node and Edge Operations} -The |node| operation adds a so-called node to a -path. This operation is special in the following sense: It does not -change the current path in any way. In other words, this operation -is not really a path operation, but has an effect that is -``external'' to the path. The |edge| operation has similar effect in -that it adds something \emph{after} the main path has been -drawn. However, it works like the |to| operation, that is, it adds a -|to| path to the picture after the main path has been drawn. +The |node| operation adds a so-called node to a path. This operation is special +in the following sense: It does not change the current path in any way. In +other words, this operation is not really a path operation, but has an effect +that is ``external'' to the path. The |edge| operation has similar effect in +that it adds something \emph{after} the main path has been drawn. However, it +works like the |to| operation, that is, it adds a |to| path to the picture +after the main path has been drawn. -Since these operations are quite complex, they are described in the -separate Section~\ref{section-nodes}. +Since these operations are quite complex, they are described in the separate +Section~\ref{section-nodes}. \subsection{The Graph Operation} -The |graph| operation can be used to specify easily how a large number -of nodes are connected. This operation is documented in a separate -section, see Section~\ref{section-library-graphs}. +The |graph| operation can be used to specify easily how a large number of nodes +are connected. This operation is documented in a separate section, see +Section~\ref{section-library-graphs}. \subsection{The Pic Operation} -The |pic| operation is used to insert a ``short picture'' (hence the -``short'' name) at the current position of the path. This operation is -somewhat similar to the |node| operation and discussed in detail in -Section~\ref{section-pics}. +The |pic| operation is used to insert a ``short picture'' (hence the ``short'' +name) at the current position of the path. This operation is somewhat similar +to the |node| operation and discussed in detail in Section~\ref{section-pics}. + + +\subsection{The Attribute Animation Operation} + +\begin{pathoperation}{:}{\meta{animation attribute}|=|\marg{options}} + This path operation has the same effect as if you had said: + % + \begin{quote} + |[animate = { myself:|\meta{animate attribute}|=|\marg{options}|} ]| + \end{quote} + % + This causes an animation of \meta{animate attribute} to be added to the + current path, see Section~\ref{section-tikz-animations} for details. + % +\begin{codeexample}[width=2cm] +\tikz \draw :xshift = {0s = "0cm", 30s = "-3cm", repeats} (0,0) circle (5mm); +\end{codeexample} + % +\end{pathoperation} \subsection{The PGF-Extra Operation} -In some cases you may need to ``do some calculations or some other -stuff'' while a path is constructed. For this, you would like to -suspend the construction of the path and suspend \tikzname's parsing -of the path, you would then like to have some \TeX\ code executed, and -would then like to resume the parsing of the path. This effect can be -achieved using the following path operation |\pgfextra|. Note that -this operation should only be used by real experts and should only be -used deep inside clever macros, not on normal paths. +In some cases you may need to ``do some calculations or some other stuff'' +while a path is constructed. For this, you would like to suspend the +construction of the path and suspend \tikzname's parsing of the path, you would +then like to have some \TeX\ code executed, and would then like to resume the +parsing of the path. This effect can be achieved using the following path +operation |\pgfextra|. Note that this operation should only be used by real +experts and should only be used deep inside clever macros, not on normal paths. \begin{command}{\pgfextra\marg{code}} - This command may only be used inside a \tikzname\ path. There it is - used like a normal path operation. The construction of the path is - temporarily suspended and the \meta{code} is executed. Then, the - path construction is resumed. - + This command may only be used inside a \tikzname\ path. There it is used + like a normal path operation. The construction of the path is temporarily + suspended and the \meta{code} is executed. Then, the path construction is + resumed. + % \begin{codeexample}[] \newdimen\mydim \begin{tikzpicture} @@ -1326,16 +1366,17 @@ used deep inside clever macros, not on normal paths. \draw (0pt,\mydim) \pgfextra{\mydim=2cm} -- (0pt,\mydim); \end{tikzpicture} \end{codeexample} + % \end{command} \begin{command}{\pgfextra \meta{code} \texttt{\char`\\endpgfextra}} - This is an alternative syntax for the |\pgfextra| command. If the - code following |\pgfextra| does not start with a brace, the - \meta{code} is executed until |\endpgfextra| is encountered. What - actually happens is that when |\pgfextra| is not followed by a - brace, this completely shuts down the \tikzname\ parser and - |\endpgfextra| is a normal macro that restarts the parser. - + This is an alternative syntax for the |\pgfextra| command. If the code + following |\pgfextra| does not start with a brace, the \meta{code} is + executed until |\endpgfextra| is encountered. What actually happens is that + when |\pgfextra| is not followed by a brace, this completely shuts down the + \tikzname\ parser and |\endpgfextra| is a normal macro that restarts the + parser. + % \begin{codeexample}[] \newdimen\mydim \begin{tikzpicture} @@ -1344,4 +1385,5 @@ used deep inside clever macros, not on normal paths. \pgfextra \mydim=2cm \endpgfextra -- (0pt,\mydim); \end{tikzpicture} \end{codeexample} + % \end{command} |