summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/tzplot/tzplot-doc-C-v2.1.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/tzplot/tzplot-doc-C-v2.1.tex')
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot-doc-C-v2.1.tex2965
1 files changed, 2965 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/tzplot/tzplot-doc-C-v2.1.tex b/graphics/pgf/contrib/tzplot/tzplot-doc-C-v2.1.tex
new file mode 100644
index 0000000000..e717bd68c2
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot-doc-C-v2.1.tex
@@ -0,0 +1,2965 @@
+%!TEX root = tzplot-doc.tex
+%\begin{document}
+
+%%%==========================
+\part{Points, Lines, and Curves}
+%%%==========================
+\label{p:linesandcurves}
+
+
+%%==================================
+\chapter{Getting Ready}
+\label{c:gettingready}
+
+%%------------------------------------------------------------
+\section{Styles: \texttt{tzdotted}, \texttt{tzdashed}, \texttt{tzhelplines}}
+\label{s:styles:tzhelplines}
+
+The styles \ixttw{tzdotted}, \ixttw{tzdashed}, and \ixttw{tzhelplines} are defined as follows:
+
+\begin{tzsty}
+% styles: tzdotted, tzdashed, tzhelplines
+\tikzset{%
+ tzdotted/.style={line cap=round,dash pattern=on 0pt off 1cm/(#1)},
+ tzdotted/.default=10
+}
+\tikzset{%
+ tzdashed/.style={dashed=none,dash pattern=on 5mm/(#1) off 5mm/(#1)},
+ tzdashed/.default=10
+}
+\tikzset{%
+ tzhelplines/.style={help lines,-,tzdotted}
+}
+\end{tzsty}
+
+The styles |tzdotted| and |tzdashed| print 10 dots and 10 dashes per 1cm, respectively, by default.
+The style |tzhelplines| uses |tzdotted| by default.
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzhelplines}, \protect\cmd{\tzhelplines*}}
+\label{s:tzhelplines}
+
+\icmd{\tzhelplines} draws |grid| from the first coordinate to the second coordinate.
+If only one coordinate is specified, then the first coordinate is regarded as |(0,0)|.
+
+The starred version \icmd{\tzhelplines*} uses the grid as a \iisw{bounding box}.
+
+\begin{tzdef}
+% syntax: minimum
+\tzhelplines(<coor>)
+% syntax: full
+\tzhelplines[<opt>](<coor1>)(<coor2>)
+% defaults
+ [help lines,tzdotted=10](<m>)()
+% (<m>): mandatory argument
+\end{tzdef}
+
+Here, |(|\ixxw{<m>}|)| stands for a \xem{mandatory} argument.
+
+\begin{tztikz}
+\tzhelplines(4,3) % works similarly to:
+ \draw [help lines] (0,0) grid (4,3);
+
+\tzhelplines(1,1)(4,3) % works similarly to:
+ \draw [help lines] (1,1) grid (4,3);
+\end{tztikz}
+
+
+By default, |\tzhelplines| prints |grid| with |10| dots per |1cm|.
+|\tzhelplines| with the option value |[tzdotted=<n>]| prints |<n>| dots per |1cm|.
+(That is, the default value is |tzdotted=10|.)
+
+\begin{tzcode}{.3}
+% \tzhelplines
+\begin{tikzpicture}
+\tzhelplines(2,2)
+\draw [help lines] (3,0) grid (5,2);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% tzdotted: (default: 10 dots per 1cm)
+\begin{tikzpicture}
+\tzhelplines[thick](1,2) % 10 dots
+\tzhelplines[thick,tzdotted=20](2,0)(3,2) % 20 dots
+\tzhelplines[thick,tzdotted=5](4,0)(5,2) % 5 dots
+\end{tikzpicture}
+\end{tzcode}
+
+With the option value, |[tzdotted=<n>/<d>]|, |\tzhelplines| prints |<n>| dots per |<d>cm|.
+
+Similarly for |tzdashed|.
+
+\begin{tzcode}{.3}
+% tzdotted, tzdashed
+\begin{tikzpicture}
+\tzhelplines[thick,tzdashed](4,2)
+\tzhelplines[thick,step=.5](4,2)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% scaled: 7 dots per .7cm (10 dots per hard 1cm)
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[tzdashed](4,3)
+\tzhelplines[step=.5](4,3)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% scaled: 10/.7 means 10 dots per .7cm
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[tzdashed=10/.7](4,3) %%
+\tzhelplines[step=.5,tzdotted=10/.7](4,3) %%
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzbbox}: A bounding box}
+\label{s:tzbbox}
+
+\icmd{\tzbbox} sets a bounding box.
+
+\begin{tzdef}
+% syntax
+\tzbbox(<coor1>)(<coor2>)
+% defaults
+ (0,0)(<m>)
+% <m>: mandatory
+\end{tzdef}
+
+\begin{tztikz}
+\tzbbox(-1,-1)(4,3) % is an abbreviation of:
+ \path [ use as bounding box ] (-1,-1) rectangle (4,3);
+\end{tztikz}
+
+If only one coordinate is specified, the first coordinate is regarded as |(0,0)|.
+
+%%==================================
+\chapter{Dots}
+\label{c:dots}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcdot(*)}: A small circle}
+\label{s:tzcdot}
+
+A dot is usually expressed by a small circle.
+\icmd{\tzcdot} prints a circle dot \tikz \tzcdot(0,0);.
+
+The starred version \icmd{\tzcdot*} prints a filled circle dot \tikz \tzcdot*(0,0);.
+The \xem{radius} of the circle is |1.2pt|, by default.
+
+\begin{tzdef}
+% syntax: minimum
+\tzcdot(<coor>)
+% syntax: medium
+\tzcdot*(<coor>){<label>}[<angle>](<radius>)
+% syntax: full
+\tzcdot*[<opt>]<shift coor>(<coor>){<label>}[<[label opt]angle>](<radius>)
+% defaults
+ *[ solid,thin,tzcdot=1.2pt ]<>(<m>){}[](1.2pt)
+% tzcdot is a predefined key (in this package).
+% <m>: mandatory
+\end{tzdef}
+
+Here, |(|\ixxw{<m>}|)| stands for a \xem{mandatory} argument. All others are optional arguments.
+
+\paragraph{How to change the size}
+There are \textsc{Three Ways} to change the \xem{radius} of a circle dot drawn by |\tzcdot|.
+
+\begin{enumerate}
+\item The simplest way is to use the \xem{last parenthesis option}, like |\tzcdot(0,0)(3pt)|.
+
+\begin{tztikz}
+\tzcdot(0,0) % is an abbreviation of:
+ \draw (0,0) circle (1.2pt); % default radius=1.2pt
+\end{tztikz}
+
+\begin{tztikz}
+\tzcdot*(0,0)(3pt) % is an abbreviation of:
+ \draw [fill] (0,0) circle (3pt);
+\end{tztikz}
+
+\item
+You can use the key-value option |[tzcdot=<dim>]|, like |\tzcdot[tzcdot=3pt](0,0)|, to change the \xem{radius} of a circle dot. The |tzcdot| key is defined in the package.
+If both the |tzcdot| key-value and the last parenthesis option are used, the former wins.
+
+\begin{tztikz}
+\tzcdot*(1,1) % works like:
+ \draw [fill] (1,1) circle [radius=1.2pt]; % default radius=1.2pt
+\end{tztikz}
+
+\begin{tztikz}
+\tzcdot*[tzcdot=3pt] % works like:
+ \draw [fill] (0,0) circle [radius=3pt];
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcdot(*)
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\tzcdot(0,0) \tzcdot[tzcdot=4pt](1,1)
+\tzcdot*(2,1)(2pt) \tzcdot*(3,0)(3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\item
+Another way to change the radius is to use a macro, like |\settzcdotradius{3pt}|.
+It is effective within the |tizpicture| environment unless changed by \icmd{\settzcdotradius} again.
+
+\begin{tzcode}{.3}
+% \settzcdotradius
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\settzcdotradius{4pt}
+\tzcdot(0,0) \tzcdot(1,1)
+\tzcdot*(2,1)(2pt) \tzcdot*(3,0)
+\end{tikzpicture}
+\end{tzcode}
+
+\end{enumerate}
+
+
+\paragraph{How to label}
+You can add a label to a specified coordinate by adding the optional argument |{<label>}| immediately after |(<coor>)|. You can also change the |{<label>}| position by the option |[<angle>]|.
+
+\begin{tztikz}
+\tzcdot(0,0){A} % is an abbreviation of:
+ \draw (0,0) circle (1.2pt) node [label={:A}] {};
+
+\tzcdot(0,0)(2pt){A}[[blue]0] % is an abbreviation of:
+ \draw (0,0) circle (2pt) node [label={[blue]0:A}] {};
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcdot: labels
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdot(0,0){A} % default position: 90 or above
+\tzcdot[tzcdot=4pt](1,1){B}[0]
+\tzcdot*(2,1){C}[45](2pt)
+\tzcdot*(3,0){D}[-90](3pt)
+\tzcdot(4,3){E}[-90](6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+In \Tikz, the distance from the coordinate center to a label does not depend on the size of circle dots.
+
+\paragraph{How to change colors}
+With the first optional argument |[<opt>]|, you can change the color of a dot.
+You can also change the color of a label, as shown in the following example.
+
+\begin{tzcode}{.3}
+% \tzcdot(*): color, fill
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzcdot(0,0){A}
+\tzcdot*[red](1,0){\textbf{B}}[45]
+\tzcdot*[red,fill=green](2,1){green}[[blue]0](10pt)
+\tzcdot[tzcdot=2*7pt](3,2){big}[center]
+\tzcdot*[fill=red,text=blue](4,3){D}(2*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Shift}
+Dots can be shifted by specifying the optional argument |<shift coor>| immediately before |(<coor>)|. The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% \tzcdot: shift
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzcdot(0,0){A}
+\tzcdot*[red]<0,2>(1,0){\textbf{B}}[45] % shift
+\tzcdot*[red,fill=green](2,1){green}[[blue]0](10pt)
+\tzcdot[tzcdot=2*7pt]<1,-1>(3,2){big}[center] % shift
+\tzcdot*[fill=red,text=blue](4,3){D}(2*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tzcdot: repeated
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\foreach \x in {0,...,4}
+ { \foreach \A in {2,4,6,8}
+ { \tzcdot[blue] (\x,0)(\A pt) } }
+\foreach \x in {0,...,4}
+ { \foreach \A in {2,4,6,8}
+ { \tzcdot[red]<1,1>(\x,0)(\A pt) } } % shift
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcdots(*)}: Multiple circle dots}
+\label{s:tzcdots}
+
+The macro \icmd{\tzcdots} takes an \xem{arbitrary number of coordinates} as arguments to print multiple circle dots with the radius |1.2pt|, by default.
+You need to indicate when the iteration of an arbitrary number of coordinates ends, by typing a \xem{semicolon} |;|.
+Let us call this kind of macro a \iisw{semicolon version} macro.
+
+\remark
+\begin{itemize}
+\item DO NOT FORGET to enter `|;|' at the end of iteration.
+\item Without the semicolon |;|, an error occurs with the the \iisw{error message}:
+ \begin{verbatim}
+ ! Package tzplot Error: You may have forgotten a semicolon here or above!
+ \end{verbatim}
+\end{itemize}
+
+
+The starred version |\tzcdots*| prints multiple filled dots.
+
+\begin{tzdef}
+% syntax: minimum
+\tzcdots*(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: full
+\tzcdots*[<opt>]<shift coor> (<coor>){<label>}[<[label opt]angle>]
+ ..repeated.. (){}[] ; (<dot radius>)
+% defaults
+ *[tzcdot=1.2pt]<>(<m>){}[]..repeated..(){}[] ; (1.2pt)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzcdots(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots(0,0)(1,1)(2,1)(3,2)(4,0);
+\tzcdots*(0,3)(1,2)(2,2)(3,3)(4,3); % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{How to label}
+
+Each coordinate can be followed by the optional arguments |{<label>}| and |[<angle>]| to label dots. So the repeating pattern is the triple |(<coor>){<label>}[<angle>]|. In \Tikz, |<angle>| can have the label option like |<[label opt]angle>|.
+
+\begin{tzcode}{.3}
+% \tzcdots: label
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots(0,0){A}
+ (1,1)
+ (2,1){C}[0]
+ (3,2){D}[-90]
+ (4,0){E}[[red,draw]45];
+\tzcdots*(0,3)(1,2){B}[-135](2,2){C}[45](3,3)(4,3);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{How to change the size of dots}
+
+There are \textsc{Three Ways} of changing the \xem{radius} of dots.
+\begin{enumerate}
+\item The simplest way is to use the \xem{last} parenthesis optional argument, \xem{after the semicolon}.
+\item Another way is to use the \ixxw{tzcdot} key, like |\tzcdots[tzcdot=3pt]...|.
+If both options are used the key-value option wins.
+\item You can also use the macro \icmd{\settzcdotradius}.
+The effect remains within the |tikzpicture| environment unless it is changed again.
+\end{enumerate}
+
+\begin{tzcode}{.3}
+% \tzcdots: size (radius)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzcdotradius{3pt}
+\tzcdots(0,0)(1,0){3pt};
+\tzcdots*(1,1)(2,1){1pt};(1pt) % simplest
+\tzcdots[tzcdot=5pt](2,2)(3,2){5pt};
+\tzcdots*(3,3)(4,3){3pt};
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{How to change colors}
+
+With the first optional argument |[<opt>]|, you can change the color of dots.
+You can also change the color of all labels at once using the first optional argument,
+like |\tzcdots[text=red]...| as shown in the following example.
+
+\begin{tzcode}{.3}
+% \tzcdots: color
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzcdotradius{3pt}
+\tzcdots*[red]
+ (0,0)(1,1){\textbf{Ben}}[[blue]-90](2,1)(3,0);
+\tzcdots*[thick,blue,fill=green,text=red]
+ (1,2){A}(2,2){Ben}[[blue]-90](3,2){C}(4,2){D};(4pt)
+\tzcdots*[blue]
+ (1,3){A}(2,3){B}(3,3){C}(4,3){D};
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift} You can move the coordinates of dots by specifying |<shift coor>| option immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzcdots: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots[red] (0,0){A}(1,1)(2,1){C}(3,2){D}[0](4,0){E};
+\tzcdots*<0,1>(0,0){A}(1,1)(2,1){C}(3,2){D}[0](4,0){E};
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzdot(*)}: A single node dot}
+\label{s:tzdot}
+
+The macro \icmd{\tzdot} prints a small circle node \tikz \tzdot(0,0);, as a dot, with the \xem{diameter} (or |minimum size|) of |2.4pt|, by default.
+
+The starred version \icmd{\tzdot*} prints a filled dot \tikz \tzdot*(0,0);.
+
+\begin{tzdef}
+% syntax: minimum
+\tzdot(coor)
+% syntax: medium
+\tzdot*(<coor>){<label>}[<angle>](<dot size>)
+% syntax: full
+\tzdot*[<node opt>]<shift coor>(<coor>){<label>}[<[label opt]angle>](<dot size>)
+% defaults
+ *[ tzdot=2.4pt ]<>(<m>){}[](2.4pt)
+% the style tzdot is predefined
+% (<m>): mandatory
+\end{tzdef}
+
+|\tzdot(*)| accepts one mandatory argument, denoted by |(|\ixxw{<m>}|)|. All others are optional.
+
+The style \ixxw{tzdot} is predefined in this package as follows:
+
+\begin{tzsty}
+% style: tzdot
+\tikzset{
+ tzdot/.style={draw,circle,solid,thin,inner sep=0pt,minimum size=#1},
+ tzdot/.default=2.4pt
+}
+\end{tzsty}
+
+
+\subsection{{\normalfont\scshape Three Ways} to change the size of node dots}
+\label{ss:threeways}
+
+There are \iscw{Three Ways} to change the \xem{diameter} (or |minimum size|) of a node dot drawn by |\tzdot(*)|.
+
+\begin{enumerate}
+\item Use the predefined style |tzdot| in the first optional agrument, like |\tzdot[tzdot=5pt](0,0)|, which gives the same result as |\tzdot[minimum size=5pt](0,0)|.
+
+\begin{tztikz}
+\tzdot(0,0) % works like:
+ \path (0,0) node [tzdot=2.4pt] {}; % default size
+ % or equivalently
+ \node [tzdot,minimum size=2.4pt] at (0,0) {};
+\end{tztikz}
+
+\item The simplest way is to use the \xem{last parenthesis optional argument}, like |\tzdot(0,0)(5pt)|, which yields the same result as in |\tzdot[tzdot=5pt](0,0)|.
+If both options are used, the |tzdot| (or |minimum size|) option overwrites the last parenthesis option.
+
+\begin{tzcode}{.3}
+% \tzdot(*)
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\tzdot(0,0) \tzdot[tzdot=8pt](1,1)
+\tzdot*(2,1)(4pt) \tzdot*(3,0)(6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\item You can use the macro |\settzdotsize| to change the size (or diameter) of all node dots drawn by |\tzdot*|. It is effective within the |tikzpicture| environment unless changed again.
+
+\begin{tzcode}{.3}
+% \settzdotsize
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\settzdotsize{8pt}
+\tzdot(0,0) \tzdot(1,1)
+\tzdot*(2,1)(4pt) \tzdot*(3,0)
+\end{tikzpicture}
+\end{tzcode}
+
+\end{enumerate}
+
+\subsection{How to label}
+\label{ss:tzdot:label}
+
+You can add a label to a specified coordinate by specifying the optional argument |{<label>}| immediately after the coordinate |(<coor>)|.
+You can also change the label position by the option |[<angle>]| or |[<[label opt]angle>]| following |{<label>}|.
+
+\begin{tztikz}
+\tzdot(0,0){A}(3pt) % works like:
+ \path (0,0) node [tzdot=3pt,label={:A}] {};
+
+\tzdot*(0,0){A}[[red]0](3pt) % works like:
+ \path (0,0) node [fill,tzdot=3pt,label={[red]0:A}] {};
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzdot: labels
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot(0,0){A}
+\tzdot(1,1){B}[0](8pt)
+\tzdot*(2,1){C}[45](4pt)
+\tzdot*(3,0){D}[-90](6pt)
+\tzdot(4,3){E}[[red,draw]br](12pt) % string replacement
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{String replacement}
+(See also Section \ref{ss:string-replacement} on page \pageref{ss:string-replacement}.)
+\begin{itemize}\firmlist
+\item In \Tikz, to place labels you can use |<angle>| or the positional words such as |[above]|, |[below]|, |[center]| (\xem{not} |[centered]| for the main node option), |[below right]|, and so on.
+\item \xem{Just to avoid frequent coding errors}, from the version 2 of the |tzplot| package, you can use the abridged strings |[a]|, |[b]|, |[c]|, |[br]|, and so on.
+\item So |[[blue,draw]-45]|, |[[blue,draw]below right]|, and |[[blue,draw]br]| give the same result.
+\end{itemize}
+
+Unlike |\tzcdot|, the |\tzdot|'s label position depends on the size of a circle node. In \Tikz\ jargon, |{<label>}| is in a \iisw{label node} for a \iisw{main node} that is a circle node with no text in it, so |<label>| moves accordingly as the main node dot gets bigger or smaller.
+
+
+\subsection{How to change colors and shapes}
+\label{ss:tzdot:color}
+
+With the first optional argument |[<node opt>]|, you can change of the color or shape of dots.
+You can also change the label color using |[<label opt>]| as shown in the following example.
+
+\remark
+\begin{itemize}\firmlist
+\item |[<node opt>]| is for options of \xem{main nodes}, |[<label opt>]| is for options of \xem{label nodes}.
+\item |[<label opt>]| is used in the form of |[<[<label opt>]angle>]|.
+\end{itemize}
+
+\begin{tzcode}{.3}
+% \tzdot: color
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzdot(0,0){A}
+\tzdot*[red](1,0){\textbf{B}}[45]
+\tzdot*[red,fill=green](2,1){green}[[blue]0](2*10pt)
+\tzdot[tzdot=4*7pt](3,2){big}[center]
+\tzdot*[fill=red](4,3){D}(4*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tzdot: shape
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzdot[regular polygon](0,0){A}(10pt)
+\tzdot*[red](1,0){\textbf{B}}[45]
+\tzdot*[red,green,rectangle](2,1){green}[0](2*10pt)
+\tzdot[tzdot=4*7pt](3,2){big}[center]
+\tzdot*[fill=red,star](4,3){D}(4*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{How to move: \texttt{shift}}
+\label{ss:tzdot:shift}
+
+Dots can be shifted by specifying the optional argument |<shift coor>| immediately before |(<coor>)|. The empty shift option |<>| is not allowed.
+
+\begin{tzcode}{.3}
+% \tzdot: shift
+\begin{tikzpicture}
+\draw [help lines] (0,0) grid (4,3);
+\tzdot[regular polygon](0,0){A}(10pt)
+\tzdot*[red]<0,2>(1,0){\textbf{B}-shifted}[45] % shift
+\tzdot*[red,green,rectangle](2,1){green}[0](2*10pt)
+\tzdot[tzdot=4*7pt]<1,-1>(3,2){big}[center] % shift
+\tzdot*[fill=red,star](4,3){D}(4*3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tzdot: repeated
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\foreach \x in {0,...,4}
+ { \foreach \A in {1,2,3,4}
+ { \tzdot[blue] (\x,0)(2*\A mm) } }
+\foreach \x in {0,...,4}
+ { \foreach \A in {1,2,3,4}
+ { \tzdot[green]<1,1>(\x,0)(2*\A mm) } } % shift
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{Comparison: \protect\cmd{\tzdot} and \protect\cmd{\tzcdot}}
+\label{ss:tzdot:comparison}
+
+The most important difference between |\tzcdot| and |\tzdot| is that |\tzcdot| is affected by \Tikz's scaling factor, but |\tzdot| is not.
+This is critical when |xscale| is not equal to |yscale|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[xscale=1.6,yscale=.8]
+\tzhelplines(3,3)
+\tzcdot(0,0)(3pt) % dostorted
+\tzdot(1,0)(6pt)
+\tzcdots*(1,1)(2,1)(3,1);(2pt) % distorted
+\tzdots*(1,2)(2,2)(3,2);(4pt)
+\end{tikzpicture}
+\end{tzcode}
+
+The following table further shows the differences between them.
+%Everything else is the same for end-users.
+
+\begin{tzcode}{.3}[listing only,colback=green!10!white]
+% concept % single % multi % size control % [key=default size]
+node [circle] \tzdot \tzdots \settzdotsize [tzdot=2.4pt] % diameter
+circle \tzcdot \tzcdots \settzcdotradius [tzcdot=1.2pt] % radius
+\end{tzcode}
+
+\remark
+\begin{itemize}\firmlist
+\item In \Tikz, a `node' is `not' affected by `scaling' unless the \Tikz\ option |transform shape| is used together.
+|\tzdot| is also useful for labelling a large dot.
+ \begin{itemize}
+ \item In |\tzdot|, |<label>| is a label in a \iisw{label node} for a node dot (as a \iisw{main node}).
+ So if a main node dot gets larger or smaller, its label moves accordingly.
+ (Unlike, the labels with |\tzcdot| or |\tzcdots|.)
+ \item The position of |<label>| in |\tzcdot| does not depend on the size of dots.
+ \end{itemize}
+\item The package |tzplot| takes |\tzdot| as a \xem{standard dot}, not |\tzcdot|.
+So, you can apply the \threeways\ (on page \pageref{ss:threeways}) to change the size of any standard dots.
+\end{itemize}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzdots(*)}: Multiple node dots}
+\label{s:tzdots}
+
+\icmd{\tzdots} takes an arbitrary number of coordinates as arguments to print multiple circle node dots with the \xem{diameter} (or |minimum size|) of |2.4pt|, by default.
+
+This is a \iisw{semicolon version} macro, with the repeating pattern |(<coor>){<label>}[<angle>]|, which means that you need to type a \xem{semicolon} `|;|' at the end of the coordinate repetition. The \xem{semicolon} says, ``\xem{The repetition ends here}."
+
+\remark
+\begin{itemize}\firmlist
+\item DO NOT FORGET to enter `|;|' at the end of iteration.
+\item Without the semicolon |;|, an error occurs with the error message:
+ \begin{verbatim}
+ ! Package tzplot Error: You may have forgotten a semicolon here or above!
+ \end{verbatim}
+\end{itemize}
+
+The starred version \icmd{\tzdots*} prints multiple filled node dots.
+
+\begin{tzdef}
+% syntax: minimum
+\tzdots*(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: full
+\tzdots*[<node opt>]<shift coor> (<coor>){<label>}[<[label opt]angle>]
+ ..repeated.. (){}[] ; (<dot size>)
+% defaults
+ *[tzdot=2.4pt]<> (<m>){}[] ..repeated.. (){}[] ; (2.4pt)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzdots(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0)(1,1)(2,1)(3,2)(4,0);
+\tzdots*(0,3)(1,2)(2,2)(3,3)(4,3); % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{How to label}
+
+Each coordinate can be followed by the optional arguments |{<label>}| and |[<angle>]| to label dots. So the triple |(<coor>){<label>}[<angle>]| is the whole repeating pattern.
+(To avoid frequent coding errors, you can also use \xem{string replacement} instead of angles. See also Section \ref{ss:string-replacement} on page \pageref{ss:string-replacement}
+
+\begin{tzcode}{.3}
+% \tzdots: label
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0){A}
+ (1,1)
+ (2,1){C}[0]
+ (3,2){D}[b] % string replacement
+ (4,0){E};
+\tzdots*(0,3)(1,2){B}(2,2){C}[45](3,3)(4,3);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{How to change the size of dots}
+
+There are \threeways\ of changing the \xem{diameter} of node dots, as discussed in Section \ref{ss:threeways} on page \pageref{ss:threeways}.
+
+\begin{enumerate}
+\item The simplest way is to use the \xem{last} parenthesis optional argument, \xem{after the semicolon}.
+\item Another way is to use the style \ixxw{tzdot}, like |\tzdots[tzdot=3pt]...|.
+If both options are used the |tzdot| option style wins.
+\item You can also use the macro \icmd{\settzdotsize}.
+The effect remains within the |tikzpicture| environment unless it is changed again.
+\end{enumerate}
+
+\begin{tzcode}{.3}
+% \tzdots: size (diameter)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{3mm}
+\tzdots(0,0)(1,0){3mm};
+\tzdots*(1,1)(2,1){2mm};(2mm) % simplest
+\tzdots[tzdot=4mm](2,2)(3,2){4mm};
+\tzdots*(3,3)(4,3){3mm};
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{How to change colors}
+
+With the first optional argument |[<node opt>]| you can change the color of node dots.
+You can also change the color of each label by |[<label opt>]|.
+
+\begin{tzcode}{.3}
+% \tzdots: color
+\begin{tikzpicture}[->]
+\tzhelplines(4,3)
+\settzdotsize{6pt}
+\tzdots*[red]
+ (0,0)(1,1){\textbf{Ben}}[[blue]-90](2,1)(3,0);
+\tzdots*[thick,blue,fill=green]
+ (1,2){A}(2,2){Ben}[[red]-90](3,2){C}(4,2){D};(8pt)
+\tzdots*[blue]
+ (1,3){A}(2,3){B}(3,3){C}(4,3){D};
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+\begin{itemize}
+\item |[<node opt>]| is the option of a \iisw{main node} and |[<label opt>]| is the option of a \iisw{label node}.
+\item |[<label opt>]| is used in the form of |[<[<label opt>]angle>]|, like |[[red]90]|.
+\item You can control all labels together using |every label/.style| as in the following examples:
+\end{itemize}
+
+\begin{tzcode}{.3}
+% \tzdots: every label/.style
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{6pt}
+\tzdots*[red]
+ (0,0)(1,1){\textbf{Ben}}[[blue]-90](2,1)(3,0);
+\tzdots*[thick,blue,fill=green]
+ (1,2){A}(2,2){Ben}[[red]-90](3,2){C}(4,2){D};(8pt)
+\tikzset{every label/.style={draw,text=red}} %%
+\tzdots*[blue]
+ (1,3){A}(2,3){B}(3,3){C}(4,3){D}[0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% every label/.style
+\begin{tikzpicture}[every label/.style={draw,text=red}]
+\tzhelplines(4,3)
+\tzdots*
+ (0,0){Ace}[[font=\LARGE\ttfamily]-90]
+ (2,1){\textbf{Bob}}[[blue]135]
+ (3,2){$C_1$\\$N_o$}[[align=center]0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Shift} You can move the coordinates of dots by specifying |<shift coor>| option immediately before the first coordinate.
+The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% \tzdots: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots[red] (0,0){A}(1,1)(2,1){C}(3,2){D}[0](4,0){E};
+\tikzset{every label/.style={red}}
+\tzdots*<0,1>(0,0){A}(1,1)(2,1){C}(3,2){D}[0](4,0){E};
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%==================================
+\chapter{Coordinates}
+\label{c:coordinates}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcoor} and \protect\cmd{\tzcoor*}}
+\label{s:tzcoor}
+
+\subsection{\protect\cmd{\tzcoor}}
+\label{ss:tzcoor}
+
+For example, \icmd{\tzcoor}|(0,0)(A)| means that the coordinate |(0,0)| is named |(A)|.
+
+\begin{tztikz}
+\tzcoor(0,0)(A) % is an abbreviation of:
+ \path (0,0) coordinate (A);
+ % or
+ \coordinate (A) at (0,0);
+\end{tztikz}
+
+\begin{tzdef}
+% syntax: minimum
+\tzcoor(<coor>)(<name>)
+% syntax: medium
+\tzcoor(<coor>)(<name>){<label>}[<angle>]
+% syntax: full
+\tzcoor<shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+% defaults
+ <>(<m>)(<m>){}[]
+\end{tzdef}
+
+Here, |<m>| stands for `mandatory.' |\tzcoor| takes two mandatory arguments in parenthesis.
+
+\paragraph{How to label}
+You can put a label to a coordinate by specifying the optional arguments |{<label>}| and |[<angle>]| immediately after |(<name>)|.
+
+\begin{tztikz}
+\tzcoor(0,0)(A){$A$}[0] % works like:
+ \path (0,0) coordinate [label={0:$A$}] (A);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcoor
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(0,0)(A){$A_1$} % TikZ default: 90 or above
+\tzcoor(2,1)(B){$B_2$\\ending point}[[align=left,red]0]
+\draw (A) -- (B);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move the coordinate by specifying the optional argument |<shift coor>| before |(<coor>)|.
+The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% \tzcoor: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor<0,1>(0,0)(A){$A_1$} %%
+\tzcoor(2,1)(B){$B_2$\\ending point}[[align=left,red]0]
+\tzline(A)(B)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzcoor*}}
+\label{ss:tzcoor*}
+
+The starred version \icmd{\tzcoor*} works like |\tzcoor| with one exception. It prints a `node dot' of the size |2.4pt|, by default, at a specified coordinate.
+
+\begin{tzdef}
+% syntax: minimum
+\tzcoor*(<coor>)(<coor name>)
+% syntax: medium
+\tzcoor*(<coor>)(<coor name>){<label>}[<angle>]
+% syntax: full
+\tzcoor*[<dot opt>]<shift coor>
+ (<coor>)(<name>){<label>}[[<label opt>]<angle>](<dot size>)
+% defaults
+ *[]<>(<m>)(<m>){}[](2.4pt)
+\end{tzdef}
+
+
+\begin{tztikz}
+\tzcoor*(0,0)(A) % works like:
+ \path (0,0) coordinate (A);
+ \tzdot*(0,0)
+\end{tztikz}
+
+\begin{tztikz}
+\tzcoor(0,0)(A){$A$}[right] % works like:
+ \path (0,0) coordinate (A);
+ \tzdot*(0,0){$A$}[right]
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcoor*
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor*(0,0)(A){$A_1$} % TikZ default: 90 or above
+\tzcoor*(30:3cm)(B){$B_2$}[[draw,blue]0]
+\draw (A) -- (B);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Changing the color and size of a dot}
+
+You can change the color of a dot by specifying |[<dot opt>]|, which is, in fact, \Tikz's |node| option.
+To change the size of dots, you can apply the \threeways\ (see Subsection \ref{ss:threeways} on page \pageref{ss:threeways}).
+
+\begin{tzcode}{.3}
+% \tzcoor*: color, size
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(1,1)(A){A}
+\tzcoor*(2,1)(B){B}[0]
+\tzcoor*[red](1,2)(C){C}[[blue,draw]l] % abb
+\tzcoor*[fill=none,tzdot=5pt](3,2)(D){D}[45]
+\tzcoor*[blue,thick,fill=green](4,0)(E){E}[180](6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift} The optional argument |<shift coor>| works just like in |\tzcoor|.
+The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% \tzcoor*: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor*<0,1>(0,0)(A){$A_1$} %%
+\tzcoor*(2,1)(B){$B_2$\\end point}[[align=left,red]0]
+\tzline(A)(B)
+\end{tikzpicture}
+\end{tzcode}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcoors} and \protect\cmd{\tzcoors*}: Semicolon versions}
+\label{s:tzcoors}
+
+\subsection{\protect\cmd{\tzcoors}}
+\label{ss:tzcoors}
+
+The macro \icmd{\tzcoors} takes an \xem{arbitrary number of pairs} of coordinates and their names as arguments.
+For example, |\tzcoors(0,0)(A) (1,1)(B) (2,2)(C);| means that the coordinate |(0,0)| is represented by the name |(A)|, |(1,1)| by |(B)|, and |(2,2)| by |(C)|.
+
+\begin{tzdef}
+% syntax: minimum
+\tzcoors(<coor>)(<name>..repeated..(<coor>)(<name>) ;
+% syntax: full
+\tzcoors <shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+ ..repeated.. ()(){}[] ;
+% defaults
+ <> (<m>)(<m>){}[] ..repeated.. ()(){}[] ;
+\end{tzdef}
+
+This is a \xem{semicolon version} macro. The quadruple |(<coor>)(<name>){<label>}[<angle>]| is the whole repeating pattern.
+It is required to type a \xem{semicolon} `|;|' to indicate when the coordinate repetition ends.
+
+
+\begin{tztikz}
+\tzcoors (0,0)(A) (1,1)(B) (2,1)(C) (3,0)(D) ; % works like:
+ \path (0,0) coordinate (A)
+ (1,1) coordinate (B)
+ (2,1) coordinate (C)
+ (3,0) coordinate (D);
+\end{tztikz}
+
+\begin{tztikz}
+\tzcoors (0,0)(A) (1,1)(B) (2,1)(C){C}[0] (3,0)(D){D}[90]; % works like:
+ \path (0,0) coordinate (A)
+ (1,1) coordinate (B)
+ (2,1) coordinate [label={0:C}] (C)
+ (3,0) coordinate [label={90:D}] (D);
+\end{tztikz}
+
+You can add a label to each specified coordinate by adding the optional arguments |{<label>}| and |[<angle>]| immediately after |(<name>)|.
+
+\begin{tzcode}{.3}
+% \tzcoors
+\begin{tikzpicture}
+\tzcoors (0,0)(A){Ace}[[font=\LARGE\ttfamily]-90]
+ (2,1)(B){\textbf{Bob}}[[blue]135]
+ (3,2)(C){$C_1$\\$N_o$}[[align=center]0];
+\draw (A) -- (B) -- (C);
+\end{tikzpicture}
+\end{tzcode}
+
+By the option |<shift coor>|, all specified coordinates are shifted.
+The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% \tzcoors
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors (0,0)(A) (1,1)(B) (2,1)(C){C} (3,0)(D);
+\tzlines(A)(B)(C)(D);
+% shift
+\tzcoors <1,1> (0,0)(A) (1,1)(B) (2,1)(C){C} (3,0)(D);
+\tzlines[dashed](A)(B)(C)(D);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzcoors*}}
+\label{ss:tzcoors*}
+
+The starred version \icmd{\tzcoors*} takes an \xem{arbitrary number of pairs} of coordinates and names as mandatory arguments to print node dots at the coordinates.
+
+The full repeating pattern is |(<coor>)(<name>){<label>}[<angle>]|.
+It is required to type a \xem{semicolon} `|;|' to indicate when the iteration of coordinates ends.
+
+\begin{tzdef}
+% syntax: minimum
+\tzcoors*(<coor>)(<name>)..repeated..(<coor>)(<name>) ;
+% syntax: full
+\tzcoors*[<dot opt>]<shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+ ..repeated.. ()(){}[] ; (<dot size>)
+% defaults
+ *[]<> (<m>)(<m>){}[] ..repeated.. ()(){}[] ; (2.4pt)
+\end{tzdef}
+
+You can label each dot by specifying the optional arguments |{<label>}| and |[<angle>]| after the pair |(<coor>)(<name>)|.
+
+\begin{tzcode}{.3}
+% \tzcoors*
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors*(0,0)(A)
+ (1,1)(B){B}
+ (2,1)(C)
+ (3,3)(D){D}[0] ; % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the dot color by |[<dot opt>]| and the label color by |[<label opt>]|.
+You can apply the \threeways\ (on page \pageref{ss:threeways}) to change the dot size. The simplest way of changing the dot size is to specify the \xem{last} (even after the semicolon) parenthesis option |(<dot size>)|.
+
+\begin{tzcode}{.3}
+% \tzcoors*
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors*[red](0,0)(A)
+ (1,1)(B){B}
+ (2,1)(C)
+ (3,3)(D){D}[[blue]0] ; (6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+By specifying the optional argument |<shift coor>| immediately before the first coordinate, you can move all specified coordinates.
+The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% \tzcoors*: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{6pt}
+\tzcoors*[red] (0,0)(A)(1,1)(B)(2,1)(C)(3,3)(D);
+\settzdotsize{4pt}
+\tzcoors*[blue]<.5,0>(0,0)(A)(1,1)(B)(2,1)(C)(3,3)(D);
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzcoorsquick} and \protect\cmd{\tzcoorsquick*}: Semicolon versions}
+\label{s:tzcoorsquick}
+
+\subsection{\protect\cmd{\tzcoorsquick}}
+\label{ss:tzcoorsquick}
+
+You can see the coordinate array at a glance using \icmd{\tzcoorsquick}, which displays specified names as text at the |center| (by default) of the coordinates.
+
+\begin{tzdef}
+% syntax: minimum
+\tzcoorsquick(<coor>)(<name>)..repeated..(<coor>)(<name>) ;
+% syntax: full
+\tzcoorsquick<shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+ ..repeated.. ()(){}[] ;
+% defaults
+ <> (<m>)(<m>){}[center] ..repeated.. ()(){}[] ;
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzcoorsquick
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick(0,0)(A)
+ (1,1)(Ben)
+ (2,1)(Cate)
+ (3,2)(Daniel); % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+A label can be suppressed by the empty braces |{}|.
+You can move the coordinates by specifying |<shift coor>| immediately before the first coordinate. The \xem{empty} option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% \tzcoorsquick: shift, color
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick
+ (0,0)(A) (1,1)(Ben) (2,1)(Cate){} (3,2)(Daniel);
+\tikzset{every label/.style={blue}}
+\tzcoorsquick <0,1>
+ (0,0)(A) (1,1)(Ben) (2,1)(Cate){} (3,2)(Daniel);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzcoorsquick*}}
+\label{ss:tzcoorsquick*}
+
+The starred version \icmd{\tzcoorsquick*} prints node dots on the coordinates and displays the names |above| (or |90| degree from) the dots, by default.
+
+\begin{tzdef}
+% syntax: minimum
+\tzcoorsquick*(<coor>)(<name>)..repeated..(<coor>)(<name>) ;
+% syntax: full
+\tzcoorsquick*[<dot opt>]<shift coor>(<coor>)(<name>){<label>}[<[label opt]angle>]
+ ..repeated.. ()(){}[] ; (<dot size>)
+% defaults
+ *[ tzdot=1.2pt ]<> (<m>)(<m>){}[] ..repeated.. ()(){}[] ; (2.4pt)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tzcoorsquick*
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick*(0,0)(A) (1,1)(Ben)
+ (2,1)(Cate) (3,2)(Daniel);
+\end{tikzpicture}
+\end{tzcode}
+
+A label can be suppressed by the empty braces |{}|.
+You can change the dot size using the \threeways\ (on page \pageref{ss:threeways}).
+You can shift the coordinate by specifying |<shift coor>| immediately before the first coordinate. The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% \tzcoorsquick*: size, color, shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick*
+ (0,0)(A) (1,1)(Ben) (2,1)(Cate){} (3,2)(Daniel);
+\tikzset{every label/.style={blue}}
+\tzcoorsquick*[blue]<0,1>
+ (0,0)(A) (1,1)(Ben) (2,1)(Cate){} (3,2)(Daniel);(6pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+The first optional argument |[<dot opt>]| of |\tzcoorsquick*| is for only dots.
+You can use the \Tikz\ option |every label/.style={...}| to control all the labels together.
+You can also control each labels using |[<label opt>]| for each coordinate.
+
+\begin{tzcode}{.3}
+% \tzcoorsquick*: every label/.style
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tikzset{every label/.style={draw,red}} %%
+\tzcoorsquick*[fill=none,blue,very thick]
+ (0,0)(A)(1,1)(B-1)(2,1)(C)(3,3)(D)[[blue]-45];(8pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzgetxyval}}
+\label{s:tzgetxyval}
+
+\icmd{\tzgetxyval} extracts the values of x-coordinate and the y-coordinate \xem{in the unit of centimeter} from a specified coordinate and saves the values in the user-defined macros, so that you can use them later.
+For example, |\tzgetxyval(3,2){\xval}{\yval}| results in |\xval=3| and |\yval=2|.
+
+\begin{tzdef}
+% syntax
+\tzgetxyval(<coor>){<\macroXval>}{<\macroYval>}
+% default
+(<m>){<m>}{<m>}
+\end{tzdef}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzfn"dem"{3-(3/4)*\x}[0:4]
+\tzfn"sup"{\x}[0:4]
+% intersection point: (E)
+\tzXpoint*{dem}{sup}(E)(5pt)
+% extract x/y-coordinate from (E)
+\tzgetxyval(E){\Ex}{\Ey}
+\tzdots*(\Ex,\Ey){E}(\Ex+1,\Ey){F}(\Ex,\Ey+1){G};
+\tzdot(E)(10pt)
+\tznodeframe(2,0){x\;=\;\Ex\,cm\\ y\;=\;\Ey\,cm}
+ [font=\ttfamily\scriptsize,align=left]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{Plot Coordinates: \protect\cmd{\tzplot}: Semicolon Versions}
+\label{c:plotcoordinates}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot} and \protect\cmd{\tzplot*}: Syntax}
+\label{s:tzplot}
+
+\icmd{\tzplot} takes an \xem{arbitrary number of coordinates} as arguments. Internally, |\tzplot| uses the |plot coordinates| operation of |\Tikz|.
+
+Each |(<coor>)| can be followed by the optional arguments |{<label>}| and |[<angle>]| to label the coordinate. This is a \xem{semicolon version} and the whole repeating pattern is the triple |(<coor>){<label>}[<angle>]|. It is required to type a semicolon `|;|' to indicate when the coordinate iteration ends.
+
+The macro |\tzplot| draws connected line segments that link specified coordinates.
+
+\begin{tzdef}
+% syntax: minimum
+\tzplot(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: medium
+\tzplot(<coor>){<label>}[<angle>]..repeated..(<coor>){<label>}[<angle>] ;
+% syntax:full
+\tzplot[<opt>]{<tension>} [<plot opt>]<shift coor>"<path name>"
+ (<coor>){<label>}[<[label opt]angle>]
+ ..repeated..
+ (){}[] ; (<mark size>) <code.append>
+% defaults
+ [tzmark=2pt]{0}[smooth] <>"" (<m>){}[] ..repeated.. (){}[] ; (2pt) <>
+ - [<plot opt>] is [smooth] by default
+ - It can be changed to [smooth cycle]
+\end{tzdef}
+
+The starred version |\tzplot*| prints dot marks at specified coordinates, without drawing line segments connecting the coordinates, by default.
+
+|\tzplot*| is equivalent to |\tzplot[draw=none,mark=*]|.
+The style \ixxw{tzmark} is defined as follows:
+
+\begin{tzsty}
+% style: tzmark
+\tikzset{
+ tzmark/.style=
+ {mark options={solid,thin},mark size=#1},
+ tzmark/.default=\tzmarksize
+}
+\end{tzsty}
+
+\icmd{\tzmarksize} is the \xem{radius} of a |mark| and the default is |2pt| as in \Tikz.
+The value of |\tzmarksize| can be changed by the macro \icmd{\settzmarksize}, like |\settzmarksize{3pt}|.
+
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot*}: Dots and marks}
+\label{s:tzplot-dots}
+
+The starred version |\tzplot*| prints \Tikz\ marks (|*| by default) at specified coordinates.
+You can change the mark color and mark style using the first bracket optional argument.
+
+\begin{tztikz}
+\tzplot*(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [draw=none,mark=*] plot coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzplot*
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot*(0,0)(1,1)(2,1)(3,3);
+\tzplot*[mark=o](0,3)(1,3)(2,2)(3,1) ; % semicolon
+\tzplot*[red](0,2)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Labels, marks, and mark size}
+You can also add labels to specified coordinates with the optional arguments |{<label>}| and |[<angle>]| immediately after each |(<coor>)|.
+
+\begin{tztikz}
+\tzplot*(0,0){A}[90](1,2)(2,2)(3,3){D}[0]; % works like:
+ \draw [draw=none,mark=*] plot coordinates { (0,0)(1,1)(2,2)(3,3) }
+ (0,0) node [label={90:A}] {}
+ (3,3) node [label={0:D}] {} ;
+\end{tztikz}
+
+There are \textsc{Three Ways} to change the mark size.
+
+\begin{enumerate}
+\item The simplest way is to use the parenthesis optional argument |(<mark size>)|, \xem{immediately after the semicolon}.
+\item You can use the style |tzmark|, like |tzmark=3pt|.
+\item You can also use the macro |\settzmarksize|, which is effective until the end of |tikzpicture| environment.
+\end{enumerate}
+
+\begin{tzcode}{.3}
+% \tzplot*: label, size
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot*(0,0){A}[-135](1,1)(2,1)(3,3){D}[[blue]0];(1mm)
+\tzplot*[mark=o,tzmark=6pt](0,3)(1,3)(2,2)(3,1);
+\settzmarksize{4pt}
+\tzplot*[red](0,2){A}(1,2){B}(2,0){C}[[blue]0](3,2){D};
+\end{tikzpicture}
+\end{tzcode}
+
+\remark You can use strings such as |a|, |b|, |ar|, and so on, instead of angles, from the version 2 of the |tzplot| package. These strings are replaced by the corresponding positioning words such as |above|, |below|, |above right|, and so on. (See also Section \ref{ss:string-replacement} on page \pageref{ss:string-replacement} for more details.)
+
+\begin{tzcode}{.3}
+% \tzplot*: label: strings instead of angles
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot*(0,0){A}[bl](1,1)(2,1)(3,3){D}[[blue]r];(1mm)
+\tzplot*[mark=o,tzmark=6pt](0,3)(1,3)(2,2)(3,1);
+\settzmarksize{4pt}
+\tzplot*[red](0,2){A}(1,2){B}(2,0){C}[[blue]r](3,2){D};
+\end{tikzpicture}
+\end{tzcode}
+
+With |\tzplot*|, you can draw line segments by giving the \Tikz's option |draw| in the first bracket optional argument, like |\tzplot*[draw]|.
+
+\begin{tzcode}{.3}
+% \tzplot*: line, more marks, size
+\begin{tikzpicture}[scale=1]
+\tzhelplines(4,3)
+\settzmarksize{3pt}
+\tzplot*[draw,mark=x]
+ (0,0)(1,1)(2,1)(3,3);
+\tzplot*[blue,mark=diamond*]
+ (0,3)(1,3)(2,2)(3,1);(10pt)
+\tzplot*[draw,dashed,red,mark=heart]
+ (0,2)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+\remark In \Tikz, the |mark| shapes are affected by |scale|, |xscale|, and |yscale|.
+
+\begin{tzcode}{.3}
+% \tzplot*: marks: distorted
+\begin{tikzpicture}[yscale=.5]
+\tzhelplines(4,3)
+\settzmarksize{3pt}
+\tzplot*[draw,mark=x]
+ (0,0)(1,1)(2,1)(3,3);
+\tzplot*[blue,mark=diamond*]
+ (0,3)(1,3)(2,2)(3,1);(10pt)
+\tzplot*[draw,dashed,red,mark=heart]
+ (0,2)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move specified coordinates using the option |<shift coor>| before the first coordinate (to be precise, immediately before the option |"<path name>"| if it exists).
+The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+
+\begin{tzcode}{.3}
+% \tzplot*: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors(1,3)(A)(2,3)(B)(3,3)(C)(4,3)(D);
+\tzplot*[draw] (A){A}(B)(C)(D){D}[0];
+\tzplot*[draw,red]<-1,-1>(A){A}(B)(C)(D){D}[0];
+\tzplot*[draw,blue]<0,-3>(A){A}(B)(C)(D){D}[0];
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Extending path}
+You can use |<code.append>| as the last optional argument after a semicolon.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot*[draw](0,0)(1,1)(2,2){C}(3,2){D};
+ < arc (-90:0:1cm) node [a] {ends here!}>
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzplotAtBegin} and \icmd{\tzplotAtEnd} are also available.
+These work with |\tzplot*[draw]| and |\tzplot| to extend the paths at the beginning and at the end, respectively. Specifying |<code.append>| extends the path after |\tzplotAtEnd|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotAtBegin{(0,2) to [bend right]} % ERROR!!!
+\tzplotAtEnd{arc (90:0:1cm) node [b] {here?}}
+\tzplot*[draw,blue](0,0)(1,1)(2,2){C}(3,2){D};
+ <arc (-90:0:1cm) node [r] {ends here!}>
+\tzplot*[draw,red]<.5,1>(0,0)(1,1)(2,2){C}(3,2){D};
+ <arc (-90:0:1cm) node [r] {ends here!}>
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot}: Lines}
+\label{s:tzplot-lines}
+
+|\tzplot| draws connected line segments connecting specified coordinates.
+(By default, |tension=0|.)
+
+
+\begin{tztikz}
+\tzplot(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [tension=0] plot [smooth] coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+|\tzplot*| is equivalent to |\tzplot[draw=none,mark=*]|.
+
+
+\paragraph{Options: draw, mark, mark options, etc.}
+You can use the optional argument |[<opt>]| to change the style of lines and marks.
+
+\begin{tzcode}{.3}
+% \tzplot: line
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot (0,0)(1,1)(2,1)(3,3);
+\tzplot[dashed,mark=o](0,3)(1,3)(2,2)(3,1);
+\tzplot[red,mark=ball,mark options={ball color=purple}]
+ (0,1)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+To close the path of |\tzplot| you can use the option |smooth cycle| in the first bracket optional argument |[<opt>]| or in the second bracket optional argument |[<plot opt>]|.
+
+\begin{tzcode}{.3}
+% \tzplot: smooth cycle
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot (0,0)(1,1)(2,1)(3,3);
+\tzplot[dashed,mark=o,smooth cycle]
+ (0,3)(1,3)(2,2)(3,1);
+\tzplot[red,mark=*,mark options={blue}]
+ [smooth cycle] %% default tension=0
+ (0,1)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{Labels} You can label specified coordinates with the options |{<label>}| and |[<angle>]| immediately after each |(<coor>)|.
+
+\begin{tzcode}{.3}
+% \tzplot: label
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot(0,0){A}(1,1){B}[-90](2,1)(3,3){Da}[[draw]0];
+\tzplot[mark=o](0,3)(1,3){B}(2,2)(3,1){Db}[0];
+\tzplot[red,mark=*,draw=blue]
+ (0,1)(1,2){B}(2,0)(3,2){Dc}[[blue]0];
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift} You can also move the line segments by specifying the option |<shift coor>| before the first coordinate (to be precise, immediately before the option |"<path name>"| if it exists).
+The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% \tzplot: shift
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzcoors(0,0)(A)(1,1)(B)(2,1)(C)(3,3)(D);
+\tzplot <1,0>(A)(B)(C)(D){Da}[0];
+\tzplot[mark=o] <1,0>(0,3)(1,3)(2,2)(3,1){Db}[0];
+\tzplot*[draw,red]<1,0>(0,1)(1,2)(2,0)(3,2){Dc}[0];
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{\texttt{name path} for intersections}
+
+To find the intersection points of two lines, you may want to name the paths first, like |[name path=<path name>]| in \Tikz. With |\tzplot|, you can do it by specifying the quote optional argument |"<path name>"| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzplot: "path name"
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot[name path=Da] (0,0)(1,1)(2,1)(3,3){Da}[0];
+\tzplot[mark=o] "Db"(0,3)(1,3)(2,2)(3,1){Db}[0];
+\tzplot*[draw,red]"Dc"(0,1)(1,2)(2,0)(3,2){Dc}[0];
+% intersection points
+\tzXpoint*[gray]{Da}{Db}
+\tzXpoint*[blue]{Da}{Dc}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Extending the path}
+In order to \xem{extend a path}, formed by |\tzplot|, \xem{from the last coordinate}, you can write \Tikz\ code in the very last optional argument |<code.append>|, \xem{after the semicolon}.
+
+\begin{tzcode}{.3}
+% \tzplot: "path name"
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(6,4)
+\tzplot(0,0)(1,1)(2,1)(3,3){Da}[0];< -- (6,4) >
+\tzplot[mark=o](0,3)(1,3)(2,2)(3,1){Db}[0];(4pt)
+\tzplot[mark=ball,red](0,1)(1,2)(2,0)(3,2){Dc}[0];
+ (5pt)< to [bend left] ++(2,-2) node {ends here!} >
+\end{tikzpicture}
+\end{tzcode}
+
+You can also use \icmd{\tzplotAtBegin} and \icmd{\tzplotAtEnd} to extend the path of |\tzplot| at the beginning and at end, respectively. Specifying |<code.append>| extends the path after |\tzploAtEnd|.
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot}: Curves}
+\label{s:tzplot:curves}
+
+With |\tzplot|, the default value of |tension| is |0|.
+You can draw a curve with |\tzplot|, by specifying the optional argument |{<tension>}| before the coordinates or between the first and second bracket options (if they exist).
+
+\begin{tztikz}
+\tzplot[blue,smooth cycle]{1}(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [blue,tension=1] plot [smooth cycle] coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot[tension=1](0,0)(1,1)(2,1)(3,3);
+\tzplot[mark=o] (0,3)(1,3)(2,2)(3,1); % tension=0
+\tzplot*[draw,red,smooth cycle]{1} % tension=1
+ (0,1)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+To plot curves, the macro |\tzplotcurve| is provided.
+Basically, |\tzplotcurve| is the |tension=1| version of |\tzplot|.
+(See Section \ref{s:tzplotcurve} on page \pageref{s:tzplotcurve}.)
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplot}: Bars and combs}
+\label{s:tzplot-bars}
+
+With |\tzplot|, you can draw bars or combs, using the \Tikz\ options |ybar|, |xbar|, |ycomb|, and |xcomb|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot*[draw](0,0)(1,1)(2,1)(3,3);
+\tzplot[ybar](0,3)(1,3)(2,2)(3,1);
+\tzplot[dashed,red,mark=heart](0,1)(1,2)(2,0)(3,2);
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot[xbar](.5,2.5)(1,3)(2,2)(3,1);
+\tzplot[xbar,bar width=2mm,fill,red!50]
+ (1,2.5)(1.5,2)(2,0)(3,1.5);(3pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[yscale=1.5]
+\tzhelplines(0,-1)(4,1)
+\tzplot[ycomb,mark=*,very thick,blue]
+ (.5,.1)(1,.3)(1.5,.4)(2,.5)
+ (4,-.1)(3.5,-.3)(3,-.4)(2.5,-.5);
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.8]
+\tzhelplines(4,3)
+\tzplot[xcomb,mark=*,very thick]
+ (1,2.5)(1.5,2)(2,0)(3,1.5);
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+\begin{itemize}
+\item
+Do not use |<shift coor>| for plotting bars or combs to avoid getting unexpected results. It gives you wrong bars because |<shift coor>| moves coordinates but not bars.
+
+%\item Use the option |shift={(coor)}| to move bars.
+%\begin{tzcode}{.3}
+%% shift : shift={(1,1)}
+%\begin{tikzpicture}[scale=1]
+%\tzhelplines(4,3)
+%\tzplot*[draw]<1,1>(0,0)(1,1)(2,1)(3,3);
+%\tzplot[ybar,shift={(1,1)}](0,3)(1,3)(2,2)(3,1); %%
+%\tzplot[red,mark=heart]<1,1>(0,2)(1,2)(2,0)(3,2);
+%\end{tikzpicture}
+%\end{tzcode}
+
+\item
+It can be a mess when using the \Tikz\ option |shift={(coor)}| with the type of \xem{mixed} coordinates: \xem{native} and \xem{named} coordinates.
+
+%\begin{tzcode}{.3}
+%% \tzplot(*)
+%% shift : mixed coor : shift={(1,1)} : chaos
+%\begin{tikzpicture}[scale=1]
+%\tzhelplines(4,3)
+%\tzcoors(0,3)(A)(1,3)(B)(2,2)(C)(3,1)(D);
+%\tzcoors(0,2)(a)(1,2)(b)(2,0)(c)(3,2)(d);
+%\tzplot*[draw]<1,1>(0,0)(1,1)(2,1)(3,3);
+%\tzplot[ybar,shift={(1,1)}](A)(1,3)(C)(D); %%
+%\tzplot[dashed,red,mark=heart]<1,1>(a)(1,2)(c)(d);
+%\end{tikzpicture}
+%\end{tzcode}
+
+\end{itemize}
+
+
+
+%%-----------------------------------
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzplotcurve(*)}}
+\label{s:tzplotcurve}
+
+\icmd{\tzplotcurve} draws a curve connecting specified coordinates with |tension=1|, by default. Basically, it is equivalent to |\tzplot| with |[tension=1]|.
+
+The starred version \icmd{\tzplotcurve*} draws a curve and displays marks |*|, by default.
+Basically, this is equivalent to |\tzplot*[draw,tension=1]|.
+
+\begin{tzdef}
+% syntax: minimum
+\tzplotcurve(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: full
+\tzplotcurve*[<opt>]{<tension>} [<plot opt>]<shift coor>"<path name>"
+ (<coor>){<label>}[<[label opt]angle>]
+ ..repeated..
+ (){}[] ; (<mark size>) <code.append>
+% defaults
+ *[tzmark=2pt]{1}[smooth] <>"" (<m>){}[] ..repeated.. (){}[] ; (2pt) <>
+\end{tzdef}
+
+\begin{tztikz}
+\tzplotcurve(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [tension=1] plot [smooth] coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+\begin{tztikz}
+\tzplotcurve[blue,smooth cycle]{2}(0,0)(1,2)(2,2)(3,3); % works like:
+ \draw [blue,tension=2] plot [smooth cycle] coordinates { (0,0)(1,1)(2,2)(3,3) } ;
+\end{tztikz}
+
+Since |\tzplotcurve| is a \xem{semicolon version}, you need to enter a semicolon to indicate when the coordinate iteration ends.
+In repeating coordinates, each mandatory coordinate can have a label.
+So the whole repeating pattern is the triple |(<coor>){<text>}[<pos>]|.
+For example, |(A){here}[above]| represents |(A) node [above] {here}| in \Tikz.
+
+\paragraph{Options: lines, labels, colors, smooth cycle}
+Use the first bracket option to control the colors of lines or labels.
+
+\begin{tztikz}
+\tzplotcurve(0,0)(1,2)(2,2){A}[below](3,3){B}[right]; % works like:
+ \draw [tension=1] plot [smooth] coordinates { (0,0)(1,1)(2,2)(3,3) }
+ (2,2) node [below] {A}
+ (3,3) node [right] {B} ;
+\end{tztikz}
+
+You can change the color of all labels together by adding |[text=<color>]| to the first bracket option list.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue]
+ (0,0)(1,2){B}(2,2)(3,3)(4,1){E}[0];
+\tzplotcurve(1,.5)(2,3)(3,2)(2,1)(3,1);
+\end{tikzpicture}
+\end{tzcode}
+
+The simplest way to change the mark size is to specify |(<mark size>)| immediately after the semicolon |;|.
+To close the path of |\tzplotcurve|, you can use the \Tikz\ option |smooth cycle| in the first bracket option or in the second bracket option.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): smooth cycle, mark size
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue][smooth cycle]
+ (0,0)(1,2){B}(2,2)(3,3)(4,1){E}[0];(3pt) %%
+\tzplotcurve*[smooth cycle](1,.5)(2,3)(3,2)(2,1)(3,1);
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% abridges strings: label position
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue][smooth cycle]
+ (0,0)(1,2){B}[[red]l](2,2)(3,3)(4,1){E}[[draw]r];(3pt)
+\tzplotcurve*[smooth cycle](1,.5)(2,3)(3,2)(2,1)(3,1);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Tension}
+You can change the value of |tension| (|tension=1| by default) by specifying the option |{<tension>}| before the coordinates or between the two bracket options if they exist.
+
+\begin{tzcode}{.3}
+% \tzplotcurve: tension
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(.5,.5)(A)
+\tzplotcurve[blue]{2}(1,3)(A)(4,0);
+\tzplotcurve[thick](1,3)(A)(4,0); % default: tension=1
+\tzplotcurve[red]{.5}(1,3)(A)(4,0);
+\tzplotcurve[dashed]{0}(1,3)(A)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Shift} Use the optional argument |<shift coor>| before the first coordinate (to be precise, immediately before |"<path name>"|, if it exists).
+The empty shift option |<>| is not allowed.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors(0,0)(A)(1,2)(B)(2,2)(C)(3,3)(D)(4,1)(E);
+\tzplotcurve*[red,text=blue,smooth cycle]
+ <0,1>(A)(B){B}(C)(D)(E){E}[0];(3pt) %%
+\tzplotcurve*[smooth cycle]
+ (1,.5)(2,3)(3,2)(2,1)(3,1);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Extending the path} In order to extend the path created by |\tzplotcurve(*)| from the last coordinate, you can directly write \Tikz\ code in the very last optional argument |<code.append>|, after the semicolon.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): <code.append>
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue,thick]
+ (0,0)(1,2){B}(2,2)(3,3)(4,1){E}[-45];(3pt)
+ < arc (-90:90:1cm) node [above] {up} > %%
+\tzplotcurve[dashed]
+ (1,.5)(2,3)(3,2)(2,1)(3,1);
+ < -- ++(-1,-1) node [below] {down} > %%
+\end{tikzpicture}
+\end{tzcode}
+
+You can also use |<--cycle>| to \xem{close} the path \xem{with a straight line} from the last coordinate to the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): <--cycle>
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue]
+ (0,0)(1,2)(2,2)(3,3)(4,1){A}[right] ; (3pt)<--cycle>
+\tzplotcurve
+ (1,.5)(2,3)(3,2)(2,1)(3,1) ; <--cycle>
+\end{tikzpicture}
+\end{tzcode}
+
+You can also use \icmd{\tzplotcurveAtBegin} and \icmd{\tzplotcurveAtEnd} to extend the path of |\tzplotcurve| at the beginning and at the end, respectively.
+Specifying |<code.append>| extends the path after |\tzplotcurveAtEnd|.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve*[red,text=blue]
+ (0,0)(1,2){B}(2,2)(3,3)(4,1){E}[0];
+\tzplotcurveAtBegin{(0,2) |-} % ERROR!!!
+\tzplotcurveAtEnd{arc (180:270:1cm) node {End!}}
+\tzplotcurve(1,.5)(2,3)(3,2)(2,1)(3,1);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{\texttt{name path} for intersection points}
+You can name the path of |\tzplotcurve| by specifying the option |"<path name>"| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzplotcurve(*): name path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve[blue]
+ "IC"(.5,3)(1.5,1.2)(4,.5){$u$}[0];
+\tzplot[draw=red]
+ "bgt"(0,3)(4,0){budget}[-90];
+% intersection points
+\tzXpoint{IC}{bgt}(K)
+\tzdots*(K){$A_1$}[30](K-2){$A_2$};
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{Nodes}
+\label{c:nodes}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznode} and \protect\cmd{\tznode*}}
+\label{s:tznode}
+
+The macro \icmd{\tznode} allows you to put \xem{text} at a specified \xem{coordinate}. |\tznode| expects two mandatory arguments: |(<coor>)| and |{<text>}|.
+You can also \xem{optionally} name a node so that you can refer to the \iisw{node coordinate} later.
+
+The starred version \icmd{\tznode*} is equivalent to |\tznode[draw]|, which draws the perimeter of the specified node. The default node shape is a |rectangle|.
+
+\begin{tzdef}
+% syntax: minimal
+\tznode(<coor>){<text>}
+% syntax: full
+\tznode[<opt>]<shift coor>(<coor>)(<node name>){<text>}[<node opt>]<node.code>
+% defaults: two mandatory arguments
+ []<>(<m>)(){<m>}[]<>
+\end{tzdef}
+
+\begin{tztikz}
+\tznode(0,0){text} % works like:
+ \path (0,0) node {text};
+ % or
+ \node at (0,0) {text};
+\end{tztikz}
+
+\begin{tztikz}
+\tznode[draw] (0,0)(A){text}[above right] % works like:
+ \node [draw] (A) at (0,0) [above right] {text};
+\end{tztikz}
+
+|\tznode*| prints the perimeter of a node, which is a |rectangle| by default.
+
+\begin{tzdef}
+% syntax: minimal
+\tznode*(<coor>){<text>}
+% syntax: full
+\tznode*[<opt>]<shift coor>(<coor>)(<name>){<text>}[<node opt>]<node.code>
+% defaults
+ *[draw]<>(<m>)(){}[]<>
+\end{tzdef}
+
+\begin{tztikz}
+\tznode* (0,0)(A){text}[above right] % works like:
+ \node [draw] (A) at (0,0) [above right] {text};
+\end{tztikz}
+
+\paragraph{Putting text} You can use \Tikz\ options in the first bracket optional argument |[<opt>]| or the second bracket option |[<node opt>]| to put text with different colors, fonts, and so on.
+
+\begin{tzcode}{.3}
+% \tznode(*)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode(1,1){text}
+\tznode(2,2){another\\text}[align=left]
+\tznode*(3,1){\textbf{text}}
+\tznode*[blue](3,0){\scshape Text}[r] % right
+\tznode*(4,2){another\\text}[align=center,font=\itshape]
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Abbreviations} You can use \xem{abbreviations} (or aliases) such as |a| for |above|, |l| for |left|, |ar| for |above right|, |bl| for |below left|, and so on to indicate where the \xem{text} of a \xem{main node} is placed. (See also Section \ref{s:stylenames} on page \pageref{s:stylenames}.)
+
+\begin{quote}
+\remark
+\begin{itemize}\firmlist
+\item A \iisw{label node} is placed by angles or the corresponding positioning words.
+\item A \iisw{main node} is placed by the placement words or their aliases.
+\item You cannot use angles to place main nodes.
+\end{itemize}
+\end{quote}
+
+
+\begin{tzcode}{.3}
+% \tznode(*): main node, label node
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot*(1,1)
+\tznode*(1,1){A}[ar]
+\tznode*[red](1,1){B}[b]
+\tznode(1,1){C}[l]
+\tznode*[inner sep=0pt,text=blue,scale=2]
+ (3,2){Text}[label=180:Left,pin=45:Above Right]
+\tznode*[inner sep=0pt,text=red,scale=2]
+ (3,2){Text}[b=2cm] %% below=2cm
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Naming nodes}
+You can name a node at a specified coordinate |(<coor>)| by specifying |(<name>)| immediately after the coordinate. You can use the node name as a \iisw{node coordinate}.
+
+\begin{tzcode}{.3}
+% \tznode(*): name nodes
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode*(1,1)(A){A}
+\tznode*[fill=blue,text=yellow](2,3)(B){B}
+\tznode*[circle,text=red](4,1)(C){C}
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Shift}
+You can move the coordinates by specifying the option |<shift coor>| immediately before the coordinate |(<coor>)|.
+The empty shift option |<>| is not allowed.
+
+\begin{tzcode}{.3}
+% \tznode(*): shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode*<-1,0>(1,1)(A){A}
+\tznode*[fill=blue,text=yellow]<1,-1>(2,3)(B){B}
+\tznode*[circle,text=red]<-2,-1>(4,1)(C){C}
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Repetition: \texttt{foreach}}
+The \xem{last} optional argument |<node.code>| can be used to iterate over to place multiple nodes.
+
+\begin{tzcode}{.3}
+% \tznode(*): foreach, shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode(\x,0){\x}
+ < foreach \x in {1,2,3} >
+\tznode*<1,2>(\x,0){\x}[circle,blue,fill=yellow]
+ < foreach \x in {1,2,3} >
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tznode(\x,0){\x}<foreach \x in {1,2,3}> % works like
+ \node foreach \x in {1,2,3} at (\x,0) {\x};
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tznode: foreach
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode(\x,\y){$P_{\x\y}$}
+ < foreach \x in {1,2,3,4}
+ foreach \y in {1,2,3} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodes} and \protect\cmd{\tznodes*}: Semicolon versions}
+\label{s:tznodes}
+
+\icmd{\tznodes} accepts any number of \xem{mandatory} pairs of coordinates and their names to defined node coordinates at specified coordinates.
+
+\begin{tzdef}
+% syntax: minimum
+\tznodes(<coor>)(<node name>)..repeated..(<coor>)(<node name>) ;
+% syntax: medimum
+\tznodes(<coor>)(<node name>){<text>}[<node opt>]..repeated..()(){}[] ;
+% syntax: full
+\tznodes[<every node opt>]<shift coor>
+ (<coor>)(<node name>){<text>}[<node opt>]..repeated..()(){}[] ;
+% defaults
+ [] <> (<m>)(<m>){}[]..repeated..()(){}[] ;
+ *[draw]<> (<m>)(<m>){}[]..repeated..()(){}[] ;
+\end{tzdef}
+
+Each pair of a coordinate and a node coordinate name can be followed by the optional arguments |{<text>}| and |[<node opt>]| to print node text.
+Since this is a semicolon version, it is required to type a semicolon |;| to indicate when the repetition ends.
+|\tznodes| works similarly to |\tzcoors|, but the former uses main nodes and the latter uses label nodes.
+
+The starred version \icmd{\tznodes*} is equivalent to |\tznodes[draw]|. That is, all node perimeters are drawn.
+
+\begin{tzcode}{.3}
+% \tznodes
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodes(0,0)(A){A}
+ (1,1)(B){B}
+ (2,1)(C){C}[r]
+ (3,2)(D){D}[b]
+ (4,0)(E){E}; % semicolon
+\tzlines(A)(B)(C)(D)(E);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzdef}
+% syntax: minimum
+\tznodes(<coor>)(<node name>)..repeated..(<coor>)(<node name>) ;
+% syntax: medimum
+\tznodes(<coor>)(<node name>){<text>}[<node opt>]..repeated..()(){}[] ;
+% syntax: full
+\tznodes[<every node opt>]<shift coor>
+ (<coor>)(<node name>){<text>}[<node opt>]..repeated..()(){}[] ;
+% defaults
+ [] <> (<m>)(<m>){}[]..repeated..()(){}[] ;
+ *[draw]<> (<m>)(<m>){}[]..repeated..()(){}[] ;
+\end{tzdef}
+
+
+
+\begin{tzcode}{.3}
+% \tznodes*: retangle nodes (default)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodes*(0,0)(A){A}
+ (1,1)(B){B}
+ (2,1)(C){C}[r]
+ (3,2)(D){D}[b]
+ (4,0)(E){E}; % semincolon
+\tzlines(A)(B)(C)(D)(E);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tznodes*: ellipse nodes
+\begin{tikzpicture}
+\tzhelplines*(5,4)
+\tznodes*[ellipse,fill=yellow,text=blue]
+ (0,0)(A){Ann}
+ (1,1)(B){Bryn}
+ (2,0)(C){C}[r]
+ (3,2)(D){Donald}[b,font=\scshape]
+ (4,0)(E){End!}[rectangle,fill=green];
+\tzlines(A)(B)(C)(D)(E);
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tznodes: shift
+\begin{tikzpicture}
+\tzhelplines*(5,4)
+\tznodes*[ellipse,fill=yellow,text=blue]
+ <1,1>(0,0)(A){Ann}
+ (1,1)(B){Bryn}
+ (2,0)(C){C}[r]
+ (3,2)(D){Donald}[b,font=\scshape]
+ (4,0)(E){End!}[rectangle,fill=green];
+\tzlines(A)(B)(C)(D)(E);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodedot(*)}}
+\label{s:tznodedot}
+
+\icmd{\tznodedot} names a node and prints a circle node dot (of the size |2.4pt|, by default).
+|\tznodedot| is basically the same as |\tzdot|, except for one thing.
+|\tznodedot| names a node.
+
+The starred version \icmd{\tznodedot*} prints a filled circle node dot (of the size |2.4pt|, by default), just like |\tzdot*|. But it \xem{optionally} names a node.
+
+\begin{tzdef}
+% syntax: medium
+\tznodedot(<coor>)(<node name>){<label>}[<angle>]
+% syntax: full
+\tznodedot*[<opt>]<shift coor>
+ (<coor>)(<node name>){<label>}[<[label opt]angle>] (<dot size>)
+% defaults
+ [tzdot] <>(<m>)(){}[](2.4pt)
+ *[tzdot,fill]<>(<m>)(){}[](2.4pt)
+\end{tzdef}
+
+Since |\tznodedot(*)| prints a node dot, its |<label>| is placed by |<angle>|.
+
+\begin{tztikz}
+\tznodedot*(1,1)(A){Ace}[180] % works like:
+ \path (1,1) node (A) [tzdot,fill,label={180:Ace}] {} ;
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tznodedot(*): label, color
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodedot(0,0)
+\tznodedot(1,1)(A){A}[180]
+\tznodedot*(2,3)(B){\textbf{B}}
+\tznodedot[rectangle](4,1)(C){C}[[red]0]
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+You can apply the \threeways\ (on page \pageref{ss:threeways}) to change the size of node dots.
+The simplest way is to use the last parenthesis option |(<dot size>)|.
+
+\begin{tzcode}{.3}
+% \tznodedot(*): size
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{5pt} %%
+\tznodedot(1,1)(A){A}[180]
+\tznodedot*(2,3)(B){B}
+\tznodedot[rectangle](4,1)(C){C}[0](10pt) %%
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+
+You can move the coordinates of dots by specifying the |<shift coor>| option immediately before the coordinate.
+The empty shift option |<>| is not allowed.
+
+\begin{tzcode}{.3}
+% \tznodedot(*): shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{5pt}
+\tznodedot(1,1)(A){A}[180]
+\tznodedot*(2,3)(B){B}
+\tznodedot[rectangle]<-1,-1>(4,1)(C){C}[0](10pt) %%
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+You can use the abridges strings instead of angles. (See also Section \ref{ss:string-replacement} on page \pageref{ss:string-replacement}.)
+
+\begin{tzcode}{.3}
+% abridged strings: label position
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\settzdotsize{5pt}
+\tznodedot(1,1)(A){A}[[draw,blue]l]
+\tznodedot*(2,3)(B){B}
+\tznodedot[rectangle]<-1,-1>(4,1)(C){C}[br](10pt) %%
+\tzline[->](A)(B)
+\tzto[->,bend left,dashed](B)(C)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodedots(*)}: Semicolon versions}
+\label{s:tznodedots}
+
+\icmd{\tznodedots} accepts any number of \xem{mandatory} pairs of coordinates and their names to print multiple node circle dots at specified coordinates.
+It works just like |\tzdots|, for one exception. It names multiple node coordinates.
+Everything else is the same as in |\tzdots|.
+
+The starred version \icmd{\tznodedots*} prints filled node circle dots.
+
+\begin{tzdef}
+% syntax: minimum
+\tznodedots(<coor>)(<node name>)..repeated..(<coor>)(<node name>) ;
+% syntax: full
+\tznodedots[<dot opt>]<shift coor>
+ (<coor>)(<node name>){<label>}[<[label opt]angle>]
+ ..repeated.. ()(){}[] ; (<dot size>)
+% defaults
+ [tzdot=2.4pt] <> (<m>)(<m>){}[] ..repeated.. ()(){}[] ; (2.4pt)
+ *[tzdot=2.4pt,fill]<> (<m>)(<m>){}[] ..repeated.. ()(){}[] ; (2.4pt)
+\end{tzdef}
+
+
+
+\begin{tzcode}{.3}
+% \tznodedots: label
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodedots(0,0)(A){A}
+ (1,1)(B)
+ (2,1)(C){C}[0]
+ (3,2)(D){D}[-90]
+ (4,0)(E){E} ; % semicolon
+\tzlines[red](A)(B)(C)(D)(E);
+\tznodedots*
+ (0,3)(A)(1,2)(B){B}(2,2)(C){C}[45](3,3)(D)(4,3)(E);
+\tzlines(A)(B)(C)(D)(E);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+The simple first bracket option of |\tznodedots(*)| controls dots rather than labels.
+If you want to control all the labels, you can use \Tikz's |every label| style as follows:
+
+\begin{tzcode}{.3}
+% every label/.style
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\begin{scope}[every label/.style={draw,text=red}]
+\tznodedots*[green]
+ (0,0)(Ace){Ace}[[font=\LARGE\ttfamily]-90]
+ (2,1)(Bob){\textbf{Bob}}[[blue]135]
+ (3,2)(Cate){$C_1$\\$N_o$}[[align=center]0]
+ (4,0)(D){Done!};(5pt)
+\end{scope}
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\remark Comparison of connecting nodes and coordinates:
+
+
+\begin{tzcode}{.3}
+% connecting \tznodedots
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodedots(0,0)(A){A}
+ (1,1)(B)
+ (2,1)(C){C}[[red]-90]
+ (3,2)(D){D}[[draw,blue]a]
+ (4,0)(E){E}; (6pt)
+\tzlines[thick](A)(B)(C)(D)(E); % connects nodes
+\end{tikzpicture}
+\end{tzcode}
+
+While the previous example shows that |\tzlines| connects nodes,
+the following example shows that |\tzlines| connects coordinates.
+
+
+\begin{tzcode}{.3}
+% connecting \tzcoors
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors*[fill=none](0,0)(A){A}
+ (1,1)(B)
+ (2,1)(C){C}[[red]-90]
+ (3,2)(D){D}[[draw,blue]a]
+ (4,0)(E){E}; (6pt)
+\tzlines[thick](A)(B)(C)(D)(E); % connects coordinates
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodeframe} and \protect\cmd{\tznodeframe*}}
+\label{s:tznodeframe}
+
+\icmd{\tznodeframe} draws and \xem{optionally} names a rectangle node with (black, by default) text in it.
+
+%\icmd{\tznoderectangle} and \icmd{\tznodebox} are aliases of |\tznodeframe|.
+
+\begin{tzdef}
+% syntax:
+\tznodeframe[<opt>](<coor>)(<node name>){<text>}[<node opt>]
+% defaults
+ [draw]<>(<m>)(){}[text=black]
+\end{tzdef}
+
+\begin{tztikz}
+\tznodeframe(2,1)(A){Here}[a] % works like
+ \node [draw,rectangle] (A) at (2,1) [above] {Here} ;
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tznodeframe
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodeframe(0,0)(A)
+\tznodeframe(4,2)(B)[circle]
+\tzline[blue,thick](A)(B)
+\tznodeframe[scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+% \tznodeframe: fill (opacity=1)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodeframe(0,3)
+\tznodeframe(0,0)(A)
+\tznodeframe(4,2)(B)[circle]
+\tzline[blue,thick](A)(B)
+\tznodeframe[fill=green,scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+The starred version |\tznodeframe*| fills the rectangle with color (|black!50| by default) with |fill opacity=.3| and |text opacity=1|, by default.
+
+%\icmd{\tznoderectangle*} and \icmd{\tznodebox*} are aliases of |\tznodeframe*|.
+
+\begin{tzdef}
+% syntax:
+\tznodeframe*[<opt>]<shift coor>
+ (<coor>)(<node name>){<text>}[<node opt>]{<fill opacity>}
+% defaults
+ *[fill=black!50,fill opacity=.3,text opacity=1] <>
+ (<m>)(){}[draw=black,text=black]{.3}
+\end{tzdef}
+
+\remark
+|\tznodeframe| works very similar to |\tznode|, but their `starred versions' work differently.
+While |\tznode*| draws the perimeter of a node, |\tznodeframe*| fills a node with color.
+
+\begin{tzcode}{.3}
+% \tznodeframe*: opacity=.3 (by default)
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodeframe(0,0)(A)
+\tznodeframe(4,2)(B)[circle]
+\tzline[blue,thick](A)(B)
+\tznodeframe*[green,scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tznoderectangle} and \icmd{\tznodebox} are aliases of |\tznodeframe|.
+\icmd{\tznoderectangle*} and \icmd{\tznodebox*} are aliases of |\tznodeframe*|.
+
+
+You can change the |fill opacity| of \icmd{\tznodeframe*} by specifying the last curly brace option |{<fill opacity>}|. You can also move the node by specifying the |<shift coor>| option immediately before the coordinate.
+(The \xem{empty} shift option |<>| is \xem{not allowed}.)
+
+
+\begin{tzcode}{.3}
+% \tznodeframe(*): opacity, shift
+\begin{tikzpicture}
+\tzhelplines[solid](4,3)
+\tznodebox(0,0)
+\tznoderectangle*(1,2)(A){A}{.1} % opacity
+\tznodeframe[fill=yellow](2,2)(B){B}
+\tznodeframe*[red](3,2)(C){Cat}
+\tznodebox[fill=green]<-1,-2>(4,2)(D){Dog} % shift
+\tzto[->,bend left=45](A.north)(C.90)
+\tzto[->,bend right=45,dashed](B.-135)(D.west)
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+In addition to using the option |{<fill opacity>}|, you can use a macro to change the default value.
+\begin{itemize}
+\item The default fill opacity can be changed by the macro \icmd{\settzfillopacity}.
+\item
+The default fill color is |black!50|. You can use the macro \icmd{\settzfillcolor} to change the default fill color.
+\item With |\tznodeframe|, you can change the color of the perimeter and text with the second bracket option |[<node opt>]|.
+\end{itemize}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodecircle} and \protect\cmd{\tznodecircle*}}
+\label{s:tznodecircle}
+
+\icmd{\tznodecircle} works just like |\tznodeframe| but with a circle node.
+
+\begin{tzdef}
+% syntax
+\tznodecircle[<opt>]<shift coor>(<coor>)(<node name>){<text>}[<node opt>]
+% defaults
+ [draw,circle]<>(<m>)(){}[text=black]
+\end{tzdef}
+
+\icmd{\tznodecircle*} works just like |\tznodeframe*| but with a circle node.
+
+\begin{tzdef}
+% syntax
+\tznodecircle*[<opt>]<shift coor>
+ (<coor>)(<node name>){<text>}[<node opt>]{<fill opacity>}
+% defaults
+ *[circle,fill=black!50,fill opacity=.3,text opacity=1] <>
+ (<m>)(){}[draw=black,text=black]{.3}
+\end{tzdef}
+
+\begin{tzcode}{.3}
+% \tznodecircle
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodecircle(0,0)(A)
+\tznodecircle(4,2)(B)[circle]
+\tzline[red,thick](A)(B)
+\tznodecircle[blue,scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the |fill opacity| of |\tznodecircle*| by specifying the last curly brace option |{<fill opacity>}| or using |\settzfillopacity|. You can also move the node by specifying the |<shift coor>| option immediately before the coordinate.
+The \xem{empty} shift coordinate option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% opacity, shift
+\begin{tikzpicture}
+\tzhelplines[solid](4,3)
+\tznodecircle(0,0)
+\tznodecircle*(1,2)(A){A}{.1} % opacity
+\tznodecircle[fill=yellow](2,2)(B){B}
+\tznodecircle*[red](3,2)(C){Cat}
+\tznodecircle[fill=green]<-1,-2>(4,2)(D){Dog} % shift
+\tzto[->,bend left=45](A.north)(C.90)
+\tzto[->,bend right=45,dashed](B.-135)(D.west)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tznodeellipse} and \protect\cmd{\tznodeellipse*}}
+\label{s:tznodeellipse}
+
+\icmd{\tznodeellipse} works just like |\tznodeframe| but with an ellipse node.
+
+\begin{tzdef}
+% syntax:
+\tznodeellipse[<opt>]<shift coor>(<coor>)(<node name>){<text>}[<node opt>]
+% defaults
+ [ellipse]<>(<m>)(){}[text=black]
+\end{tzdef}
+
+The starred version \icmd{\tznodeellipse*} works just like |\tznodeframe*| but with an ellipse node.
+
+\begin{tzdef}
+% syntax:
+\tznodeellipse*[<opt>]<shift coor>
+ (<coor>)(<node name>){<text>}[<node opt>]{<fill opacity>}
+% defaults
+ *[ellipse,fill=black!50,fill opacity=.3,text opacity=1] <>
+ (<m>)(){}[draw=black,text=black]{.3}
+\end{tzdef}
+
+
+\begin{tzcode}{.3}
+% \tznodeellipse
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznodeellipse(0,3)
+\tznodeellipse(0,0)(A)
+\tznodeellipse(4,2)(B)[circle]
+\tzline[blue,thick](A)(B)
+\tznodeellipse[scale=1.5](2,1){Node frame}
+ [label=180:Left, pin=-45:pin]
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tznodeoval} and \icmd{\tznodeoval*} are aliases of |\tznodeellipse| and |\tznodeellipse*|, respectively.
+
+You can change the |fill opacity| of |\tznodeellipse*| by specifying the last curly brace option |{<fill opacity>}|. You can also move the node by specifying the |<shift coor>| option immediately before the coordinate.
+The \xem{empty} shift option |<>| is \xem{not allowed}.
+
+\begin{tzcode}{.3}
+% opacity, shift
+\begin{tikzpicture}
+\tzhelplines[solid](4,3)
+\tznodeellipse(0,0)
+\tznodeoval*(1,2)(A){A}{.1} % opacity
+\tznodeoval[fill=yellow](2,2)(B){B}
+\tznodeellipse*[red](3,2)(C){Cat}
+\tznodeellipse[fill=green]<-1,-2>(4,2)(D){Dog} % shift
+\tzto[->,bend left=45](A.north)(C.90)
+\tzto[->,bend right=45,dashed](B.-135)(D.west)
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{Lines}
+\label{c:lines}
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzline}: Connecting two points}
+\label{s:tzline}
+
+\icmd{\tzline} connects two points with a straight line.
+
+\begin{tzdef}
+% syntax: miminum
+\tzline(<coor1>)(<coor2>)
+% syntax: medium
+\tzline[<opt>](<coor1>){<text1>}[<node opt1>]
+ (<coor2>){<text2>}[<node opt2>]
+% syntax: full
+\tzline[<opt>]<shift coor>"<path name>"
+ (<coor1>){<text1>}[<node opt1>]
+ (<coor2>){<text2>}[<node opt2>]<code.append>
+% defaults
+ []<>""(<m>){}[above](<m>){}[]<>
+\end{tzdef}
+
+
+\begin{tztikz}
+\tzline(0,1)(2,1) % works like:
+ \draw (0,1) -- (2,1);
+\end{tztikz}
+
+
+\subsection{Line styles}
+\label{ss:tzline:linestyles}
+
+You can use the first optional argument |[<opt>]| to control the line styles.
+
+\begin{tztikz}
+\tzline[blue](0,1)(2,1) % works like:
+ \draw [blue] (0,1) -- (2,1);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzline
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->](0,0)(3,3)
+\tzline[<->](0,2)(3,0)
+\tzline[dashed](1,2)(4,0)
+\tzdots*(1,2)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{Adding text}
+\label{ss:tzline:addingtext}
+
+You can add text by specifying the optional arguments |{<text>}| and |[<node opt>]|.
+
+\paragraph{Text next to the line}
+With the options |{<text1>}[<node opt1>]| \xem{in-between} two coordinates, you can add text next to the line, with the option |[above,midway]| by default.
+
+\begin{tztikz}
+\tzline[blue](0,1){my line}[sloped](2,1) % works like:
+ \draw [blue] (0,1) -- node [above,sloped] {my line} (2,1) ;
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzline: text next to line
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline(0,0){Above}(4,0) % default [above]
+\tzline[blue](0,1){Near end}[b,near end](4,1) % below
+\tzline[->](0,2){Sloped}[sloped](3,3) % default [above]
+\end{tikzpicture}
+\end{tzcode}
+
+You can use the \xem{abbreviations} (or aliases) of \Tikz\ basic placement options such as |a| for |above|, |bl| for |below left|, and so on. (For more details, see page \pageref{abbreviations}.)
+
+
+\paragraph{Text at or around the last coordinate}
+
+You can also add text at (by default) or around the second coordinate by specifying |{<text2>}| and |[<node opt2>]| immediately \xem{after} the second coordinate.
+
+\begin{tztikz}
+\tzline[blue](0,1)(2,1){my line}[r] % works like:
+ \draw [blue] (0,1) -- (2,1) node [right] {my line};
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzline
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->](0,0)(3,3){\textbf{line A}}[r]
+\tzline[<->](0,2)(3,0){line B}[red,draw=blue,b=1mm]
+\tzline[dashed](1,2){dashed}[sloped](4,0){line C}[ar]
+\tzdots*(1,2)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+%\subsection{Relative coordinates: \texttt{+} or \texttt{++}}
+%\label{ss:tzline:relative}
+%
+%You can make the second coordinate relative to the first.
+%You can even select `|+| relative' or `|++| relative' by specifying the option |<+>| or |<++>| immediately before the second coordinate.
+%
+%\begin{tztikz}
+%\tzline+(0,0)<+>(2,1) % works like:
+% \draw (1,1) -- + (2,1);
+%\end{tztikz}
+%
+%\begin{tzcode}{.3}
+%% \tzline
+%\begin{tikzpicture}
+%\tzhelplines(4,3)
+%\tzline[blue,->](0,0) (3,3) {A}[r]
+%\tzline[<->] (0,2){b} <+>(3,-2){B}[r]
+%\tzline[dashed] (1,2){c}<++>(3,-2){C}[r]
+%\tzdots*(1,2)(4,0);
+%\end{tikzpicture}
+%\end{tzcode}
+%
+%Notice that, with |\tzline|, |<+>| and |<++>| make no difference.
+%But with the macro |\tzlines| it is not the case.
+%
+%\remark
+%Notice that using |<+>| and |<++>| makes no difference in |\tzline|.
+%But it is not the case with the macro |\tzlines| that connects multiple coordinates.
+
+\subsection{Moving lines: \texttt{shift}}
+\label{ss:tzline:shift}
+
+You can move the line generated by |\tzline| by specifying the option |<shift coor>| before the first coordinate (to be precise, immediately before the option |"<path name>"|, which is put immediately before the first coordinate, if it exists).
+The empty shift coor |<>| is not allowed.
+
+\begin{tzcode}{.3}
+% \tzline: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->] (0,0)(3,3){A}[r]
+\tzline[blue] <1,0>(0,0)(3,3){A}[r]
+\tzline[dashed] (1,2)(4,0){C}[r]
+\tzline[dashed]<-.5,-.5>(1,2)(4,0){C}[r]
+\tzdots*(1,2)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{Extending paths}
+\label{ss:tzline:extendingpath}
+
+You can extend the path of |\tzline| from the last coordinate, by writing \Tikz\ code in the last optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzline: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->](0,0)(3,3)<arc(0:-60:1cm)>
+\tzline[dashed,->](1,2)(4,0)
+ <to[bend left] ++(-4,1) node [a] {ends here!}>
+\end{tikzpicture}
+\end{tzcode}
+
+You can also use \icmd{\tzlineAtBegin} and \icmd{\tzlineAtEnd} to extend a path of |\tzline| at the beginning and at end, respectively.
+Specifying |<code.append>| extends the path after |\tzlineAtEnd|.
+
+\begin{tzcode}{.3}
+% \tzline: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->](0,0)(3,3)<arc(0:-60:1cm)>
+\tzlineAtBegin{(2,3) -|}
+\tzlineAtEnd{ arc (-90:90:.5) node [a] {here?} }
+\tzline[dashed,->](1,2)(4,0)
+ < to[bend left] ++(-4,1) node [a] {ends here!} >
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{Naming paths: Intersection points}
+\label{ss:tzline:namepath}
+
+When you specify the option |"<path name>"| immediately before the first coordinate, it works like |[name path=<path name>]| in the option list of |[<opt>]|.
+You can use this name of path to find intersection points.
+
+\begin{tzcode}{.3}
+% \tzline+: name path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue,->] "dem" (0,0)(3,3){demand}[r]
+\tzline[dashed,->]"supp"(1,2)(4,0){supply}[ar]
+% intersection point
+\tzXpoint*{dem}{supp}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzline+}: Relative coordinates}
+\label{s:tzline+}
+
+The \iisw{plus version} \icmd{\tzline+} takes the second coordinate |(<coor2>)| relative (with |++|) to the first coordinate |(<coor1>)|.
+%That is, |\tzline+(A)(B)| is equivalent to |\tzline(A)<++>(B)|.
+
+\xem{Everything else is the same as in} |\tzline|.
+
+\begin{tzdef}
+% syntax: full
+\tzline+[<opt>]<shift coor>"<path name>"
+ (<coor1>){<text1>}[<node opt1>]
+ (<coor2>){<text2>}[<node opt2>]<code.append>
+% defaults
+ +[]<>""(<m>){}[above](<m>){}[]<>
+\end{tzdef}
+
+
+\begin{tztikz}
+\tzline+(0,1)(2,1) % works like:
+ \draw (0,1) -- ++ (2,1);
+\end{tztikz}
+
+\begin{tztikz}
+\tzline+[dashed]"AA"(0,1){A}[red](2,1){B}[right,blue] % works like:
+ \draw [dashed,name path=AA]
+ (0,1) -- node [red] {A} ++ (2,1) node [right,blue] {B};
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzline+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline+[blue,->](0,1)(3,2) {A}[r]
+\tzline+[<->] (0,2){b}(3,-2){B}[r]
+\tzline+[dashed]<1,0>(0,2){b}(3,-2){B}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+% \tzline+: name path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline+[blue,->] "dem" (0,0)(3,3){demand}[r]
+\tzlineAtBegin{(0,1) to [bend left] }
+\tzline+[dashed,->]"supp"(1,2)(3,-2){supply}[ar]
+% intersection point
+\tzXpoint*{dem}{supp}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Styles: \texttt{tzshorten} and \texttt{tzextend}}
+\label{s:tzshorten}
+
+The styles \ixxw{tzshorten} and \ixxw{tzextend} are defined as follows:
+
+\begin{tzsty}
+% tzshorten
+\tikzset{%
+ tzshorten/.style 2 args ={shorten <=#1, shorten >=#2},
+ tzshoretn/.default={2pt}{2pt}
+}
+
+% tzextend (negative tzshorten)
+\tikzset{%
+ tzextend/.style 2 args ={shorten <=-#1, shorten >=-#2},
+ tzextend/.default={2pt}{2pt}
+}
+\end{tzsty}
+
+For example, |[tzshorten={2mm}{1mm}]| is equivalent to |[shorten <=2mm,shorten >=1mm]| in \Tikz. Simple |[tzshorten]| means that |[tzshorten={2pt}{2pt}]| by default.
+
+The style |tzextend| is a negative |tzshorten|. For example, |tzextend{2mm}{1mm}| is equivalent to |tzshorten{-2mm}{-1mm}|.
+
+
+\begin{tzcode}{.3}
+% tzshorten, tzextend
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0)(3,0); \tzline(0,0)(3,0)
+\tzdots(0,1)(3,1);
+\tzline[->,thick,blue,tzshorten={2mm}{1mm}](0,1)(3,1)
+\tzdots(1,2)(3,2);
+\tzline[<->,thick,red,tzextend={1cm}{1cm}](1,2)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzlines}: Connecting multiple points: Semicolon version}
+\label{s:tzlines}
+
+\icmd{\tzlines} connects two or more points with connected line segments.
+Since |\tzlines| takes an arbitrary number of coordinates as arguments, it is a \xem{semicolon version}. So, you need to enter a semicolon `|;|' to indicate when the coordinate iteration ends.
+
+\begin{tzdef}
+% syntax: minimum
+\tzlines(<coor>)(<coor>)..repeated..(<coor>) ;
+% syntax: medium
+\tzlines(<coor>){<text>}[<node opt>]..repeatd..(<coor>){<text>}[<node opt>] ;
+% syntax: full
+\tzlines[<opt>]<shift coor>"<path name>"
+ (<coor>){<text>}[<node opt>]
+ ..repeated.. (){}[] ; <code.append>
+% defaults
+ []<>"" (<m>){}[] ..repeated.. (){}[] ; <>
+\end{tzdef}
+
+
+\begin{tztikz}
+\tzlines(1,1)(2,2)(3,1)(4,3); % works like:
+ \draw (1,1) -- (2,2) -- (3,1) -- (4,3);
+\end{tztikz}
+
+The whole repeating pattern in |\tzlines| is the triple |(<coor>){<text>}[<node opt>]|.
+%Any |<+ or ++>| after the last coordinate, if any, is ignored.
+
+\begin{tztikz}
+\tzlines(1,1)(2,2)(3,1){C}(4,3){D}[r]; % works like:
+ \draw (1,1) -- (2,2) -- (3,1) -- node {C} (4,3) node [right] {D};
+\end{tztikz}
+
+\paragraph{Line styles}
+Use the first optional argument |[<opt>]| to control the style of the connected line drawn by |\tzlines|.
+
+\begin{tzcode}{.3}
+% \tzlines: line style
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[blue,<->](0,1)(1,2)(3,1)(4,3); % semicolon
+\tzlines[dashed](0,0)(1,1)(2,1)(3,0);
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Adding text}
+
+You can add text in the |midway|, by default, of each line segment by specifying the options |{<text>}| and |[<node opt>]| immediately after each coordinate (except the last one).
+The options |{<text>}| and |[<node opt>]| after the last coordinate put |<text>| at or around the last coordinate.
+
+
+\begin{tzcode}{.3}
+% \tzlines: adding text
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ (0,1){Up}
+ (1,2){Down}[a,sloped]
+ (3,1){Up}
+ (4,3){line A} ;
+\tzlines[dashed](0,0)(1,1)(2,1)(3,0){line B}[r];
+\end{tikzpicture}
+\end{tzcode}
+
+%\paragraph{Relative coordinates: \texttt{+} and \texttt{++}}
+%
+%You can make the coordinates (from the second coordinate) relative to the previous one by specifying the option |<+>| and |<++>| immediately before the coordinates.
+%(In \Tikz, only |<++>| refreshes the \xem{current point} to new one.)
+%
+%\begin{tzcode}{.3}
+%% \tzlines
+%\begin{tikzpicture}
+%\tzhelplines(4,3)
+%\tzlines[red,thick,<->,text=blue]
+% (0,1){Up}
+% <+>(1,1){Down}[a,sloped] % current point: (0,1)
+% <++>(3,0){Up} % new current point: (3,1)
+% <++>(1,2){line A} ;
+%\tzlines[dashed](0,0)(1,1)(2,1)<++>(1,-1){line B}[r];
+%\end{tikzpicture}
+%\end{tzcode}
+
+\paragraph{Shift}
+You can move the connected line by specifying |<shift coor>| before the first coordinate or immediately before the option |"<path name>"| if it exists.
+(The empty shift option |<>| is not allowed.)
+
+\begin{tzcode}{.3}
+% \tzlines: shift
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ <0,-1>(0,1)
+ (1,2)
+ (3,1)
+ (4,3){shifted\\line A}[align=left,ar] ;
+\tzlines[dashed]<1,0>(0,0)(1,1)(2,1)(3,0){line B}[r] ;
+\end{tikzpicture}
+\end{tzcode}
+
+
+\paragraph{Naming paths}
+You can name the path of |\tzlines| by specifying the option |"<path name>"| immediately before the first coordinate.
+
+\begin{tzcode}{.3}
+% \tzlines: shift, intersection
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ <0,-1>"AA"(0,1)
+ (1,2)(3,1)(4,3){shifted\\line A}[align=left,ar] ;
+\tzlines[dashed]
+ <1,0>"BB"(0,0)(1,1)(2,1)(3,0){line B}[r] ;
+% intersection points
+\tzXpoint*{AA}{BB}(X){X1}[-90] % [<angle>] for point
+\tzdot(X-2){X2}[0] % [<angle>] for dot
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\paragraph{Extending paths}
+You can extend the path of |\tzlines| by writing \Tikz\ code in the \xem{last} (even \xem{after the semicolon}) optional argument |<code.append>|.
+
+\begin{tzcode}{.3}
+% \tzlines: <code.append>
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ (0,1){Up}
+ (1,2){Down}[a,sloped]
+ (3,1){Up}
+ (4,3) ;
+ <arc(0:90:1cm)>
+\tzlines[dashed]
+ (0,0)(1,1)(2,1)(3,0) ;
+ <to[bend right] ++(2,2) node{Here!}>
+\end{tikzpicture}
+\end{tzcode}
+
+You can close the path with a straight line by |<--cycle>|.
+
+\begin{tzcode}{.3}
+% \tzlines: closed path
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[red,thick,<->,text=blue]
+ (0,1){Up}
+ (1,2){Down}[a,sloped]
+ (3,1){Up}
+ (4,3){line A} ; <--cycle>
+\tzlines[dashed]
+ (0,0)(1,1)(2,1)(3,0){line B}[r] ; <--cycle>
+\end{tikzpicture}
+\end{tzcode}
+
+You can also use \icmd{\tzlinesAtBegin} and \icmd{\tzlinesAtEnd} to extend a path of |\tzlines| at the beginning and at the end, respectively.
+Specifying |<code.append>| extends the path after |\tzlinesAtEnd|, if it exists.
+
+\begin{tzcode}{.3}
+% \tzlines: extending paths
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlinesAtBegin{(1,3) to [bend right]}
+\tzlinesAtEnd{arc(0:90:1cm)}
+\tzlines[red,thick,<->,text=blue]
+ (0,1){Up}
+ (1,2){Down}[a,sloped]
+ (3,1){Up}
+ (4,3) ;
+\tzlinesAtEnd{to[bend right] ++(2,2) node{Here!}}
+\tzlines[dashed]
+ (0,0)(1,1)(2,1)(3,0){not here}[b];
+ < -| ++(-1,-1) node [draw,b] {Ends here!!} >
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\protect\cmd{\tzlines+}: Relative coordinates: Semicolon version}
+\label{s:tzlines+}
+
+The \iisw{plus version} \icmd{\tzlines+} connects two or more points with connected line segments, but each coordinate (except the first one) is \xem{relative} to the previous coordinate.
+%For example, |\tzline+(A)(B)(C)(D);| is equivalent to |\tzline(A)<++>(B)<++>(C)<++>(D);|.
+
+\xem{Everything else is the same as in} |\tzlines|.
+It is also required to enter a \xem{semicolon} to indicate when the coordinate iteration ends.
+
+
+\begin{tzdef}
+% syntax: minimum
+\tzlines+ (<coor>)(<coor>) ..repeat.. (<coor>) ;
+% syntax: full
+\tzlines+[<opt>]<shift coor>"<path name>"
+ (<coor>){<text>}[<node opt>]
+ ..repeated.. (){}[] ; <code.append>
+% defaults
+ []<>"" (<m>){}[] ..repeated.. (){}[] ; <>
+\end{tzdef}
+
+
+\begin{tztikz}
+\tzlines+(0,1)(1,1)(2,-1)(1,2); % works like:
+ \draw (0,1) -- ++(1,1) -- ++(2,-1) -- ++(1,2);
+\end{tztikz}
+
+
+\begin{tztikz}
+\tzlines+[dashed]"AA"(0,1){A}(1,1){B}(2,-1){C}(1,2){D}[right]; % works like:
+ \draw [dashed,name path=AA]
+ (0,1) -- node {A} ++(1,1)
+ -- node {B} ++(2,-1)
+ -- node {C} ++(1,2) node [right] {D} ;
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+% \tzlines+
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines+[red,thick,<->,text=blue]
+ (0,1){Up}
+ (1,1){Down}[a,sloped]
+ (2,-1){Up}
+ (1,2){line A} ;
+\tzlines+[dashed,auto,text=red]
+ (0,0){A}
+ (1,1){B}
+ (1,0){C}
+ (1,-1){line B}[blue,draw,r] ;
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\begin{tzcode}{.3}
+% \tzlines+: shift
+\begin{tikzpicture}
+\tzhelplines*(4,3)
+\tzlines+[red,thick,<->,text=blue]
+ <1,1> (0,1){Up}
+ (1,1){Down}[a,sloped]
+ (2,-1){Up}
+ (1,2){line A} ;
+\tzcoors(0,0)(A)(1,1)(B)(1,0)(C)(1,-1)(D);
+\tzlines+[dashed,auto,text=red]
+ <-1,.5> (A){A}
+ (B){B}
+ (C){C}
+ (D){line B}[blue,draw,r] ;
+\end{tikzpicture}
+\end{tzcode}
+
+