diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz.code.tex | 3618 |
1 files changed, 0 insertions, 3618 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz.code.tex b/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz.code.tex deleted file mode 100644 index 805f27bcad6..00000000000 --- a/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz.code.tex +++ /dev/null @@ -1,3618 +0,0 @@ -% Copyright 2006 by Till Tantau -% -% This file may be distributed and/or modified -% -% 1. under the LaTeX Project Public License and/or -% 2. under the GNU Public License. -% -% See the file doc/generic/pgf/licenses/LICENSE for more details. - -\ProvidesPackageRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/frontendlayer/tikz.code.tex,v 1.87 2007/06/07 07:41:10 tantau Exp $ - - -% Always-present libraries: - -\usepgflibrary{plothandlers} - - -\let\tikz@orig@setkeys=\setkeys % guard against changes, later -\let\tikz@orig@define@key=\define@key - -\newdimen\tikz@lastx -\newdimen\tikz@lasty -\newdimen\tikz@lastxsaved -\newdimen\tikz@lastysaved - -\newdimen\tikzleveldistance -\newdimen\tikzsiblingdistance - -\newbox\tikz@figbox -\newbox\tikz@tempbox - -\newcount\tikztreelevel -\newcount\tikznumberofchildren -\newcount\tikznumberofcurrentchild - -\newcount\tikz@fig@count - -\newif\iftikz@node@is@a@label -\newif\iftikz@snaked - -\let\tikz@options=\pgfutil@empty -\def\tikz@addoption#1{\expandafter\def\expandafter\tikz@options\expandafter{\tikz@options#1}} -\def\tikz@addmode#1{\expandafter\def\expandafter\tikz@mode\expandafter{\tikz@mode#1}} -\def\tikz@addtransform#1{% - \ifx\tikz@transform\relax% - #1% - \else% - \expandafter\def\expandafter\tikz@transform\expandafter{\tikz@transform#1}% - \fi% -} - - - -% TikZ options: - -\def\tikzoption{\tikz@orig@define@key{tikz}} - - - -% Baseline options -\tikzoption{baseline}[0pt]{\pgfutil@ifnextchar({\tikz@baseline@coordinate}{\tikz@baseline@simple}#1\@nil}%) -\def\tikz@baseline@simple#1\@nil{\pgfsetbaseline{#1}} -\def\tikz@baseline@coordinate#1\@nil{\pgfsetbaselinepointlater{\tikz@scan@one@point\@firstofone#1}} - -% Draw options -\tikzoption{line width}{\tikz@semiaddlinewidth{#1}}% - -\def\tikz@semiaddlinewidth#1{\tikz@addoption{\pgfsetlinewidth{#1}}\pgfmathsetlength\pgflinewidth{#1}} - -\tikzoption{cap}{\tikz@addoption{\csname pgfset#1cap\endcsname}} -\tikzoption{join}{\tikz@addoption{\csname pgfset#1join\endcsname}} -\tikzoption{miter limit}{\tikz@addoption{\pgfsetmiterlimit{#1}}} - -\tikzoption{dash pattern}{% syntax: on 2pt off 3pt on 4pt ... - \def\tikz@temp{#1}% - \ifx\tikz@temp\pgfutil@empty% - \def\tikz@dashpattern{}% - \tikz@addoption{\pgfsetdash{}{0pt}}% - \else% - \def\tikz@dashpattern{}% - \expandafter\tikz@scandashon\pgfutil@gobble#1o\@nil% - \edef\tikz@temp{{\tikz@dashpattern}{\noexpand\tikz@dashphase}}% - \expandafter\tikz@addoption\expandafter{\expandafter\pgfsetdash\tikz@temp}% - \fi} -\tikzoption{dash phase}{% - \def\tikz@dashphase{#1}% - \edef\tikz@temp{{\tikz@dashpattern}{\noexpand\tikz@dashphase}}% - \expandafter\tikz@addoption\expandafter{\expandafter\pgfsetdash\tikz@temp}% -}% -\def\tikz@dashphase{0pt} - -\def\tikz@scandashon n#1o{% - \expandafter\def\expandafter\tikz@dashpattern\expandafter{\tikz@dashpattern{#1}}% - \pgfutil@ifnextchar\@nil{\pgfutil@gobble}{\tikz@scandashoff}} -\def\tikz@scandashoff ff#1o{% - \expandafter\def\expandafter\tikz@dashpattern\expandafter{\tikz@dashpattern{#1}}% - \pgfutil@ifnextchar\@nil{\pgfutil@gobble}{\tikz@scandashon}} - -\tikzoption{draw opacity}{\tikz@addoption{\pgfsetstrokeopacity{#1}}} - -% Double draw options -\tikzoption{double}[]{% - \def\tikz@temp{#1}% - \ifx\tikz@temp\tikz@nonetext% - \tikz@addmode{\tikz@mode@doublefalse}% - \else% - \ifx\tikz@temp\pgfutil@empty% - \else% - \def\tikz@double@color{#1}% - \fi% - \tikz@addmode{\tikz@mode@doubletrue}% - \fi} -\tikzoption{double distance}{% - \pgfmathsetlength{\pgf@x}{#1}% - \edef\tikz@double@width@distance{\the\pgf@x}% - \tikz@addmode{\tikz@mode@doubletrue}} - -\def\tikz@double@width@distance{0.6pt} -\def\tikz@double@color{white} - -% Fill options - -\tikzoption{even odd rule}[]{\tikz@addoption{\pgfseteorule}} -\tikzoption{nonzero rule}[]{\tikz@addoption{\pgfsetnonzerorule}} - -\tikzoption{fill opacity}{\tikz@addoption{\pgfsetfillopacity{#1}}} - - -% Joined fill/draw options - -\tikzoption{opacity}{\tikz@addoption{\pgfsetstrokeopacity{#1}\pgfsetfillopacity{#1}}} - - -% Main color options -\tikzoption{color}{% - \tikz@addoption{% - \ifx\tikz@fillcolor\pgfutil@empty% - \ifx\tikz@strokecolor\pgfutil@empty% - \else% - \pgfsys@color@reset@inorderfalse% - \let\tikz@strokecolor\pgfutil@empty% - \let\tikz@fillcolor\pgfutil@empty% - \fi% - \else% - \pgfsys@color@reset@inorderfalse% - \let\tikz@strokecolor\pgfutil@empty% - \let\tikz@fillcolor\pgfutil@empty% - \fi% - \pgfutil@colorlet{tikz@color}{#1}% - \pgfutil@colorlet{.}{tikz@color}% - \pgfsetcolor{.}% - \pgfsys@color@reset@inordertrue% - }% - \def\tikz@textcolor{#1}} - - - -% Rounding options -\tikzoption{rounded corners}[4pt]{\pgfsetcornersarced{\pgfpoint{#1}{#1}}} -\tikzoption{sharp corners}[]{\pgfsetcornersarced{\pgfpointorigin}} - - - -% Coordinate options -\tikzoption{x}{\tikz@handle@vec{\pgfsetxvec}{\tikz@handle@x}#1\relax} -\tikzoption{y}{\tikz@handle@vec{\pgfsetyvec}{\tikz@handle@y}#1\relax} -\tikzoption{z}{\tikz@handle@vec{\pgfsetzvec}{\tikz@handle@z}#1\relax} - -\def\tikz@handle@vec#1#2{\pgfutil@ifnextchar({\tikz@handle@coordinate#1}{\tikz@handle@single#2}} -\def\tikz@handle@coordinate#1{\tikz@scan@one@point#1} -\def\tikz@handle@single#1#2\relax{#1{#2}} -\def\tikz@handle@x#1{\pgfsetxvec{\pgfpoint{#1}{0pt}}} -\def\tikz@handle@y#1{\pgfsetyvec{\pgfpoint{0pt}{#1}}} -\def\tikz@handle@z#1{\pgfsetzvec{\pgfpoint{#1}{#1}}} - - -% Transformation options -\tikzoption{scale}{\tikz@addtransform{\pgftransformscale{#1}}} -\tikzoption{xscale}{\tikz@addtransform{\pgftransformxscale{#1}}} -\tikzoption{xslant}{\tikz@addtransform{\pgftransformxslant{#1}}} -\tikzoption{yscale}{\tikz@addtransform{\pgftransformyscale{#1}}} -\tikzoption{yslant}{\tikz@addtransform{\pgftransformyslant{#1}}} -\tikzoption{rotate}{\tikz@addtransform{\pgftransformrotate{#1}}} -\tikzoption{rotate around}{\tikz@addtransform{\tikz@rotatearound{#1}}} -\def\tikz@rotatearound#1{% - \edef\tikz@temp{#1}% get rid of active stuff - \expandafter\tikz@rotateparseA\tikz@temp% -}% -\def\tikz@rotateparseA#1:{% - \def\tikz@temp@rot{#1}% - \tikz@scan@one@point\tikz@rotateparseB% -} -\def\tikz@rotateparseB#1{% - \pgf@process{#1}% - \pgf@xc=\pgf@x% - \pgf@yc=\pgf@y% - \pgftransformshift{\pgfqpoint{\pgf@xc}{\pgf@yc}}% - \pgftransformrotate{\tikz@temp@rot}% - \pgftransformshift{\pgfqpoint{-\pgf@xc}{-\pgf@yc}}% -} - -\tikzoption{shift}{\tikz@addtransform{\tikz@scan@one@point\pgftransformshift#1\relax}} -\tikzoption{xshift}{\tikz@addtransform{\pgftransformxshift{#1}}} -\tikzoption{yshift}{\tikz@addtransform{\pgftransformyshift{#1}}} -\tikzoption{cm}{\tikz@addtransform{\tikz@parse@cm#1\relax}} -\tikzoption{reset cm}[]{\tikz@addtransform{\pgftransformreset}} -\tikzoption{shift only}[]{\tikz@addtransform{\pgftransformresetnontranslations}} - -\def\tikz@parse@cm#1,#2,#3,#4,{% - \def\tikz@p@cm{{#1}{#2}{#3}{#4}}% - \tikz@scan@one@point\tikz@parse@cmA} -\def\tikz@parse@cmA#1{% - \expandafter\pgftransformcm\tikz@p@cm{#1}% -} - - - -% Grid options -\tikzoption{xstep}{\def\tikz@grid@x{#1}} -\tikzoption{ystep}{\def\tikz@grid@y{#1}} -\tikzoption{step}{\tikz@handle@vec{\tikz@step@point}{\tikz@step@single}#1\relax} -\def\tikz@step@single#1{\def\tikz@grid@x{#1}\def\tikz@grid@y{#1}} -\def\tikz@step@point#1{\pgf@process{#1}\edef\tikz@grid@x{\the\pgf@x}\edef\tikz@grid@y{\the\pgf@y}} - -\def\tikz@grid@x{1cm} -\def\tikz@grid@y{1cm} - - -% Path usage options -\newif\iftikz@mode@double -\newif\iftikz@mode@fill -\newif\iftikz@mode@draw -\newif\iftikz@mode@clip -\newif\iftikz@mode@boundary -\newif\iftikz@mode@shade -\let\tikz@mode=\pgfutil@empty - -\def\tikz@nonetext{none} - -\tikzoption{path only}[]{\let\tikz@mode=\pgfutil@empty} -\tikzoption{shade}[]{\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{fill}[]{% - \def\tikz@temp{#1}% - \ifx\tikz@temp\tikz@nonetext% - \tikz@addmode{\tikz@mode@fillfalse}% - \else% - \ifx\tikz@temp\pgfutil@empty% - \else% - \tikz@addoption{\pgfsetfillcolor{#1}}% - \def\tikz@fillcolor{#1}% - \fi% - \tikz@addmode{\tikz@mode@filltrue}% - \fi% -} -\tikzoption{draw}[]{% - \def\tikz@temp{#1}% - \ifx\tikz@temp\tikz@nonetext% - \tikz@addmode{\tikz@mode@drawfalse}% - \else% - \ifx\tikz@temp\pgfutil@empty% - \else% - \tikz@addoption{\pgfsetstrokecolor{#1}}% - \def\tikz@strokecolor{#1}% - \fi% - \tikz@addmode{\tikz@mode@drawtrue}% - \fi% -} -\tikzoption{clip}[]{\tikz@addmode{\tikz@mode@cliptrue}} -\tikzoption{use as bounding box}[]{\tikz@addmode{\tikz@mode@boundarytrue}} - -\tikzoption{save path}{\tikz@addmode{\pgfsyssoftpath@getcurrentpath#1\global\let#1=#1}} - -\let\tikz@fillcolor=\pgfutil@empty -\let\tikz@strokecolor=\pgfutil@empty - - -% Pattern options -\tikzoption{pattern color}{\def\tikz@pattern@color{#1}} -\tikzoption{pattern}[]{% - \def\tikz@temp{#1}% - \ifx\tikz@temp\tikz@nonetext% - \tikz@addmode{\tikz@mode@fillfalse}% - \else% - \ifx\tikz@temp\pgfutil@empty% - \else% - \tikz@addoption{\pgfsetfillpattern{#1}{\tikz@pattern@color}}% - \def\tikz@pattern{#1}% - \fi% - \tikz@addmode{\tikz@mode@filltrue}% - \fi% -} -\def\tikz@pattern@color{black} -\def\tikz@pattern{dots} - - -% Shading options -\tikzoption{shading}{\def\tikz@shading{#1}\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{shading angle}{\def\tikz@shade@angle{#1}\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{top color}{% - \pgfutil@colorlet{tikz@axis@top}{#1}% - \pgfutil@colorlet{tikz@axis@middle}{tikz@axis@top!50!tikz@axis@bottom}% - \def\tikz@shading{axis}\def\tikz@shade@angle{0}\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{bottom color}{% - \pgfutil@colorlet{tikz@axis@bottom}{#1}% - \pgfutil@colorlet{tikz@axis@middle}{tikz@axis@top!50!tikz@axis@bottom}% - \def\tikz@shading{axis}\def\tikz@shade@angle{0}\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{middle color}{% - \pgfutil@colorlet{tikz@axis@middle}{#1}% - \def\tikz@shading{axis}\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{left color}{% - \pgfutil@colorlet{tikz@axis@top}{#1}% - \pgfutil@colorlet{tikz@axis@middle}{tikz@axis@top!50!tikz@axis@bottom}% - \def\tikz@shading{axis}\def\tikz@shade@angle{90}\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{right color}{% - \pgfutil@colorlet{tikz@axis@bottom}{#1}% - \pgfutil@colorlet{tikz@axis@middle}{tikz@axis@top!50!tikz@axis@bottom}% - \def\tikz@shading{axis}\def\tikz@shade@angle{90}\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{ball color}{\pgfutil@colorlet{tikz@ball}{#1}\def\tikz@shading{ball}\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{inner color}{\pgfutil@colorlet{tikz@radial@inner}{#1}\def\tikz@shading{radial}\tikz@addmode{\tikz@mode@shadetrue}} -\tikzoption{outer color}{\pgfutil@colorlet{tikz@radial@outer}{#1}\def\tikz@shading{radial}\tikz@addmode{\tikz@mode@shadetrue}} - -\def\tikz@shading{axis} -\def\tikz@shade@angle{0} - -\pgfdeclareverticalshading[tikz@axis@top,tikz@axis@middle,tikz@axis@bottom]{axis}{100bp}{% - color(0bp)=(tikz@axis@bottom); - color(25bp)=(tikz@axis@bottom); - color(50bp)=(tikz@axis@middle); - color(75bp)=(tikz@axis@top); - color(100bp)=(tikz@axis@top)} - -\pgfutil@colorlet{tikz@axis@top}{gray} -\pgfutil@colorlet{tikz@axis@middle}{gray!50!white} -\pgfutil@colorlet{tikz@axis@bottom}{white} - -\pgfdeclareradialshading[tikz@ball]{ball}{\pgfqpoint{-10bp}{10bp}}{% - color(0bp)=(tikz@ball!15!white); - color(9bp)=(tikz@ball!75!white); - color(18bp)=(tikz@ball!70!black); - color(25bp)=(tikz@ball!50!black); - color(50bp)=(black)} - -\pgfutil@colorlet{tikz@ball}{blue} - -\pgfdeclareradialshading[tikz@radial@inner,tikz@radial@outer]{radial}{\pgfpointorigin}{% - color(0bp)=(tikz@radial@inner); - color(25bp)=(tikz@radial@outer); - color(50bp)=(tikz@radial@outer)} - -\pgfutil@colorlet{tikz@radial@inner}{gray} -\pgfutil@colorlet{tikz@radial@outer}{white} - - -% Pin options -\tikzoption{pin}{\pgfutil@ifnextchar[{\tikz@parse@pin}{\tikz@parse@pin[]}#1\pgf@nil} -\tikzoption{pin distance}{\def\tikz@pin@distance{#1}} -\tikzoption{pin edge}{\def\tikz@pin@edge@style{#1}} - -\tikzoption{tikz@pin@post}[]{% - \tikz@compute@direction{\tikz@label@angle}{\tikz@pin@distance}% - \global\let\tikz@pin@edge@style@smuggle=\tikz@pin@edge@style% -} -\tikzoption{tikz@pre@pin@edge}[]{\def\pgf@marshal{\tikzstyle{tikz@pin@options}=} - \expandafter\pgf@marshal\expandafter[\tikz@pin@edge@style@smuggle]% -} - -\def\tikz@pin@distance{3ex} -\def\tikz@pin@edge@style{} - -\def\tikz@parse@pin[#1]#2:#3\pgf@nil{% - \tikz@add@after@node@path{\bgroup - \pgfextra{\let\tikz@save@last@node=\tikzlastnode}% - node - [every pin,tikz@label@angle=#2,#1,at=(\tikzlastnode.\tikz@label@angle),% - after node path={(\tikz@save@last@node) edge[every pin edge,tikz@pre@pin@edge,tikz@pin@options] (\tikzlastnode)}, - tikz@pin@post] - {#3} \egroup} -} - - -% Label and pin options - -\tikzoption{label}{\pgfutil@ifnextchar[{\tikz@parse@label}{\tikz@parse@label[]}#1\pgf@nil} -\tikzoption{label distance}{\def\tikz@label@distance{#1}} - -\tikzoption{tikz@label@angle}{\def\tikz@label@angle{#1}\csname tikz@label@angle@is@#1\endcsname} - -\tikzoption{tikz@label@post}[]{\tikz@compute@direction{\tikz@label@angle}{\tikz@label@distance}} - -\def\tikz@label@distance{0pt} - -\def\tikz@parse@label[#1]#2:#3\pgf@nil{% - \tikz@add@after@node@path{ - \bgroup - \pgfextra{\let\tikz@save@last@fig@name=\tikz@last@fig@name}% - node - [every label,% - tikz@label@angle=#2,% - #1,% - at=(\tikzlastnode.\tikz@label@angle),tikz@label@post]% - {#3}% - \pgfextra{\global\let\tikz@last@fig@name=\tikz@save@last@fig@name}% - \egroup% - } -} - -\expandafter\def\csname tikz@label@angle@is@right\endcsname{\def\tikz@label@angle{0}} -\expandafter\def\csname tikz@label@angle@is@above right\endcsname{\def\tikz@label@angle{45}} -\expandafter\def\csname tikz@label@angle@is@above\endcsname{\def\tikz@label@angle{90}} -\expandafter\def\csname tikz@label@angle@is@above left\endcsname{\def\tikz@label@angle{135}} -\expandafter\def\csname tikz@label@angle@is@left\endcsname{\def\tikz@label@angle{180}} -\expandafter\def\csname tikz@label@angle@is@below left\endcsname{\def\tikz@label@angle{225}} -\expandafter\def\csname tikz@label@angle@is@below\endcsname{\def\tikz@label@angle{270}} -\expandafter\def\csname tikz@label@angle@is@below right\endcsname{\def\tikz@label@angle{315}} - -\def\tikz@compute@direction#1#2{% - \let\tikz@do@auto@anchor=\relax - \c@pgf@counta=#1\relax% - \ifnum\c@pgf@counta<0\relax - \advance\c@pgf@counta by 360\relax% - \fi% - \ifnum\c@pgf@counta>359\relax - \advance\c@pgf@counta by-360\relax% - \fi% - \ifnum\c@pgf@counta<4\relax% - \def\tikz@anchor{west}% - \else\ifnum\c@pgf@counta<87\relax% - \def\tikz@anchor{south west}% - \else\ifnum\c@pgf@counta<94\relax% - \def\tikz@anchor{south}% - \else\ifnum\c@pgf@counta<177\relax% - \def\tikz@anchor{south east}% - \else\ifnum\c@pgf@counta<184\relax% - \def\tikz@anchor{east}% - \else\ifnum\c@pgf@counta<267\relax% - \def\tikz@anchor{north east}% - \else\ifnum\c@pgf@counta<274\relax% - \def\tikz@anchor{north}% - \else\ifnum\c@pgf@counta<357\relax% - \def\tikz@anchor{north west}% - \else% - \def\tikz@anchor{west}% - \fi\fi\fi\fi\fi\fi\fi\fi% - \tikz@addtransform{\pgftransformshift{\pgfpointpolar{#1}{#2}}}% -} - - - -% General shape options -\tikzoption{name}{\edef\tikz@fig@name{#1}} - -\tikzoption{at}{\tikz@scan@one@point\tikz@set@at#1} -\def\tikz@set@at#1{\def\tikz@node@at{#1}}% - -\tikzoption{shape}{\edef\tikz@shape{#1}} - -\tikzoption{nodes}{\tikzstyle{every node}+=[#1]} - -\tikzoption{inner sep}{\def\pgfshapeinnerxsep{#1}\def\pgfshapeinnerysep{#1}} -\tikzoption{inner xsep}{\def\pgfshapeinnerxsep{#1}} -\tikzoption{inner ysep}{\def\pgfshapeinnerysep{#1}} - -\tikzoption{outer sep}{\def\pgfshapeouterxsep{#1}\def\pgfshapeouterysep{#1}} -\tikzoption{outer xsep}{\def\pgfshapeouterxsep{#1}} -\tikzoption{outer ysep}{\def\pgfshapeouterysep{#1}} - -\tikzoption{minimum width}{\def\pgfshapeminwidth{#1}} -\tikzoption{minimum height}{\def\pgfshapeminheight{#1}} -\tikzoption{minimum size}{\def\pgfshapeminwidth{#1}\def\pgfshapeminheight{#1}} - -\tikzoption{aspect}{\pgfsetshapeaspect{#1}} - -\tikzoption{after node path}{\tikz@add@after@node@path{#1}}% -\def\tikz@add@after@node@path#1{\expandafter\def\expandafter\tikz@after@node\expandafter{\tikz@after@node#1}} - -\def\tikzaddafternodepathoption#1{% - #1% - \expandafter\def\expandafter\tikz@afternodepathoptions\expandafter{\tikz@afternodepathoptions#1}} - -\let\tikz@afternodepathoptions=\pgfutil@empty - -\tikzoption{anchor}{\def\tikz@anchor{#1}\let\tikz@do@auto@anchor=\relax} - -\tikzoption{left}[]{\def\tikz@anchor{east}\tikz@possibly@transform{x}{-}{#1}} -\tikzoption{right}[]{\def\tikz@anchor{west}\tikz@possibly@transform{x}{}{#1}} -\tikzoption{above}[]{\def\tikz@anchor{south}\tikz@possibly@transform{y}{}{#1}} -\tikzoption{below}[]{\def\tikz@anchor{north}\tikz@possibly@transform{y}{-}{#1}} -\tikzoption{above left}[]% - {\def\tikz@anchor{south east}% - \tikz@possibly@transform{x}{-}{#1}\tikz@possibly@transform{y}{}{#1}} -\tikzoption{above right}[]% - {\def\tikz@anchor{south west}% - \tikz@possibly@transform{x}{}{#1}\tikz@possibly@transform{y}{}{#1}} -\tikzoption{below left}[]% - {\def\tikz@anchor{north east}% - \tikz@possibly@transform{x}{-}{#1}\tikz@possibly@transform{y}{-}{#1}} -\tikzoption{below right}[]% - {\def\tikz@anchor{north west}% - \tikz@possibly@transform{x}{}{#1}\tikz@possibly@transform{y}{-}{#1}} - -\tikzoption{node distance}{\def\tikz@node@distance{#1}} -\def\tikz@node@distance{1cm} - -\tikzoption{above of}{\tikz@of{#1}{90}}% -\tikzoption{below of}{\tikz@of{#1}{-90}}% -\tikzoption{left of}{\tikz@of{#1}{180}}% -\tikzoption{right of}{\tikz@of{#1}{0}}% -\tikzoption{above left of}{\tikz@of{#1}{135}}% -\tikzoption{below left of}{\tikz@of{#1}{-135}}% -\tikzoption{above right of}{\tikz@of{#1}{45}}% -\tikzoption{below right of}{\tikz@of{#1}{-45}}% - -\def\tikz@of#1#2{% - \def\tikz@anchor{center}% - \let\tikz@do@auto@anchor=\relax% - \tikz@addtransform{\pgftransformshift{\pgfpointpolar{#2}{\tikz@node@distance}}}% - \def\tikz@node@at{\pgfpointanchor{#1}{center}}} - -\tikzoption{transform shape}[true]{% - \csname tikz@fullytransformed#1\endcsname% - \iftikz@fullytransformed% - \pgfresetnontranslationattimefalse% - \else% - \pgfresetnontranslationattimetrue% - \fi% -} - -\newif\iftikz@fullytransformed -\pgfresetnontranslationattimetrue% - -\def\tikz@anchor{center}% -\def\tikz@shape{rectangle}% - -\def\tikz@possibly@transform#1#2#3{% - \let\tikz@do@auto@anchor=\relax% - \def\tikz@test{#3}% - \ifx\tikz@test\pgfutil@empty% - \else% - \pgfmathsetlength{\pgf@x}{#3}% - \pgf@x=#2\pgf@x\relax% - \edef\tikz@marshal{\noexpand\tikz@addtransform{% - \expandafter\noexpand\csname pgftransform#1shift\endcsname{\the\pgf@x}}}% - \tikz@marshal% - \fi% -} - - -% Inter-picture options -\tikzoption{remember picture}[true]{\csname pgfrememberpicturepositiononpage#1\endcsname} -\tikzoption{overlay}[]{\pgf@relevantforpicturesizefalse} - - - -% Line/curve label placement options -\tikzoption{sloped}[true]{\csname pgfslopedattime#1\endcsname} -\tikzoption{allow upside down}[true]{\csname pgfallowupsidedownattime#1\endcsname} - -\tikzoption{pos}{\edef\tikz@time{#1}} - -\tikzoption{auto}[]{\csname tikz@install@auto@anchor@#1\endcsname} -\tikzoption{swap}[]{% - \def\tikz@temp{left}% - \ifx\tikz@auto@anchor@direction\tikz@temp% - \def\tikz@auto@anchor@direction{right}% - \else% - \def\tikz@auto@anchor@direction{left}% - \fi% -} - -\def\tikz@time{.5} - -\def\tikz@install@auto@anchor@{\let\tikz@do@auto@anchor=\tikz@auto@anchor@on} -\def\tikz@install@auto@anchor@false{\let\tikz@do@auto@anchor=\relax} -\def\tikz@install@auto@anchor@left{\let\tikz@do@auto@anchor=\tikz@auto@anchor@on\def\tikz@auto@anchor@direction{left}} -\def\tikz@install@auto@anchor@right{\let\tikz@do@auto@anchor=\tikz@auto@anchor@on\def\tikz@auto@anchor@direction{right}} - -\let\tikz@do@auto@anchor=\relax% - -\def\tikz@auto@anchor@on{\csname tikz@auto@anchor@\tikz@auto@anchor@direction\endcsname} - -\def\tikz@auto@anchor@left{\tikz@auto@pre\tikz@auto@anchor\tikz@auto@post} -\def\tikz@auto@anchor@right{\tikz@auto@pre\tikz@auto@anchor@prime\tikz@auto@post} - -\def\tikz@auto@anchor@direction{left} - -% Text options -\tikzoption{text}{\def\tikz@textcolor{#1}} -\tikzoption{font}{\def\tikz@textfont{#1}} -\tikzoption{text opacity}{\def\tikz@textopacity{#1}} -\tikzoption{text width}{\def\tikz@text@width{#1}} -\tikzoption{text height}{\def\tikz@text@height{#1}} -\tikzoption{text depth}{\def\tikz@text@depth{#1}} -\tikzoption{text ragged}[]% -{\def\tikz@text@action{\raggedright\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax}} -\tikzoption{text badly ragged}[]{\def\tikz@text@action{\raggedright\relax}} -\tikzoption{text ragged left}[]% -{\def\tikz@text@action{\raggedleft\leftskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax}} -\tikzoption{text badly ragged left}[]{\def\tikz@text@action{\raggedleft\relax}} -\tikzoption{text justified}[]{\def\tikz@text@action{\leftskip\z@\rightskip\z@\relax}} -\tikzoption{text centered}[]{\def\tikz@text@action{% - \leftskip\z@ plus2em% - \rightskip\z@ plus2em% - \spaceskip.3333em \xspaceskip.5em% - \parfillskip=0pt% - \let\\=\@centercr% for latex - \relax}} -\tikzoption{text badly centered}[]% -{\def\tikz@text@action{% - \let\\=\@centercr% for latex - \parfillskip=0pt% - \rightskip\@flushglue% - \leftskip\@flushglue\relax}} - -\let\tikz@text@width=\pgfutil@empty -\let\tikz@text@height=\pgfutil@empty -\let\tikz@text@depth=\pgfutil@empty -\let\tikz@textcolor=\pgfutil@empty -\let\tikz@textfont=\pgfutil@empty -\let\tikz@textopacity=\pgfutil@empty - -\def\tikz@text@action{\raggedright\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax} - - - - - -% Arrow options -\tikzoption{arrows}{\tikz@processarrows{#1}} - -\tikzoption{>}{% - \tikz@set@pointed{\csname pgf@arrows@invert#1\endcsname}{#1}% - \expandafter\tikz@processarrows\expandafter{\tikz@current@arrows}% -} - -\tikzoption{shorten <}{\pgfsetshortenstart{#1}} -\tikzoption{shorten >}{\pgfsetshortenend{#1}} - -\def\tikz@set@pointed#1#2{% - \pgfutil@ifundefined{pgf@arrow@code@tikze@>@#2} - {% - \pgfarrowsdeclarealias{tikzs@<@#2}{tikze@>@#2}{#1}{#2}% - \pgfarrowsdeclarereversed{tikzs@>@#2}{tikze@<@#2}{#1}{#2}% - \pgfarrowsdeclarecombine*{tikz@|<@#2}{tikz@>|@#2}{#1}{#2}{|}{|}% - \pgfarrowsdeclaredouble[\pgflinewidth]{tikzs@<<@#2}{tikze@>>@#2}{#1}{#2}% - \pgfarrowsdeclarereversed{tikzs@>>@#2}{tikze@<<@#2}{tikzs@<<@#2}{tikze@>>@#2}% - }{}% - \pgfutil@namedef{tikz@special@arrow@start<}{tikzs@<@#2}% - \pgfutil@namedef{tikz@special@arrow@end>}{tikze@>@#2}% - \pgfutil@namedef{tikz@special@arrow@start>}{tikzs@>@#2}% - \pgfutil@namedef{tikz@special@arrow@end<}{tikze@<@#2}% - \pgfutil@namedef{tikz@special@arrow@start|<}{tikz@|<@#2}% - \pgfutil@namedef{tikz@special@arrow@end>|}{tikz@>|@#2}% - \pgfutil@namedef{tikz@special@arrow@start<<}{tikzs@<<@#2}% - \pgfutil@namedef{tikz@special@arrow@end>>}{tikze@>>@#2}% - \pgfutil@namedef{tikz@special@arrow@start>>}{tikzs@<<@#2}% - \pgfutil@namedef{tikz@special@arrow@end<<}{tikze@>>@#2}% -} - -\def\tikz@processarrows#1{% - \def\tikz@current@arrows{#1}% - \def\tikz@temp{#1}% - \ifx\tikz@temp\pgfutil@empty% - \else% - \tikz@@processarrows#1\@nil - \fi% -} -\def\tikz@@processarrows#1-#2\@nil{% - \expandafter\ifx\csname tikz@special@arrow@start#1\endcsname\relax% - \pgfsetarrowsstart{#1} - \else% - \pgfsetarrowsstart{\csname tikz@special@arrow@start#1\endcsname}% - \fi% - \expandafter\ifx\csname tikz@special@arrow@end#2\endcsname\relax% - \pgfsetarrowsend{#2} - \else% - \pgfsetarrowsend{\csname tikz@special@arrow@end#2\endcsname}% - \fi% -} - -\tikz@set@pointed{\pgf@arrows@invertto}{to} -\def\tikz@current@arrows{-} - -% Parabola options -\tikzoption{bend}{\tikz@scan@one@point\tikz@set@parabola@bend#1\relax}% -\tikzoption{bend pos}{\def\tikz@parabola@bend@factor{#1}} -\tikzoption{parabola height}{% - \def\tikz@parabola@bend@factor{.5}% - \def\tikz@parabola@bend{\pgfpointadd{\pgfpoint{0pt}{#1}}{\tikz@last@position@saved}}} - -\def\tikz@parabola@bend{\tikz@last@position@saved} -\def\tikz@parabola@bend@factor{0} - -\def\tikz@set@parabola@bend#1{\def\tikz@parabola@bend{#1}} - -% Axis options -\tikzoption{domain}{\def\tikz@plot@domain{#1}\expandafter\tikz@plot@samples@recalc\tikz@plot@domain\relax} -\tikzoption{range}{\def\tikz@plot@range{#1}} - -% Plot options -\tikzoption{smooth}[]{\let\tikz@plot@handler=\pgfplothandlercurveto} -\tikzoption{smooth cycle}[]{\let\tikz@plot@handler=\pgfplothandlerclosedcurve} -\tikzoption{sharp plot}[]{\let\tikz@plot@handler\pgfplothandlerlineto} - -\tikzoption{tension}{\pgfsetplottension{#1}} - -\tikzoption{xcomb}[]{\let\tikz@plot@handler=\pgfplothandlerxcomb} -\tikzoption{ycomb}[]{\let\tikz@plot@handler=\pgfplothandlerycomb} -\tikzoption{polar comb}[]{\let\tikz@plot@handler=\pgfplothandlerpolarcomb} - -\tikzoption{raw gnuplot}[true]{\csname tikz@plot@raw@gnuplot#1\endcsname} -\tikzoption{prefix}{\def\tikz@plot@prefix{#1}} -\tikzoption{id}{\def\tikz@plot@id{#1}} - -\tikzoption{samples}{\def\tikz@plot@samples{#1}\expandafter\tikz@plot@samples@recalc\tikz@plot@domain\relax} -\tikzoption{samples at}{\def\tikz@plot@samplesat{#1}} -\tikzoption{parametric}[true]{\csname tikz@plot@parametric#1\endcsname} - -\tikzoption{variable}{\def\tikz@plot@var{#1}} - -\tikzoption{only marks}[]{\let\tikz@plot@handler\pgfplothandlerdiscard} - -\tikzoption{mark}{\def\tikz@plot@mark{#1}} -\tikzoption{mark options}{\def\tikz@plot@mark@options{#1}} -\tikzoption{mark size}{\pgfsetplotmarksize{#1}} - -\tikzoption{mark indices}{\def\tikz@mark@list{#1}} -\tikzoption{mark phase}{\pgfsetplotmarkphase{#1}} -\tikzoption{mark repeat}{\pgfsetplotmarkrepeat{#1}} - -\let\tikz@mark@list=\pgfutil@empty - -\let\tikz@plot@mark@options=\pgfutil@empty - -\let\tikz@plot@handler=\pgfplothandlerlineto -\let\tikz@plot@mark=\pgfutil@empty - -\def\tikz@plot@samples{25} -\def\tikz@plot@domain{-5:5} -\def\tikz@plot@var{\x} -\def\tikz@plot@samplesat{-5,-4.6,...,5} -\def\tikz@plot@samples@recalc#1:#2\relax{% - \pgfmathparse{#1}% - \let\tikz@temp@start=\pgfmathresult% - \pgfmathparse{#2}% - \let\tikz@temp@end=\pgfmathresult% - \pgfmathparse{\tikz@temp@start+(\tikz@temp@end-\tikz@temp@start)/\tikz@plot@samples}% - \edef\tikz@plot@samplesat{\tikz@temp@start,\pgfmathresult,...,\tikz@temp@end}% -} - - -\def\tikz@plot@prefix{\jobname.} -\def\tikz@plot@id{pgf-plot} - -\newif\iftikz@plot@parametric -\newif\iftikz@plot@raw@gnuplot - - -% To options -\tikzoption{to path}{\def\tikz@to@path{#1}} - -\def\tikz@to@path{-- (\tikztotarget) \tikztonodes} - - - -% Tree options -\tikzoption{edge from parent path}{\def\tikz@edge@to@parent@path{#1}} - -\tikzoption{parent anchor}{\def\tikzparentanchor{.#1}\ifx\tikzparentanchor\tikz@border@text\let\tikzparentanchor\pgfutil@empty\fi} -\tikzoption{child anchor}{\def\tikzchildanchor{.#1}\ifx\tikzchildanchor\tikz@border@text\let\tikzchildanchor\pgfutil@empty\fi} - -\tikzoption{level distance}{\pgfmathsetlength\tikzleveldistance{#1}} -\tikzoption{sibling distance}{\pgfmathsetlength\tikzsiblingdistance{#1}} - -\tikzoption{growth function}{\let\tikz@grow=#1} -\tikzoption{growth parent anchor}{\def\tikz@growth@anchor{#1}} -\tikzoption{grow}{\tikz@set@growth{#1}\edef\tikz@special@level{\the\tikztreelevel}}% -\tikzoption{grow'}{\tikz@set@growth{#1}\tikz@swap@growth\edef\tikz@special@level{\the\tikztreelevel}}% - -\def\tikz@growth@anchor{center} - -\def\tikz@special@level{-1}% never - -\def\tikz@swap@growth{% - % Swap left and right - \let\tikz@temp=\tikz@angle@grow@right% - \let\tikz@angle@grow@right=\tikz@angle@grow@left% - \let\tikz@angle@grow@left=\tikz@temp% -}% - -\def\tikz@set@growth#1{% - \let\tikz@grow=\tikz@grow@direction% - \expandafter\ifx\csname tikz@grow@direction@#1\endcsname\relax% - \c@pgf@counta=#1\relax% - \else% - \c@pgf@counta=\csname tikz@grow@direction@#1\endcsname% - \fi% - \edef\tikz@angle@grow{\the\c@pgf@counta}% - \advance\c@pgf@counta by-90\relax% - \edef\tikz@angle@grow@left{\the\c@pgf@counta}% - \advance\c@pgf@counta by180\relax% - \edef\tikz@angle@grow@right{\the\c@pgf@counta}% -} - -\def\tikz@border@text{.border} -\let\tikzparentanchor=\pgfutil@empty -\let\tikzchildanchor=\pgfutil@empty -\def\tikz@edge@to@parent@path{(\tikzparentnode\tikzparentanchor) -- (\tikzchildnode\tikzchildanchor)} - -\tikzleveldistance=15mm -\tikzsiblingdistance=15mm - -\def\tikz@grow@direction@down{-90} -\def\tikz@grow@direction@up{90} -\def\tikz@grow@direction@left{180} -\def\tikz@grow@direction@right{0} - -\def\tikz@grow@direction@south{-90} -\def\tikz@grow@direction@north{90} -\def\tikz@grow@direction@west{180} -\def\tikz@grow@direction@east{0} - -\expandafter\def\csname tikz@grow@direction@north east\endcsname{45} -\expandafter\def\csname tikz@grow@direction@north west\endcsname{135} -\expandafter\def\csname tikz@grow@direction@south east\endcsname{-45} -\expandafter\def\csname tikz@grow@direction@south west\endcsname{-135} - -\def\tikz@grow@direction{% - \pgftransformshift{\pgfpointpolar{\tikz@angle@grow}{\tikzleveldistance}}% - \ifnum\tikztreelevel=\tikz@special@level% - \else% - \pgf@xc=.5\tikzsiblingdistance% - \c@pgf@counta=\tikznumberofchildren% - \advance\c@pgf@counta by1\relax% - \pgfutil@tempdima=\c@pgf@counta\pgf@xc% - \pgftransformshift{\pgfpointpolar{\tikz@angle@grow@left}{\pgfutil@tempdima}}% - \pgftransformshift{\pgfpointpolar{\tikz@angle@grow@right}{\tikznumberofcurrentchild\tikzsiblingdistance}}% - \fi% -} - -\tikz@orig@setkeys{tikz}{grow=down} - - - - -% Snake options -\tikzoption{snake}[]{% - \def\tikz@@snake{#1}% - \ifx\tikz@@snake\pgfutil@empty% - \tikz@snakedtrue% - \else% - \ifx\tikz@@snake\tikz@nonetext% - \tikz@snakedfalse% - \else% - \tikz@snakedtrue% - \let\tikz@snake=\tikz@@snake% - \fi% - \fi} - -\tikzoption{segment amplitude}{\pgfmathsetlength{\pgfsnakesegmentamplitude}{#1}} -\tikzoption{segment length}{\pgfmathsetlength{\pgfsnakesegmentlength}{#1}} -\tikzoption{segment angle}{\pgfmathparse{#1}\let\pgfsnakesegmentangle=\pgfmathresult} -\tikzoption{segment aspect}{\pgfmathparse{#1}\let\pgfsnakesegmentaspect=\pgfmathresult} - -\tikzoption{segment object length}{\pgfmathparse{#1}\edef\pgfsnakesegmentobjectlength{\pgfmathresult pt}} - -\tikzoption{raise snake}{\def\pgf@snake@raise{\pgftransformyshift{#1}}} -\tikzoption{mirror snake}[true]{% - \csname if#1\endcsname - \def\pgf@snake@mirror{\pgftransformyscale{-1}}% - \else% - \let\pgf@snake@mirror=\pgfutil@empty% - \fi -} - -\tikzoption{gap before snake}{\def\tikz@presnake{{moveto}{#1}}} -\tikzoption{line before snake}{\def\tikz@presnake{{lineto}{#1}}} - -\tikzoption{gap after snake}{\def\tikz@postsnake{{moveto}{#1}}\def\tikz@mainsnakelength{\pgfsnakeremainingdistance+-#1}} -\tikzoption{line after snake}{\def\tikz@postsnake{{lineto}{#1}}\def\tikz@mainsnakelength{\pgfsnakeremainingdistance+-#1}} - -\tikzoption{gap around snake}{% - \def\tikz@presnake{{moveto}{#1}}% - \def\tikz@postsnake{{moveto}{#1}}% - \def\tikz@mainsnakelength{\pgfsnakeremainingdistance+-#1}% -} -\tikzoption{line around snake}{% - \def\tikz@presnake{{lineto}{#1}}% - \def\tikz@postsnake{{lineto}{#1}}% - \def\tikz@mainsnakelength{\pgfsnakeremainingdistance+-#1}% -} -\let\pgf@snake@mirror=\pgfutil@empty -\let\pgf@snake@raise=\pgfutil@empty - -\pgfsetsnakesegmenttransformation{\pgf@snake@mirror\pgf@snake@raise} - -\def\tikz@snake{zigzag} - -\let\tikz@presnake=\pgfutil@empty -\let\tikz@postsnake=\pgfutil@empty -\def\tikz@mainsnakelength{\pgfsnakeremainingdistance} - - -% Matrix options -\tikzoption{matrix}[true]{\csname tikz@is@matrix#1\endcsname} - -\tikzoption{matrix anchor}{\def\tikz@matrix@anchor{#1}} - -\tikzoption{column sep}{\def\pgfmatrixcolumnsep{#1}} -\tikzoption{row sep}{\def\pgfmatrixrowsep{#1}} - -\tikzoption{cells}{\tikzstyle{every cell}+=[#1]} - -\tikzoption{ampersand replacement}{\def\tikz@ampersand@replacement{#1}} - -\newif\iftikz@is@matrix -\let\tikz@matrix@anchor=\pgfutil@empty -\let\tikz@ampersand@replacement=\pgfutil@empty - -% Execute option - -\tikzoption{execute at begin picture}{\expandafter\def\expandafter\tikz@atbegin@picture\expandafter{\tikz@atbegin@picture#1}} -\tikzoption{execute at end picture}{\expandafter\def\expandafter\tikz@atend@picture\expandafter{\tikz@atend@picture#1}} -\tikzoption{execute at begin scope}{\expandafter\def\expandafter\tikz@atbegin@scope\expandafter{\tikz@atbegin@scope#1}} -\tikzoption{execute at end scope}{\expandafter\def\expandafter\tikz@atend@scope\expandafter{\tikz@atend@scope#1}} -\tikzoption{execute at begin to}{\expandafter\def\expandafter\tikz@atbegin@to\expandafter{\tikz@atbegin@to#1}} -\tikzoption{execute at end to}{\expandafter\def\expandafter\tikz@atend@to\expandafter{\tikz@atend@to#1}} -\tikzoption{execute at begin node}{\expandafter\def\expandafter\tikz@atbegin@node\expandafter{\tikz@atbegin@node#1}} -\tikzoption{execute at end node}{\expandafter\def\expandafter\tikz@atend@node\expandafter{\tikz@atend@node#1}} -\tikzoption{execute at begin cell}{\expandafter\def\expandafter\tikz@atbegin@cell\expandafter{\tikz@atbegin@cell#1}} -\tikzoption{execute at end cell}{\expandafter\def\expandafter\tikz@atend@cell\expandafter{\tikz@atend@cell#1}} -\tikzoption{execute at empty cell}{\expandafter\def\expandafter\tikz@at@emptycell\expandafter{\tikz@at@emptycell#1}} - -\let\tikz@atbegin@picture=\pgfutil@empty -\let\tikz@atend@picture=\pgfutil@empty -\let\tikz@atbegin@scope=\pgfutil@empty -\let\tikz@atend@scope=\pgfutil@empty -\let\tikz@atbegin@to=\pgfutil@empty -\let\tikz@atend@to=\pgfutil@empty -\let\tikz@atbegin@node=\pgfutil@empty -\let\tikz@atend@node=\pgfutil@empty -\let\tikz@atbegin@cell=\pgfutil@empty -\let\tikz@atend@cell=\pgfutil@empty -\let\tikz@at@emptycell=\pgfutil@empty - - - - -% Styles -\tikzoption{set style}{\tikzstyle#1} - -% Handled in a special way. -\def\tikzstyle{\pgfutil@ifnextchar\bgroup\tikz@style@parseA\tikz@style@parseB} -\def\tikz@style@parseB#1={\tikz@style@parseA{#1}=} -\def\tikz@style@parseA#1#2=#3[#4]{% #2 and #3 are dummy - \pgfutil@in@+{#2}% - \ifpgfutil@in@% - \tikz@style{#1}{#4}% - \else% - \expandafter\def\csname tikz@st@#1\endcsname{#4}% - \fi} -\def\tikz@style#1#2{% - \iftikzstyleempty{#1} - {\expandafter\def\csname tikz@st@#1\endcsname{#2}}% - {% - \edef\tikz@marshal{\def\expandafter\noexpand\csname tikz@st@#1\endcsname}% - \expandafter\expandafter\expandafter\tikz@marshal\expandafter\expandafter\expandafter{\csname - tikz@st@#1\endcsname,#2}% - }% -} - -\def\iftikzstyleempty#1#2#3{% - \expandafter\ifx\csname tikz@st@#1\endcsname\pgfutil@empty% - \let\pgf@next=\pgfutil@firstoftwo% - \else% - \expandafter\ifx\csname tikz@st@#1\endcsname\relax% - \let\pgf@next=\pgfutil@firstoftwo% - \else - \let\pgf@next=\pgfutil@secondoftwo% - \fi% - \fi% - \pgf@next{#2}{#3}} - - -% -% -% Predefined styles -% -% - -\tikzstyle{help lines}= [color=gray,line width=0.2pt] - -\tikzstyle{every picture}= [] -\tikzstyle{every path}= [] -\tikzstyle{every scope}= [] -\tikzstyle{every plot}= [] -\tikzstyle{every node}= [] -\tikzstyle{every child}= [] -\tikzstyle{every child node}= [] -\tikzstyle{every to}= [] -\tikzstyle{every cell}= [] -\tikzstyle{every matrix}= [] -\tikzstyle{every edge}= [draw] -\tikzstyle{every label}= [draw=none,fill=none] -\tikzstyle{every pin}= [draw=none,fill=none] -\tikzstyle{every pin edge}= [help lines] - -\tikzstyle{ultra thin}= [line width=0.1pt] -\tikzstyle{very thin}= [line width=0.2pt] -\tikzstyle{thin}= [line width=0.4pt] -\tikzstyle{semithick}= [line width=0.6pt] -\tikzstyle{thick}= [line width=0.8pt] -\tikzstyle{very thick}= [line width=1.2pt] -\tikzstyle{ultra thick}= [line width=1.6pt] - -\tikzstyle{solid}= [dash pattern=] -\tikzstyle{dotted}= [dash pattern=on \pgflinewidth off 2pt] -\tikzstyle{densely dotted}= [dash pattern=on \pgflinewidth off 1pt] -\tikzstyle{loosely dotted}= [dash pattern=on \pgflinewidth off 4pt] -\tikzstyle{dashed}= [dash pattern=on 3pt off 3pt] -\tikzstyle{densely dashed}= [dash pattern=on 3pt off 2pt] -\tikzstyle{loosely dashed}= [dash pattern=on 3pt off 6pt] - -\tikzstyle{transparent}= [opacity=0] -\tikzstyle{ultra nearly transparent}=[opacity=0.05] -\tikzstyle{very nearly transparent}= [opacity=0.1] -\tikzstyle{nearly transparent}= [opacity=0.25] -\tikzstyle{semitransparent}= [opacity=0.5] -\tikzstyle{nearly opaque}= [opacity=0.75] -\tikzstyle{very nearly opaque}= [opacity=0.9] -\tikzstyle{ultra nearly opaque}= [opacity=0.95] -\tikzstyle{opaque}= [opacity=1] - -\tikzstyle{at start}= [pos=0] -\tikzstyle{very near start}= [pos=0.125] -\tikzstyle{near start}= [pos=0.25] -\tikzstyle{midway}= [pos=0.5] -\tikzstyle{near end}= [pos=0.75] -\tikzstyle{very near end}= [pos=0.875] -\tikzstyle{at end}= [pos=1] - -\tikzstyle{bend at start}= [bend pos=0,bend={+(0,0)}] -\tikzstyle{bend at end}= [bend pos=1,bend={+(0,0)}] - -\tikzstyle{edge from parent}= [draw] - -\tikzstyle{snake triangles 45}= [snake=triangles,segment object length=2.41421356\pgfsnakesegmentamplitude] -\tikzstyle{snake triangles 60}= [snake=triangles,segment object length=1.73205081\pgfsnakesegmentamplitude] -\tikzstyle{snake triangles 90}= [snake=triangles,segment object length=\pgfsnakesegmentamplitude] - - -% -% Setting keys -% - -\let\tikz@late@keys=\pgfutil@empty% - -\def\tikz@set@one@key#1{% - \tikz@orig@setkeys*{tikz}{#1}% - \ifx\XKV@rm\pgfutil@empty% - % fine - \else% - \expandafter\pgfutil@in@\expandafter!\expandafter{\XKV@rm}% - \ifpgfutil@in@% - % this is a color! - \expandafter\tikz@addoption\expandafter{\expandafter\pgfutil@color\expandafter{\XKV@rm}}% - \edef\tikz@textcolor{\XKV@rm}% - \else% - \pgfutil@doifcolorelse{\XKV@rm} - { % - \expandafter\tikz@addoption\expandafter{\expandafter\pgfutil@color\expandafter{\XKV@rm}}% - \edef\tikz@textcolor{\XKV@rm}% - }% - {% - % Ok, second chance: This might be an arrow specification: - \expandafter\pgfutil@in@\expandafter-\expandafter{\XKV@rm} - \ifpgfutil@in@% - % Ah, an arrow spec! - \expandafter\tikz@processarrows\expandafter{\XKV@rm}% - \else% - % Ok, third chance: A shape! - \expandafter\ifx\csname pgf@sh@s@\XKV@rm\endcsname\relax% - \PackageError{tikz}{I do not know what to do with the option ``\XKV@rm''}{} - \else% - \edef\tikz@shape{\XKV@rm}% - \fi% - \fi% - }% - \fi% - \fi% -} - -\def\tikz@setkeys#1{\tikz@@setkeys#1,\pgf@stop} - -\def\tikz@@setkeys#1,#2\pgf@stop{% - \def\tikz@key@test{#1}% - \def\tikz@key@rest{#2}% - \ifx\tikz@key@test\pgfutil@empty% - \else% - \pgfutil@ifnextchar s{\tikz@parse@key}{\tikz@parse@key}#1==\pgf@stop% - \fi% - \ifx\tikz@key@rest\pgfutil@empty% - \else% - \expandafter\expandafter\expandafter\tikz@@setkeys\expandafter\tikz@key@rest\expandafter\pgf@stop% - \fi% -} - -\def\tikz@style@text{style} - -\def\tikz@parse@key#1=#2=#3\pgf@stop{ - \def\tikz@key@test{#1}% - \ifx\tikz@key@test\tikz@style@text% - % Ok, style! - \pgfutil@ifundefined{tikz@st@#2}% - {\PackageError{tikz}{Unknown style ``#2}''{}} - {% - \expandafter\let\expandafter\tikz@temp\expandafter=\csname tikz@st@#2\endcsname% - \expandafter\expandafter\expandafter\def - \expandafter\expandafter\expandafter\tikz@key@rest - \expandafter\expandafter\expandafter{\expandafter\tikz@temp\expandafter,\tikz@key@rest}% - }% - \else% - \expandafter\ifx\csname tikz@st@#1\endcsname\relax% - % Ok, normal! - \def\tikz@test{#3}% - \ifx\tikz@test\pgfutil@empty% - \tikz@set@one@key{#1}% - \else% - \tikz@set@one@key{#1={#2}}% - \fi% - \else% - % Ok, style! - \expandafter\let\expandafter\tikz@temp\expandafter=\csname tikz@st@#1\endcsname% - \expandafter\expandafter\expandafter\def - \expandafter\expandafter\expandafter\tikz@key@rest - \expandafter\expandafter\expandafter{\expandafter\tikz@temp\expandafter,\tikz@key@rest}% - \fi% - \fi% -} - -\def\tikz@every@style#1{% - \expandafter\ifx\csname tikz@st@#1\endcsname\relax% - \else% - \expandafter\expandafter\expandafter\tikz@setkeys - \expandafter\expandafter\expandafter{\csname tikz@st@#1\endcsname}% - \fi% -} - - - - - -% -% Main TikZ Environment -% - -\def\tikzpicture{\pgfutil@ifnextchar[\tikz@picture{\tikz@picture[]}}%} -\def\tikz@picture[#1]{% - \pgfpicture% - \let\tikz@atbegin@picture=\pgfutil@empty% - \let\tikz@atend@picture=\pgfutil@empty% - \let\tikz@transform=\relax% - \tikz@installcommands\scope[style=every picture,#1]% - \tikz@atbegin@picture% -} -\def\endtikzpicture{% - \tikz@atend@picture% - \global\let\pgf@shift@baseline=\pgf@baseline% - \global\let\pgf@remember@smuggle=\ifpgfrememberpicturepositiononpage% - \endscope% - \let\pgf@baseline=\pgf@shift@baseline% - \let\ifpgfrememberpicturepositiononpage=\pgf@remember@smuggle% - \endpgfpicture} - - - -% Inlined picture -% -% #1 - some code to be put in a tikzpicture environment. -% -% If the command is not followed by braces, everything up to the next -% semicolon is used as argument. -% -% Example: -% -% The rectangle \tikz{\draw (0,0) rectangle (1em,1ex)} has width 1em and -% height 1ex. - -\def\tikz{\pgfutil@ifnextchar[{\tikz@opt}{\tikz@opt[]}} -\def\tikz@opt[#1]{\pgfutil@ifnextchar\bgroup{\tikz@[#1]}{\tikz@@[#1]}} -\def\tikz@[#1]#2{\tikzpicture[#1]#2\endtikzpicture} -\def\tikz@@{% - \let\tikz@next=\tikz@collectnormalsemicolon% - \ifnum\the\catcode`\;=\active\relax% - \let\tikz@next=\tikz@collectactivesemicolon% - \fi% - \tikz@next} -\def\tikz@collectnormalsemicolon[#1]#2;{\tikzpicture[#1]#2;\endtikzpicture} -{ - \catcode`\;=\active - \gdef\tikz@collectactivesemicolon[#1]#2;{\tikzpicture[#1]#2;\endtikzpicture} -} - - - -% -% Environment for scoping graphic state settings -% -\def\tikz@scope@env{\pgfutil@ifnextchar[\tikz@@scope@env{\tikz@@scope@env[]}} -\def\tikz@@scope@env[#1]{% - \pgfscope% - \begingroup% - \let\tikz@atbegin@scope=\pgfutil@empty% - \let\tikz@atend@scope=\pgfutil@empty% - \let\tikz@options=\pgfutil@empty% - \let\tikz@mode=\pgfutil@empty% - \tikz@every@style{every scope}% - \tikz@setkeys{#1}% - \tikz@options% - \tikz@atbegin@scope% -} -\def\endtikz@scope@env{% - \tikz@atend@scope% - \endgroup% - \endpgfscope% -} - - -% -% Install the abbreviated commands -% -\def\tikz@installcommands{% - \ifnum\the\catcode`\;=\active\relax\expandafter\let\expandafter\tikz@origsemi\expandafter=\tikz@activesemicolon\fi% - \ifnum\the\catcode`\:=\active\relax\expandafter\let\expandafter\tikz@origcolon\expandafter=\tikz@activecolon\fi% - \ifnum\the\catcode`\|=\active\relax\expandafter\let\expandafter\tikz@origbar\expandafter=\tikz@activebar\fi% - \let\tikz@origscope=\scope% - \let\tikz@origendscope=\endscope% - \let\tikz@origstartscope=\startscope% - \let\tikz@origstopscope=\stopscope% - \let\tikz@origpath=\path% - \let\tikz@origagainpath=\againpath% - \let\tikz@origdraw=\draw% - \let\tikz@origpattern=\pattern% - \let\tikz@origfill=\fill% - \let\tikz@origfilldraw=\filldraw% - \let\tikz@origshade=\shade% - \let\tikz@origshadedraw=\shadedraw% - \let\tikz@origclip=\clip% - \let\tikz@origuseasboundingbox=\useasboundingbox% - \let\tikz@orignode=\node% - \let\tikz@origcoordinate=\coordinate% - \let\tikz@origmatrix=\matrix% - \let\tikz@origcalendar=\calendar% - % - \tikz@deactivatthings% - % - \let\scope=\tikz@scope@env% - \let\endscope=\endtikz@scope@env% - \let\startscope=\scope% - \let\stopscope=\endscope% - \let\path=\tikz@command@path% - \let\againpath=\tikz@command@againpath% - % - \def\draw{\path[draw]} - \def\pattern{\path[pattern]} - \def\fill{\path[fill]} - \def\filldraw{\path[fill,draw]} - \def\shade{\path[shade]} - \def\shadedraw{\path[shade,draw]} - \def\clip{\path[clip]} - \def\useasboundingbox{\path[use as bounding box]} - \def\node{\path node} - \def\coordinate{\path coordinate} - \def\matrix{\path node[matrix]} - \def\calendar{\tikz@lib@cal@calendar}% -} -\ifx\tikz@lib@cal@calendar\@undefined -\def\tikz@lib@cal@calendar{\PackageError{tikz}{You need to load the calendar library}{}} -\fi - -\def\tikz@uninstallcommands{% - \ifnum\the\catcode`\;=\active\relax\expandafter\let\tikz@activesemicolon=\tikz@origsemi\fi% - \ifnum\the\catcode`\:=\active\relax\expandafter\let\tikz@activecolon=\tikz@origcolon\fi% - \ifnum\the\catcode`\|=\active\relax\expandafter\let\tikz@activebar=\tikz@origbar\fi% - \let\scope=\tikz@origscope% - \let\endscope=\tikz@origendscope% - \let\startscope=\tikz@origstartscope% - \let\stopscope=\tikz@origstopscope% - \let\path=\tikz@origpath% - \let\againpath=\tikz@origagainpath% - \let\draw=\tikz@origdraw% - \let\pattern=\tikz@origpattern% - \let\fill=\tikz@origfill% - \let\filldraw=\tikz@origfilldraw% - \let\shade=\tikz@origshade% - \let\shadedraw=\tikz@origshadedraw% - \let\clip=\tikz@origclip% - \let\useasboundingbox=\tikz@origuseasboundingbox% - \let\node=\tikz@orignode% - \let\coordinate=\tikz@origcoordinate% - \let\matrix=\tikz@origmatrix% - \let\calendar=\tikz@origcalendar% -} - - -{ - \catcode`\;=12 - \gdef\tikz@nonactivesemicolon{;} - \catcode`\:=12 - \gdef\tikz@nonactivecolon{:} - \catcode`\|=12 - \gdef\tikz@nonactivebar{|} - \catcode`\;=\active - \catcode`\:=\active - \catcode`\|=\active - \catcode`\"=\active - \gdef\tikz@activesemicolon{;}% - \gdef\tikz@activecolon{:}% - \gdef\tikz@activebar{|}% - \gdef\tikz@activequotes{"}% - \gdef\tikz@deactivatthings{% - \def;{\tikz@nonactivesemicolon} - \def:{\tikz@nonactivecolon} - \def|{\tikz@nonactivebar} - } -} - - - - - -% Constructs a path and draws/fills them according to the current -% settings. - -\def\tikz@command@path{% - \let\tikz@signal@path=\tikz@signal@path% for detection at begin of matrix cell - \pgfutil@ifnextchar[{\tikz@check@earg}%] - {\pgfutil@ifnextchar<{\tikz@doopt}{\tikz@@command@path}}} -\def\tikz@signal@path{\tikz@signal@path}% -\def\tikz@check@earg[#1]{% - \pgfutil@ifnextchar<{\tikz@swap@args[#1]}{\tikz@@command@path[#1]}} -\def\tikz@swap@args[#1]<#2>{\tikz@command@path<#2>[#1]} - -\def\tikz@doopt{% - \let\tikz@next=\tikz@eargnormalsemicolon% - \ifnum\the\catcode`\;=\active\relax% - \let\tikz@next=\tikz@eargactivesemicolon% - \fi% - \tikz@next} -\long\def\tikz@eargnormalsemicolon<#1>#2;{\only<#1>{\tikz@@command@path#2;}} -{ - \catcode`\;=\active - \long\global\def\tikz@eargactivesemicolon<#1>#2;{\only<#1>{\tikz@@command@path#2;}} -} - -\def\tikz@@command@path{% - \edef\tikzscope@linewidth{\the\pgflinewidth}% - \begingroup% - \let\tikz@options=\pgfutil@empty% - \let\tikz@mode=\pgfutil@empty% - \let\tikz@moveto@waiting=\relax% - \let\tikz@timer=\relax% - \let\tikz@collected@onpath=\pgfutil@empty% - \tikz@snakedfalse% - \tikz@node@is@a@labelfalse% - \tikz@expandcount=1000\relax% - \tikz@lastx=0pt% - \tikz@lasty=0pt% - \tikz@lastxsaved=0pt% - \tikz@lastysaved=0pt% - \tikz@every@style{every path}% - \tikz@scan@next@command% -} -\def\tikz@scan@next@command{% - \ifx\tikz@collected@onpath\pgfutil@empty% - \else% - \tikz@invoke@collected@onpath% - \fi% - \afterassignment\tikz@handle\let\@let@token=% -} -\newcount\tikz@expandcount - -% Central dispatcher for commands -\def\tikz@handle{% - \let\@next=\tikz@expand% - \ifx\@let@token(%) - \let\@next=\tikz@movetoabs% - \else% - \ifx\@let@token+% - \let\@next=\tikz@movetorel% - \else% - \ifx\@let@token-% - \let\@next=\tikz@lineto% - \else% - \ifx\@let@token.% - \let\@next=\tikz@dot% - \else% - \ifx\@let@token r% - \let\@next=\tikz@rect% - \else% - \ifx\@let@token a% - \let\@next=\tikz@arcA% - \else% - \ifx\@let@token[%] - \let\@next=\tikz@parse@options% - \else% - \ifx\@let@token n% - \let\@next=\tikz@fig% - \else% - \ifx\@let@token\bgroup% - \let\@next=\tikz@beginscope% - \else% - \ifx\@let@token\egroup% - \let\@next=\tikz@endscope% - \else% - \ifx\@let@token;% - \let\@next=\tikz@finish% - \else% - \ifx\@let@token c% - \let\@next=\tikz@cchar% - \else% - \ifx\@let@token e% - \let\@next=\tikz@e@char% - \else% - \ifx\@let@token g% - \let\@next=\tikz@grid% - \else% - \ifx\@let@token s% - \let\@next=\tikz@sine% - \else% - \ifx\@let@token |% - \let\@next=\tikz@vh@lineto% - \else% - \ifx\@let@token p% - \let\@next=\tikz@pchar% - \pgfsetmovetofirstplotpoint% - \else% - \ifx\@let@token t% - \let\@next=\tikz@to% - \else% - \ifx\@let@token\pgfextra% - \let\@next=\tikz@extra% - \else% - \ifx\@let@token\foreach% - \let\@next=\tikz@foreach% - \else% - \ifx\@let@token\pgf@stop% - \let\@next=\relax% - \else% - \ifx\@let@token\par% - \let\@next=\tikz@scan@next@command% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \fi% - \@next% -} - -\def\tikz@pchar{\pgfutil@ifnextchar l{\tikz@plot}{\tikz@parabola}} -\def\tikz@cchar{% - \pgfutil@ifnextchar i{\tikz@circle}% - {\pgfutil@ifnextchar h{\tikz@children}{\tikz@cochar}}}% -\def\tikz@cochar o{% - \pgfutil@ifnextchar o{\tikz@coordinate}{\tikz@cosine}} -\def\tikz@e@char{% - \pgfutil@ifnextchar l{\tikz@ellipse}{\tikz@@e@char}}% -\def\tikz@@e@char dge{% - \pgfutil@ifnextchar f{\tikz@edgetoparent}{\tikz@edge@plain}}% - - -\def\tikz@finish{% - \tikz@mode@fillfalse% - \tikz@mode@drawfalse% - \tikz@mode@doublefalse% - \tikz@mode@clipfalse% - \tikz@mode@boundaryfalse% - \edef\tikz@pathextend{% - {\noexpand\pgfqpoint{\the\pgf@pathminx}{\the\pgf@pathminy}}% - {\noexpand\pgfqpoint{\the\pgf@pathmaxx}{\the\pgf@pathmaxy}}% - }% - \tikz@mode% installs the mode settings - % Rendering pipeline: - % - % Step 1: Setup options - % - \ifx\tikz@options\pgfutil@empty% - \else% - \pgfsys@beginscope% - \begingroup% - \tikz@options% - \fi% - % - % Step 2: Do a fill if shade follows. - % - \iftikz@mode@fill% - \iftikz@mode@shade% - \pgfprocessround{\pgfsyssoftpath@currentpath}{\pgfsyssoftpath@currentpath}% change the current path - \pgfsyssoftpath@invokecurrentpath% - \pgfsys@fill% - \tikz@mode@fillfalse% no more filling... - \fi% - \fi% - % - % Step 3: Do a shade if necessary. - % - \iftikz@mode@shade% - \pgfprocessround{\pgfsyssoftpath@currentpath}{\pgfsyssoftpath@currentpath}% change the current path - \pgfshadepath{\tikz@shading}{\tikz@shade@angle}% - \tikz@mode@shadefalse% no more shading... - \fi% - % - % Step 4: Double stroke, if necessary - % - \iftikz@mode@draw% - \iftikz@mode@double% - % Change line width - \begingroup% - \pgfsys@beginscope% - \pgf@x=2\pgflinewidth% - \advance\pgf@x by\tikz@double@width@distance% - \pgflinewidth=\pgf@x% - \pgfsetlinewidth{\the\pgflinewidth}% - \fi% - \fi% - % - % Step 5: Do stroke/fill/clip as needed - % - \edef\tikz@temp{\noexpand\pgfusepath{% - \iftikz@mode@fill fill,\fi% - \iftikz@mode@draw draw,\fi% - \iftikz@mode@clip clip,\fi% - }}% - \tikz@temp% - \tikz@mode@fillfalse% no more filling - % - % Step 6: Double stroke, if necessary - % - \iftikz@mode@draw% - \iftikz@mode@double% - \pgfsyssoftpath@setcurrentpath\pgf@last@used@path% reinstall - \pgf@x=\tikz@double@width@distance% - \pgfsetlinewidth{\the\pgf@x}% - \pgfsetstrokecolor{\tikz@double@color}% - \pgfsyssoftpath@flushcurrentpath% - \pgfsys@stroke% - \pgfsys@endscope% - \pgf@add@arrows@as@needed - \endgroup% - \fi% - \fi% - \tikz@mode@drawfalse% no more stroking - % - % Step 7: Add labels and nodes - % - \copy\tikz@figbox% - \setbox\tikz@figbox=\box\voidb@x% - % - % Step 8: Close option brace - % - \ifx\tikz@options\pgfutil@empty% - \else% - \endgroup% - \pgfsys@endscope% - \iftikz@mode@clip% - \PackageError{tikz}{Extra options not allowed for clipping path command.}{}% - \fi% - \fi% - \iftikz@mode@clip% - \aftergroup\pgf@relevantforpicturesizefalse% - \fi% - \iftikz@mode@boundary% - \aftergroup\pgf@relevantforpicturesizefalse% - \fi% - \endgroup% - \global\pgflinewidth=\tikzscope@linewidth% -} - - - - -\def\tikz@skip#1{\tikz@scan@next@command#1} -\def\tikz@expand{% - \advance\tikz@expandcount by -1% - \ifnum\tikz@expandcount<0\relax% - \PackageError{tikz}{Giving up on this path. Did you forget a semicolon?}{}% - \let\@next=\tikz@finish% - \else% - \let\@next=\tikz@@expand - \fi% - \@next} - -\def\tikz@@expand{% - \expandafter\tikz@scan@next@command\@let@token} - - - -% Syntax for scopes: -% {scoped path commands} - -\def\tikz@beginscope{\begingroup\tikz@scan@next@command} -\def\tikz@endscope{% - \global\setbox\tikz@tempbox=\copy\tikz@figbox% - \endgroup% - \setbox\tikz@figbox=\box\tikz@tempbox% - \tikz@scan@next@command} - - -% Syntax for pgfextra: -% \pgfextra {normal tex text} -% \pgfextra normal tex text \endpgfextra - -\def\tikz@extra{\pgfutil@ifnextchar\bgroup\tikz@@extra\relax} -\long\def\tikz@@extra#1{#1\tikz@scan@next@command} -\let\endpgfextra=\tikz@scan@next@command - -\def\pgfextra{pgfextra} - - -% Syntax for \foreach: -% \foreach \var in {list} {path text} -% -% Example: -% -% \draw (0,0) \foreach \x in {1,2,3} {-- (\x,0) circle (1cm)} -- (5,5); - -\def\tikz@foreach{% - \def\pgffor@beginhook{\setbox\tikz@figbox=\box\tikz@tempbox\expandafter\tikz@scan@next@command\@firstofone}% - \def\pgffor@endhook{\pgfextra{% - \xdef\tikz@foreach@save@lastx{\the\tikz@lastx}% - \xdef\tikz@foreach@save@lasty{\the\tikz@lasty}% - \xdef\tikz@foreach@save@lastxsaved{\the\tikz@lastxsaved}% - \xdef\tikz@foreach@save@lastysaved{\the\tikz@lastysaved}% - \global\setbox\tikz@tempbox=\copy\tikz@figbox\pgfutil@gobble}}% - \def\pgffor@afterhook{% - \tikz@lastx=\tikz@foreach@save@lastx% - \tikz@lasty=\tikz@foreach@save@lasty% - \tikz@lastxsaved=\tikz@foreach@save@lastxsaved% - \tikz@lastysaved=\tikz@foreach@save@lastysaved% - \setbox\tikz@figbox=\box\tikz@tempbox\tikz@scan@next@command}% - \global\setbox\tikz@tempbox=\copy\tikz@figbox% - \foreach} - - -% Syntax for againpath: -% \againpath \somepathname - -\def\tikz@command@againpath#1{% - \pgfextra{% - \pgfsyssoftpath@getcurrentpath\tikz@temp% - \expandafter\pgfutil@g@addto@macro\expandafter\tikz@temp\expandafter{#1}% - \pgfsyssoftpath@setcurrentpath\tikz@temp% - } -} - - - - -% -% When this if is set, a just-scanned point is a shape and its border -% position still needs to be determined, depending on subsequent -% commands. -% - -\newif\iftikz@shapeborder - - -% Syntax for moveto: -% <point> -\def\tikz@movetoabs{\tikz@moveto(} -\def\tikz@movetorel{\tikz@moveto+} -\def\tikz@moveto{% - \tikz@scan@one@point{\tikz@@moveto}} -\def\tikz@@moveto#1{% - \tikz@make@last@position{#1}% - \iftikz@shapeborder% - % ok, the moveto will have to wait. flag that we have a moveto in - % wainting: - \edef\tikz@moveto@waiting{\tikz@shapeborder@name}% - \else% - \pgfpathmoveto{\tikz@last@position}% - \let\tikz@moveto@waiting=\relax% - \fi% - \tikz@scan@next@command% -} - -\let\tikz@moveto@waiting=\relax % normally, nothing is waiting... - -\def\tikz@flush@moveto{% - \ifx\tikz@moveto@waiting\relax% - \else% - \pgfpathmoveto{\tikz@last@position}% - \fi% - \let\tikz@moveto@waiting=\relax% -} - - -\def\tikz@flush@moveto@toward#1#2#3{% - % #1 = a point towards which the last moveto should be corrected - % #2 = a dimension to which the corrected x-coordinate should be stored - % #3 = a dimension for the corrected y-coordinate - \ifx\tikz@moveto@waiting\relax% - % do nothing - \else% - \pgf@process{\pgfpointshapeborder{\tikz@moveto@waiting}{#1}}% - #2=\pgf@x% - #3=\pgf@y% - \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% - \pgfpathmoveto{\pgfqpoint{\pgf@x}{\pgf@y}}% - \fi% - \let\tikz@moveto@waiting=\relax% -} - - -% -% Collecting labels on the path -% - -\def\tikz@collect@coordinate@onpath#1coordinate{% - \pgfutil@ifnextchar[{\tikz@@collect@coordinate@opt#1}{\tikz@@collect@coordinate@opt#1[]}}%} -\def\tikz@@collect@coordinate@opt#1[#2]{% - \pgfutil@ifnextchar({\tikz@@collect@coordinate#1[#2]}{% - \tikz@collect@label@onpath#1node[shape=coordinate,#2]{}}}%} -\def\tikz@@collect@coordinate#1[#2](#3){% - \tikz@collect@label@onpath#1node[shape=coordinate,#2](#3){}} - -\def\tikz@collect@label@onpath#1node{% - \expandafter\def\expandafter\tikz@collected@onpath\expandafter{\tikz@collected@onpath node}% - \tikz@collect@label@scan#1} - -\def\tikz@collect@label@scan#1{% - \pgfutil@ifnextchar({\tikz@collect@paran#1}% - {\pgfutil@ifnextchar[{\tikz@collect@options#1}% - {\pgfutil@ifnextchar\bgroup{\tikz@collect@arg#1}% - {#1}}}% -}%}} - -\def\tikz@collect@paran#1(#2){% - \expandafter\def\expandafter\tikz@collected@onpath\expandafter{\tikz@collected@onpath(#2)}% - \tikz@collect@label@scan#1% -} -\def\tikz@collect@options#1[#2]{% - \expandafter\def\expandafter\tikz@collected@onpath\expandafter{\tikz@collected@onpath[#2]}% - \tikz@collect@label@scan#1% -} -\def\tikz@collect@arg#1#2{% - \expandafter\def\expandafter\tikz@collected@onpath\expandafter{\tikz@collected@onpath{#2}}% - #1% -} - - -\def\tikz@invoke@collected@onpath{% - \tikz@node@is@a@labeltrue% - \let\tikz@temp=\tikz@collected@onpath% - \let\tikz@collected@onpath=\pgfutil@empty% - \expandafter\tikz@scan@next@command\tikz@temp\pgf@stop% - \tikz@node@is@a@labelfalse% -} - - - - -% Syntax for lineto: -% -- <point> - -\def\tikz@lineto{% - \pgfutil@ifnextchar |% - {\expandafter\tikz@hv@lineto\pgfutil@gobble}% - {\expandafter\pgfutil@ifnextchar\tikz@activebar{\expandafter\tikz@hv@lineto\pgfutil@gobble}% - {\expandafter\tikz@lineto@mid\pgfutil@gobble}}} -\def\tikz@lineto@mid{% - \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikz@lineto@mid}% - {% - \pgfutil@ifnextchar c{\tikz@close}{% - \pgfutil@ifnextchar p{\pgfsetlinetofirstplotpoint\expandafter\tikz@plot\pgfutil@gobble}% - {\tikz@scan@one@point{\tikz@@lineto}}}}} -\def\tikz@@lineto#1{% - % Record the starting point for later labels on the path: - \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}} - \iftikz@shapeborder% - % ok, target is a shape. recalculate end - \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\tikz@last@position}}% - \tikz@make@last@position{\pgfqpoint{\pgf@x}{\pgf@y}}% - \tikz@flush@moveto@toward{\tikz@last@position}\pgf@x\pgf@y% - \tikz@path@lineto{\tikz@last@position}% - \edef\tikz@timer@end{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - \tikz@make@last@position{#1}% - \edef\tikz@moveto@waiting{\tikz@shapeborder@name}% - \else% - % target is a reasonable point... - % Record the starting point for later labels on the path: - \tikz@make@last@position{#1}% - \tikz@flush@moveto@toward{\tikz@last@position}\pgf@x\pgf@y% - \tikz@path@lineto{\tikz@last@position}% - \edef\tikz@timer@end{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - \fi% - \let\tikz@timer=\tikz@timer@line% - \tikz@scan@next@command% -} - -% snake or lineto? -\def\tikz@path@lineto#1{% - \iftikz@snaked% - { - \pgfsyssoftpathmovetorelevantfalse% - \pgfpathsnakesto{\tikz@presnake,{\tikz@snake}{\tikz@mainsnakelength},\tikz@postsnake}{#1}% - } - \else% - \pgfpathlineto{#1}% - \fi% -} - -% snake or lineto? -\def\tikz@path@close#1{% - \iftikz@snaked% - {% - \pgftransformreset% - \pgfpathsnakesto{\tikz@presnake,{\tikz@snake}{\tikz@mainsnakelength},\tikz@postsnake}{#1}% - }% - \pgfpathclose% - \else% - \pgfpathclose% - \fi% -} - - -% Syntax for lineto horizontal/vertical: -% -| <point> - -\def\tikz@hv@lineto{% - \pgfutil@ifnextchar n - {\tikz@collect@label@onpath\tikz@hv@lineto} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikz@hv@lineto}% - {\tikz@scan@one@point{\tikz@@hv@lineto}}}} -\def\tikz@@hv@lineto#1{% - \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - \pgf@yc=\tikz@lasty% - \tikz@make@last@position{#1}% - \tikz@flush@moveto@toward{\pgfqpoint{\tikz@lastx}{\pgf@yc}}\pgf@x\pgf@yc% - \iftikz@shapeborder% - % ok, target is a shape. have to work now: - {% - \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\tikz@lastx}{\pgf@yc}}}% - \tikz@make@last@position{\pgfqpoint{\pgf@x}{\pgf@y}}% - \tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\pgf@yc}}% - \tikz@path@lineto{\tikz@last@position}% - \xdef\tikz@timer@end@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% move out of group - }% - \let\tikz@timer@end=\tikz@timer@end@temp% - \edef\tikz@moveto@waiting{\tikz@shapeborder@name}% - \else% - \tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\pgf@yc}}% - \tikz@path@lineto{\tikz@last@position}% - \edef\tikz@timer@end{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% move out of group - \fi% - \let\tikz@timer=\tikz@timer@hvline% - \tikz@scan@next@command% -} - -% Syntax for lineto vertical/horizontal: -% |- <point> - -\def\tikz@vh@lineto-{\tikz@vh@lineto@next} -\def\tikz@vh@lineto@next{% - \pgfutil@ifnextchar n - {\tikz@collect@label@onpath\tikz@vh@lineto@next} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikz@vh@lineto@next}% - {\tikz@scan@one@point\tikz@@vh@lineto}}} -\def\tikz@@vh@lineto#1{% - \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - \pgf@xc=\tikz@lastx% - \tikz@make@last@position{#1}% - \tikz@flush@moveto@toward{\pgfqpoint{\pgf@xc}{\tikz@lasty}}\pgf@xc\pgf@y% - \iftikz@shapeborder% - % ok, target is a shape. have to work now: - {% - \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@xc}{\tikz@lasty}}}% - \tikz@make@last@position{\pgfqpoint{\pgf@x}{\pgf@y}}% - \tikz@path@lineto{\pgfqpoint{\pgf@xc}{\tikz@lasty}}% - \tikz@path@lineto{\tikz@last@position}% - \xdef\tikz@timer@end@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% move out of group - }% - \let\tikz@timer@end=\tikz@timer@end@temp% - \edef\tikz@moveto@waiting{\tikz@shapeborder@name}% - \else% - \tikz@path@lineto{\pgfqpoint{\pgf@xc}{\tikz@lasty}}% - \tikz@path@lineto{\tikz@last@position}% - \edef\tikz@timer@end{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - \fi% - \let\tikz@timer=\tikz@timer@vhline% - \tikz@scan@next@command% -} - -% Syntax for cycle: -% -- cycle -\def\tikz@close c{% - \pgfutil@ifnextchar o{\tikz@collect@coordinate@onpath\tikz@lineto@mid c}% oops, a coordinate - {\tikz@@close c}}% -\def\tikz@@close cycle{% - \tikz@flush@moveto% - \tikz@path@close{\expandafter\pgfpoint\pgfsyssoftpath@lastmoveto}% - \def\pgfstrokehook{}% - \let\tikz@timer=\@undefined% - \tikz@scan@next@command% -} - - -% Syntax for options: -% [options] -\def\tikz@parse@options#1]{% - \tikz@setkeys{#1}% - \tikz@scan@next@command% -} - -% Syntax for edges: -% edge [options] (coordinate) -% edge [options] node {node text} (coordinate) -\def\tikz@edge@plain{% - \begingroup% - \tikz@to@use@whom% - \let\tikz@to@or@edge@function=\tikz@do@edge% - \tikz@to@or@edge} - -% Syntax for to paths: -% to [options] (coordinate) -% to [options] node {node text} (coordinate) -\def\tikz@to o{% - \tikz@to@use@last@coordinate% - \let\tikz@to@or@edge@function=\tikz@do@to% - \tikz@to@or@edge} - -\def\tikz@to@or@edge{\pgfutil@ifnextchar[\tikz@@to@or@edge{\tikz@@to@or@edge[]}}%} -\def\tikz@@to@or@edge[#1]{% - \def\tikz@@to@local@options{[#1]}% - \let\tikz@collected@onpath=\pgfutil@empty% - \tikz@@to@collect% -} -\def\tikz@@to@collect{% - \pgfutil@ifnextchar(\tikz@@to@or@edge@coordinate - {\pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikz@@to@collect}% - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikz@@to@collect} - {\PackageError{tikz}{( expected}{}%} - \tikz@@to@or@edge@coordinate()}}}% -} - -\def\tikz@@to@or@edge@coordinate(#1){% - \def\tikztotarget{#1}% - \tikz@to@or@edge@function% -} - -\def\tikz@do@edge{% - \setbox\tikz@figbox=\hbox\bgroup% - \unhbox\tikz@figbox% - \hbox\bgroup - \bgroup% - \pgfinterruptpath% - \pgfscope% - \let\tikz@transform=\pgfutil@empty% - \let\tikz@options=\pgfutil@empty% - \let\tikz@tonodes=\tikz@collected@onpath% - \def\tikztonodes{{\pgfextra{\tikz@node@is@a@labeltrue}\tikz@tonodes}}% - \let\tikz@collected@onpath=\pgfutil@empty% - \tikz@options% - \tikz@transform% - % Typeset node: - \tikz@atbegin@to% - \path[style=every edge]\tikz@@to@local@options(\tikztostart)\tikz@to@path;% - \tikz@atend@to% - \endpgfscope% - \endpgfinterruptpath% - \egroup - \egroup% - \egroup% - \global\setbox\tikz@tempbox=\copy\tikz@figbox% - \endgroup% - \setbox\tikz@figbox=\box\tikz@tempbox% - \tikz@scan@next@command% -} - -\def\tikz@do@to{% - \let\tikz@tonodes=\tikz@collected@onpath% - \def\tikztonodes{{\pgfextra{\tikz@node@is@a@labeltrue}\tikz@tonodes}}% - \let\tikz@collected@onpath=\pgfutil@empty% - \tikz@scan@next@command% - \pgfextra{\tikz@atbegin@to}% - [style=every to]\tikz@@to@local@options\tikz@to@path% - \pgfextra{\tikz@atend@to}% -} - - -\def\tikz@to@use@last@coordinate{% - \iftikz@shapeborder% - \edef\tikztostart{\tikz@shapeborder@name}% - \else% - \edef\tikztostart{\the\tikz@lastx,\the\tikz@lasty}% - \fi% -} -\def\tikz@to@use@last@fig@name{% - \edef\tikztostart{\tikz@to@last@fig@name}% -} - - - -% Syntax for edge from parent: -% edge from parent [options] -\def\tikz@edgetoparent from parent{\pgfutil@ifnextchar[\tikz@@edgetoparent{\tikz@@edgetoparent[]}}%} -\def\tikz@@edgetoparent[#1]{% - \let\tikz@edge@to@parent@needed=\pgfutil@empty% - \tikz@node@is@a@labeltrue% - \tikz@scan@next@command [style=edge from parent,#1] \tikz@edge@to@parent@path% -} - - -% Syntax for bezier curves -% .. controls(point) and (point) .. (target) -% .. controls(point) .. (target) -% .. (target) % currently not supported - -\def\tikz@dot.{\tikz@@dot}% -\def\tikz@@dot{% - \pgfutil@ifnextchar n% - {\tikz@collect@label@onpath\tikz@@dot}% - {\pgfutil@ifnextchar c{\tikz@curveto@double}{\tikz@curveto@auto}}} - -\def\tikz@curveto@double co{% - \pgfutil@ifnextchar o{\tikz@collect@coordinate@onpath\tikz@@dot co} - {\tikz@cureveto@@double}} -\def\tikz@cureveto@@double ntrols#1{% - \tikz@scan@one@point\tikz@curveA#1% -} -\def\tikz@curveA#1{% - \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - {% - \tikz@make@last@position{#1}% - \xdef\tikz@curve@first{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - }% - \pgfutil@ifnextchar a - {\tikz@curveBand}% - {\let\tikz@curve@second\tikz@curve@first\tikz@curveCdots}% -} -\def\tikz@curveBand and{% - \tikz@scan@one@point\tikz@curveB% -} -\def\tikz@curveB#1{% - \def\tikz@curve@second{#1}% - \tikz@curveCdots} -\def\tikz@curveCdots{% - \afterassignment\tikz@curveCdot\let\@next=} -\def\tikz@curveCdot.{% - \ifx\@next.% - \else% - \PackageError{tikz}{Dot expected}{}% - \fi% - \tikz@updatecurrenttrue% - \tikz@curveCcheck% -} -\def\tikz@curveCcheck{% - \pgfutil@ifnextchar n% - {\tikz@collect@label@onpath\tikz@curveCcheck} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikz@curveCcheck} - {\tikz@scan@one@point\tikz@curveC}}% -} -\def\tikz@curveC#1{% - \tikz@make@last@position{#1}% - \edef\tikz@curve@third{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - {% - \tikz@lastxsaved=\tikz@lastx% - \tikz@lastysaved=\tikz@lasty% - \tikz@make@last@position{\tikz@curve@second}% - \xdef\tikz@curve@second{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - }% - % - % Start recalculating things in case start and end are shapes. - % - % First, the start: - \ifx\tikz@moveto@waiting\relax% - \else% - \pgf@process{\pgfpointshapeborder{\tikz@moveto@waiting}{\tikz@curve@first}}% - \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% - \pgfpathmoveto{\pgfqpoint{\pgf@x}{\pgf@y}}% - \fi% - \let\tikz@timer@cont@one=\tikz@curve@first% - \let\tikz@timer@cont@two=\tikz@curve@second% - % Second, the end: - \iftikz@shapeborder% - % ok, target is a shape. recalculate third - {% - \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\tikz@curve@second}}% - \tikz@make@last@position{\pgfqpoint{\pgf@x}{\pgf@y}}% - \edef\tikz@curve@third{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - \pgfpathcurveto{\tikz@curve@first}{\tikz@curve@second}{\tikz@curve@third}% - \global\let\tikz@timer@end@temp=\tikz@curve@third% move out of group - }% - \let\tikz@timer@end=\tikz@timer@end@temp% - \edef\tikz@moveto@waiting{\tikz@shapeborder@name}% - \else% - \pgfpathcurveto{\tikz@curve@first}{\tikz@curve@second}{\tikz@curve@third}% - \let\tikz@timer@end=\tikz@curve@third - \let\tikz@moveto@waiting=\relax% - \fi% - \let\tikz@timer=\tikz@timer@curve% - \tikz@scan@next@command% -} - - -% Syntax for rectangles: -% rectangle <corner point> -\def\tikz@rect ectangle{% - \tikz@flush@moveto% - \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - \tikz@@rect}% -\def\tikz@@rect{% - \pgfutil@ifnextchar n - {\tikz@collect@label@onpath\tikz@@rect} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikz@@rect}% - { - \pgf@xa=\tikz@lastx\relax% - \pgf@ya=\tikz@lasty\relax% - \tikz@scan@one@point\tikz@rectB}}} -\def\tikz@rectB#1{% - \tikz@make@last@position{#1}% - \edef\tikz@timer@end{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - \let\tikz@timer=\tikz@timer@line% - \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}% - \tikz@path@lineto{\pgfqpoint{\pgf@xa}{\tikz@lasty}}% - \tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\tikz@lasty}}% - \tikz@path@lineto{\pgfqpoint{\tikz@lastx}{\pgf@ya}}% - \iftikz@snaked% - \tikz@path@lineto{\pgfqpoint{\pgf@xa}{\pgf@ya}}% - \fi% - \pgfpathclose% - \pgfpathmoveto{\pgfqpoint{\tikz@lastx}{\tikz@lasty}}% - \def\pgfstrokehook{}% - \tikz@scan@next@command% -} - - - -% Syntax for grids: -% grid <corner point> -\def\tikz@grid rid{% - \tikz@flush@moveto% - \pgf@xa=\tikz@lastx\relax% - \pgf@ya=\tikz@lasty\relax% - \pgfutil@ifnextchar[{\tikz@gridA}{\tikz@gridA[]}}%} -\def\tikz@gridA[#1]{% - \def\tikz@grid@options{#1}% - \tikz@scan@one@point\tikz@gridB}% -\def\tikz@gridB#1{% - \tikz@make@last@position{#1}% - {% - \expandafter\tikz@setkeys\expandafter{\tikz@grid@options} - \tikz@checkunit{\tikz@grid@x}% - \iftikz@isdimension% - \pgf@process{\pgfpoint{\tikz@grid@x}{0pt}}% - \else% - \pgf@process{\pgfpointxy{\tikz@grid@x}{0}}% - \fi% - \pgf@xb=\pgf@x% - \pgf@yb=\pgf@y% - \tikz@checkunit{\tikz@grid@y}% - \iftikz@isdimension% - \pgf@process{\pgfpoint{0pt}{\tikz@grid@y}}% - \else% - \pgf@process{\pgfpointxy{0}{\tikz@grid@y}}% - \fi% - \advance\pgf@xb by\pgf@x% - \advance\pgf@yb by\pgf@y% - \pgfpathgrid[stepx=\pgf@xb,stepy=\pgf@yb]% - {\pgfqpoint{\pgf@xa}{\pgf@ya}}{\pgfqpoint{\tikz@lastx}{\tikz@lasty}}% - } - \tikz@scan@next@command% -} - - - -% Syntax for plot: -% plot [local options] ... % starts with a moveto -% -- plot [local options] ... % starts with a lineto -\def\tikz@plot lot{% - \tikz@flush@moveto% - \pgfutil@ifnextchar[{\tikz@@plot}{\tikz@@plot[]}}%} -\def\tikz@@plot[#1]{% - \begingroup% - \let\tikz@options=\pgfutil@empty% - \tikz@every@style{every plot}% - \tikz@setkeys{#1}% - \pgfutil@ifnextchar f{\tikz@plot@f}% - {\pgfutil@ifnextchar c{\tikz@plot@scan@points}% - {\pgfutil@ifnextchar ({\tikz@plot@expression}{% - \PackageError{tikz}{Cannot parse this plotting data}{}% - \endgroup}}}} -\def\tikz@plot@f f{\pgfutil@ifnextchar i{\tikz@plot@file}{\tikz@plot@function}} - -\def\tikz@plot@file ile#1{\def\tikz@plot@data{\pgfplotxyfile{#1}}\tikz@@@plot}% -\def\tikz@plot@scan@points coordinates#1{% - \pgfplothandlerrecord\tikz@plot@data% - \pgfplotstreamstart% - \pgfutil@ifnextchar\pgf@stop{\pgfplotstreamend\expandafter\tikz@@@plot\pgfutil@gobble} - {\tikz@scan@one@point\tikz@plot@next@point}% - #1\pgf@stop% -} -\def\tikz@plot@next@point#1{% - \pgfplotstreampoint{#1}% - \pgfutil@ifnextchar\pgf@stop{\pgfplotstreamend\expandafter\tikz@@@plot\pgfutil@gobble}% - {\tikz@scan@one@point\tikz@plot@next@point}% -} -\def\tikz@plot@function unction#1{% - \def\tikz@plot@filename{\tikz@plot@prefix\tikz@plot@id}% - \iftikz@plot@raw@gnuplot% - \def\tikz@plot@data{\pgfplotgnuplot[\tikz@plot@filename]{#1}}% - \else% - \iftikz@plot@parametric% - \def\tikz@plot@data{\pgfplotgnuplot[\tikz@plot@filename]{% - set samples \tikz@plot@samples; - set parametric; - plot [t=\tikz@plot@domain] #1}}% - \else% - \def\tikz@plot@data{\pgfplotgnuplot[\tikz@plot@filename]{% - set samples \tikz@plot@samples; - plot [x=\tikz@plot@domain] #1}}% - \fi% - \fi% - \tikz@@@plot% -} - -\def\tikz@plot@no@resample{% - \pgfutil@IfFileExists{\tikz@plot@filename.table}% - {\def\tikz@plot@data{\pgfplotxyfile{\tikz@plot@filename.table}}}% - {}% -} - -\def\tikz@plot@expression(#1){% - \edef\tikz@plot@data{\noexpand\pgfplotfunction{\expandafter\noexpand\tikz@plot@var}{\tikz@plot@samplesat}}% - \expandafter\def\expandafter\tikz@plot@data\expandafter{\tikz@plot@data{\tikz@scan@one@point\pgfutil@firstofone(#1)}}% - \tikz@@@plot% -} - -\def\tikz@@@plot{% - \def\pgfplotlastpoint{\pgfpointorigin}% - \tikz@plot@handler% - \tikz@plot@data% - \global\let\tikz@@@temp=\pgfplotlastpoint% - \ifx\tikz@plot@mark\pgfutil@empty% - \else% - % Marks are drawn after the path. - \setbox\tikz@figbox=\hbox{% - \unhbox\tikz@figbox% - \hbox{{% - \pgfinterruptpath% - \pgfscope% - \let\tikz@options=\pgfutil@empty% - \let\tikz@transform=\pgfutil@empty% - \expandafter\tikz@setkeys\expandafter{\tikz@plot@mark@options}% - \tikz@options% - \ifx\tikz@mark@list\pgfutil@empty% - \pgfplothandlermark{\tikz@transform\pgfuseplotmark{\tikz@plot@mark}}% - \else - \pgfplothandlermarklisted{\tikz@transform\pgfuseplotmark{\tikz@plot@mark}}{\tikz@mark@list}% - \fi - \tikz@plot@data% - \endpgfscope - \endpgfinterruptpath% - }}% - }% - \fi% - \global\setbox\tikz@tempbox=\copy\tikz@figbox% - \endgroup% - \setbox\tikz@figbox=\box\tikz@tempbox% - \tikz@make@last@position{\tikz@@@temp}% - \tikz@scan@next@command% -} - - -\pgfdeclareplotmark{ball} -{% - \def\tikz@shading{ball}% - \shade (0,0) circle (\pgfplotmarksize);% -} - - - - -% Syntax for cosine curves: -% cos <end of quarter-period> -\def\tikz@cosine s{\tikz@scan@one@point\tikz@@cosine} -\def\tikz@@cosine#1{% - \tikz@flush@moveto% - \pgf@process{#1}% - \pgf@xc=\pgf@x% - \pgf@yc=\pgf@y% - \advance\pgf@xc by-\tikz@lastx% - \advance\pgf@yc by-\tikz@lasty% - \advance\tikz@lastx by\pgf@xc% - \advance\tikz@lasty by\pgf@yc% - \tikz@lastxsaved=\tikz@lastx% - \tikz@lastysaved=\tikz@lasty% - \tikz@updatecurrenttrue% - \pgfpathcosine{\pgfqpoint{\pgf@xc}{\pgf@yc}}% - \tikz@scan@next@command% -} - -% Syntax for sine curves: -% sin <end of quarter-period> -\def\tikz@sine in{\tikz@scan@one@point\tikz@@sine} -\def\tikz@@sine#1{% - \tikz@flush@moveto% - \pgf@process{#1}% - \pgf@xc=\pgf@x% - \pgf@yc=\pgf@y% - \advance\pgf@xc by-\tikz@lastx% - \advance\pgf@yc by-\tikz@lasty% - \advance\tikz@lastx by\pgf@xc% - \advance\tikz@lasty by\pgf@yc% - \tikz@lastxsaved=\tikz@lastx% - \tikz@lastysaved=\tikz@lasty% - \tikz@updatecurrenttrue% - \pgfpathsine{\pgfqpoint{\pgf@xc}{\pgf@yc}}% - \tikz@scan@next@command% -} - -% Syntax for parabolas: -% parabola[options] bend <coordinate> <coordinate> -\def\tikz@parabola arabola{% - \pgfutil@ifnextchar[{\tikz@parabola@options}{\tikz@parabola@options[]}}%} - -\def\tikz@parabola@options[#1]{% - \def\tikz@parabola@option{#1}% - \pgfutil@ifnextchar b{\tikz@parabola@scan@bend}{\tikz@scan@one@point\tikz@parabola@semifinal}} -\def\tikz@parabola@scan@bend bend{\tikz@scan@one@point\tikz@parabola@scan@bendB} -\def\tikz@parabola@scan@bendB#1{% - \def\tikz@parabola@bend{#1}% - \tikz@scan@one@point\tikz@parabola@semifinal% -} -\def\tikz@parabola@semifinal#1{% - \tikz@flush@moveto% - % Save original start: - \pgf@xb=\tikz@lastx% - \pgf@yb=\tikz@lasty% - \tikz@make@last@position{#1}% - \pgf@xc=\tikz@lastx% - \pgf@yc=\tikz@lasty% - \begingroup% now calculate bend: - \expandafter\tikz@setkeys\expandafter{\tikz@parabola@option}% - \tikz@lastxsaved=\tikz@parabola@bend@factor\tikz@lastx% - \tikz@lastysaved=\tikz@parabola@bend@factor\tikz@lasty% - \advance\tikz@lastxsaved by\pgf@xb% - \advance\tikz@lastysaved by\pgf@yb% - \advance\tikz@lastxsaved by-\tikz@parabola@bend@factor\pgf@xb% - \advance\tikz@lastysaved by-\tikz@parabola@bend@factor\pgf@yb% - \expandafter\tikz@make@last@position\expandafter{\tikz@parabola@bend}% - % Calculate delta from bend - \advance\pgf@xc by-\tikz@lastx% - \advance\pgf@yc by-\tikz@lasty% - % Ok, now calculate delta to bend - \advance\tikz@lastx by-\pgf@xb% - \advance\tikz@lasty by-\pgf@yb% - \xdef\tikz@parabola@b{{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}}% - \endgroup% - \expandafter\pgfpathparabola\tikz@parabola@b% - \tikz@scan@next@command% -} - - -% Syntax for circles: -% circle (radius) -% -% Syntax for ellipses: -% ellipse (x-radius and y-radius) -% -% radii can be dimensionless, then they are in the xy-system -\def\tikz@circle ircle{\tikz@flush@moveto\tikz@@circle} -\def\tikz@ellipse llipse{\tikz@flush@moveto\tikz@@circle} -\def\tikz@@circle{% - \pgfutil@ifnextchar(\tikz@@@circle{%) - \advance\tikz@expandcount by -1% - \ifnum\tikz@expandcount<0\relax% - \let\@next=\tikz@@circle@scangiveup% - \else% - \let\@next=\tikz@@circle@scanexpand% - \fi% - \@next% - }% -} -\def\tikz@@circle@scanexpand{\expandafter\tikz@@circle} -\def\tikz@@circle@scangiveup#1{\PackageError{tikz}{Cannot parse this radius}{}#1{\tikz@scan@next@command}} -\def\tikz@@@circle(#1){% - \pgfutil@in@{ and }{#1}% - \ifpgfutil@in@% - \tikz@@ellipseB(#1)% - \else% - \tikz@@ellipseB(#1 and #1)% - \fi% - \tikz@scan@next@command% -} -\def\tikz@@ellipseB(#1 and #2){% - \tikz@checkunit{#1}% - \iftikz@isdimension% - \pgfpathellipse{\tikz@last@position}{\pgfpoint{#1}{0pt}}{\pgfpoint{0pt}{#2}}% - \else% - \pgfpathellipse{\tikz@last@position}{\pgfpointxy{#1}{0}}{\pgfpointxy{0}{#2}}% - \fi% -} - -% Syntax 1 for arcs: -% arc (start angle:end angle:radius) -% -% Syntax 2 for arcs: -% arc (start angle:end angle:x-radius and y-radius) -% -% radius can be dimensionless, then the arc is in the xy-coordinate system -\def\tikz@arcA rc{% - \tikz@flush@moveto% - \pgfutil@ifnextchar({\tikz@@arcto}{\expandafter\tikz@arcA\expandafter r\expandafter c}} - -\def\tikz@@arcto(#1){% - \edef\tikz@temp{(#1)}% - \expandafter\tikz@@@arcto@check@slashand\tikz@temp% -} - -\def\tikz@@@arcto@check@slashand(#1:#2:#3){% - \pgfutil@in@{ and }{#3}% - \ifpgfutil@in@% - \tikz@parse@arc@and(#1:#2:#3)% - \else% - \tikz@parse@arc@and(#1:#2:#3 and #3)% - \fi% -} - -\def\tikz@parse@arc@and(#1:#2:#3 and #4){% - \tikz@checkunit{#3}% - \iftikz@isdimension% - \tikz@@@arcfinal{\pgfpatharc{#1}{#2}{#3 and #4}} - {\pgfpointpolar{#1}{#3 and #4}} - {\pgfpointpolar{#2}{#3 and #4}}% - \else% - \tikz@@@arcfinal{\pgfpatharcaxes{#1}{#2}{\pgfpointxy{#3}{0}}{\pgfpointxy{0}{#4}}} - {\pgfpointpolarxy{#1}{#3 and #4}}{\pgfpointpolarxy{#2}{#3 and #4}}% - \fi% -} - -\def\tikz@@@arcfinal#1#2#3{% - #1% - \pgf@process{#2}% - \advance\tikz@lastx by-\pgf@x% - \advance\tikz@lasty by-\pgf@y% - \pgf@process{#3}% - \advance\tikz@lastx by\pgf@x% - \advance\tikz@lasty by\pgf@y% - \tikz@lastxsaved=\tikz@lastx% - \tikz@lastysaved=\tikz@lasty% - \tikz@scan@next@command% -} - - -% Syntax for coordinates: -% coordinate[options] (coordinate name) at (point) -% where ``at (point)'' is optional -\def\tikz@coordinate ordinate{% - \pgfutil@ifnextchar[{\tikz@@coordinate@opt}{\tikz@@coordinate@opt[]}} -\def\tikz@@coordinate@opt[#1]{% - \pgfutil@ifnextchar({\tikz@@coordinate[#1]} - {\tikz@fig ode[shape=coordinate,#1]{}}}%} -\def\tikz@@coordinate[#1](#2){% - \pgfutil@ifnextchar a{\tikz@@coordinate@at[#1](#2)} - {\tikz@fig ode[shape=coordinate,#1](#2){}}} -\def\tikz@@coordinate@at[#1](#2)at#3(#4){% - \tikz@fig ode[shape=coordinate,#1](#2)at(#4){}} - - - -% Syntax for nodes: -% node[options] (node name) {label text} -% -% all of [options], (node name) and {label text} are optional. There -% can be multiple options before the label text as in -% node[draw] (a) [rotate=10] {text} -% -% A label text always ``ends'' the node. -\def\tikz@fig ode{% - \edef\tikz@save@line@width{\the\pgflinewidth}% - \begingroup% - \let\tikz@fig@name=\pgfutil@empty% - \begingroup% - \tikz@is@matrixfalse% - \let\nodepart=\tikz@nodepart% - \let\tikz@options=\pgfutil@empty% - \let\tikz@after@node=\pgfutil@empty% - \let\tikz@afternodepathoptions=\pgfutil@empty% - \let\tikz@transform=\pgfutil@empty% - \let\tikz@mode=\pgfutil@empty% - \def\tikz@node@at{\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% - \iftikz@node@is@a@label% - \else% - \let\tikz@time=\pgfutil@empty% - \fi% - \tikz@every@style{every node}% - \tikz@@scan@fig}% -\def\tikz@@scan@fig{% - \pgfutil@ifnextchar a{\tikz@fig@scan@at} - {\pgfutil@ifnextchar({\tikz@fig@scan@name} - {\pgfutil@ifnextchar[{\tikz@fig@scan@options}% - {\pgfutil@ifnextchar\bgroup{\tikz@fig@main}% - {\PackageError{tikz}{A node must have a (possibly empty) label text}{}% - \tikz@fig@main{}}}}}}%}} -\def\tikz@fig@scan@at at{% - \tikz@scan@one@point\tikz@@fig@scan@at} -\def\tikz@@fig@scan@at#1{% - \def\tikz@node@at{#1}\tikz@@scan@fig}% -\def\tikz@fig@scan@name(#1){\edef\tikz@fig@name{#1}\tikz@@scan@fig}% -\def\tikz@fig@scan@options[#1]{\tikz@setkeys{#1}\def\test{#1}\tikz@@scan@fig}% -\def\tikz@fig@main{\afterassignment\tikz@@fig@main\let\next=} -\def\tikz@@fig@main{% - \pgfutil@ifundefined{pgf@sh@s@\tikz@shape}% - {\PackageError{tikz}% - {Unknown shape ``\tikz@shape.'' Using ``rectangle'' instead}{}% - \def\tikz@shape{rectangle}}% - {}% - \tikz@every@style{every \tikz@shape\space node}% - \iftikz@is@matrix% - \let\tikz@next=\tikz@do@matrix% - \else% - \let\tikz@next=\tikz@do@fig% - \fi% - \tikz@next% -} -\def\tikz@do@fig{% - \setbox\pgfnodeparttextbox=\hbox% - \bgroup% - \tikz@every@style{every text node part}% - \ifx\tikz@textopacity\pgfutil@empty% - \else% - \pgfsetfillopacity{\tikz@textopacity}% - \pgfsetstrokeopacity{\tikz@textopacity}% - \fi% - \pgfinterruptpicture% - \tikz@textfont% - \ifx\tikz@text@width\pgfutil@empty% - \else% - \begingroup% - \pgfutil@minipage[t]{\tikz@text@width}% - \tikz@text@action% - \fi% - \tikz@atbegin@node% - \bgroup% - \aftergroup\unskip% - \ifx\tikz@textcolor\pgfutil@empty% - \else% - \pgfutil@colorlet{.}{\tikz@textcolor}% - \fi% - \pgfsetcolor{.}% - \setbox\tikz@figbox=\box\voidb@x% - \tikz@uninstallcommands% - \aftergroup\tikz@fig@collectresetcolor% - \ignorespaces% -} -\def\tikz@fig@collectresetcolor{% - \pgfutil@ifnextchar\reset@color% - {\reset@color\afterassignment\tikz@fig@collectresetcolor\let\tikz@temp=}% - {\tikz@fig@boxdone}% -} -\def\tikz@fig@boxdone{% - \tikz@atend@node% - \ifx\tikz@text@width\pgfutil@empty% - \else% - \pgfutil@endminipage% - \endgroup% - \fi% - \endpgfinterruptpicture% - \egroup% - \pgfutil@ifnextchar c{\tikz@fig@mustbenamed\tikz@fig@continue}% - {\pgfutil@ifnextchar[{\tikz@fig@mustbenamed\tikz@fig@continue}% - {\pgfutil@ifnextchar t{\tikz@fig@mustbenamed\tikz@fig@continue} - {\pgfutil@ifnextchar e{\tikz@fig@mustbenamed\tikz@fig@continue} - {\ifx\tikz@after@node\pgfutil@empty\expandafter\tikz@fig@continue\else\expandafter\tikz@fig@mustbenamed\expandafter\tikz@fig@continue\fi}}}}}%} - -\def\tikz@do@matrix{% - \tikz@every@style{every matrix}% - \tikz@node@transformations% - \tikz@fig@mustbenamed% - \setbox\tikz@figbox=\hbox\bgroup% - \setbox\pgfutil@tempboxa=\copy\tikz@figbox% - \unhbox\pgfutil@tempboxa% - \hbox\bgroup\bgroup% - \pgfinterruptpath% - \pgfscope% - \tikz@options% - \setbox\tikz@figbox=\box\voidb@x% - \let\tikzmatrixname=\tikz@fig@name% - \edef\tikz@m@anchor{\ifx\tikz@matrix@anchor\pgfutil@empty\tikz@anchor\else\tikz@matrix@anchor\fi}% - \expandafter\pgfutil@in@\expandafter{\expandafter.\expandafter}\expandafter{\tikz@m@anchor}% - \ifpgfutil@in@% - \expandafter\tikz@matrix@split\tikz@m@anchor\relax% - \else% - \def\tikz@matrix@shift{\pgfpointorigin}% - \fi% - \let\tikz@transform=\relax% - \pgfmatrix% - {\tikz@shape}% - {\tikz@m@anchor}% - {\tikz@fig@name}% - {% - \pgfutil@tempdima=\pgflinewidth% - {\begingroup\tikz@finish}% - \global\pgflinewidth=\pgfutil@tempdima% - }% - {\tikz@matrix@shift}% - {% - \tikz@matrix@make@active@ampersand% - \def\pgfmatrixbegincode{% - \pgfsys@beginscope% - \tikz@common@matrix@code% - \tikz@atbegin@cell% - }% - \def\tikz@common@matrix@code{% - \let\tikz@options=\pgfutil@empty% - \let\tikz@mode=\pgfutil@empty% - \tikz@every@style{every cell}% - \tikz@every@style{column \the\pgfmatrixcurrentcolumn}% - \ifodd\pgfmatrixcurrentcolumn% - \tikz@every@style{every odd column}% - \else% - \tikz@every@style{every even column}% - \fi% - \tikz@every@style{row \the\pgfmatrixcurrentrow}% - \ifodd\pgfmatrixcurrentrow% - \tikz@every@style{every odd row}% - \else% - \tikz@every@style{every even row}% - \fi% - \tikz@every@style{row \the\pgfmatrixcurrentrow\space column \the\pgfmatrixcurrentcolumn}% - \tikz@options% - }% - \def\pgfmatrixendcode{% - \tikz@atend@cell% - \pgfsys@endscope% - }% - \def\pgfmatrixemptycode{% - \pgfsys@beginscope% - \tikz@common@matrix@code% - \tikz@at@emptycell% - \pgfsys@endscope% - }% - \aftergroup\tikz@do@matrix@cont}% - \bgroup% -} -\def\tikz@do@matrix@cont{% - \endpgfscope - \endpgfinterruptpath% - \egroup\egroup% - \egroup% - % - \tikz@node@finish% -} - -{% - \catcode`\&=13 - \gdef\tikz@matrix@make@active@ampersand{% - \ifx\tikz@ampersand@replacement\pgfutil@empty% - \catcode`\&=13% - \let&=\pgfmatrixnextcell% - \else% - \expandafter\let\tikz@ampersand@replacement=\pgfmatrixnextcell% - \fi% - }% -}% - - -\def\tikz@matrix@split#1.#2\relax{% - \def\tikz@m@anchor{text}% - \def\tikz@matrix@shift{\pgfpointanchor{#1}{#2}}% -} - -\def\tikz@fig@continue{% - \ifx\tikz@text@width\pgfutil@empty% - \else% - \pgfmathsetlength{\pgf@x}{\tikz@text@width}% - \wd\pgfnodeparttextbox=\pgf@x% - \fi% - \ifx\tikz@text@height\pgfutil@empty% - \else% - \pgfmathsetlength{\pgf@x}{\tikz@text@height}% - \ht\pgfnodeparttextbox=\pgf@x% - \fi% - \ifx\tikz@text@depth\pgfutil@empty% - \else% - \pgfmathsetlength{\pgf@x}{\tikz@text@depth}% - \dp\pgfnodeparttextbox=\pgf@x% - \fi% - % - % Node transformation - % - \tikz@node@transformations - % - \setbox\tikz@figbox=\hbox{% - \setbox\pgfutil@tempboxa=\copy\tikz@figbox% - \unhbox\pgfutil@tempboxa% - \hbox{{% - \pgfinterruptpath% - \pgfscope% - \tikz@options% - \setbox\tikz@figbox=\box\voidb@x% - \pgfmultipartnode{\tikz@shape}{\tikz@anchor}{\tikz@fig@name}{% - \pgfutil@tempdima=\pgflinewidth% - {\begingroup\tikz@finish}% - \global\pgflinewidth=\pgfutil@tempdima% - }% - \endpgfscope - \endpgfinterruptpath% - }}% - }% - % - \tikz@node@finish% -} - - -\def\tikz@fig@mustbenamed{% - \ifx\tikz@fig@name\pgfutil@empty% - % Assign a dummy name - \global\advance\tikz@fig@count by1\relax - \edef\tikz@fig@name{tikz@f@\the\tikz@fig@count}% - \fi% -} - -\def\tikz@node@transformations{ - % - % Possibly, we are ``online'' - % - \ifx\tikz@time\pgfutil@empty% - \pgftransformshift{\tikz@node@at}% - \iftikz@fullytransformed% - \else% - \pgftransformresetnontranslations% - \fi% - \else% - \tikz@do@auto@anchor% - \tikz@timer% - \fi% - % Invoke local transformations - \tikz@transform% -} - -\def\tikz@node@finish{% - \global\let\tikz@last@fig@name=\tikz@fig@name% - \global\let\tikz@after@node@smuggle=\tikz@after@node% - \global\let\tikz@afternodepathoptions@smuggle=\tikz@afternodepathoptions% - % shift box outside group - \global\setbox\tikz@tempbox=\copy\tikz@figbox% - \endgroup\endgroup% - \setbox\tikz@figbox=\box\tikz@tempbox% - \pgflinewidth=\tikz@save@line@width% - \let\tikz@to@last@fig@name=\tikz@last@fig@name% - \let\tikz@to@use@whom=\tikz@to@use@last@fig@name% - \let\tikzlastnode=\tikz@last@fig@name% - \ifx\tikz@after@node@smuggle\pgfutil@empty% - \else% - \tikz@scan@next@command{\pgfextra{\tikz@afternodepathoptions@smuggle}\tikz@after@node@smuggle}\pgf@stop% - \fi% - \tikz@scan@next@command% -} -\let\tikz@fig@continue@orig=\tikz@fig@continue - - - -% Syntax for parts of nodes: -% node ... {... \nodepart{name} ... \nodepart{name} ...} - -\def\tikz@nodepart#1{% - \tikz@atend@node% - \unskip% - \gdef\tikz@nodepart@name{#1}% - \global\let\tikz@fig@continue=\tikz@nodepart@continue% - \pgfutil@ifnextchar x{\egroup\relax}{\egroup\relax}% gobble spaces -} -\def\tikz@nodepart@continue{% - \global\let\tikz@fig@continue=\tikz@fig@continue@orig% - % Now start new box: - \expandafter\setbox\csname pgfnodepart\tikz@nodepart@name box\endcsname=\hbox% - \bgroup% - \tikz@every@style{every \tikz@nodepart@name\space node part}% - \pgfinterruptpicture% - \tikz@textfont% - \ifx\tikz@text@width\pgfutil@empty% - \else% - \begingroup% - \pgfutil@minipage[t]{\tikz@text@width}% - \tikz@text@action% - \fi% - \bgroup% - \aftergroup\unskip% - \ifx\tikz@textcolor\pgfutil@empty% - \else% - \pgfutil@colorlet{.}{\tikz@textcolor}% - \fi% - \pgfsetcolor{.}% - \setbox\tikz@figbox=\box\voidb@x% - \tikz@uninstallcommands% - \tikz@atbegin@node% - \aftergroup\tikz@fig@collectresetcolor% - \ignorespaces% -} - - -% Auto placement - -\def\tikz@auto@pre{% - \begingroup - \pgfresetnontranslationattimefalse - \pgfslopedattimetrue% - \pgfallowupsidedownattimetrue% - \tikz@timer% - \pgf@x=\pgf@pt@aa pt% - \pgf@y=\pgf@pt@ab pt% - \pgfpointnormalised{}% -} - -\def\tikz@auto@post{% - \global\let\tikz@anchor@smuggle=\tikz@anchor% - \endgroup% - \let\tikz@anchor=\tikz@anchor@smuggle% -} - -\def\tikz@auto@anchor{% - \ifdim\pgf@x>0.05pt% - \ifdim\pgf@y>0.05pt% - \def\tikz@anchor{south east}% - \else\ifdim\pgf@y<-0.05pt% - \def\tikz@anchor{south west}% - \else - \def\tikz@anchor{south}% - \fi\fi% - \else\ifdim\pgf@x<-0.05pt% - \ifdim\pgf@y>0.05pt% - \def\tikz@anchor{north east}% - \else\ifdim\pgf@y<-0.05pt% - \def\tikz@anchor{north west}% - \else - \def\tikz@anchor{north}% - \fi\fi% - \else% - \ifdim\pgf@y>0pt% - \def\tikz@anchor{east}% - \else% - \def\tikz@anchor{west}% - \fi% - \fi\fi% -} - -\def\tikz@auto@anchor@prime{% - \ifdim\pgf@x>0.05pt% - \ifdim\pgf@y>0.05pt% - \def\tikz@anchor{north west}% - \else\ifdim\pgf@y<-0.05pt% - \def\tikz@anchor{north east}% - \else - \def\tikz@anchor{north}% - \fi\fi% - \else\ifdim\pgf@x<-0.05pt% - \ifdim\pgf@y>0.05pt% - \def\tikz@anchor{south west}% - \else\ifdim\pgf@y<-0.05pt% - \def\tikz@anchor{south east}% - \else - \def\tikz@anchor{south}% - \fi\fi% - \else% - \ifdim\pgf@y>0pt% - \def\tikz@anchor{west}% - \else% - \def\tikz@anchor{east}% - \fi% - \fi\fi% -} - - - - -% Syntax for trees: -% node {...} child [options] {...} child [options] {...} ... -% node {...} child [options] foreach \var in {list} [options] {...} ... - -\def\tikz@children{% - % Start collecting the children: - \let\tikz@children@list=\pgfutil@empty% - \tikznumberofchildren=0\relax% - \tikz@collect@children c} - -\def\tikz@collect@children{\pgfutil@ifnextchar c{\tikz@collect@children@cchar}{\tikz@children@collected}} -\def\tikz@collect@children@cchar c{\pgfutil@ifnextchar h{\tikz@collect@child}{\tikz@children@collected c}} -\def\tikz@collect@child hild{\pgfutil@ifnextchar[{\tikz@collect@childA}{\tikz@collect@childA[]}}%} -\def\tikz@collect@childA[#1]{\pgfutil@ifnextchar f{\tikz@collect@children@foreach[#1]}{\tikz@collect@childB[#1]}} -\def\tikz@collect@childB[#1]{% - \advance\tikznumberofchildren by1\relax - \expandafter\def\expandafter\tikz@children@list\expandafter{\tikz@children@list \tikz@childnode[#1]}% - \pgfutil@ifnextchar\bgroup{\tikz@collect@child@code}{\tikz@collect@child@code{}}} -\def\tikz@collect@child@code#1{% - \expandafter\def\expandafter\tikz@children@list\expandafter{\tikz@children@list{#1}}% - \tikz@collect@children% -} -\def\tikz@collect@children@foreach[#1]foreach#2in#3{% - \pgfutil@ifnextchar\bgroup{\tikz@collect@children@foreachA{#1}{#2}{#3}}{\tikz@collect@children@foreachA{#1}{#2}{#3}{}}} -\def\tikz@collect@children@foreachA#1#2#3#4{% - \expandafter\def\expandafter\tikz@children@list\expandafter - {\tikz@children@list\tikz@childrennodes[#1]{#2}{#3}{#4}}% - \c@pgf@counta=\tikznumberofchildren% - \foreach#2in{#3}% - {% - \global\advance\c@pgf@counta by1\relax% - }% - \tikznumberofchildren=\c@pgf@counta% - \tikz@collect@children% -} -\long\def\tikz@children@collected{% - \begingroup% - \advance\tikztreelevel by 1\relax% - \let\tikz@options=\pgfutil@empty% - \let\tikz@transform=\pgfutil@empty% - \tikz@every@style{level \the\tikztreelevel}% - \tikz@transform% - \let\tikzparentnode=\tikz@last@fig@name% - % Transform to center of node - \pgftransformshift{\pgfpointanchor{\tikzparentnode}{\tikz@growth@anchor}}% - \tikznumberofcurrentchild=0\relax% - \tikz@children@list% - \global\setbox\tikz@tempbox=\copy\tikz@figbox% - \endgroup% - \setbox\tikz@figbox=\box\tikz@tempbox% - \tikz@scan@next@command% -} - - -% Syntax for children: -% -% child [all children options] foreach \var in {values} [child options] {...} -\def\tikz@childrennodes[#1]#2#3#4{% - \c@pgf@counta=\tikznumberofcurrentchild\relax% - \setbox\tikz@tempbox=\box\tikz@figbox% - \foreach#2in{#3}{% - \tikznumberofcurrentchild=\c@pgf@counta\relax% - \setbox\tikz@figbox=\box\tikz@tempbox% - \tikz@childnode[#1]{#4}% - % we must now make the current child number and the figbox survive - % the group - \global\c@pgf@counta=\tikznumberofcurrentchild\relax% - \global\setbox\tikz@tempbox=\box\tikz@figbox% - }% - \tikznumberofcurrentchild=\c@pgf@counta\relax% - \setbox\tikz@figbox=\box\tikz@tempbox% -} - - -% Syntax for child: -% -% child -% -% child[options] -% -% child[options] {node (name) {child node text} ... -% edge from parent[options] node {label text} node {label text}} - -\def\tikz@childnode[#1]#2{% - \advance\tikznumberofcurrentchild by1\relax% - \setbox\tikz@figbox=\hbox\bgroup% - \unhbox\tikz@figbox% - \hbox\bgroup\bgroup% - \pgfinterruptpath% - \pgfscope% - \let\tikz@transform=\pgfutil@empty% - \tikz@every@style{every child}% - \tikz@setkeys{#1}% - \tikz@options% - \tikz@transform% - \tikz@grow% - % Typeset node: - \edef\tikz@parent@node@name{[name=\tikzparentnode-\the\tikznumberofcurrentchild,style=every child node]}% - \def\tikz@child@node@text{[shape=coordinate]{}} - \tikz@parse@child@node#2\pgf@stop% - \expandafter\expandafter\expandafter\node - \expandafter\tikz@parent@node@name - \tikz@child@node@text - \pgfextra{\global\let\tikz@childnode@name=\tikz@last@fig@name};% - \let\tikzchildnode=\tikz@childnode@name% - {% - \def\tikz@edge@to@parent@needed{edge from parent} - \ifx\tikz@child@node@rest\pgfutil@empty% - \path edge from parent;% - \else% - \path (0,0) \tikz@child@node@rest \tikz@edge@to@parent@needed;% - \fi% - }% - \endpgfscope% - \endpgfinterruptpath% - \egroup\egroup% - \egroup% -} - -\def\tikz@parse@child@node{% - \pgfutil@ifnextchar n{\tikz@parse@child@node@n}% - {\pgfutil@ifnextchar c{\tikz@parse@child@node@c}% - {\tikz@parse@child@node@rest}}} -\def\tikz@parse@child@node@rest#1\pgf@stop{\def\tikz@child@node@rest{#1}} -\def\tikz@parse@child@node@c c{\pgfutil@ifnextchar o{\tikz@parse@child@node@co}{\tikz@parse@child@node@rest c}} -\def\tikz@parse@child@node@co o{\pgfutil@ifnextchar o{\tikz@parse@child@node@coordinate}{\tikz@parse@child@node@rest co}} -\def\tikz@parse@child@node@coordinate ordinate{% - \pgfutil@ifnextchar ({\tikz@@parse@child@node@coordinate}{% - \def\tikz@child@node@text{[shape=coordinate]{}}% - \tikz@parse@child@node@rest}}%} -\def\tikz@@parse@child@node@coordinate(#1){% - \pgfutil@ifnextchar a{\tikz@p@c@n@c@at(#1)}{% - \def\tikz@child@node@text{[shape=coordinate,name=#1]{}}% - \tikz@parse@child@node@rest}} -\def\tikz@p@c@n@c@at(#1)at#2(#3){% - \def\tikz@child@node@text{[shape=coordinate,name=#1]at(#3){}}% - \tikz@parse@child@node@rest}% -\def\tikz@parse@child@node@n node{% - \let\tikz@child@node@text=\pgfutil@empty% - \tikz@p@c@s}% -\def\tikz@p@c@s{% - \pgfutil@ifnextchar a{\tikz@p@c@s@at} - {\pgfutil@ifnextchar ({\tikz@p@c@s@paran} - {\pgfutil@ifnextchar [{\tikz@p@c@s@bra} - {\pgfutil@ifnextchar \bgroup{\tikz@p@c@s@group} - {\PackageError{tikz}{Cannot parse this node}{}}}}}}%}} -\def\tikz@p@c@s@at at#1(#2){% - \expandafter\def\expandafter\tikz@child@node@text\expandafter{\tikz@child@node@text at(#2)} - \tikz@p@c@s} -\def\tikz@p@c@s@paran(#1){% - \expandafter\def\expandafter\tikz@child@node@text\expandafter{\tikz@child@node@text(#1)} - \tikz@p@c@s} -\def\tikz@p@c@s@bra[#1]{% - \expandafter\def\expandafter\tikz@child@node@text\expandafter{\tikz@child@node@text[#1]} - \tikz@p@c@s} -\def\tikz@p@c@s@group#1{% - \expandafter\def\expandafter\tikz@child@node@text\expandafter{\tikz@child@node@text{#1}} - \tikz@parse@child@node@rest} - - -% -% Timers -% - -\def\tikz@timer@line{% - \pgftransformlineattime{\tikz@time}{\tikz@timer@start}{\tikz@timer@end}% -} - -\def\tikz@timer@vhline{% - \ifdim\tikz@time pt<0.5pt% first half - \pgf@process{\tikz@timer@start}% - \pgf@xa=\pgf@x% - \pgf@ya=\pgf@y% - \pgf@process{\tikz@timer@end}% - \pgf@xb=\tikz@time pt% - \pgf@xb=2\pgf@xb% - \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}{\noexpand\tikz@timer@start}{% - \noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@y}}}% - \tikz@marshal% - \else% second half - \pgf@process{\tikz@timer@start}% - \pgf@xa=\pgf@x% - \pgf@ya=\pgf@y% - \pgf@process{\tikz@timer@end}% - \pgf@xb=\tikz@time pt% - \pgf@xb=2\pgf@xb% - \advance\pgf@xb by-1pt% - \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}% - {\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@y}}{\noexpand\tikz@timer@end}}% - \tikz@marshal% - \fi% -} - -\def\tikz@timer@hvline{% - \ifdim\tikz@time pt<0.5pt% first half - \pgf@process{\tikz@timer@start}% - \pgf@xa=\pgf@x% - \pgf@ya=\pgf@y% - \pgf@process{\tikz@timer@end}% - \pgf@xb=\tikz@time pt% - \pgf@xb=2\pgf@xb% - \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}{\noexpand\tikz@timer@start}{% - \noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@ya}}}% - \tikz@marshal% - \else% second half - \pgf@process{\tikz@timer@start}% - \pgf@xa=\pgf@x% - \pgf@ya=\pgf@y% - \pgf@process{\tikz@timer@end}% - \pgf@xb=\tikz@time pt% - \pgf@xb=2\pgf@xb% - \advance\pgf@xb by-1pt% - \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}% - {\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@ya}}{\noexpand\tikz@timer@end}}% - \tikz@marshal% - \fi% -} - -\def\tikz@timer@curve{% - \pgftransformcurveattime{\tikz@time}{\tikz@timer@start}{\tikz@timer@cont@one}{\tikz@timer@cont@two}{\tikz@timer@end}% -} - - - -% -% Coordinate systems -% - -\def\tikzdeclarecoordinatesystem#1#2{% - \expandafter\def\csname tikz@parse@cs@#1\endcsname(##1){% - \pgf@process{% - #2% - % Smuggle outside: - \iftikz@shapeborder% - \global\let\tikz@smuggle@a=\tikz@shapebordertrue% - \else% - \global\let\tikz@smuggle@a=\tikz@shapeborderfalse% - \fi% - \global\let\tikz@smubble@b=\tikz@shapeborder@name% - }% - \tikz@smuggle@a% - \let\tikz@shapeborder@name=\tikz@smubble@b% - \edef\tikz@return@coordinate{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}% -} -\def\tikzaliascoordinatesystem#1#2{% - \edef\pgf@marshal{\noexpand\let\expandafter\noexpand\csname - tikz@parse@cs@#1\endcsname=\expandafter\noexpand\csname - tikz@parse@cs@#2\endcsname}% - \pgf@marshal% -} - - -% Default coodinate systems: - -\tikzdeclarecoordinatesystem{canvas} -{% - \tikz@orig@setkeys{tikzcskeys}{x=0pt,y=0pt,#1}% - \pgfpoint{\tikz@cs@x}{\tikz@cs@y}% -} - -\tikzdeclarecoordinatesystem{canvas polar} -{% - \tikz@orig@setkeys{tikzcskeys}{angle=0,radius=0cm,#1}% - \pgfpointpolar{\tikz@cs@angle}{\tikz@cs@xradius/\tikz@cs@yradius}% -} - -\tikzdeclarecoordinatesystem{xyz} -{% - \tikz@orig@setkeys{tikzcskeys}{x=0,y=0,z=0,#1}% - \pgfpointxyz{\tikz@cs@x}{\tikz@cs@y}{\tikz@cs@z}% -} - -\tikzdeclarecoordinatesystem{xyz polar} -{% - \tikz@orig@setkeys{tikzcskeys}{angle=0,radius=0,#1}% - \pgfpointpolarxy{\tikz@cs@angle}{\tikz@cs@xradius and \tikz@cs@yradius}% -} -\tikzaliascoordinatesystem{xy polar}{xyz polar} - - -\tikzdeclarecoordinatesystem{node} -{% - \tikz@orig@setkeys{tikzcskeys}{name=,anchor=none,angle=none,#1}% - \ifx\tikz@cs@anchor\tikz@nonetext% - \ifx\tikz@cs@angle\tikz@nonetext% - \expandafter\ifx\csname pgf@sh@ns@\tikz@cs@node\endcsname\tikz@coordinate@text% - \else - \tikz@shapebordertrue% - \edef\tikz@shapeborder@name{\tikz@cs@node}% - \fi% - \pgfpointanchor{\tikz@cs@node}{center}% - \else% - \pgfpointanchor{\tikz@cs@node}{\tikz@cs@angle}% - \fi% - \else% - \pgfpointanchor{\tikz@cs@node}{\tikz@cs@anchor}% - \fi% -} - -\tikzdeclarecoordinatesystem{intersection} -{% - \tikz@orig@setkeys{tikzcskeys}{#1}% - \expandafter\tikz@@@scan@@absolute\expandafter\tikz@parse@intersection@a\tikz@cs@line@a@begin% - \expandafter\tikz@@@scan@@absolute\expandafter\tikz@parse@intersection@b\tikz@cs@line@a@end% - \expandafter\tikz@@@scan@@absolute\expandafter\tikz@parse@intersection@c\tikz@cs@line@b@begin% - \expandafter\tikz@@@scan@@absolute\expandafter\tikz@parse@intersection@d\tikz@cs@line@b@end% - \edef\pgf@marshal{% - {\noexpand\pgfpointintersectionoflines% - {\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}% - {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}% - {\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}% - {\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}}% - \pgf@marshal% -} - -\tikzdeclarecoordinatesystem{perpendicular} -{% - \tikz@orig@setkeys{tikzcskeys}{#1}% - \expandafter\tikz@@@scan@@absolute\expandafter\tikz@parse@intersection@a\tikz@cs@hori@line% - \expandafter\tikz@@@scan@@absolute\expandafter\tikz@parse@intersection@b\tikz@cs@vert@line% - \pgfqpoint{\the\pgf@xb}{\the\pgf@ya} -} - -\tikzdeclarecoordinatesystem{barycentric} -{% - {% - \pgf@xa=0pt% point - \pgf@ya=0pt% - \pgf@xb=0pt% sum - \tikz@bary@dolist#1,=,% - \pgfmathparse{1/\the\pgf@xb}% - \global\pgf@x=\pgfmathresult\pgf@xa% - \global\pgf@y=\pgfmathresult\pgf@ya% - }% -} - -\def\tikz@bary@dolist#1=#2,{% - \def\tikz@temp{#1}% - \ifx\tikz@temp\pgfutil@empty% - \else - \pgf@process{\pgfpointanchor{#1}{center}}% - \pgfmathparse{#2}% - \advance\pgf@xa by\pgfmathresult\pgf@x% - \advance\pgf@ya by\pgfmathresult\pgf@y% - \advance\pgf@xb by\pgfmathresult pt% - \expandafter\tikz@bary@dolist% - \fi% -} - - -\tikz@orig@define@key{tikzcskeys}{x}{\def\tikz@cs@x{#1}} -\tikz@orig@define@key{tikzcskeys}{y}{\def\tikz@cs@y{#1}} -\tikz@orig@define@key{tikzcskeys}{z}{\def\tikz@cs@z{#1}} -\tikz@orig@define@key{tikzcskeys}{angle}{\def\tikz@cs@angle{#1}} -\tikz@orig@define@key{tikzcskeys}{radius}{\def\tikz@cs@xradius{#1}\def\tikz@cs@yradius{#1}} -\tikz@orig@define@key{tikzcskeys}{x radius}{\def\tikz@cs@xradius{#1}} -\tikz@orig@define@key{tikzcskeys}{y radius}{\def\tikz@cs@yradius{#1}} -\tikz@orig@define@key{tikzcskeys}{name}{\def\tikz@cs@node{#1}} -\tikz@orig@define@key{tikzcskeys}{anchor}{\def\tikz@cs@anchor{#1}} - -\tikz@orig@define@key{tikzcskeys}{first line}{\tikz@parse@cs@line{tikz@cs@line@a}#1} -\tikz@orig@define@key{tikzcskeys}{second line}{\tikz@parse@cs@line{tikz@cs@line@b}#1} - -\def\tikz@parse@cs@line#1(#2)--(#3){% - \expandafter\def\csname #1@begin\endcsname{(#2)}% - \expandafter\def\csname #1@end\endcsname{(#3)}% -} - -\tikz@orig@define@key{tikzcskeys}{horizontal line through}{\def\tikz@cs@hori@line{#1}} -\tikz@orig@define@key{tikzcskeys}{vertical line through}{\def\tikz@cs@vert@line{#1}} - - - - -% -% Coordinate management -% - - -% Last position visited -\def\tikz@last@position{\pgfqpoint{\tikz@lastx}{\tikz@lasty}} -\def\tikz@last@position@saved{\pgfqpoint{\tikz@lastxsaved}{\tikz@lastysaved}} - -% Make given point the last position visited -\def\tikz@make@last@position#1{% - \pgf@process{#1}% - \tikz@lastx=\pgf@x\relax% - \tikz@lasty=\pgf@y\relax% - \iftikz@updatecurrent% - \tikz@lastxsaved=\pgf@x\relax% - \tikz@lastysaved=\pgf@y\relax% - \fi% - \tikz@updatecurrenttrue% -} - -\newif\iftikz@updatecurrent -\tikz@updatecurrenttrue - - - -% Scanner: Scans a point or a relative point. -% It then calls the first parameter with the argument set to an -% appropriate pgf command representing that point. - -\def\tikz@scan@one@point#1{% - \let\tikz@to@use@whom=\tikz@to@use@last@coordinate% - \tikz@shapeborderfalse% - \pgfutil@ifnextchar+{\tikz@scan@relative#1}{\tikz@scan@absolute#1}} -\def\tikz@scan@absolute#1{% - \pgfutil@ifnextchar({\tikz@scan@@absolute#1}%) - {% - \advance\tikz@expandcount by -1% - \ifnum\tikz@expandcount<0\relax% - \let\@next=\tikz@@scangiveup% - \else% - \let\@next=\tikz@@scanexpand% - \fi% - \@next{#1}% - }% -} -\def\tikz@@scanexpand#1{\expandafter\tikz@scan@one@point\expandafter#1} -\def\tikz@@scangiveup#1{\PackageError{tikz}{Cannot parse this coordinate}{}#1{\pgfpointorigin}} -\def\tikz@scan@@absolute#1(#2){% - \edef\tikz@temp{(#2)}% - \expandafter\tikz@@scan@@absolute\expandafter#1\tikz@temp% -} -\def\tikz@@scan@@absolute#1({% - \pgfutil@ifnextchar[% uhoh... options! - {\def\tikz@scan@point@recall{#1}\tikz@scan@options}% - {\tikz@@@scan@@absolute#1(}% -} - -\def\tikz@scan@options[#1]#2{% - \def\tikz@scan@point@options{#1}% - \tikz@@@scan@@absolute\tikz@scan@handle@options(#2% -} - -\def\tikz@scan@handle@options#1{% - {% - % Ok, compute point with options set and zero transformation - % matrix: - \pgftransformreset% - \let\tikz@transform=\pgfutil@empty% - \expandafter\tikz@setkeys\expandafter{\tikz@scan@point@options}% - \tikz@transform% - \pgf@process{\pgfpointtransformed{#1}}% - \xdef\tikz@marshal{\expandafter\noexpand\tikz@scan@point@recall{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}% - }% - \tikz@marshal% -} - -\def\tikz@@@scan@@absolute#1(#2){% - \pgfutil@in@{intersection of}{#2}% - \ifpgfutil@in@% - \let\@next\tikz@parse@intersection% - \else% - \pgfutil@in@|{#2}% - \ifpgfutil@in@ - \pgfutil@in@{-|}{#2}% - \ifpgfutil@in@ - \let\@next\tikz@parse@hv% - \else% - \let\@next\tikz@parse@vh% - \fi% - \else% - \pgfutil@in@{cs:}{#2}% - \ifpgfutil@in@% - \let\@next\tikz@parse@coordinatesystem% - \else% - \pgfutil@in@:{#2}% - \ifpgfutil@in@ - \let\@next\tikz@parse@polar% - \else% - \pgfutil@in@,{#2}% - \ifpgfutil@in@% - \let\@next\tikz@parse@regular% - \else% - \let\@next\tikz@parse@node% - \fi% - \fi% - \fi% - \fi% - \fi% - \@next#1(#2)% -} - -\def\tikz@parse@coordinatesystem#1(#2 cs:#3){% - \let\tikz@return@coordinate=\pgfpointorigin% - \pgfutil@ifundefined{tikz@parse@cs@#2} - {\PackageError{tikz}{Unknown coordinate system '#2'}{}} - {\csname tikz@parse@cs@#2\endcsname(#3)}% - \expandafter#1\expandafter{\tikz@return@coordinate}% -} - - -\newif\iftikz@isdimension -\def\tikz@checkunit#1{% - \pgfmathparse{#1}% - \let\iftikz@isdimension=\ifpgfmathunitsdeclared% -} -\def\tikz@@checkunit{\pgfutil@ifnextchar\tikz@unique{\tikz@checkunit@number}{\tikz@checkunit@dimension}} -\def\tikz@checkunit@number\tikz@unique{\tikz@isdimensionfalse} -\def\tikz@checkunit@dimension#1\tikz@unique{\tikz@isdimensiontrue} - -\def\tikz@parse@polar#1(#2:#3){% - \pgfutil@ifundefined{tikz@polar@dir@#2} - {\tikz@@parse@polar#1(#2:#3)} - {\tikz@@parse@polar#1(\csname tikz@polar@dir@#2\endcsname:#3)}% -} -\def\tikz@@parse@polar#1(#2:#3){% - \pgfutil@in@{ and }{#3}% - \ifpgfutil@in@% - \edef\tikz@args{(#2:#3)}% - \else% - \edef\tikz@args{(#2:#3 and #3)}% - \fi% - \expandafter\tikz@@@parse@polar\expandafter#1\tikz@args% -} -\def\tikz@@@parse@polar#1(#2:#3 and #4){% - \tikz@checkunit{#3}% - \iftikz@isdimension% - \def\tikz@next{#1{\pgfpointpolar{#2}{#3 and #4}}}% - \else% - \def\tikz@next{#1{\pgfpointpolarxy{#2}{#3 and #4}}}% - \fi% - \tikz@next% -} -\def\tikz@polar@dir@up{90} -\def\tikz@polar@dir@down{-90} -\def\tikz@polar@dir@left{180} -\def\tikz@polar@dir@right{0} -\def\tikz@polar@dir@north{90} -\def\tikz@polar@dir@south{-90} -\def\tikz@polar@dir@east{0} -\def\tikz@polar@dir@west{180} -\expandafter\def\csname tikz@polar@dir@north east\endcsname{45} -\expandafter\def\csname tikz@polar@dir@north west\endcsname{135} -\expandafter\def\csname tikz@polar@dir@south east\endcsname{-45} -\expandafter\def\csname tikz@polar@dir@south west\endcsname{-135} - -\def\tikz@parse@regular#1(#2,#3){% - \pgfutil@in@,{#3}% - \ifpgfutil@in@% - \tikz@parse@splitxyz{#1}{#2}#3,% - \else% - \tikz@checkunit{#2}% - \iftikz@isdimension% - \def\@next{#1{\pgfpoint{#2}{#3}}}% - \else% - \def\@next{#1{\pgfpointxy{#2}{#3}}}% - \fi% - \fi% - \@next% -} - -\def\tikz@parse@splitxyz#1#2#3,#4,{% - \def\@next{#1{\pgfpointxyz{#2}{#3}{#4}}}% -} - -\def\tikz@coordinate@text{coordinate} - -\def\tikz@parse@node#1(#2){% - \pgfutil@in@.{#2}% Ok, flag this - \ifpgfutil@in@ - \tikz@calc@anchor#2\tikz@stop% - \else% - \tikz@calc@anchor#2.center\tikz@stop% to be on the save side, in - % case iftikz@shapeborder is ignored... - \expandafter\ifx\csname pgf@sh@ns@#2\endcsname\tikz@coordinate@text% - \else - \tikz@shapebordertrue% - \def\tikz@shapeborder@name{#2}% - \fi% - \fi% - \edef\tikz@marshal{\noexpand#1{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}% - \tikz@marshal% -} - -\def\tikz@calc@anchor#1.#2\tikz@stop{% - \pgfpointanchor{#1}{#2}% -} - - -\def\tikz@parse@hv#1(#2){% - \pgfutil@in@{ -| }{#2}% - \ifpgfutil@in@% - \let\tikz@next=\tikz@parse@hvboth% - \else% - \pgfutil@in@{ -|}{#2}% - \ifpgfutil@in@% - \let\tikz@next=\tikz@parse@hvleft% - \else% - \pgfutil@in@{-| }{#2}% - \ifpgfutil@in@% - \let\tikz@next=\tikz@parse@hvright% - \else% - \let\tikz@next=\tikz@parse@hvdone% - \fi% - \fi% - \fi% - \tikz@next#1(#2)} -\def\tikz@parse@hvboth#1(#2 -| #3){\tikz@parse@vhdone#1(#3|-#2)} -\def\tikz@parse@hvleft#1(#2 -|#3){\tikz@parse@vhdone#1(#3|-#2)} -\def\tikz@parse@hvright#1(#2-| #3){\tikz@parse@vhdone#1(#3|-#2)} -\def\tikz@parse@hvdone#1(#2-|#3){\tikz@parse@vhdone#1(#3|-#2)} - -\def\tikz@parse@vh#1(#2){% - \pgfutil@in@{ |- }{#2}% - \ifpgfutil@in@% - \let\tikz@next=\tikz@parse@vhboth% - \else% - \pgfutil@in@{ |-}{#2}% - \ifpgfutil@in@% - \let\tikz@next=\tikz@parse@vhleft% - \else% - \pgfutil@in@{|- }{#2}% - \ifpgfutil@in@% - \let\tikz@next=\tikz@parse@vhright% - \else% - \let\tikz@next=\tikz@parse@vhdone% - \fi% - \fi% - \fi% - \tikz@next#1(#2)} -\def\tikz@parse@vhboth#1(#2 |- #3){\tikz@parse@vhdone#1(#2|-#3)} -\def\tikz@parse@vhleft#1(#2 |-#3){\tikz@parse@vhdone#1(#2|-#3)} -\def\tikz@parse@vhright#1(#2|- #3){\tikz@parse@vhdone#1(#2|-#3)} -\def\tikz@parse@vhdone#1(#2|-#3){% - {% - \tikz@@@scan@@absolute\tikz@parse@vh@mid(#2)% - \tikz@@@scan@@absolute\tikz@parse@vh@end(#3)% - \xdef\tikz@marshal{\noexpand#1{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}}% - }% - \tikz@shapeborderfalse% - \tikz@marshal% -} -\def\tikz@parse@vh@mid#1{\pgf@process{#1}\pgf@xa=\pgf@x} -\def\tikz@parse@vh@end#1{\pgf@process{#1}\pgf@ya=\pgf@y} - -\def\tikz@parse@intersection#1(intersection of #2--#3 and #4--#5){% - {% - \tikz@@@scan@@absolute\tikz@parse@intersection@a(#2)% - \tikz@@@scan@@absolute\tikz@parse@intersection@b(#3)% - \tikz@@@scan@@absolute\tikz@parse@intersection@c(#4)% - \tikz@@@scan@@absolute\tikz@parse@intersection@d(#5)% - \xdef\tikz@marshal{\noexpand#1{\noexpand\pgfpointintersectionoflines% - {\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}% - {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}% - {\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}% - {\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}}% - }% - \tikz@shapeborderfalse% - \tikz@marshal% -} - -\def\tikz@parse@intersection@a#1{\pgf@process{#1}\pgf@xa=\pgf@x\pgf@ya=\pgf@y} -\def\tikz@parse@intersection@b#1{\pgf@process{#1}\pgf@xb=\pgf@x\pgf@yb=\pgf@y} -\def\tikz@parse@intersection@c#1{\pgf@process{#1}\pgf@xc=\pgf@x\pgf@yc=\pgf@y} -\def\tikz@parse@intersection@d#1{\pgf@process{#1}} - -\def\tikz@scan@relative#1+{% - \pgfutil@ifnextchar+{\tikz@scan@plusplus#1}{\tikz@scan@oneplus#1}} - -\def\tikz@scan@plusplus#1+{% - \def\tikz@doafter{#1}% - \tikz@scan@absolute\tikz@add% -} -\def\tikz@add#1{% - \tikz@doafter{\pgfpointadd{#1}{\tikz@last@position@saved}}% -} -\def\tikz@scan@oneplus#1{% - \def\tikz@doafter{#1}% - \tikz@updatecurrentfalse% - \tikz@scan@absolute\tikz@add% -} - - - -% Loading further libraries - -% Include a library file. -% -% #1 = List of names of library file. -% -% Description: -% -% This command includes a list of TikZ library files. For each file X in the -% list, the file pgflibrarytikzX.code.tex is included, provided this has -% not been done earlier. -% -% For the convenience of Context users, both round and square brackets -% are possible for the argument. -% -% Example: -% -% \usetikzlibrary{arrows} -% \usetikzlibrary[patterns,topaths] - -\def\usetikzlibrary{\pgfutil@ifnextchar[{\use@tikzlibrary}{\use@@tikzlibrary}}%} -\def\use@tikzlibrary[#1]{\use@@tikzlibrary{#1}} -\def\use@@tikzlibrary#1{% - \edef\pgf@list{#1}% - \pgfutil@for\pgf@temp:=\pgf@list\do{% - \expandafter\ifx\csname tikz@library@\pgf@temp @loaded\endcsname\relax% - \expandafter\global\expandafter\let\csname tikz@library@\pgf@temp @loaded\endcsname=\pgfutil@empty% - \expandafter\edef\csname tikz@library@#1@atcode\endcsname{\the\catcode`\@} - \expandafter\edef\csname tikz@library@#1@barcode\endcsname{\the\catcode`\|} - \catcode`\@=11 - \catcode`\|=12 - \input pgflibrarytikz\pgf@temp.code.tex - \catcode`\@=\csname tikz@library@#1@atcode\endcsname - \catcode`\|=\csname tikz@library@#1@barcode\endcsname - \fi% - }% -} - - -% Always-present libraries: - -\usetikzlibrary{topaths} - - - - -\endinput |