% !TeX TS-program = lualatex
% !TeX spellcheck = <none>
% !TeX root = tikz-ext-manual.tex
% Copyright 2022 by Qrrbrbirlbel
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Free Documentation License.
%

\usepackage[version=latest]{pgf}

\usepackage{xkeyval,calc,listings,tikz,fp}

\usepackage{imakeidx}
\makeindex

%%% Bibliography
\usepackage{csquotes}
\usepackage[backend=biber,style=numeric,backref]{biblatex}
\addbibresource{tikz-ext-manual.bib}

\usepackage{hyperref}
\hypersetup{%
   colorlinks=true, % use true to enable colors below:
   linkcolor=blue,%red,
   filecolor=blue,%magenta,
   urlcolor=blue,%cyan,
   citecolor=blue,
   pdfborder=0 0 0,
}

\usepackage[a4paper,left=2.25cm,right=2.25cm,top=2.5cm,bottom=2.5cm,nohead,columnsep=1cm]{geometry}
\usepackage{amsmath,amssymb}
\usepackage{xxcolor}
\usepackage{pifont}

\usepackage[T1]{fontenc}
% Promote `Missing character` reports to full errors
% require texlive 2021 or above
\tracinglostchars=3

\input{pgfmanual-en-macros}
\usepackage[no-math]{fontspec}
%\usepackage{unicode-math}
%\setmathfont[Scale=MatchUppercase]{libertinusmath-regular.otf}
\usepackage[ttscale=.85]{libertine}
\setmonofont[Scale=0.8]{Bitstream Vera Sans Mono}
\let\arrowvert\relax
\usepackage[libertine,liby]{newtxmath}
\makeatletter
\renewcommand*\l@section[2]{%
 \ifnum \c@tocdepth >\z@
   \addpenalty\@secpenalty
   \addvspace{1.0em \@plus\p@}%
   \setlength\@tempdima{2.5em}%
   \begingroup
     \parindent \z@ \rightskip \@pnumwidth
     \parfillskip -\@pnumwidth
     \leavevmode \bfseries
     \advance\leftskip\@tempdima
     \hskip -\leftskip
     #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
   \endgroup
 \fi}
\renewcommand*\l@subsection{\@dottedtocline{2}{2.5em}{3.3em}}
\renewcommand*\l@subsubsection{\@dottedtocline{3}{5.8em}{4.2em}}
\def\@pnumwidth{2.2em}
\makeatother

% Global styles:
\tikzset{
 every plot/.style={prefix=plots/pgf-},
 shape example/.style={
   color=black!30,
   draw,
   fill=yellow!30,
   line width=.5cm,
   inner xsep=2.5cm,
   inner ysep=0.5cm}
}

