% Copyright 2019 by Till Tantau % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Free Documentation License. % % See the file doc/generic/pgf/licenses/LICENSE for more details. \begin{document} % The titlepage \pgfmathsetseed{1} \newbox\mybox { \parindent0pt \null \colorlet{mintgreen}{green!50!black!50} \thispagestyle{empty} \vskip3cm \vfill \hfil \begin{tikzpicture}[overlay] \coordinate (front) at (0,0); \coordinate (horizon) at (0,.31\paperheight); \coordinate (bottom) at (0,-.6\paperheight); \coordinate (sky) at (0,.57\paperheight); \coordinate (left) at (-.51\paperwidth,0); \coordinate (right) at (.51\paperwidth,0); \shade [bottom color=blue!30!black!10,top color=blue!30!black!50] ([yshift=-5mm]horizon -| left) rectangle (sky -| right); \shade [bottom color=black!70!green!25,top color=black!70!green!10] (front -| left) -- (horizon -| left) decorate [decoration=random steps] { -- (horizon -| right) } -- (front -| right) -- cycle; \shade [top color=black!70!green!25,bottom color=black!25] ([yshift=-5mm-1pt]front -| left) rectangle ([yshift=1pt]front -| right); \fill [black!25] (bottom -| left) rectangle ([yshift=-5mm]front -| right); \def\nodeshadowed[#1]#2;{\node[scale=2,above,#1]{\global\setbox\mybox=\hbox{#2}\copy\mybox}; \node[scale=2,above,#1,yscale=-1,scope fading=south,opacity=0.4]{\box\mybox};} \nodeshadowed [at={(-5,5 )},yslant=0.05] {\Huge Ti\textcolor{orange}{\emph{k}}Z}; \nodeshadowed [at={( 0,5.3)}] {\huge \textcolor{mintgreen}{\&}}; \nodeshadowed [at={( 5,5 )},yslant=-0.05] {\Huge \textsc{PGF}}; \nodeshadowed [at={( 0,2 )}] {Manual for Version \pgftypesetversion}; \foreach \where in {-9cm,9cm} {\nodeshadowed [at={(\where,5cm)}] { % TODO: Nesting tikzpictures is NOT supported \tikz \draw [green!20!black, rotate=90] [l-system={rule set={F -> FF-[-F+F]+[+F-F]}, axiom=F, order=4, step=2pt, randomize step percent=50, angle=30, randomize angle percent=5}] lindenmayer system;};} \foreach \i in {0.5,0.6,...,2} \fill [white,decoration=Koch snowflake,opacity=.9] [shift=(horizon),shift={(rand*11,rnd*7)},scale=\i] [double copy shadow={opacity=0.2,shadow xshift=0pt,shadow yshift=3*\i pt,fill=white,draw=none}] decorate { decorate { decorate { (0,0) -- ++(60:1) -- ++(-60:1) -- cycle } } }; \node (left text) [text width=.5\paperwidth-2cm,below right,at={(-.5\paperwidth+1cm,-1.5cm)}] { \fontencoding{T1} \fontfamily{pcr} \def\textbraceleft{\char`\{} \def\textbraceright{\char`\}} \def\textbackslash{\char`\\} \begin{lstlisting}[basicstyle=\scriptsize\color{black}, keywordstyle=\bfseries\color{white}, identifierstyle=\bfseries\color{black}, keywords={tikzpicture,shade,fill,draw,path,node}, literate={-}{{-}}1] \begin{tikzpicture} \coordinate (front) at (0,0); \coordinate (horizon) at (0,.31\paperheight); \coordinate (bottom) at (0,-.6\paperheight); \coordinate (sky) at (0,.57\paperheight); \coordinate (left) at (-.51\paperwidth,0); \coordinate (right) at (.51\paperwidth,0); \shade [bottom color=white, top color=blue!30!black!50] ([yshift=-5mm]horizon -| left) rectangle (sky -| right); \shade [bottom color=black!70!green!25, top color=black!70!green!10] (front -| left) -- (horizon -| left) decorate [decoration=random steps] { -- (horizon -| right) } -- (front -| right) -- cycle; \shade [top color=black!70!green!25, bottom color=black!25] ([yshift=-5mm-1pt]front -| left) rectangle ([yshift=1pt]front -| right); \fill [black!25] (bottom -| left) rectangle ([yshift=-5mm]front -| right); \def\nodeshadowed[#1]#2;{ \node[scale=2,above,#1]{ \global\setbox\mybox=\hbox{#2} \copy\mybox}; \node[scale=2,above,#1,yscale=-1, scope fading=south,opacity=0.4]{\box\mybox}; } \end{lstlisting} }; \node (right text) [text width=.5\paperwidth-2cm,below right,at={(1cm,-1.5cm)}] { \fontencoding{T1} \fontfamily{pcr} \def\textbraceleft{\char`\{} \def\textbraceright{\char`\}} \def\textbackslash{\char`\\} \begin{lstlisting}[basicstyle=\scriptsize\color{black}, keywordstyle=\bfseries\color{white}, identifierstyle=\bfseries\color{black}, keywords={tikzpicture,shade,fill,draw,path,node}, literate={-}{{-}}1] \nodeshadowed [at={(-5,8 )},yslant=0.05] {\Huge Ti\textcolor{orange}{\emph{k}}Z}; \nodeshadowed [at={( 0,8.3)}] {\huge \textcolor{green!50!black!50}{\&}}; \nodeshadowed [at={( 5,8 )},yslant=-0.05] {\Huge \textsc{PGF}}; \nodeshadowed [at={( 0,5 )}] {Manual for Version \pgftypesetversion}; \foreach \where in {-9cm,9cm} { \nodeshadowed [at={(\where,5cm)}] { \tikz \draw [green!20!black, rotate=90, l-system={rule set={F -> FF-[-F+F]+[+F-F]}, axiom=F, order=4,step=2pt, randomize step percent=50, angle=30, randomize angle percent=5}] l-system; }} \foreach \i in {0.5,0.6,...,2} \fill [white,opacity=\i/2, decoration=Koch snowflake, shift=(horizon),shift={(rand*11,rnd*7)}, scale=\i,double copy shadow={ opacity=0.2,shadow xshift=0pt, shadow yshift=3*\i pt,fill=white,draw=none}] decorate { decorate { decorate { (0,0)- ++(60:1) -- ++(-60:1) -- cycle } } }; \node (left text) ... \node (right text) ... \fill [decorate,decoration={footprints,foot of=gnome}, opacity=.5,brown] (rand*8,-rnd*10) to [out=rand*180,in=rand*180] (rand*8,-rnd*10); \end{tikzpicture} \end{lstlisting} }; \fill [decorate,decoration=footprints, decoration={footprints,foot of=gnome}, opacity=.5,brown] (rand*8,-rnd*10) to [out=rand*180,in=rand*180] (rand*8,-rnd*10); \end{tikzpicture} \vfill \vbox{} \clearpage } { \vbox{} \vskip0pt plus 1fill Für meinen Vater, damit er noch viele schöne \TeX-Graphiken erschaffen kann. \vskip1em \hfill\emph{Till} \vskip0pt plus 3fill \parindent=0pt Copyright 2007 to 2013 by Till Tantau \medskip Permission is granted to copy, distribute and/or modify \emph{the documentation} under the terms of the \textsc{gnu} Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled \textsc{gnu} Free Documentation License. \medskip Permission is granted to copy, distribute and/or modify \emph{the code of the package} under the terms of the \textsc{gnu} Public License, Version 2 or any later version published by the Free Software Foundation. A copy of the license is included in the section entitled \textsc{gnu} Public License. \medskip Permission is also granted to distribute and/or modify \emph{both the documentation and the code} under the conditions of the LaTeX Project Public License, either version 1.3 of this license or (at your option) any later version. A copy of the license is included in the section entitled \LaTeX\ Project Public License. \vbox{} \clearpage } \title{\bfseries The \tikzname\ and {\Large PGF} Packages\\ \large Manual for version \pgfversion\\[1mm] \large\href{https://github.com/pgf-tikz/pgf}{\texttt{https://github.com/pgf-tikz/pgf}}} \author{Till Tantau\footnote{Editor of this documentation. Parts of this documentation have been written by other authors as indicated in these parts or chapters and in Section~\ref{section-authors}.}\\ \normalsize Institut für Theoretische Informatik\\[-1mm] \normalsize Universität zu Lübeck} \maketitle \label{table-of-contents} \tableofcontents \clearpage \include{pgfmanual-en-introduction} \part{Tutorials and Guidelines} {\Large \emph{by Till Tantau}} \bigskip \noindent To help you get started with \tikzname, instead of a long installation and configuration section, this manual starts with tutorials. They explain all the basic and some of the more advanced features of the system, without going into all the details. This part also contains some guidelines on how you should proceed when creating graphics using \tikzname. \vskip3cm \begin{codeexample}[graphic=white,width=0pt] \tikz \draw[thick,rounded corners=8pt] (0,0) -- (0,2) -- (1,3.25) -- (2,2) -- (2,0) -- (0,2) -- (2,2) -- (0,0) -- (2,0); \end{codeexample} \include{pgfmanual-en-tutorial} \include{pgfmanual-en-tutorial-nodes} \include{pgfmanual-en-tutorial-Euclid} \include{pgfmanual-en-tutorial-chains} \include{pgfmanual-en-tutorial-map} \include{pgfmanual-en-guidelines} \part{Installation and Configuration} {\Large \emph{by Till Tantau}} \bigskip \noindent This part explains how the system is installed. Typically, someone has already done so for your system, so this part can be skipped; but if this is not the case and you are the poor fellow who has to do the installation, read the present part. \vskip1cm \begin{codeexample}[graphic=white,preamble={\usetikzlibrary{arrows.meta,automata,positioning,shadows}}] \begin{tikzpicture}[->,>={Stealth[round]},shorten >=1pt,auto,node distance=2.8cm,on grid,semithick, every state/.style={fill=red,draw=none,circular drop shadow,text=white}] \node[initial,state] (A) {$q_a$}; \node[state] (B) [above right=of A] {$q_b$}; \node[state] (D) [below right=of A] {$q_d$}; \node[state] (C) [below right=of B] {$q_c$}; \node[state] (E) [below=of D] {$q_e$}; \path (A) edge node {0,1,L} (B) edge node {1,1,R} (C) (B) edge [loop above] node {1,1,L} (B) edge node {0,1,L} (C) (C) edge node {0,1,L} (D) edge [bend left] node {1,0,R} (E) (D) edge [loop below] node {1,1,R} (D) edge node {0,1,R} (A) (E) edge [bend left] node {1,0,R} (A); \node [right=1cm,text width=8cm] at (C) { The current candidate for the busy beaver for five states. It is presumed that this Turing machine writes a maximum number of $1$'s before halting among all Turing machines with five states and the tape alphabet $\{0, 1\}$. Proving this conjecture is an open research problem. }; \end{tikzpicture} \end{codeexample} \include{pgfmanual-en-installation} \include{pgfmanual-en-license} \include{pgfmanual-en-drivers} \part{Ti\emph{k}Z ist \emph{kein} Zeichenprogramm} \label{part-tikz} {\Large \emph{by Till Tantau}} \bigskip \noindent \vskip3cm \begin{codeexample}[graphic=white,preamble={\usetikzlibrary{angles,calc,quotes}}] \begin{tikzpicture}[angle radius=.75cm] \node (A) at (-2,0) [red,left] {$A$}; \node (B) at ( 3,.5) [red,right] {$B$}; \node (C) at (-2,2) [blue,left] {$C$}; \node (D) at ( 3,2.5) [blue,right] {$D$}; \node (E) at (60:-5mm) [below] {$E$}; \node (F) at (60:3.5cm) [above] {$F$}; \coordinate (X) at (intersection cs:first line={(A)--(B)}, second line={(E)--(F)}); \coordinate (Y) at (intersection cs:first line={(C)--(D)}, second line={(E)--(F)}); \path (A) edge [red, thick] (B) (C) edge [blue, thick] (D) (E) edge [thick] (F) pic ["$\alpha$", draw, fill=yellow] {angle = F--X--A} pic ["$\beta$", draw, fill=green!30] {angle = B--X--F} pic ["$\gamma$", draw, fill=yellow] {angle = E--Y--D} pic ["$\delta$", draw, fill=green!30] {angle = C--Y--E}; \node at ($ (D)!.5!(B) $) [right=1cm,text width=6cm,rounded corners,fill=red!20,inner sep=1ex] { When we assume that $\color{red}AB$ and $\color{blue}CD$ are parallel, i.\,e., ${\color{red}AB} \mathbin{\|} \color{blue}CD$, then $\alpha = \gamma$ and $\beta = \delta$. }; \end{tikzpicture} \end{codeexample} \include{pgfmanual-en-tikz-design} \include{pgfmanual-en-tikz-scopes} \include{pgfmanual-en-tikz-coordinates} \include{pgfmanual-en-tikz-paths} \include{pgfmanual-en-tikz-actions} \include{pgfmanual-en-tikz-arrows} \include{pgfmanual-en-tikz-shapes} \include{pgfmanual-en-tikz-pics} \include{pgfmanual-en-tikz-graphs} \include{pgfmanual-en-tikz-matrices} \include{pgfmanual-en-tikz-trees} \include{pgfmanual-en-tikz-plots} \include{pgfmanual-en-tikz-transparency} \include{pgfmanual-en-tikz-decorations} \include{pgfmanual-en-tikz-transformations} \include{pgfmanual-en-tikz-animations} \part{Graph Drawing} \label{part-gd} {\Large \emph{by Till Tantau et al.}} \bigskip \noindent \emph{Graph drawing algorithms} do the tough work of computing a layout of a graph for you. \tikzname\ comes with powerful such algorithms, but you can also implement new algorithms in the Lua programming language. \vskip1cm \ifluatex \begin{codeexample}[ graphic=white, preamble={\usetikzlibrary{arrows.meta,graphs,graphdrawing} \usegdlibrary{layered}}] \tikz [nodes={text height=.7em, text depth=.2em, draw=black!20, thick, fill=white, font=\footnotesize}, >={Stealth[round,sep]}, rounded corners, semithick] \graph [layered layout, level distance=1cm, sibling sep=.5em, sibling distance=1cm] { "5th Edition" -> { "6th Edition", "PWB 1.0" }; "6th Edition" -> { "LSX" [>child anchor=45], "1 BSD", "Mini Unix", "Wollongong", "Interdata" }; "Interdata" -> { "Unix/TS 3.0", "PWB 2.0", "7th Edition" }; "7th Edition" -> { "8th Edition", "32V", "V7M", "Ultrix-11", "Xenix", "UniPlus+" }; "V7M" -> "Ultrix-11"; "8th Edition" -> "9th Edition"; "1 BSD" -> "2 BSD" -> "2.8 BSD" -> { "Ultrix-11", "2.9 BSD" }; "32V" -> "3 BSD" -> "4 BSD" -> "4.1 BSD" -> { "4.2 BSD", "2.8 BSD", "8th Edition" }; "4.2 BSD" -> { "4.3 BSD", "Ultrix-32" }; "PWB 1.0" -> { "PWB 1.2" -> "PWB 2.0", "USG 1.0" -> { "CB Unix 1", "USG 2.0" }}; "CB Unix 1" -> "CB Unix 2" -> "CB Unix 3" -> { "Unix/TS++", "PDP-11 Sys V" }; { "USG 2.0" -> "USG 3.0", "PWB 2.0", "Unix/TS 1.0" } -> "Unix/TS 3.0"; { "Unix/TS++", "CB Unix 3", "Unix/TS 3.0" } -> "TS 4.0" -> "System V.0" -> "System V.2" -> "System V.3"; }; \end{codeexample} \else You need to use Lua\TeX\ to typeset this part of the manual (and, also, to use algorithmic graph drawing). \fi \include{pgfmanual-en-gd-overview} \include{pgfmanual-en-gd-usage-tikz} \include{pgfmanual-en-gd-usage-pgf} \include{pgfmanual-en-gd-trees} \include{pgfmanual-en-gd-layered} \include{pgfmanual-en-gd-force} \include{pgfmanual-en-gd-circular} \include{pgfmanual-en-gd-phylogenetics} \include{pgfmanual-en-gd-edge-routing} % % XXX : disabled because of % 1. compile-time dependencies which are hard to resolve % 2. it is "hardly usable anyway" (TT) %\include{pgfmanual-en-gd-ogdf} \include{pgfmanual-en-gd-algorithm-layer} \include{pgfmanual-en-gd-algorithms-in-c} \include{pgfmanual-en-gd-display-layer} \include{pgfmanual-en-gd-binding-layer} \part{Libraries} \label{part-libraries} {\Large \emph{by Till Tantau}} \bigskip \noindent In this part the library packages are documented. They provide additional predefined graphic objects like new arrow heads or new plot marks, but sometimes also extensions of the basic \pgfname\ or \tikzname\ system. The libraries are not loaded by default since many users will not need them. \medskip \noindent \begin{codeexample}[graphic=white,preamble={\usetikzlibrary{arrows,trees}}] \tikzset{ ld/.style={level distance=#1},lw/.style={line width=#1}, level 1/.style={ld=4.5mm, trunk, lw=1ex ,sibling angle=60}, level 2/.style={ld=3.5mm, trunk!80!leaf a,lw=.8ex,sibling angle=56}, level 3/.style={ld=2.75mm,trunk!60!leaf a,lw=.6ex,sibling angle=52}, level 4/.style={ld=2mm, trunk!40!leaf a,lw=.4ex,sibling angle=48}, level 5/.style={ld=1mm, trunk!20!leaf a,lw=.3ex,sibling angle=44}, level 6/.style={ld=1.75mm,leaf a, lw=.2ex,sibling angle=40}, } \pgfarrowsdeclare{leaf}{leaf} {\pgfarrowsleftextend{-2pt} \pgfarrowsrightextend{1pt}} { \pgfpathmoveto{\pgfpoint{-2pt}{0pt}} \pgfpatharc{150}{30}{1.8pt} \pgfpatharc{-30}{-150}{1.8pt} \pgfusepathqfill } \newcommand{\logo}[5] { \colorlet{border}{#1} \colorlet{trunk}{#2} \colorlet{leaf a}{#3} \colorlet{leaf b}{#4} \begin{tikzpicture} \scriptsize\scshape \draw[border,line width=1ex,yshift=.3cm, yscale=1.45,xscale=1.05,looseness=1.42] (1,0) to [out=90, in=0] (0,1) to [out=180,in=90] (-1,0) to [out=-90,in=-180] (0,-1) to [out=0, in=-90] (1,0) -- cycle; \coordinate (root) [grow cyclic,rotate=90] child { child [line cap=round] foreach \a in {0,1} { child foreach \b in {0,1} { child foreach \c in {0,1} { child foreach \d in {0,1} { child foreach \leafcolor in {leaf a,leaf b} { edge from parent [color=\leafcolor,-#5] } } } } } edge from parent [shorten >=-1pt,serif cm-,line cap=butt] }; \node [align=center,below] at (0pt,-.5ex) { \textcolor{border}{T}heoretical \\ \textcolor{border}{C}omputer \\ \textcolor{border}{S}cience }; \end{tikzpicture} } \begin{minipage}{3cm} \logo{green!80!black}{green!25!black}{green}{green!80}{leaf}\\ \logo{green!50!black}{black}{green!80!black}{red!80!green}{leaf}\\ \logo{red!75!black}{red!25!black}{red!75!black}{orange}{leaf}\\ \logo{black!50}{black}{black!50}{black!25}{} \end{minipage} \end{codeexample} \include{pgfmanual-en-library-3d} \include{pgfmanual-en-library-angles} \include{pgfmanual-en-library-arrows} \include{pgfmanual-en-library-automata} \include{pgfmanual-en-library-babel} \include{pgfmanual-en-library-backgrounds} \include{pgfmanual-en-library-calc} \include{pgfmanual-en-library-calendar} \include{pgfmanual-en-library-chains} \include{pgfmanual-en-library-circuits} \include{pgfmanual-en-library-decorations} \include{pgfmanual-en-library-er} \include{pgfmanual-en-library-external} \include{pgfmanual-en-library-fadings} \include{pgfmanual-en-library-fit} \include{pgfmanual-en-library-fixedpoint} \include{pgfmanual-en-library-fpu} \include{pgfmanual-en-library-lsystems} \include{pgfmanual-en-library-math} \include{pgfmanual-en-library-matrices} \include{pgfmanual-en-library-mindmaps} \include{pgfmanual-en-library-folding} \include{pgfmanual-en-library-patterns} \include{pgfmanual-en-library-perspective} \include{pgfmanual-en-library-petri} \include{pgfmanual-en-library-plot-handlers} \include{pgfmanual-en-library-plot-marks} \include{pgfmanual-en-library-profiler} \include{pgfmanual-en-library-rdf} \include{pgfmanual-en-library-shadings} \include{pgfmanual-en-library-shadows} \include{pgfmanual-en-library-shapes} \include{pgfmanual-en-library-spy} \include{pgfmanual-en-library-svg-path} \include{pgfmanual-en-library-edges} \include{pgfmanual-en-library-through} \include{pgfmanual-en-library-trees} \include{pgfmanual-en-library-turtle} \include{pgfmanual-en-library-views} \part{Data Visualization} \label{part-dv} {\Large \emph{by Till Tantau}} \bigskip \noindent \begin{codeexample}[graphic=white,preamble={\usetikzlibrary{datavisualization.formats.functions}}] \tikz \datavisualization [scientific axes=clean] [ visualize as smooth line=Gaussian, Gaussian={pin in data={text={$e^{-x^2}$},when=x is 1}} ] data [format=function] { var x : interval [-7:7] samples 51; func y = exp(-\value x*\value x); } [ visualize as scatter, legend={south east outside}, scatter={ style={mark=*,mark size=1.4pt}, label in legend={text={ $\sum_{i=1}^{10} x_i$, where $x_i \sim U(-1,1) $}}} ] data [format=function] { var i : interval [0:1] samples 20; func y = 0; func x = (rand + rand + rand + rand + rand + rand + rand + rand + rand + rand); }; \end{codeexample} \include{pgfmanual-en-dv-introduction} \include{pgfmanual-en-dv-main} \include{pgfmanual-en-dv-formats} \include{pgfmanual-en-dv-axes} \include{pgfmanual-en-dv-visualizers} \include{pgfmanual-en-dv-stylesheets} \include{pgfmanual-en-dv-polar} \include{pgfmanual-en-dv-backend} \part{Utilities} \label{part-utilities} {\Large \emph{by Till Tantau}} \bigskip \noindent The utility packages are not directly involved in creating graphics, but you may find them useful nonetheless. All of them either directly depend on \pgfname\ or they are designed to work well together with \pgfname\ even though they can be used in a stand-alone way. \vskip2cm \medskip \noindent \begin{codeexample}[graphic=white] \begin{tikzpicture}[scale=2] \shade[top color=blue,bottom color=gray!50] (0,0) parabola (1.5,2.25) |- (0,0); \draw (1.05cm,2pt) node[above] {$\displaystyle\int_0^{3/2} \!\!x^2\mathrm{d}x$}; \draw[help lines] (0,0) grid (3.9,3.9) [step=0.25cm] (1,2) grid +(1,1); \draw[->] (-0.2,0) -- (4,0) node[right] {$x$}; \draw[->] (0,-0.2) -- (0,4) node[above] {$f(x)$}; \foreach \x/\xtext in {1/1, 1.5/1\frac{1}{2}, 2/2, 3/3} \draw[shift={(\x,0)}] (0pt,2pt) -- (0pt,-2pt) node[below] {$\xtext$}; \foreach \y/\ytext in {1/1, 2/2, 2.25/2\frac{1}{4}, 3/3} \draw[shift={(0,\y)}] (2pt,0pt) -- (-2pt,0pt) node[left] {$\ytext$}; \draw (-.5,.25) parabola bend (0,0) (2,4) node[below right] {$x^2$}; \end{tikzpicture} \end{codeexample} \include{pgfmanual-en-pgfkeys} \include{pgfmanual-en-pgffor} \include{pgfmanual-en-pgfcalendar} \include{pgfmanual-en-pages} \include{pgfmanual-en-xxcolor} \include{pgfmanual-en-module-parser} \part{Mathematical and Object-Oriented Engines} {\Large \emph{by Mark Wibrow and Till Tantau}} \bigskip \noindent \pgfname\ comes with two useful engines: One for doing mathematics, one for doing object-oriented programming. Both engines can be used independently of the main \pgfname. The job of the mathematical engine is to support mathematical operations like addition, subtraction, multiplication and division, using both integers and non-integers, but also functions such as square-roots, sine, cosine, and generate pseudo-random numbers. Mostly, you will use the mathematical facilities of \pgfname\ indirectly, namely when you write a coordinate like |(5cm*3,6cm/4)|, but the mathematical engine can also be used independently of \pgfname\ and \tikzname. The job of the object-oriented engine is to support simple object-oriented programming in \TeX. It allows the definition of \emph{classes} (without inheritance), \emph{methods}, \emph{attributes} and \emph{objects}. \vskip1cm \begin{codeexample}[graphic=white] \pgfmathsetseed{1} \foreach \col in {black,red,green,blue} { \begin{tikzpicture}[x=10pt,y=10pt,ultra thick,baseline,line cap=round] \coordinate (current point) at (0,0); \coordinate (old velocity) at (0,0); \coordinate (new velocity) at (rand,rand); \foreach \i in {0,1,...,100} { \draw[\col!\i] (current point) .. controls ++([scale=-1]old velocity) and ++(new velocity) .. ++(rand,rand) coordinate (current point); \coordinate (old velocity) at (new velocity); \coordinate (new velocity) at (rand,rand); } \end{tikzpicture} } \end{codeexample} \include{pgfmanual-en-math-design} \include{pgfmanual-en-math-parsing} \include{pgfmanual-en-math-commands} \include{pgfmanual-en-math-algorithms} \include{pgfmanual-en-math-numberprinting} \include{pgfmanual-en-oo} \part{The Basic Layer} {\Large \emph{by Till Tantau}} \bigskip \noindent \vskip1cm \begin{codeexample}[graphic=white] \begin{tikzpicture} \draw[gray,very thin] (-1.9,-1.9) grid (2.9,3.9) [step=0.25cm] (-1,-1) grid (1,1); \draw[blue] (1,-2.1) -- (1,4.1); % asymptote \draw[->] (-2,0) -- (3,0) node[right] {$x(t)$}; \draw[->] (0,-2) -- (0,4) node[above] {$y(t)$}; \foreach \pos in {-1,2} \draw[shift={(\pos,0)}] (0pt,2pt) -- (0pt,-2pt) node[below] {$\pos$}; \foreach \pos in {-1,1,2,3} \draw[shift={(0,\pos)}] (2pt,0pt) -- (-2pt,0pt) node[left] {$\pos$}; \fill (0,0) circle (0.064cm); \draw[thick,parametric,domain=0.4:1.5,samples=200] % The plot is reparameterised such that there are more samples % near the center. plot[id=asymptotic-example] function{(t*t*t)*sin(1/(t*t*t)),(t*t*t)*cos(1/(t*t*t))} node[right] {$\bigl(x(t),y(t)\bigr) = (t\sin \frac{1}{t}, t\cos \frac{1}{t})$}; \fill[red] (0.63662,0) circle (2pt) node [below right,fill=white,yshift=-4pt] {$(\frac{2}{\pi},0)$}; \end{tikzpicture} \end{codeexample} \include{pgfmanual-en-base-design} \include{pgfmanual-en-base-scopes} \include{pgfmanual-en-base-points} \include{pgfmanual-en-base-paths} \include{pgfmanual-en-base-decorations} \include{pgfmanual-en-base-actions} \include{pgfmanual-en-base-arrows} \include{pgfmanual-en-base-nodes} \include{pgfmanual-en-base-matrices} \include{pgfmanual-en-base-transformations} \include{pgfmanual-en-base-patterns} \include{pgfmanual-en-base-images} \include{pgfmanual-en-base-external} \include{pgfmanual-en-base-plots} \include{pgfmanual-en-base-layers} \include{pgfmanual-en-base-shadings} \include{pgfmanual-en-base-transparency} \include{pgfmanual-en-base-animations} \include{pgfmanual-en-base-internalregisters} \include{pgfmanual-en-base-quick} \part{The System Layer} \label{part-system} {\Large \emph{by Till Tantau}} \bigskip \noindent This part describes the low-level interface of \pgfname, called the \emph{system layer}. This interface provides a complete abstraction of the internals of the underlying drivers. Unless you intend to port \pgfname\ to another driver or unless you intend to write your own optimized frontend, you need not read this part. In the following it is assumed that you are familiar with the basic workings of the |graphics| package and that you know what \TeX-drivers are and how they work. \vskip1cm \begin{codeexample}[graphic=white] \begin{tikzpicture} [shorten >=1pt,->, vertex/.style={circle,fill=black!25,minimum size=17pt,inner sep=0pt}] \foreach \name/\x in {s/1, 2/2, 3/3, 4/4, 15/11, 16/12, 17/13, 18/14, 19/15, t/16} \node[vertex] (G-\name) at (\x,0) {$\name$}; \foreach \name/\angle/\text in {P-1/234/5, P-2/162/6, P-3/90/7, P-4/18/8, P-5/-54/9} \node[vertex,xshift=6cm,yshift=.5cm] (\name) at (\angle:1cm) {$\text$}; \foreach \name/\angle/\text in {Q-1/234/10, Q-2/162/11, Q-3/90/12, Q-4/18/13, Q-5/-54/14} \node[vertex,xshift=9cm,yshift=.5cm] (\name) at (\angle:1cm) {$\text$}; \foreach \from/\to in {s/2,2/3,3/4,3/4,15/16,16/17,17/18,18/19,19/t} \draw (G-\from) -- (G-\to); \foreach \from/\to in {1/2,2/3,3/4,4/5,5/1,1/3,2/4,3/5,4/1,5/2} { \draw (P-\from) -- (P-\to); \draw (Q-\from) -- (Q-\to); } \draw (G-3) .. controls +(-30:2cm) and +(-150:1cm) .. (Q-1); \draw (Q-5) -- (G-15); \end{tikzpicture} \end{codeexample} \include{pgfmanual-en-pgfsys-overview} \include{pgfmanual-en-pgfsys-commands} \include{pgfmanual-en-pgfsys-paths} \include{pgfmanual-en-pgfsys-protocol} \include{pgfmanual-en-pgfsys-animations} \part{References and Index} \vskip1cm \begin{codeexample}[graphic=white] \begin{tikzpicture} \draw[line width=0.3cm,color=red!30,line cap=round,line join=round] (0,0)--(2,0)--(2,5); \draw[help lines] (-2.5,-2.5) grid (5.5,7.5); \draw[very thick] (1,-1)--(-1,-1)--(-1,1)--(0,1)--(0,0)-- (1,0)--(1,-1)--(3,-1)--(3,2)--(2,2)--(2,3)--(3,3)-- (3,5)--(1,5)--(1,4)--(0,4)--(0,6)--(1,6)--(1,5) (3,3)--(4,3)--(4,5)--(3,5)--(3,6) (3,-1)--(4,-1); \draw[below left] (0,0) node(s){$s$}; \draw[below left] (2,5) node(t){$t$}; \fill (0,0) circle (0.06cm) (2,5) circle (0.06cm); \draw[->,rounded corners=0.2cm,shorten >=2pt] (1.5,0.5)-- ++(0,-1)-- ++(1,0)-- ++(0,2)-- ++(-1,0)-- ++(0,2)-- ++(1,0)-- ++(0,1)-- ++(-1,0)-- ++(0,-1)-- ++(-2,0)-- ++(0,3)-- ++(2,0)-- ++(0,-1)-- ++(1,0)-- ++(0,1)-- ++(1,0)-- ++(0,-1)-- ++(1,0)-- ++(0,-3)-- ++(-2,0)-- ++(1,0)-- ++(0,-3)-- ++(1,0)-- ++(0,-1)-- ++(-6,0)-- ++(0,3)-- ++(2,0)-- ++(0,-1)-- ++(1,0); \end{tikzpicture} \end{codeexample} \printindex %\typeout{Examples: \the\codeexamplecount}% \end{document} %%% Local Variables: %%% mode: latex %%% TeX-master: "pgfmanual" %%% End: