%%%------------------------------------------------------------
\section{\protect\cmd{\tzto}: Two points}
\label{s:tzto}
\icmd{\tzto} connects two points with a straight or curved line, using \Tikz's |to| operation.
So |\tzto| is more general than |\tzline|, which only connects points only with a straight line.
You can add text \xem{next to the line} (|[midway,above]|, by default) by specifying the options |{<text>}| and |[<node opt>]| \xem{in-between} the two coordinates.
\begin{tztikz}
\tzto[->,bend right](1,1){A}[near start](3,2) % works like:
\draw [->,bend right] (1,1) to node [near start] {A} (3,2);
\tzto[->,bend right](1,1){A}[near start](3,2){B}[right] % works like:
\draw [->,bend right] (1,1) to node [near start] {A}
(3,2) node [right] {B};
\end{tztikz}
You can also add text \xem{at or around} the last coordinate by the options |{<text>}| and |[<node opt>]| \xem{immediately after} the last coordinate.
\paragraph{Shift}
You can move the line by specifying the option |<shift coor>| before the first coordinate or immediately before the option |"<path name>"| if it exists.
(The \xem{empty} shift option |<>| is \xem{not allowed}.)
\paragraph{Naming paths: Intersections}
You can name the path of |\tzto| by specifying the option |"<path name>"| immediately before the first coordinate.
\begin{tzcode}{.3}
% \tzto: name path
\begin{tikzpicture}
\tzhelplines(4,3)
\tzto[bend right=45,blue,thick,->]"curveA"(1,3)(4,0)
\tzto[out=0]"curveB"(0,0)(4,2){line B}[r]
% intersection point
\tzXpoint*{curveA}{curveB}
\end{tikzpicture}
\end{tzcode}
\paragraph{Extending the path}
You can extend the path of |\tzto| by writing \Tikz\ code in the last optional argument |<code.append>|.
You can also use \icmd{\tztoAtBegin} and \icmd{\tztoAtEnd} to extend a path of |\tzto| at the beginning and at the end, respectively.
Specifying |<code.append>| extends the path after |\tztoAtEnd|.
\icmd{\tztos} takes an arbitrary number of coordinates as arguments to connect them by the \Tikz's |to| operation. |\tztos| is much more flexible than |\tzlines|. Since this is a \xem{semicolon version}, you need to enter a \xem{semicolon} to indicate when the coordinate iteration ends.
The quadruple |(<coor>)[<to opt>]{<text>}[<node opt>]| is
the whole repeating pattern.
Here, |[<to opt>]| is for the options of \Tikz's |to| operation such as |[bend right]|, |[bend left]|, |[bend left=<angle>]|, |[out=<angle>,in=<angle>]| and so on.
\begin{tztikz}
\tztos(0,0)(1,2)(3,1); % works like:
\draw (0,0) to (1,2) to (3,1);
\end{tztikz}
\begin{tztikz}
\tztos[blue] (0,0) [bend right] (1,2) [out=-60,in=45] (3,1); % works like:
\draw[blue] (0,0) to [bend right] (1,2) to [out=-60,in=45] (3,1);
\end{tztikz}
\paragraph{How to connect coordinates}
You can use the options of \Tikz's |to| operation to connect the coordinates with different types of curves.
\paragraph{Adding text}
You can add text next to lines or curves by specifying the options |{<text>}| and |[<node opt>]| \xem{in-between} coordinates or \xem{after} the option |[<to opt>]|, if it exists.
You can also add text at or around the last coordinate by the last options |{<text>}| and |[<node opt>]|.
\paragraph{Shift}
You can move the line or curve of |\tztos|
using the option |<shift coor>| before the first coordinate or immediately before the option |"<path name">|, if any.
(The empty shift option |<>| is not allowed.)
\paragraph{Naming paths: intersections}
You can name the path of |\tztos| by specifying |"<path name>"| immediately before the first mandatory coordinate.
\paragraph{Extending paths}
You can extend the path of |\tztos| from the last coordinate,
by writing \Tikz\ code in the last (after the semicolon) optional argument |<code.append>|.
You can also use \icmd{\tztosAtBegin} and \icmd{\tztosAtEnd} to extend a path of |\tztos| at the beginning and at the end, respectively.
Specifying the option |<code.append>| extends the path after |\tztosAtEnd|.
\section{\protect\cmd{\tzlink}: Two points}
\label{s:tzlink}
\icmd{\tzlink} is a \xem{generalized version} of |\tzline|.
You can decide the style that links two coordinates.
The default link style is |to|, which can be changed with the \xem{second} optional argument |[<code1>]| \xem{between two coordinates} like, for example, \verb+(<coor1>)[-|](<coor2>)+.
Another way is to use the \xem{first} curly brace option |{<link style>}|.
You can also change it by \icmd{\settzlinkstyle} like, for example, \verb+\settzlinkstyle{-|}+, which is effective until the end of the |tikzpicture| environment.
\begin{tzdef}
% syntax: minimum
\tzlink(<coor1>)(<coor2>) % default: to
% syntax: medium
\tzlink[<opt>](<coor1>)[<code1>](coor2>) % change link style by [<code1>]
% syntax: full
\tzlink{<link style>}[<opt>]<shift coor>"<path name>"
(<coor1>)[<code1>]{<text1>}[<node opt1>]<code2>
(<coor2>){<text2>}[<node opt2>]<code.append>
% remark:
- {<link style>}: % default: to
- [<code1>]: --, -|, to, edge, etc. (optionally more appropriate tikz code)
- <code2>: + or ++ (possibly with other tikz code)
- {<text1>}: node text next to line
- {<text2>}: node text at the last coordinate
% defaults
{to}[]<>""(<m>)[]{}[above]<>(<m>){}[]<>
\end{tzdef}
\begin{tztikz}
\tzlink(1,0)(3,1) % works like:
\draw (1,0) to (3,1);
\end{tztikz}
\paragraph{Link styles} You can change the link style (|to| by default) using the optional argument |[<code1>]| \xem{immediately after} the first coordinate.
\begin{tzcode}{.3}
% \tzlink: to (default link style)
\begin{tikzpicture}
\tzhelplines(4,3)
\tzlink[->](0,0)(1,0)
\tzlink[->,bend right](0,2)(3,0)
\tzlink[->](1,2)[-|](4,1)
\end{tikzpicture}
\end{tzcode}
You can also use \icmd{\settzlinkstyle} to change the link style. Its effect is valid until the end of the |tikzpicture| environment, unless changed again.
The \iisw{plus version} \icmd{\tzlink+} uses the second coordinate relative (with |++|, by default) to the first one.
Everything else is the same as in |\tzlink|.
\begin{tzcode}{.3}
% \tzlink(+): various link styles
\begin{tikzpicture}
\tzhelplines(4,3)
\tzlink[->,blue,out=90,in=180](0,2)(3,0)
\tzlink+[->,dashed,blue](1,2)[to[bend left]](3,-1)
\tzlink[->](0,0)[..controls (1,1) and (3,0)..](4,2)
\tzlink+[red,thick](1,0)[edge[bend left]](2,3)
\end{tikzpicture}
\end{tzcode}
\paragraph{Adding text}
You can add text next to the line or curve of |\tzlink| by specifying the option |{<text1>}| followed by the optional argument |[<node opt1>]| \xem{between} two coordinates (or after the option |[<code1>]| if it exists).
You can name the line or curve of |\tzlink| by specifying the optional arguments |{<text2>}| and |[<node opt2>]| \xem{after} the second coordinate. The option |[<node opt2>]| is often for the position of node text at or around the second coordinate.
\paragraph{Shift}
You can move the line or curve by specifying the option |<shift coor>| \xem{before} the first coordinate (or ever before the option |"<path name>"| if it exists).
\paragraph{Naming paths: Intersections}
You can name the path of |\tzlink| by specifying the quote option |"<path name>"| \xem{immediately before} the first coordinate.
You can use the path names of two paths to find an intersection point.
\paragraph{Extending paths}
You can extend the path of |\tzlink| by specifying \Tikz\ code in the last optional argument |<code.append>|.
You can also use the macros \icmd{\tzlinkAtBegin} and \icmd{\tzlinkAtEnd} to extend the path at the beginning and at the end, respectively.
Specifying the option |<code.append>| extends the path after |\tzlinkAtEnd|.
%%------------------------------------------------------------
\section{\protect\cmd{\tzlinks}: All in one: Semicolon versions}
\label{s:tzlinks}
\subsection{\protect\cmd{\tzlinks}: Standard version}
\label{ss:tzlinks}
The macro \icmd{\tzlinks} is a \iisw{semicolon version} of |\tzlink|. |\tzlinks| accepts any number of coordinates to connect them with connected line segments or curves.
You can change how two adjacent points are connected.
|\tzlinks| is quite \xem{flexible} that you can think of it as a \xem{generalized version} of |\tzlines|.
\begin{tzdef}
% syntax: minimum
\tzlinks (<coor>)(<coor>) ..repeated.. (<coor>) ;
% syntax: full
\tzlinks{<path style>}[<opt>]<shift coor>"<path name>"
(<coor>)[<code1>]{<text>}[<node opt>]<code2>
..repeated.. ()[]{}[]<> ; {<fill opacity>} <code.append>
% remark:
- <code1> must be link style, such as --, to, -|, etc.
(possibly followed by other code)
- <code2> is especially for + or ++
(possibly with other code)
- repetition MUST be ended by ; (semicolon)
- full repeating pattern is ()[]{}[]<>..repeated..()[]{}[]<>
- {<fill opacity>} works only in \tzlinks*
% defaults: \tzlinks, \tzlinks*, \tzlinks+, \tzlinks*+
{to}[]<>"" (<m>)[]{}[]<> ..repeated.. ()[]{}[]<> ; { }<>
*{to}[fill=black!50,fill opacity=.3,text opacity=1]
<>"" (<m>)[]{}[]<> ..repeated.. ()[]{}[]<> ; {.3}<>
+{to}[]<>"" (<m>)[]{}[]<++> ..repeated.. ()[]{}[]<> ; { }<>
\end{tzdef}
\paragraph{How to change link styles}
There are three ways of changing link styles:
\begin{itemize}\firmlist
\item The fist curly brace option |{<link style>}| controls the link style of connecting any two coordinates.
\item The second bracket option |[<code1>]| (locally) changes the link style of two adjacent coordinates. |[<code1>]| (locally) overrides |{<link style>}|.
\item The effect of the macro |\settzlinkstyle| remains until the end of |tikzpicture| environment, unless changed again.
\end{itemize}
\begin{tztikz}
% standard version
\tzlinks(1,1)(2,2)(3,1)(4,3); % works like:
\draw (1,1) to (2,2) to (3,1) to (4,3);
\end{tztikz}
The default path style is |to|, which can be by \icmd{\settzlinkstyle}.
The effect remains valid until the end of |tikzpicture| environment unless changed again.
The \iisw{plus version} \icmd{\tzlinks+} treats a coordinate as relative (with |++| by default) to the previous coordinate, except the first coordinate.
\begin{tztikz}
% plus (+) version
\tzlinks+(1,1)(2,2){--}(3,1)(4,3); % works like:
\draw (1,1) to ++(2,2) -- ++(3,1) to ++(4,3);
\end{tztikz}
The \xem{starred version} \icmd{\tzlinks*} is to fill the closed area formed by |\tzlinks| with color or pattern. The related default value is |[fill=black!50, fill opacity=.3, text opacity=1]|.
In fact, |\tzlinks*[draw=none]| is (almost) the same as |\tzpath*| (See Section \ref{s:tzpath*} on page \pageref{s:tzpath*} for more details).
\begin{tztikz}
% starred (*) version
\tzlinks*(1,1)(2,2)(3,1)(4,3); % works like:
\draw [fill=black!50,fill opacity=.3,text opacity=1]
(1,1) to (2,2) to (3,1) to (4,3);
\end{tztikz}
\icmd{\tzlinks*+} is the plus version of |\tzlinks*|.
You can also change the fill opacity by specifying the \xem{last} curly brace optional argument |{<fill opacity>}|, \xem{after the semicolon} (or before the option |<code.append>| it it exists).
You can also use the macros |\settzfillcolor| and |\settzfillopacity| to change the defaults.
The effect remains valid until the end of the |tikzpicture| environment, unless changed again.
%%------------------------------------------------------------
\subsection{Putting text, shift, intersections, and extending paths}
\label{ss:tzlinks-add}
\paragraph{Adding text}
You can add text next to connected line segment or around the last coordinate by specifying options |{<text>}[<node option>]|.
\begin{tztikz}
\tzlinks+[dashed]"AA"(1,1){A}(2,2)[--]{B}[a]<+>(3,1){C}[b]; % works like
\draw [dashed,name path=AA]
(1,1) to node {A}
++(2,2) -- node [above] {B}
+(3,1) to node [below] {C} ;
\end{tztikz}
\paragraph{Naming paths: intersections}
You can name the path of |\tzlinks| \xem{immediately befor} the first coordinate and use it to find intersection points.
In the previous example, since |edge| is not part of the main path of |\tzlinks|,
the second horizontal intersection point |(A-2)| is not on the |edge| curve.
\paragraph{Extending paths}
You can extend the path of |\tzlinks| by writing \Tikz\ code in the last (after the semicolon) optional argument |<code.append>|.
So |<--cycle>| closes the path with a straight line.
You can also use \icmd{\tzlinksAtBegin} and \icmd{\tzlinksAtEnd} to extend the path of |\tzlinks| at the beginning and at the end, respectively.
Specifying the option |<code.append>| extends the path after |\tzlinksAtEnd|.
The macro \icmd{\tzpath} is the same as |\tzlinks[draw=none]|. In other words, |\tzpath| creates a path connecting an arbitrary number of coordinates, but it does not stroke the path. Since |\tzpath| is a \iisw{semicolon version} macro, you need to enter a \xem{semicolon} `|;|' to indicate where the coordinate iteration ends.
You can visualize the path with |\tzpath[draw]|, which is the same as |\tzlinks|.
\begin{tzdef}
% syntax: minimal
\tzpath (<coor>)(<coor>) ..repeated.. (<coor>) ;
% syntax: full
\tzpath {<path style>}[<opt>]<shift coor>"<path name>"
(<coor>)[<code1>]{<text>}[<node opt>]<code2>
..repeated.. ()[]{}[]<> ; <code.append>
% remark:
- <code1> must be link style, such as --, to, -|, etc.
(possibly followed by other codes)
- <code2> is especially for + and ++
(possibly with other codes)
- repetition MUST be ended by ; (semicolon)
% defaults: \tzpath
{to}[]<>"" (<m>)[]{}[]<> ..repeated.. ()[]{}[]<> ; <>
\end{tzdef}
\remark
\begin{itemize}
\item The main purpose of |\tzpath| is to fill an enclosed area with colors or patterns.
You can use |\tzpath[fill]| or |\tzpath[pattern=<...>]| to do it.
\item Use \icmd{\settzpathlayer}, like |\settzpathlayre{behind}|, to change the layer of |\tzpath| (default: |main|).
\end{itemize}
\paragraph{Path construction operation}
(If you are not an experienced user of \Tikz\, just skip this part.)
%|\tzpath| is similar to |\tztos|, but it is more flexible in constructing paths.
|\tzpath| allows you to choose how to construct a path using the |[<path style>]| option \xem{in-between} coordinates. \xem{Path extension operation} can be selected from `|--|', `|to|', `\verb+|-+', `\verb+-|+', etc.
You can use \xem{the first brace option} |{<path style>}| to change all the |<path style>| in-between coordinates.
The default path style is `|to|' and can also be changed by \icmd{\settzpathstyle}, like, for example, |\settzpathstyle{--}|. |\settzpathstyle| is an alias of |\settzlinkstyle|. The effect remains valid until the end of |tikzpicture| environment unless changed again.
You can extend the path of |\tzpath| by writing \Tikz\ code in the last (after the semicolon) optional argument |<code.append>|.
So |<--cycle>| closes the path with a straight line.
The starred version \icmd{\tzpath*} is the (almost) same as |\tzlinks*[draw=none]|. It fills the interior of |\tzpath| with |fill=black!50| with |fill opacity=.3| and |text opacity=1|, by default.
The only difference between |\tzpath*| and |\tzlinks*[draw=none]| is that the layer of |\tzpath*| can be changed by |\settzpathlayer|, like |\settzpathlayer{behind}|.
|\tzpath*| works like |\tzpath[fill=black!50,fill opacity=.3,text opacity=1]|.
You can change the defaults by \icmd{\settzfillcolor} and \icmd{\settzfillopacity}.
\begin{tzdef}
% syntax: minimal
\tzpath*(<coor>)(<coor>) ..repeated.. (<coor>) ; {<fill opacity>}
% syntax: full
\tzpath*{<path style>}[<opt>]<shift coor>"<path name>"
(<coor>)[<code1>]{<text>}[<node opt>]<code2>
..repeated.. ()[]{}[]<> ; {<fill opacity>} <code.append>
% remark:
- <code1> must be link style, such as --, to, -|, etc.
(possibly followed by other codes)
- <code2> is especially for + and ++
(possibly with other codes)
- repetition MUST be ended by ; (semicolon)
% defaults: \tzpath*
*{to}[fill=black!50,fill opacity=.3,text opacity=1]<>""
(<m>)[]{}[]<> ..repeated.. ()[]{}[]<> ; {.3}<>
\end{tzdef}
\paragraph{Filling the interior}
You can optionally change the opacity of fill color using the \Tikz\ option |fill opacity|.
You can also use the macros |\settzfillcolor| and |\settzfillopacity| to change the defaults.
The effect remains valid until the end of the |tikzpicture| environment, unless changed again.
\icmd{\tzbezier} accepts \xem{three or four} coordinates to draw a B\'{e}zier curve from the first coordinate to the last coordinate, with \xem{one or two} control points.
You can specify one or two control points, |(<cntl-coor>)|.
\begin{tztikz}
% three coordinates: one control point
\tzbezier(0,1)(1,0)(4,3) % works like:
\draw (0,0) ..controls (1,0).. (4,3);
\end{tztikz}
\begin{tztikz}
% four coordinates: two control points
\tzbezier(0,1)(1,0)(2,4)(4,3) % works like:
\draw (0,0) ..controls (1,0) and (2,4).. (4,3);
\end{tztikz}
The style \ixxw{tzshowcontrols} displays the control points by drawing dotted lines, by default.
You can also change the dotted line style, like |tzshowcontrols={dashed,green}|.
\paragraph{Adding text}
You can add text next to the curve or at the last coordinate
by specifying the options |{<text>}| and |[<node opt>]| \xem{immediately after the last coordinate}.
\paragraph{Shift}
You can move the curve of |\tzbezier| by specifying the option |<shift coor>| before the first coordinate or immediately before the option |"<path name>"|, if it exists.
The \xem{empty} shift option |<>| is \xem{not allowed}.
\paragraph{Naming paths: intersections}
You can name the path of |\tzbezier| by specifying the option |"<path name>"| \xem{immediately before} the first coordinate.
\begin{tzcode}{.3}
% \tzbezier: name path, intersection
\begin{tikzpicture}
\tzhelplines(4,4)
\tzbezier[blue,dashed,thick]<1,1>"curve"
(0,2)(1,.5)(4,0){curve}[r]
\tzbezier[red,dashed,thick]<0,-1>"bezier"
(0,3)(1,2)(2,4)(4,3){bezier}[blue,near end,a]
% intersection point
\tzXpoint*{curve}{bezier}(X){X}[-90]
\end{tikzpicture}
\end{tzcode}
\paragraph{Extending paths}
You can extend the path of |\tzbezier| from the last coordinate, by writing \Tikz\ code
in the last optional argument |<code.append>|.
You can also use \icmd{\tzbezierAtBegin} and \icmd{\tzbezierAtEnd} to extend the path of |\tzbezier| at the beginning and at the end, respectively.
Specifying the option |<code.append>| extends the path after |\tzbezierAtEnd|.
For the \iisw{plus version} \icmd{\tzbezier+}, the last coordinate is \xem{relative} to the first coordinate.
And the first control point is \xem{relative} to the first coordinate.
\begin{tztikz}
% three coordinates
\tzbezier+(0,1)(1,-1)(4,3) % works like:
\draw (0,1) ..controls +(1,-1).. ($(0,1)+(4,3)$);
\end{tztikz}
In \Tikz, the second control point is \xem{relative} to the last coordinate.
Therefore, for |\tzbezier+(A)(B)(C)(D)|, |(B)| and |(D)| are \xem{relative} to |(A)|, and the second control point |(C)| is \xem{relative} to the last coordinate |(D)|.
\begin{tztikz}
% four coordinates
\tzbezier+(0,1)(1,-1)(-2,1)(4,3) % works like:
\draw (0,1) ..controls +(1,-1) and +(-2,1).. ($(0,1)+(4,3)$);
\end{tztikz}
\icmd{\tzparabola} accepts \xem{two or three} coordinates to draw a parabola from the first coordinate to the last coordinate.
In the case of three coordinates, the parabola bends at the second coordinate.
\begin{tztikz}
% two coordinates
\tzparabola(0,0)(3,2) % works like:
\draw (0,0) parabola (3,2);
\end{tztikz}
\begin{tztikz}
% three coordinates
\tzparabola(0,0)(1,1)(3,2) % works like:
\draw (0,0) parabola bend (1,1) (3,2);
\end{tztikz}
\paragraph{Adding text}
You can add text at or around the \xem{last coordinate} by specifying the options |{<text>}| and |[<node opt>]| \xem{immediately after the last coordinate}.
\paragraph{Shift}
You can move the parabola by specifying the option |<shift coor>| before the first coordinate or immediately before the option |"<path name>"|, if it exist.
The \xem{empty} shift option |<>| is \xem{not allowed}.
\paragraph{Naming paths: intersections}
You can name the path of |\tzparabola| by specifying the option |"<path name>"| \xem{immediately before} the first coordinate.
\paragraph{Extending paths}
You can extend the path of |\tzparabola| from the last coordinate by writing \Tikz\ code in the last optional argument |<code.append>|.
You can also use the macros \icmd{\tzparabolaAtBegin} and \icmd{\tzparabolaAtEnd} to extend the path of |\tzparabola| at the beginning and at the and, respectively.
Specifying the option |<code.append>| extends the path after |\tzparabolaAtEnd|.
\remark In \Tikz, the |edge| operation works like the |to| operation, but it is independently drawn after a main path is drawn and does not form a main path. So the option |"<path name>"| (for finding intersections) is not provided in |\tzedge|.
\begin{tztikz}
\tzedge(1,1)(3,2) % works like:
\draw (1,1) edge (3,2);
\end{tztikz}
\remark |edge| in the option |<code.append>| works with the second coordinate, but it works with the last node if the second option |{<text>}| is not empty.
(In \Tikz, if |edge| is preceded by |node|, the node is its start point.)
The macro \icmd{\tzedges} accepts any number of coordinates to draw edges from the first coordinate to each of the next using the \Tikz\ |edge| operation. That is, the first coordinate is the unique start coordinate, and all others are target coordinates.
|\tzedges| is a semicolon version, so you need to type |;| to indicate when the coordinate iteration ends.
\remark In \Tikz, the |edge| operation works like |to| operation, but it is added after main path is formed, like |node| does.
\begin{itemize}\firmlist
\item Each |edge| is drawn independently from a main path as well as any other |edge|'s. (See \Tikz\ manual for more details.)
\item The |edge| operation of \Tikz\ does not change change anything about a main path, so the current point is not changed by |\tzedges|. This means that the last node (with |{<text>}| and |[<node opt>]|) works with the first (namely, start) coordinate.
\end{itemize}
With \icmd{\tzfn}, you can plot functions such as $f(x)=\frac13(x-1)^3+1$, $g(x)=\sin x$, $h(x)=\sqrt{x-1}$, and so on.
See Section \ref{s:tzfn} on page \pageref{s:tzfn}, for more details on |\tzfn|.