summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/tzplot/tzplot-doc-B-v2.1.tex
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/tzplot/tzplot-doc-B-v2.1.tex')
-rw-r--r--graphics/pgf/contrib/tzplot/tzplot-doc-B-v2.1.tex2012
1 files changed, 2012 insertions, 0 deletions
diff --git a/graphics/pgf/contrib/tzplot/tzplot-doc-B-v2.1.tex b/graphics/pgf/contrib/tzplot/tzplot-doc-B-v2.1.tex
new file mode 100644
index 0000000000..a780c828fe
--- /dev/null
+++ b/graphics/pgf/contrib/tzplot/tzplot-doc-B-v2.1.tex
@@ -0,0 +1,2012 @@
+%!TEX root = tzplot-doc.tex
+%\begin{document}
+
+%%%==================================
+\part{Getting Started}
+%%%==================================
+\label{p:gettingstarted}
+
+%%==================================
+\chapter{An Intuitive Introduction I: Basics}
+\label{ci:introI}
+
+All drawing macros provided in this package work within |tikzpicture| environment, just like any other \Tikz\ commands.
+
+%%------------------------------------------------------------
+\section{Lines: Basics: \protect\cmd{\tzline(0,0)(3,1)}}
+\label{si:lines}
+
+To draw a line from $(0,0)$ to $(3,1)$, just do |\tzline(0,0)(3,1)|.
+
+\begin{tzcode}{.3}
+% \tzline
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\tzline(0,0)(3,1)
+\end{tikzpicture}
+\end{tzcode}
+
+You can use \Tikz\ options to change the style of a line.
+
+\begin{tzcode}{.3}
+% \tzline: change line style
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline(0,0)(3,1)
+\tzline[dashed](0,1)(3,2)
+\tzline[->,blue,thick](0,3)(4,1)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzline[dashed](0,1)(3,2) % works like:
+ \draw [dashed] (0,1) -- (3,2);
+\end{tztikz}
+
+
+%%------------------------------------------------------------
+\section{Dots: Basics}
+\label{si:dots}
+
+\subsection{A circle dot: \protect\cmd{\tzcdot(0,0)}}
+\label{ssi:tzcdot}
+
+\icmd{\tzcdot}|(0,0)| prints a `circle dot' \tikz \tzcdot(0,0);, with the \xem{radius} |1.2pt| by default, at the point |(0,0)|. The starred version \icmd{\tzcdot*} prints a filled dot \tikz \tzcdot*(0,0);.
+
+\begin{tzcode}{.3}
+% \tzcdot: circle dot
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdot(0,0)
+\tzcdot*(3,1)
+\tzcdot [red] (0,1)(3pt) % radius=3pt
+\tzcdot*[green](3,2)(3pt) % radius=3pt
+\end{tikzpicture}
+\end{tzcode}
+
+You can change of the size of a dot by specifying the \xem{radius} of the circle, like, for example, |\tzcdot(0,0)(3pt)|.
+
+\begin{tztikz}
+\tzcdot*[green](3,2)(3pt) % is an abbreviation for:
+ \draw [fill,green] (3,2) circle (3pt);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+% \tzcdot
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdot(0,0) \tzcdot*(3,1)
+\tzcdot[red](0,1)(2mm) % radius=2mm
+\tzcdot*[green](3,2)(3pt) % radius=3pt
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{A circle node dot: \protect\cmd{\tzdot(0,0)}}
+\label{ssi:tzdot}
+
+\icmd{\tzdot} draws a `circle node dot' at a specified coordinate.
+The starred version \icmd{\tzdot*} prints a filled dot. The default size (\xem{diameter} or |minimum size|) is |2.4pt|.
+
+\begin{tzcode}{.3}
+% \tzdot: node dot
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot(0,0) \tzdot*(3,1)
+\tzdot[red](0,1)(4mm) % minimum size=4mm
+\tzdot*[green](3,2)(6pt) % minimum size=6pt
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+The size (\xem{diameter} or |minimum size|) of a node dot can be changed by the second (or the last) parenthesis option, like |(6pt)|.
+
+\begin{tzcode}{.3}
+% \tzcdot
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot(0,0)(5pt) \tzdot*(3,1)
+\tzdot[red](0,1)(4mm) \tzdot*[green](3,2)(6pt)
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzdot[green](0,0)(6pt) % works like:
+ \draw [green] (0,0) node [tzdot,minimum size=6pt] {};
+ % tzdot style is predefined
+\end{tztikz}
+
+
+\subsection{Difference between \protect\cmd{\tzcdot} and \protect\cmd{\tzdot}}
+\label{ssi:difference}
+
+A `circle dot' drawn by |\tzcdot| is affected by |xscale| or |yscale| in \Tikz, but a `circle node dot' drawn by |\tzdot| is not.
+Note also that |\tzcdot| controls the \xem{radius} of a circle dot (following \Tikz\ practice), while |\tzdot| controls the \xem{diameter} of a circle node dot.
+
+\begin{tzcode}{.3}
+% \tzdot: size not changed by scaling
+\begin{tikzpicture}[xscale=.5,yscale=1.1] %%
+\tzhelplines(4,3)
+\tzdot(0,0) \tzdot*(3,1)
+\tzdot[red](0,1)(4mm) \tzdot*[green](3,2)(6pt)
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\remark
+The circle dots drawn by |\tzcdot| are affected by \Tikz\ |scale| factors. It gets bigger or smaller by |scale|.
+Let us see what happens to circle dots, especially when |xscale| and |yscale| are not symmetric.
+
+\begin{tzcode}{.3}
+% \tzcdot: distorted
+\begin{tikzpicture}[xscale=.5,yscale=1.1] %%
+\tzhelplines(4,3)
+\tzcdot(0,0) \tzcdot*(3,1)
+\tzcdot[red](0,1)(2mm) \tzcdot*[green](3,2)(3pt)
+\tzline(0,0)(3,1)
+\tzline(0,1)(3,2)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{Coordinates: Basics: \protect\cmd{\tzcoor(0,0)(A)}}
+\label{si:coordinates}
+
+To define a coordinate, use \icmd{\tzcoor} with a coordinate followed by its name in parentheses.
+
+\begin{tztikz}
+\tzcoor(0,0)(A) % works like:
+ \path (0,0) coordinate (A);
+ % or
+ \coordinate (A) at (0,0);
+\end{tztikz}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(0,0)(A) \tzcoor(60:3cm)(B)
+\tzline[->](A)(B)
+\tzdot(A)(5pt)
+\tzcoor(0,1)(C) \tzcoor(4,2)(D)
+\tzline[dashed](C)(D)
+\end{tikzpicture}
+\end{tzcode}
+
+The starred version \icmd{\tzcoor*} prints a filled node dot at a specified coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(0,0)(A) \tzcoor(60:3cm)(B)
+\tzline[->](A)(B)
+\tzdot(A)(5pt)
+\tzcoor*(0,1)(C) \tzcoor*[fill=none](4,2)(D)
+\tzline[dashed](C)(D)
+\end{tikzpicture}
+\end{tzcode}
+
+%%------------------------------------------------------------
+\section{Curves: Basics}
+\label{si:curves}
+
+\subsection{\protect\cmd{\tzto(0,0)(4,2)}}
+\label{ssi:tzto}
+
+\icmd{\tzto} connects two points with a line or a curve using the |to| operation of \Tikz.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto(0,0)(4,2)
+\tzto[bend right,dashed](0,1)(3,2)
+\tzto[out=90,in=-90,->,blue](0,2)(4,1)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzto[bend right](0,1)(3,2) % works like:
+ \draw [bend right] (0,1) to (3,2);
+\end{tztikz}
+
+\subsection{\protect\cmd{\tzbezier}}
+\label{ssi:tzbezier}
+
+\icmd{\tzbezier} draws a B\'{e}zier curve with \xem{one or two} control points from the first coordinate to the last coordinate.
+The style |tzshowcontrols| predefined in the package reveals the control point(s).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzbezier[blue,thick](0,0)(2,0)(4,2)
+\tzbezier[->,tzshowcontrols](0,2)(1,3)(3,0)(4,1)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzbezier[blue](0,0)(2,0)(4,2) % works like:
+ \draw [blue] (0,0) .. controls (2,0) .. (4,2);
+\tzbezier(0,2)(1,3)(3,0)(4,1) % works like:
+ \draw (0,2) .. controls (1,3) and (3,0) .. (4,1);
+\end{tztikz}
+
+\subsection{\protect\cmd{\tzparabola}}
+\label{ssi:tzparabola}
+
+\icmd{\tzparabola} draws a parabola controlled by several options of \Tikz's |parabola| operation.
+The macro \icmd{\tzparabola} accepts \xem{two or three} coordinate arguments to draw a parabola and the parabola bends at the second coordinate if it exists.
+
+\begin{tztikz}
+\tzparabola(0,0)(2,4) % works like:
+ \draw (0,0) parabola (2,4);
+\tzparabola(2,0)(3,3)(4,1) % works like:
+ \draw (2,0) parabola bend (3,3) (4,1);
+\end{tztikz}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,4)
+\tzparabola(0,0)(2,4)
+\tzparabola[bend at end,dashed](0,0)(2,4)
+\tzparabola(2,0)(3,3)(4,1)
+\tzparabola[bend pos=.33,dashed](1,0)(4,4)
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+
+%%------------------------------------------------------------
+\section{Adding text: Nodes and placement}
+\label{si:addingtext}
+
+\subsection{\protect\cmd{\tznode(3,1)\{text\}[right]}}
+\label{ssi:tznode}
+
+With \icmd{\tznode}|(<coor>){<text>}[<node opt>]|, you can put some text at a specified position.
+The starred version \icmd{\tznode*} draws the node perimeter, which is a |rectangle| by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode(0,0){A}
+\tznode*(1,1){text}
+\tzdot*(2,2)
+\tznode(2,2){Text}[above right,blue]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tztikz}
+\tznode(0,0){A} % works like:
+ \node at (0,0) {A};
+\tznode(2,2){Text}[above right,blue] % works like:
+ \draw (2,2) node [above right,blue] {Text};
+\end{tztikz}
+
+\subsection{Review: Main nodes and label nodes in \Tikz}
+\label{ssi:mainnodes}
+
+In \Tikz, there are two kinds of nodes: main nodes and label nodes.
+
+When a \iisw{main node} with text in it is placed at a specific point, its \iisw{label node} with a label in it is optionally placed in the \xem{direction} of a designated \xem{angle} relative to the main node.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tznode*(2,1){main node}
+ [scale=2,label={[draw,red]90:label node}]
+\tznode*(3,3){A}[label={above:a},label={0:r}]
+\end{tikzpicture}
+\end{tzcode}
+
+Instead of angles, you can use the corresponding placement words. In \Tikz, for example, |above| is replaced by |90| degree, |right| by |0| degree, |below left| by |-135| degree, and the like. Note that the angle expression \xem{cannot} be used for placing main nodes.
+
+\xmedskip1
+\remark
+\begin{itemize}
+\item
+In this package, macros related to `dots' or `coordinates' (like |\tzcdot|, |tzdot|, and |\tzcoor|) can optionally have `label nodes,' while macros related to `lines' and `curves' (like |\tzline|, |\tzto|, |\tzbezier| and |\tzparabola|) optionally have `main nodes' or `text nodes.'
+\item
+There is one exception: |\tzshoworigin|. |\tzshoworigin| can have a label, but its location is controlled by positional words such as |below left| but not by |<angle>|.
+(See Section \ref{s:tzshoworigin} on page \pageref{s:tzshoworigin} for more details.)
+\end{itemize}
+
+\subsection{Abbreviations of \Tikz\ basic placement option styles: \texttt{a}, \texttt{r}, \texttt{ar}, \texttt{bl}, etc.}
+\label{ssi:abbreviations}
+
+You can use \isw{abbreviations} (or aliases) |a| for |above|, |c| for |centered|, |r| for |right|, |bl| for |below left|, and so on to place \iisw{main node}\xem{s}.
+(Again, you \xem{cannot} use angels to place main nodes.)
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[font=\ttfamily,text=blue]
+\tzhelplines[thick](2,2)
+\tznode(1,1){centered}[draw] % default: centered
+\tznode(1,2){a} [a] \tznode(1,0){b} [b]
+\tznode(0,1){l} [l] \tznode(2,1){r} [r]
+\tznode(0,2){al}[al] \tznode(2,2){ar}[ar]
+\tznode(0,0){bl}[bl] \tznode(2,0){br}[br]
+\end{tikzpicture}
+\end{tzcode}
+
+%%------------------------------------------------------------
+\section{Labeling dots and coordinates}
+\label{si:labelingdots}
+
+\subsection{\protect\cmd{\tzdot}, \protect\cmd{\tzcdot}}
+\label{ssi:labeling:tzdot}
+
+To add a label to a dot generated by |\tzdot| or |\tzcdot|, you should specify, \xem{right after a coordinate}, |{<label>}| followed by |[<angle>]| (|90| degree or |above| by default in \Tikz).
+
+\textsc{Remember} that the order of the arguments is |(<coor>){<label>}[<angle>]|.
+To change the size of a dot, you need to specify the last option |(<dimension>)| after all the other arguments.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdot*(1,1){A} % default: 90 or above
+\tzdot(2,1){B}[0](4pt)
+\tzcdot*(1,2){C}[180](2pt)
+\tzcdot(3,2){D}[45]
+\tzdot*(4,0){E}[[red,draw]180](4pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzcdot*(1,2){C}[180](2pt) % works like:
+ \draw[fill] (1,2) circle (2pt) node [label={180:C}] {};
+\end{tztikz}
+
+\subsection{\protect\cmd{\tzcoor}}
+\label{ssi:tzcoor}
+
+\icmd{\tzcoor} can add a label to a coordinate. Just append the optional arguments |{<label>}| and |[<angle>]| after the two mandatory parenthesis arguments.
+
+\remark
+\textsc{Remember} the order of arguments is |(<coor>)(<name>){<label>}[<angle>]|.
+
+\begin{tzdef}
+% syntax: simplified
+\tzcoor(<coor>)(<coor name>){<label>}[[<label opt>]<angle>]
+% defaults
+ (<m>)(<m>){}[]
+% <m> means `mandatory'
+\end{tzdef}
+
+You can see the full syntax of |\tzcoor| in Section \ref{s:tzcoor} on page \pageref{s:tzcoor}.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,2)
+\tzcoor(1,1)(A){A} % default: 90 or above
+\tzcoor(2,1)(B){B}[[red]0]
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzcoor(1,1)(B){B}[0] % works like:
+ \draw (1,1) coordinate (B) node [label={0:B}] {};
+\tzcoor(1,1)(B){B}[[red]0] % works like:
+ \draw (1,1) coordinate (B) node [label={[red]0:B}] {};
+\end{tztikz}
+
+\subsection{\protect\cmd{\tzcoor*}}
+\label{ssi:tzcoor*}
+
+The starred version \icmd{\tzcoor*} designates a coordinate and prints a node dot with a label around the designated point like |\tzdot*| does.
+
+\begin{tzdef}
+% syntax: simflified
+\tzcoor*[<dot opt>](<coor>)(<coor name>){<label>}[[<label opt>]<angle>](<dot size>)
+\end{tzdef}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoor(1,1)(A){A} % default: 90 or above
+\tzcoor(2,1)(B){B}[0]
+\tzcoor*(1,2)(C){C}[180](4pt)
+\tzcoor*[fill=none](3,2)(D){D}[45]
+\tzcoor*(4,0)(E){E}[[red,draw]180](4pt)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzcoor*(1,2)(C){C}[180](4pt) % works as follows:
+ \tzcoor(1,2)(C)
+ \tzdot*(C){C}[180](4pt)
+\end{tztikz}
+
+%%------------------------------------------------------------
+\section{Adding text next to lines or curves}
+\label{si:texttolines}
+
+\subsection{\protect\cmd{\tzline}}
+\label{ssi:texttotzline}
+
+\icmd{\tzline} accepts two mandatory coordinates.
+To add text to a line segment, just specify the optional arguments |{<text>}| and |[<node opt>]| \xem{in-between} the two coordinates. The |[<node opt>]| is |[above,midway]|, by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline(0,0){route A}(3,0)
+\tzline[dashed](1,1){route B}(4,1)
+\tzline[blue]
+ (0,3) {plan C} [below,near end] (3,3)
+\end{tikzpicture}
+\end{tzcode}
+
+The optional argument |{<text>}| \xem{following the second coordinate} can also be used as a name of the graph. By default, it is placed at the second coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline(0,3)(4,0){demand}
+\tzline(0,0)(3,3){supply}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzto}}
+\label{ssi:texttotzto}
+
+To add text to a line or a curve drawn by \icmd{\tzto}, just specify the optional arguments |{<text>}| and |[<node opt>]| \xem{in-between} the two coordinates. By default, the |[<node opt>]| is |[above,midway]|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto(0,0){route A}(3,0)
+\tzto[dashed,bend left](1,1){route B}(4,1)
+\tzto[blue,bend right]
+ (0,3) {plan C} [below,near end] (3,3)
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzto(0,0){route A}(3,0) % works like:
+ \draw (0,3) to node [above] {route A} (3,0);
+\end{tztikz}
+
+The optional argument |{<text>}| \xem{following the second coordinate} can also be used as a name of the graph. By default, it is placed at the second coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzto[bend right=15](0,3)(4,0){demand}
+\tzto[bend right=10](0,0)(3,3){supply}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzbezier}}
+\label{ssi:texttotzbezier}
+
+\icmd{\tzbezier} accepts three or four coordinates as arguments.
+You can add text to the curve drawn by |\tzbezier| using the optional arguments |{<text>}| and |[<node opt>]| after the last coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzbezier(0,2)(1,3)(3,0)(4,1){curve}[r]
+\tzbezier[red,yshift=-5mm]
+ (0,2)(1,3)(3,0)(4,1){curve}[midway]
+\tzbezier[green,text=blue,yshift=-10mm]
+ (0,2)(1,3)(3,0)(4,1){curve}[b,near end]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzparabola}}
+\label{ssi:texttotzparabola}
+
+You can add text to a parabola drawn by |\tzparabola| using the optional arguments |{<text>}| and |[<node opt>]| \xem{following the last coordinate}.
+The text is placed at (by default) or around the last coordinate according to |[<node opt>]|.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzparabola(0,2)(1,.5)(3,2){$AC$}[r]
+\tzparabola[bend at end,blue](0,0)(4,3){$u(x)$}[r,red]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%==================================
+\chapter{An Intuitive Introduction II: Repetition of Coordinates}
+\label{ci:introII}
+
+%%------------------------------------------------------------
+\section{Linking many coordinates: Semicolon versions}
+\label{si:liknmanycoordinates}
+
+\subsection{\protect\cmd{\tzlines}: Connected line segments}
+\label{ssi:tzlines}
+
+\icmd{\tzlines} connects with line segments an arbitrary number of coordinates. The coordinate iteration must end with a semicolon |;|.
+Here, the \xem{semicolon} `|;|' indicates \xem{the end of repetition} of coordinates.
+Let us call this kind of macro a \iisw{semicolon version} macro.
+
+\remark: 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}
+
+\begin{tzdef}
+% syntax: minimal
+\tzlines[<opt>](<coor>)(<coor>)..repeated..(<coor>);
+% syntax: simplified
+\tzlines[<opt>]"<path name>"
+ (<coor>){<label>}[<angle>]..repeated..(<coor>){<label>}[<angle>];
+% defaults
+ []""(<m>){}[]..repeated..(){}[];
+% <m> means mandatory
+\end{tzdef}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines(0,0)(1,2)(3,0)
+ (4,1)(2,2)(3,3)
+ (0,3)(0,1)(4,2) ; % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+With the optional argument |{<text>}| followed by |[<node opt>]| \xem{in-between two coordinates}, you can print |{<text>}| at or around the middle point of the corresponding line segment in accordance with |[<node opt>]| (by default |[midway]|).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzlines[dashed,->](0,0){up}[l]
+ (1,2){down}[r]
+ (3,0){up}[r]
+ (4,1) ; % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+The optional argument |{<text>}| \xem{following the last coordinate} can be used as a name of the whole connected line segments. The |{<text>}| is placed at (by default) or around the last coordinate according to |[<node opt>]|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[sloped,auto]
+\tzhelplines(4,3)
+\tzlines[dashed,->](0,0){up}
+ (1,2){down}
+ (3,0){up}
+ (4,1){Weight}[r,blue] ; % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+\textsc{Remember} the repeating pattern is the triple |(<coor>){<text>}[<node opt>]| in that order.
+DO NOT FORGET to indicate when the repetition ends by typing a semicolon. So it will look like |(){}[]..repeated..(){}[];|.
+
+\subsection{\protect\cmd{\tzpolygon}, \protect\cmd{\tzpolygon*}: Closed paths}
+\label{ssi:tzpolygon}
+
+\icmd{\tzpolygon} draws closed line segments. |\tzpolygon| is also one of semicolon versions, meaning that it has to end with a semicolon |;|.
+In fact, |\tzpolygon| is a closed version of |\tzlines|.
+
+The starred version |\tzpolygon*| does the same thing as |\tzpolygon| except for one thing.
+|\tzpolygon*|, by default, fills the interior of the polygon with |black!50| with |fill opacity=.3| but with |text opacity=1|. (Changing the |fill opacity| is not an issue in this introduction. See Section \ref{ss:tzpolygon} on page \pageref{ss:tzpolygon} for more details.)
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpolygon(1,3)(0,2)(2,0)(3,1)(4,2)(2,3); % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+The optional arguments |{<text>}| and |[<node opt>]| \xem{in-between} two coordinates prints |<text>| according to |[<node opt>]| (by default |[midway]|) around the middle point of the corresponding line segment.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpolygon*[green,thick](1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\tzpolygon[dashed]
+ (0,0){up}[l] (1,2){down}[r] (3,0){up}[r] (4,1);
+\end{tikzpicture}
+\end{tzcode}
+
+The options |{<text>}| and |[<node opt>]| following the last coordinate can be used as a name of the connected line segments.
+
+The entire repetition will look like |(<coor>){<text>}[<node opt>] ..repeated.. (){}[];|.
+DO NOT FORGET to indicate when the repetition ends by typing a semicolon.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[sloped,auto]
+\tzhelplines(4,3)
+\tzpolygon[dashed]
+ (0,0){up} (1,2){down} (3,0){up} (4,1){Weight}[r] ;
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tzpath*}: Filling area}
+\label{ssi:tzpath}
+
+\icmd{\tzpath} accepts an arbitrary number of coordinates to form a path, like |\tzlines| does, but the path is invisible. This is a \xem{semicolon version} macro, so the coordinate iteration must be ended by a semicolon |;|.
+With |[draw]| option you can visualize the invisible path.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzpath[draw](1,3)(0,2)(2,0)
+ (3,1)(4,2)(2,3); % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+You can fill the interior of a path formed by |\tzpath| (after being closed) with color or pattern, in usual \Tikz\ way.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue](0,3)(4,0)
+\tzpath[pattern=crosshatch]
+ (1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\tzpath[pattern=bricks,preaction={fill=brown}]
+ (0,0) (1,2) (3,0) (4,1);
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue](0,3)(4,0)
+\tzpath[fill,green]
+ (1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\tzpath[fill]
+ (0,0) (1,2) (3,0) (4,1);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+The starred version \icmd{\tzpath*} takes the default options |fill=black!50|, |fill opacity=.3|, and |text opacity=1| to fill the area.
+
+\begin{tzdef}
+% syntax: simplified
+\tzpath*[<opt>](<coor>){<label>}[<angle>]..repeated..(<coor>){<label>}[<angle>];
+% defaults
+ *[fill=black!50,fill opacity=.3,text opacity=1](<m>){}[]..repeated..(){}[];
+% <m> means mandatory
+\end{tzdef}
+
+The macros |\tzpath| and |\tzpath*| are much more flexible. See Section \ref{s:tzpath} on page \pageref{s:tzpath} for more details.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue](0,3)(4,0)
+\tzpath*[green](1,3)(0,2)(2,0)(3,1)(4,2)(2,3);
+\tzpath*(0,0) (1,2) (3,0) (4,1);
+\end{tikzpicture}
+\end{tzcode}
+
+How to change the |fill opacity| with |\tzpath*| is not discussed in this introduction, but one example is given below. (See Section \ref{s:tzpath*} on page \pageref{s:tzpath*} for more details.)
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline[blue](0,3)(4,0)
+\tzpath*[green](1,3)(0,2)(2,0)(3,1)(4,2)(2,3);{1} %%
+\tzpath*(0,0) (1,2) (3,0) (4,1);{.7} %%
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{Many dots: Semicolon versions}
+\label{si:manydots}
+
+\subsection{\protect\cmd{\tzcdots(*)}}
+\label{ssi:tzcdots}
+
+\icmd{\tzcdots} accepts an arbitrary number of coordinates to print circle dots, but the coordinate repetition must be ended by |;| (semicolon version).
+\icmd{\tzcdots*} prints filled circle dots.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots(0,0)(1,1)(2,1)(3,2)(4,3);
+\tzcdots*[red](0,3)(1,3)(2,3)(3,3)(4,2); % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+Each coordinate can be labeled by specifying the optional argument |{<label>}| followed by |[<angle>]|. You can also change the size (\xem{radius}) of the dots by specifying the \xem{last} parenthesis option |(<dot radius>)| \xem{after} the semicolon.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcdots(0,0)(1,1){B}(2,1)(3,2){D}[-90](4,3);(5pt)
+\tzcdots*[fill=red](0,3){A}
+ (1,3){B}
+ (2,3){C}[-90]
+ (3,3)
+ (4,2){E}[[blue]0];(3pt) % radius
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzdots(*)}}
+\label{ssi:tzdots}
+
+\icmd{\tzdots} accepts an arbitrary number of coordinates to print circle node dots, but the repetition must be ended by |;| (semicolon version).
+\icmd{\tzdots*} prints filled circle node dots.
+
+\begin{tzdef}
+% syntax: minimum
+\tzdots*(<coor>)(<coor>)..repeated..(<coor>);
+% syntax: simplified
+\tzdots*[<opt>](<coor>){<label>}[<angle>]..repeated..
+ (<coor>){<label>}[<angle>]; (<dot size>)
+% defaults
+ *[tzdot=2.4pt](<m>){}[]..repeated..(){}[]; (2.4pt)
+% <m> means mandatory
+\end{tzdef}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0)(1,1)(2,1)(3,2)(4,3);
+\tzdots*[red](0,3)(1,3)(2,3)(3,3)(4,2); % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+Each coordinate can be labeled by specifying the optional argument |{<label>}| followed by |[<angle>]|. You can also change the size (\xem{diameter}) of the dots by specifying the \xem{last} parenthesis argument |(<dot size>)| \xem{after} the semicolon.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzdots(0,0)(1,1){B}(2,1)(3,2){D}[-90](4,3);(10pt)
+\tzdots*[fill=red](0,3){A}
+ (1,3){B}
+ (2,3){C}[-90]
+ (3,3)
+ (4,2){E}[[blue]0];(6pt) % diameter
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Many coordinates: Semicolon versions}
+\label{si:manycoordinates}
+
+\subsection{\protect\cmd{\tzcoors}, \protect\cmd{\tzcoors*}}
+\label{ssi:tzcoors}
+
+|\tzcoor| accepts \xem{a pair} of mandatory arguments in parentheses: |(<coor>)(<name>)|.
+The semicolon version macro \icmd{\tzcoors} accepts \xem{an arbitrary number of pairs} to define multiple coordinates. A semicolon `|;|' is necessary to indicate when the repetition ends.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors(0,0)(A)
+ (1,1)(B)
+ (2,1)(C)
+ (3,3)(D)
+ (4,2)(E);
+\tzlines(A)(B)(C)(D)(E); % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+The options |{<label>}| and |[<angle>]| following \xem{each pair} of |(<coor>)| and |(<name>)| allow you to put |<label>| in the direction of |<angle>| around the coordinate.
+Here, the repeating pattern is the quadruple |(<coor>)(<name>){<label>}[<angle>]|. The first two parenthesis arguments are mandatory and others are optional. The pattern is repeated until |\tzcoors| meets a semicolon |;|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors(0,0)(A){A}
+ (1,1)(B)
+ (2,1)(C){C}[0]
+ (3,3)(D){D}[180]
+ (4,2)(E){E}[-90];
+\tzlines(A)(B)(C)(D)(E);
+\end{tikzpicture}
+\end{tzcode}
+
+
+The starred version \icmd{\tzcoors*} does one more thing: to print node dots.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoors*(0,0)(A){A}
+ (1,1)(B)
+ (2,1)(C){C}[0]
+ (3,3)(D){D}[180]
+ (4,2)(E){E}[-90];
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzcoorsquick}}
+\label{ssi:tzcoorsquick}
+
+\icmd{\tzcoorsquick} is just to see the array of many coordinates at a glance.
+|\tzcoorsquick| works like |\tzcoors|, but it automatically prints the name of each coordinate as its label, right at the point, by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick(0,0)(A)
+ (1,1)(Best)
+ (2,1)(Case)
+ (3,3)(Done)
+ (4,2)(End); % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tzcoorsquick*}}
+\label{ssi:tzcoorsquick*}
+
+The starred version \icmd{\tzcoorsquick*} prints node dots and automatically puts the labels |above| (in the direction of |90| degree from) them, by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzcoorsquick*(0,0)(A)
+ (1,1)(Best)
+ (2,1)(Case)
+ (3,3)(Done)
+ (4,2)(End){END!}[[blue]0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{\texttt{plot coordinates}: Semicolon versions}
+\label{si:plotcoordinates}
+
+\subsection{\protect\cmd{\tzplot*}: Mark dots with \texttt{[mark=*]}}
+\label{ssi:tzplot*}
+
+\icmd{\tzplot*} accepts an arbitrary number of coordinates to print bullets with the \xem{radius} (|mark size| in \Tikz) of |2pt|, which is the initial value in \Tikz. Since this is a semicolon version, the repetition of coordinates must be ended by |;|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot*(0,0)
+ (1,1)
+ (2,1)
+ (3,3)
+ (4,2) ; % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzplot*(0,0)(1,1)(2,1); % works like:
+ \draw [mark=*] plot coordinates {(0,0)(1,1)(2,1)};
+\end{tztikz}
+
+Each coordinate can be labeled by specifying the optional argument |{<text>}| followed by |[<angle>]|. With the option |[mark=o]| you can print hollow dots. You can also change the \xem{radius} of the marks by specifying the \xem{last} parenthesis argument |(<mark size>)| \xem{after} the semicolon.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot*[mark=o](0,0){A}
+ (1,1){Best}
+ (2,1){Case}
+ (3,3){Done}
+ (4,2){END!}[[blue]0] ; (1.2pt)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzplot}: Lines with \texttt{[tension=0]}}
+\label{ssi:tzplot:lines}
+
+\icmd{\tzplot} accepts an arbitrary number of coordinates and draws line segments connecting them. The repetition of coordinates must be ended by |;| (semicolon version).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot(0,0)
+ (1,1)
+ (2,1)
+ (3,3){Done}
+ (4,2){END!}[[blue]0];
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzplot(0,0)(1,1)(2,1); % works like:
+ \draw plot coordinates {(0,0)(1,1)(2,1)};
+\end{tztikz}
+
+
+\subsection{\protect\cmd{\tzplot*[draw]}: Lines with dots}
+
+\icmd{\tzplot*}|[draw]| prints bullet marks at the specified coordinates and draws line segments connecting them. The repetition of coordinates must be ended by |;| (semicolon version).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplot*[draw](0,0)
+ (1,1)
+ (2,1)
+ (3,3)
+ (4,2){END!}[[blue]0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzplotcurve}: Curves with \texttt{[smooth,tension=1]}}
+\label{ssi:tzplotcurve}
+
+\icmd{\tzplotcurve} plots any number of coordinates with the default option |[smooth,tension=1]|, resulting in a \xem{curve} connecting the specified coordinates.
+The repetition of coordinates must be ended by |;| (semicolon version).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzplotcurve(0,0)
+ (1,1)
+ (2,1)
+ (3,3)
+ (4,2){END!}[[blue]0] ; % semicolon
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tzdef}
+% syntax: simplified
+\tzplotcurve[<opt>]{<tension>}"<path name>"
+ (<coor>){<label>}[<angle>]..repeated..(<coor>){<label>}[<angle>];
+% defaults
+ [smooth,tension=1]{1}""(<m>){}[]..repeated..(){}[];
+% <m> means mandatory
+\end{tzdef}
+
+\begin{tztikz}
+\tzplotcurve(0,0)(1,1)(2,1); % works like:
+ \draw [smooth,tension=1] plot coordinates {(0,0)(1,1)(2,1)};
+\end{tztikz}
+
+You can change the tension value by specifying the optional argument |{<tension>}|, before the first coordinate.
+
+\begin{tzcode}{.3}
+\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]{.55}(1,3)(A)(4,0); % TikZ default
+\tzplotcurve[dashed]{0}(1,3)(A)(4,0);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%==================================
+\chapter{An Intuitive Introduction III: Plotting Functions}
+\label{ci:introIII}
+
+
+%%------------------------------------------------------------
+\section{Axes}
+\label{si:axes}
+
+\subsection{\protect\cmd{\tzaxes}}
+\label{ssi:tzaxes}
+
+\begin{tzdef}
+% syntax: simplified
+\tzaxes[<opt>]<x-shift,y-shift>(<x1,y1>)(<x2,y2>)
+ {<x-text>}[<x-opt>]{<y-text>}[<y-opt>]
+% defaults
+ [->]<0,0>(0,0)(<m>){}[right]{}[above]
+% <m> means mandatory
+\end{tzdef}
+
+\icmd{\tzaxes} draws the x-axis from |<x1>| to |<x2>| and the y-axis from |<y1>| to |<y2>|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxes(-1,-1)(8,5) % basics
+\end{tikzpicture}
+\end{tzcode}
+
+If |(<x1,y1>)| is omitted, it is regarded as |(0,0)|.
+And optionally the names of x-axis and y-axis can be printed at a specified place (by default, |[right]| for x-axis and |[above]| for y-axis).
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxes[draw=blue](8,5){$x$}{$y$} %%
+\end{tikzpicture}
+\end{tzcode}
+
+With the optional argument |<x-shift,y-shift>|, the axes are shifted accordingly. Two axes intersect at |(<x-shift,y-shift>)|, by default |(0,0)|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxes(-1,-1)(8,5){$Q$}[b]{$P$}[l]
+\tzaxes[dashed,-]<2,1>(-1,-1)(8,5) % shift
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tzaxes*}}
+\label{ssi:tzaxes*}
+
+The starred version \icmd{\tzaxes*} is just to set the current state to a \iisw{bounding box} when the |\tzaxes| macro execution is completed. Use |\tzaxes*| before any larger graphics.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzaxes*(8,5){$x$}{$f(x)$} % bounding box
+\tzhelplines(-2,-1)(10,8)
+\tzto[out=90,in=-135,dashed](-2,8)(12,-2)
+\tzbezier[blue](-1,-1)(3,-2)(7,12)(10,10)
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzshoworigin}, \protect\cmd{\tzshoworigin*}}
+\label{ssi:tzshoworigin}
+
+\icmd{\tzshoworigin} prints `$0$' (roughly) at the bottom left of the origin.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzshoworigin
+\tzaxes(-1,-1)(8,5)
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzshoworigin*} prints a \xem{node dot} with the size of |2.4pt| (by default) at the origin.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzshoworigin*
+\tzaxes(-1,-1)(8,5)
+\end{tikzpicture}
+\end{tzcode}
+
+|\tzshoworigin*(<coor>){<text>}[<node opt>]| prints a node dot and text around |(<coor>)|, by default |(0,0)|. (Notice that the place where the |<text>| is printed at is not by |<angle>|. Instead, you can use the \xem{abbreviations} of \Tikz\ basic placement options such as |a|, |l|, |br|, ect. See Section \ref{s:stylenames}, for more details.)
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzshoworigin*{$O_1$}
+\tzaxes(-1,-1)(8,5)
+\tzaxes[blue]<7,4>(8,5)(-1,-1)
+\tzshoworigin*(7,4){$O_2$}[ar]
+\end{tikzpicture}
+\end{tzcode}
+
+Notice that, in the previous example, the two axes intersect at |(7,4)| by the shift option |<7,4>|.
+
+\subsection{\protect\cmd{\tzaxisx}, \protect\cmd{\tzaxisy}}
+\label{ssi:tzaxesx}
+
+\icmd{\tzaxisx} draws an x-axis from |<x1>| to |<x2>|.
+
+\begin{tzdef}
+% syntax: simplified
+\tzaxisx[<opt>]<y-shift>{<x1>}{<x2>}{<text>}[<node opt>]
+% defaults
+ [->,>=stealth]<0>{<m>}{<m>}{}[right]
+\end{tzdef}
+
+\icmd{\tzaxisy} works similarly for the y-axis, except for the axis label position: |above| by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxisx{-1}{8}{$x$}
+\tzaxisy[draw=blue,thick]{-1}{5}{$y$}
+\tzaxisx[dashed,-]<2>{-1}{8}
+\tzaxisy[thick,<->]<1>{-1}{5}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Ticks}
+\label{si:tikzs}
+
+\subsection{\protect\cmd{\tzticks}}
+\label{ssi:tzticks}
+
+\icmd{\tzticks}|{<x-tick places>}{<y-tick places>}| prints tick labels for x- and y-axis at specified places, which are comma separated.
+By default, tick labels are the numbers specified.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(8,5)
+\tzshoworigin
+\tzaxes(-1,-1)(8,5)
+\tzticks{1,2,...,8} % x-ticks
+ {1,2,...,5} % y-ticks
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the numbered labels, for example |{2,4,7}|, to any other form, by doing like, for example, |{2/mylabel,4,7}|. (Internally, |\tzticks| uses the |foreach| operation of \Tikz.)
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(8,5)
+\tzshoworigin
+\tzaxes(-1,-1)(8,5)
+\tzticks{2/x,4/y,5.5/$z_1$,7}
+ {1,2.5/$\frac25$,4}
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tzticks*}}
+\label{ssi:tzticks*}
+
+The starred version \icmd{\tzticks*} prints tick marks from |0pt| to |3pt| by default, without printing tick labels.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(8,5)
+\tzshoworigin
+\tzaxes(-1,-1)(8,5)
+\tzticks*{1,2,...,7}
+ {1,2,3,4}
+\end{tikzpicture}
+\end{tzcode}
+
+You can change the length of tick marks, for example, like |(-2pt:3pt)| and |(-5pt:10pt)| as shown in the following example.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5]
+\tzhelplines(-1,-1)(8,5)
+\tzaxes(-1,-1)(8,5)
+\tzticks*(-2pt:3pt){1,2,...,7}
+ (-5pt:10pt){1,2,3,4}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzticksx(*)}, \protect\cmd{\tzticksy(*)}}
+\label{ssi:tztikcsx}
+
+\icmd{\tzticksx} and \icmd{\tzticksy} prints x-tick labels and y-tick labels, respectively.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(8,5)
+\tzaxes(-1,-1)(8,5)
+\tzticksx{1/x,3/y,5/z,7}
+\tzticksy(-5pt:10pt){1,2,4/k}
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzticksx*} and \icmd{\tzticksy*} suppress tick labels for their corresponding axes, like |\tzticks*|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(8,5)
+\tzaxes(-1,-1)(8,5)
+\tzticksx*{1/x,3/y,5/z,7}
+\tzticksy*(-5pt:10pt){1,2,4/k}
+\end{tikzpicture}
+\end{tzcode}
+
+You can see more details on |\tzticks| and its friends in Chaper \ref{c:ticks} on page \pageref{c:ticks}.
+
+
+%%------------------------------------------------------------
+\section{Projections on the axes}
+\label{si:projections}
+
+
+\subsection{\protect\cmd{\tzprojx(*)}, \protect\cmd{\tzprojy(*)}}
+\label{ssi:tzprojx}
+
+\icmd{\tzprojx} draws a \xem{dotted line} (by default) from a specified coordinate to its projection point on the x-axis and prints text around (|[below]| by default) the projection point.
+
+|\tzprojy| works similarly but for the projection point on the y-axis.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzaxes(4,3)
+\tzdot*(3,2){$(x_1,x_2)$}[45]
+\tzprojx(3,2){$x_1$}
+\tzprojy[solid,->,draw=blue](3,2){$x_2$}[bl]
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzprojx*} does one more thing. It prints a node dot (with |\tzdot*|) at a specified coordinate. |\tzprojy*| works similarly but for the projection point on the y-axis.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+%\tzhelplines(4,3)
+\tzaxes(4,3)
+\tznode(3,2){$(x_1,x_2)$}[ar]
+\tzprojx*(3,2){$x_1$}[xshift=-3pt]
+\tzprojy[->,dashed,draw=red](3,2){$x_2$}
+\tzprojx*(1.5,2.5){$a$}
+\tzprojy*(2.5,1.5){$b$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzproj(*)}}
+\label{ssi:tzproj}
+
+\icmd{\tzproj} combines |\tzprojx| and |\tzprojy|.
+And \icmd{\tzproj*} combines |\tzprojx*| and |\tzprojy*|.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+%\tzhelplines(4,3)
+\tzaxes(4,3)
+\tznode(3,2){$(x_1,x_2)$}[ar]
+\tzproj[<->,solid,draw=red](3,2){$x_1$}{$x_2$}
+\tzproj*(1.5,2.5){$a$}[xshift=3pt,text=blue]{$b$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Plot functions}
+\label{si:plotfunctions}
+
+\subsection{\protect\cmd{\tzfn}}
+\label{ssi:tzfn}
+
+\icmd{\tzfn}|{<fn of \x>}[<a:b>]| plots a function of $x$ over the specified domain $[a:b]$, which means that $a\leq x \leq b$.
+Optionally, you can add |{<text>}| with |[<node opt>]| as shown in the following example.
+
+\begin{tzdef}
+% syntax: simplified
+\tzfn[<opt>]"<path name>"{<fn of \x>}[<a:b>]{<text>}[<node dot>]
+% defaults
+ []""{<m>}[<m>]{}[]
+% <m>: mandatory
+\end{tzdef}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines(5,5)
+\tzaxes(5,5)
+\tzfn{(\x-1)^2}[0:3] % y=(x-1)^2
+\def\Gx{(\x-2)^2+1}
+\tzfn[dashed]{\Gx}[1:4]{$g(x)$}[r] % g(x)=(x-2)^2+1
+\tzfn[red]{sin(\x r)+3}[0:2*pi] % y=sin x
+\end{tikzpicture}
+\end{tzcode}
+
+\begin{tztikz}
+\tzfn[dashed]{(\x-2)^2+1}[1:4]{$g(x)$}[r] % works like:
+ \draw [dashed] plot [domain=1:4] (\x,{(\x-2)^2+1}) node [right] {$g(x)$};
+\end{tztikz}
+
+You can name a path formed by |\tzfn| by specifying the optional argument |"<path name>"| right before the mandatory curly brace argument |{<fn of \x>}|. The name of a path is used to find intersection points.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\footnotesize]
+\tzhelplines(5,5)
+\tzaxes(5,5){$x$}{$y$}
+\def\bgt{4-\x}
+\def\IC{3/\x}
+\def\ICa{4/\x}
+\tzfn"bgt"{\bgt}[0:4] % name path = bgt
+\tzfn[blue]"IC"{\IC}[.75:4] % name path = IC
+\tzfn[red]{\ICa}[1:4] % name path = ICa (automatically)
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+If the curly brace mandatory argument consists of \xem{only a macro name} like |{\Foo}|, the macro name |Foo| (without the backslash) is automatically assigned to the \xem{name of the path}. (See Section \ref{ss:tzfn:namepath} on page \pageref{ss:tzfn:namepath}, for more details.)
+
+\subsection{\protect\cmd{\tzhfnat}, \protect\cmd{\tzhfn}: Horizontal lines}
+\label{ssi:tzhfn}
+
+\icmd{\tzhfnat} accepts a value of $y$ and draws a horizontal line (the graph of a constant function) at $y$ from left to right of the \ixxw{current bounding box}, by default, unless you specify the optional argument |[<from:to>]|.
+
+\begin{tzdef}
+% syntax
+\tzhfnat[<opt>]"<path name>"{<y-val>}[<from:to>]{<text>}[<node opt>]
+% defaults
+ []""{<m>}[west:east (of current bounding box)]{}[]
+\end{tzdef}
+
+\icmd{\tzhfn}|(<coor>)| accepts a coordinate, instead of the value of $y$, to draw a horizontal line at the value of $y$ coordinate of |(<coor>)|, ignoring the value of $x$ coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzhfnat{0} % value of y
+\tzhfnat[dashed]{1}[1:4]{Two}[l,at start] % value of y
+\tzcoors(0,2)(A)(0,3)(B);
+\tzhfn[blue](A)[0:3]{Three}[b,near end] % coordinate
+\tzhfn[->](B)[0:3]{Four}[r] % cooridnate
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzvfnat}, \protect\cmd{\tzvfn}: Vertical lines}
+\label{ssi:tzvfn}
+
+\icmd{\tzvfnat} draws a vertical line at $x$ from bottom to top of the |current bounding box| by default.
+
+\begin{tzdef}
+% syntax: simplified
+\tzvfnat[<opt>]"<path name>"{<x-vale>}[<from:to>]{<text>}[<pos>]
+% defaults
+ []""{<m>}[south:north (of current bounding box)]{}[]
+\end{tzdef}
+
+\icmd{\tzvfn}|(<coor>)| accepts a coordinate, instead of the value of $x$. It draws a vertical line at the value of $x$ coordinate of |(<coor>)|, ignoring the value of $y$ coordinate.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzvfnat{0}
+\tzvfnat[dashed]{1}[1:3]{Two}[b,at start]
+\tzvfn[blue](2,0)[0:3]{Three}[a,near end,sloped]
+\tzvfn[->](3,0)[0:3]{Four}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\subsection{\protect\cmd{\tzLFn}: Linear functions}
+\label{ssi:tzLFn}
+
+\icmd{\tzLFn}|(<coor1>)(<coor2>)...| draws a \xem{linear function} passing through two points: |(<coor1>)| and |(<coor2>)|.
+|\tzLFn(<coor1>){<slope>}...| draws a linear function passing through one point, |(<coor1>)|, with the slope of |<slope>|. If two coordinates and a slope are all specified the option |{<slope>}| is ignored. The domain in the form of |[a:b]| is also a required argument.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\footnotesize]
+\tzhelplines(5,5)
+\tzaxes(-1,-1)(5,5)
+\tzdots*(1,1)(3,2);
+\tzLFn(1,1)(3,2)[0:4]{two points}[r]
+\tzLFn(1,1){1.5}[0:3]{one point and a slope}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{Intersection points}
+\label{si:intersections}
+
+\subsection{Naming paths}
+\label{ssi:namingpaths}
+
+In \Tikz, you can find \xem{intersection} points when two \xem{named paths} intersect. The name of a path is usually given by the option |[name path=<path name>]| in \Tikz.
+
+With the package \pkg{tzplot}, you can name a path by specifying an optional argument within quotation marks such as |"<path name>"|.
+(Of course, you can also name a path in usual \Tikz\ way, like |[name path=<path name>]|.)
+
+In this package, all macros (with a few exceptions) related to lines and curves accept this quote optional argument to name paths as follows:
+
+\begin{verbatim}
+ \tzline[<opt>]"<path name>"(<coor>)...
+ \tzlines... "<path name>"(<coor>)...
+ \tzto... "<path name>"(<coor>)...
+ \tzfn... "<path name>"{<fn of \x>}...
+ \tzLFn... "<path name>"(<coor>)...
+ and more...
+\end{verbatim}
+
+\begin{tztikz}
+\tzline[dashed]"foo"(1,1)(3,3) % works like
+ \draw [dashed,name path=foo](1,1) -- (3,3);
+\end{tztikz}
+
+In most cases, the quote optional arguments for naming paths are placed \xem{immediately before the first mandatory argument} of the |tzplot| macros.
+
+\subsection{\protect\cmd{\tzXpoint(*)}: Intersection points of two paths}
+\label{ssi:tzXpoint}
+
+For example, \icmd{\tzXpoint}|{path1}{path2}(A)| finds intersection points of |path1| and |path2| and names the first intersection point |(A)|. This intersection point can be referred to as |(A)| or |(A-1)|. If there are two or more intersection points found, they are called |(A)=(A-1)|, |(A-2)|, |(A-3)|, and so on.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}
+\tzhelplines(4,3)
+\tzline"AA"(0,0)(3,2)
+\tzline"BB"(0,3)(3,0)
+\tzXpoint{AA}{BB}(X)
+\tzdot*(X){E}
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzXpoint*} prints a node dot at the first intersection point.
+You can label the point by specifying |{<text>}| and |[<angle>]| after the specified intersection name.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\footnotesize]
+\tzhelplines(5,5)
+\tzaxes(5,5){$x$}{$y$}
+\def\bgt{4-\x}
+\def\IC{3/\x}
+\tzfn"bgt"{\bgt}[0:4] % name path = bgt
+\tzfn[blue]"IC"{\IC}[.75:4] % name path = IC
+\tzXpoint*{bgt}{IC}(E){$A$}[45] % first intersection
+\tzdot(E-2){$B$}[45](5pt) % second intersection
+\end{tikzpicture}
+\end{tzcode}
+
+\remark
+You have to expect \Tikz\ to take a few seconds (or less) to find intersection points.
+
+\subsection{\protect\cmd{\tzvXpointat(*)}, \protect\cmd{\tzvXpoint(*)}: Vertical intersection points}
+\label{ssi:tzvXpoint}
+
+To find vertical intersection points at $x$ to a curve, you should specify a path name and either the value of $x$ or the coordinate $(x,y)$. Here the $y$ coordinate is ignored.
+
+\icmd{\tzvXpointat}|{<path>}{<x>}(A)| finds vertical intersection points of |<path>| at $x=\texttt{<x>}$ and names it |(A)|.
+The starred version \icmd{\tzvXpointat*} additionally prints a node dot at the (first) intersection point.
+
+The macro \icmd{\tzvXpoint} uses |(<coor>)|, while |\tzvXpointat| uses the value of $x$. Here the $y$ coordinate of |(<coor>)| is not important. |\tzvXpoint| is useful when you do not know the exact value of $x$ coordinate of |(<coor>)|.
+The starred version \icmd{\tzvXpoint*} additionally prints a node dot at the (first) intersection point.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\scriptsize]
+\tzhelplines(5,5)
+\tzaxes(5,5)
+\def\Fx{(\x-1)^2}
+\tzfn\Fx[0:3] % name path = Fx (automatically)
+\tzvXpointat{Fx}{2.5}(A)
+\tzvXpoint{Fx}(2.8,1)(B) % y=1 is ignored
+\tzproj*[->](A){$2.5$}{$f(2.5)$}
+\tzdot(B){$B$}[0]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{\protect\cmd{\tzhXpointat(*)}, \protect\cmd{\tzhXpoint(*)}: Horizontal intersection points}
+\label{ssi:tzhXpoint}
+
+\icmd{\tzhXpointat}|{<path>}{<y>}(A)| works like |\tzvXpointat{<path>}{<x>}(A)|, but it uses the value of $y$ instead of $x$.
+The starred version \icmd{\tzhXpointat*} additionally prints a node dot at the (first) intersection point.
+
+\icmd{\tzhXpoint} uses |(<coor>)|, while |\tzhXpointat| uses the value of $y$.
+Here the $x$ coordinate of |(<coor>)| is ignored.
+The starred version \icmd{\tzhXpoint*} prints a node dot at the (first) intersection point.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7,font=\scriptsize]
+\tzhelplines(5,5)
+\tzaxes(5,5)
+\def\Fx{(\x-1)^2}
+\tzfn\Fx[0:3] % name path = Fx (automatically)
+\tzhXpointat{Fx}{2.5}(A)
+\tzhXpoint{Fx}(1,2.8)(B) % x=1 is ignored
+\tzproj*[<-](A){$f^{-1}(2.5)$}{$y=2.5$}
+\tzdot(B){$B$}[0]
+\end{tikzpicture}
+\end{tzcode}
+
+You can see more details on |\tzXpoint| and its friends in Chapter \ref{c:intersections} on page \pageref{c:intersections}.
+
+
+%%------------------------------------------------------------
+\section{Tangent lines and secant lines}
+\label{si:tangentlines}
+
+\subsection{\protect\cmd{\tztangentat}}
+\label{ssi:tztangentat}
+
+\icmd{\tztangentat}|{<path>}{<x>}[<a:b>]| draws a tangent line to |<path>| at $x=\texttt{<x>}$ over $x\in [a,b]$.
+The domain is a mandatory argument and should be of the form |[<from:to>]|.
+
+\begin{tzdef}
+% syntax: simplified
+\tztangentat{<path>}{<x>}[<domain>]{<text>}[<node opt>]
+% defaults
+ []{<m>}{<m>}[<m>]{}[]
+% <m> means mandatory
+\end{tzdef}
+
+
+\remark
+The slope of a tangent line drawn by |\tztangentat| is just approximate.
+
+The line is drawn on the |behind| layer, by default.
+
+You can also add some text next to the tangent line by specifying the optional arguments |{<text>}| and |[<node opt>]|, after the domain.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines(5,5)
+\tzparabola[thick,blue]"curve"(0,1)(2,3)(4,2)
+\tzvXpointat*{curve}{1}
+\tzvXpointat*{curve}{3}
+\tztangentat{curve}{1}[0:3]
+\tztangentat[red]{curve}{3}[1:5]{tangent at $x=3$}[b]
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{\protect\cmd{\tztangent}}
+\label{ssi:tztangent}
+
+\icmd{\tztangent} works like |\tztangentat|, but it accepts a coordinate instead of the value of $x$.
+
+|\tztangent{<path>}(<coor>)| draws a tangent line to |<path>| at the $x$ coordinate of |(<coor>)|. Here, the $y$ coordinate of |(<coor>)| is ignored. The line is drawn on the |behind| layer, by default.
+
+
+\begin{tzdef}
+% syntax: simplified
+\tztangent{<path>}(<coor>)[<from:to>]{<text>}[<node opt>]
+% defaults
+ []{<m>}(<m>)[<m>]{}[]
+\end{tzdef}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines(5,5)
+\tzparabola[thick,blue]"curve"(0,1)(2,3)(4,2)
+\tzvXpoint*{curve}(1,0)(A){A}[135]
+\tzvXpoint*{curve}(3,0)(B){B}[45]
+\tztangent{curve}(A)[0:3]
+\tztangent[red]{curve}(B)[1:5]{tangent at $B$}[b]
+\end{tikzpicture}
+\end{tzcode}
+
+
+See Section \ref{s:tangent} on page \pageref{s:tangent} for more details on |\tztangent| and |\tztangentat|.
+
+
+\subsection{\protect\cmd{\tzsecantat}, \protect\cmd{\tzsecant}}
+\label{ssi:tzsecant}
+
+\icmd{\tzsecantat}|{<path>}{<x1>}{<x2>}| draws a secant line segment of |<path>| from $x_1=\texttt{<x1>}$ to $x_2=\texttt{<x2>}$ on the |behind| layer, by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines(5,5)
+\tzaxes*(5,5)
+\tzparabola"curve"(0,1)(2,3)(5,1)
+\tzsecantat{curve}{1}{2}
+\tzsecantat[red]{curve}{1}{3}
+\tzsecantat[blue]{curve}{1}{4}
+\end{tikzpicture}
+\end{tzcode}
+
+\icmd{\tzsecant} works like |\tzsecantat|, but it accepts two coordinates instead of two values of $x$.
+
+|\tzsecant{<path>}(<coor1>)(<coor2>)| draws a secant line segment of |<path>| from the $x$ coordinate of |(<coor1>)| to the $x$ coordinate of |(<coor2>)|, ignoring $y$ values of the coordinates, on the |behind| layer by default.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines(5,5)
+\tzaxes(5,5)
+\tzparabola"curve"(0,1)(2,3)(5,1)
+\tzsecant{curve}(1,0)(2,0)
+\tzsecant[red]{curve}(1,0)(3,0)
+\tzsecant[blue,dashed]{curve}(1,0)(4,0)
+\end{tikzpicture}
+\end{tzcode}
+
+
+You can extend or shorten a secant line by specifying the domain |[<from:to>]|, which is an optional argument.
+If you specify the domain, |\tzsecant| draws a secant line over the domain.
+You can also add some text next to the secant line by specifying the optional arguments |{<text>}| and |[<node opt>]|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.7]
+\tzhelplines[use as bounding box](5,5)
+\tzaxes(5,5)
+\tzparabola"curve"(0,1)(2,3)(5,1)
+\tzsecant{curve}(1,0)(2,0)
+\tzsecant[red]{curve}(1,0)(3,0)[0:5]{secant}[r]
+\tzsecantat[blue,dashed]{curve}{1}{4}[0:5]{blue}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+See Section \ref{s:secant} on page \pageref{s:secant} for more details on |\tzsecant| and |\tzsecantat|.
+
+%%==================================
+\chapter{Examples: Economics}
+\label{ci:examples}
+
+%%------------------------------------------------------------
+\section{Markets}
+\label{si:markets}
+
+\subsection{Market equilibrium: step by step}
+\label{ssi:mkteqm}
+
+\paragraph{Step 1} Determine the size of the graph.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[x=0.05cm,y=0.05cm,scale=.7]
+% to avoid `dimension too large' error: x/y=0.05cm
+\tzhelplines[step=.5cm](110,110)
+\tzaxes(110,110){$Q$}{$P$}
+%\tzto[bend right=15]"dem"(0,100)(100,0){$D$}[a]
+%\tzto[bend right=15]"supp"(0,10)(100,90){$S$}[ar]
+%\tzXpoint*{dem}{supp}(eqm){$E$}
+%\tzproj(eqm){$Q^*$}{$P^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Step 2} Draw the demand and supply curves.
+Here, we are using |\tzto|.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[x=0.05cm,y=0.05cm,scale=.7]
+% to avoid `dimension too large' error: x/y=0.05cm
+\tzhelplines[step=.5cm](110,110)
+\tzaxes(110,110){$Q$}{$P$}
+\tzto[bend right=15]"dem"(0,100)(100,0){$D$}[a]
+\tzto[bend right=15]"supp"(0,10)(100,90){$S$}[ar]
+%\tzXpoint*{dem}{supp}(eqm){$E$}
+%\tzproj(eqm){$Q^*$}{$P^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+\paragraph{Step 3} Find an equilibrium point and name it. Use the starred version |\tzXpoint*| to print a dot and then label the point.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[x=0.05cm,y=0.05cm,scale=.7]
+% to avoid `dimension too large' error: x/y=0.05cm
+\tzhelplines[step=.5cm](110,110)
+\tzaxes(110,110){$Q$}{$P$}
+\tzto[bend right=15]"dem"(0,100)(100,0){$D$}[a]
+\tzto[bend right=15]"supp"(0,10)(100,90){$S$}[ar]
+\tzXpoint*{dem}{supp}(eqm){$E$}
+%\tzproj(eqm){$Q^*$}{$P^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+\tmpclearpage
+
+\paragraph{Step 4} If necessary, use |\tzproj| to draw projection lines with text around the projection points.
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[x=0.05cm,y=0.05cm,scale=.7]
+% to avoid `dimension too large' error: x/y=0.05cm
+%\tzhelplines[step=.5cm](110,110)
+\tzaxes(110,110){$Q$}{$P$}
+\tzto[bend right=15]"dem"(0,100)(100,0){$D$}[a]
+\tzto[bend right=15]"supp"(0,10)(100,90){$S$}[ar]
+\tzXpoint*{dem}{supp}(eqm){$E$}
+\tzproj(eqm){$Q^*$}{$P^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{Tax incidence: step by step}
+\label{ssi:taxincidence}
+
+\begin{enumerate}[{Step} 1{:}]
+\item Determine the size of the graph.
+\end{enumerate}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.035,font=\scriptsize]
+\tzhelplines[step=10cm](120,120)
+\tzaxes(120,120){$Q$}{$P$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.035,font=\scriptsize]
+%\tzhelplines[step=10cm](120,120)
+\tzaxes(120,120){$Q$}{$P$}
+% step 2
+\def\demA{100-\x}
+\def\suppA{10+\x}
+\tzfn\demA[0:100]{$D$}[ar] % name path = \demA
+\tzfn\suppA[0:90]{$S$}[r] % name path = \suppA
+\tzXpoint*{demA}{suppA}(E){$E$}
+% step 3
+\tzfn[dashed]"suppB"{\suppA+20}[0:80]{$S'$}[ar]
+\tzXpoint*{demA}{suppB}(newE){$E'$}
+\tzproj(newE){$Q$}{$P_d$}
+% step 4
+\tzvXpoint{suppA}(newE)(vX)
+% step 5
+\tzprojy(vX){$P_s$}
+\tzprojy(E){$P^c$}
+% step 6
+\tzpath*[red](E)(newE)(vX);
+% step 7
+\tznode($(E)!10cm!(E-|0,0)$){}[pin={-70:SWL}]
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{enumerate}\addtocounter{enumi}{1}\renewcommand{\labelenumi}{{Step} \theenumi{:}}\firmlist
+\item Define functions and plot them. And then, find an intersection point.
+\item Draw the shifted supply curve and find new equilibrium point. And then, project the point on each axis.
+\item To illustrate the social welfare loss (SWL), find a vertical intersection point of the original supply curve using new equilibrium point.
+\item Project both of the old equilibrium point and the vertical intersection point onto the $y$ axis and add text.
+\item Fill the area of the social welfare loss with color.
+\item Add text `SWL' at the appropriate place.
+\end{enumerate}
+
+
+%%------------------------------------------------------------
+\section{Firms}
+\label{si:firms}
+
+\subsection{Cost curves}
+\label{ssi:costcurves}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+\tzhelplines(10,10)
+\tzaxes(10,10){$q$}{$AC$\\$AVC$\\$MC$}[align=center]
+\tzparabola"MC"(.5,4)(2,2)(6,9){$MC$}[a]
+\tzhXpointat{MC}{5}(A)
+\tzhXpointat{MC}{3}(B) % (B-2) will be used!
+\tzdots*(A)(B-2);
+\tzparabola(2,7)(A)(8,9){$AC$}[r]
+\tzparabola(1,4.5)(B-2)(8,8){$AVC$}[r]
+\end{tikzpicture}
+\end{tzcode}
+
+\subsection{Equilibrium of a competitive firm}
+\label{ssi:competitive}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.4,font=\scriptsize]
+%\tzhelplines(10,10)
+\tzaxes(10,10){$q$}{$P$\\$AC$\\$MC$}[align=center]
+\tzparabola"MC"(2,2)(6,9){$MC$}[a]
+\tzhXpointat{MC}{4}(A) % point (A) on MC at q=4
+\tzparabola"AC"(2,7)(A)(8,9){$AC$}[r] % (A): minAC
+\tzhfnat[blue]"price"{6}[0:9]{$P$}[l,at start]
+\tzXpoint*{price}{MC}(E)
+\tzprojx(E){$q^*$}
+\tzvXpoint{AC}(E)(ACeqm) % point on AC in eqmuilibrium
+\tzprojy(ACeqm){$AC(q^*)$}
+\tzpath*[red](E-|0,0)(E)(ACeqm)(ACeqm-|0,0);
+\tznode(2,5){$\pi^*$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\subsection{Monopoly equilibrium}
+\label{ssi:monopoly}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(10,10)
+\tzaxes(10,10){$Q$}{$P$}
+\def\DD{8-\x}
+\def\MR{8-2*\x}
+\def\MC{\x}
+\tzfn\DD[0:8]{$D$}[ar]
+\tzfn\MR[0:4.5]{$MR$}[r]
+\tzfn\MC[0:7]{$MC$}[r]
+\tzXpoint*{MR}{MC}(E)
+\tzvXpoint*{DD}(E)(EE)
+\tzproj(EE){$Q^M$}{$P^M$}
+\tzXpoint{DD}{MC}(C)
+\tzpath*(EE)(C)(E);
+\tznode(C){\tiny SWL}[l]
+\tzpath*[blue](0,8)(EE)(EE-|0,0);
+\tznode(1,6){C.S.}
+\tzpath[pattern=horizontal lines](0,0)(E)(E-|0,0);
+\tznode(1,2){P.S.}
+\end{tikzpicture}
+\end{tzcode}
+
+%%------------------------------------------------------------
+\section{Consumers: Budget lines and indifference curves}
+\label{si:consumers}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.3,font=\scriptsize]
+%\tzhelplines(15,12)
+\tzaxes(15,12){$x$}{$y$}
+\def\bgt{-3/4*\x+9} % 3x+4y=36
+\tzfn\bgt[0:12]
+\tzvXpoint*{bgt}(6,0)(A){A}[45]
+\tzplotcurve"ICC"(3,9)(A)(12,3); % trial and error
+\tzproj(A){$x^*$}{$y^*$}
+\tzticks{12}{9}
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.15,font=\scriptsize]
+%\tzhelplines(35,25)
+\tzaxes(35,25){$x$}{$y$}
+\def\bgt{-2/3*\x+20} % 2x+3y=60
+\def\IC{150/\x} % u(x,y)=xy
+\tzfn\bgt[0:30]
+\tzfn\IC[7:30]
+\tzcoor*(15,10)(E){$E$}[45]
+\tzproj(E)
+\tzticks{15,30}{10,20}
+\tzvXpointat*[red]{IC}{12}(A)
+\tztangent[blue,densely dashed]{IC}(A)[5:20]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Production Possibility Curves}
+\label{si:PPC}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+\tzhelplines(9,8)
+\tzaxes(9,8){$X$}{$Y$}
+\tzto[out=-10,in=105]"PPC"(0,7)(6,0){PPC}[ar]
+\tzvXpointat*{PPC}{2}(E)
+\tztangent[blue]"tan"{PPC}(E)[0:8]
+\tzvXpointat*{tan}{4}(F)
+\tzplotcurve[densely dashed,red](2,7)(F)(8,4);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+
+%%------------------------------------------------------------
+\section{Edgeworth box}
+\label{si:edgeworth}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(9,7)
+\tzaxes(9,7){$x_1$}{$y_1$}
+\tzaxes<8,6>(8,6)(-1,-1){$x_2$}[l]{$y_2$}[b]
+\tzshoworigin{$O_1$}
+\tzshoworigin(8,6){$O_2$}[ar]
+\tzto[bend right](2,5)(7,2){$u_1$}[r]
+\tzto[bend left](1,4)(6,1){$u_2$}[b]
+\end{tikzpicture}
+\end{tzcode}
+
+
+%%------------------------------------------------------------
+\section{Growth}
+\label{si:growth}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(10,8)
+\tzshoworigin
+\tzaxes*(10,8){$k$}{$y$} % bounding box
+\def\Fk{3*(\x)^(1/3)}
+\def\sFk{2*(\x)^(1/3)}
+\def\ndk{7/9*\x}
+\tzfn\Fk[0:9]{$y=f(k)$}[r] % name path=Fk
+\tzfn\sFk[0:9]{$sf(k)$}[r] % name path=sFk
+\tzfn\ndk[0:9]{$(n+\delta)k$}[r] % name path=ndk
+\tzXpoint*{sFk}{ndk}(E)[2]{$E$}[135] % (E)=(E-2)
+\tzvXpoint*{Fk}(E)(YE) % 2nd X point
+\tzproj(YE){$k^*$}{$y^*$}
+\tzvXpointat*{Fk}{2}(A)
+\tzvXpointat*{sFk}{2}(B)
+\tzvXpointat*{ndk}{2}(C)
+\tzproj(A){$k_0$}{$y_0$}
+\tzprojy(B){$sf(k_0)$}
+\tzprojy(C){$(n+\delta)k_0$}
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+%%------------------------------------------------------------
+\section{Liquidity trap}
+\label{si:trap}
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(10,8)
+\tzshoworigin
+\tzaxes(10,8){$Y$}{$r$}
+\tzline"LM"(1,2)(5,2)
+\tzto[out=0,in=-95](5,2)(8,6){$LM$}[a]
+\tzto[dashed,out=0,in=-95](5,2)(9.5,6){$LM'$}[a]
+\tzLFn"IS"(4,2){-1}[5:1]{$IS$}[a]
+\tzLFn[dashed]<1,0>"ISa"(4,2){-1}[5:1]{$IS'$}[a] %%
+\tzXpoint{IS}{LM}(E)
+\tzXpoint{ISa}{LM}(E1)
+\tzproj(E){$Y^*$}{$r_0$}
+\tzprojx(E1){$Y'$}
+\end{tikzpicture}
+\end{tzcode}
+
+$LM$ curves are drawn with two paths.
+To shift the $IS$ curve, |<shift coor>| is used. See Section \ref{s:tzLFn} on page \pageref{s:tzLFn} for more details.
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=.5,font=\scriptsize]
+%\tzhelplines(10,8)
+\tzshoworigin
+\tzaxes(10,8){$m$}{$r$}
+\tzto[out=-88,in=180](1,7)(5,2)
+ <--(9,2) node [r] {$m^d$}> % code.append
+\tzvfnat{5}[0:6]{$m^s_0$}[a]
+\tzvfnat{6.5}[0:6]{$m^s_1$}[a]
+\tzvfnat{8}[0:6]{$m^s_2$}[a]
+\tzprojy(5,2){$r_0$}
+\tzticksx{5/{$m_0$},6.5/{$m_1$},8/{$m_2$}}
+\end{tikzpicture}
+\end{tzcode}
+
+The money demand ($m_d$) curve is drawn with one path.
+To do this, |<code.append>| is used.
+See Section \ref{s:tzto} on page \pageref{s:tzto} for more details.
+
+
+%%------------------------------------------------------------
+\section{Miscellany}
+\label{si:misc}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[font=\scriptsize]
+\def\z{1}
+\tzcoors
+ (0,0)(A)
+ ($(A) + (45:\z)$)(B)
+ ($(B) + (45:\z)$)(C)
+ ($(A) + (-45:\z)$)(D)
+ ($(D) + (45:\z)$)(E)
+ ($(E) + (45:\z)$)(F)
+ ($(D) + (-45:\z)$)(G)
+ ($(G) + (45:\z)$)(H)
+ ($(H) + (45:\z)$)(I);
+
+\foreach \a in {A,...,I}
+ { \tzdot*(\a){\a}
+ }
+
+\tzlines(D)(A)(B)(C)(F)(E)(D)(G)(H)(I)(F);
+\tzlines[red](B)(E)(H);
+\end{tikzpicture}
+\end{tzcode}
+
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=1,font=\scriptsize]
+\tzaxes(4,4){alternatives}{preferences}
+\tzticksx{1/$a$,2/$b$,3/$c$}
+\tzplot[mark=ball](1,3)(2,2)(3,1){A}[0];
+\tzplot[mark=*] (1,2)(2,1)(3,3){B}[0];
+\tzplot[mark=+] (1,1)(2,3)(3,2){C}[0];
+\end{tikzpicture}
+\end{tzcode}
+
+
+\begin{tzcode}{.3}
+\begin{tikzpicture}[scale=1,font=\scriptsize]
+\tzaxes(4,4){alternatives}{preferences}
+\tzticksx{1/$a$,2/$b$,3/$c$}
+\foreach \x in {1,2,3}
+ {\foreach \y in {1,2,3}
+ {\tzdot*(\x,\y)}
+ }
+\tzlines(1,3)(2,2)(3,1){A}[r];
+\tzlines(1,2)(2,1)(3,3){B}[r];
+\tzlines(1,1)(2,3)(3,2){C}[r];
+\end{tikzpicture}
+\end{tzcode}
+
+