summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial.tex')
-rw-r--r--Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial.tex1253
1 files changed, 595 insertions, 658 deletions
diff --git a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial.tex b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial.tex
index 07f6784f54c..614177a7fa5 100644
--- a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial.tex
+++ b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial.tex
@@ -7,45 +7,43 @@
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
\section{Tutorial: A Picture for Karl's Students}
-This tutorial is intended for new users of \tikzname. It
-does not give an exhaustive account of all the features of \tikzname,
-just of those that you are likely to use right away.
-
-Karl is a math and chemistry high-school teacher. He used to create
-the graphics in his worksheets and exams using \LaTeX's |{picture}|
-environment. While the results were acceptable, creating the graphics
-often turned out to be a lengthy process. Also, there tended to be
-problems with lines having slightly wrong angles and circles also
-seemed to be hard to get right. Naturally, his students could not care
-less whether the lines had the exact right angles and they find
-Karl's exams too difficult no matter how nicely they were drawn. But
+This tutorial is intended for new users of \tikzname. It does not give an
+exhaustive account of all the features of \tikzname, just of those that you are
+likely to use right away.
+
+Karl is a math and chemistry high-school teacher. He used to create the
+graphics in his worksheets and exams using \LaTeX's |{picture}| environment.
+While the results were acceptable, creating the graphics often turned out to be
+a lengthy process. Also, there tended to be problems with lines having slightly
+wrong angles and circles also seemed to be hard to get right. Naturally, his
+students could not care less whether the lines had the exact right angles and
+they find Karl's exams too difficult no matter how nicely they were drawn. But
Karl was never entirely satisfied with the result.
-Karl's son, who was even less satisfied with the results (he did not
-have to take the exams, after all), told Karl that he might wish
-to try out a new package for creating graphics. A bit confusingly,
-this package seems to have two names: First, Karl had to download and
-install a package called \pgfname. Then it turns out that inside this
-package there is another package called \tikzname, which is supposed to
-stand for ``\tikzname\ ist \emph{kein} Zeichenprogramm.'' Karl finds this
-all a bit strange and \tikzname\ seems to indicate that the package
-does not do what he needs. However, having used \textsc{gnu}
-software for quite some time and ``\textsc{gnu} not being Unix,''
+Karl's son, who was even less satisfied with the results (he did not have to
+take the exams, after all), told Karl that he might wish to try out a new
+package for creating graphics. A bit confusingly, this package seems to have
+two names: First, Karl had to download and install a package called \pgfname.
+Then it turns out that inside this package there is another package called
+\tikzname, which is supposed to stand for ``\tikzname\ ist \emph{kein}
+Zeichenprogramm''. Karl finds this all a bit strange and \tikzname\ seems to
+indicate that the package does not do what he needs. However, having used
+\textsc{gnu} software for quite some time and ``\textsc{gnu} not being Unix'',
there seems to be hope yet. His son assures him that \tikzname's name is
-intended to warn people that \tikzname\ is not a program that you can
-use to draw graphics with your mouse or tablet. Rather, it is more
-like a ``graphics language.''
+intended to warn people that \tikzname\ is not a program that you can use to
+draw graphics with your mouse or tablet. Rather, it is more like a ``graphics
+language''.
\subsection{Problem Statement}
-Karl wants to put a graphic on the next worksheet for his
-students. He is currently teaching his students about sine and
-cosine. What he would like to have is something that looks like this
-(ideally):
-
+Karl wants to put a graphic on the next worksheet for his students. He is
+currently teaching his students about sine and cosine. What he would like to
+have is something that looks like this (ideally):
+%
\noindent
\begin{tikzpicture}
[scale=3,line cap=round,
@@ -124,16 +122,16 @@ cosine. What he would like to have is something that looks like this
\subsection{Setting up the Environment}
-In \tikzname, to draw a picture, at the start of the picture
-you need to tell \TeX\ or \LaTeX\ that you want to start a picture. In
-\LaTeX\ this is done using the environment |{tikzpicture}|, in plain
-\TeX\ you just use |\tikzpicture| to start the picture and
-|\endtikzpicture| to end it.
+In \tikzname, to draw a picture, at the start of the picture you need to tell
+\TeX\ or \LaTeX\ that you want to start a picture. In \LaTeX\ this is done
+using the environment |{tikzpicture}|, in plain \TeX\ you just use
+|\tikzpicture| to start the picture and |\endtikzpicture| to end it.
+
\subsubsection{Setting up the Environment in \LaTeX}
Karl, being a \LaTeX\ user, thus sets up his file as follows:
-
+%
\begin{codeexample}[code only]
\documentclass{article} % say
\usepackage{tikz}
@@ -146,9 +144,9 @@ We are working on
\end{document}
\end{codeexample}
-When executed, that is, run via |pdflatex| or via |latex| followed by
-|dvips|, the resulting will contain something that looks like this:
-
+When executed, that is, run via |pdflatex| or via |latex| followed by |dvips|,
+the resulting will contain something that looks like this:
+%
\begin{codeexample}[width=7cm]
We are working on
\begin{tikzpicture}
@@ -157,39 +155,38 @@ We are working on
\end{tikzpicture}.
\end{codeexample}
-Admittedly, not quite the whole picture, yet, but we
-do have the axes established. Well, not quite, but we have the lines
-that make up the axes drawn. Karl suddenly has a sinking feeling
-that the picture is still some way off.
+Admittedly, not quite the whole picture, yet, but we do have the axes
+established. Well, not quite, but we have the lines that make up the axes
+drawn. Karl suddenly has a sinking feeling that the picture is still some way
+off.
-Let's have a more detailed look at the code. First, the package
-|tikz| is loaded. This package is a so-called ``frontend'' to the
-basic \pgfname\ system. The basic layer, which is also described in this
-manual, is somewhat more, well, basic and thus harder to use. The
-frontend makes things easier by providing a simpler syntax.
+Let's have a more detailed look at the code. First, the package |tikz| is
+loaded. This package is a so-called ``frontend'' to the basic \pgfname\ system.
+The basic layer, which is also described in this manual, is somewhat more,
+well, basic and thus harder to use. The frontend makes things easier by
+providing a simpler syntax.
-Inside the environment there are two |\draw| commands. They mean:
-``The path, which is specified following the command up to the
-semicolon, should be drawn.'' The first path is specified
-as |(-1.5,0) -- (0,1.5)|, which means ``a straight line from the point
-at position $(-1.5,0)$ to the point at position $(0,1.5)$.'' Here, the
-positions are specified within a special coordinate system in which,
-initially, one unit is 1cm.
+Inside the environment there are two |\draw| commands. They mean: ``The path,
+which is specified following the command up to the semicolon, should be
+drawn.'' The first path is specified as |(-1.5,0) -- (0,1.5)|, which means ``a
+straight line from the point at position $(-1.5,0)$ to the point at position
+$(0,1.5)$''. Here, the positions are specified within a special coordinate
+system in which, initially, one unit is 1cm.
-Karl is quite pleased to note that the environment automatically
-reserves enough space to encompass the picture.
+Karl is quite pleased to note that the environment automatically reserves
+enough space to encompass the picture.
\subsubsection{Setting up the Environment in Plain \TeX}
-Karl's wife Gerda, who also happens to be a math teacher, is not a
-\LaTeX\ user, but uses plain \TeX\ since she prefers to do things
-``the old way.'' She can also use \tikzname. Instead of
-|\usepackage{tikz}| she has to write |\input tikz.tex| and instead of
-|\begin{tikzpicture}| she writes |\tikzpicture| and instead of
- |\end{tikzpicture}| she writes |\endtikzpicture|.
+Karl's wife Gerda, who also happens to be a math teacher, is not a \LaTeX\
+user, but uses plain \TeX\ since she prefers to do things ``the old way''. She
+can also use \tikzname. Instead of |\usepackage{tikz}| she has to write
+|\input tikz.tex| and instead of |\begin{tikzpicture}| she writes
+|\tikzpicture| and instead of |\end{tikzpicture}| she writes |\endtikzpicture|.
Thus, she would use:
+%
\begin{codeexample}[code only]
%% Plain TeX file
\input tikz.tex
@@ -204,24 +201,22 @@ We are working on
\bye
\end{codeexample}
-Gerda can typeset this file using either |pdftex| or |tex| together
-with |dvips|. \tikzname\ will automatically discern which driver she is
-using. If she wishes to use |dvipdfm| together with |tex|, she
-either needs to modify the file |pgf.cfg| or can write
-|\def\pgfsysdriver{pgfsys-dvipdfm.def}| somewhere \emph{before} she
-inputs |tikz.tex| or |pgf.tex|.
-
+Gerda can typeset this file using either |pdftex| or |tex| together with
+|dvips|. \tikzname\ will automatically discern which driver she is using. If
+she wishes to use |dvipdfm| together with |tex|, she either needs to modify the
+file |pgf.cfg| or can write |\def\pgfsysdriver{pgfsys-dvipdfm.def}| somewhere
+\emph{before} she inputs |tikz.tex| or |pgf.tex|.
\subsubsection{Setting up the Environment in Con\TeX t}
-Karl's uncle Hans uses Con\TeX t. Like Gerda, Hans can also use
-\tikzname. Instead of |\usepackage{tikz}| he says
-|\usemodule[tikz]|. Instead of |\begin{tikzpicture}| he writes
- |\starttikzpicture| and instead of |\end{tikzpicture}| he writes
-|\stoptikzpicture|.
+Karl's uncle Hans uses Con\TeX t. Like Gerda, Hans can also use \tikzname.
+Instead of |\usepackage{tikz}| he says |\usemodule[tikz]|. Instead of
+|\begin{tikzpicture}| he writes |\starttikzpicture| and instead of
+|\end{tikzpicture}| he writes |\stoptikzpicture|.
His version of the example looks like this:
+%
\begin{codeexample}[code only]
%% ConTeXt file
\usemodule[tikz]
@@ -235,55 +230,51 @@ His version of the example looks like this:
\stoptext
\end{codeexample}
-Hans will now typeset this file in the usual way using
-|texexec| or |context|.
-
+Hans will now typeset this file in the usual way using |texexec| or |context|.
\subsection{Straight Path Construction}
-The basic building block of all pictures in \tikzname\ is the path.
-A \emph{path} is a series of straight lines and curves that are
-connected (that is not the whole picture, but let us ignore the
-complications for the moment). You start a path by specifying the
-coordinates of the start position as a point in round brackets, as in
-|(0,0)|. This is followed by a series of ``path extension
-operations.'' The simplest is |--|, which we used already. It must be
-followed by another coordinate and it extends the path in a straight
-line to this new position. For example, if we were to turn the two
-paths of the axes into one path, the following would result:
-
+The basic building block of all pictures in \tikzname\ is the path. A
+\emph{path} is a series of straight lines and curves that are connected (that
+is not the whole picture, but let us ignore the complications for the moment).
+You start a path by specifying the coordinates of the start position as a point
+in round brackets, as in |(0,0)|. This is followed by a series of ``path
+extension operations''. The simplest is |--|, which we used already. It must be
+followed by another coordinate and it extends the path in a straight line to
+this new position. For example, if we were to turn the two paths of the axes
+into one path, the following would result:
+%
\begin{codeexample}[]
\tikz \draw (-1.5,0) -- (1.5,0) -- (0,-1.5) -- (0,1.5);
\end{codeexample}
Karl is a bit confused by the fact that there is no |{tikzpicture}|
-environment, here. Instead, the little command |\tikz| is used. This
-command either takes one argument (starting with an opening brace as in
-|\tikz{\draw (0,0) -- (1.5,0)}|, which yields \tikz{\draw (0,0)
- --(1.5,0);}) or collects everything up to the next semicolon and
-puts it inside a |{tikzpicture}| environment. As a rule of thumb, all
-\tikzname\ graphic drawing commands must occur as an argument of |\tikz|
-or inside a |{tikzpicture}| environment. Fortunately, the command
-|\draw| will only be defined inside this environment, so there is
-little chance that you will accidentally do something wrong here.
-
+environment, here. Instead, the little command |\tikz| is used. This command
+either takes one argument (starting with an opening brace as in
+|\tikz{\draw (0,0) -- (1.5,0)}|, which yields \tikz{\draw (0,0) --(1.5,0);}) or
+collects everything up to the next semicolon and puts it inside a
+|{tikzpicture}| environment. As a rule of thumb, all \tikzname\ graphic drawing
+commands must occur as an argument of |\tikz| or inside a |{tikzpicture}|
+environment. Fortunately, the command |\draw| will only be defined inside this
+environment, so there is little chance that you will accidentally do something
+wrong here.
\subsection{Curved Path Construction}
-The next thing Karl wants to do is to draw the circle. For this,
-straight lines obviously will not do. Instead, we need some way to
-draw curves. For this, \tikzname\ provides a special syntax. One or two
-``control points'' are needed. The math behind them is not quite
-trivial, but here is the basic idea: Suppose you are at point $x$ and
-the first control point is $y$. Then the curve will start ``going in
-the direction of~$y$ at~$x$,'' that is, the tangent of the curve at $x$
-will point toward~$y$. Next, suppose the curve should end at $z$ and
-the second support point is $w$. Then the curve will, indeed, end at
-$z$ and the tangent of the curve at point $z$ will go through $w$.
+The next thing Karl wants to do is to draw the circle. For this, straight lines
+obviously will not do. Instead, we need some way to draw curves. For this,
+\tikzname\ provides a special syntax. One or two ``control points'' are needed.
+The math behind them is not quite trivial, but here is the basic idea: Suppose
+you are at point $x$ and the first control point is $y$. Then the curve will
+start ``going in the direction of~$y$ at~$x$'', that is, the tangent of the
+curve at $x$ will point toward~$y$. Next, suppose the curve should end at $z$
+and the second support point is $w$. Then the curve will, indeed, end at $z$
+and the tangent of the curve at point $z$ will go through $w$.
Here is an example (the control points have been added for clarity):
+%
\begin{codeexample}[]
\begin{tikzpicture}
\filldraw [gray] (0,0) circle [radius=2pt]
@@ -294,14 +285,13 @@ Here is an example (the control points have been added for clarity):
\end{tikzpicture}
\end{codeexample}
-The general syntax for extending a path in a ``curved'' way is
-|.. controls| \meta{first control point} |and| \meta{second control
- point} |..| \meta{end point}. You can leave out the |and|
-\meta{second control point}, which causes the first one to be used
-twice.
+The general syntax for extending a path in a ``curved'' way is |.. controls|
+\meta{first control point} |and| \meta{second control point} |..|
+\meta{end point}. You can leave out the |and| \meta{second control point},
+which causes the first one to be used twice.
So, Karl can now add the first half circle to the picture:
-
+%
\begin{codeexample}[]
\begin{tikzpicture}
\draw (-1.5,0) -- (1.5,0);
@@ -311,38 +301,38 @@ So, Karl can now add the first half circle to the picture:
\end{tikzpicture}
\end{codeexample}
-Karl is happy with the result, but finds specifying circles in this
-way to be extremely awkward. Fortunately, there is a much simpler way.
+Karl is happy with the result, but finds specifying circles in this way to be
+extremely awkward. Fortunately, there is a much simpler way.
\subsection{Circle Path Construction}
-In order to draw a circle, the path construction operation |circle| can
-be used. This operation is followed by a radius in brackets as in
-the following example: (Note that the previous position is used as the
-\emph{center} of the circle.)
-
+In order to draw a circle, the path construction operation |circle| can be
+used. This operation is followed by a radius in brackets as in the following
+example: (Note that the previous position is used as the \emph{center} of the
+circle.)
+%
\begin{codeexample}[]
\tikz \draw (0,0) circle [radius=10pt];
\end{codeexample}
-You can also append an ellipse to the path using the |ellipse|
-operation. Instead of a single radius you can specify two of them:
-
+You can also append an ellipse to the path using the |ellipse| operation.
+Instead of a single radius you can specify two of them:
+%
\begin{codeexample}[]
\tikz \draw (0,0) ellipse [x radius=20pt, y radius=10pt];
\end{codeexample}
-To draw an ellipse whose axes are not horizontal and vertical, but
-point in an arbitrary direction (a ``turned ellipse'' like \tikz
-\draw[rotate=30] (0,0) ellipse [x radius=6pt, y radius=3pt];) you can use
-transformations, which are explained later. The code for the little
-ellipse is |\tikz \draw[rotate=30] (0,0) ellipse [x radius=6pt, y radius=3pt];|, by
-the way.
+To draw an ellipse whose axes are not horizontal and vertical, but point in an
+arbitrary direction (a ``turned ellipse'' like \tikz \draw[rotate=30] (0,0)
+ellipse [x radius=6pt, y radius=3pt];) you can use transformations, which are
+explained later. The code for the little ellipse is
+|\tikz \draw[rotate=30] (0,0) ellipse [x radius=6pt, y radius=3pt];|, by the
+way.
So, returning to Karl's problem, he can write
|\draw (0,0) circle [radius=1cm];| to draw the circle:
-
+%
\begin{codeexample}[]
\begin{tikzpicture}
\draw (-1.5,0) -- (1.5,0);
@@ -351,27 +341,24 @@ So, returning to Karl's problem, he can write
\end{tikzpicture}
\end{codeexample}
-
-At this point, Karl is a bit alarmed that the circle is so small when
-he wants the final picture to be much bigger. He is pleased to learn
-that \tikzname\ has powerful transformation options and scaling
-everything by a factor of three is very easy. But let us leave the
-size as it is for the moment to save some space.
-
-
+At this point, Karl is a bit alarmed that the circle is so small when he wants
+the final picture to be much bigger. He is pleased to learn that \tikzname\ has
+powerful transformation options and scaling everything by a factor of three is
+very easy. But let us leave the size as it is for the moment to save some
+space.
\subsection{Rectangle Path Construction}
-The next things we would like to have is the grid in the background.
-There are several ways to produce it. For example, one might draw lots of
-rectangles. Since rectangles are so common, there is a special syntax
-for them: To add a rectangle to the current path, use the |rectangle|
-path construction operation. This operation should be followed by another
-coordinate and will append a rectangle to the path such that the
-previous coordinate and the next coordinates are corners of the
-rectangle. So, let us add two rectangles to the picture:
-
+The next things we would like to have is the grid in the background. There are
+several ways to produce it. For example, one might draw lots of rectangles.
+Since rectangles are so common, there is a special syntax for them: To add a
+rectangle to the current path, use the |rectangle| path construction operation.
+This operation should be followed by another coordinate and will append a
+rectangle to the path such that the previous coordinate and the next
+coordinates are corners of the rectangle. So, let us add two rectangles to the
+picture:
+%
\begin{codeexample}[]
\begin{tikzpicture}
\draw (-1.5,0) -- (1.5,0);
@@ -382,31 +369,28 @@ rectangle. So, let us add two rectangles to the picture:
\end{tikzpicture}
\end{codeexample}
-While this may be nice in other situations, this is not really leading
-anywhere with Karl's problem: First, we would need an awful lot of
-these rectangles and then there is the border that is not ``closed.''
-
-So, Karl is about to resort to simply drawing four vertical and four
-horizontal lines using the nice |\draw| command, when he learns that
-there is a |grid| path construction operation.
+While this may be nice in other situations, this is not really leading anywhere
+with Karl's problem: First, we would need an awful lot of these rectangles and
+then there is the border that is not ``closed''.
+So, Karl is about to resort to simply drawing four vertical and four horizontal
+lines using the nice |\draw| command, when he learns that there is a |grid|
+path construction operation.
\subsection{Grid Path Construction}
-The |grid| path operation adds a grid to the current path. It will add
-lines making up a grid that fills the rectangle whose one corner is
-the current point and whose other corner is the point following the
-|grid| operation. For example, the code
-|\tikz \draw[step=2pt] (0,0) grid (10pt,10pt);| produces \tikz
-\draw[step=2pt] (0,0) grid (10pt,10pt);. Note how the optional
-argument for |\draw| can be used to specify a grid width (there are
-also |xstep| and |ystep| to define the steppings independently). As
-Karl will learn soon, there are \emph{lots} of things that can be
-influenced using such options.
+The |grid| path operation adds a grid to the current path. It will add lines
+making up a grid that fills the rectangle whose one corner is the current point
+and whose other corner is the point following the |grid| operation. For
+example, the code |\tikz \draw[step=2pt] (0,0) grid (10pt,10pt);| produces
+\tikz \draw[step=2pt] (0,0) grid (10pt,10pt);. Note how the optional argument
+for |\draw| can be used to specify a grid width (there are also |xstep| and
+|ystep| to define the steppings independently). As Karl will learn soon, there
+are \emph{lots} of things that can be influenced using such options.
For Karl, the following code could be used:
-
+%
\begin{codeexample}[]
\begin{tikzpicture}
\draw (-1.5,0) -- (1.5,0);
@@ -416,15 +400,14 @@ For Karl, the following code could be used:
\end{tikzpicture}
\end{codeexample}
-Having another look at the desired picture, Karl notices that it would
-be nice for the grid to be more subdued. (His son told him that grids
-tend to be distracting if they are not subdued.) To subdue the grid,
-Karl adds two more options to the |\draw| command that draws the
-grid. First, he uses the color |gray| for the grid lines. Second, he
-reduces the line width to |very thin|. Finally, he swaps the ordering
-of the commands so that the grid is drawn first and everything else on
-top.
-
+Having another look at the desired picture, Karl notices that it would be nice
+for the grid to be more subdued. (His son told him that grids tend to be
+distracting if they are not subdued.) To subdue the grid, Karl adds two more
+options to the |\draw| command that draws the grid. First, he uses the color
+|gray| for the grid lines. Second, he reduces the line width to |very thin|.
+Finally, he swaps the ordering of the commands so that the grid is drawn first
+and everything else on top.
+%
\begin{codeexample}[]
\begin{tikzpicture}
\draw[step=.5cm,gray,very thin] (-1.4,-1.4) grid (1.4,1.4);
@@ -437,46 +420,47 @@ top.
\subsection{Adding a Touch of Style}
-Instead of the options |gray,very thin| Karl could also have
-said |help lines|. \emph{Styles} are predefined sets of options
-that can be used to organize how a graphic is drawn. By saying
-|help lines| you say ``use the style that I (or someone else)
-has set for drawing help lines.'' If Karl decides, at some later
-point, that grids should be drawn, say, using the color |blue!50|
-instead of |gray|, he could provide the following option somewhere:
+Instead of the options |gray,very thin| Karl could also have said |help lines|.
+\emph{Styles} are predefined sets of options that can be used to organize how a
+graphic is drawn. By saying |help lines| you say ``use the style that I (or
+someone else) has set for drawing help lines''. If Karl decides, at some later
+point, that grids should be drawn, say, using the color |blue!50| instead of
+|gray|, he could provide the following option somewhere:
+%
\begin{codeexample}[code only]
help lines/.style={color=blue!50,very thin}
\end{codeexample}
-The effect of this ``style setter'' is that in the current
-scope or environment the |help lines| option has the same effect as
-|color=blue!50,very thin|.
-
-Using styles makes your graphics code more flexible. You can
-change the way things look easily in a consistent manner.
-Normally, styles are defined at the beginning of a picture. However,
-you may sometimes wish to define a style globally, so that all
-pictures of your document can use this style. Then you can easily
-change the way all graphics look by changing this one style. In this
-situation you can use the |\tikzset| command at the beginning of the
-document as in
+%
+The effect of this ``style setter'' is that in the current scope or environment
+the |help lines| option has the same effect as |color=blue!50,very thin|.
+
+Using styles makes your graphics code more flexible. You can change the way
+things look easily in a consistent manner. Normally, styles are defined at the
+beginning of a picture. However, you may sometimes wish to define a style
+globally, so that all pictures of your document can use this style. Then you
+can easily change the way all graphics look by changing this one style. In this
+situation you can use the |\tikzset| command at the beginning of the document
+as in
+%
\begin{codeexample}[code only]
\tikzset{help lines/.style=very thin}
\end{codeexample}
-To build a hierarchy of styles you can have one style use
-another. So in order to define a style |Karl's grid| that is based on
-the |grid| style Karl could say
+To build a hierarchy of styles you can have one style use another. So in order
+to define a style |Karl's grid| that is based on the |grid| style Karl could
+say
+%
\begin{codeexample}[code only]
\tikzset{Karl's grid/.style={help lines,color=blue!50}}
...
\draw[Karl's grid] (0,0) grid (5,5);
\end{codeexample}
-Styles are made even more powerful by parametrization. This means
-that, like other options, styles can also be used with a
-parameter. For instance, Karl could parameterize his grid so that, by
-default, it is blue, but he could also use another color.
-
+Styles are made even more powerful by parametrization. This means that, like
+other options, styles can also be used with a parameter. For instance, Karl
+could parameterize his grid so that, by default, it is blue, but he could also
+use another color.
+%
\begin{codeexample}[code only]
\begin{tikzpicture}
[Karl's grid/.style ={help lines,color=#1!50},
@@ -490,53 +474,46 @@ default, it is blue, but he could also use another color.
\subsection{Drawing Options}
-Karl wonders what other options there are that influence how a path is
-drawn. He saw already that the |color=|\meta{color} option can be used
-to set the line's color. The option |draw=|\meta{color} does nearly
-the same, only it sets the color for the lines only and a different
-color can be used for filling (Karl will need this when he fills the
-arc for the angle).
-
-He saw that the style |very thin| yields very thin lines. Karl is not
-really surprised by this and neither is he surprised to learn that |thin|
-yields thin lines, |thick| yields thick lines, |very thick| yields
-very thick lines, |ultra thick| yields really, really thick lines and
-|ultra thin| yields lines that are so thin that low-resolution printers
-and displays will have trouble showing them. He wonders what gives
-lines of ``normal'' thickness. It turns out that |thin| is the correct
-choice, since it gives the same thickness as \TeX's |\hrule|
-command. Nevertheless, Karl would like to know whether there is
-anything ``in the middle'' between |thin| and |thick|. There is:
-|semithick|.
-
-Another useful thing one can do with lines is to dash or dot them. For
-this, the two styles |dashed| and |dotted| can be used, yielding
-\tikz[baseline] \draw[dashed] (0,.5ex) -- ++(2em,0pt); and
-\tikz[baseline] \draw[dotted] (0,.5ex)
--- ++(2em,0pt);. Both options also exist in a loose and a dense
-version, called |loosely dashed|, |densely dashed|, |loosely dotted|,
-and |densely dotted|. If he really, really needs to, Karl can also
-define much more complex dashing patterns with the |dash pattern|
-option, but his son insists that dashing is to be used with utmost
-care and mostly distracts. Karl's son claims that complicated dashing
-patterns are evil. Karl's students do not care about dashing patterns.
-
+Karl wonders what other options there are that influence how a path is drawn.
+He saw already that the |color=|\meta{color} option can be used to set the
+line's color. The option |draw=|\meta{color} does nearly the same, only it sets
+the color for the lines only and a different color can be used for filling
+(Karl will need this when he fills the arc for the angle).
+
+He saw that the style |very thin| yields very thin lines. Karl is not really
+surprised by this and neither is he surprised to learn that |thin| yields thin
+lines, |thick| yields thick lines, |very thick| yields very thick lines,
+|ultra thick| yields really, really thick lines and |ultra thin| yields lines
+that are so thin that low-resolution printers and displays will have trouble
+showing them. He wonders what gives lines of ``normal'' thickness. It turns out
+that |thin| is the correct choice, since it gives the same thickness as \TeX's
+|\hrule| command. Nevertheless, Karl would like to know whether there is
+anything ``in the middle'' between |thin| and |thick|. There is: |semithick|.
+
+Another useful thing one can do with lines is to dash or dot them. For this,
+the two styles |dashed| and |dotted| can be used, yielding \tikz[baseline]
+\draw[dashed] (0,.5ex) -- ++(2em,0pt); and \tikz[baseline] \draw[dotted]
+(0,.5ex) -- ++(2em,0pt);. Both options also exist in a loose and a dense
+version, called |loosely dashed|, |densely dashed|, |loosely dotted|, and
+|densely dotted|. If he really, really needs to, Karl can also define much
+more complex dashing patterns with the |dash pattern| option, but his son
+insists that dashing is to be used with utmost care and mostly distracts.
+Karl's son claims that complicated dashing patterns are evil. Karl's students
+do not care about dashing patterns.
\subsection{Arc Path Construction}
-Our next obstacle is to draw the arc for the angle. For this, the
-|arc| path construction operation is useful, which draws part of a
-circle or ellipse. This |arc| operation is followed by options in
-brackets that specify the arc. An example would be \texttt{arc[start
- angle=10, end angle=80, radius=10pt]}, which means exactly what it
-says. Karl obviously
-needs an arc from $0^\circ$ to $30^\circ$. The radius should be
-something relatively small, perhaps around one third of the circle's
-radius. When one uses the arc path construction operation, the
-specified arc will be added with its starting point at the current
-position. So, we first have to ``get there.''
-
+Our next obstacle is to draw the arc for the angle. For this, the |arc| path
+construction operation is useful, which draws part of a circle or ellipse. This
+|arc| operation is followed by options in brackets that specify the arc. An
+example would be \texttt{arc[start angle=10, end angle=80, radius=10pt]}, which
+means exactly what it says. Karl obviously needs an arc from $0^\circ$ to
+$30^\circ$. The radius should be something relatively small, perhaps around one
+third of the circle's radius. When one uses the arc path construction
+operation, the specified arc will be added with its starting point at the
+current position. So, we first have to ``get there''.
+%
\begin{codeexample}[]
\begin{tikzpicture}
\draw[step=.5cm,gray,very thin] (-1.4,-1.4) grid (1.4,1.4);
@@ -547,12 +524,12 @@ position. So, we first have to ``get there.''
\end{tikzpicture}
\end{codeexample}
-Karl thinks this is really a bit small and he cannot continue unless
-he learns how to do scaling. For this, he can add the |[scale=3]|
-option. He could add this option to each |\draw| command, but that
-would be awkward. Instead, he adds it to the whole environment, which
-causes this option to apply to everything within.
-
+Karl thinks this is really a bit small and he cannot continue unless he learns
+how to do scaling. For this, he can add the |[scale=3]| option. He could add
+this option to each |\draw| command, but that would be awkward. Instead, he
+adds it to the whole environment, which causes this option to apply to
+everything within.
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\draw[step=.5cm,gray,very thin] (-1.4,-1.4) grid (1.4,1.4);
@@ -563,25 +540,24 @@ causes this option to apply to everything within.
\end{tikzpicture}
\end{codeexample}
-As for circles, you can specify ``two'' radii in order to get an
-elliptical arc.
-
+As for circles, you can specify ``two'' radii in order to get an elliptical
+arc.
+%
\begin{codeexample}[]
- \tikz \draw (0,0)
- arc [start angle=0, end angle=315,
+ \tikz \draw (0,0)
+ arc [start angle=0, end angle=315,
x radius=1.75cm, y radius=1cm];
\end{codeexample}
\subsection{Clipping a Path}
-In order to save space in this manual, it would be nice to clip Karl's
-graphics a bit so that we can focus on the ``interesting''
-parts. Clipping is pretty easy in \tikzname. You can use the |\clip|
-command to clip all subsequent drawing. It works like |\draw|, only it
-does not draw anything, but uses the given path to clip everything
-subsequently.
-
+In order to save space in this manual, it would be nice to clip Karl's graphics
+a bit so that we can focus on the ``interesting'' parts. Clipping is pretty
+easy in \tikzname. You can use the |\clip| command to clip all subsequent
+drawing. It works like |\draw|, only it does not draw anything, but uses the
+given path to clip everything subsequently.
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.1,-0.2) rectangle (1.1,0.75);
@@ -593,14 +569,13 @@ subsequently.
\end{tikzpicture}
\end{codeexample}
-You can also do both at the same time: Draw \emph{and} clip a
-path. For this, use the |\draw| command and add the |clip|
-option. (This is not the whole picture: You can also use the |\clip|
-command and add the |draw| option. Well, that is also not the whole
-picture: In reality, |\draw| is just a shorthand for |\path[draw]|
-and |\clip| is a shorthand for |\path[clip]| and you could also say
-|\path[draw,clip]|.) Here is an example:
-
+You can also do both at the same time: Draw \emph{and} clip a path. For this,
+use the |\draw| command and add the |clip| option. (This is not the whole
+picture: You can also use the |\clip| command and add the |draw| option. Well,
+that is also not the whole picture: In reality, |\draw| is just a shorthand for
+|\path[draw]| and |\clip| is a shorthand for |\path[clip]| and you could also
+say |\path[draw,clip]|.) Here is an example:
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip[draw] (0.5,0.5) circle (.6cm);
@@ -615,27 +590,25 @@ and |\clip| is a shorthand for |\path[clip]| and you could also say
\subsection{Parabola and Sine Path Construction}
-Although Karl does not need them for his picture, he is pleased to
-learn that there are |parabola| and |sin| and |cos| path operations for
-adding parabolas and sine and cosine curves to the current path. For the
-|parabola| operation, the current point will lie on the parabola as
-well as the point given after the parabola operation. Consider
-the following example:
-
+Although Karl does not need them for his picture, he is pleased to learn that
+there are |parabola| and |sin| and |cos| path operations for adding parabolas
+and sine and cosine curves to the current path. For the |parabola| operation,
+the current point will lie on the parabola as well as the point given after the
+parabola operation. Consider the following example:
+%
\begin{codeexample}[]
\tikz \draw (0,0) rectangle (1,1) (0,0) parabola (1,1);
\end{codeexample}
It is also possible to place the bend somewhere else:
-
+%
\begin{codeexample}[]
\tikz \draw[x=1pt,y=1pt] (0,0) parabola bend (4,16) (6,12);
\end{codeexample}
The operations |sin| and |cos| add a sine or cosine curve in the interval
-$[0,\pi/2]$ such that the previous current point is at the start of
-the curve and the curve ends at the given end point. Here are two
-examples:
+$[0,\pi/2]$ such that the previous current point is at the start of the curve
+and the curve ends at the given end point. Here are two examples:
\begin{codeexample}[]
A sine \tikz \draw[x=1ex,y=1ex] (0,0) sin (1.57,1); curve.
\end{codeexample}
@@ -646,13 +619,12 @@ A sine \tikz \draw[x=1ex,y=1ex] (0,0) sin (1.57,1); curve.
\end{codeexample}
-
\subsection{Filling and Drawing}
-Returning to the picture, Karl now wants the angle to be ``filled''
-with a very light green. For this he uses |\fill| instead of
-|\draw|. Here is what Karl does:
-
+Returning to the picture, Karl now wants the angle to be ``filled'' with a very
+light green. For this he uses |\fill| instead of |\draw|. Here is what Karl
+does:
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.1,-0.2) rectangle (1.1,0.75);
@@ -665,24 +637,25 @@ with a very light green. For this he uses |\fill| instead of
\end{tikzpicture}
\end{codeexample}
-The color |green!20!white| means 20\% green and 80\% white mixed
-together. Such color expression are possible since \tikzname\ uses Uwe
-Kern's |xcolor| package, see the documentation of that package for
-details on color expressions.
+The color |green!20!white| means 20\% green and 80\% white mixed together. Such
+color expression are possible since \tikzname\ uses Uwe Kern's |xcolor|
+package, see the documentation of that package for details on color
+expressions.
-What would have happened, if Karl had not ``closed'' the path using
-|--(0,0)| at the end? In this case, the path is closed automatically,
-so this could have been omitted. Indeed, it would even have been
-better to write the following, instead:
+What would have happened, if Karl had not ``closed'' the path using |--(0,0)|
+at the end? In this case, the path is closed automatically, so this could have
+been omitted. Indeed, it would even have been better to write the following,
+instead:
+%
\begin{codeexample}[code only]
\fill[green!20!white] (0,0) -- (3mm,0mm)
arc [start angle=0, end angle=30, radius=3mm] -- cycle;
\end{codeexample}
-The |--cycle| causes the current path to be closed (actually the
-current part of the current path) by smoothly joining the first and
-last point. To appreciate the difference, consider the following
-example:
-
+%
+The |--cycle| causes the current path to be closed (actually the current part
+of the current path) by smoothly joining the first and last point. To
+appreciate the difference, consider the following example:
+%
\begin{codeexample}[]
\begin{tikzpicture}[line width=5pt]
\draw (0,0) -- (1,0) -- (1,1) -- (0,0);
@@ -691,12 +664,11 @@ example:
\end{tikzpicture}
\end{codeexample}
-You can also fill and draw a path at the same time using the
-|\filldraw| command. This will first draw the path, then fill it. This
-may not seem too useful, but you can specify different colors to be
-used for filling and for stroking. These are specified as optional
-arguments like this:
-
+You can also fill and draw a path at the same time using the |\filldraw|
+command. This will first draw the path, then fill it. This may not seem too
+useful, but you can specify different colors to be used for filling and for
+stroking. These are specified as optional arguments like this:
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.1,-0.2) rectangle (1.1,0.75);
@@ -710,21 +682,20 @@ arguments like this:
\end{codeexample}
-
\subsection{Shading}
-Karl briefly considers the possibility of making the angle ``more
-fancy'' by \emph{shading} it. Instead of filling the area with a uniform
-color, a smooth transition between different colors is used. For this,
-|\shade| and |\shadedraw|, for shading and drawing at the same time,
-can be used:
-
+Karl briefly considers the possibility of making the angle ``more fancy'' by
+\emph{shading} it. Instead of filling the area with a uniform color, a smooth
+transition between different colors is used. For this, |\shade| and
+|\shadedraw|, for shading and drawing at the same time, can be used:
+%
\begin{codeexample}[]
\tikz \shade (0,0) rectangle (2,1) (3,0.5) circle (.5cm);
\end{codeexample}
-The default shading is a smooth transition from gray to white. To
-specify different colors, you can use options:
-
+%
+The default shading is a smooth transition from gray to white. To specify
+different colors, you can use options:
+%
\begin{codeexample}[]
\begin{tikzpicture}[rounded corners,ultra thick]
\shade[top color=yellow,bottom color=black] (0,0) rectangle +(2,1);
@@ -735,7 +706,7 @@ specify different colors, you can use options:
\end{codeexample}
For Karl, the following might be appropriate:
-
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.1,-0.2) rectangle (1.1,0.75);
@@ -749,35 +720,34 @@ For Karl, the following might be appropriate:
\end{tikzpicture}
\end{codeexample}
-However, he wisely decides that shadings usually only distract without
-adding anything to the picture.
+However, he wisely decides that shadings usually only distract without adding
+anything to the picture.
\subsection{Specifying Coordinates}
-Karl now wants to add the sine and cosine lines. He knows already that
-he can use the |color=| option to set the lines' colors. So, what is
-the best way to specify the coordinates?
-
-There are different ways of specifying coordinates. The easiest way is
-to say something like |(10pt,2cm)|. This means 10pt in $x$-direction
-and 2cm in $y$-directions. Alternatively, you can also leave out the
-units as in |(1,2)|, which means ``one times the current $x$-vector
-plus twice the current $y$-vector.'' These vectors default to 1cm in
-the $x$-direction and 1cm in the $y$-direction, respectively.
-
-In order to specify points in polar coordinates, use the notation
-|(30:1cm)|, which means 1cm in direction 30 degree. This is obviously
-quite useful to ``get to the point $(\cos 30^\circ,\sin 30^\circ)$ on
-the circle.''
-
-You can add a single |+| sign in front of a coordinate or two of
-them as in |+(0cm,1cm)| or |++(2cm,0cm)|. Such coordinates are interpreted
-differently: The first form means ``1cm upwards from the previous
-specified position'' and the second means ``2cm to the right of the
-previous specified position, making this the new specified position.''
-For example, we can draw the sine line as follows:
-
+Karl now wants to add the sine and cosine lines. He knows already that he can
+use the |color=| option to set the lines' colors. So, what is the best way to
+specify the coordinates?
+
+There are different ways of specifying coordinates. The easiest way is to say
+something like |(10pt,2cm)|. This means 10pt in $x$-direction and 2cm in
+$y$-directions. Alternatively, you can also leave out the units as in |(1,2)|,
+which means ``one times the current $x$-vector plus twice the current
+$y$-vector''. These vectors default to 1cm in the $x$-direction and 1cm in the
+$y$-direction, respectively.
+
+In order to specify points in polar coordinates, use the notation |(30:1cm)|,
+which means 1cm in direction 30 degree. This is obviously quite useful to ``get
+to the point $(\cos 30^\circ,\sin 30^\circ)$ on the circle''.
+
+You can add a single |+| sign in front of a coordinate or two of them as in
+|+(0cm,1cm)| or |++(2cm,0cm)|. Such coordinates are interpreted differently:
+The first form means ``1cm upwards from the previous specified position'' and
+the second means ``2cm to the right of the previous specified position, making
+this the new specified position''. For example, we can draw the sine line as
+follows:
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.1,-0.2) rectangle (1.1,0.75);
@@ -791,18 +761,17 @@ For example, we can draw the sine line as follows:
\end{tikzpicture}
\end{codeexample}
-Karl used the fact $\sin 30^\circ = 1/2$. However, he very much
-doubts that his students know this, so it would be nice to have a way
-of specifying ``the point straight down from |(30:1cm)| that lies on
-the $x$-axis.'' This is, indeed, possible using a special syntax: Karl
-can write \verb!(30:1cm |- 0,0)!. In general, the meaning of
-|(|\meta{p}\verb! |- !\meta{q}|)| is ``the intersection of a vertical
-line through $p$ and a horizontal line through $q$.''
+Karl used the fact $\sin 30^\circ = 1/2$. However, he very much doubts that his
+students know this, so it would be nice to have a way of specifying ``the point
+straight down from |(30:1cm)| that lies on the $x$-axis''. This is, indeed,
+possible using a special syntax: Karl can write \verb!(30:1cm |- 0,0)!. In
+general, the meaning of |(|\meta{p}\verb! |- !\meta{q}|)| is ``the intersection
+of a vertical line through $p$ and a horizontal line through $q$''.
Next, let us draw the cosine line. One way would be to say
-\verb!(30:1cm |- 0,0) -- (0,0)!. Another way is the following: we
-``continue'' from where the sine ends:
-
+\verb!(30:1cm |- 0,0) -- (0,0)!. Another way is the following: we ``continue''
+from where the sine ends:
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.1,-0.2) rectangle (1.1,0.75);
@@ -817,17 +786,16 @@ Next, let us draw the cosine line. One way would be to say
\end{tikzpicture}
\end{codeexample}
-Note that there is no |--| between |(30:1cm)| and |++(0,-0.5)|. In
-detail, this path is interpreted as follows: ``First, the |(30:1cm)|
-tells me to move by pen to $(\cos 30^\circ,1/2)$. Next, there comes
-another coordinate specification, so I move my pen there without drawing
-anything. This new point is half a unit down from the last position,
-thus it is at $(\cos 30^\circ,0)$. Finally, I move the pen to the
-origin, but this time drawing something (because of the |--|).''
-
-To appreciate the difference between |+| and |++| consider the
-following example:
+Note that there is no |--| between |(30:1cm)| and |++(0,-0.5)|. In detail, this
+path is interpreted as follows: ``First, the |(30:1cm)| tells me to move by pen
+to $(\cos 30^\circ,1/2)$. Next, there comes another coordinate specification,
+so I move my pen there without drawing anything. This new point is half a unit
+down from the last position, thus it is at $(\cos 30^\circ,0)$. Finally, I move
+the pen to the origin, but this time drawing something (because of the |--|).''
+To appreciate the difference between |+| and |++| consider the following
+example:
+%
\begin{codeexample}[]
\begin{tikzpicture}
\def\rectanglepath{-- ++(1cm,0cm) -- ++(0cm,1cm) -- ++(-1cm,0cm) -- cycle}
@@ -837,7 +805,7 @@ following example:
\end{codeexample}
By comparison, when using a single |+|, the coordinates are different:
-
+%
\begin{codeexample}[]
\begin{tikzpicture}
\def\rectanglepath{-- +(1cm,0cm) -- +(1cm,1cm) -- +(0cm,1cm) -- cycle}
@@ -849,6 +817,7 @@ By comparison, when using a single |+|, the coordinates are different:
Naturally, all of this could have been written more clearly and more
economically like this (either with a single of a double |+|):
+%
\begin{codeexample}[]
\tikz \draw (0,0) rectangle +(1,1) (1.5,0) rectangle +(1,1);
\end{codeexample}
@@ -856,35 +825,33 @@ economically like this (either with a single of a double |+|):
\subsection{Intersecting Paths}
-Karl is left with the line for $\tan \alpha$, which seems difficult to
-specify using transformations and polar coordinates. The first -- and
-easiest -- thing he can do is so simply use the coordinate
-|(1,{tan(30)})| since \tikzname's math engine knows how to compute
-things like |tan(30)|. Note the added braces since, otherwise,
-\tikzname's parser would think that the first closing parenthesis ends
-the coordinate (in general, you need to add braces around components
-of coordinates when these components contain parentheses).
-
-Karl can, however, also use a more elaborate, but also more
-``geometric'' way of computing the length of the orange line: He can
-specify intersections of paths as coordinates. The line for $\tan
-\alpha$ starts at $(1,0)$
-and goes upward to a point that is at the intersection of a line going
-``up'' and a line going from the origin through |(30:1cm)|. Such
-computations are made available by the |intersections| library.
-
-What Karl must do is to create two ``invisible'' paths that intersect
-at the position of interest. Creating paths that are not otherwise
-seen can be done using the |\path| command without any options like
-|draw| or |fill|. Then, Karl can add the |name path| option to the
-path for later reference. Once the paths have been constructed, Karl
-can use the |name intersections| to assign names to the coordinate for
-later reference.
-
+Karl is left with the line for $\tan \alpha$, which seems difficult to specify
+using transformations and polar coordinates. The first -- and easiest -- thing
+he can do is so simply use the coordinate |(1,{tan(30)})| since \tikzname's
+math engine knows how to compute things like |tan(30)|. Note the added braces
+since, otherwise, \tikzname's parser would think that the first closing
+parenthesis ends the coordinate (in general, you need to add braces around
+components of coordinates when these components contain parentheses).
+
+Karl can, however, also use a more elaborate, but also more ``geometric'' way
+of computing the length of the orange line: He can specify intersections of
+paths as coordinates. The line for $\tan \alpha$ starts at $(1,0)$ and goes
+upward to a point that is at the intersection of a line going ``up'' and a line
+going from the origin through |(30:1cm)|. Such computations are made available
+by the |intersections| library.
+
+What Karl must do is to create two ``invisible'' paths that intersect at the
+position of interest. Creating paths that are not otherwise seen can be done
+using the |\path| command without any options like |draw| or |fill|. Then, Karl
+can add the |name path| option to the path for later reference. Once the paths
+have been constructed, Karl can use the |name intersections| to assign names to
+the coordinate for later reference.
+%
\begin{codeexample}[code only]
\path [name path=upward line] (1,0) -- (1,1);
\path [name path=sloped line] (0,0) -- (30:1.5cm); % a bit longer, so that there is an intersection
+% (add `\usetikzlibrary{intersections}' after loading tikz in the preamble)
\draw [name intersections={of=upward line and sloped line, by=x}]
[very thick,orange] (1,0) -- (x);
\end{codeexample}
@@ -893,14 +860,14 @@ later reference.
\subsection{Adding Arrow Tips}
Karl now wants to add the little arrow tips at the end of the axes. He has
-noticed that in many plots, even in scientific journals, these arrow tips
-seem to be missing, presumably because the generating programs cannot
-produce them. Karl thinks arrow tips belong at the end of axes. His
-son agrees. His students do not care about arrow tips.
-
-It turns out that adding arrow tips is pretty easy: Karl adds the option
-|->| to the drawing commands for the axes:
+noticed that in many plots, even in scientific journals, these arrow tips seem
+to be missing, presumably because the generating programs cannot produce them.
+Karl thinks arrow tips belong at the end of axes. His son agrees. His students
+do not care about arrow tips.
+It turns out that adding arrow tips is pretty easy: Karl adds the option |->|
+to the drawing commands for the axes:
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.1,-0.2) rectangle (1.1,1.51);
@@ -920,17 +887,16 @@ It turns out that adding arrow tips is pretty easy: Karl adds the option
\end{tikzpicture}
\end{codeexample}
-If Karl had used the option |<-| instead of |->|, arrow tips would
-have been put at the beginning of the path. The option |<->| puts
-arrow tips at both ends of the path.
-
-There are certain restrictions to the kind of paths to which arrow tips
-can be added. As a rule of thumb, you can add arrow tips only to a
-single open ``line.'' For example, you cannot add tips to,
-say, a rectangle or a circle. However, you can add arrow
-tips to curved paths and to paths that have several segments, as in
-the following examples:
+If Karl had used the option |<-| instead of |->|, arrow tips would have been
+put at the beginning of the path. The option |<->| puts arrow tips at both ends
+of the path.
+There are certain restrictions to the kind of paths to which arrow tips can be
+added. As a rule of thumb, you can add arrow tips only to a single open
+``line''. For example, you cannot add tips to, say, a rectangle or a circle.
+However, you can add arrow tips to curved paths and to paths that have several
+segments, as in the following examples:
+%
\begin{codeexample}[]
\begin{tikzpicture}
\draw [<->] (0,0) arc [start angle=180, end angle=30, radius=10pt];
@@ -938,57 +904,55 @@ the following examples:
\end{tikzpicture}
\end{codeexample}
-Karl has a more detailed look at the arrow that \tikzname\ puts at the
-end. It looks like this when he zooms it: \tikz[baseline]
-\draw[->,line width=1pt] (0pt,.5ex) -- ++(10pt,0pt);. The shape seems
-vaguely familiar and, indeed, this is exactly the end of \TeX's
-standard arrow used in something like $f\colon A \to B$.
-
-Karl likes the arrow, especially since it is not ``as thick'' as the
-arrows offered by many other packages. However, he expects that,
-sometimes, he might need to use some other kinds of arrow.
-To do so, Karl can say |>=|\meta{kind of end arrow tip}, where
-\meta{kind of end arrow tip} is a special arrow tip specification. For
-example, if Karl says |>=Stealth|, then he tells \tikzname\
+Karl has a more detailed look at the arrow that \tikzname\ puts at the end. It
+looks like this when he zooms it: \tikz[baseline] \draw[->,line width=1pt]
+(0pt,.5ex) -- ++(10pt,0pt);. The shape seems vaguely familiar and, indeed, this
+is exactly the end of \TeX's standard arrow used in something like $f\colon A
+\to B$.
+
+Karl likes the arrow, especially since it is not ``as thick'' as the arrows
+offered by many other packages. However, he expects that, sometimes, he might
+need to use some other kinds of arrow. To do so, Karl can say |>=|\meta{kind of
+end arrow tip}, where \meta{kind of end arrow tip} is a special arrow tip
+specification. For example, if Karl says |>=Stealth|, then he tells \tikzname\
that he would like ``stealth-fighter-like'' arrow tips:
-
+\todosp{remaining instance of bug \#473}
+%
\begin{codeexample}[]
\begin{tikzpicture}[>=Stealth]
\draw [->] (0,0) arc [start angle=180, end angle=30, radius=10pt];
\draw [<<-,very thick] (1,0) -- (1.5cm,10pt) -- (2cm,0pt) -- (2.5cm,10pt);
\end{tikzpicture}
-\end{codeexample}%>>
+\end{codeexample}
Karl wonders whether such a military name for the arrow type is really
-necessary. He is not really mollified when his son tells him that
-Microsoft's PowerPoint uses the same name. He decides to have his
-students discuss this at some point.
+necessary. He is not really mollified when his son tells him that Microsoft's
+PowerPoint uses the same name. He decides to have his students discuss this at
+some point.
-In addition to |Stealth| there are several other predefined kinds of
-arrow tips Karl can choose from, see Section~\ref{section-arrows}. Furthermore,
-he can define arrows types himself, if he needs new ones.
+In addition to |Stealth| there are several other predefined kinds of arrow tips
+Karl can choose from, see Section~\ref{section-arrows}. Furthermore, he can
+define arrows types himself, if he needs new ones.
\subsection{Scoping}
-Karl saw already that there are numerous graphic options that affect how
-paths are rendered. Often, he would like to apply certain options to
-a whole set of graphic commands. For example, Karl might wish to draw
-three paths using a |thick| pen, but would like everything else to
-be drawn ``normally.''
-
-If Karl wishes to set a certain graphic option for the whole picture,
-he can simply pass this option to the |\tikz| command or to the
-|{tikzpicture}| environment (Gerda would pass the options to
-|\tikzpicture| and Hans passes them to |\starttikzpicture|). However,
-if Karl wants to apply graphic options to a local group, he put these
-commands inside a |{scope}| environment (Gerda uses |\scope| and
-|\endscope|, Hans uses |\startscope| and |\stopscope|). This
-environment takes graphic options as an optional argument and these
-options apply to everything inside the scope, but not to anything outside.
+Karl saw already that there are numerous graphic options that affect how paths
+are rendered. Often, he would like to apply certain options to a whole set of
+graphic commands. For example, Karl might wish to draw three paths using a
+|thick| pen, but would like everything else to be drawn ``normally''.
-Here is an example:
+If Karl wishes to set a certain graphic option for the whole picture, he can
+simply pass this option to the |\tikz| command or to the |{tikzpicture}|
+environment (Gerda would pass the options to |\tikzpicture| and Hans passes
+them to |\starttikzpicture|). However, if Karl wants to apply graphic options
+to a local group, he put these commands inside a |{scope}| environment (Gerda
+uses |\scope| and |\endscope|, Hans uses |\startscope| and |\stopscope|). This
+environment takes graphic options as an optional argument and these options
+apply to everything inside the scope, but not to anything outside.
+Here is an example:
+%
\begin{codeexample}[]
\begin{tikzpicture}[ultra thick]
\draw (0,0) -- (0,1);
@@ -1000,58 +964,51 @@ Here is an example:
\end{tikzpicture}
\end{codeexample}
-Scoping has another interesting effect: Any changes to the clipping
-area are local to the scope. Thus, if you say |\clip| somewhere inside
-a scope, the effect of the |\clip| command ends at the end of the
-scope. This is useful since there is no other way of ``enlarging'' the
-clipping area.
-
-Karl has also already seen that giving options to commands like
-|\draw| apply only to that command. It turns out that the situation is
-slightly more complex. First, options to a command like |\draw| are
-not really options to the command, but they are ``path options'' and
-can be given anywhere on the path. So, instead of
-|\draw[thin] (0,0) -- (1,0);| one can also write
-|\draw (0,0) [thin] -- (1,0);| or |\draw (0,0) -- (1,0) [thin];|; all
-of these have the same effect. This might seem strange since in the
-last case, it would appear that the |thin| should take effect only
-``after'' the line from $(0,0)$ to $(1,0)$ has been drawn. However,
-most graphic options only apply to the whole path. Indeed, if you say
-both |thin| and |thick| on the same path, the last option given will
-``win.''
-
-When reading the above, Karl notices that only ``most'' graphic
-options apply to the whole path. Indeed, all transformation options do
-\emph{not} apply to the whole path, but only to ``everything following
-them on the path.'' We will have a more detailed look at this in a
-moment. Nevertheless, all options given during a path construction
-apply only to this path.
-
+Scoping has another interesting effect: Any changes to the clipping area are
+local to the scope. Thus, if you say |\clip| somewhere inside a scope, the
+effect of the |\clip| command ends at the end of the scope. This is useful
+since there is no other way of ``enlarging'' the clipping area.
+
+Karl has also already seen that giving options to commands like |\draw| apply
+only to that command. It turns out that the situation is slightly more complex.
+First, options to a command like |\draw| are not really options to the command,
+but they are ``path options'' and can be given anywhere on the path. So,
+instead of |\draw[thin] (0,0) -- (1,0);| one can also write
+|\draw (0,0) [thin] -- (1,0);| or |\draw (0,0) -- (1,0) [thin];|; all of these
+have the same effect. This might seem strange since in the last case, it would
+appear that the |thin| should take effect only ``after'' the line from $(0,0)$
+to $(1,0)$ has been drawn. However, most graphic options only apply to the
+whole path. Indeed, if you say both |thin| and |thick| on the same path, the
+last option given will ``win''.
+
+When reading the above, Karl notices that only ``most'' graphic options apply
+to the whole path. Indeed, all transformation options do \emph{not} apply to
+the whole path, but only to ``everything following them on the path''. We will
+have a more detailed look at this in a moment. Nevertheless, all options given
+during a path construction apply only to this path.
\subsection{Transformations}
-When you specify a coordinate like |(1cm,1cm)|, where is that
-coordinate placed on the page? To determine the position, \tikzname,
-\TeX, and \textsc{pdf} or PostScript all apply certain transformations
-to the given coordinate in order to determine the final position on
-the page.
+When you specify a coordinate like |(1cm,1cm)|, where is that coordinate
+placed on the page? To determine the position, \tikzname, \TeX, and
+\textsc{pdf} or PostScript all apply certain transformations to the given
+coordinate in order to determine the final position on the page.
-\tikzname\ provides numerous options that allow you to transform
-coordinates in \tikzname's private coordinate system. For example, the
-|xshift| option allows you to shift all subsequent points by a certain
-amount:
+\tikzname\ provides numerous options that allow you to transform coordinates in
+\tikzname's private coordinate system. For example, the |xshift| option allows
+you to shift all subsequent points by a certain amount:
\begin{codeexample}[]
\tikz \draw (0,0) -- (0,0.5) [xshift=2pt] (0,0) -- (0,0.5);
\end{codeexample}
-It is important to note that you can change transformation ``in the
-middle of a path,'' a feature that is not supported by \pdf\
-or PostScript. The reason is that \tikzname\ keeps track of its own
-transformation matrix.
+It is important to note that you can change transformation ``in the middle of a
+path'', a feature that is not supported by \pdf\ or PostScript. The reason is
+that \tikzname\ keeps track of its own transformation matrix.
Here is a more complicated example:
+%
\begin{codeexample}[]
\begin{tikzpicture}[even odd rule,rounded corners=2pt,x=10pt,y=10pt]
\filldraw[fill=yellow!80!black] (0,0) rectangle (1,1)
@@ -1060,48 +1017,45 @@ Here is a more complicated example:
\end{tikzpicture}
\end{codeexample}
-The most useful transformations are |xshift| and |yshift| for
-shifting, |shift| for shifting to a given point as in |shift={(1,0)}|
-or |shift={+(0,0)}| (the braces are necessary so that \TeX\ does not
-mistake the comma for separating options), |rotate| for rotating by a
-certain angle (there is also a |rotate around| for rotating around a
-given point), |scale| for scaling by a certain factor, |xscale| and
-|yscale| for scaling only in the $x$- or $y$-direction (|xscale=-1| is
-a flip), and |xslant| and |yslant| for slanting. If these
-transformation and those that I have not mentioned are not
-sufficient, the |cm| option allows you to apply an arbitrary
-transformation matrix. Karl's students, by the way, do not know what a
-transformation matrix is.
-
+The most useful transformations are |xshift| and |yshift| for shifting, |shift|
+for shifting to a given point as in |shift={(1,0)}| or |shift={+(0,0)}| (the
+braces are necessary so that \TeX\ does not mistake the comma for separating
+options), |rotate| for rotating by a certain angle (there is also a
+|rotate around| for rotating around a given point), |scale| for scaling by a
+certain factor, |xscale| and |yscale| for scaling only in the $x$- or
+$y$-direction (|xscale=-1| is a flip), and |xslant| and |yslant| for slanting.
+If these transformation and those that I have not mentioned are not sufficient,
+the |cm| option allows you to apply an arbitrary transformation matrix. Karl's
+students, by the way, do not know what a transformation matrix is.
\subsection{Repeating Things: For-Loops}
-Karl's next aim is to add little ticks on the axes at positions $-1$,
-$-1/2$, $1/2$, and $1$. For this, it would be nice to use some kind of
-``loop,'' especially since he wishes to do the same thing at each of
-these positions. There are different packages for doing this. \LaTeX\
-has its own internal command for this, |pstricks| comes along with the
-powerful |\multido| command. All of these can be used together with
-\tikzname, so if you are familiar with them, feel free to
-use them. \tikzname\ introduces yet another command, called |\foreach|,
-which I introduced since I could never remember the syntax of the other
-packages. |\foreach| is defined in the package |pgffor| and can be used
+Karl's next aim is to add little ticks on the axes at positions $-1$, $-1/2$,
+$1/2$, and $1$. For this, it would be nice to use some kind of ``loop'',
+especially since he wishes to do the same thing at each of these positions.
+There are different packages for doing this. \LaTeX\ has its own internal
+command for this, |pstricks| comes along with the powerful |\multido| command.
+All of these can be used together with \tikzname, so if you are familiar with
+them, feel free to use them. \tikzname\ introduces yet another command, called
+|\foreach|, which I introduced since I could never remember the syntax of the
+other packages. |\foreach| is defined in the package |pgffor| and can be used
independently \tikzname, but \tikzname\ includes it automatically.
In its basic form, the |\foreach| command is easy to use:
+%
\begin{codeexample}[]
\foreach \x in {1,2,3} {$x =\x$, }
\end{codeexample}
-The general syntax is |\foreach| \meta{variable}| in {|\meta{list of
- values}|} |\meta{commands}. Inside the \meta{commands}, the
-\meta{variable} will be assigned to the different values. If the
-\meta{commands} do not start with a brace, everything up to the
-next semicolon is used as \meta{commands}.
+The general syntax is
+|\foreach| \meta{variable}| in {|\meta{list of values}|} |\meta{commands}.
+Inside the \meta{commands}, the \meta{variable} will be assigned to the
+different values. If the \meta{commands} do not start with a brace, everything
+up to the next semicolon is used as \meta{commands}.
For Karl and the ticks on the axes, he could use the following code:
-
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.1,-0.2) rectangle (1.1,1.51);
@@ -1119,36 +1073,36 @@ For Karl and the ticks on the axes, he could use the following code:
\end{tikzpicture}
\end{codeexample}
-As a matter of fact, there are many different ways of creating the
-ticks. For example, Karl could have put the |\draw ...;| inside curly
-braces. He could also have used, say,
+As a matter of fact, there are many different ways of creating the ticks. For
+example, Karl could have put the |\draw ...;| inside curly braces. He could
+also have used, say,
+%
\begin{codeexample}[code only]
\foreach \x in {-1,-0.5,1}
\draw[xshift=\x cm] (0pt,-1pt) -- (0pt,1pt);
\end{codeexample}
-Karl is curious what would happen in a more complicated situation
-where there are, say, 20 ticks. It seems bothersome to explicitly
-mention all these numbers in the set for |\foreach|. Indeed, it is
-possible to use |...| inside the |\foreach| statement to iterate over
-a large number of values (which must, however, be dimensionless
-real numbers) as in the following example:
-
+Karl is curious what would happen in a more complicated situation where there
+are, say, 20 ticks. It seems bothersome to explicitly mention all these numbers
+in the set for |\foreach|. Indeed, it is possible to use |...| inside the
+|\foreach| statement to iterate over a large number of values (which must,
+however, be dimensionless real numbers) as in the following example:
+%
\begin{codeexample}[]
\tikz \foreach \x in {1,...,10}
\draw (\x,0) circle (0.4cm);
\end{codeexample}
-If you provide \emph{two} numbers before the |...|, the |\foreach|
-statement will use their difference for the stepping:
-
+If you provide \emph{two} numbers before the |...|, the |\foreach| statement
+will use their difference for the stepping:
+%
\begin{codeexample}[]
\tikz \foreach \x in {-1,-0.5,...,1}
\draw (\x cm,-1pt) -- (\x cm,1pt);
\end{codeexample}
We can also nest loops to create interesting effects:
-
+%
\begin{codeexample}[]
\begin{tikzpicture}
\foreach \x in {1,2,...,5,7,8,...,12}
@@ -1160,31 +1114,28 @@ We can also nest loops to create interesting effects:
\end{tikzpicture}
\end{codeexample}
-The |\foreach| statement can do even trickier stuff, but the above
-gives the idea.
-
-
+The |\foreach| statement can do even trickier stuff, but the above gives the
+idea.
\subsection{Adding Text}
-Karl is, by now, quite satisfied with the picture. However, the most
-important parts, namely the labels, are still missing!
-
-\tikzname\ offers an easy-to-use and powerful system for adding text and,
-more generally, complex shapes to a picture at specific positions. The
-basic idea is the following: When \tikzname\ is constructing a path and
-encounters the keyword |node| in the middle of a path, it
-reads a \emph{node specification}. The keyword |node| is typically
-followed by some options and then some text between curly braces. This
-text is put inside a normal \TeX\ box (if the node specification
-directly follows a coordinate, which is usually the case, \tikzname\ is
-able to perform some magic so that it is even possible to use verbatim
-text inside the boxes) and then placed at the current position, that
-is, at the last specified position (possibly shifted a bit, according
-to the given options). However, all nodes are drawn only after the
-path has been completely drawn/filled/shaded/clipped/whatever.
-
+Karl is, by now, quite satisfied with the picture. However, the most important
+parts, namely the labels, are still missing!
+
+\tikzname\ offers an easy-to-use and powerful system for adding text and, more
+generally, complex shapes to a picture at specific positions. The basic idea is
+the following: When \tikzname\ is constructing a path and encounters the
+keyword |node| in the middle of a path, it reads a \emph{node specification}.
+The keyword |node| is typically followed by some options and then some text
+between curly braces. This text is put inside a normal \TeX\ box (if the node
+specification directly follows a coordinate, which is usually the case,
+\tikzname\ is able to perform some magic so that it is even possible to use
+verbatim text inside the boxes) and then placed at the current position, that
+is, at the last specified position (possibly shifted a bit, according to the
+given options). However, all nodes are drawn only after the path has been
+completely drawn/filled/shaded/clipped/whatever.
+%
\begin{codeexample}[]
\begin{tikzpicture}
\draw (0,0) rectangle (2,2);
@@ -1194,17 +1145,16 @@ path has been completely drawn/filled/shaded/clipped/whatever.
\end{tikzpicture}
\end{codeexample}
-Obviously, Karl would not only like to place nodes \emph{on} the last
-specified position, but also to the left or the
-right of these positions. For this, every node object that you
-put in your picture is equipped with several \emph{anchors}. For
-example, the |north| anchor is in the middle at the upper end of the shape,
-the |south| anchor is at the bottom and the |north east| anchor is in
-the upper right corner. When you give the option |anchor=north|, the
-text will be placed such that this northern anchor will lie on the
-current position and the text is, thus, below the current
-position. Karl uses this to draw the ticks as follows:
-
+Obviously, Karl would not only like to place nodes \emph{on} the last specified
+position, but also to the left or the right of these positions. For this, every
+node object that you put in your picture is equipped with several
+\emph{anchors}. For example, the |north| anchor is in the middle at the upper
+end of the shape, the |south| anchor is at the bottom and the |north east|
+anchor is in the upper right corner. When you give the option |anchor=north|,
+the text will be placed such that this northern anchor will lie on the current
+position and the text is, thus, below the current position. Karl uses this to
+draw the ticks as follows:
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.6,-0.2) rectangle (0.6,1.51);
@@ -1221,38 +1171,35 @@ position. Karl uses this to draw the ticks as follows:
\end{tikzpicture}
\end{codeexample}
-This is quite nice, already. Using these anchors, Karl can now add
-most of the other text elements. However, Karl thinks that, though
-``correct,'' it is quite counter-intuitive that in order to place something
-\emph{below} a given point, he has to use the \emph{north} anchor. For
-this reason, there is an option called |below|, which does the
-same as |anchor=north|. Similarly, |above right| does the same as
-|anchor=south west|. In addition, |below| takes an optional
-dimension argument. If given, the shape will additionally be shifted
-downwards by the given amount. So, |below=1pt| can be used to put
-a text label below some point and, additionally shift it 1pt
-downwards.
-
-Karl is not quite satisfied with the ticks. He would like to have
-$1/2$ or $\frac{1}{2}$ shown instead of $0.5$, partly to show off the
-nice capabilities of \TeX\ and \tikzname, partly because for positions
-like $1/3$ or $\pi$ it is certainly very much preferable to have the
-``mathematical'' tick there instead of just the ``numeric'' tick.
-His students, on the other hand, prefer $0.5$ over $1/2$
-since they are not too fond of fractions in general.
-
-Karl now faces a problem: For the |\foreach| statement, the position
-|\x| should still be given as |0.5| since \tikzname\ will not know where
-|\frac{1}{2}| is supposed to be. On the other hand, the typeset text
-should really be |\frac{1}{2}|. To solve this problem, |\foreach|
-offers a special syntax: Instead of having one variable |\x|, Karl can
-specify two (or even more) variables separated by a slash as in
-|\x / \xtext|. Then, the elements in the set over which |\foreach|
-iterates must also be of the form \meta{first}|/|\meta{second}. In
-each iteration, |\x| will be set to \meta{first} and |\xtext| will be
-set to \meta{second}. If no \meta{second} is given, the \meta{first}
-will be used again. So, here is the new code for the ticks:
-
+This is quite nice, already. Using these anchors, Karl can now add most of the
+other text elements. However, Karl thinks that, though ``correct'', it is quite
+counter-intuitive that in order to place something \emph{below} a given point,
+he has to use the \emph{north} anchor. For this reason, there is an option
+called |below|, which does the same as |anchor=north|. Similarly, |above right|
+does the same as |anchor=south west|. In addition, |below| takes an optional
+dimension argument. If given, the shape will additionally be shifted downwards
+by the given amount. So, |below=1pt| can be used to put a text label below some
+point and, additionally shift it 1pt downwards.
+
+Karl is not quite satisfied with the ticks. He would like to have $1/2$ or
+$\frac{1}{2}$ shown instead of $0.5$, partly to show off the nice capabilities
+of \TeX\ and \tikzname, partly because for positions like $1/3$ or $\pi$ it is
+certainly very much preferable to have the ``mathematical'' tick there instead
+of just the ``numeric'' tick. His students, on the other hand, prefer $0.5$
+over $1/2$ since they are not too fond of fractions in general.
+
+Karl now faces a problem: For the |\foreach| statement, the position |\x|
+should still be given as |0.5| since \tikzname\ will not know where
+|\frac{1}{2}| is supposed to be. On the other hand, the typeset text should
+really be |\frac{1}{2}|. To solve this problem, |\foreach| offers a special
+syntax: Instead of having one variable |\x|, Karl can specify two (or even
+more) variables separated by a slash as in |\x / \xtext|. Then, the elements in
+the set over which |\foreach| iterates must also be of the form
+\meta{first}|/|\meta{second}. In each iteration, |\x| will be set to
+\meta{first} and |\xtext| will be set to \meta{second}. If no \meta{second} is
+given, the \meta{first} will be used again. So, here is the new code for the
+ticks:
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-0.6,-0.2) rectangle (0.6,1.51);
@@ -1269,26 +1216,22 @@ will be used again. So, here is the new code for the ticks:
\end{tikzpicture}
\end{codeexample}
-Karl is quite pleased with the result, but his son points out that
-this is still not perfectly satisfactory: The grid and the circle
-interfere with the numbers and decrease their legibility. Karl is not
-very concerned by this (his students do not even notice), but his son
-insists that there is an easy solution: Karl can add the
-|[fill=white]| option to fill out the background of the text shape
-with a white color.
-
-The next thing Karl wants to do is to add the labels like $\sin
-\alpha$. For this, he would like to place a label ``in the middle of
-the line.'' To do so, instead of specifying the label
-|node {$\sin\alpha$}| directly after one of the endpoints of the line
-(which would place
-the label at that endpoint), Karl can give the label directly after
-the |--|, before the coordinate. By default, this places the label in
-the middle of the line, but the |pos=| options can be used to modify
-this. Also, options like |near start| and |near end| can be used to
-modify this position:
-
-
+Karl is quite pleased with the result, but his son points out that this is
+still not perfectly satisfactory: The grid and the circle interfere with the
+numbers and decrease their legibility. Karl is not very concerned by this (his
+students do not even notice), but his son insists that there is an easy
+solution: Karl can add the |[fill=white]| option to fill out the background of
+the text shape with a white color.
+
+The next thing Karl wants to do is to add the labels like $\sin \alpha$. For
+this, he would like to place a label ``in the middle of the line''. To do so,
+instead of specifying the label |node {$\sin\alpha$}| directly after one of
+the endpoints of the line (which would place the label at that endpoint), Karl
+can give the label directly after the |--|, before the coordinate. By default,
+this places the label in the middle of the line, but the |pos=| options can be
+used to modify this. Also, options like |near start| and |near end| can be used
+to modify this position:
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\clip (-2,-0.2) rectangle (2,0.8);
@@ -1319,10 +1262,9 @@ modify this position:
\end{tikzpicture}
\end{codeexample}
-You can also position labels on curves and, by adding the |sloped|
-option, have them rotated such that they match the line's slope. Here
-is an example:
-
+You can also position labels on curves and, by adding the |sloped| option, have
+them rotated such that they match the line's slope. Here is an example:
+%
\begin{codeexample}[]
\begin{tikzpicture}
\draw (0,0) .. controls (6,1) and (9,1) ..
@@ -1332,12 +1274,11 @@ is an example:
\end{tikzpicture}
\end{codeexample}
-It remains to draw the explanatory text at the right of the
-picture. The main difficulty here lies in limiting the width of the
-text ``label,'' which is quite long, so that line breaking is
-used. Fortunately, Karl can use the option |text width=6cm| to get the
-desired effect. So, here is the full code:
-
+It remains to draw the explanatory text at the right of the picture. The main
+difficulty here lies in limiting the width of the text ``label'', which is
+quite long, so that line breaking is used. Fortunately, Karl can use the option
+|text width=6cm| to get the desired effect. So, here is the full code:
+%
\begin{codeexample}[code only]
\begin{tikzpicture}
[scale=3,line cap=round,
@@ -1402,35 +1343,32 @@ desired effect. So, here is the full code:
\end{codeexample}
-
\subsection{Pics: The Angle Revisited}
-Karl expects that the code of certain parts of the picture he created
-might be so useful that he might wish to reuse them in the
-future. A natural thing to do is to create \TeX\ macros that store
-the code he wishes to reuse. However, \tikzname\ offers another way
-that is integrated directly into its parser: pics!
-
-A ``pic'' is ``not quite a full picture,'' hence the short name. The
-idea is that a pic is simply some code that you can add to a picture
-at different places using the |pic| command whose syntax is almost
-identical to the |node| command. The main difference is that instead
-of specifying some text in curly braces that should be shown, you
-specify the name of a predefined picture that should be shown.
-
-Defining new pics is easy enough, see Section~\ref{section-pics}, but
-right now we just want to use one such predefined pic: the |angle|
-pic. As the name suggests, it is a small drawing of an angle
-consisting of a little wedge and an arc together with some text (Karl
-needs to load the |angle| library and the |quotes| for the following
-examples). What makes this pic useful is the fact that the size of the
-wedge will be computed automatically.
-
-The |angle| pic draws an angle between the two lines $BA$ and $BC$,
-where $A$, $B$, and $C$ are three coordinates. In our case, $B$ is the
-origin, $A$ is somewhere on the $x$-axis and $C$ is somewhere on a
-line at $30^\circ$.
-
+Karl expects that the code of certain parts of the picture he created might be
+so useful that he might wish to reuse them in the future. A natural thing to do
+is to create \TeX\ macros that store the code he wishes to reuse. However,
+\tikzname\ offers another way that is integrated directly into its parser:
+pics!
+
+A ``pic'' is ``not quite a full picture'', hence the short name. The idea is
+that a pic is simply some code that you can add to a picture at different
+places using the |pic| command whose syntax is almost identical to the |node|
+command. The main difference is that instead of specifying some text in curly
+braces that should be shown, you specify the name of a predefined picture that
+should be shown.
+
+Defining new pics is easy enough, see Section~\ref{section-pics}, but right now
+we just want to use one such predefined pic: the |angle| pic. As the name
+suggests, it is a small drawing of an angle consisting of a little wedge and an
+arc together with some text (Karl needs to load the |angles| library and the
+|quotes| for the following examples). What makes this pic useful is the fact
+that the size of the wedge will be computed automatically.
+
+The |angle| pic draws an angle between the two lines $BA$ and $BC$, where $A$,
+$B$, and $C$ are three coordinates. In our case, $B$ is the origin, $A$ is
+somewhere on the $x$-axis and $C$ is somewhere on a line at $30^\circ$.
+%
\begin{codeexample}[]
\begin{tikzpicture}[scale=3]
\coordinate (A) at (1,0);
@@ -1440,18 +1378,17 @@ line at $30^\circ$.
\draw (A) -- (B) -- (C)
pic [draw=green!50!black, fill=green!20, angle radius=9mm,
"$\alpha$"] {angle = A--B--C};
-\end{tikzpicture}
+\end{tikzpicture}
\end{codeexample}
Let us see, what is happening here. First we have specified three
-\emph{coordinates} using the |\coordinate| command. It allows us to
-name a specific coordinate in the picture. Then comes something that
-starts as a normal |\draw|, but then comes the |pic| command. This
-command gets lots of options and, in curly braces, comes the most
-important point: We specify that we want to add an |angle| pic and
-this angle should be between the points we named |A|, |B|, and |C| (we
-could use other names). Note that the text that we want to be shown in
-the pic is specified in quotes inside the options of the |pic|, not
-inside the curly braces.
-
-To learn more about pics, please see Section~\ref{section-pics}. \ No newline at end of file
+\emph{coordinates} using the |\coordinate| command. It allows us to name a
+specific coordinate in the picture. Then comes something that starts as a
+normal |\draw|, but then comes the |pic| command. This command gets lots of
+options and, in curly braces, comes the most important point: We specify that
+we want to add an |angle| pic and this angle should be between the points we
+named |A|, |B|, and |C| (we could use other names). Note that the text that we
+want to be shown in the pic is specified in quotes inside the options of the
+|pic|, not inside the curly braces.
+
+To learn more about pics, please see Section~\ref{section-pics}.