summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-arrows.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-arrows.tex')
-rw-r--r--Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-arrows.tex3384
1 files changed, 1671 insertions, 1713 deletions
diff --git a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-arrows.tex b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-arrows.tex
index 6e6f87da9c8..bf9bfd8a4a1 100644
--- a/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-arrows.tex
+++ b/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-arrows.tex
@@ -10,18 +10,16 @@
\section{Arrows}
\label{section-tikz-arrows}
-
\subsection{Overview}
-\tikzname\ allows you to add (multiple) arrow tips to the end of
-lines as in \tikz [baseline] \draw [->>]%<<
-(0,.5ex) -- (3ex,.5ex); or in \tikz [baseline] \draw [-{Latex[]}]
-(0,.5ex) -- (3ex,.5ex);. It is possible to change which arrow tips are
-used ``on-the-fly,'' you can have several arrow tips in a row, and you
-can change the appearance of each of them individually using a special
-syntax. The following example is a perhaps slightly ``excessive''
-demonstration of what you can do (you need to load the |arrows.meta|
-library for it to work):
+\tikzname\ allows you to add (multiple) arrow tips to the end of lines as in
+\tikz [baseline] \draw [->>] (0,.5ex) -- (3ex,.5ex); or in \tikz [baseline]
+\draw [-{Latex[]}] (0,.5ex) -- (3ex,.5ex);. It is possible to change which
+arrow tips are used ``on-the-fly'', you can have several arrow tips in a row,
+and you can change the appearance of each of them individually using a special
+syntax. The following example is a perhaps slightly ``excessive'' demonstration
+of what you can do (you need to load the |arrows.meta| library for it to work):
+%
\begin{codeexample}[]
\tikz {
\node [circle,draw] (A) {A};
@@ -29,7 +27,7 @@ library for it to work):
\draw [draw = blue, thick,
arrows={
- Computer Modern Rightarrow [sep]
+ Computer Modern Rightarrow [sep]
- Latex[blue!50,length=8pt,bend,line width=0pt]
Stealth[length=8pt,open,bend,sep]}]
(A) edge [bend left=45] (B)
@@ -37,70 +35,64 @@ library for it to work):
}
\end{codeexample}
-There are a number of predefined generic arrow tip kinds whose
-appearance you can modify in many ways using various options. It is
-also possible to define completely new arrow tip kinds, see
-Section~\ref{section-arrows}, but doing this is somewhat harder than
-configuring an existing kind (it is like the difference between using
-a font at different sizes or faces like italics, compared to
-designing a new font yourself).
-
-In the present section, we go over the various ways in which you can
-configure which particular arrow tips are \emph{used.} The glorious
-details of how new arrow tips can be defined are explained in
-Section~\ref{section-arrows}.
-
-At the end of the present section, Section~\ref{section-arrows-meta},
-you will find a description of the different predefined arrow tips
-from the |arrows.meta| library.
-
-\emph{Remark:} Almost all of the features described in the following
-were introduced in version 3.0 of \tikzname. For compatibility
-reasons, the old arrow tips are still available. To differentiate
-between the old and new arrow tips, the following rule is used: The
-new, more powerful arrow tips start with an uppercase letter as in
-|Latex|, compared to the old arrow tip |latex|.
-
-\emph{Remark:} The libraries |arrows| and |arrows.spaced| are
-deprecated. Use |arrows.meta| instead/additionally, which allows you
-to do all that the old libraries offered, plus much more. However, the
-old libraries still work and you can even mix old and new arrow tips
-(only, the old arrow tips cannot be configured in the ways described
-in the rest of this section; saying |scale=2| for a |latex| arrow has
-no effect for instance, while for |Latex| arrows it doubles their size
-as one would expect.)
+There are a number of predefined generic arrow tip kinds whose appearance you
+can modify in many ways using various options. It is also possible to define
+completely new arrow tip kinds, see Section~\ref{section-arrows}, but doing
+this is somewhat harder than configuring an existing kind (it is like the
+difference between using a font at different sizes or faces like italics,
+compared to designing a new font yourself).
+
+In the present section, we go over the various ways in which you can configure
+which particular arrow tips are \emph{used}. The glorious details of how new
+arrow tips can be defined are explained in Section~\ref{section-arrows}.
+
+At the end of the present section, Section~\ref{section-arrows-meta}, you will
+find a description of the different predefined arrow tips from the
+|arrows.meta| library.
+
+\emph{Remark:} Almost all of the features described in the following were
+introduced in version 3.0 of \tikzname. For compatibility reasons, the old
+arrow tips are still available. To differentiate between the old and new arrow
+tips, the following rule is used: The new, more powerful arrow tips start with
+an uppercase letter as in |Latex|, compared to the old arrow tip |latex|.
+
+\emph{Remark:} The libraries |arrows| and |arrows.spaced| are deprecated. Use
+|arrows.meta| instead/additionally, which allows you to do all that the old
+libraries offered, plus much more. However, the old libraries still work and
+you can even mix old and new arrow tips (only, the old arrow tips cannot be
+configured in the ways described in the rest of this section; saying |scale=2|
+for a |latex| arrow has no effect for instance, while for |Latex| arrows it
+doubles their size as one would expect.)
\subsection{Where and When Arrow Tips Are Placed}
\label{section-arrow-tips-where}
-In order to add arrow tips to the lines you draw, the following
-conditions must be met:
-
+In order to add arrow tips to the lines you draw, the following conditions must
+be met:
+%
\begin{enumerate}
-\item You have specified that arrow tips should be added to
- lines, using the |arrows| key or its short form.
-\item You set the |tips| key to some value that causes tips to be
- drawn (to be explained later).
-\item You do not use the |clip| key (directly or indirectly) with the
- current path.
-\item The path actually has two ``end points'' (it is not
- ``closed'').
+ \item You have specified that arrow tips should be added to lines, using
+ the |arrows| key or its short form.
+ \item You set the |tips| key to some value that causes tips to be drawn
+ (to be explained later).
+ \item You do not use the |clip| key (directly or indirectly) with the
+ current path.
+ \item The path actually has two ``end points'' (it is not ``closed'').
\end{enumerate}
-Let us start with an introduction to the basics of the |arrows| key:
+Let us start with an introduction to the basics of the |arrows| key:
-\begin{key}{/tikz/arrows=\meta{start arrow specification}|-|\meta{end
- arrow specification}}
- This option sets the arrow tip(s) to be used at the start and end of
- lines. An empty value as in |->| for the start indicates that no
- arrow tip should be drawn at the start.%
- \indexoption{arrows}
-
- \emph{Note: Since the arrow option is so often used, you can leave
- out the text |arrows=|.} What happens is that every (otherwise
- unknown) option that contains a |-| is interpreted as an arrow specification.
+\begin{key}{/tikz/arrows=\meta{start arrow specification}|-|\meta{end arrow specification}}
+ This option sets the arrow tip(s) to be used at the start and end of lines.
+ An empty value as in |->| for the start indicates that no arrow tip should
+ be drawn at the start.%
+ \indexoption{arrows}
+ \emph{Note: Since the arrow option is so often used, you can leave out the
+ text |arrows=|.} What happens is that every (otherwise unknown) option that
+ contains a |-| is interpreted as an arrow specification.
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\draw[->] (0,0) -- (1,0);
@@ -108,113 +100,113 @@ Let us start with an introduction to the basics of the |arrows| key:
\end{tikzpicture}
\end{codeexample}
- In the above example, the first start specification is empty and the
- second is |>|. The end specifications are |>| for the first line and
- |Stealth| for the second line. Note that it makes a difference
- whether |>| is used in a start specification or in an end
- specification: In an end specification it creates, as one would
- expect, a pointed tip at the end of the line. In the start
- specification, however, it creates a ``reversed'' version if this
- arrow -- which happens to be what one would expect here.
-
- The above specifications are very simple and only select a single
- arrow tip without any special configuration options, resulting in
- the ``natural'' versions of these arrow tips. It is also possible to
- ``configure'' arrow tips in many different ways, as explained in
- detail in Section~\ref{section-arrow-config} below by adding options
- in square brackets following the arrow tip kind:
+ In the above example, the first start specification is empty and the second
+ is |>|. The end specifications are |>| for the first line and |Stealth| for
+ the second line. Note that it makes a difference whether |>| is used in a
+ start specification or in an end specification: In an end specification it
+ creates, as one would expect, a pointed tip at the end of the line. In the
+ start specification, however, it creates a ``reversed'' version if this
+ arrow -- which happens to be what one would expect here.
+ The above specifications are very simple and only select a single arrow tip
+ without any special configuration options, resulting in the ``natural''
+ versions of these arrow tips. It is also possible to ``configure'' arrow
+ tips in many different ways, as explained in detail in
+ Section~\ref{section-arrow-config} below by adding options in square
+ brackets following the arrow tip kind:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\draw[-{Stealth[red]}] (0,0) -- (1,0);
\end{tikzpicture}
\end{codeexample}
- Note that in the example I had to surround the end specification by
- braces. This is necessary so that \tikzname\ does not mistake the
- closing square bracket of the |Stealth| arrow tip's options for the
- end of the options of the |\draw| command. In general, you often
- need to add braces when specifying arrow tips except for simple case
- like |->| or |<<->|, which are pretty frequent, though. When in
- doubt, say |arrows={|\meta{start spec}|-|\meta{end spec}|}|, that
- will always work.
+ Note that in the example I had to surround the end specification by braces.
+ This is necessary so that \tikzname\ does not mistake the closing square
+ bracket of the |Stealth| arrow tip's options for the end of the options of
+ the |\draw| command. In general, you often need to add braces when
+ specifying arrow tips except for simple case like |->| or |<<->|, which are
+ pretty frequent, though. When in doubt, say
+ |arrows={|\meta{start spec}|-|\meta{end spec}|}|, that will always work.
- It is also possible to specify multiple (different) arrow tips in a
- row inside a specification, see Section~\ref{section-arrow-spec}
- below for details.
+ It is also possible to specify multiple (different) arrow tips in a row
+ inside a specification, see Section~\ref{section-arrow-spec} below for
+ details.
\end{key}
-As was pointed out earlier, to add arrow tips to a path, the path must
-have ``end points'' and not be ``closed'' -- otherwise adding arrow
-tips makes little sense, after all. However, a path can actually
-consist of several subpath, which may be open or not and may even
-consist of only a single point (a single move-to). In this case, it is
-not immediately obvious, where arrow heads should be placed. The
-actual rules that \tikzname\ uses are goverened by the setting of the
-key |tips|:
+As was pointed out earlier, to add arrow tips to a path, the path must have
+``end points'' and not be ``closed'' -- otherwise adding arrow tips makes
+little sense, after all. However, a path can actually consist of several
+subpath, which may be open or not and may even consist of only a single point
+(a single move-to). In this case, it is not immediately obvious, where arrow
+heads should be placed. The actual rules that \tikzname\ uses are governed by
+the setting of the key |tips|:
\begin{key}{/pgf/tips=\meta{value} (default true, initially on draw)}
- \keyalias{tikz}
-
- This key governs in what situations arrow tips are added to a
- path. The following \meta{values} are permissible:
- \begin{itemize}
- \item |true| (the value used when no \meta{value} is specified)
- \item |proper|
- \item |on draw| (the initial value, if the key has not yet been used
- at all)
- \item |on proper draw|
- \item |never| or |false| (same effect)
- \end{itemize}
-
- Firstly, there are a whole bunch of situations where the setting of
- these (or other) options causes no arrow tips to be shown:
- \begin{itemize}
- \item If no arrow tips have been specified (for instance, by having
- said |arrows=-|), no arrow tips are drawn.
- \item If the |clip| option is set, no arrow tips are drawn.
- \item If |tips| has been set to |never| or |false|, no arrow tips are drawn.
- \item If |tips| has been set to |on draw| or |on proper draw|, but
- the |draw| option is not set, no arrow tips are drawn.
- \item If the path is empty (as in |\path ;|), no arrow tips are drawn.
- \item If at least one of the subpaths of a path is closed (|cycle| is
- used somewhere or something like |circle| or |rectangle|), arrow
- tips are never drawn anywhere -- even if there are open subpaths.
- \end{itemize}
-
- Now, if we pass all of the above tests, we must have a closer look
- at the path. All its subpaths must now be open and there must be at
- least one subpath. We conside the last one. Arrow tips will only be
- added to this last subpath.
-
- \begin{enumerate}
- \item If this last subpath not degenerate (all coordinates on the
- subpath are the same as in a single ``move-to'' |\path (0,0);| or
- in a ``move-to'' followed by a ``line-to'' to the same position as
- in |\path (1,2) -- (1,2)|), arrow tips are added to this last
- subpath now.
- \item If the last subpath is degenerate, we add arrow tips pointing
- upward at the single coordinate mentioned in the path, but only
- for |tips| begin set to |true| or to |on draw| -- and not for
- |proper| nor for |on proper draw|. In other words, ``proper''
- suppresses arrow tips on degenerate paths.
- \end{enumerate}
+ \keyalias{tikz}
+ This key governs in what situations arrow tips are added to a path. The
+ following \meta{values} are permissible:
+ %
+ \begin{itemize}
+ \item |true| (the value used when no \meta{value} is specified)
+ \item |proper|
+ \item |on draw| (the initial value, if the key has not yet been used
+ at all)
+ \item |on proper draw|
+ \item |never| or |false| (same effect)
+ \end{itemize}
+
+ Firstly, there are a whole bunch of situations where the setting of
+ these (or other) options causes no arrow tips to be shown:
+ %
+ \begin{itemize}
+ \item If no arrow tips have been specified (for instance, by having
+ said |arrows=-|), no arrow tips are drawn.
+ \item If the |clip| option is set, no arrow tips are drawn.
+ \item If |tips| has been set to |never| or |false|, no arrow tips are
+ drawn.
+ \item If |tips| has been set to |on draw| or |on proper draw|, but
+ the |draw| option is not set, no arrow tips are drawn.
+ \item If the path is empty (as in |\path ;|), no arrow tips are
+ drawn.
+ \item If at least one of the subpaths of a path is closed (|cycle| is
+ used somewhere or something like |circle| or |rectangle|), arrow
+ tips are never drawn anywhere -- even if there are open subpaths.
+ \end{itemize}
+
+ Now, if we pass all of the above tests, we must have a closer look at the
+ path. All its subpaths must now be open and there must be at least one
+ subpath. We consider the last one. Arrow tips will only be added to this
+ last subpath.
+
+ \begin{enumerate}
+ \item If this last subpath not degenerate (all coordinates on the
+ subpath are the same as in a single ``move-to'' |\path (0,0);| or
+ in a ``move-to'' followed by a ``line-to'' to the same position
+ as in |\path (1,2) -- (1,2)|), arrow tips are added to this last
+ subpath now.
+ \item If the last subpath is degenerate, we add arrow tips pointing
+ upward at the single coordinate mentioned in the path, but only
+ for |tips| begin set to |true| or to |on draw| -- and not for
+ |proper| nor for |on proper draw|. In other words, ``proper''
+ suppresses arrow tips on degenerate paths.
+ \end{enumerate}
\begin{codeexample}[]
% No path, no arrow tips:
-\tikz [<->] \draw;
+\tikz [<->] \draw;
\end{codeexample}
\begin{codeexample}[]
% Degenerate path, draw arrow tips (but no path, it is degenerate...)
-\tikz [<->] \draw (0,0);
+\tikz [<->] \draw (0,0);
\end{codeexample}
\begin{codeexample}[]
% Degenerate path, tips=proper suppresses arrows
-\tikz [<->] \draw [tips=proper] (0,0);
+\tikz [<->] \draw [tips=proper] (0,0);
\end{codeexample}
\begin{codeexample}[]
% Normal case:
-\tikz [<->] \draw (0,0) -- (1,0);
+\tikz [<->] \draw (0,0) -- (1,0);
\end{codeexample}
\begin{codeexample}[]
% Two subpaths, only second gets tips
@@ -234,66 +226,59 @@ key |tips|:
\end{codeexample}
\end{key}
-One common pitfall when arrow tips are added to a path should be
-addressed right here at the beginning: When \tikzname\ positions an
-arrow tip at the start, for all its computations it only takes into
-account the first segment of the subpath to which the arrow tip is
-added. This ``first segment'' is the first line-to or curve-to operation (or arc
-or parabola or a similar operation) of the path; but note that
-decorations like |snake| will add many small line segments to
-paths. The important point
-is that if this first segment is very small, namely smaller that the
-arrow tip itself, strange things may result. As will be explained in
-Section~\ref{section-arrow-flex}, \tikzname\ will modify the path by
-shortening the first segment and shortening a segment below its length
-may result in strange effects. Similarly, for tips at the end of a
+One common pitfall when arrow tips are added to a path should be addressed
+right here at the beginning: When \tikzname\ positions an arrow tip at the
+start, for all its computations it only takes into account the first segment of
+the subpath to which the arrow tip is added. This ``first segment'' is the
+first line-to or curve-to operation (or arc or parabola or a similar operation)
+of the path; but note that decorations like |snake| will add many small line
+segments to paths. The important point is that if this first segment is very
+small, namely smaller that the arrow tip itself, strange things may result. As
+will be explained in Section~\ref{section-arrow-flex}, \tikzname\ will modify
+the path by shortening the first segment and shortening a segment below its
+length may result in strange effects. Similarly, for tips at the end of a
subpath, only the last segment is considered.
-The bottom line is that wherever an arrow tip is added to a path, the
-line segment where it is added should be ``long enough.''
-
-
+The bottom line is that wherever an arrow tip is added to a path, the line
+segment where it is added should be ``long enough''.
\subsection{Arrow Keys: Configuring the Appearance of a Single Arrow Tip}
\label{section-arrow-config}
-For standard arrow tip kinds, like |Stealth| or |Latex| or |Bar|,
-you can easily change their size, aspect ratio, color, and other
-parameters. This is similar to selecting a font face from a font
-family: \emph{``This text''} is not just typeset in the font
-``Computer Modern,'' but rather in ``Computer Modern, italic face,
-11pt size, medium weight, black color, no underline, \dots''
-Similarly, an arrow tip is not just a ``Stealth'' arrow tip, but
-rather a ``Stealth arrow tip at its natural size, flexing, but not
-bending along the path, miter line caps, draw and fill colors
-identical to the path draw color, \dots''
-
-Just as most programs make it easy to ``configure'' which font should
-be used at a certain point in a text, \tikzname\ tries to make it easy
-to specify which configuration of an arrow tip should be used. You use
-\emph{arrow keys}, where a certain parameter like the |length| of an
-arrow is set to a given value using the standard key--value
-syntax. You can provide several arrow keys following an arrow tip kind
-in an arrow tip specification as in
+For standard arrow tip kinds, like |Stealth| or |Latex| or |Bar|, you can
+easily change their size, aspect ratio, color, and other parameters. This is
+similar to selecting a font face from a font family: \emph{``This text''} is
+not just typeset in the font ``Computer Modern'', but rather in ``Computer
+Modern, italic face, 11pt size, medium weight, black color, no underline,
+\dots'' Similarly, an arrow tip is not just a ``Stealth'' arrow tip, but rather
+a ``Stealth arrow tip at its natural size, flexing, but not bending along the
+path, miter line caps, draw and fill colors identical to the path draw color,
+\dots''
+
+Just as most programs make it easy to ``configure'' which font should be used
+at a certain point in a text, \tikzname\ tries to make it easy to specify which
+configuration of an arrow tip should be used. You use \emph{arrow keys}, where
+a certain parameter like the |length| of an arrow is set to a given value using
+the standard key--value syntax. You can provide several arrow keys following an
+arrow tip kind in an arrow tip specification as in
|Stealth[length=4pt,width=2pt]|.
-While selecting a font may be easy, \emph{designing} a new font is a
-highly creative and difficult process and more often than not, not all
-faces of a font are available on any given system. The difficulties
-involved in designing a new arrow tip are somewhat similar to designing a new
-letter for a font and, thus, it may also happen that not all
-configuration options are actually implemented for a given arrow
-tip. Naturally, for the standard arrow tips, all configuration options
-are available -- but for special-purpose arrow tips it may well happen
-that an arrow tip kind simply ``ignores'' some of the configurations
-given by you.
+While selecting a font may be easy, \emph{designing} a new font is a highly
+creative and difficult process and more often than not, not all faces of a font
+are available on any given system. The difficulties involved in designing a new
+arrow tip are somewhat similar to designing a new letter for a font and, thus,
+it may also happen that not all configuration options are actually implemented
+for a given arrow tip. Naturally, for the standard arrow tips, all
+configuration options are available -- but for special-purpose arrow tips it
+may well happen that an arrow tip kind simply ``ignores'' some of the
+configurations given by you.
Some of the keys explained in the following are defined in the library
-|arrows.meta|, others are always available. This has to do with the
-question of whether the arrow key needs to be supported directly in the
-\pgfname\ core or not. In general, the following explanations assume
-that |arrows.meta| has been loaded.
+|arrows.meta|, others are always available. This has to do with the question of
+whether the arrow key needs to be supported directly in the \pgfname\ core or
+not. In general, the following explanations assume that |arrows.meta| has been
+loaded.
\subsubsection{Size}
@@ -303,12 +288,13 @@ undoubtedly its size. The following two keys are the main keys that
are important in this context:
\begin{key}{/pgf/arrow keys/length=\meta{dimension}| |\opt{\meta{line width factor}}%
- | |\opt{\meta{outer factor}}}
- \label{length-arrow-key}%
- This parameter is usually the most important parameter that governs
- the size of an arrow tip: The \meta{dimension} that you provide
- dictates the distance from the ``very tip'' of the arrow to its
- ``back end'' along the line:
+ | |\opt{\meta{outer factor}}}
+ \label{length-arrow-key}%
+ This parameter is usually the most important parameter that governs the
+ size of an arrow tip: The \meta{dimension} that you provide dictates the
+ distance from the ``very tip'' of the arrow to its ``back end'' along the
+ line:
+ %
\begin{codeexample}[]
\tikz{
\draw [-{Stealth[length=5mm]}] (0,0) -- (2,0);
@@ -328,51 +314,46 @@ are important in this context:
}
\end{codeexample}
- \medskip
- \noindent \textbf{The Line Width Factors.}
- Following the \meta{dimension}, you may put a space followed by a
- \meta{line width factor}, which must be a plain number (no |pt| or
- |cm| following). When you provide such a number, the size of the
- arrow tip is not just \meta{dimension}, but rather $\meta{dimension}
- + \meta{line width factor}\cdot w$ where
- $w$ is the width of the to-be-drawn path. This
- makes it easy to vary the size of an arrow tip in accordance with
- the line width -- usually a very good idea since thicker lines will
- need thicker arrow tips.
-
- As an example, when you write |length=0pt 5|, the length of the
- arrow will be exactly five times the current line width. As another
- example, the default length of a |Latex| arrow is
- |length=3pt 4.5 0.8|. Let us ignore the 0.8 for a moment; the
- |4pt 4.5| then means that for the standard line width of
- |0.4pt|, the length of a |Latex| arrow will be exactly 4.8pt (3pt
- plus 4.5 times |0.4pt|).
-
- Following the line width factor, you can additionally provide an
- \meta{outer factor}, again preceded by a space (the |0.8| in the
- above example). This factor is
- taken into consideration only when the |double| option is used, that
- is, when a so-called ``inner line width''. For a double line, we can
- identify three different ``line widths'', namely the inner line
- width $w_i$, the line width $w_o$ of the two outer lines, and the
- ``total line width'' $w_t = w_i + 2w_o$. In the below examples, we
- have $w_i = 3\mathrm{pt}$, $w_o=1\mathrm{pt}$, and $w_t =
- 5\mathrm{pt}$. It is not immediately clear
- which of these line widths should be considered as $w$ in the above
- formula $\meta{dimension} + \meta{line width factor}\cdot w$ for the
- computation of the length. One can argue both for $w_t$ and also for
- $w_o$. Because of this, you use the \meta{outer factor} to
- decide on one of them or even
- mix them: \tikzname\ sets $w = \meta{outer factor} w_o +
- (1-\meta{outer factor})w_t$. Thus, when the outer factor is $0$, as
- in the first of the following examples and as is the default when it
- is not specified, the computed $w$ will be the total
- line width $w_t = 5\mathrm{pt}$. Since
- $w=5\mathrm{pt}$, we get a total length of $15pt$ in the first
- example (because of the factor |3|). In contrast, in the last
- example, the outer factor is 1 and, thus, $w = w_o = \mathrm{1pt}$ and the
- resulting length is 3pt. Finally, for the middle case, the ``middle'' between 5pt and
- 1pt is 3pt, so the length is 9pt.
+ \medskip
+ \noindent \textbf{The Line Width Factors.}
+ Following the \meta{dimension}, you may put a space followed by a
+ \meta{line width factor}, which must be a plain number (no |pt| or |cm|
+ following). When you provide such a number, the size of the arrow tip is
+ not just \meta{dimension}, but rather $\meta{dimension} + \meta{line width
+ factor}\cdot w$ where $w$ is the width of the to-be-drawn path. This makes
+ it easy to vary the size of an arrow tip in accordance with the line width
+ -- usually a very good idea since thicker lines will need thicker arrow
+ tips.
+
+ As an example, when you write |length=0pt 5|, the length of the arrow will
+ be exactly five times the current line width. As another example, the
+ default length of a |Latex| arrow is |length=3pt 4.5 0.8|. Let us ignore
+ the 0.8 for a moment; the |4pt 4.5| then means that for the standard line
+ width of |0.4pt|, the length of a |Latex| arrow will be exactly 4.8pt (3pt
+ plus 4.5 times |0.4pt|).
+
+ Following the line width factor, you can additionally provide an
+ \meta{outer factor}, again preceded by a space (the |0.8| in the above
+ example). This factor is taken into consideration only when the |double|
+ option is used, that is, when a so-called ``inner line width''. For a
+ double line, we can identify three different ``line widths'', namely the
+ inner line width $w_i$, the line width $w_o$ of the two outer lines, and
+ the ``total line width'' $w_t = w_i + 2w_o$. In the below examples, we have
+ $w_i = 3\mathrm{pt}$, $w_o=1\mathrm{pt}$, and $w_t = 5\mathrm{pt}$. It is
+ not immediately clear which of these line widths should be considered as
+ $w$ in the above formula $\meta{dimension} + \meta{line width factor}\cdot
+ w$ for the computation of the length. One can argue both for $w_t$ and also
+ for $w_o$. Because of this, you use the \meta{outer factor} to decide on
+ one of them or even mix them: \tikzname\ sets $w = \meta{outer factor} w_o
+ + (1-\meta{outer factor})w_t$. Thus, when the outer factor is $0$, as in
+ the first of the following examples and as is the default when it is not
+ specified, the computed $w$ will be the total line width $w_t =
+ 5\mathrm{pt}$. Since $w=5\mathrm{pt}$, we get a total length of $15pt$ in
+ the first example (because of the factor |3|). In contrast, in the last
+ example, the outer factor is 1 and, thus, $w = w_o = \mathrm{1pt}$ and the
+ resulting length is 3pt. Finally, for the middle case, the ``middle''
+ between 5pt and 1pt is 3pt, so the length is 9pt.
+ %
\begin{codeexample}[]
\tikz \draw [line width=1pt, double distance=3pt,
arrows = {-Latex[length=0pt 3 0]}] (0,0) -- (1,0);
@@ -386,22 +367,23 @@ are important in this context:
arrows = {-Latex[length=0pt 3 1]} ] (0,0) -- (1,0);
\end{codeexample}
- \medskip
- \noindent \textbf{The Exact Length.}
- For an arrow tip kind that is just an outline that is filled with a
- color, the specified length should \emph{exactly} equal the distance
- from the tip to the back end. However, when the arrow tip is drawn
- by stroking a line, it is no longer obvious whether the |length|
- should refer to the extend of the stroked lines' path or of the
- resulting pixels (which will be wider because of the thickness of
- the stroking pen). The rules are as follows:
- \begin{enumerate}
- \item If the arrow tip consists of a closed path (like |Stealth| or
- |Latex|), imagine the arrow tip drawn from left to right using a
- miter line cap. Then the |length| should be the horizontal
- distance from the first drawn ``pixel'' to the last drawn
- ``pixel''. Thus, the thickness of the stroked line and also the
- miter ends should be taken into account:
+ \medskip
+ \noindent \textbf{The Exact Length.}
+ For an arrow tip kind that is just an outline that is filled with a color,
+ the specified length should \emph{exactly} equal the distance from the tip
+ to the back end. However, when the arrow tip is drawn by stroking a line,
+ it is no longer obvious whether the |length| should refer to the extend of
+ the stroked lines' path or of the resulting pixels (which will be wider
+ because of the thickness of the stroking pen). The rules are as follows:
+ %
+ \begin{enumerate}
+ \item If the arrow tip consists of a closed path (like |Stealth| or
+ |Latex|), imagine the arrow tip drawn from left to right using a
+ miter line cap. Then the |length| should be the horizontal
+ distance from the first drawn ``pixel'' to the last drawn
+ ``pixel''. Thus, the thickness of the stroked line and also the
+ miter ends should be taken into account:
+ %
\begin{codeexample}[]
\tikz{
\draw [line width=1mm, -{Stealth[length=10mm, open]}]
@@ -409,12 +391,14 @@ are important in this context:
\draw [|<->|] (2,.6) -- node[above=1mm] {10mm} ++(-10mm,0);
}
\end{codeexample}
- \item If, in the above case, the arrow is drawn using a round line
- join (see Section~\ref{section-arrow-key-caps} for details on how
- to select this), the size of the arrow should still be the same as
- in the first case (that is, as if a miter join were used). This
- creates some ``visual consistency'' if the two modes are mixed or
- if you later one change the mode.
+ %
+ \item If, in the above case, the arrow is drawn using a round line
+ join (see Section~\ref{section-arrow-key-caps} for details on how
+ to select this), the size of the arrow should still be the same
+ as in the first case (that is, as if a miter join were used).
+ This creates some ``visual consistency'' if the two modes are
+ mixed or if you later one change the mode.
+ %
\begin{codeexample}[]
\tikz{
\draw [line width=1mm, -{Stealth[length=10mm, open, round]}]
@@ -422,22 +406,23 @@ are important in this context:
\draw [|<->|] (2,.6) -- node[above=1mm] {10mm} ++(-10mm,0);
}
\end{codeexample}
- As the above example shows, however, a rounded arrow will still
- exactly ``tip'' the point where the line should end (the point
- |(2,0)| in the above case). It is only the scaling of the arrow
- that is not affected.
+ %
+ As the above example shows, however, a rounded arrow will still
+ exactly ``tip'' the point where the line should end (the point
+ |(2,0)| in the above case). It is only the scaling of the arrow
+ that is not affected.
\end{enumerate}
\end{key}
\begin{key}{/pgf/arrow keys/width=\meta{dimension}| |\opt{\meta{line width factor}}%
- | |\opt{\meta{outer factor}}}
- This key works line the |length| key, only it specifies the
- ``width'' of the arrow tip; so if width and length are identical, the
- arrow will just touch the borders of a square. (An exception to this
- rule are ``halved'' arrow tips, see
- Section~\ref{section-arrow-key-harpoon}.) The meaning of the two
- optional factor numbers following the \meta{dimension} is the same
- as for the |length| key.
+ | |\opt{\meta{outer factor}}}
+ This key works line the |length| key, only it specifies the ``width'' of
+ the arrow tip; so if width and length are identical, the arrow will just
+ touch the borders of a square. (An exception to this rule are ``halved''
+ arrow tips, see Section~\ref{section-arrow-key-harpoon}.) The meaning of
+ the two optional factor numbers following the \meta{dimension} is the same
+ as for the |length| key.
+ %
\begin{codeexample}[]
\tikz \draw [arrows = {-Latex[width=10pt, length=10pt]}] (0,0) -- (1,0);
\end{codeexample}
@@ -448,50 +433,53 @@ are important in this context:
\begin{key}{/pgf/arrow keys/width'=\meta{dimension}| |\opt{\meta{length
factor}| |\opt{\meta{line width factor}}}}
- The key (note the prime) has a similar effect as the |width|
- key. The difference is that the second, still optional paraemter
- \meta{length factor} specifies the width of the key not as a
- multiple of the line width, but as a multiple of the arrow length.
-
- The idea is that if you write, say, |width'=0pt 0.5|, the width of
- the arrow will be half its length. Indeed, for standard arrow tips
- like |Stealth| the default width is specified in this way so that if
- you change the length of an arrow tip, you also change the width in
- such a way that the aspect ratio of the arrow tip is kept. The other
- way round, if you modify the factor in |width'| without changing the
- length, you change the aspect ratio of the arrow tip.
-
- Note that later changes of the length are taken into account for the
- computation. For instance, if you write
+ The key (note the prime) has a similar effect as the |width| key. The
+ difference is that the second, still optional parameter \meta{length
+ factor} specifies the width of the key not as a multiple of the line width,
+ but as a multiple of the arrow length.
+
+ The idea is that if you write, say, |width'=0pt 0.5|, the width of the
+ arrow will be half its length. Indeed, for standard arrow tips like
+ |Stealth| the default width is specified in this way so that if you change
+ the length of an arrow tip, you also change the width in such a way that
+ the aspect ratio of the arrow tip is kept. The other way round, if you
+ modify the factor in |width'| without changing the length, you change the
+ aspect ratio of the arrow tip.
+
+ Note that later changes of the length are taken into account for the
+ computation. For instance, if you write
+ %
\begin{codeexample}[code only]
-length = 10pt, width'=5pt 2, length=7pt
+length = 10pt, width'=5pt 2, length=7pt
\end{codeexample}
- the resulting width will be $19\mathrm{pt} = 5\mathrm{pt} + 2\cdot
- 7\mathrm{pt}$.
-
+ %
+ the resulting width will be $19\mathrm{pt} = 5\mathrm{pt} + 2\cdot
+ 7\mathrm{pt}$.
+ %
\begin{codeexample}[]
\tikz \draw [arrows = {-Latex[width'=0pt .5, length=10pt]}] (0,0) -- (1,0);
\end{codeexample}
\begin{codeexample}[]
\tikz \draw [arrows = {-Latex[width'=0pt .5, length=15pt]}] (0,0) -- (1,0);
\end{codeexample}
- The third, also optional, parameter allows you to add a multiple of
- the line width to the value computed in terms of the length.
+ %
+ The third, also optional, parameter allows you to add a multiple of the
+ line width to the value computed in terms of the length.
\end{key}
\begin{key}{/pgf/arrow keys/inset=\meta{dimension}| |\opt{\meta{line width factor}}%
- | |\opt{\meta{outer factor}}}
- The key is relevant only for some arrow tips such as the |Stealth|
- arrow tip. It specifies a distance by which something inside the
- arrow tip is set inwards; for the |Stealth| arrow tip it is the
- distance by which the back angle is moved inwards.
-
- The computation of the distance works in the same way as for
- |length| and |width|: To the \meta{dimension} we add \meta{line
- width factor} times that line width, where the line width is
- computed based on the \meta{outer factor} as described for the
- |length| key.
+ | |\opt{\meta{outer factor}}}
+ The key is relevant only for some arrow tips such as the |Stealth| arrow
+ tip. It specifies a distance by which something inside the arrow tip is set
+ inwards; for the |Stealth| arrow tip it is the distance by which the back
+ angle is moved inwards.
+
+ The computation of the distance works in the same way as for |length| and
+ |width|: To the \meta{dimension} we add \meta{line width factor} times that
+ line width, where the line width is computed based on the \meta{outer
+ factor} as described for the |length| key.
+ %
\begin{codeexample}[]
\tikz \draw [arrows = {-Stealth[length=10pt, inset=5pt]}] (0,0) -- (1,0);
\end{codeexample}
@@ -499,46 +487,42 @@ length = 10pt, width'=5pt 2, length=7pt
\tikz \draw [arrows = {-Stealth[length=10pt, inset=2pt]}] (0,0) -- (1,0);
\end{codeexample}
- For most arrows for which there is no ``natural inset'' like, say,
- |Latex|, this key has no effect.
+ For most arrows for which there is no ``natural inset'' like, say, |Latex|,
+ this key has no effect.
\end{key}
-
\begin{key}{/pgf/arrow keys/inset'=\meta{dimension}| |\opt{\meta{length factor}}| |\opt{\meta{line width factor}}}
- This key works like |inset|, only like |width'| the second parameter
- is a factor of the arrow length rather than of the line width. For
- instance, the |Stealth| arrow sets |inset'| to |0pt 0.325| to ensure
- that the inset is always at $13/40$th of the arrow length if nothing
- else is specified.
+ This key works like |inset|, only like |width'| the second parameter is a
+ factor of the arrow length rather than of the line width. For instance, the
+ |Stealth| arrow sets |inset'| to |0pt 0.325| to ensure that the inset is
+ always at $13/40$th of the arrow length if nothing else is specified.
\end{key}
-
-
\begin{key}{/pgf/arrow keys/angle=\meta{angle}|:|\meta{dimension}%
- | |\opt{\meta{line width factor}}%
- | |\opt{\meta{outer factor}}}
- This key sets the |length| and the |width| of an arrow tip at the
- same time. The lenght will be the cosine of \meta{angle}, while the
- width will be twice the sine of half the \meta{angle} (this slightly
- awkward rule ensures that a |Stealth| arrow will have an opening
- angle of \meta{angle} at its tip if this option is used). As for the
- |length| key, if the optional factors are given, they add a certain
- multiple of the line width to the \meta{dimension} before the sine
- and cosines are computed.
+ | |\opt{\meta{line width factor}}%
+ | |\opt{\meta{outer factor}}}
+ This key sets the |length| and the |width| of an arrow tip at the same
+ time. The length will be the cosine of \meta{angle}, while the width will
+ be twice the sine of half the \meta{angle} (this slightly awkward rule
+ ensures that a |Stealth| arrow will have an opening angle of \meta{angle}
+ at its tip if this option is used). As for the |length| key, if the
+ optional factors are given, they add a certain multiple of the line width
+ to the \meta{dimension} before the sine and cosines are computed.
+ %
\begin{codeexample}[]
\tikz \draw [arrows = {-Stealth[inset=0pt, angle=90:10pt]}] (0,0) -- (1,0);
\end{codeexample}
\begin{codeexample}[]
\tikz \draw [arrows = {-Stealth[inset=0pt, angle=30:10pt]}] (0,0) -- (1,0);
\end{codeexample}
+ %
\end{key}
-
\begin{key}{/pgf/arrow keys/angle'=\meta{angle}}
- Sets the width of the arrow to twice the tangent of $\meta{angle}/2$
- times the arrow length. This results in an arrow tip with an opening
- angle of \meta{angle} at its tip and with the specified |length|
- unchanged.
+ Sets the width of the arrow to twice the tangent of $\meta{angle}/2$ times
+ the arrow length. This results in an arrow tip with an opening angle of
+ \meta{angle} at its tip and with the specified |length| unchanged.
+ %
\begin{codeexample}[]
\tikz \draw [arrows = {-Stealth[inset=0pt, length=10pt, angle'=90]}]
(0,0) -- (1,0);
@@ -547,82 +531,89 @@ length = 10pt, width'=5pt 2, length=7pt
\tikz \draw [arrows = {-Stealth[inset=0pt, length=10pt, angle'=30]}]
(0,0) -- (1,0);
\end{codeexample}
+ %
\end{key}
\subsubsection{Scaling}
-In the previous section we saw that there are many options for getting
-``fine control'' overt the length and width of arrow tips. However, in
-some cases, you do not really care whether the arrow tip is 4pt long
-or 4.2pt long, you ``just want it to be a little bit larger than
-usual.'' In such cases, the following keys are useful:
+In the previous section we saw that there are many options for getting ``fine
+control'' overt the length and width of arrow tips. However, in some cases, you
+do not really care whether the arrow tip is 4pt long or 4.2pt long, you ``just
+want it to be a little bit larger than usual''. In such cases, the following
+keys are useful:
\begin{key}{/pgf/arrows keys/scale=\meta{factor} (initially 1)}
- After all the other options listed in the previous (and also the
- following sections) have been processed, \tikzname\ applies a
- \emph{scaling} to the computed length, inset, and width of the arrow
- tip (and, possibly, to other size parameters defined by
- special-purpose arrow tip kinds). Everything is simply scaled by the
- given \meta{factor}.
+ After all the other options listed in the previous (and also the following
+ sections) have been processed, \tikzname\ applies a \emph{scaling} to the
+ computed length, inset, and width of the arrow tip (and, possibly, to other
+ size parameters defined by special-purpose arrow tip kinds). Everything is
+ simply scaled by the given \meta{factor}.
+ %
\begin{codeexample}[]
\tikz {
\draw [arrows = {-Stealth[]}] (0,1) -- (1,1);
\draw [arrows = {-Stealth[scale=1.5]}] (0,0.5) -- (1,0.5);
\draw [arrows = {-Stealth[scale=2]}] (0,0) -- (1,0);
}
-\end{codeexample}
- Note that scaling has \emph{no} effect on the line width (as usual)
- and also not on the arrow padding (the |sep|).
+\end{codeexample}
+ %
+ Note that scaling has \emph{no} effect on the line width (as usual) and
+ also not on the arrow padding (the |sep|).
\end{key}
-You can get even more fine-grained control over scaling using the
-following keys (the |scale| key is just a shorthand for setting both
-of the following keys simultaneously):
+You can get even more fine-grained control over scaling using the following
+keys (the |scale| key is just a shorthand for setting both of the following
+keys simultaneously):
\begin{key}{/pgf/arrows keys/scale length=\meta{factor} (initially 1)}
- This factor works like |scale|, only it is applied only to
- dimensions ``along the axis of the arrow,'' that is, to the length
- and to the inset, but not to the width.
+ This factor works like |scale|, only it is applied only to dimensions
+ ``along the axis of the arrow'', that is, to the length and to the inset,
+ but not to the width.
+ %
\begin{codeexample}[]
\tikz {
\draw [arrows = {-Stealth[]}] (0,1) -- (1,1);
\draw [arrows = {-Stealth[scale length=1.5]}] (0,0.5) -- (1,0.5);
\draw [arrows = {-Stealth[scale length=2]}] (0,0) -- (1,0);
}
-\end{codeexample}
+\end{codeexample}
+ %
\end{key}
\begin{key}{/pgf/arrows keys/scale width=\meta{factor} (initially 1)}
- Like |scale length|, but for dimensions related to the width.
+ Like |scale length|, but for dimensions related to the width.
+ %
\begin{codeexample}[]
\tikz {
\draw [arrows = {-Stealth[]}] (0,1) -- (1,1);
\draw [arrows = {-Stealth[scale width=1.5]}] (0,0.5) -- (1,0.5);
\draw [arrows = {-Stealth[scale width=2]}] (0,0) -- (1,0);
}
-\end{codeexample}
+\end{codeexample}
+ %
\end{key}
\subsubsection{Arc Angles}
-A few arrow tips consist mainly of arcs, whose length can be
-specified. For these arrow tips, you use the following key:
+A few arrow tips consist mainly of arcs, whose length can be specified. For
+these arrow tips, you use the following key:
\begin{key}{/pgf/arrow keys/arc=\meta{degrees} (initially 180)}
- Sets the angle of arcs in arrows to \meta{degrees}. Note that this key
- is quite different from the |angle| key, which is ``just a
- fancy way of setting the length and width.'' In contrast, the |arc|
- key is used to set the degrees of arcs that are part of an arrow
- tip:
+ Sets the angle of arcs in arrows to \meta{degrees}. Note that this key is
+ quite different from the |angle| key, which is ``just a fancy way of
+ setting the length and width''. In contrast, the |arc| key is used to set
+ the degrees of arcs that are part of an arrow tip:
+ %
\begin{codeexample}[]
\tikz [ultra thick] {
\draw [arrows = {-Hooks[]}] (0,1) -- (1,1);
\draw [arrows = {-Hooks[arc=90]}] (0,0.5) -- (1,0.5);
\draw [arrows = {-Hooks[arc=270]}] (0,0) -- (1,0);
}
-\end{codeexample}
+\end{codeexample}
+ %
\end{key}
@@ -631,47 +622,49 @@ specified. For these arrow tips, you use the following key:
You can ``slant'' arrow tips using the following key:
\begin{key}{/pgf/arrow keys/slant=\meta{factor} (initially 0)}
- Slanting is used to create an ``italics'' effect for arrow tips: All
- arrow tips get ``slanted'' a little bit relative to the axis of the
- arrow:
+ Slanting is used to create an ``italics'' effect for arrow tips: All arrow
+ tips get ``slanted'' a little bit relative to the axis of the arrow:
+ %
\begin{codeexample}[]
\tikz {
\draw [arrows = {->[]}] (0,1) -- (1,1);
\draw [arrows = {->[slant=.5]}] (0,0.5) -- (1,0.5);
\draw [arrows = {->[slant=1]}] (0,0) -- (1,0);
}
-\end{codeexample}
- There is one thing to note about slanting: Slanting is done using a
- so-called ``canvas transformation'' and has no effect on
- positioning of the arrow tip. In particular, if an arrow tip gets
- slanted so strongly that it starts to protrude over the arrow tip
- end, this does not change the positioning of the arrow tip.
+\end{codeexample}
+ %
+ There is one thing to note about slanting: Slanting is done using a
+ so-called ``canvas transformation'' and has no effect on positioning of
+ the arrow tip. In particular, if an arrow tip gets slanted so strongly that
+ it starts to protrude over the arrow tip end, this does not change the
+ positioning of the arrow tip.
- Here is another example where slanting is used to match italic text:
+ Here is another example where slanting is used to match italic text:
+ %
\begin{codeexample}[]
\tikz [>={[slant=.3] To[] To[]}]
- \graph [math nodes] { A -> B <-> C };
+ \graph [math nodes] { A -> B <-> C };
\end{codeexample}
+ %
\end{key}
-
\subsubsection{Reversing, Halving, Swapping}
\label{section-arrow-key-harpoon}
\begin{key}{/pgf/arrow keys/reverse}
- Adding this key to an arrow tip will ``reverse its direction'' so
- that is points in the opposite direction (but is still at that end of the
- line where the non-reversed arrow tip would have been drawn; so only
- the tip is reversed). For most arrow tips, this just results in an
- internal flip of a coordinate system, but some arrow tips actually
- use a slightly different version of the tip for reversed arrow tips
- (namely when the joining of the tip with the line would look
- strange). All of this happens automatically, so you do not need to
- worry about this.
-
- If you apply this key twice, the effect cancels, which is useful for
- the definition of shorthands (which will be discussed later).
+ Adding this key to an arrow tip will ``reverse its direction'' so that is
+ points in the opposite direction (but is still at that end of the line
+ where the non-reversed arrow tip would have been drawn; so only the tip is
+ reversed). For most arrow tips, this just results in an internal flip of a
+ coordinate system, but some arrow tips actually use a slightly different
+ version of the tip for reversed arrow tips (namely when the joining of the
+ tip with the line would look strange). All of this happens automatically,
+ so you do not need to worry about this.
+
+ If you apply this key twice, the effect cancels, which is useful for the
+ definition of shorthands (which will be discussed later).
+ %
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [arrows = {-Stealth[reversed]}] (0,0) -- (1,0);
\end{codeexample}
@@ -681,74 +674,75 @@ You can ``slant'' arrow tips using the following key:
\end{key}
\begin{key}{/pgf/arrow keys/harpoon}
- The key requests that only the ``left half'' of the arrow tip should
- drawn:
+ The key requests that only the ``left half'' of the arrow tip should drawn:
+ %
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [arrows = {-Stealth[harpoon]}] (0,0) -- (1,0);
\end{codeexample}
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [arrows = {->[harpoon]}] (0,0) -- (1,0);
\end{codeexample}
- Unlike the |reverse| key, which all arrows tip kinds support at
- least in a basic way, designers of arrow tips really need to take
- this key into account in their arrow tip code and often a lot of
- special attention needs to do be paid to this key in the
- implementation. For this reason, only some arrow tips will support
- it.
+ %
+ Unlike the |reverse| key, which all arrows tip kinds support at least in a
+ basic way, designers of arrow tips really need to take this key into
+ account in their arrow tip code and often a lot of special attention needs
+ to do be paid to this key in the implementation. For this reason, only some
+ arrow tips will support it.
\end{key}
\begin{key}{/pgf/arrow keys/swap}
- This key flips that arrow tip along the axis of the line. It makes
- sense only for asymmetric arrow tips like the harpoons created using
- the |harpoon| option.
+ This key flips that arrow tip along the axis of the line. It makes sense
+ only for asymmetric arrow tips like the harpoons created using the
+ |harpoon| option.
+ %
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [arrows = {-Stealth[harpoon]}] (0,0) -- (1,0);
\end{codeexample}
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [arrows = {-Stealth[harpoon,swap]}] (0,0) -- (1,0);
\end{codeexample}
- Swapping is always possible, no special code is needed on behalf of
- an arrow tip implementer.
+ %
+ Swapping is always possible, no special code is needed on behalf of an
+ arrow tip implementer.
\end{key}
\begin{key}{/pgf/arrow keys/left}
- A shorthand for |harpoon|.
+ A shorthand for |harpoon|.
\end{key}
\begin{key}{/pgf/arrow keys/right}
- A shorthand for |harpoon, swap|.
+ A shorthand for |harpoon, swap|.
+ %
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [arrows = {-Stealth[left]}] (0,0) -- (1,0);
\end{codeexample}
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [arrows = {-Stealth[right]}] (0,0) -- (1,0);
\end{codeexample}
+ %
\end{key}
\subsubsection{Coloring}
-Arrow tips are drawn using the same basic mechanisms as normal paths,
-so arrow tips can be stroked (drawn) and/or filled. However, we
-usually want the color of arrow tips to be identical to the color used
-to draw the path, even if a different color is used for filling the
-path. On the other hand, we may also sometimes wish to use a special
-color for the arrow tips that is different from both the line and fill
-colors of the main path.
-
-The following options allow you to configure how arrow tips are
-colored:
-
-\begin{key}{/pgf/arrow keys/color=\meta{color or empty} (initially
- \normalfont empty)}
- Normally, an arrow tip gets the same color as the path to which it
- is attached. More precisely, it will get the current ``draw color'',
- also known as ``stroke color,'' which you can set using
- |draw=|\meta{some color}. By adding the option |color=| to an arrow
- tip (note that an ``empty'' color is specified in this way), you ask
- that the arrow tip gets this default draw color of the path. Since
- this is the default behaviour, you usually do not need to specify
- anything:
+Arrow tips are drawn using the same basic mechanisms as normal paths, so arrow
+tips can be stroked (drawn) and/or filled. However, we usually want the color
+of arrow tips to be identical to the color used to draw the path, even if a
+different color is used for filling the path. On the other hand, we may also
+sometimes wish to use a special color for the arrow tips that is different from
+both the line and fill colors of the main path.
+
+The following options allow you to configure how arrow tips are colored:
+
+\begin{key}{/pgf/arrow keys/color=\meta{color or empty} (initially \normalfont empty)}
+ Normally, an arrow tip gets the same color as the path to which it is
+ attached. More precisely, it will get the current ``draw color'', also
+ known as ``stroke color'', which you can set using |draw=|\meta{some
+ color}. By adding the option |color=| to an arrow tip (note that an
+ ``empty'' color is specified in this way), you ask that the arrow tip gets
+ this default draw color of the path. Since this is the default behaviour,
+ you usually do not need to specify anything:
+ %
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [red, arrows = {-Stealth}] (0,0) -- (1,0);
\end{codeexample}
@@ -756,9 +750,10 @@ colored:
\tikz [ultra thick] \draw [blue, arrows = {-Stealth}] (0,0) -- (1,0);
\end{codeexample}
- Now, when you provide a \meta{color} with this option, you request
- that the arrow tip should get this color \emph{instead} of the color
- of the main path:
+ Now, when you provide a \meta{color} with this option, you request that the
+ arrow tip should get this color \emph{instead} of the color of the main
+ path:
+ %
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [red, arrows = {-Stealth[color=blue]}] (0,0) -- (1,0);
\end{codeexample}
@@ -766,118 +761,123 @@ colored:
\tikz [ultra thick] \draw [red, arrows = {-Stealth[color=black]}] (0,0) -- (1,0);
\end{codeexample}
- Similar to the |color| option used in normal \tikzname\ options, you
- may omit the |color=| part of the option. Whenever an \meta{arrow key}
- is encountered that \tikzname\ does not recognize, it will test whether
- the key is the name of a color and, if so, execute
- |color=|\meta{arrow key}. So, the first of the above examples can be
- rewritten as follows:
+ Similar to the |color| option used in normal \tikzname\ options, you may
+ omit the |color=| part of the option. Whenever an \meta{arrow key} is
+ encountered that \tikzname\ does not recognize, it will test whether the
+ key is the name of a color and, if so, execute |color=|\meta{arrow key}.
+ So, the first of the above examples can be rewritten as follows:
+ %
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [red, arrows = {-Stealth[blue]}] (0,0) -- (1,0);
\end{codeexample}
- The \meta{color} will apply both to any drawing and filling
- operations used to construct the path. For instance, even though the
- |Stealth| arrow tips looks like a filled quadrilateral, it is
- actually constructed by drawing a quadrilateral and then filling it
- in the same color as the drawing (see the |fill| option below to
- see the difference).
+ The \meta{color} will apply both to any drawing and filling operations used
+ to construct the path. For instance, even though the |Stealth| arrow tips
+ looks like a filled quadrilateral, it is actually constructed by drawing a
+ quadrilateral and then filling it in the same color as the drawing (see the
+ |fill| option below to see the difference).
- When |color| is set to an empty text, the drawing color is
- always used to fill the arrow tips, even if a different color is
- specified for filling the path:
+ When |color| is set to an empty text, the drawing color is always used to
+ fill the arrow tips, even if a different color is specified for filling the
+ path:
+ %
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [draw=red, fill=red!50, arrows = {-Stealth[length=10pt]}]
(0,0) -- (1,1) -- (2,0);
\end{codeexample}
- As you can see in the above example, the filled area is not quite
- what you might have expected. The reason is that the path was
- actually internally shortened a bit so that the end of the ``fat
- line'' as inside the arrow tip and we get a ``clear'' arrow tip.
+ %
+ As you can see in the above example, the filled area is not quite what you
+ might have expected. The reason is that the path was actually internally
+ shortened a bit so that the end of the ``fat line'' as inside the arrow tip
+ and we get a ``clear'' arrow tip.
- In general, it is a good idea not to add arrow tips to paths that
- are filled.
+ In general, it is a good idea not to add arrow tips to paths that are
+ filled.
\end{key}
\begin{key}{/pgf/arrow keys/fill=\meta{color or |none|}}
- Use this key to explicitly set the color used for filling the arrow
- tips. This color can be different from the color used to draw
- (stroke) the arrow tip:
+ Use this key to explicitly set the color used for filling the arrow tips.
+ This color can be different from the color used to draw (stroke) the arrow
+ tip:
+ %
\begin{codeexample}[width=3cm]
\tikz {
\draw [help lines] (0,-.5) grid [step=1mm] (1,.5);
\draw [thick, red, arrows = {-Stealth[fill=white,length=15pt]}] (0,0) -- (1,0);
}
\end{codeexample}
- You can also specify the special ``color'' |none|. In this case, the
- arrow tip is not filled at all (not even with white):
+ %
+ You can also specify the special ``color'' |none|. In this case, the arrow
+ tip is not filled at all (not even with white):
+ %
\begin{codeexample}[width=3cm]
\tikz {
\draw [help lines] (0,-.5) grid [step=1mm] (1,.5);
\draw [thick, red, arrows = {-Stealth[fill=none,length=15pt]}] (0,0) -- (1,0);
}
\end{codeexample}
- Note that such ``open'' arrow tips are a bit difficult to draw in
- some case: The problem is that the line must be shortened by just
- the right amount so that it ends exactly on the back end of the
- arrow tip. In some cases, especially when double lines are used,
- this will not be possible.
-
- \begin{key}{/pgf/arrow keys/open}
- A shorthand for |fill=none|.
- \end{key}
-
- When you use both the |color| and |fill| option, the |color| option
- must come first since it will reset the filling to the color
- specified for drawing.
+ %
+ Note that such ``open'' arrow tips are a bit difficult to draw in some
+ case: The problem is that the line must be shortened by just the right
+ amount so that it ends exactly on the back end of the arrow tip. In some
+ cases, especially when double lines are used, this will not be possible.
+
+ \begin{key}{/pgf/arrow keys/open}
+ A shorthand for |fill=none|.
+ \end{key}
+
+ When you use both the |color| and |fill| option, the |color| option must
+ come first since it will reset the filling to the color specified for
+ drawing.
+ %
\begin{codeexample}[width=3cm]
\tikz {
\draw [help lines] (0,-.5) grid [step=1mm] (1,.5);
- \draw [thick, red, arrows = {-Stealth[color=blue, fill=white, length=15pt]}]
+ \draw [thick, red, arrows = {-Stealth[color=blue, fill=white, length=15pt]}]
(0,0) -- (1,0);
}
\end{codeexample}
- Note that by setting |fill| to the special color |pgffillcolor|, you
- can cause the arrow tips to be filled using the color used to fill
- the main path. (This special color is always available and always
- set to the current filling color of the graphic state.):
+ Note that by setting |fill| to the special color |pgffillcolor|, you can
+ cause the arrow tips to be filled using the color used to fill the main
+ path. (This special color is always available and always set to the current
+ filling color of the graphic state.):
+ %
\begin{codeexample}[width=3cm]
\tikz [ultra thick] \draw [draw=red, fill=red!50,
arrows = {-Stealth[length=15pt, fill=pgffillcolor]}]
(0,0) -- (1,1) -- (2,0);
\end{codeexample}
+ %
\end{key}
\subsubsection{Line Styling}
\label{section-arrow-key-caps}
-Arrow tips are created by drawing and possibly filling a path that
-makes up the arrow tip. When \tikzname\ draws a path, there are
-different ways in which such a path can be drawn (such as
-dashing). Three particularly important parameters are the line join,
-the line cap, see Section~\ref{section-line-cap} for an introduction,
-and the line width (thickness)
+Arrow tips are created by drawing and possibly filling a path that makes up the
+arrow tip. When \tikzname\ draws a path, there are different ways in which such
+a path can be drawn (such as dashing). Three particularly important parameters
+are the line join, the line cap, see Section~\ref{section-line-cap} for an
+introduction, and the line width (thickness).
-\tikzname\ resets the line cap and line join each time it draws an
-arrow tip since you usually do not want their settings to ``spill
-over'' to the way the arrow tips are drawn. You can, however, change
-there values explicitly for an arrow tip:
+\tikzname\ resets the line cap and line join each time it draws an arrow tip
+since you usually do not want their settings to ``spill over'' to the way the
+arrow tips are drawn. You can, however, change there values explicitly for an
+arrow tip:
\begin{key}{/pgf/arrow keys/line cap=\meta{|round| or |butt|}}
- Sets the line cap of all lines that are drawn in the arrow to a
- round cap or a butt cap. (Unlike for normal lines, the |rect| cap is
- not allowed.) Naturally, this key has no effect for arrows whose
- paths are closed.
-
- Each arrow tip has a default value for the line cap, which can
- be overruled using this option.
-
- Changing the cap should have no effect on the size of the
- arrow. However, it will have an effect on where the exact ``tip'' of
- the arrow is since this will always be exactly at the end of the
- arrow:
+ Sets the line cap of all lines that are drawn in the arrow to a round cap
+ or a butt cap. (Unlike for normal lines, the |rect| cap is not allowed.)
+ Naturally, this key has no effect for arrows whose paths are closed.
+
+ Each arrow tip has a default value for the line cap, which can be overruled
+ using this option.
+
+ Changing the cap should have no effect on the size of the arrow. However,
+ it will have an effect on where the exact ``tip'' of the arrow is since
+ this will always be exactly at the end of the arrow:
+ %
\begin{codeexample}[width=3cm]
\tikz [line width=2mm]
\draw [arrows = {-Computer Modern Rightarrow[line cap=butt]}]
@@ -898,13 +898,14 @@ there values explicitly for an arrow tip:
\draw [arrows = {-Bracket[reversed,line cap=round]}]
(0,0) -- (1,0);
\end{codeexample}
+ %
\end{key}
\begin{key}{/pgf/arrow keys/line join=\meta{|round| or |miter|}}
- Sets the line join to round or miter (|bevel| is not allowed). This
- time, the key only has an effect on paths that have ``corners'' in
- them. The same rules as for |line cap| apply: the size is not
- affects, but the tip end is:
+ Sets the line join to round or miter (|bevel| is not allowed). This time,
+ the key only has an effect on paths that have ``corners'' in them. The same
+ rules as for |line cap| apply: the size is not affects, but the tip end is:
+ %
\begin{codeexample}[width=3cm]
\tikz [line width=2mm]
\draw [arrows = {-Computer Modern Rightarrow[line join=miter]}]
@@ -925,12 +926,15 @@ there values explicitly for an arrow tip:
\draw [arrows = {-Bracket[reversed,line join=round]}]
(0,0) -- (1,0);
\end{codeexample}
-\end{key}
+ %
+\end{key}
The following keys set both of the above:
+
\begin{key}{/pgf/arrow keys/round}
- A shorthand for |line cap=round, line join=round|, resulting in
- ``rounded'' arrow heads.
+ A shorthand for |line cap=round, line join=round|, resulting in ``rounded''
+ arrow heads.
+ %
\begin{codeexample}[width=3cm]
\tikz [line width=2mm]
\draw [arrows = {-Computer Modern Rightarrow[round]}] (0,0) -- (1,0);
@@ -939,11 +943,12 @@ The following keys set both of the above:
\tikz [line width=2mm]
\draw [arrows = {-Bracket[reversed,round]}] (0,0) -- (1,0);
\end{codeexample}
+ %
\end{key}
\begin{key}{/pgf/arrow keys/sharp}
- A shorthand for |line cap=butt, line join=miter|, resulting in
- ``sharp'' or ``pointed'' arrow heads.
+ A shorthand for |line cap=butt, line join=miter|, resulting in ``sharp'' or
+ ``pointed'' arrow heads.
\begin{codeexample}[width=3cm]
\tikz [line width=2mm]
\draw [arrows = {-Computer Modern Rightarrow[sharp]}] (0,0) -- (1,0);
@@ -952,49 +957,47 @@ The following keys set both of the above:
\tikz [line width=2mm]
\draw [arrows = {-Bracket[reversed,sharp]}] (0,0) -- (1,0);
\end{codeexample}
+ %
\end{key}
-
You can also set the width of lines used inside arrow tips:
\begin{key}{/pgf/arrow keys/line width=\meta{dimension}| |\opt{\meta{line width factor}}%
- | |\opt{\meta{outer factor}}}
- This key sets the line width inside an arrow tip for drawing
- (out)lines of the arrow tip. When you set this width to |0pt|, which
- makes sense only for closed tips, the arrow tip is only filled. This
- can result in better rendering of some small arrow tips and in case
- of bend arrow tips (because the line joins will also be bend and not
- ``mitered''.)
-
- The meaning of the factors is as usual the same as for |length| or |width|.
-
+ | |\opt{\meta{outer factor}}}
+ This key sets the line width inside an arrow tip for drawing (out)lines of
+ the arrow tip. When you set this width to |0pt|, which makes sense only for
+ closed tips, the arrow tip is only filled. This can result in better
+ rendering of some small arrow tips and in case of bend arrow tips (because
+ the line joins will also be bend and not ``mitered''.)
+
+ The meaning of the factors is as usual the same as for |length| or |width|.
+ %
\begin{codeexample}[width=2cm]
\tikz \draw [arrows = {-Latex[line width=0.1pt, fill=white, length=10pt]}] (0,0) -- (1,0);
\end{codeexample}
\begin{codeexample}[width=2cm]
\tikz \draw [arrows = {-Latex[line width=1pt, fill=white, length=10pt]}] (0,0) -- (1,0);
\end{codeexample}
+ %
\end{key}
-
\begin{key}{/pgf/arrow keys/line width'=\meta{dimension}| |\opt{\meta{length factor}}}
- Works like |line width| only the factor is with respect to the |length|.
+ Works like |line width| only the factor is with respect to the |length|.
\end{key}
-\subsubsection{Bending and Flexing}
+\subsubsection{Bending and Flexing}
\label{section-arrow-flex}
-Up to now, we have only added arrow tip to the end of straight lines,
-which is in some sense ``easy.'' Things get far more difficult, if the
-line to which we wish to end an arrow tip is curved. In the following,
-we have a look at the different actions that can be taken and how they
-can be configured.
+Up to now, we have only added arrow tip to the end of straight lines, which is
+in some sense ``easy''. Things get far more difficult, if the line to which we
+wish to end an arrow tip is curved. In the following, we have a look at the
+different actions that can be taken and how they can be configured.
To get a feeling for the difficulties involved, consider the following
-situation: We have a ``gray wall'' at the $x$-coordinate of and a
-red line that ends in its middle.
-
+situation: We have a ``gray wall'' at the $x$-coordinate of and a red line that
+ends in its middle.
+%
\begin{codeexample}[]
\def\wall{ \fill [fill=black!50] (1,-.5) rectangle (2,.5);
\pattern [pattern=bricks] (1,-.5) rectangle (2,.5);
@@ -1006,9 +1009,9 @@ red line that ends in its middle.
\end{tikzpicture}
\end{codeexample}
-Now we wish to add a blue open arrow tip the red line like, say,
-|Stealth[length=1cm,open,blue]|:
-
+Now we wish to add a blue open arrow tip the red line like, say,
+|Stealth[length=1cm,open,blue]|:
+%
\def\wall{ \fill [fill=black!50] (1,-.5) rectangle (2,.5);
\pattern [pattern=bricks] (1,-.5) rectangle (2,.5);
\draw [line width=1pt] (1cm+.5pt,-.5) -- ++(0,1); }
@@ -1021,35 +1024,35 @@ Now we wish to add a blue open arrow tip the red line like, say,
\end{codeexample}
There are several noteworthy things about the blue arrow tip:
+%
\begin{enumerate}
-\item Notice that the red line no longer goes all the way to the
- wall. Indeed, the red line ends more or less exactly where it meets
- the blue line, leaving the arrow tip empty. Now, recall that the red
- line was supposed to be the path |(-2,0)--(1,0)|; however, this path
- has obviously become much shorter (by 6.25mm to be precise). This
- effect is called \emph{path shortening} in \tikzname.
-\item The very tip of the arrow just ``touches'' the wall, even we
- zoom out a lot. This point, where the original path ended and where
- the arrow tip should now lie, is called the \emph{tip end} in
- \tikzname.
-\item Finally, the point where the red line touches the blue line is
- the point where the original path ``visually ends.'' Notice that
- this is not the same as the point that lies at a distance of the
- arrow's |length| from the wall -- rather it lies at a distance of
- |length| minus the |inset|. Let us call this point the \emph{visual
+ \item Notice that the red line no longer goes all the way to the wall.
+ Indeed, the red line ends more or less exactly where it meets the
+ blue line, leaving the arrow tip empty. Now, recall that the red line
+ was supposed to be the path |(-2,0)--(1,0)|; however, this path has
+ obviously become much shorter (by 6.25mm to be precise). This effect
+ is called \emph{path shortening} in \tikzname.
+ \item The very tip of the arrow just ``touches'' the wall, even we zoom
+ out a lot. This point, where the original path ended and where the
+ arrow tip should now lie, is called the \emph{tip end} in \tikzname.
+ \item Finally, the point where the red line touches the blue line is the
+ point where the original path ``visually ends''. Notice that this is
+ not the same as the point that lies at a distance of the arrow's
+ |length| from the wall -- rather it lies at a distance of |length|
+ minus the |inset|. Let us call this point the \emph{visual
end} of the arrow.
\end{enumerate}
-As pointed out earlier, for straight lines, shortening the path and
-rotating and shifting the arrow tip so that it ends precisely at the
-tip end and the visual end lies on a line from the tip end to the
-start of the line is relatively easy.
-
-For curved lines, things are much more difficult and \tikzname\ copes
-with the difficulties in different ways, depending on which options
-you add to arrows. Here is now a curved red line to which we wish to
-add our arrow tip (the original straight red line is shown in light red):
+As pointed out earlier, for straight lines, shortening the path and rotating
+and shifting the arrow tip so that it ends precisely at the tip end and the
+visual end lies on a line from the tip end to the start of the line is
+relatively easy.
+For curved lines, things are much more difficult and \tikzname\ copes with the
+difficulties in different ways, depending on which options you add to arrows.
+Here is now a curved red line to which we wish to add our arrow tip (the
+original straight red line is shown in light red):
+%
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1058,32 +1061,31 @@ add our arrow tip (the original straight red line is shown in light red):
\end{tikzpicture}
\end{codeexample}
-The first way of dealing with curved lines is dubbed the ``quick
-and dirty'' way (although the option for selecting this option is
-politely just called ``|quick|'' \dots):
+The first way of dealing with curved lines is dubbed the ``quick and dirty''
+way (although the option for selecting this option is politely just called
+``|quick|'' \dots):
\begin{key}{/pgf/arrow keys/quick}
- Recall that curves in \tikzname\ are actually B\'ezier curves, which
- means that they start and end at certain points and we specify two
- vectors, one for the start and one for the end, that provide
- tangents to the curve at these points. In particular, for the end of
- the curve, there is a point called the \emph{second support point}
- of the curve such that a tangent to the curve at the end goes
- through this point. In our above example, the second support point
- is at the middle of the light red line and, indeed, a tangent to the
- red line at the point touching the wall is perfectly horizontal.
-
- In order to add our arrow tip to the curved path, our first
- objective is to ``shorten'' the path by 6.25mm. Unfortunately, this
- is now much more difficult than for a straight path. When the
- |quick| option is added to an arrow tip (it is also
- the default if no special libraries are loaded), we cheat somewhat:
- Instead of really moving along 6.25mm along the path, we simply
- shift the end of the curve by 6.25mm \emph{along the tangent} (which
- is easy to compute). We also have to shift the second support point
- by the same amount to ensure that the line still has the same
- tangent at the end. This will result in the following:
-
+ Recall that curves in \tikzname\ are actually Bézier curves, which means
+ that they start and end at certain points and we specify two vectors, one
+ for the start and one for the end, that provide tangents to the curve at
+ these points. In particular, for the end of the curve, there is a point
+ called the \emph{second support point} of the curve such that a tangent to
+ the curve at the end goes through this point. In our above example, the
+ second support point is at the middle of the light red line and, indeed, a
+ tangent to the red line at the point touching the wall is perfectly
+ horizontal.
+
+ In order to add our arrow tip to the curved path, our first objective is to
+ ``shorten'' the path by 6.25mm. Unfortunately, this is now much more
+ difficult than for a straight path. When the |quick| option is added to an
+ arrow tip (it is also the default if no special libraries are loaded), we
+ cheat somewhat: Instead of really moving along 6.25mm along the path, we
+ simply shift the end of the curve by 6.25mm \emph{along the tangent} (which
+ is easy to compute). We also have to shift the second support point by the
+ same amount to ensure that the line still has the same tangent at the end.
+ This will result in the following:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1093,19 +1095,19 @@ politely just called ``|quick|'' \dots):
\end{tikzpicture}
\end{codeexample}
- They main problem with the above picture is that the red line is no
- longer equal to the original red line (notice much sharper curvature
- near its end). In our example this is not such a bad thing, but it
- certainly ``not a nice thing'' that adding arrow tips to a curve
- changes the overall shape of the curves. This is especially
- bothersome if there are several similar curves that have different
- arrow heads. In this case, the similar curves now suddenly look
- different.
+ They main problem with the above picture is that the red line is no longer
+ equal to the original red line (notice much sharper curvature near its
+ end). In our example this is not such a bad thing, but it certainly ``not a
+ nice thing'' that adding arrow tips to a curve changes the overall shape of
+ the curves. This is especially bothersome if there are several similar
+ curves that have different arrow heads. In this case, the similar curves
+ now suddenly look different.
- Another big problem with the above approach is that it works only
- well if there is only a single arrow tip. When there are multiple
- ones, simply shifting them along the tangent as the |quick| option
- does produces less-than-satisfactory results:
+ Another big problem with the above approach is that it works only well if
+ there is only a single arrow tip. When there are multiple ones, simply
+ shifting them along the tangent as the |quick| option does produces
+ less-than-satisfactory results:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1114,42 +1116,43 @@ politely just called ``|quick|'' \dots):
(-1,-.5) .. controls (0,-.5) and (0,0) .. (1,0);
\end{tikzpicture}
\end{codeexample}
- Note that the third arrow tip does not really lie on the curve any
- more.
+ %
+ Note that the third arrow tip does not really lie on the curve any more.
\end{key}
-Because of the shortcomings of the |quick| key, more powerful
-mechanisms for shortening lines and rotating arrows tips have been
-implemented. To use them, you need to load the following library:
+Because of the shortcomings of the |quick| key, more powerful mechanisms for
+shortening lines and rotating arrows tips have been implemented. To use them,
+you need to load the following library:
\begin{tikzlibrary}{bending}
- Load this library to use the |flex|, |flex'|, or |bending| arrow
- keys. When this library is loaded, |flex| becomes the default mode
- that is used with all paths, unless |quick| is explicitly selected
- for the arrow tip.
+ Load this library to use the |flex|, |flex'|, or |bending| arrow keys. When
+ this library is loaded, |flex| becomes the default mode that is used with
+ all paths, unless |quick| is explicitly selected for the arrow tip.
\end{tikzlibrary}
\begin{key}{/pgf/arrow keys/flex=\opt{\meta{factor}} (default 1)}
- When the |bending| library is loaded, this key is applied
- to all arrow tips by default. It has the following effect:
- \begin{enumerate}
- \item Instead of simply shifting the visual end of the arrow along
- the tangent of the curve's end, we really move it along the curve
- by the necessary distance. This operation is more expensive than
- the |quick| operation -- but not \emph{that} expensive, only
- expensive enough so that it is not selected by default for all
- arrow tips. Indeed, some compromises are made in the
- implementation where accuracy was traded for speed, so the
- distance by which the line end is shifted is not necessarily
- \emph{exactly} 6.25mm; only something reasonably close.
- \item The supports of the line are updated accordingly so that the
- shortened line will still follow \emph{exactly} the original
- line. This means that the curve deformation effect caused by the
- |quick| command does not happen here.
- \item Next, the arrow tip is rotated and shifted as follows: First,
- we shift it so that its tip is exactly at the tip end, where the
- original line ended. Then, the arrow is rotated so the \emph{the
- visual end lies on the line}:
+ When the |bending| library is loaded, this key is applied to all arrow tips
+ by default. It has the following effect:
+ %
+ \begin{enumerate}
+ \item Instead of simply shifting the visual end of the arrow along
+ the tangent of the curve's end, we really move it along the curve
+ by the necessary distance. This operation is more expensive than
+ the |quick| operation -- but not \emph{that} expensive, only
+ expensive enough so that it is not selected by default for all
+ arrow tips. Indeed, some compromises are made in the
+ implementation where accuracy was traded for speed, so the
+ distance by which the line end is shifted is not necessarily
+ \emph{exactly} 6.25mm; only something reasonably close.
+ \item The supports of the line are updated accordingly so that the
+ shortened line will still follow \emph{exactly} the original
+ line. This means that the curve deformation effect caused by the
+ |quick| command does not happen here.
+ \item Next, the arrow tip is rotated and shifted as follows: First,
+ we shift it so that its tip is exactly at the tip end, where the
+ original line ended. Then, the arrow is rotated so the \emph{the
+ visual end lies on the line}:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1158,29 +1161,28 @@ implemented. To use them, you need to load the following library:
(-1,-.5) .. controls (0,-.5) and (0,0) .. (1,0);
\end{tikzpicture}
\end{codeexample}
- \end{enumerate}
-
- As can be seen in the example, the |flex| option gives a result that
- is visually pleasing and does not deform the path.
-
- There is, however, one possible problem with the |flex| option: The
- arrow tip no longer points along the tangent of the end of the
- path. This may or may not be a problem, put especially for larger
- arrow tips readers will use the orientation of the arrow head to
- gauge the direction of the tangent of the line. If this tangent is
- important (for example, if it should be horizontal), then it may be
- necessary to enforce that the arrow tip ``really points in the
- direction of the tangent.
-
- To achieve this, the |flex| option takes an optional \meta{factor}
- parameter, which defaults to |1|. This factor specifies how much the
- arrow tip should be rotated: If set to |0|, the arrow points exactly
- along a tangent to curve at its tip. If set to |1|, the arrow point
- exactly along a line from the visual end point on the curve to the
- tip. For values in the middle, we interpolate the rotation between
- these two extremes; so |flex=.5| will rotate the arrow's visual end
- ``halfway away from the tangent towards the actual position on the
- line.''
+ \end{enumerate}
+
+ As can be seen in the example, the |flex| option gives a result that is
+ visually pleasing and does not deform the path.
+
+ There is, however, one possible problem with the |flex| option: The arrow
+ tip no longer points along the tangent of the end of the path. This may or
+ may not be a problem, put especially for larger arrow tips readers will use
+ the orientation of the arrow head to gauge the direction of the tangent of
+ the line. If this tangent is important (for example, if it should be
+ horizontal), then it may be necessary to enforce that the arrow tip
+ ``really points in the direction of the tangent''.
+
+ To achieve this, the |flex| option takes an optional \meta{factor}
+ parameter, which defaults to |1|. This factor specifies how much the arrow
+ tip should be rotated: If set to |0|, the arrow points exactly along a
+ tangent to curve at its tip. If set to |1|, the arrow point exactly along a
+ line from the visual end point on the curve to the tip. For values in the
+ middle, we interpolate the rotation between these two extremes; so
+ |flex=.5| will rotate the arrow's visual end ``halfway away from the
+ tangent towards the actual position on the line''.
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1197,9 +1199,11 @@ implemented. To use them, you need to load the following library:
(-1,-.5) .. controls (0,-.5) and (0,0) .. (1,0);
\end{tikzpicture}
\end{codeexample}
- Note how in the above examples the red line is visible inside the
- open arrow tip. Open arrow tips do not go well with a flex value
- other than~|1|. Here is a more realistic use of the |flex=0| key:
+ %
+ Note how in the above examples the red line is visible inside the open
+ arrow tip. Open arrow tips do not go well with a flex value other than~|1|.
+ Here is a more realistic use of the |flex=0| key:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1208,9 +1212,10 @@ implemented. To use them, you need to load the following library:
(-1,-.5) .. controls (0,-.5) and (0,0) .. (1,0);
\end{tikzpicture}
\end{codeexample}
- If there are several arrow tips on a path, the |flex| option
- positions them independently, so that each of them lies optimally on
- the path:
+ %
+ If there are several arrow tips on a path, the |flex| option positions them
+ independently, so that each of them lies optimally on the path:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1219,17 +1224,17 @@ implemented. To use them, you need to load the following library:
(-1,-.5) .. controls (0,-.5) and (0,0) .. (1,0);
\end{tikzpicture}
\end{codeexample}
+ %
\end{key}
-
\begin{key}{/pgf/arrow keys/flex'=\opt{\meta{factor}} (default 1)}
- The |flex'| key is almost identical to the |flex| key. The only
- difference is that a factor of |1| corresponds to rotating the arrow
- tip so that the instead of the visual end, the ``ultimate back end''
- of the arrow tip lies on the red path. In the example instead of
- having the arrow tip at a distance of |6.25mm| from the tip lie on
- the path, we have the point at a distance of |1cm| from the tip lie
- on the path:
+ The |flex'| key is almost identical to the |flex| key. The only difference
+ is that a factor of |1| corresponds to rotating the arrow tip so that the
+ instead of the visual end, the ``ultimate back end'' of the arrow tip lies
+ on the red path. In the example instead of having the arrow tip at a
+ distance of |6.25mm| from the tip lie on the path, we have the point at a
+ distance of |1cm| from the tip lie on the path:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1238,12 +1243,14 @@ implemented. To use them, you need to load the following library:
(-1,-.5) .. controls (0,-.5) and (0,0) .. (1,0);
\end{tikzpicture}
\end{codeexample}
- Otherwise, the factor works as for |flex| and, indeed |flex=0| and
- |flex'=0| have the same effect.
+ %
+ Otherwise, the factor works as for |flex| and, indeed |flex=0| and
+ |flex'=0| have the same effect.
- The main use of this option is not so much with an arrow tip like
- |Stealth| but rather with tips like the standard |>| in the context
- of a strongly curved line:
+ The main use of this option is not so much with an arrow tip like |Stealth|
+ but rather with tips like the standard |>| in the context of a strongly
+ curved line:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1252,14 +1259,16 @@ implemented. To use them, you need to load the following library:
(0,-.5) .. controls (1,-.5) and (0.5,0) .. (1,0);
\end{tikzpicture}
\end{codeexample}
- In the example, the |flex| option does not really flex the arrow
- since for a tip like the Computer Modern arrow, the visual end is
- the same as the arrow tip -- after all, the red line does, indeed, end
- almost exactly where it used to end.
+ %
+ In the example, the |flex| option does not really flex the arrow since for
+ a tip like the Computer Modern arrow, the visual end is the same as the
+ arrow tip -- after all, the red line does, indeed, end almost exactly where
+ it used to end.
- Nevertheless, you may feel that the arrow tip looks ``wrong'' in the sense that it
- should be rotated. This is exactly what the |flex'| option does
- since it allows us to align the ``back end'' of the tip with the red line:
+ Nevertheless, you may feel that the arrow tip looks ``wrong'' in the sense
+ that it should be rotated. This is exactly what the |flex'| option does
+ since it allows us to align the ``back end'' of the tip with the red line:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1268,25 +1277,23 @@ implemented. To use them, you need to load the following library:
(0,-.5) .. controls (1,-.5) and (0.5,0) .. (1,0);
\end{tikzpicture}
\end{codeexample}
- In the example, I used |flex'=.75| so as not to overpronounce the
- effect. Usually, you will have to fiddle with it sometime to get the
- ``perfectly aligned arrow tip,'' but a value of |.75| is usually a
- good start.
+ %
+ In the example, I used |flex'=.75| so as not to overpronounce the effect.
+ Usually, you will have to fiddle with it sometime to get the ``perfectly
+ aligned arrow tip'', but a value of |.75| is usually a good start.
\end{key}
-
-
\begin{key}{/pgf/arrow keys/bend}
- \emph{Bending} an arrow tip is a radical solution to the problem of
- positioning arrow tips on a curved line: The arrow tip is no longer
- ``rigid'' but the drawing itself will now bend along the curve. This
- has the advantage that all the problems of flexing with wrong
- tangents and overflexing disappear. The downsides are longer
- computation times (bending an arrow is \emph{much} more expensive
- that flexing it, let alone than quick mode) and also the fact that
- excessive bending can lead to ugly arrow tips. On the other hand,
- for most arrow tips their bend version are visually quite pleasing
- and create a sophisticated look:
+ \emph{Bending} an arrow tip is a radical solution to the problem of
+ positioning arrow tips on a curved line: The arrow tip is no longer
+ ``rigid'' but the drawing itself will now bend along the curve. This has
+ the advantage that all the problems of flexing with wrong tangents and
+ overflexing disappear. The downsides are longer computation times (bending
+ an arrow is \emph{much} more expensive that flexing it, let alone than
+ quick mode) and also the fact that excessive bending can lead to ugly arrow
+ tips. On the other hand, for most arrow tips their bend version are
+ visually quite pleasing and create a sophisticated look:
+ %
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1294,7 +1301,7 @@ implemented. To use them, you need to load the following library:
\draw [red,line width=1mm,-{Stealth[length=20pt,bend]}]
(-1,-.5) .. controls (0,-.5) and (0,0) .. (1,0);
\end{tikzpicture}
-\end{codeexample}
+\end{codeexample}
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1302,7 +1309,7 @@ implemented. To use them, you need to load the following library:
\draw [red,line width=1mm,-{[bend,sep]>>>}]
(-1,-.5) .. controls (0,-.5) and (0,0) .. (1,0);
\end{tikzpicture}
-\end{codeexample}
+\end{codeexample}
\begin{codeexample}[]
\begin{tikzpicture}
\wall
@@ -1310,169 +1317,164 @@ implemented. To use them, you need to load the following library:
\draw [red,line width=1mm,-{Stealth[bend,round,length=20pt]}]
(0,-.5) .. controls (1,-.5) and (0.25,0) .. (1,0);
\end{tikzpicture}
-\end{codeexample}
+\end{codeexample}
+ %
\end{key}
-
-
-
-
\subsection{Arrow Tip Specifications}
\label{section-arrow-spec}
\subsubsection{Syntax}
-When you select the arrow tips for the start and the end of a path,
-you can specify a whole sequence of arrow tips, each having its own
-local options. At the beginning of this section, it was pointed out
-that the syntax for selecting the start and end arrow tips is the
-following:
-
+When you select the arrow tips for the start and the end of a path, you can
+specify a whole sequence of arrow tips, each having its own local options. At
+the beginning of this section, it was pointed out that the syntax for selecting
+the start and end arrow tips is the following:
+%
\begin{quote}
- \meta{start specification}|-|\meta{end specification}
+ \meta{start specification}|-|\meta{end specification}
\end{quote}
-We now have a closer look at what these specifications may look
-like. The general syntax of the \meta{start specification} is as
-follows:
+We now have a closer look at what these specifications may look like. The
+general syntax of the \meta{start specification} is as follows:
+%
\begin{quote}
- \opt{|[|\meta{options for all tips}|]|} \meta{first arrow tip spec}
- \meta{second arrow tip spec} \meta{third arrow tip spec} \dots
+ \opt{|[|\meta{options for all tips}|]|} \meta{first arrow tip spec}
+ \meta{second arrow tip spec} \meta{third arrow tip spec} \dots
\end{quote}
-As can be seen, an arrow tip specification may start with some options
-in brackets. If this is the case, the \meta{options for all tips}
-will, indeed, be applied to all arrow tips that follow. (We will see,
-in a moment, that there are even more places where options may be
-specified and a list of the ordering in which the options are applied
-will be given later.)
-
-The main part of a specification is taken up by a sequence of
-individual arrow tip specifications. Such a specification can be of
-three kinds:
-
+%
+As can be seen, an arrow tip specification may start with some options in
+brackets. If this is the case, the \meta{options for all tips} will, indeed, be
+applied to all arrow tips that follow. (We will see, in a moment, that there
+are even more places where options may be specified and a list of the ordering
+in which the options are applied will be given later.)
+
+The main part of a specification is taken up by a sequence of individual arrow
+tip specifications. Such a specification can be of three kinds:
+%
\begin{enumerate}
-\item It can be of the form \meta{arrow tip kind name}|[|\meta{options}|]|.
-\item It can be of the form \meta{shorthand}|[|\meta{options}|]|.
-\item It can be of the form \meta{single char shorthand}\opt{|[|\meta{options}|]|}. Note that only for this form the
- brackets are optional.
+ \item It can be of the form \meta{arrow tip kind
+ name}|[|\meta{options}|]|.
+ \item It can be of the form \meta{shorthand}|[|\meta{options}|]|.
+ \item It can be of the form \meta{single char
+ shorthand}\opt{|[|\meta{options}|]|}. Note that only for this form
+ the brackets are optional.
\end{enumerate}
The easiest kind is the first one: This adds an arrow tip of the kind
\meta{arrow tip kind name} to the sequence of arrow tips with the
-\meta{options} applied to it at the start (for the \meta{start
- specification}) or at the end (for the \meta{end
- specification}). Note that for the \meta{start specification} the
-first arrow tip specified in this way will be at the very start of the
-curve, while for the \meta{end specification} the ordering is
-reversed: The last arrow tip specified will be at the very end of the
-curve. This implies that a specification like
+\meta{options} applied to it at the start (for the \meta{start specification})
+or at the end (for the \meta{end specification}). Note that for the \meta{start
+specification} the first arrow tip specified in this way will be at the very
+start of the curve, while for the \meta{end specification} the ordering is
+reversed: The last arrow tip specified will be at the very end of the curve.
+This implies that a specification like
+%
\begin{quote}
-|Stealth[] Latex[] - Latex[] Stealth[]|
+ |Stealth[] Latex[] - Latex[] Stealth[]|
\end{quote}
-will give perfectly symmetric arrow tips on a line (as one would
-expect).
-
-It is important that even if there are no \meta{options} for an arrow
-tip, the square brackets still need to be written to indicate the end
-of the arrow tip's name. Indeed, the opening brackets are used to
-divide the arrow tip specification into names.
-
-Instead of a \meta{arrow tip kind name}, you may also provide the name
-of a so-called \emph{shorthand}. Shorthands look like normal arrow tip
-kind names and, indeed, you will often be using shorthands without
-noticing that you do. The idea is that instead of, say,
-|Computer Modern Rightarrow| you might wish to just write |Rightarrow|
-or perhaps just |To| or even just |>|. For this, you can create a
-shorthand that tells \tikzname\ that whenever this shorthand is used,
-another arrow tip kind is meant. (Actually, shorthands are somewhat
-more powerful, we have a detailed look at them in
-Section~\ref{section-arrow-tip-macro}.) For shorthands, the same rules
-apply as for normal arrow tip kinds: You \emph{need} to provide
-brackets so that \tikzname\ can find the end of the name inside a
-longer specification.
-
-The third kind of arrow tip specifications consist of just a single
-letter like |>| or |)| or |*| or even |o| or |x| (but you may not use
-|[|, |]|, or |-| since they will confuse the parser). These single
-letter arrow specifications will invariably be shorthands that select
-some ``real'' arrow tip instead. An important feature of single letter
-arrow tips is that they do \emph{not} need to be followed by options
-(but they may).
+%
+will give perfectly symmetric arrow tips on a line (as one would expect).
+
+It is important that even if there are no \meta{options} for an arrow tip, the
+square brackets still need to be written to indicate the end of the arrow tip's
+name. Indeed, the opening brackets are used to divide the arrow tip
+specification into names.
+
+Instead of a \meta{arrow tip kind name}, you may also provide the name of a
+so-called \emph{shorthand}. Shorthands look like normal arrow tip kind names
+and, indeed, you will often be using shorthands without noticing that you do.
+The idea is that instead of, say, |Computer Modern Rightarrow| you might wish
+to just write |Rightarrow| or perhaps just |To| or even just |>|. For this, you
+can create a shorthand that tells \tikzname\ that whenever this shorthand is
+used, another arrow tip kind is meant. (Actually, shorthands are somewhat more
+powerful, we have a detailed look at them in
+Section~\ref{section-arrow-tip-macro}.) For shorthands, the same rules apply as
+for normal arrow tip kinds: You \emph{need} to provide brackets so that
+\tikzname\ can find the end of the name inside a longer specification.
+
+The third kind of arrow tip specifications consist of just a single letter like
+|>| or |)| or |*| or even |o| or |x| (but you may not use |[|, |]|, or |-|
+since they will confuse the parser). These single letter arrow specifications
+will invariably be shorthands that select some ``real'' arrow tip instead. An
+important feature of single letter arrow tips is that they do \emph{not} need
+to be followed by options (but they may).
Now, since we can use any letter for single letter shorthands, how can
-\tikzname\ tell whether by |foo[]| we mean an arrow tip kind |foo|
-without any options or whether we mean an arrow tip called |f|,
-followed by two arrow tips called |o|? Or perhaps an arrow tip called
-|f| followed by an arrow tip called |oo|? To solve this problem, the
-following rule is used to determine which of the three possible
-specifications listed above applies: First, we check whether
-everything from the current position up to the next opening bracket
-(or up to the end) is the name of an arrow tip or of a shorthand. In
-our case, |foo| would first be tested under this rule. Only if |foo|
-is neither the name of an arrow tip kind nor of a shorthand does
-\tikzname\ consider the first letter of the specification, |f| in our
-case. If this is not the name of a shorthand, an error is
-raised. Otherwise the arrow tip corresponding to |f| is added to the
-list of arrow tips and the process restarts with the rest. Thus, we
-would next text whether |oo| is the name of an arrow tip or shorthand
-and, if not, whether |o| is such a name.
-
-All of the above rules mean that you can rather easily specify arrow
-tip sequences if they either mostly consist of single letter names or
-of longer names. Here are some examples:
-
+\tikzname\ tell whether by |foo[]| we mean an arrow tip kind |foo| without any
+options or whether we mean an arrow tip called |f|, followed by two arrow tips
+called |o|? Or perhaps an arrow tip called |f| followed by an arrow tip called
+|oo|? To solve this problem, the following rule is used to determine which of
+the three possible specifications listed above applies: First, we check whether
+everything from the current position up to the next opening bracket (or up to
+the end) is the name of an arrow tip or of a shorthand. In our case, |foo|
+would first be tested under this rule. Only if |foo| is neither the name of an
+arrow tip kind nor of a shorthand does \tikzname\ consider the first letter of
+the specification, |f| in our case. If this is not the name of a shorthand, an
+error is raised. Otherwise the arrow tip corresponding to |f| is added to the
+list of arrow tips and the process restarts with the rest. Thus, we would next
+text whether |oo| is the name of an arrow tip or shorthand and, if not, whether
+|o| is such a name.
+
+All of the above rules mean that you can rather easily specify arrow tip
+sequences if they either mostly consist of single letter names or of longer
+names. Here are some examples:
+%
\begin{itemize}
-\item |->>>| is interpreted as three times the |>| shorthand since
- |>>>| is not the name of any arrow tip kind (and neither is |>>|).
-\item |->[]>>| has the same effect as the above.
-\item |-[]>>>| also has the same effect.%>>
-\item |->[]>[]>[]| so does this.
-\item |->Stealth| yields an arrow tip |>| followed by a |Stealth|
- arrow at the end.
-\item |-Stealth>| is illegal since there is no arrow tip |Stealth>|
- and since |S| is also not the name of any arrow tip.
-\item |-Stealth[] >| is legal and does what was presumably meant in the previous item.
-\item |< Stealth-| is legal and is the counterpart to |-Stealth[] >|.
-\item |-Stealth[length=5pt] Stealth[length=6pt]| selects two stealth
- arrow tips, but at slightly different sizes for the end of lines.
+ \item |->>>| is interpreted as three times the |>| shorthand since |>>>| is
+ not the name of any arrow tip kind (and neither is |>>|).
+ \item |->[]>>| has the same effect as the above.
+ \item |-[]>>>| also has the same effect.
+ \item |->[]>[]>[]| so does this.
+ \item |->Stealth| yields an arrow tip |>| followed by a |Stealth| arrow
+ at the end.
+ \item |-Stealth>| is illegal since there is no arrow tip |Stealth>| and
+ since |S| is also not the name of any arrow tip.
+ \item |-Stealth[] >| is legal and does what was presumably meant in the
+ previous item.
+ \item |< Stealth-| is legal and is the counterpart to |-Stealth[] >|.
+ \item |-Stealth[length=5pt] Stealth[length=6pt]| selects two stealth
+ arrow tips, but at slightly different sizes for the end of lines.
\end{itemize}
-
-An interesting question concerns how flexing and bending interact with
-multiple arrow tips: After all, flexing and quick mode use different
-ways of shortening the path so we cannot really mix them. The
-following rule is used: We check, independently for the start and the
-end specifications, whether at least one arrow tip in them uses one of
-the options |flex|, |flex'|, or |bend|. If so, all |quick| settings in
-the other arrow tips are ignored and treated as if |flex| had been
-selected for them, too.
+An interesting question concerns how flexing and bending interact with multiple
+arrow tips: After all, flexing and quick mode use different ways of shortening
+the path so we cannot really mix them. The following rule is used: We check,
+independently for the start and the end specifications, whether at least one
+arrow tip in them uses one of the options |flex|, |flex'|, or |bend|. If so,
+all |quick| settings in the other arrow tips are ignored and treated as if
+|flex| had been selected for them, too.
\subsubsection{Specifying Paddings}
-When you provide several arrow tips in a row, all of them are added to
-the start or end of the line:
+When you provide several arrow tips in a row, all of them are added to the
+start or end of the line:
+%
\begin{codeexample}[]
\tikz \draw [<<<->>>>] (0,0) -- (2,0);
\end{codeexample}
-The question is now what will be distance between them? For this, the
+%
+The question now is what will be the distance between them? For this, the
following arrow key is important:
+
\begin{key}{/pgf/arrow keys/sep=\meta{dimension}| |\opt{\meta{line
- width factor}}| |\opt{\meta{outer factor}} (default 0.88pt .3 1)}
- When a sequence of arrow tips is specified in an arrow tip
- specification for the end of the line, the arrow tips are normally
- arranged in such a way that the tip of each arrow ends exactly at
- the ``back end'' of the next arrow tip (for start specifications,
- the ordering is inverted, of course). Now, when the |sep| option is
- set, instead of exactly touching the back end of the next arrow, the
- specified \meta{dimension} is added as additional space (the
- distance may also be negative, resulting in an overlap of the arrow
- tips). The optional factors have the same meaning as for the
- |length| key, see that key for details.
-
- Let us now have a look at some examples. First, we use two arrow
- tips with different separations between them:
+ width factor}}| |\opt{\meta{outer factor}} (default 0.88pt .3 1)%
+}
+ When a sequence of arrow tips is specified in an arrow tip specification
+ for the end of the line, the arrow tips are normally arranged in such a way
+ that the tip of each arrow ends exactly at the ``back end'' of the next
+ arrow tip (for start specifications, the ordering is inverted, of course).
+ Now, when the |sep| option is set, instead of exactly touching the back end
+ of the next arrow, the specified \meta{dimension} is added as additional
+ space (the distance may also be negative, resulting in an overlap of the
+ arrow tips). The optional factors have the same meaning as for the |length|
+ key, see that key for details.
+
+ Let us now have a look at some examples. First, we use two arrow tips with
+ different separations between them:
+ %
\begin{codeexample}[]
\tikz {
\draw [-{>[sep=1pt]>[sep= 2pt]>}] (0,1.0) -- (1,1.0);
@@ -1481,54 +1483,54 @@ following arrow key is important:
}
\end{codeexample}
- You can also specify a |sep| for the last arrow tip in the sequence
- (for end specifications, otherwise for the first arrow tip). In this
- case, this first arrow tip will not exactly ``touch'' the point
- where the path ends, but will rather leave the specified amount of
- space. This is usually quite desirable.
+ You can also specify a |sep| for the last arrow tip in the sequence (for
+ end specifications, otherwise for the first arrow tip). In this case, this
+ first arrow tip will not exactly ``touch'' the point where the path ends,
+ but will rather leave the specified amount of space. This is usually quite
+ desirable.
+ %
\begin{codeexample}[]
\tikz {
\node [draw] (A) {A};
\node [draw] (B) [right=of A] {B};
-
+
\draw [-{>>[sep=2pt]}] (A) to [bend left=45] (B);
\draw [- >> ] (A) to [bend right=45] (B);
}
\end{codeexample}
- Indeed, adding a |sep| to an arrow tip is \emph{very} desirable, so
- you will usually write something like |>={To[sep]}| somewhere near
- the start of your files.
+ %
+ Indeed, adding a |sep| to an arrow tip is \emph{very} desirable, so you
+ will usually write something like |>={To[sep]}| somewhere near the start of
+ your files.
- One arrow tip kind can be quite useful in this context: The arrow
- tip kind |_|. It draws nothing and has zero length, \emph{but}
- it has |sep| set as a default option. Since it is a single letter
- shorthand, you can write short and clean ``code'' in this way:
-\begin{codeexample}[]
+ One arrow tip kind can be quite useful in this context: The arrow tip kind
+ |_|. It draws nothing and has zero length, \emph{but} it has |sep| set as a
+ default option. Since it is a single letter shorthand, you can write short
+ and clean ``code'' in this way:
+ %
+\begin{codeexample}[]
\tikz \draw [->_>] (0,0) -- (1,0);
\end{codeexample}
-\begin{codeexample}[]
+\begin{codeexample}[]
\tikz \draw [->__>] (0,0) -- (1,0);
\end{codeexample}
- However, using the |sep| option will be faster than using the |_|
- arrow tip and it also allows you to specify the desired length
- directly.
+ %
+ However, using the |sep| option will be faster than using the |_| arrow tip
+ and it also allows you to specify the desired length directly.
\end{key}
-
\subsubsection{Specifying the Line End}
-In the previous examples of sequences of arrow tips, the line of the
-path always ended at the last of the arrow tips (for end
-specifications) or at the first of the arrow tips (for start
-specifications). Often, this is what you may want, but not
-always. Fortunately, it is quite easy to specify the desired end of
-the line: The special single char shorthand |.| is reserved to
-indicate that last arrow that is still part of the line; in other
-words, the line will stop at the last arrow before |.| is encountered
-(for end specifications) are at the first arrow following |.| (for
-start specifications).
-%>>
+In the previous examples of sequences of arrow tips, the line of the path
+always ended at the last of the arrow tips (for end specifications) or at the
+first of the arrow tips (for start specifications). Often, this is what you may
+want, but not always. Fortunately, it is quite easy to specify the desired end
+of the line: The special single char shorthand |.| is reserved to indicate that
+last arrow that is still part of the line; in other words, the line will stop
+at the last arrow before |.| is encountered (for end specifications) are at the
+first arrow following |.| (for start specifications).
+%
\begin{codeexample}[]
\tikz [very thick] \draw [<<<->>>] (0,0) -- (2,0);
\end{codeexample}
@@ -1542,137 +1544,142 @@ start specifications).
\tikz [very thick] \draw [<<.<->.>>] (0,0) to [bend left] (2,0);
\end{codeexample}
-It is permissible that there are several dots in a specification, in
-this case the first one ``wins'' (for end specifications, otherwise
-the last one).
+It is permissible that there are several dots in a specification, in this case
+the first one ``wins'' (for end specifications, otherwise the last one).
-Note that |.| is parsed as any other shorthand. In particular, if you
-wish to add a dot after a normal arrow tip kind name, you need to add
-brackets:
+Note that |.| is parsed as any other shorthand. In particular, if you wish to
+add a dot after a normal arrow tip kind name, you need to add brackets:
+%
\begin{codeexample}[]
\tikz [very thick] \draw [-{Stealth[] . Stealth[] Stealth[]}] (0,0) -- (2,0);
\end{codeexample}
-Adding options to |.| is permissible, but they have no effect. In
-particular, |sep| has no effect since a dot is not an arrow.
-
-
+%
+Adding options to |.| is permissible, but they have no effect. In particular,
+|sep| has no effect since a dot is not an arrow.
\subsubsection{Defining Shorthands}
\label{section-arrow-tip-macro}
-It is often desirable to create ``shorthands'' for the names of arrow
-tips that you are going to use very often. Indeed, in most documents
-you will only need a single arrow tip kind and it would be useful that
-you could refer to it just as |>| in your arrow tip specifications. As
-another example, you might constantly wish to switch between a filled
-and a non-filled circle as arrow tips and would like to use |*| and
-|o| are shorthands for these case. Finally, you might just like to
-shorten a long name like |Computer Modern Rightarrow| down to just,
-say |To| or something similar.
+It is often desirable to create ``shorthands'' for the names of arrow tips that
+you are going to use very often. Indeed, in most documents you will only need a
+single arrow tip kind and it would be useful that you could refer to it just as
+|>| in your arrow tip specifications. As another example, you might constantly
+wish to switch between a filled and a non-filled circle as arrow tips and would
+like to use |*| and |o| are shorthands for these case. Finally, you might just
+like to shorten a long name like |Computer Modern Rightarrow| down to just, say
+|To| or something similar.
-All of these case can be addressed by defining appropriate
-shorthands. This is done using the following handler:
+All of these case can be addressed by defining appropriate shorthands. This is
+done using the following handler:
\begin{handler}{{.tip}{=\meta{end specification}}}
- Defined the \meta{key} as a name that can be used inside arrow tip
- specifications. If the \meta{key} has a path before it, this path is
- ignored (so there is only one ``namespace'' for arrow
- tips). Whenever it is used, it will be replaced by the \meta{end
- specification}. Note that you must \emph{always} provide
- (only) an end specification; when the \meta{key} is used inside a
- start specification, the ordering and the meaning of the keys inside
- the \meta{end specification} are translated automatically.
-
+ Defined the \meta{key} as a name that can be used inside arrow tip
+ specifications. If the \meta{key} has a path before it, this path is
+ ignored (so there is only one ``namespace'' for arrow tips). Whenever it is
+ used, it will be replaced by the \meta{end specification}. Note that you
+ must \emph{always} provide (only) an end specification; when the \meta{key}
+ is used inside a start specification, the ordering and the meaning of the
+ keys inside the \meta{end specification} are translated automatically.
+ \todosp{remaining instance of bug \#473}
+ %
\begin{codeexample}[]
\tikz [foo /.tip = {Stealth[sep]. >>}]
- \draw [-foo] (0,0) -- (2,0);
+ \draw [-foo] (0,0) -- (2,0);
\end{codeexample}
\begin{codeexample}[]
\tikz [foo /.tip = {Stealth[sep] Latex[sep]},
bar /.tip = {Stealth[length=10pt,open]}]
- \draw [-{foo[red] . bar}] (0,0) -- (2,0);
-\end{codeexample}
-
- In the last of the examples, we used |foo[red]| to make the arrows
- red. Any options given to a shorthand upon use will be passed on to
- the actual arrows tip for which the shorthand stands. Thus, we could
- also have written |Stealth[sep,red]| |Latex[sep,red]| instead of
- |foo[red]|. In other words, the ``replacement'' of a shorthand by
- its ``meaning'' is a semantic replacement rather than a syntactic
- replacement. In particular, the \meta{end specification} will be
- parsed immediately when the shorthand is being defined. However,
- this applies only to the options inside the specification, whose
- values are evaluated immediately. In contrast, which actual arrow
- tip kind is meant by a given shorthand used inside the \meta{end
- specification} is resolved only up each use of the shorthand. This
- means that when you write
- \begin{quote}
- |dup /.tip = >>|
- \end{quote}
- and then later write
- \begin{quote}
- |> /.tip = whatever|
- \end{quote}
- then |dup| will have the effect as if you had written
- |whatever[]whatever[]|. You will find that this behaviour is
- what one would expect.
-
- There is one problem we have not yet addressed: The asymmetry of
- single letter arrow tips like |>| or |)|. When someone writes
-\begin{codeexample}[]
-\tikz \draw [<->] (0,0) -- (1,0);
-\end{codeexample}
- we rightfully expect one arrow tip pointing left at the left end and
- an arrow tip pointing right at the right end. However, compare
-\begin{codeexample}[]
-\tikz \draw [>->] (0,0) -- (1,0);
-\end{codeexample}
-\begin{codeexample}[]
-\tikz \draw [Stealth-Stealth] (0,0) -- (1,0);
-\end{codeexample}
- In both cases, we have \emph{identical} text in the start and end
- specifications, but in the first case we rightfully expect the left
- arrow to be flipped.
-
- The solution to this problem is that it is possible to define
- two names for the same arrow tip, namely one that is used inside
- start specifications and one for end specifications. Now, we can
- decree that the ``name of |>|'' inside start specifications is
- simply |<| and the above problems disappear.
-
- To specify different names for a shorthand in start and end
- specifications, use the following syntax: Instead of \meta{key}, you
- use \meta{name in start specifications}|-|\meta{name in end
- specifications}. Thus, to set the |>| key correctly, you actually
- need to write
-\begin{codeexample}[]
-\tikz [<-> /.tip = Stealth] \draw [<->>] (0,0) -- (1,0);
-\end{codeexample}
-\begin{codeexample}[]
-\tikz [<-> /.tip = Latex] \draw [>-<] (0,0) -- (1,0);
-\end{codeexample}
-
- Note that the above also works even though we have not set |<| as an
- arrow tip name for end specifications! The reason this works is that
- the \tikzname\ (more precisely, \pgfname) actually uses the
- following definition internally:
- \begin{quote}
- |>-< /.tip = >[reversed]|
- \end{quote}
- Translation: ``When |<| is used in an end specification, please
- replace it by |>|, but reversed. Also, when |>| is used in a start
- specification, we also mean this inverted |>|.''
-
- By default, |>| is a shorthand for |To| and |To| is a shorthand for
- |to| (an arrow from the old libraries) when |arrows.meta| is not
- loaded library. When |arrow.meta| is loaded, |To| is redefined to
- mean the same as
- |Computer Modern Rightarrow|.
+ \draw [-{foo[red] . bar}] (0,0) -- (2,0);
+\end{codeexample}
+
+ In the last of the examples, we used |foo[red]| to make the arrows red. Any
+ options given to a shorthand upon use will be passed on to the actual
+ arrows tip for which the shorthand stands. Thus, we could also have written
+ |Stealth[sep,red]| |Latex[sep,red]| instead of |foo[red]|. In other words,
+ the ``replacement'' of a shorthand by its ``meaning'' is a semantic
+ replacement rather than a syntactic replacement. In particular, the
+ \meta{end specification} will be parsed immediately when the shorthand is
+ being defined. However, this applies only to the options inside the
+ specification, whose values are evaluated immediately. In contrast, which
+ actual arrow tip kind is meant by a given shorthand used inside the
+ \meta{end specification} is resolved only up each use of the shorthand.
+ This means that when you write
+ %
+ \begin{quote}
+ |dup /.tip = >>|
+ \end{quote}
+ %
+ and then later write
+ %
+ \begin{quote}
+ |> /.tip = whatever|
+ \end{quote}
+ %
+ then |dup| will have the effect as if you had written
+ |whatever[]whatever[]|. You will find that this behaviour is what one would
+ expect.
+
+ There is one problem we have not yet addressed: The asymmetry of single
+ letter arrow tips like |>| or |)|. When someone writes
+ %
+\begin{codeexample}[]
+\tikz \draw [<->] (0,0) -- (1,0);
+\end{codeexample}
+ %
+ we rightfully expect one arrow tip pointing left at the left end and an
+ arrow tip pointing right at the right end. However, compare
+ %
+\begin{codeexample}[]
+\tikz \draw [>->] (0,0) -- (1,0);
+\end{codeexample}
+\begin{codeexample}[]
+\tikz \draw [Stealth-Stealth] (0,0) -- (1,0);
+\end{codeexample}
+ %
+ In both cases, we have \emph{identical} text in the start and end
+ specifications, but in the first case we rightfully expect the left arrow
+ to be flipped.
+
+ The solution to this problem is that it is possible to define two names for
+ the same arrow tip, namely one that is used inside start specifications and
+ one for end specifications. Now, we can decree that the ``name of |>|''
+ inside start specifications is simply |<| and the above problems disappear.
+
+ To specify different names for a shorthand in start and end specifications,
+ use the following syntax: Instead of \meta{key}, you use \meta{name in
+ start specifications}|-|\meta{name in end specifications}. Thus, to set the
+ |>| key correctly, you actually need to write
+ %
+\begin{codeexample}[]
+\tikz [<-> /.tip = Stealth] \draw [<->>] (0,0) -- (1,0);
+\end{codeexample}
+\begin{codeexample}[]
+\tikz [<-> /.tip = Latex] \draw [>-<] (0,0) -- (1,0);
+\end{codeexample}
+
+ Note that the above also works even though we have not set |<| as an arrow
+ tip name for end specifications! The reason this works is that the
+ \tikzname\ (more precisely, \pgfname) actually uses the following
+ definition internally:
+ %
+ \begin{quote}
+ |>-< /.tip = >[reversed]|
+ \end{quote}
+ %
+ Translation: ``When |<| is used in an end specification, please replace it
+ by |>|, but reversed. Also, when |>| is used in a start specification, we
+ also mean this inverted |>|.''
+
+ By default, |>| is a shorthand for |To| and |To| is a shorthand for |to|
+ (an arrow from the old libraries) when |arrows.meta| is not loaded library.
+ When |arrow.meta| is loaded, |To| is redefined to mean the same as
+ |Computer Modern Rightarrow|.
\end{handler}
\begin{key}{/tikz/>=\meta{end arrow specification}}
- This is a short way of saying |<->/.tip=|\meta{end arrow specification}.
+ This is a short way of saying |<->/.tip=|\meta{end arrow specification}.
+ %
\begin{codeexample}[]
\begin{tikzpicture}[scale=2,ultra thick]
\begin{scope}[>=Latex]
@@ -1685,150 +1692,149 @@ shorthands. This is done using the following handler:
\end{scope}
\end{tikzpicture}
\end{codeexample}
-
+ %
\end{key}
-
\subsubsection{Scoping of Arrow Keys}
\label{section-arrow-scopes}
-There are numerous places where you can specify keys for an arrow
-tip. There is, however, one final place that we have not yet
-mentioned:
+There are numerous places where you can specify keys for an arrow tip. There
+is, however, one final place that we have not yet mentioned:
\begin{key}{/tikz/arrows=|[|\meta{arrow keys}|]|}
- The |arrows| key, which is normally used to set the arrow tips for
- the current scope, can also be used to set some arrow keys for the
- current scope. When the argument to |arrows| starts with an opening
- bracket and only otherwise contains one further closing bracket at
- the very end, this semantic of the |arrow| key is assumed.
-
- The \meta{arrow keys} will be set for the rest of current
- scope. This is useful for generally setting some design parameters
- or for generally switching on, say, bending as in:
+ The |arrows| key, which is normally used to set the arrow tips for the
+ current scope, can also be used to set some arrow keys for the current
+ scope. When the argument to |arrows| starts with an opening bracket and
+ only otherwise contains one further closing bracket at the very end, this
+ semantic of the |arrow| key is assumed.
+
+ The \meta{arrow keys} will be set for the rest of current scope. This is
+ useful for generally setting some design parameters or for generally
+ switching on, say, bending as in:
+ %
\begin{codeexample}[code only]
-\tikz [arrows={[bend]}] ... % Bend all arrows
+\tikz [arrows={[bend]}] ... % Bend all arrows
\end{codeexample}
+ %
\end{key}
-We can now summarize which arrow keys are applied in what order when
-an arrow tip is used:
+We can now summarize which arrow keys are applied in what order when an arrow
+tip is used:
+%
\begin{enumerate}
-\item First, the so-called \emph{defaults} are applied, which are
- values for the different parameters of a key. They are fixed in the
- definition of the key and cannot be changed. Since they are executed
- first, they are only the ultimate fallback.
-\item The \meta{keys} from the use of |arrows=[|\meta{keys}|]| in all
- enclosing scopes.
-\item Recursively, the \meta{keys} provided with the arrow
- tip inside shorthands.
-\item The keys provided at the beginning of an arrow tip specification
- in brackets.
-\item The keys provided directly next to the arrow tip inside the
- specification.
+ \item First, the so-called \emph{defaults} are applied, which are values
+ for the different parameters of a key. They are fixed in the
+ definition of the key and cannot be changed. Since they are executed
+ first, they are only the ultimate fallback.
+ \item The \meta{keys} from the use of |arrows=[|\meta{keys}|]| in all
+ enclosing scopes.
+ \item Recursively, the \meta{keys} provided with the arrow tip inside
+ shorthands.
+ \item The keys provided at the beginning of an arrow tip specification in
+ brackets.
+ \item The keys provided directly next to the arrow tip inside the
+ specification.
\end{enumerate}
-
-
\subsection{Reference: Arrow Tips}
\label{section-arrows-meta}
\begin{pgflibrary}{arrows.meta}
- This library defines a large number of standard ``meta'' arrow
- tips. ``Meta'' means that you can configure these arrow tips in many
- different ways like changing their size or their line caps and joins
- and many other details.
-
- The only reason this library is not loaded by default is for
- compatibility with older versions of \tikzname. You can, however,
- safely load and use this library alongside the older libraries
- |arrows| and |arrows.spaced|.
+ This library defines a large number of standard ``meta'' arrow tips.
+ ``Meta'' means that you can configure these arrow tips in many different
+ ways like changing their size or their line caps and joins and many other
+ details.
+
+ The only reason this library is not loaded by default is for compatibility
+ with older versions of \tikzname. You can, however, safely load and use
+ this library alongside the older libraries |arrows| and |arrows.spaced|.
\end{pgflibrary}
-
-The different arrow tip kinds defined in the |arrows.meta| library can
-be classified in different groups:
+The different arrow tip kinds defined in the |arrows.meta| library can be
+classified in different groups:
+%
\begin{itemize}
-\item \emph{Barbed} arrow tips consist mainly of lines that ``point
- backward'' from the tip of the arrow and which are not filled. For
- them, filling has no effect. A typical example is \tikz [baseline]
- \draw (0,.5ex) -- (1.5em,.5ex) [-Straight Barb];. Here is the list
- of defined arrow tips:
-
- \begin{arrowexamples}
- \arrowexample Arc Barb[]
- \arrowexample Bar[]
- \arrowexample Bracket[]
- \arrowexample Hooks[]
- \arrowexample Parenthesis[]
- \arrowexample Straight Barb[]
- \arrowexample Tee Barb[]
- \end{arrowexamples}
-
- All of these arrow tips can be configured and resized in many
- different ways as described in the following. Above, they are shown at
- their ``natural'' sizes, which are chosen in such a way that for a
- line width of 0.4pt their width matches the height
- of a letter ``x'' in Computer Modern at 11pt (with some
- ``overshooting'' to create visual consistency).
-\item \emph{Mathematical} arrow tips are actually a subclass of the
- barbed arrow tips, but we list them separately. They contain arrow
- tips that look exactly like the tips of arrows used in mathematical
- fonts such as the |\to|-symbol $\to$ from standard \TeX.
- \begin{arrowexamples}
- \arrowexample Classical TikZ Rightarrow[]
- \arrowexample Computer Modern Rightarrow[]
- \arrowexampledouble Implies[]
- \arrowexample To[]
- \end{arrowexamples}
- The |To| arrow tip is a shorthand for |Computer Modern Rightarrow|
- when |arrows.meta| is loaded.
-\item \emph{Geometric} arrow tips consist of a filled shape like a
- kite or a circle or a ``stealth-fighter-like'' shape. A typical
- example is \tikz [baseline] \draw (0,.5ex) -- (1.5em,.5ex)
- [-Stealth];. These arrow tips can also be used in an ``open''
- variant as in \tikz [baseline] \draw (0,.5ex) -- (1.5em,.5ex)
- [-{Stealth[open]}];.
-
- \begin{arrowexamples}
- \arrowexample Circle[]
- \arrowexample Diamond[]
- \arrowexample Ellipse[]
- \arrowexample Kite[]
- \arrowexample Latex[]
- \arrowexample Latex[round]
- \arrowexample Rectangle[]
- \arrowexample Square[]
- \arrowexample Stealth[]
- \arrowexample Stealth[round]
- \arrowexample Triangle[]
- \arrowexample Turned Square[]
- \end{arrowexamples}
-
- Here are the ``open'' variants:
-
- \begin{arrowexamples}
- \arrowexample Circle[open]
- \arrowexample Diamond[open]
- \arrowexample Ellipse[open]
- \arrowexample Kite[open]
- \arrowexample Latex[open]
- \arrowexample Latex[round,open]
- \arrowexample Rectangle[open]
- \arrowexample Square[open]
- \arrowexample Stealth[open]
- \arrowexample Stealth[round,open]
- \arrowexample Triangle[open]
- \arrowexample Turned Square[open]
- \end{arrowexamples}
-
- Note that ``open'' arrow tips are not the same as ``filled with
- white,'' which is also available (just say |fill=white|). The
- difference is that the background will ``shine through'' an open
- arrow, while a filled arrow always obscures the background:
-
+ \item \emph{Barbed} arrow tips consist mainly of lines that ``point
+ backward'' from the tip of the arrow and which are not filled. For
+ them, filling has no effect. A typical example is \tikz [baseline]
+ \draw (0,.5ex) -- (1.5em,.5ex) [-Straight Barb];. Here is the list of
+ defined arrow tips:
+ %
+ \begin{arrowexamples}
+ \arrowexample Arc Barb[]
+ \arrowexample Bar[]
+ \arrowexample Bracket[]
+ \arrowexample Hooks[]
+ \arrowexample Parenthesis[]
+ \arrowexample Straight Barb[]
+ \arrowexample Tee Barb[]
+ \end{arrowexamples}
+
+ All of these arrow tips can be configured and resized in many different
+ ways as described in the following. Above, they are shown at their
+ ``natural'' sizes, which are chosen in such a way that for a line width
+ of 0.4pt their width matches the height of a letter ``x'' in Computer
+ Modern at 11pt (with some ``overshooting'' to create visual
+ consistency).
+ \item \emph{Mathematical} arrow tips are actually a subclass of the
+ barbed arrow tips, but we list them separately. They contain arrow
+ tips that look exactly like the tips of arrows used in mathematical
+ fonts such as the |\to|-symbol $\to$ from standard \TeX.
+ %
+ \begin{arrowexamples}
+ \arrowexample Classical TikZ Rightarrow[]
+ \arrowexample Computer Modern Rightarrow[]
+ \arrowexampledouble Implies[]
+ \arrowexample To[]
+ \end{arrowexamples}
+ %
+ The |To| arrow tip is a shorthand for |Computer Modern Rightarrow| when
+ |arrows.meta| is loaded.
+ \item \emph{Geometric} arrow tips consist of a filled shape like a kite
+ or a circle or a ``stealth-fighter-like'' shape. A typical example is
+ \tikz [baseline] \draw (0,.5ex) -- (1.5em,.5ex) [-Stealth];. These
+ arrow tips can also be used in an ``open'' variant as in \tikz
+ [baseline] \draw (0,.5ex) -- (1.5em,.5ex) [-{Stealth[open]}];.
+ %
+ \begin{arrowexamples}
+ \arrowexample Circle[]
+ \arrowexample Diamond[]
+ \arrowexample Ellipse[]
+ \arrowexample Kite[]
+ \arrowexample Latex[]
+ \arrowexample Latex[round]
+ \arrowexample Rectangle[]
+ \arrowexample Square[]
+ \arrowexample Stealth[]
+ \arrowexample Stealth[round]
+ \arrowexample Triangle[]
+ \arrowexample Turned Square[]
+ \end{arrowexamples}
+
+ Here are the ``open'' variants:
+ %
+ \begin{arrowexamples}
+ \arrowexample Circle[open]
+ \arrowexample Diamond[open]
+ \arrowexample Ellipse[open]
+ \arrowexample Kite[open]
+ \arrowexample Latex[open]
+ \arrowexample Latex[round,open]
+ \arrowexample Rectangle[open]
+ \arrowexample Square[open]
+ \arrowexample Stealth[open]
+ \arrowexample Stealth[round,open]
+ \arrowexample Triangle[open]
+ \arrowexample Turned Square[open]
+ \end{arrowexamples}
+
+ Note that ``open'' arrow tips are not the same as ``filled with
+ white'', which is also available (just say |fill=white|). The
+ difference is that the background will ``shine through'' an open
+ arrow, while a filled arrow always obscures the background:
+ %
\begin{codeexample}[]
\tikz {
\shade [left color=white, right color=red!50] (0,0) rectangle (4,1);
@@ -1838,314 +1844,300 @@ be classified in different groups:
}
\end{codeexample}
-\item \emph{Cap} arrow tips are used to add a ``cap'' to the end of a
- line. The graphic languages underlying \tikzname\ (\textsc{pdf},
- \textsc{postscript} or \textsc{svg}) all support three basic types
- of line caps on a very low level: round, rectangular, and ``butt.''
- Using cap arrow tips, you can add new caps to lines and use
- different caps for the end and the start. An example is the line
- \tikz [baseline] \draw [line width=1ex, {Round
- Cap[reversed]}-{Triangle Cap[] . Fast Triangle[] Fast Triangle[]}]
- (0,0.5ex) -- (2em,0.5ex);.
- \begin{arrowcapexamples}
- \arrowcapexample Butt Cap[]
- \arrowcapexample Fast Round[]
- \arrowcapexample Fast Triangle[]
- \arrowcapexample Round Cap[]
- \arrowcapexample Triangle Cap[]
- \end{arrowcapexamples}
-\item \emph{Special} arrow tips are used for some specific purpose and
- do not fit into the above categories.
- \begin{arrowexamples}
- \arrowexample Rays[]
- \arrowexample Rays[n=8]
- \end{arrowexamples}
+ \item \emph{Cap} arrow tips are used to add a ``cap'' to the end of a
+ line. The graphic languages underlying \tikzname\ (\textsc{pdf},
+ \textsc{postscript} or \textsc{svg}) all support three basic types of
+ line caps on a very low level: round, rectangular, and ``butt''.
+ Using cap arrow tips, you can add new caps to lines and use different
+ caps for the end and the start. An example is the line \tikz
+ [baseline] \draw [line width=1ex, {Round Cap[reversed]}-{Triangle
+ Cap[] . Fast Triangle[] Fast Triangle[]}] (0,0.5ex) -- (2em,0.5ex);.
+ %
+ \begin{arrowcapexamples}
+ \arrowcapexample Butt Cap[]
+ \arrowcapexample Fast Round[]
+ \arrowcapexample Fast Triangle[]
+ \arrowcapexample Round Cap[]
+ \arrowcapexample Triangle Cap[]
+ \end{arrowcapexamples}
+ \item \emph{Special} arrow tips are used for some specific purpose and do
+ not fit into the above categories.
+ %
+ \begin{arrowexamples}
+ \arrowexample Rays[]
+ \arrowexample Rays[n=8]
+ \end{arrowexamples}
\end{itemize}
+
\subsubsection{Barbed Arrow Tips}
-\begin{arrowtip}{Arc Barb}
- {
- This arrow tip attaches an arc to the end of the line whose angle
- is given by the |arc| option. The
- |length| and |width| parameters refer to the size of the arrow tip
- for |arc| set to 180 degrees, which is why in the example for
- |arc=210| the actual length is larger than the specified
- |length|. The line width is taken into account
- for the computation of the length and width. Use the |round|
- option to add round caps to the end of the arcs.
- }
- {length=1.5cm,arc=210}
- {length=1.5cm,width=3cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[arc=120]
- \arrowexample[arc=270]
- \arrowexample[length=2pt]
- \arrowexample[length=2pt,width=5pt]
- \arrowexample[line width=2pt]
- \arrowexample[reversed]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[harpoon,reversed]
- \arrowexample[red]
- \end{arrowexamples}
- The following options have no effect: |open|, |fill|.
-
- On |double| lines, the arrow tip will not look correct.
+\begin{arrowtip}{Arc Barb}{
+ This arrow tip attaches an arc to the end of the line whose angle is given
+ by the |arc| option. The |length| and |width| parameters refer to the size
+ of the arrow tip for |arc| set to 180 degrees, which is why in the example
+ for |arc=210| the actual length is larger than the specified |length|. The
+ line width is taken into account for the computation of the length and
+ width. Use the |round| option to add round caps to the end of the arcs.
+}%
+{length=1.5cm,arc=210}%
+{length=1.5cm,width=3cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[arc=120]
+ \arrowexample[arc=270]
+ \arrowexample[length=2pt]
+ \arrowexample[length=2pt,width=5pt]
+ \arrowexample[line width=2pt]
+ \arrowexample[reversed]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[harpoon,reversed]
+ \arrowexample[red]
+ \end{arrowexamples}
+ %
+ The following options have no effect: |open|, |fill|.
+
+ On |double| lines, the arrow tip will not look correct.
\end{arrowtip}
-
\begin{arrowtipsimple}{Bar}
- A simple bar. This is a simple instance of |Tee Barb| for length zero.
+ A simple bar. This is a simple instance of |Tee Barb| for length zero.
\end{arrowtipsimple}
-\begin{arrowtip}{Bracket}
- {
- This is an instance of the |Tee Barb| arrow tip that results in
- something resembling a bracket. Just like the |Parenthesis| arrow
- tip, a |Bracket| is not modelled from a text square bracket, but
- rather its size has been chosen so that it fits with the other
- arrow tips.
- }
- {}
- {}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[reversed]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[harpoon,reversed]
- \arrowexample[red]
- \end{arrowexamples}
- The following options have no effect: |open|, |fill|.
-
- On |double| lines, the arrow tip will not look correct.
+\begin{arrowtip}{Bracket}{
+ This is an instance of the |Tee Barb| arrow tip that results in something
+ resembling a bracket. Just like the |Parenthesis| arrow tip, a |Bracket| is
+ not modelled from a text square bracket, but rather its size has been
+ chosen so that it fits with the other arrow tips.
+}%
+{}%
+{}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[reversed]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[harpoon,reversed]
+ \arrowexample[red]
+ \end{arrowexamples}
+ %
+ The following options have no effect: |open|, |fill|.
+
+ On |double| lines, the arrow tip will not look correct.
\end{arrowtip}
-\begin{arrowtip}{Hooks}
- {
- This arrow tip attaches two ``hooks'' to the end of the line. The
- |length| and |width| parameters refer to the size of the arrow tip
- if both arcs are 180 degrees; in the example the arc is 210
- degrees and, thus, the arrow is actually longer that the |length|
- dictates. The line width is taken into account for the computation
- of the length and width. The |arc| option is used to specify the
- angle of the arcs. Use the |round| option to add round caps to the
- end of the arcs.
- }
- {length=1cm,width=3.5cm,arc=210}
- {length=1cm,width=3.5cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[arc=120]
- \arrowexample[arc=270]
- \arrowexample[length=2pt]
- \arrowexample[length=2pt,width=5pt]
- \arrowexample[line width=2pt]
- \arrowexample[reversed]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[harpoon,reversed]
- \arrowexample[red]
- \end{arrowexamples}
- The following options have no effect: |open|, |fill|.
-
- On |double| lines, the arrow tip will not look correct.
+\begin{arrowtip}{Hooks}{
+ This arrow tip attaches two ``hooks'' to the end of the line. The |length|
+ and |width| parameters refer to the size of the arrow tip if both arcs are
+ 180 degrees; in the example the arc is 210 degrees and, thus, the arrow is
+ actually longer that the |length| dictates. The line width is taken into
+ account for the computation of the length and width. The |arc| option is
+ used to specify the angle of the arcs. Use the |round| option to add round
+ caps to the end of the arcs.
+}%
+{length=1cm,width=3.5cm,arc=210}%
+{length=1cm,width=3.5cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[arc=120]
+ \arrowexample[arc=270]
+ \arrowexample[length=2pt]
+ \arrowexample[length=2pt,width=5pt]
+ \arrowexample[line width=2pt]
+ \arrowexample[reversed]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[harpoon,reversed]
+ \arrowexample[red]
+ \end{arrowexamples}
+ %
+ The following options have no effect: |open|, |fill|.
+
+ On |double| lines, the arrow tip will not look correct.
\end{arrowtip}
-
-\begin{arrowtip}{Parenthesis}
- {
- This arrow tip is an instantiation of the |Arc Barb| so that it
- resembles a parenthesis. However, the idea is not to recreate a
- ``real'' parenthesis as it is used in text, but rather a ``bow''
- at a size that harmonizes with the other arrow tips at their
- default sizes.
- }
- {}
- {}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[reversed]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[harpoon,reversed]
- \arrowexample[red]
- \end{arrowexamples}
- The following options have no effect: |open|, |fill|.
-
- On |double| lines, the arrow tip will not look correct.
+\begin{arrowtip}{Parenthesis}{
+ This arrow tip is an instantiation of the |Arc Barb| so that it resembles a
+ parenthesis. However, the idea is not to recreate a ``real'' parenthesis as
+ it is used in text, but rather a ``bow'' at a size that harmonizes with the
+ other arrow tips at their default sizes.
+}%
+{}%
+{}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[reversed]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[harpoon,reversed]
+ \arrowexample[red]
+ \end{arrowexamples}
+ %
+ The following options have no effect: |open|, |fill|.
+
+ On |double| lines, the arrow tip will not look correct.
\end{arrowtip}
-\begin{arrowtip}{Straight Barb}
- {
- This is the ``archetypal'' arrow head, consisting of just two
- straight lines. The |length| and |width| parameters refer to the
- horizontal and vertical distances between the points on the path
- making up the arrow tip. As can be seen, the line width of the
- arrow tip's path is not taken into account.
- The |angle| option is particularly useful to set
- the opening angle at the tip of the arrow head. The |round| option
- gives a ``softer'' or ``rounder'' version of the arrow tip.
- }
- {length=2cm,width=3cm}
- {length=2cm/-4mm,width=3cm}
-
- \begin{arrowexamples}
- \arrowexample[]
-% \arrowexampledouble[]
- \arrowexampledup[]
- \arrowexampledupdot[]
- \arrowexample[length=5pt]
- \arrowexample[length=5pt,width=5pt]
- \arrowexample[line width=2pt]
- \arrowexample[reversed]
- \arrowexample[angle=60:2pt 3]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[harpoon,reversed]
- \arrowexample[red]
- \end{arrowexamples}
- The following options have no effect: |open|, |fill|.
-
- On |double| lines, the arrow tip will not look correct.
+\begin{arrowtip}{Straight Barb}{
+ This is the ``archetypal'' arrow head, consisting of just two straight
+ lines. The |length| and |width| parameters refer to the horizontal and
+ vertical distances between the points on the path making up the arrow tip.
+ As can be seen, the line width of the arrow tip's path is not taken into
+ account. The |angle| option is particularly useful to set the opening angle
+ at the tip of the arrow head. The |round| option gives a ``softer'' or
+ ``rounder'' version of the arrow tip.
+}%
+{length=2cm,width=3cm}%
+{length=2cm/-4mm,width=3cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+% \arrowexampledouble[]
+ \arrowexampledup[]
+ \arrowexampledupdot[]
+ \arrowexample[length=5pt]
+ \arrowexample[length=5pt,width=5pt]
+ \arrowexample[line width=2pt]
+ \arrowexample[reversed]
+ \arrowexample[angle=60:2pt 3]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[harpoon,reversed]
+ \arrowexample[red]
+ \end{arrowexamples}
+ %
+ The following options have no effect: |open|, |fill|.
+
+ On |double| lines, the arrow tip will not look correct.
\end{arrowtip}
-
-\begin{arrowtip}{Tee Barb}
- {
- This arrow tip attaches a little ``T'' on both sides of the
- tip. The arrow |inset| dictates the distance from the back end to
- the middle of the stem of the T. When the inset is equal to the
- length, the arrow tip is drawn as a single line, not as three
- lines (this is important for the ``round'' version since, then,
- the corners get rounded).
- }
- {length=1.5cm,width=3cm,inset=1cm}
- {length=1.5cm,width=3cm,inset=1cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[inset=0pt]
- \arrowexample[inset'=0pt 1]
- \arrowexample[line width=2pt]
- \arrowexample[round]
- \arrowexample[round,inset'=0pt 1]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[harpoon,reversed]
- \arrowexample[red]
- \end{arrowexamples}
- The following options have no effect: |open|, |fill|.
-
- On |double| lines, the arrow tip will not look correct.
+\begin{arrowtip}{Tee Barb}{
+ This arrow tip attaches a little ``T'' on both sides of the tip. The arrow
+ |inset| dictates the distance from the back end to the middle of the stem
+ of the T. When the inset is equal to the length, the arrow tip is drawn as
+ a single line, not as three lines (this is important for the ``round''
+ version since, then, the corners get rounded).
+}%
+{length=1.5cm,width=3cm,inset=1cm}%
+{length=1.5cm,width=3cm,inset=1cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[inset=0pt]
+ \arrowexample[inset'=0pt 1]
+ \arrowexample[line width=2pt]
+ \arrowexample[round]
+ \arrowexample[round,inset'=0pt 1]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[harpoon,reversed]
+ \arrowexample[red]
+ \end{arrowexamples}
+ %
+ The following options have no effect: |open|, |fill|.
+
+ On |double| lines, the arrow tip will not look correct.
\end{arrowtip}
-
\subsubsection{Mathematical Barbed Arrow Tips}
-
-\begin{arrowtip}{Classical TikZ Rightarrow}
- {
- This arrow tip is the ``old'' or ``classical'' arrow tip that used
- to be the standard in \tikzname\ in earlier versions. It was
- modelled on an old version of the tip of \texttt{\string\rightarrow}
- ($\rightarrow$) of the Computer Modern fonts. However, this ``old
- version'' was really old, Donald
- Knuth (the designer of both \TeX\ and of the Computer Modern
- fonts) replaced the arrow tip of the mathematical fonts
- in~1992.
- }
- {length=1cm,width=2cm}
- {length=1cm,width=2cm}
- The main problem with this arrow tip is that it is ``too small''
- at its natural size. I recommend using the new \texttt{Computer Modern
- Rightarrow} arrow tip instead, which matches the current
- $\to$. This new version is also the default used as |>| and as
- |To|, now.
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[length=3pt]
- \arrowexample[sharp]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[harpoon,reversed]
- \arrowexample[red]
- \end{arrowexamples}
- The following options have no effect: |open|, |fill|.
-
- On |double| lines, the arrow tip will not look correct.
+\begin{arrowtip}{Classical TikZ Rightarrow}{
+ This arrow tip is the ``old'' or ``classical'' arrow tip that used to be
+ the standard in \tikzname\ in earlier versions. It was modelled on an old
+ version of the tip of \texttt{\string\rightarrow} ($\rightarrow$) of the
+ Computer Modern fonts. However, this ``old version'' was really old, Donald
+ Knuth (the designer of both \TeX\ and of the Computer Modern fonts)
+ replaced the arrow tip of the mathematical fonts in~1992.
+}%
+{length=1cm,width=2cm}%
+{length=1cm,width=2cm}
+
+ The main problem with this arrow tip is that it is ``too small'' at its
+ natural size. I recommend using the new \texttt{Computer Modern Rightarrow}
+ arrow tip instead, which matches the current $\to$. This new version is
+ also the default used as |>| and as |To|, now.
+ %
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[length=3pt]
+ \arrowexample[sharp]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[harpoon,reversed]
+ \arrowexample[red]
+ \end{arrowexamples}
+ %
+ The following options have no effect: |open|, |fill|.
+
+ On |double| lines, the arrow tip will not look correct.
\end{arrowtip}
-\begin{arrowtip}{Computer Modern Rightarrow}
- {
- For a line width of 0.4pt (the default), this arrow tip looks very
- much like \texttt{\string\rightarrow} ($\to$) of the Computer Modern math
- fonts. However, it is not a ``perfect'' match: the line caps and
- joins of the ``real'' $\to$ are rounded differently from this
- arrow tip; but it takes a keen eye to notice the difference. When
- the |arrow.meta| library is loaded, this arrow tip becomes the
- default of |To| and, thus, is used whenever |>| is used (unless,
- of course, you redefined |>|).
- }
- {length=1cm,width=2cm}
- {length=1cm,width=2cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[length=3pt]
- \arrowexample[sharp]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[harpoon,reversed]
- \arrowexample[red]
- \end{arrowexamples}
- The following options have no effect: |open|, |fill|.
-
- On |double| lines, the arrow tip will not look correct.
+\begin{arrowtip}{Computer Modern Rightarrow}{
+ For a line width of 0.4pt (the default), this arrow tip looks very much
+ like \texttt{\string\rightarrow} ($\to$) of the Computer Modern math fonts.
+ However, it is not a ``perfect'' match: the line caps and joins of the
+ ``real'' $\to$ are rounded differently from this arrow tip; but it takes a
+ keen eye to notice the difference. When the |arrow.meta| library is loaded,
+ this arrow tip becomes the default of |To| and, thus, is used whenever |>|
+ is used (unless, of course, you redefined |>|).
+}%
+{length=1cm,width=2cm}%
+{length=1cm,width=2cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[length=3pt]
+ \arrowexample[sharp]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[harpoon,reversed]
+ \arrowexample[red]
+ \end{arrowexamples}
+ %
+ The following options have no effect: |open|, |fill|.
+
+ On |double| lines, the arrow tip will not look correct.
\end{arrowtip}
-
-
\begin{arrowtipsimple}{Implies}
- This arrow tip makes only sense in conjunction with the |double|
- option. The idea is that you attach it to a double line to get
- something that looks like \TeX's \texttt{\string\implies} arrow
- ($\implies$). A typical use of this arrow tip is
+ This arrow tip makes only sense in conjunction with the |double| option.
+ The idea is that you attach it to a double line to get something that looks
+ like \TeX's \texttt{\string\implies} arrow ($\implies$). A typical use of
+ this arrow tip is
+ %
\begin{codeexample}[]
\tikz \graph [clockwise=3, math nodes,
edges = {double equal sign distance, -Implies}] {
@@ -2153,433 +2145,399 @@ be classified in different groups:
"\alpha" -> "\beta" -> "\gamma" -> "\alpha"
};
\end{codeexample}
- \begin{arrowexamples}
- \arrowexampledouble[]
- \arrowexampledouble[red]
- \end{arrowexamples}
+ %
+ \begin{arrowexamples}
+ \arrowexampledouble[]
+ \arrowexampledouble[red]
+ \end{arrowexamples}
\end{arrowtipsimple}
\begin{arrowtipsimple}{To}
- This is a shorthand for |Computer Modern Rightarrow| when the
- |arrow.meta| library is loaded. Otherwise, it is a shorthand for the
- classical \tikzname\ rightarrow.
+ This is a shorthand for |Computer Modern Rightarrow| when the |arrow.meta|
+ library is loaded. Otherwise, it is a shorthand for the classical
+ \tikzname\ rightarrow.
\end{arrowtipsimple}
-
-
\subsubsection{Geometric Arrow Tips}
-
-
-\begin{arrowtip}{Circle}
- {
- Although this tip is called ``circle,'' you can also use it to
- draw ellipses if you set the length and width to different
- values. Neither |round| nor |reversed| has any effect on this
- arrow tip.
- }
- {length=2cm,width=2cm}
- {length=2cm,width=2cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[open]
- \arrowexample[length=3pt]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \end{arrowexamples}
+\begin{arrowtip}{Circle}{
+ Although this tip is called ``circle'', you can also use it to draw
+ ellipses if you set the length and width to different values. Neither
+ |round| nor |reversed| has any effect on this arrow tip.
+}%
+{length=2cm,width=2cm}%
+{length=2cm,width=2cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[open]
+ \arrowexample[length=3pt]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \end{arrowexamples}
\end{arrowtip}
\begin{arrowtipsimple}{Diamond}
- This is an instance of |Kite| where the length is larger than the
- width.
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[]
- \arrowexampledupdot[]
- \arrowexample[open]
- \arrowexample[length=10pt]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \arrowexample[fill=red!50]
- \end{arrowexamples}
+ This is an instance of |Kite| where the length is larger than the width.
+ %
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[]
+ \arrowexampledupdot[]
+ \arrowexample[open]
+ \arrowexample[length=10pt]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \arrowexample[fill=red!50]
+ \end{arrowexamples}
\end{arrowtipsimple}
\begin{arrowtipsimple}{Ellipse}
- This is a shorthand for a ``circle'' that is twice as wide as high.
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[open]
- \arrowexample[length=10pt]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \arrowexample[fill=red!50]
- \end{arrowexamples}
+ This is a shorthand for a ``circle'' that is twice as wide as high.
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[open]
+ \arrowexample[length=10pt]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \arrowexample[fill=red!50]
+ \end{arrowexamples}
\end{arrowtipsimple}
-
-\begin{arrowtip}{Kite}
- {
- This arrow tip consists of four lines that form a ``kite.'' The
- |inset| prescribed how far the width-axis of the kite is removed
- from the back end. Note that the inset cannot be negative, use a
- |Stealth| arrow tip for this.
- }
- {length=3cm,width=2cm,inset=1cm}
- {length=3cm,width=2cm,inset=1cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[open]
- \arrowexample[length=6pt,width=4pt]
- \arrowexample[length=6pt,width=4pt,inset=1.5pt]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \end{arrowexamples}
+\begin{arrowtip}{Kite}{
+ This arrow tip consists of four lines that form a ``kite''. The |inset|
+ prescribed how far the width-axis of the kite is removed from the back end.
+ Note that the inset cannot be negative, use a |Stealth| arrow tip for this.
+}%
+{length=3cm,width=2cm,inset=1cm}%
+{length=3cm,width=2cm,inset=1cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[open]
+ \arrowexample[length=6pt,width=4pt]
+ \arrowexample[length=6pt,width=4pt,inset=1.5pt]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \end{arrowexamples}
\end{arrowtip}
-
-\begin{arrowtip}{Latex}
- {
- This arrow tip is the same as the arrow tip used in \LaTeX's
- standard pictures (via the \texttt{\string\vec} command), if you
- set the length to 4pt. The default size for this arrow tip was set
- slightly larger so that it fits better with the other geometric
- arrow tips.
- }
- {length=3cm,width=2cm}
- {length=3cm,width=2cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[open]
- \arrowexample[length=4pt]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \end{arrowexamples}
+\begin{arrowtip}{Latex}{
+ This arrow tip is the same as the arrow tip used in \LaTeX's standard
+ pictures (via the \texttt{\string\vec} command), if you set the length to
+ 4pt. The default size for this arrow tip was set slightly larger so that it
+ fits better with the other geometric arrow tips.
+}%
+{length=3cm,width=2cm}%
+{length=3cm,width=2cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[open]
+ \arrowexample[length=4pt]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \end{arrowexamples}
\end{arrowtip}
\begin{arrowtipsimple}{LaTeX}
- Another spelling for the |Latex| arrow tip.
+ Another spelling for the |Latex| arrow tip.
\end{arrowtipsimple}
-
-
-\begin{arrowtip}{Rectangle}
- {
- A rectangular arrow tip. By default, it is twice as long as high.
- }
- {length=3cm,width=2cm}
- {length=3cm,width=2cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[open]
- \arrowexample[length=4pt]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \end{arrowexamples}
+\begin{arrowtip}{Rectangle}{
+ A rectangular arrow tip. By default, it is twice as long as high.
+}%
+{length=3cm,width=2cm}%
+{length=3cm,width=2cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[open]
+ \arrowexample[length=4pt]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \end{arrowexamples}
\end{arrowtip}
-
\begin{arrowtipsimple}{Square}
- An instance of the |Rectangle| whose width is identical to the length.
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[open]
- \arrowexample[length=4pt]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \end{arrowexamples}
+ An instance of the |Rectangle| whose width is identical to the length.
+ %
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[open]
+ \arrowexample[length=4pt]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \end{arrowexamples}
\end{arrowtipsimple}
-
-
-\begin{arrowtip}{Stealth}
- {
+\begin{arrowtip}{Stealth}{
This arrow tip is similar to a |Kite|, only the |inset| now counts
- ``inwards.'' Because of that sharp angles, for this arrow tip is
- makes quite a difference, visually, if use the |round|
- option. Also, using the |harpoon| option (or |left| or |right|)
- will \emph{lengthen} the arrow tip because of the even sharper
- corner at the tip.
- }
- {length=3cm,width=2cm,inset=1cm}
- {length=3cm,width=2cm,inset=1cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[open]
- \arrowexample[length=6pt,width=4pt]
- \arrowexample[length=6pt,width=4pt,inset=1.5pt]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \end{arrowexamples}
+ ``inwards''. Because of that sharp angles, for this arrow tip is makes
+ quite a difference, visually, if use the |round| option. Also, using the
+ |harpoon| option (or |left| or |right|) will \emph{lengthen} the arrow tip
+ because of the even sharper corner at the tip.
+}%
+{length=3cm,width=2cm,inset=1cm}%
+{length=3cm,width=2cm,inset=1cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[open]
+ \arrowexample[length=6pt,width=4pt]
+ \arrowexample[length=6pt,width=4pt,inset=1.5pt]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \end{arrowexamples}
\end{arrowtip}
-
\begin{arrowtipsimple}{Triangle}
- An instance of a |Kite| with zero inset.
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[open]
- \arrowexample[length=4pt]
- \arrowexample[angle=45:1pt 3]
- \arrowexample[angle=60:1pt 3]
- \arrowexample[angle=90:1pt 3]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \end{arrowexamples}
+ An instance of a |Kite| with zero inset.
+ %
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[open]
+ \arrowexample[length=4pt]
+ \arrowexample[angle=45:1pt 3]
+ \arrowexample[angle=60:1pt 3]
+ \arrowexample[angle=90:1pt 3]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \end{arrowexamples}
\end{arrowtipsimple}
\begin{arrowtipsimple}{Turned Square}
- An instance of a |Kite| with identical width and height and mid-inset.
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[open]
- \arrowexample[length=4pt]
- \arrowexample[round]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[red]
- \end{arrowexamples}
+ An instance of a |Kite| with identical width and height and mid-inset.
+ %
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[open]
+ \arrowexample[length=4pt]
+ \arrowexample[round]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[red]
+ \end{arrowexamples}
\end{arrowtipsimple}
-
\subsubsection{Caps}
-Recall that a \emph{cap} is a way of ending a line. The graphic
-languages underlying \tikzname\ (\textsc{pdf}, \textsc{postscript} or
-\textsc{svg}) all support three basic types of line caps on a very low
-level: round, rectangular, and ``butt.'' Using cap arrow tips, you can
-add new caps to lines and use different caps for the end and the
-start.
-
+Recall that a \emph{cap} is a way of ending a line. The graphic languages
+underlying \tikzname\ (\textsc{pdf}, \textsc{postscript} or \textsc{svg}) all
+support three basic types of line caps on a very low level: round, rectangular,
+and ``butt''. Using cap arrow tips, you can add new caps to lines and use
+different caps for the end and the start.
\begin{arrowtipsimple}{Butt Cap}
- This arrow tip ends the line ``in the normal way'' with a straight
- end. This arrow tip is only need to ``cover up'' the actual line
- cap, if this happens to differ from the normal cap. In the following
- example, the line cap is ``round'', but, nevertheless, the right end
- is a ``butt'' cap:
-
+ This arrow tip ends the line ``in the normal way'' with a straight end.
+ This arrow tip is only need to ``cover up'' the actual line cap, if this
+ happens to differ from the normal cap. In the following example, the line
+ cap is ``round'', but, nevertheless, the right end is a ``butt'' cap:
+ %
\begin{codeexample}[]
-\tikz \draw [line width=1ex, line cap=round, -Butt Cap] (0,0) -- (1,0);
+\tikz \draw [line width=1ex, line cap=round, -Butt Cap] (0,0) -- (1,0);
\end{codeexample}
+ %
\end{arrowtipsimple}
-
-\begin{arrowcap}{Fast Round}
- {
+\begin{arrowcap}{Fast Round}{
This arrow tip is not really a cap, you use it in conjunction with
- (typically) the |Round Cap|. The idea is that you end your line
- using the round cap and then add several \texttt{Fast
- Round}s. As for |Round Cap|, the |length| parameter
- dictates the length is the length of the ``main part,'' the
- inset sets the length of a line that comes before this tip.
- }
- {length=5mm,inset=1cm}
- {length=5mm,inset=-1cm}
- {-15mm}
-
+ (typically) the |Round Cap|. The idea is that you end your line using the
+ round cap and then add several \texttt{Fast Round}s. As for |Round Cap|,
+ the |length| parameter dictates the length is the length of the ``main
+ part'', the inset sets the length of a line that comes before this tip.
+}%
+{length=5mm,inset=1cm}%
+{length=5mm,inset=-1cm}%
+{-15mm}
+
\begin{codeexample}[]
\tikz \draw [line width=1ex,
-{Round Cap []. Fast Round[] Fast Round[]}]
- (0,0) -- (1,0);
+ (0,0) -- (1,0);
\end{codeexample}
- Note that in conjunction with the |bend| option, this works even
- quite well for curves:
+ %
+ Note that in conjunction with the |bend| option, this works even quite well
+ for curves:
+ %
\begin{codeexample}[]
\tikz [f/.tip = Fast Round] % shorthand
\draw [line width=1ex, -{[bend] Round Cap[] . f f f}]
- (0,0) to [bend left] (1,0);
-\end{codeexample}
-
- \begin{arrowcapexamples}
- \arrowcapexample[]
- \arrowcapexample[reversed]
- \arrowcapexample[cap angle=60]
- \arrowcapexample[cap angle=60,inset=5pt]
- \arrowcapexample[length=.5ex]
- \arrowcapexample[slant=.3]
- \end{arrowcapexamples}
+ (0,0) to [bend left] (1,0);
+\end{codeexample}
+
+ \begin{arrowcapexamples}
+ \arrowcapexample[]
+ \arrowcapexample[reversed]
+ \arrowcapexample[cap angle=60]
+ \arrowcapexample[cap angle=60,inset=5pt]
+ \arrowcapexample[length=.5ex]
+ \arrowcapexample[slant=.3]
+ \end{arrowcapexamples}
\end{arrowcap}
+\begin{arrowcap}{Fast Triangle}{
+ This arrow tip works like |Fast Round|, only for triangular caps.
+}%
+{length=5mm,inset=1cm}%
+{length=5mm,inset=-1cm}%
+{-15mm}
-\begin{arrowcap}{Fast Triangle}
- {
- This arrow tip works like |Fast Round|, only for triangular caps.
- }
- {length=5mm,inset=1cm}
- {length=5mm,inset=-1cm}
- {-15mm}
-
\begin{codeexample}[]
\tikz \draw [line width=1ex,
-{Triangle Cap []. Fast Triangle[] Fast Triangle[]}]
- (0,0) -- (1,0);
+ (0,0) -- (1,0);
\end{codeexample}
- Again, this tip works well for curves:
+ %
+ Again, this tip works well for curves:
+ %
\begin{codeexample}[]
\tikz [f/.tip = Fast Triangle] % shorthand
\draw [line width=1ex, -{[bend] Triangle Cap[] . f f f}]
- (0,0) to [bend left] (1,0);
-\end{codeexample}
-
- \begin{arrowcapexamples}
- \arrowcapexample[]
- \arrowcapexample[reversed]
- \arrowcapexample[cap angle=60]
- \arrowcapexample[cap angle=60,inset=5pt]
- \arrowcapexample[length=.5ex]
- \arrowcapexample[slant=.3]
- \end{arrowcapexamples}
-\end{arrowcap}
-
-
+ (0,0) to [bend left] (1,0);
+\end{codeexample}
-\begin{arrowcap}{Round Cap}
- {
- This arrow tip ends the line using a half circle or, if the length
- has been modified, a half-ellipse.
- }
- {length=5mm}
- {length=5mm}
- {-5mm}
- \begin{arrowcapexamples}
- \arrowcapexample[]
- \arrowcapexample[reversed]
- \arrowcapexample[length=.5ex]
- \arrowcapexample[slant=.3]
- \end{arrowcapexamples}
+ \begin{arrowcapexamples}
+ \arrowcapexample[]
+ \arrowcapexample[reversed]
+ \arrowcapexample[cap angle=60]
+ \arrowcapexample[cap angle=60,inset=5pt]
+ \arrowcapexample[length=.5ex]
+ \arrowcapexample[slant=.3]
+ \end{arrowcapexamples}
\end{arrowcap}
+\begin{arrowcap}{Round Cap}{
+ This arrow tip ends the line using a half circle or, if the length has been
+ modified, a half-ellipse.
+ }%
+{length=5mm}%
+{length=5mm}%
+{-5mm}
+
+ \begin{arrowcapexamples}
+ \arrowcapexample[]
+ \arrowcapexample[reversed]
+ \arrowcapexample[length=.5ex]
+ \arrowcapexample[slant=.3]
+ \end{arrowcapexamples}
+\end{arrowcap}
-\begin{arrowcap}{Triangle Cap}
- {
- This arrow tip ends the line using a triangle whose length is
- given by the |length| option.
- }
- {length=5mm}
- {length=5mm}
- {-5mm}
-
- You can get any angle you want at the tip by specifying a length
- that is an appropriate multiple of the line width. The following
- options does this computation for you:
- \begin{key}{/pgf/arrow keys/cap angle=\meta{angle}}
- Sets |length| to an appropriate multiple of the line width so that
- the angle of a |Triangle Cap| is exactly \meta{angle} at the tip.
- \end{key}
-
- \begin{arrowcapexamples}
- \arrowcapexample[]
- \arrowcapexample[reversed]
- \arrowcapexample[cap angle=60]
- \arrowcapexample[cap angle=60,reversed]
- \arrowcapexample[length=.5ex]
- \arrowcapexample[slant=.3]
- \end{arrowcapexamples}
+\begin{arrowcap}{Triangle Cap}{
+ This arrow tip ends the line using a triangle whose length is given by the
+ |length| option.
+}%
+{length=5mm}%
+{length=5mm}%
+{-5mm}
+
+ You can get any angle you want at the tip by specifying a length that is an
+ appropriate multiple of the line width. The following options does this
+ computation for you:
+ %
+ \begin{key}{/pgf/arrow keys/cap angle=\meta{angle}}
+ Sets |length| to an appropriate multiple of the line width so that the
+ angle of a |Triangle Cap| is exactly \meta{angle} at the tip.
+ \end{key}
+
+ \begin{arrowcapexamples}
+ \arrowcapexample[]
+ \arrowcapexample[reversed]
+ \arrowcapexample[cap angle=60]
+ \arrowcapexample[cap angle=60,reversed]
+ \arrowcapexample[length=.5ex]
+ \arrowcapexample[slant=.3]
+ \end{arrowcapexamples}
\end{arrowcap}
\subsubsection{Special Arrow Tips}
-\begin{arrowtip}{Rays}
- {
- This arrow tip attaches a ``bundle of rays'' to the tip. The
- number of evenly spaced rays is given by the |n| arrow key (see
- below). When the number is even, the rays will lie to the left and
- to the right of the direction of the arrow; when the number is
- odd, the rays are rotated in such a way that one of them points
- perpendicular to the direction of the arrow (this is to ensure
- that no ray points in the direction of the line, which would look
- strange). The |length| and |width| describe the length and width
- of an ellipse into which the rays fit.
- }
- {length=3cm,width=3cm,n=6}
- {length=3cm,width=3cm}
-
- \begin{arrowexamples}
- \arrowexample[]
- \arrowexampledup[sep]
- \arrowexampledupdot[sep]
- \arrowexample[width'=0pt 2]
- \arrowexample[round]
- \arrowexample[n=2]
- \arrowexample[n=3]
- \arrowexample[n=4]
- \arrowexample[n=5]
- \arrowexample[n=6]
- \arrowexample[n=7]
- \arrowexample[n=8]
- \arrowexample[n=9]
- \arrowexample[slant=.3]
- \arrowexample[left]
- \arrowexample[right]
- \arrowexample[left,n=5]
- \arrowexample[right,n=5]
- \arrowexample[red]
- \end{arrowexamples}
+\begin{arrowtip}{Rays}{
+ This arrow tip attaches a ``bundle of rays'' to the tip. The number of
+ evenly spaced rays is given by the |n| arrow key (see below). When the
+ number is even, the rays will lie to the left and to the right of the
+ direction of the arrow; when the number is odd, the rays are rotated in
+ such a way that one of them points perpendicular to the direction of the
+ arrow (this is to ensure that no ray points in the direction of the line,
+ which would look strange). The |length| and |width| describe the length and
+ width of an ellipse into which the rays fit.
+}%
+{length=3cm,width=3cm,n=6}%
+{length=3cm,width=3cm}
+
+ \begin{arrowexamples}
+ \arrowexample[]
+ \arrowexampledup[sep]
+ \arrowexampledupdot[sep]
+ \arrowexample[width'=0pt 2]
+ \arrowexample[round]
+ \arrowexample[n=2]
+ \arrowexample[n=3]
+ \arrowexample[n=4]
+ \arrowexample[n=5]
+ \arrowexample[n=6]
+ \arrowexample[n=7]
+ \arrowexample[n=8]
+ \arrowexample[n=9]
+ \arrowexample[slant=.3]
+ \arrowexample[left]
+ \arrowexample[right]
+ \arrowexample[left,n=5]
+ \arrowexample[right,n=5]
+ \arrowexample[red]
+ \end{arrowexamples}
\end{arrowtip}
+
\begin{key}{/pgf/arrow keys/n=\meta{number} (initially 4)}
- Sets the number of rays in a |Rays| arrow tip.
+ Sets the number of rays in a |Rays| arrow tip.
\end{key}
-
-
-\endinput
-
-