% 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 Free Documentation License.
%
% See the file doc/generic/pgf/licenses/LICENSE for more details.

% $Header: /cvsroot/pgf/pgf/doc/generic/pgf/macros/pgfmanual-en-macros.tex,v 1.45 2009/11/15 13:13:24 ludewich Exp $



\providecommand\href[2]{\texttt{#1}}
\providecommand\hypertarget[2]{\texttt{#1}}
\providecommand\hyperlink[2]{\texttt{#1}}


\colorlet{examplefill}{yellow!80!black}
\definecolor{graphicbackground}{rgb}{0.96,0.96,0.8}
\definecolor{codebackground}{rgb}{0.8,0.8,1}

\newenvironment{pgfmanualentry}{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}}{\endlist}
\newcommand\pgfmanualentryheadline[1]{\itemsep=0pt\parskip=0pt\item\strut{#1}\par\topsep=0pt}
\newcommand\pgfmanualbody{\parskip3pt}



\newenvironment{pgflayout}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{\texttt{\string\pgfpagesuselayout\char`\{\declare{#1}\char`\}}\oarg{options}}
   \index{#1@\protect\texttt{#1} layout}%
   \index{Page layouts!#1@\protect\texttt{#1}}%
   \pgfmanualpdflabel{#1}{}%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}


\newenvironment{command}[1]{
 \begin{pgfmanualentry}
   \extractcommand#1\@@
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\newenvironment{commandlist}[1]{%
       \begin{pgfmanualentry}
       \foreach \xx in {#1} {%
               \expandafter\extractcommand\xx\@@
       }%
       \pgfmanualbody
}{%
 \end{pgfmanualentry}
}%

% \begin{internallist}[register]{\pgf@xa}
% \end{internallist}
%
% \begin{internallist}[register]{\pgf@xa,\pgf@xb}
% \end{internallist}
\newenvironment{internallist}[2][register]{%
       \begin{pgfmanualentry}
       \foreach \xx in {#2} {%
               \expandafter\extractinternalcommand\expandafter{\xx}{#1}%
       }%
       \pgfmanualbody
}{%
 \end{pgfmanualentry}
}%
\def\extractinternalcommand#1#2{%
 \pgfmanualentryheadline{Internal #2 \declare{\texttt{\string#1}}}%
 \removeats{#1}%
 \index{Internals!\strippedat @\protect\myprintocmmand{\strippedat}}%
 \index{\strippedat @\protect\myprintocmmand{\strippedat}}%
 \pgfmanualpdflabel{\textbackslash\strippedat}{}%
}

%% MW: START MATH MACROS
\def\mvar#1{{\ifmmode\textrm{\textit{#1}}\else\rmfamily\textit{#1}\fi}}

\makeatletter

\def\extractmathfunctionname#1{\extractmathfunctionname@#1(,)\tmpa\tmpb}
\def\extractmathfunctionname@#1(#2)#3\tmpb{\def\mathname{#1}}

\makeatother

\newenvironment{math-function}[1]{
       \def\mathdefaultname{#1}
       \extractmathfunctionname{#1}
       \edef\mathurl{{math:\mathname}}\expandafter\hypertarget\expandafter{\mathurl}{}%
       \begin{pgfmanualentry}
               \pgfmanualentryheadline{\texttt{#1}}%
               \index{\mathname @\protect\texttt{\mathname} math function}%
               \index{Math functions!\mathname @\protect\texttt{\mathname}}%
               \pgfmanualbody
}
{
       \end{pgfmanualentry}
}

\def\pgfmanualemptytext{}
\def\pgfmanualvbarvbar{\char`\|\char`\|}

\newenvironment{math-operator}[4][]{%
       \begin{pgfmanualentry}
       \csname math#3operator\endcsname{#2}{#4}
       \def\mathtest{#4}%
       \ifx\mathtest\pgfmanualemptytext%
               \def\mathtype{(#3 operator)}
       \else%
               \def\mathtype{(#3 operator; uses the \texttt{#4} function)}
       \fi%
       \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
       \def\mathtest{#1}%
       \ifx\mathtest\pgfmanualemptytext%
               \index{#2@\protect\texttt{#2} #3 math operator}%
               \index{Math operators!#2@\protect\texttt{#2}}%
       \fi%
       \pgfmanualbody
}
{\end{pgfmanualentry}}

\newenvironment{math-operators}[5][]{%
       \begin{pgfmanualentry}
       \csname math#4operator\endcsname{#2}{#3}
       \def\mathtest{#5}%
       \ifx\mathtest\pgfmanualemptytext%
               \def\mathtype{(#4 operators)}
       \else%
               \def\mathtype{(#4 operators; use the \texttt{#5} function)}
       \fi%
       \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
       \def\mathtest{#1}%
       \ifx\mathtest\pgfmanualemptytext%
               \index{#2#3@\protect\texttt{#2\protect\ #3} #4 math operators}%
               \index{Math operators!#2#3@\protect\texttt{#2\protect\ #3}}%
       \fi%
       \pgfmanualbody
}
{\end{pgfmanualentry}}

\def\mathinfixoperator#1#2{%
       \def\mathoperator{\texttt{#1}}%
       \def\mathexample{\mvar{x}\space\texttt{#1}\space\mvar{y}}%
}

\def\mathprefixoperator#1#2{%
       \def\mathoperator{\texttt{#1}}%
       \def\mathexample{\texttt{#1}\mvar{x}}%
}

\def\mathpostfixoperator#1#2{%
       \def\mathoperator{\texttt{#1}}
       \def\mathexample{\mvar{x}\texttt{#1}}%
}

\def\mathgroupoperator#1#2{%
       \def\mathoperator{\texttt{#1\ #2}}%
       \def\mathexample{\texttt{#1}\mvar{x}\texttt{#2}}%
}

\expandafter\let\csname matharray accessoperator\endcsname=\mathgroupoperator
\expandafter\let\csname matharrayoperator\endcsname=\mathgroupoperator

\def\mathconditionaloperator#1#2{%
       \def\mathoperator{#1\space#2}
       \def\mathexample{\mvar{x}\ \texttt{#1}\ \mvar{y}\ {\texttt{#2}}\ \mvar{z}}
}

\newcommand\mathcommand[1][\mathdefaultname]{%
       \expandafter\makemathcommand#1(\empty)\stop%
       \expandafter\extractcommand\mathcommandname\@@%
       \medskip
}
\makeatletter

\def\makemathcommand#1(#2)#3\stop{%
       \expandafter\def\expandafter\mathcommandname\expandafter{\csname pgfmath#1\endcsname}%
       \ifx#2\empty%
       \else%
               \@makemathcommand#2,\stop,
       \fi}
\def\@makemathcommand#1,{%
       \ifx#1\stop%
       \else%
               \expandafter\def\expandafter\mathcommandname\expandafter{\mathcommandname{\ttfamily\char`\{#1\char`\}}}%
               \expandafter\@makemathcommand%
       \fi}
\makeatother

\def\calcname{\textsc{calc}}
%% MW: END MATH MACROS


\def\extractcommand#1#2\@@{%
 \pgfmanualentryheadline{\declare{\texttt{\string#1}}#2}%
 \removeats{#1}%
 \index{\strippedat @\protect\myprintocmmand{\strippedat}}
 \pgfmanualpdflabel{\textbackslash\strippedat}{}%
}


% \begin{environment}{{name}\marg{arguments}}
\renewenvironment{environment}[1]{
 \begin{pgfmanualentry}
   \extractenvironement#1\@@
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\def\extractenvironement#1#2\@@{%
 \pgfmanualentryheadline{{\ttfamily\char`\\begin\char`\{\declare{#1}\char`\}}#2}%
 \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
 \pgfmanualentryheadline{{\ttfamily\char`\\end\char`\{\declare{#1}\char`\}}}%
 \index{#1@\protect\texttt{#1} environment}%
 \index{Environments!#1@\protect\texttt{#1}}
 \pgfmanualpdflabel{#1}{}%
}


\newenvironment{plainenvironment}[1]{
 \begin{pgfmanualentry}
   \extractplainenvironement#1\@@
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\def\extractplainenvironement#1#2\@@{%
 \pgfmanualentryheadline{{\ttfamily\declare{\char`\\#1}}#2}%
 \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
 \pgfmanualentryheadline{{\ttfamily\declare{\char`\\end#1}}}%
 \index{#1@\protect\texttt{#1} environment}%
 \index{Environments!#1@\protect\texttt{#1}}%
}


\newenvironment{contextenvironment}[1]{
 \begin{pgfmanualentry}
   \extractcontextenvironement#1\@@
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\def\extractcontextenvironement#1#2\@@{%
 \pgfmanualentryheadline{{\ttfamily\declare{\char`\\start#1}}#2}%
 \pgfmanualentryheadline{{\ttfamily\ \ }\meta{environment contents}}%
 \pgfmanualentryheadline{{\ttfamily\declare{\char`\\stop#1}}}%
 \index{#1@\protect\texttt{#1} environment}%
 \index{Environments!#1@\protect\texttt{#1}}}


\newenvironment{shape}[1]{
 \begin{pgfmanualentry}
       \pgfmanualentryheadline{Shape {\ttfamily\declare{#1}}}%
   \index{#1@\protect\texttt{#1} shape}%
   \index{Shapes!#1@\protect\texttt{#1}}
   \pgfmanualpdflabel{#1}{}%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\newenvironment{shading}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{Shading {\ttfamily\declare{#1}}}%
   \index{#1@\protect\texttt{#1} shading}%
   \index{Shadings!#1@\protect\texttt{#1}}
       \pgfmanualpdflabel{#1}{}%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}


\newenvironment{dataformat}[1]{
 \begin{pgfmanualentry}
       \pgfmanualentryheadline{Format {\ttfamily\declare{#1}}}%
   \index{#1@\protect\texttt{#1} format}%
   \index{Formats!#1@\protect\texttt{#1}}
       \pgfmanualpdflabel{#1}{}%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\newenvironment{handler}[1]{
 \begin{pgfmanualentry}
   \extracthandler#1\@nil%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\def\gobble#1{}
\def\extracthandler#1#2\@nil{%
 \pgfmanualentryheadline{Key handler \meta{key}{\ttfamily/\declare{#1}}#2}%
 \index{\gobble#1@\protect\texttt{#1} handler}%
 \index{Key handlers!#1@\protect\texttt{#1}}
 \pgfmanualpdflabel{/handlers/#1}%
}


\makeatletter


\newenvironment{stylekey}[1]{
 \begin{pgfmanualentry}
   \def\extrakeytext{style, }
   \extractkey#1\@nil%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\def\choicesep{$\vert$}%
\def\choicearg#1{\texttt{#1}}

\newif\iffirstchoice

% \mchoice{choice1,choice2,choice3}
\newcommand\mchoice[1]{%
       \begingroup
       \firstchoicetrue
       \foreach \mchoice@ in {#1} {%
               \iffirstchoice
                       \global\firstchoicefalse
               \else
                       \choicesep
               \fi
               \choicearg{\mchoice@}%
       }%
       \endgroup
}%

% \begin{key}{/path/x=value}
% \begin{key}{/path/x=value (initially XXX)}
% \begin{key}{/path/x=value (default XXX)}
\newenvironment{key}[1]{
 \begin{pgfmanualentry}
   \def\extrakeytext{}
   %\def\altpath{\emph{\color{gray}or}}%
   \extractkey#1\@nil%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

% \insertpathifneeded{a key}{/pgf} -> assign mykey={/pgf/a key}
% \insertpathifneeded{/tikz/a key}{/pgf} -> assign mykey={/tikz/a key}
%
% #1: the key
% #2: a default path (or empty)
\def\insertpathifneeded#1#2{%
       \def\insertpathifneeded@@{#2}%
       \ifx\insertpathifneeded@@\empty
               \def\mykey{#1}%
       \else
               \insertpathifneeded@#2\@nil
               \ifpgfutil@in@
                       \def\mykey{#2/#1}%
               \else
                       \def\mykey{#1}%
               \fi
       \fi
}%
\def\insertpathifneeded@#1#2\@nil{%
       \def\insertpathifneeded@@{#1}%
       \def\insertpathifneeded@@@{/}%
       \ifx\insertpathifneeded@@\insertpathifneeded@@@
               \pgfutil@in@true
       \else
               \pgfutil@in@false
       \fi
}%

% \begin{keylist}[default path]
%       {/path/option 1=value,/path/option 2=value2}
% \end{keylist}
\newenvironment{keylist}[2][]{%
       \begin{pgfmanualentry}
   \def\extrakeytext{}%
       \foreach \xx in {#2} {%
               \expandafter\insertpathifneeded\expandafter{\xx}{#1}%
               \expandafter\extractkey\mykey\@nil%
       }%
       \pgfmanualbody
}{%
 \end{pgfmanualentry}
}%

\def\extractkey#1\@nil{%
 \pgfutil@in@={#1}%
 \ifpgfutil@in@%
   \extractkeyequal#1\@nil
 \else%
   \pgfutil@in@{(initial}{#1}%
   \ifpgfutil@in@%
     \extractequalinitial#1\@nil%
   \else
     \pgfmanualentryheadline{{\ttfamily\declare{#1}}\hfill(\extrakeytext no value)}%
     \def\mykey{#1}%
     \def\mypath{}%
     \def\myname{}%
     \firsttimetrue%
     \decompose#1/\nil%
   \fi
 \fi%
}

\def\extractkeyequal#1=#2\@nil{%
 \pgfutil@in@{(default}{#2}%
 \ifpgfutil@in@%
   \extractdefault{#1}#2\@nil%
 \else%
   \pgfutil@in@{(initial}{#2}%
   \ifpgfutil@in@%
     \extractinitial{#1}#2\@nil%
   \else
     \pgfmanualentryheadline{{\ttfamily\declare{#1}=}#2\hfill(\extrakeytext no default)}%
   \fi%
 \fi%
 \def\mykey{#1}%
 \def\mypath{}%
 \def\myname{}%
 \firsttimetrue%
 \decompose#1/\nil%
}

\def\extractdefault#1#2(default #3)\@nil{%
 \pgfmanualentryheadline{{\ttfamily\declare{#1}\opt{=}}\opt{#2}\hfill (\extrakeytext default {\ttfamily#3})}%
}

\def\extractinitial#1#2(initially #3)\@nil{%
 \pgfmanualentryheadline{{\ttfamily\declare{#1}=}#2\hfill (\extrakeytext no default, initially {\ttfamily#3})}%
}

\def\extractequalinitial#1 (initially #2)\@nil{%
 \pgfmanualentryheadline{{\ttfamily\declare{#1}}\hfill (\extrakeytext initially {\ttfamily#2})}%
 \def\mykey{#1}%
 \def\mypath{}%
 \def\myname{}%
 \firsttimetrue%
 \decompose#1/\nil%
}

% Introduces a key alias '/#1/<name of current key>'
% to be used inside of \begin{key} ... \end{key}
\def\keyalias#1{\vspace{-3pt}\item{\small alias {\ttfamily/#1/\myname}}\vspace{-2pt}\par
 \pgfmanualpdflabel{/#1/\myname}{}%
}

\newif\iffirsttime

\makeatother

\def\decompose/#1/#2\nil{%
 \def\test{#2}%
 \ifx\test\empty%
   % aha.
   \index{#1@\protect\texttt{#1} key}%
   \index{\mypath#1@\protect\texttt{#1}}%
   \def\myname{#1}%
 \else%
   \iffirsttime
     \begingroup
       % also make a pdf link anchor with full key path.
       \def\hyperlabelwithoutslash##1/\nil{%
         \pgfmanualpdflabel{##1}{}%
       }%
       \hyperlabelwithoutslash/#1/#2\nil
     \endgroup
     \def\mypath{#1@\protect\texttt{/#1/}!}%
     \firsttimefalse
   \else
     \expandafter\def\expandafter\mypath\expandafter{\mypath#1@\protect\texttt{#1/}!}%
   \fi
   \def\firsttime{}
   \decompose/#2\nil%
 \fi%
}

\def\indexkey#1{%
 \def\mypath{}%
 \decompose#1/\nil%
}

\newenvironment{predefinedmethod}[1]{
 \begin{pgfmanualentry}
   \extractpredefinedmethod#1\@nil
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}
\def\extractpredefinedmethod#1(#2)\@nil{%
 \pgfmanualentryheadline{Method \declare{\ttfamily #1}\texttt(#2\texttt) \hfill(predefined for all classes)}
 \index{#1@\protect\texttt{#1} method}%
 \index{Methods!#1@\protect\texttt{#1}}
       \pgfmanualpdflabel{#1}{}%
}


\newenvironment{ooclass}[1]{
 \begin{pgfmanualentry}
   \def\currentclass{#1}
   \pgfmanualentryheadline{Class \declare{\texttt{#1}}}
   \index{#1@\protect\texttt{#1} class}%
   \index{Class #1@Class \protect\texttt{#1}}%
   \index{Classes!#1@\protect\texttt{#1}}
   \pgfmanualpdflabel{#1}{}%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\newenvironment{method}[1]{
 \begin{pgfmanualentry}
   \extractmethod#1\@nil
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}
\def\extractmethod#1(#2)\@nil{%
 \def\test{#1}
 \ifx\test\currentclass
   \pgfmanualentryheadline{Constructor \declare{\ttfamily #1}\texttt(#2\texttt)}
 \else
   \pgfmanualentryheadline{Method \declare{\ttfamily #1}\texttt(#2\texttt)}
 \fi
 \index{#1@\protect\texttt{#1} method}%
 \index{Methods!#1@\protect\texttt{#1}}
 \index{Class \currentclass!#1@\protect\texttt{#1}}%
 \pgfmanualpdflabel{#1}{}%
}

\newenvironment{attribute}[1]{
 \begin{pgfmanualentry}
   \extractattribute#1\@nil
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}
\def\extractattribute#1=#2;\@nil{%
 \def\test{#2}%
 \ifx\test\@empty
   \pgfmanualentryheadline{Private attribute \declare{\ttfamily #1} \hfill (initially empty)}
 \else
   \pgfmanualentryheadline{Private attribute \declare{\ttfamily #1} \hfill (initially {\ttfamily #2})}
 \fi
 \index{#1@\protect\texttt{#1} attribute}%
 \index{Attributes!#1@\protect\texttt{#1}}
 \index{Class \currentclass!#1@\protect\texttt{#1}}%
 \pgfmanualpdflabel{#1}{}%
}



\newenvironment{predefinednode}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{Predefined node {\ttfamily\declare{#1}}}%
   \index{#1@\protect\texttt{#1} node}%
   \index{Predefined node!#1@\protect\texttt{#1}}
   \pgfmanualpdflabel{#1}{}%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\newenvironment{coordinatesystem}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{Coordinate system {\ttfamily\declare{#1}}}%
   \index{#1@\protect\texttt{#1} coordinate system}%
   \index{Coordinate systems!#1@\protect\texttt{#1}}
   \pgfmanualpdflabel{#1}{}%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\newenvironment{snake}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{Snake {\ttfamily\declare{#1}}}%
   \index{#1@\protect\texttt{#1} snake}%
   \index{Snakes!#1@\protect\texttt{#1}}
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\newenvironment{decoration}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{Decoration {\ttfamily\declare{#1}}}%
   \index{#1@\protect\texttt{#1} decoration}%
   \index{Decorations!#1@\protect\texttt{#1}}
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}


\def\pgfmanualbar{\char`\|}
\makeatletter
\newenvironment{pathoperation}[3][]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{\textcolor{gray}{{\ttfamily\char`\\path}\
       \ \dots}
     \declare{\texttt{#2}}#3\ \textcolor{gray}{\dots\texttt{;}}}%
   \def\pgfmanualtest{#1}%
   \ifx\pgfmanualtest\@empty%
     \index{#2@\protect\texttt{#2} path operation}%
     \index{Path operations!#2@\protect\texttt{#2}}%
     \pgfmanualpdflabel{#2}{}%
   \fi%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}
\newenvironment{datavisualizationoperation}[3][]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{\textcolor{gray}{{\ttfamily\char`\\datavisualization}\
       \ \dots}
     \declare{\texttt{#2}}#3\ \textcolor{gray}{\dots\texttt{;}}}%
   \def\pgfmanualtest{#1}%
   \ifx\pgfmanualtest\@empty%
     \index{#2@\protect\texttt{#2} (data visualization)}%
     \index{Data visualization!#2@\protect\texttt{#2}}%
     \pgfmanualpdflabel{#2}{}%
   \fi%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}
\makeatother

\def\extractcommand#1#2\@@{%
 \pgfmanualentryheadline{\declare{\texttt{\string#1}}#2}%
 \removeats{#1}%
 \index{\strippedat @\protect\myprintocmmand{\strippedat}}
       \pgfmanualpdflabel{\textbackslash\strippedat}{}%
}

\def\doublebs{\texttt{\char`\\\char`\\}}


\newenvironment{package}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{{\ttfamily\char`\\usepackage\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space  \LaTeX}}
   \index{#1@\protect\texttt{#1} package}%
   \index{Packages and files!#1@\protect\texttt{#1}}%
   \pgfmanualentryheadline{{\ttfamily\char`\\input \declare{#1}.tex\space\space\space \char`\%\space\space  plain \TeX}}
   \pgfmanualentryheadline{{\ttfamily\char`\\usemodule[\declare{#1}]\space\space \char`\%\space\space  Con\TeX t}}
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}


\newenvironment{pgfmodule}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{{\ttfamily\char`\\usepgfmodule\char`\{\declare{#1}\char`\}\space\space\space
       \char`\%\space\space  \LaTeX\space and plain \TeX\space and pure pgf}}
   \index{#1@\protect\texttt{#1} module}%
   \index{Modules!#1@\protect\texttt{#1}}%
   \pgfmanualentryheadline{{\ttfamily\char`\\usepgfmodule[\declare{#1}]\space\space \char`\%\space\space  Con\TeX t\space and pure pgf}}
   \pgfmanualbody
         \pgfmanualpdflabel{#1}{}%
}
{
 \end{pgfmanualentry}
}

\newenvironment{pgflibrary}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{{\ttfamily\char`\\usepgflibrary\char`\{\declare{#1}\char`\}\space\space\space
       \char`\%\space\space  \LaTeX\space and plain \TeX\space and pure pgf}}
   \index{#1@\protect\texttt{#1} library}%
   \index{Libraries!#1@\protect\texttt{#1}}%
   \pgfmanualentryheadline{{\ttfamily\char`\\usepgflibrary[\declare{#1}]\space\space \char`\%\space\space  Con\TeX t\space and pure pgf}}
   \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space
       \char`\%\space\space  \LaTeX\space and plain \TeX\space when using \tikzname}}
   \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space
       \char`\%\space\space  Con\TeX t\space when using \tikzname}}
   \pgfmanualbody
         \pgfmanualpdflabel{#1}{}%
}
{
 \end{pgfmanualentry}
}

\newenvironment{tikzlibrary}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary\char`\{\declare{#1}\char`\}\space\space \char`\%\space\space  \LaTeX\space and plain \TeX}}
   \index{#1@\protect\texttt{#1} library}%
   \index{Libraries!#1@\protect\texttt{#1}}%
   \pgfmanualentryheadline{{\ttfamily\char`\\usetikzlibrary[\declare{#1}]\space \char`\%\space\space Con\TeX t}}
   \pgfmanualbody
         \pgfmanualpdflabel{#1}{}%
}
{
 \end{pgfmanualentry}
}



\newenvironment{filedescription}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{File {\ttfamily\declare{#1}}}%
   \index{#1@\protect\texttt{#1} file}%
   \index{Packages and files!#1@\protect\texttt{#1}}%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}


\newenvironment{packageoption}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{{\ttfamily\char`\\usepackage[\declare{#1}]\char`\{pgf\char`\}}}
   \index{#1@\protect\texttt{#1} package option}%
   \index{Package options for \textsc{pgf}!#1@\protect\texttt{#1}}%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}



\newcommand\opt[1]{{\color{black!50!green}#1}}
\newcommand\ooarg[1]{{\ttfamily[}\meta{#1}{\ttfamily]}}

\def\opt{\afterassignment\pgfmanualopt\let\next=}
\def\pgfmanualopt{\ifx\next\bgroup\bgroup\color{black!50!green}\else{\color{black!50!green}\next}\fi}



\def\beamer{\textsc{beamer}}
\def\pdf{\textsc{pdf}}
\def\eps{\texttt{eps}}
\def\pgfname{\textsc{pgf}}
\def\tikzname{Ti\emph{k}Z}
\def\pstricks{\textsc{pstricks}}
\def\prosper{\textsc{prosper}}
\def\seminar{\textsc{seminar}}
\def\texpower{\textsc{texpower}}
\def\foils{\textsc{foils}}

{
 \makeatletter
 \global\let\myempty=\@empty
 \global\let\mygobble=\@gobble
 \catcode`\@=12
 \gdef\getridofats#1@#2\relax{%
   \def\getridtest{#2}%
   \ifx\getridtest\myempty%
     \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1}
   \else%
     \expandafter\def\expandafter\strippedat\expandafter{\strippedat#1\protect\printanat}
     \getridofats#2\relax%
   \fi%
 }

 \gdef\removeats#1{%
   \let\strippedat\myempty%
   \edef\strippedtext{\stripcommand#1}%
   \expandafter\getridofats\strippedtext @\relax%
 }

 \gdef\stripcommand#1{\expandafter\mygobble\string#1}
}

\def\printanat{\char`\@}

\def\declare{\afterassignment\pgfmanualdeclare\let\next=}
\def\pgfmanualdeclare{\ifx\next\bgroup\bgroup\color{red!75!black}\else{\color{red!75!black}\next}\fi}


\let\textoken=\command
\let\endtextoken=\endcommand

\def\myprintocmmand#1{\texttt{\char`\\#1}}

\def\example{\par\smallskip\noindent\textit{Example: }}
\def\themeauthor{\par\smallskip\noindent\textit{Theme author: }}


\def\indexoption#1{%
 \index{#1@\protect\texttt{#1} option}%
 \index{Graphic options and styles!#1@\protect\texttt{#1}}%
}

\def\itemcalendaroption#1{\item \declare{\texttt{#1}}%
 \index{#1@\protect\texttt{#1} date test}%
 \index{Date tests!#1@\protect\texttt{#1}}%
}



\def\class#1{\list{}{\leftmargin=2em\itemindent-\leftmargin\def\makelabel##1{\hss##1}}%
\extractclass#1@\par\topsep=0pt}
\def\endclass{\endlist}
\def\extractclass#1#2@{%
\item{{{\ttfamily\char`\\documentclass}#2{\ttfamily\char`\{\declare{#1}\char`\}}}}%
 \index{#1@\protect\texttt{#1} class}%
 \index{Classes!#1@\protect\texttt{#1}}}

\def\partname{Part}

\makeatletter
\def\index@prologue{\section*{Index}\addcontentsline{toc}{section}{Index}
 %This index contains pointers to all the commands and configuration keys
 %described somewhere in the documentation. In addition, it contains some
 %keywords that, hopefully, will make it easier to find what you are looking
 %for.
 %%index should also contain carefully selected keywords. This index is
 %%not a good index.
 %\bigskip
}
\c@IndexColumns=2
 \def\theindex{\@restonecoltrue
   \columnseprule \z@  \columnsep 29\p@
   \twocolumn[\index@prologue]%
      \parindent -30pt
      \columnsep 15pt
      \parskip 0pt plus 1pt
      \leftskip 30pt
      \rightskip 0pt plus 2cm
      \small
      \def\@idxitem{\par}%
   \let\item\@idxitem \ignorespaces}
 \def\endtheindex{\onecolumn}
\def\noindexing{\let\index=\@gobble}



\newcommand\symarrow[1]{
 \index{#1@\protect\texttt{#1} arrow tip}%
 \index{Arrow tips!#1@\protect\texttt{#1}}
 \texttt{#1}& yields thick
 \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture} and thin
 \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture}
}
\newcommand\symarrowdouble[1]{
 \index{#1@\protect\texttt{#1} arrow tip}%
 \index{Arrow tips!#1@\protect\texttt{#1}}
 \texttt{#1}& yields thick
 \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture}
 and thin
 \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture}, double
 \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture} and
 \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture}
}

\newcommand\sarrow[2]{
 \index{#1@\protect\texttt{#1} arrow tip}%
 \index{Arrow tips!#1@\protect\texttt{#1}}
 \index{#2@\protect\texttt{#2} arrow tip}%
 \index{Arrow tips!#2@\protect\texttt{#2}}
 \texttt{#1-#2}& yields thick
 \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture} and thin
 \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture}
}

\newcommand\sarrowdouble[2]{
 \index{#1@\protect\texttt{#1} arrow tip}%
 \index{Arrow tips!#1@\protect\texttt{#1}}
 \index{#2@\protect\texttt{#2} arrow tip}%
 \index{Arrow tips!#2@\protect\texttt{#2}}
 \texttt{#1-#2}& yields thick
 \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture} and thin
 \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture}, double
 \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture} and
 \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1cm,2ex);
   \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
 \end{tikzpicture}
}

\newcommand\carrow[1]{
 \index{#1@\protect\texttt{#1} arrow tip}%
 \index{Arrow tips!#1@\protect\texttt{#1}}
 \texttt{#1}& yields for line width 1ex
 \begin{tikzpicture}[arrows={#1-#1},line width=1ex,baseline]
   \useasboundingbox (0pt,-0.5ex) rectangle (1.5cm,2ex);
   \draw (0pt,.5ex) -- (1.5cm,.5ex);
 \end{tikzpicture}
}
\def\myvbar{\char`\|}
\newcommand\plotmarkentry[1]{%
 \index{#1@\protect\texttt{#1} plot mark}%
 \index{Plot marks!#1@\protect\texttt{#1}}
 \texttt{\char`\\pgfuseplotmark\char`\{\declare{#1}\char`\}} &
 \tikz\draw[color=black!25] plot[mark=#1,mark options={fill=examplefill,draw=black}] coordinates{(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\
}
\newcommand\plotmarkentrytikz[1]{%
 \index{#1@\protect\texttt{#1} plot mark}%
 \index{Plot marks!#1@\protect\texttt{#1}}
 \texttt{mark=\declare{#1}} & \tikz\draw[color=black!25]
 plot[mark=#1,mark options={fill=examplefill,draw=black}]
   coordinates {(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\
}



\ifx\scantokens\@undefined
 \PackageError{pgfmanual-macros}{You need to use extended latex
   (elatex) or (pdfelatex) to process this document}{}
\fi

\begingroup
\catcode`|=0
\catcode`[= 1
\catcode`]=2
\catcode`\{=12
\catcode `\}=12
\catcode`\\=12 |gdef|find@example#1\end{codeexample}[|endofcodeexample[#1]]
|endgroup

% define \returntospace.
%
% It should define NEWLINE as {}, spaces and tabs as \space.
\begingroup
\catcode`\^=7
\catcode`\^^M=13
\catcode`\^^I=13
\catcode`\ =13%
\gdef\returntospace{\catcode`\ =13\def {\space}\catcode`\^^I=13\def^^I{\space}}
\gdef\showreturn{\show^^M}
\endgroup

\begingroup
\catcode`\%=13
\catcode`\^^M=13
\gdef\commenthandler{\catcode`\%=13\def%{\@gobble@till@return}}
\gdef\@gobble@till@return#1^^M{}
\gdef\@gobble@till@return@ignore#1^^M{\ignorespaces}
\gdef\typesetcomment{\catcode`\%=13\def%{\@typeset@till@return}}
\gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\textsl{\char`\%#1}}\par}
\endgroup

% Define tab-implementation functions
%   \codeexample@tabinit@replacementchars@
% and
%   \codeexample@tabinit@catcode@
%
% They should ONLY be used in case that tab replacement is active.
%
% This here is merely a preparation step.
%
% Idea:
% \codeexample@tabinit@catcode@ will make TAB active
% and
% \codeexample@tabinit@replacementchars@ will insert as many spaces as
% /codeexample/tabsize contains.
{
\catcode`\^^I=13
% ATTENTION: do NOT use tabs in these definitions!!
\gdef\codeexample@tabinit@replacementchars@{%
\begingroup
\count0=\pgfkeysvalueof{/codeexample/tabsize}\relax
\toks0={}%
\loop
\ifnum\count0>0
 \advance\count0 by-1
 \toks0=\expandafter{\the\toks0\ }%
\repeat
\xdef\codeexample@tabinit@replacementchars@@{\the\toks0}%
\endgroup
\let^^I=\codeexample@tabinit@replacementchars@@
}%
\gdef\codeexample@tabinit@catcode@{\catcode`\^^I=13}%
}%

% Called after any options have been set. It assigns
%   \codeexample@tabinit@catcode
% and
%   \codeexample@tabinit@replacementchars
% which are used inside of
%\begin{codeexample}
% ...
%\end{codeexample}
%
% \codeexample@tabinit@catcode  is either \relax or it makes tab
% active.
%
% \codeexample@tabinit@replacementchars is either \relax or it inserts
% a proper replacement sequence for tabs (as many spaces as
% configured)
\def\codeexample@tabinit{%
       \ifnum\pgfkeysvalueof{/codeexample/tabsize}=0\relax
               \let\codeexample@tabinit@replacementchars=\relax
               \let\codeexample@tabinit@catcode=\relax
       \else
               \let\codeexample@tabinit@catcode=\codeexample@tabinit@catcode@
               \let\codeexample@tabinit@replacementchars=\codeexample@tabinit@replacementchars@
       \fi
}

\pgfqkeys{/codeexample}{%
       width/.code=    {\setlength\codeexamplewidth{#1}},
       graphic/.code=  {\colorlet{graphicbackground}{#1}},
       code/.code=     {\colorlet{codebackground}{#1}},
       execute code/.is if=code@execute,
       code only/.code=        {\code@executefalse},
       pre/.store in=\code@pre,
       post/.store in=\code@post,
 % #1 is the *complete* environment contents as it shall be
 % typeset. In particular, the catcodes are NOT the normal ones.
 typeset listing/.code=        {#1},
       render instead/.store in=\code@render,
       vbox/.code=     {\def\code@pre{\vbox\bgroup\setlength{\hsize}{\linewidth-6pt}}\def\code@post{\egroup}},
       ignorespaces/.code=     {\let\@gobble@till@return=\@gobble@till@return@ignore},
       leave comments/.code=   {\def\code@catcode@hook{\catcode`\%=12}\let\commenthandler=\relax\let\typesetcomment=\relax},
       tabsize/.initial=0,% FIXME : this here is merely used for indentation. It is just a TAB REPLACEMENT.
       every codeexample/.style={width=4cm+7pt},
}

\let\code@pre\pgfutil@empty
\let\code@post\pgfutil@empty
\let\code@render\pgfutil@empty
\def\code@catcode@hook{}

\newdimen\codeexamplewidth
\newif\ifcode@execute
\newbox\codeexamplebox
\def\codeexample[#1]{%
 \begingroup%
 \code@executetrue
 \pgfqkeys{/codeexample}{every codeexample,#1}%
 \codeexample@tabinit% assigns \codeexample@tabinit@[catcode,replacementchars]
 \parindent0pt
 \begingroup%
 \par%
 \medskip%
 \let\do\@makeother%
 \dospecials%
 \obeylines%
 \@vobeyspaces%
 \catcode`\%=13%
 \catcode`\^^M=13%
 \code@catcode@hook%
 \codeexample@tabinit@catcode
 \relax%
 \find@example}
\def\endofcodeexample#1{%
 \endgroup%
 \ifcode@execute%
   \setbox\codeexamplebox=\hbox{%
     \ifx\code@render\pgfutil@empty%
     {%
       {%
         \returntospace%
         \commenthandler%
         \xdef\code@temp{#1}% removes returns and comments
       }%
       \catcode`\^^M=9%
       \colorbox{graphicbackground}{\color{black}\ignorespaces%
         \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}%
     }%
     \else%
       \colorbox{graphicbackground}{\color{black}\ignorespaces%
         \code@render}%
     \fi%
   }%
   \ifdim\wd\codeexamplebox>\codeexamplewidth%
     \def\code@start{\par}%
     \def\code@flushstart{}\def\code@flushend{}%
     \def\code@mid{\parskip2pt\par\noindent}%
     \def\code@width{\linewidth-6pt}%
     \def\code@end{}%
   \else%
     \def\code@start{%
       \linewidth=\textwidth%
       \parshape \@ne 0pt \linewidth
       \leavevmode%
       \hbox\bgroup}%
     \def\code@flushstart{\hfill}%
     \def\code@flushend{\hbox{}}%
     \def\code@mid{\hskip6pt}%
     \def\code@width{\linewidth-12pt-\codeexamplewidth}%
     \def\code@end{\egroup}%
   \fi%
   \code@start%
   \noindent%
   \begin{minipage}[t]{\codeexamplewidth}\raggedright
     \hrule width0pt%
     \footnotesize\vskip-1em%
     \code@flushstart\box\codeexamplebox\code@flushend%
     \vskip-1ex
     \leavevmode%
   \end{minipage}%
 \else%
   \def\code@mid{\par}
   \def\code@width{\linewidth-6pt}
   \def\code@end{}
 \fi%
 \code@mid%
 \colorbox{codebackground}{%
   \begin{minipage}[t]{\code@width}%
     {%
       \let\do\@makeother
       \dospecials
       \frenchspacing\@vobeyspaces
       \normalfont\ttfamily\footnotesize
       \typesetcomment%
       \codeexample@tabinit@replacementchars
       \@tempswafalse
       \def\par{%
         \if@tempswa
         \leavevmode \null \@@par\penalty\interlinepenalty
         \else
         \@tempswatrue
         \ifhmode\@@par\penalty\interlinepenalty\fi
         \fi}%
       \obeylines
       \everypar \expandafter{\the\everypar \unpenalty}%
       \pgfkeysvalueof{/codeexample/typeset listing/.@cmd}{#1}\pgfeov
     }
   \end{minipage}}%
 \code@end%
 \par%
 \medskip
 \end{codeexample}
}

\def\endcodeexample{\endgroup}


\makeatother

\usepackage{pgfmanual}

\makeatletter
% \pgfautoxrefs will be defined by 'make dist'
\pgfutil@ifundefined{pgfautoxrefs}{%
       \def\pgfmanualpdflabel#1#2{#2}% NO-OP
       \def\pgfmanualpdfref#1#2{#2}%
       \pgfkeys{
               /pdflinks/codeexample links=false,% DISABLED.
       }%
}{}
\makeatother

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "beameruserguide"
%%% End: