diff options
Diffstat (limited to 'graphics/pgf/base/doc/pgfmanual-en-main-body.tex')
-rw-r--r-- | graphics/pgf/base/doc/pgfmanual-en-main-body.tex | 859 |
1 files changed, 859 insertions, 0 deletions
diff --git a/graphics/pgf/base/doc/pgfmanual-en-main-body.tex b/graphics/pgf/base/doc/pgfmanual-en-main-body.tex new file mode 100644 index 0000000000..cb3d68431f --- /dev/null +++ b/graphics/pgf/base/doc/pgfmanual-en-main-body.tex @@ -0,0 +1,859 @@ +% 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: |