% Detect changed labels
% by David Carlisle https://tex.stackexchange.com/a/169245
\makeatletter
\def\@testdef#1#2#3{%
 \def\reserved@a{#3}%
 \expandafter\ifx\csname #1@#2\endcsname\reserved@a\else
   \typeout{^^JLabel `#2' changed:^^J\meaning\reserved@a^^J\expandafter\meaning\csname #1@#2\endcsname^^J}%
   \@tempswatrue
 \fi}
\makeatother
\usepgfkeyslibrary{ext.pgfkeys-plus}
\usetikzlibrary{
 decorations.markings,
 ext.arrows,
 ext.arrows-plus,
 ext.calendar-plus,
 ext.layers,
 ext.misc,
 ext.node-families,
 ext.node-families.shapes.geometric,
 ext.nodes,
 ext.paths.arcto,
 ext.paths.ortho,
 ext.paths.timer,
 ext.patterns.images,
 ext.positioning-plus,
 ext.scalepicture,
 ext.shapes.heatmark,
 ext.shapes.circlearrow,
 ext.shapes.circlecrosssplit,
 ext.shapes.rectangleroundedcorners,
 ext.shapes.superellipse,
 ext.shapes.uncenteredrectangle,
 ext.topaths.arcthrough,
 ext.topaths.autobend,
 ext.transformations.mirror,
 %
 bending,
 calc,
 cd,
 fit,
 intersections,
 matrix,
 shapes.geometric,
 spath3,
 through,
 trees,
}
\tikzextset{compat=0.6}
\usepackage{pgffor-ext}
%% needs Lua!
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{force}

\makeatletter
\def\endofcodeexample#1{% original from tex/latex/pgf/doc/pgfmanual-en-macros.tex by Till Tantau et al
 \endgroup%
 \ifpgfmanual@setup@code%
   \gdef\pgfmanual@do@this{%
     {%
       \returntospace%
       \commenthandler%
       \xdef\code@temp{#1}% removes returns and comments
     }%
     \edef\pgfmanualmcatcode{\the\catcode`\^^M}%
     \catcode`\^^M=9\relax%
     \expandafter\scantokens\expandafter{\code@temp}%
     \catcode`\^^M=\pgfmanualmcatcode%
   }%
 \fi%
 \ifcode@hidden\else
   \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%
         \global\let\code@temp\code@render%
         \colorbox{graphicbackground}{\color{black}\ignorespaces%
           \code@render}%
       \fi%
     }%
     \ifx\code@animation@list\pgfutil@empty%
     \else%
     \setbox\codeexampleboxanim=\vbox{%
       \rightskip0pt\leftskip0pt plus1filll%
       \ifdim\wd\codeexamplebox>\codeexamplewidth%
       \else%
         \hsize\codeexamplewidth%
         \advance\hsize by2cm%
       \fi%
       \leavevmode\catcode`\^^M=9%
       \foreach \pgfmanualtime/\pgfmanualtimehow in\code@animation@list{%
         \setbox\codeexampleboxanim=\hbox{\colorbox{animationgraphicbackground}{%
             \tikzset{make snapshot of=\pgfmanualtime}%
             \scalebox{\pgfmanualanimscale}{\color{black}\ignorespaces%
               \code@animation@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@animation@post\ignorespaces}%
           }}%
         \space\raise4pt\hbox to0pt{\vrule width0pt height1em\hbox
           to\wd\codeexampleboxanim{\hfil\scriptsize$t{=}\pgfmanualtimehow \mathrm s$\hfil}\hss}%
         \lower\ht\codeexampleboxanim\box\codeexampleboxanim\hfil\penalty0\hskip0ptplus-1fil%
       }%
     }%
     \setbox\codeexampleboxanim=\hbox{\hbox{}\hskip-2cm\box\codeexampleboxanim}%
     \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% removed this line
         \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%
       \vskip0pt%
       \leavevmode%
       \box\codeexampleboxanim%
       \vskip-1ex
       \leavevmode%
     \end{minipage}%
   \else%
     \def\code@mid{\par}
     \def\code@width{\linewidth-6pt}
     \def\code@end{}
   \fi%
   \code@mid%
     \ifpgfmanual@multipage@code%
       {%
         \pgfkeysvalueof{/codeexample/prettyprint/base color}%
         \pgfmanualdolisting{#1}%
       }%
     \else%
       \colorbox{codebackground}{%
         \pgfkeysvalueof{/codeexample/prettyprint/base color}%
         \begin{minipage}[t]{\code@width}%
           \pgfmanualdolisting{#1}%
         \end{minipage}}%
     \fi%
   \code@end%
   \par%
   \medskip
 \fi
 \endcodeexample\endgroup%
}

\newenvironment{pathoperation'}[3][]{
 \begin{pgfmanualentry}
   \def\pgfmanualtest{#1}%
   \pgfmanualentryheadline{%
     \ifx\pgfmanualtest\@empty%
       \pgfmanualpdflabel{#2}{}%
     \fi%
     %\textcolor{gray}{{\ttfamily\char`\\path}\ \ \dots}
     %\declare{\texttt{\noligs{#2}}}#3\ \textcolor{gray}{\dots\texttt{;}}
   }%
   \ifx\pgfmanualtest\@empty%
     \index{#2@\protect\texttt{#2} path operation}%
     \index{Path operations!#2@\protect\texttt{#2}}%
   \fi%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}
\makeatother

\usepackage{paracol}

%% normal references
\newcommand*{\indexLibrary}[1]{%
 \index{#1@\protect\texttt{#1} library}%
 \index{Libraries!#1@\protect\texttt{#1}}%
}
\newcommand*{\indexMathFunction}[1]{%
 \index{#1@\protect\texttt{#1} math function}%
 \index{Math functions!#1@\protect\texttt{#1}}%
}
\newcommand*{\indexShape}[1]{%
 \index{#1@\protect\texttt{#1} shape}%
 \index{Shapes!#1@\protect\texttt{#1}}%
}
\newcommand*{\indexHandler}[1]{%
 \index{\gobble#1@\protect\texttt{#1} handler}%
 \index{Key handlers!#1@\protect\texttt{#1}}
}
\newcommand*{\indexKey}[2][/tikz/]{%
\begingroup
 \def\mykey{#1#2}%
 \def\mypath{}%
 \gdef\myname{}%
 \firsttimetrue
 \decompose#1#2/\nil
\endgroup
}
\newcommand*{\indexPathOperation}[1]{%
 \index{#1@\protect\texttt{#1} path operation}%
 \index{Path operations!#1@\protect\texttt{#1}}%
}

\newcommand*{\indexPackage}[1]{%
 \index{#1@\protect\texttt{#1} package}%
 \index{Packages and files!#1@\protect\texttt{#1}}%
}
\newcommand*{\indexPackageO}[1]{%
 \index{#1@\originalprefix\protect\texttt{\original{#1}} package\originalsuffix}%
 \index{Packages and files!#1@\originalprefix\protect\texttt{\original{#1}}\originalsuffix}%
}

%% references to original
\newcommand*{\indexLibraryO}[1]{%
 \index{#1@\originalprefix\protect\texttt{\original{#1}} library\originalsuffix}%
 \index{Libraries!#1@\originalprefix\protect\texttt{\original{#1}}\originalsuffix}%
}
\newcommand*{\indexMathFunctionO}[1]{%
 \index{#1@\protect\texttt{\original{#1}} math function\originalsuffix}%
 \index{Math functions!#1@\protect\texttt{\original{#1}}\originalsuffix}%
}
\newcommand*{\indexShapeO}[1]{%
 \index{#1@\originalprefix\protect\texttt{\original{#1}} shape\originalsuffix}%
 \index{Shapes!#1@\originalprefix\protect\texttt{\original{#1}}\originalsuffix}%
}
\newcommand*{\indexHandlerO}[1]{%
 \index{\gobble#1@\originalprefix\protect\texttt{\original{#1}} handler\originalsuffix}%
 \index{Key handlers!#1@\originalprefix\protect\texttt{\original{#1}}\originalsuffix}
}
\newcommand*{\indexKeyO}[2][/tikz/]{%TODO
 \begingroup\let\decomposetoodeep\decomposetoodeepO
   \def\mykey{#1#2}%
   \def\mypath{}%
   \gdef\myname{}%
   \firsttimetrue
   \decomposeO#1#2/\nil
 \endgroup
}
\def\decomposetoodeepO#1/#2/\nil{%
 % avoid too-deep nesting in index
 \index{#1/#2@\originalprefix\protect\texttt{\original{#1/#2}} key\originalsuffix}%
 \index{\mypath#1/#2@\originalprefix\protect\texttt{\original{#1/#2}}\originalsuffix}%
 \decomposefindlast/#1/#2/\nil%
}
\def\decomposeO/#1/#2\nil{%
 \def\test{#2}%
 \ifx\test\empty%
   % aha.
   \index{#1@\originalprefix\protect\texttt{\original{#1}} key\originalsuffix}%
   \index{\mypath#1@\originalprefix\protect\texttt{\original{#1}}\originalsuffix}%
   \gdef\myname{#1}%
   \pgfmanualpdflabel{#1}{}%
 \else%
   \advance\pgfmanualdecomposecount by1\relax%
   \ifnum\pgfmanualdecomposecount>2\relax%
     \decomposetoodeepO#1/#2\nil%
   \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{}%
     \decomposeO/#2\nil%
   \fi%
 \fi%
}
\newcommand*{\indexPathOperationO}[1]{%
 \index{#1@\originalprefix\protect\texttt{\original{#1}} path operation\originalsuffix}%
 \index{Path operations!#1@\originalprefix\protect\texttt{\original{#1}}\originalsuffix}%
}

\newcommand*{\indexCommand}[1]{%
 \removeats{#1}%
 \index{\strippedat @\protect\texttt{\protect\string\protect#1}}%
}
\newcommand*{\indexCommandO}[1]{%
 \removeats{#1}%
 \index{\strippedat @\originalprefix\protect\texttt{\original{\protect\string\protect#1}}\originalsuffix}%
}

\newcommand*{\indexDecorationO}[1]{%
 \index{#1@\originalprefix\protect\texttt{\original{#1}} decoration\originalsuffix}%
 \index{Decorations!#1@\originalprefix\protect\texttt{\original{#1}}\originalsuffix}%
}

\newcommand*{\indexEnvironment}[1]{%
 \index{#1@\protect\texttt{#1} environment}%
 \index{Environments!#1@\protect\texttt{#1}}%
}
\newcommand*{\indexEnvironmentO}[1]{%
 \index{#1@\originalprefix\protect\texttt{\original{#1}} environment\originalsuffix}%
 \index{Environments!#1@\originalprefix\protect\texttt{\original{#1}}\originalsuffix}%
}

\newcommand*{\indexArrowtipO}[1]{%
 \index{#1@\originalprefix\protect\texttt{\original{#1}} arrow tip\originalsuffix}%
 \index{Arrow tips!#1@\originalprefix\protect\texttt{\original{#1}}\originalsuffix}%
}
\newcommand*{\referenceArrowtipandIndexO}[1]{\texttt{#1}\indexArrowtipO{#1}}
\newcommand*{\referenceEnvironmentandIndexO}[1]{\texttt{#1}\indexEnvironmentO{#1}}
\newcommand*{\referenceDecorationandIndexO}[1]{\texttt{#1}\indexDecorationO{#1}}
\newcommand*{\referenceKeyandIndexO}[2][/tikz/]{\texttt{#1#2}\indexKeyO[#1]{#2}}
\newcommand*{\referenceKeyandIndex}[2][/tikz/]{\texttt{#1#2}\indexKey[#1]{#2}}
\newcommand*{\referenceShapeandIndex}[1]{\texttt{#1}\indexShape{#1}}
\newcommand*{\referenceShapeandIndexO}[1]{\texttt{#1}\indexShapeO{#1}}
\newcommand*{\referenceLibraryandIndexO}[1]{\texttt{#1}\indexLibraryO{#1}}
\newcommand*{\referenceLibraryandIndexExt}[1]{\texttt{#1}\indexLibraryExt{#1}}
\newcommand*{\referenceLibraryandIndex}[1]{\texttt{#1}\indexLibrary{#1}}
\newcommand*{\referencePackageandIndex}[1]{\texttt{#1}\indexPackage{#1}}
\newcommand*{\referencePackageandIndexO}[1]{\texttt{#1}\indexPackageO{#1}}
\newcommand*{\referencePackageandIndeXExt}[1]{\texttt{#1}\indexPackageExt{#1}}
\newcommand*{\referencePathOperationandIndex}[1]{\texttt{#1}\indexPathOperation{#1}}
\newcommand*{\referencePathOperationandIndexO}[1]{\texttt{#1}\indexPathOperationO{#1}}
\newcommand*{\referenceCommandandIndex}[1]{\texttt{\string#1}\indexCommand{#1}}
\newcommand*{\referenceCommandandIndexO}[1]{\texttt{\string#1}\indexCommandO{#1}}
\newcommand*{\referenceCommandandIndexExt}[1]{\texttt{\string#1}\indexCommandExt{#1}}
\colorlet{originalindex}{gray}
\newcommand*{\original}[1]{\textcolor{originalindex}{#1}}%
\newcommand*{\originalsuffix}{}%\textsuperscript{\textdagger}}%\normalsize
\newcommand*{\originalprefix}{}%\footnotesize

\newcommand*{\indexPackageExt}[1]{%
 \begingroup
%    \originalExternals
   \index{#1@\originalExternals{\protect\texttt{\original{#1}} package}}%
   \index{Packages and files!#1@\originalExternals{\protect\texttt{\original{#1}}}}%
 \endgroup
}
\newcommand*{\indexLibraryExt}[1]{%
 \index{#1@\originalExternals{\protect\texttt{\original{#1}} library}}%
 \index{Libraries!#1@\originalExternals{\protect\texttt{\original{#1}}}}%
}
\newcommand*{\indexCommandExt}[1]{%
 \removeats{#1}%
 \index{\strippedat @\originalExternals{\protect\texttt{\original{\protect\string\protect#1}}}}%
}
\DeclareRobustCommand*{\originalExternals}[1]{%
 \begingroup
   \colorlet{originalindex}{blue!50!gray}%
%    \renewcommand*{\original}[1]{\textcolor{originalindex}{##1}}%
   #1%
 \endgroup
}

\newcommand*{\filetype}[1]{\textsc{#1}}

\makeatletter
\def\index@prologue{\section*{Index}\addcontentsline{toc}{section}{Index}
 This index contains automatically generated entries as well as {\originalprefix\original{references}\originalsuffix} to
 original functionalities of \pgfname/\tikzname\space
 and \originalExternals{\originalprefix\original{references}\originalsuffix} to functionalities outside of \pgfname/\tikzname.
 \bigskip
}
\makeatother

\DeclareMathOperator{\sgn}{sgn}

\newenvironment{implementation}{%
 \noindent\rule[.5ex]{\linewidth}{.4pt}\par
 \paragraph*{Notes on Implementation:}\par%
 \small
 \begin{quotation}%
}{\end{quotation}}

\newcommand*{\inspiration}[2]{%
 \par\textbf{Q\,\&\,A:} \cite{#1} \& \cite{#2}\par
}
\newcommand*\inspirationQ[1]{\par\textbf{Q:} \cite{#1}}

\newenvironment{texpackage}[1]{% no context
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{%
     \pgfmanualpdflabel{#1}{}%
     {\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{latexpackage}[1]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{%
     \pgfmanualpdflabel{#1}{}%
     {\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}
}

\usepackage{booktabs}

\renewenvironment{arrowtip}[4]{
 \begin{pgfmanualentry}
   \pgfmanualentryheadline{\textbf{Arrow Tip Kind} {\ttfamily#1}}
   \index{#1@\protect\texttt{#1} arrow tip}%
   \index{Arrow tips!#1@\protect\texttt{#1}}%
   \pgfmanualbody
   \def\currentarrowtype{#1}
   \begin{minipage}[t]{\dimexpr\linewidth-5cm\relax}
     #2
   \end{minipage}\hskip5mm\begin{minipage}[t]{4.75cm}
     \leavevmode\vskip-2em
   \tikz{
     \draw [black!50,line width=5mm,-{#1[#3,color=black]}] (-4,0) -- (0,0);
     \foreach \action in {#4}
     { \expandafter\processaction\action\relax }
   }
   \end{minipage}\par\smallskip
 }
{
 \end{pgfmanualentry}
}
\makeatletter
\def\arrowexample@#1[#2]{%
 {\sfcode`\.1000\scriptsize\texttt{#1[#2]}} \>
 \tikz [baseline,>={#1[#2]}] \draw [line
 width=0.4pt,->] (0,.5ex) -- (2em,.5ex); thin \>
 \tikz [baseline,>={#1[#2]}] \draw [line
 width=0.8pt,->] (0,.5ex) -- (2em,.5ex); \textbf{thick} \>
 \tikz [baseline,>={#1[#2]}] \draw [line
 width=1.6pt,->] (0,.5ex) -- (3em,.5ex); \\
}
\def\manual@action@length#1/#2/#3\relax{%
%  \draw[help lines, overlay] (current bounding box.south west) rectangle (current bounding box.north east);
 \draw [red,|<->|,semithick,xshift=#2]
   ([yshift=4pt]current bounding box.north -| -#1,0) coordinate (last length)
   -- node[above=-2pt] {|length|} ++(#1,0);
}
\def\manual@action@radius#1/#2/#3\relax{%
%  \draw[red] (0,#2)
%    -- node[above, sloped]{\texttt{radius}}
%    +(30:#1);
 \draw [red, ->|, semithick]
   ([xshift=-#1, yshift=-#1]0,#2) %-- ++(left:#2) -- ++(down:#1);
     -- node[below, sloped]{\texttt{inset}} +(30:#1);
%  \draw [red,|<->|,semithick] ([xshift=-#1,yshift=2*#1]current bounding
%  box.north east) -- node [above, overlay] {\texttt{radius}} ++(-#1,0);
}
\makeatother
\newcommand*\listcompat[2][pre~0.6]{%
 \vspace{-6pt}\item{\color{gray}\small\sffamily#1\kern.5em{#2}}\vspace{-2pt}\par
}
\newcommand*\keylistcompat[2][pre~0.6]{%
 \vspace{-6pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily/#2/\myname}}\vspace{-2pt}\par
 \pgfmanualpdflabel{/#2/\myname}{}%
}
\newcommand*\keycompat[2][pre~0.6]{%
 \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily/#2/\myname}}\vspace{-2pt}\par
 \pgfmanualpdflabel{/#2/\myname}{}%
}
\newcommand*\cmdcompat[2][pre~0.6]{%
 \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily\string#2}}\vspace{-2pt}\par
%  \pgfmanualpdflabel{\string#2}{}%
}
\newcommand*\tipcompat[1][pre~0.6]{%
 \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily\expandafter\tipcompatstrip\currentarrowtype\tipstop}}\vspace{-2pt}\par
%  \pgfmanualpdflabel{/#2/\myname}{}%
}
\newcommand*\tipCompat[2][pre~0.6]{
 \vspace{-8pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily#2}}\vspace{2pt}\par
%  \pgfmanualpdflabel{/#2/\myname}{}%
}
\def\tipcompatstrip ext#1#2\tipstop{#2}%
\newcommand*\handlercompat[2][pre~0.6]{%
 \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily#2}}\vspace{-2pt}\par
 \pgfmanualpdflabel{#2}{}%
}
\newcommand*\mathcompat[2][pre~0.6]{%
 \vspace{-3pt}\item{\color{gray}\small\sffamily #1\kern.5em{\ttfamily#2}}\vspace{-2pt}\par
%  \pgfmanualpdflabel{/#2/\myname}{}%
}
\usepackage{array}
\newcommand*\tikzext{tikz/ext}
\newcommand*\pgfext{pgf/ext}
\newcommand*\pgfforeachext{pgf/foreach/ext}
\newcommand*\utilsext{utils/ext}

\def\decomposetoodeep#1/#2/\nil{%
 % avoid too-deep nesting in index
 \ifx\CurrentLibrary\empty
   \index{#1/#2@\protect\texttt{#1/#2}}%
   \index{\mypath#1/#2@\protect\texttt{#1/#2}}%
 \fi
   \index{#1/#2@\protect\texttt{#1/#2} (\CurrentLibrary)}%
   \index{\mypath#1/#2@\protect\texttt{#1/#2} (\CurrentLibrary)}%
 \fi
 \decomposefindlast/#1/#2/\nil%
}
\def\decompose/#1/#2\nil{%
 \def\test{#2}%
 \ifx\test\empty%
   % aha.
   \ifx\CurrentLibrary\empty
     \index{#1@\protect\texttt{#1} key}%
     \index{\mypath#1@\protect\texttt{#1}}%
   \else
     \index{#1@\protect\texttt{#1} key (\CurrentLibrary)}%
     \index{\mypath#1@\protect\texttt{#1} (\CurrentLibrary)}%
   \fi
   \gdef\myname{#1}%
   \pgfmanualpdflabel{#1}{}
 \else%
   \advance\pgfmanualdecomposecount by1\relax%
   \ifnum\pgfmanualdecomposecount>2\relax%
     \decomposetoodeep#1/#2\nil%
   \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%
 \fi%
}
\def\empty{}
\newcommand*\noLibrary{\gdef\CurrentLibrary{}}
\newcommand*\currentLibrary[1]{\gdef\CurrentLibrary{{\small ext.}#1}}
\noLibrary

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

%\newenvironment{ext_math-function}[1]{
%  \def\mathdefaultname{ext\textunderscore#1}
%  \extractmathfunctionname{ext#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}
%}

\makeatletter
\newenvironment{ext_handler}[1]{
 \begin{pgfmanualentry}
   \extextracthandler#1\@nil%
   \pgfmanualbody
}
{
 \end{pgfmanualentry}
}

\def\extextracthandler#1#2\@nil{%
 \pgfmanualentryheadline{%
   \pgfmanualpdflabel{/handlers/.ext_#1}{}%
   \textbf{Key handler} \meta{key}{\ttfamily/\declare{.ext\textunderscore#1}}#2}%
 \index{ext\textunderscore#1@\protect\texttt{.ext\textunderscore#1} handler}%
 \index{Key handlers!.ext\textunderscore#1@\protect\texttt{.ext\textunderscore#1}}
}
\makeatother

\newcommand*\Beamer{\textsc{Beamer}}