% !TeX spellcheck = en_US
% !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.
%
\newcommand*\tikzextname{Ti\textit kZ-Extensions}
\newcommand*\tikzextversion{0.5.1}
%\includeonly{
%%  tikz-ext-manual-en-library-misc,
%%  tikz-ext-manual-en-library-nodes,
%  tikz-ext-manual-en-pgf-arrows,
%}
\begin{document}
{\colorlet{blue}{black}% links shall be black
\title{\bfseries The \tikzextname\space Package\\
  \large Manual for version \tikzextversion\\[1mm]
\large\href{https://github.com/Qrrbrbirlbel/tikz-extensions}
   {\texttt{https://github.com/Qrrbrbirlbel/tikz-extensions}}
\author{Qrrbrbirlbel}}

\maketitle
\label{table-of-contents}

\tableofcontents
}
\include{tikz-ext-manual-en-intro}

\part{\tikzname\space Libraries}
\label{part:tikz}

These libraries only work with \tikzname.
\vspace{1em}
\begin{center}\tikzsetnextfilename{main-cover}
\begin{tikzpicture}[
  very thick,
  scale=2.7,
  grow cyclic,
  level distance=1cm,
  level/.style={
    level distance/.expanded=\ifnum#1>1 \tikzleveldistance/1.5\else\tikzleveldistance\fi,
    nodes/.expanded={\ifodd#1 fill\else fill=none\fi}
  },
  level 1/.style={sibling angle=120},
  level 2/.style={sibling angle=90},
  level 3/.style={sibling angle=90},
  level 4/.style={sibling angle=45},
  nodes={circle,draw,inner sep=+0pt, minimum size=+5pt},
  ]
\path[rotate=30]
  node {}
  child foreach \cntI in {1,...,3} {
    node {}
    child foreach \cntII in {1,...,2} { 
      node {}
      child foreach \cntIII in {1,...,2} {
        node {}
        child foreach \cntIV in {1,...,2} {
          node {}
          child foreach \cntV in {1,...,2} {}
        }
      }
    }
  };
\end{tikzpicture}
\end{center}

\tikzsetfigurename{calendar-plus}   \include{tikz-ext-manual-en-library-calendar-plus}
\tikzsetfigurename{layers}          \include{tikz-ext-manual-en-library-layers}
\tikzsetfigurename{node-families}   \include{tikz-ext-manual-en-library-node-families}
\tikzsetfigurename{nodes}           \include{tikz-ext-manual-en-library-nodes}
\tikzsetfigurename{paths.arcto}     \include{tikz-ext-manual-en-library-paths.arcto}
\tikzsetfigurename{paths.ortho}     \include{tikz-ext-manual-en-library-paths.ortho}
\tikzsetfigurename{paths.timer}     \include{tikz-ext-manual-en-library-paths.timer}
\tikzsetfigurename{patterns.images} \include{tikz-ext-manual-en-library-patterns.images}
\tikzsetfigurename{positioning-plus}
\include{tikz-ext-manual-en-library-positioning-plus}
\tikzsetfigurename{scalepicture}
\include{tikz-ext-manual-en-library-scalepicture}
\tikzsetfigurename{topaths.arcthrough}
\include{tikz-ext-manual-en-library-topaths.arcthrough}
\tikzsetfigurename{trans}
\include{tikz-ext-manual-en-library-trans}

\part{\pgfname\space Libraries}
\label{part:pgf}
These libraries (should) work with both \pgfname\space and \tikzname.

\begin{center}\tikzsetnextfilename{main-graph}
\begin{codeexample}[width=10cm,preamble=%
  \usetikzlibrary{graphs,graphdrawing,ext.misc} \usegdlibrary{force}]
\tikzset{
  mynode/.style={
    circle, minimum size=10mm, draw, densely dashdotted, thick,
    decide color/.expand once=#1},
  decide color/.style 2 args={
    /utils/TeX/if=c#1
      {/utils/TeX/ifnum={#2<5}{bluelight}{bluedark}}
      {/utils/TeX/ifnum={#2<8}{light}{dark}}},
  light/.style={fill=gray!20},  bluelight/.style={fill=blue!10},
  dark/.style ={fill=gray!60},  bluedark/.style ={fill=blue!30}}
\tikz\graph[
  spring electrical layout, vertical=c2 to p13,
  node distance=1.5cm, typeset=$n_{\tikzgraphnodetext}$,
  nodes={mynode=\tikzgraphnodetext}] {
  % outer ring
  c2 -- {p1, p11, p6};
    p1 -- {p8, c6, p11};
      p8 -- {p3, p10, c6};
       p3 -- {p13, p15, p10};
         p13 -- {p15, c7};
           c7  -- {c3, c4, p15};
           c3  -- {p14, c4};
           p14 -- {p7, c4};
         p7 -- {p9, p2, c4};
       p9 -- {c5, p12, p2};
     c5 -- {c1, p4, p12};
   c1 -- {p6, p4};
  p6 -- {p11, p4};
  % inner ring
  p11 -- {c6, p12, p4};
  p5 -- {c6 -- {p10, p12}, p10 -- p15, p15 -- c4, c4 -- p2, p2 -- p12, p12 -- p4};
};
\end{codeexample}
\end{center}

\tikzsetfigurename{PGF.arrows}\include{tikz-ext-manual-en-pgf-arrows}
\tikzsetfigurename{PGF.trans}\include{tikz-ext-manual-en-pgf-trans}
\tikzsetfigurename{PGF.shapes}%
\include{tikz-ext-manual-en-pgf-shapes-circlearrow}
\include{tikz-ext-manual-en-pgf-shapes-circlecrosssplit}
\include{tikz-ext-manual-en-pgf-shapes-heatmark}
\include{tikz-ext-manual-en-pgf-shapes-rectround}
\include{tikz-ext-manual-en-pgf-shapes-superellipse}
\include{tikz-ext-manual-en-pgf-shapes-uncentered}

\part{Utilities}

\label{part:misc}
\vfill\tikzsetnextfilename{main-misc}
\begin{codeexample}[width=6cm, preamble=\usetikzlibrary{ext.misc}]
\begin{tikzpicture}[
  declare function={bigR(\n)=smallR+.05*\n;},
  declare constant={smallR=1; segments=20;},
  full arc=segments]
\foreach \iN[evaluate={\endRadius=bigR(\iN+1);}, use int=0 to segments-1]
  \filldraw[fill=gray!50] (\iN R:\endRadius)
    arc [radius=\endRadius, start angle=\iN R, delta angle=+1R] -- (\iN R+1R:smallR)
    arc [radius=smallR,       end angle=\iN R, delta angle=-1R] -- cycle;

\node                                              {$\phi^2$};
\node at (north west:{sqrt 2 * bigR(segments/2)})  {$\{\Omega\}_{i=1}^n$};
\node[rotate=-.5R, right] at (-.5R: bigR segments) {$\partial \varphi$};

\tikzset{yshift=-5cm, declare constant={segments=25;}, full arc=segments}
\filldraw[fill=gray!50] (right:smallR)
  \foreach \iN[evaluate={\endRadius=bigR(\iN+1);}, use int=0 to segments-1] {
    -- (\iN R:\endRadius) arc[radius=\endRadius, start angle=\iN R, delta angle=1R]}
    -- (right:smallR)     arc[radius=smallR,     start angle=0,     delta angle=-360];

\node                                              {$\phi^2$};
\node at (north west:{sqrt 2 * bigR(segments/2)})  {$\{\Omega\}_{i=1}^n$};
\node[rotate=-.5R, right] at (-.5R: bigR segments) {$\partial \varphi$};
\end{tikzpicture}
\end{codeexample}
\vfill

\tikzsetfigurename{misc.calendar}\include{tikz-ext-manual-en-calendar}
\tikzsetfigurename{misc.pgffor}\include{tikz-ext-manual-en-library-pgffor}
\tikzsetfigurename{misc.misc}\include{tikz-ext-manual-en-library-misc}

%%% END
\newcommand*{\addPackage}[1]{Added package \texttt{#1-ext}.}
\newcommand*{\addTikz}[1]{Added \tikzname\space library \texttt{ext.#1}.}
\newcommand*{\addPGF}[1]{Added \pgfname\space library \texttt{ext.#1}.}
\newcommand*{\addPGFkeys}[1]{Added \pgfname keys library \texttt{ext.#1}.}
\newcommand*{\addShape}[2][]{Added shape \texttt{\ifx\\#1\\#2\else#1\fi}\\(\pgfname\space library \texttt{ext.shapes.#2}).}
\part{Changelog, Index \& References}
\section*{Changelog}\addcontentsline{toc}{section}{Changelog}
\begin{multicols}{2}\raggedright
\noindent
Version 0.5.1
\begin{itemize}
\item \addPGF{arrows}
\item Bugfix to |ext.pgfkeys-plus|. \cite{GH6}
\end{itemize}
Version 0.5
\begin{itemize}
\item \addPackage{pgffor}
\item \addTikz{nodes}
\item \addTikz{layers}
\item Bugfixes to |ext.calendar-plus|.
\item Allow the original |rectangle| timer with |ext.paths.timer|.
\end{itemize}
Version 0.4.2
\begin{itemize}
\item \addTikz{scalepicture}
\item Bugfixes to |shapes.uncenteredrectangle|, |paths.ortho|, |positioning-plus| and |pgfcalender-ext|.
\end{itemize}
Version 0.4.1
\begin{itemize}
\item Cleaned up directory structure of documentary.
\item \addPGFkeys{pgfkeys-plus}
\item \addShape[uncentered rectangle]{uncenteredrectangle}
\item Fixed |ext.paths.arcto| -- again \cite{GH2}.
\end{itemize}
Version 0.4
\begin{itemize}
\item CTAN version of 0.3.1
\end{itemize}
Version 0.3.1
\begin{itemize}
\item Fixed |ext.paths.ortho| keys |only vertical first| and |only horizontal first|.
\item Moved all (except the |to path|s) to namespace |/tikz/ortho|.
     |/tikz/hvvh| and |/tikz/udlr| are considered deprecated.
\item Fixed |\pgfcalendarjulianyeartoweek|.
\item Added more calendar tests.
\item Added directory structure.
\end{itemize}
Version 0.3
\begin{itemize}
\item \addShape[circle arrow]{circlearrow}
\item \addShape[circle cross split]{circlecrosssplit}
\item \addShape{heatmark}
\item \addShape[rectangle with rounded corners]{rectangleroundedcorners}
\item \addShape{superellipse}
\item \addTikz{node-families.shapes.geometric}
\item Fixed |ext.node-families|' key |size|.
\item Renamed internal macros to use custom namespace starting with |\tikzext@|.
\item Added some references.
\end{itemize}
Version 0.2
\begin{itemize}
\item \addTikz{positioning-plus}
\item \addTikz{node-families}
\end{itemize}
Version 0.1
\begin{itemize}
\item \addTikz{calendar-plus}
\item \addTikz{misc}
\item \addTikz{paths.arcto}
\item \addTikz{paths.ortho}
\item \addTikz{paths.timer}
\item \addTikz{patterns.images}
\item \addTikz{topaths.arcthrough}
\item \addTikz{transformations.mirror}
\item \addPGF{transformations.mirror}
\end{itemize}
\end{multicols}
\printindex

\makeatletter
\def\url#1{%
  \in@{/16595}{#1}%
  \ifin@
    \hyper@linkurl{\expandafter\Hurl\expandafter{\strip@url#1\relax}}{#1}%
  \else
    \hyper@linkurl{\Hurl{#1}}{#1}%
  \fi
}
\def\strip@url#1/16595\relax{#1}
\makeatother
\printbibliography[heading=bibintoc]
%\typeout{Examples: \the\codeexamplecount}%
\end{document}