summaryrefslogtreecommitdiff
path: root/graphics
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-03-16 03:01:42 +0000
committerNorbert Preining <norbert@preining.info>2023-03-16 03:01:42 +0000
commit7126e67439fccc8851427298ecccd01727575864 (patch)
tree20f4e53f9be699907a58dc835b816da74604aec0 /graphics
parentbb077b85d20ee236d733a6d34ce144bd825fcc26 (diff)
CTAN sync 202303160301
Diffstat (limited to 'graphics')
-rw-r--r--graphics/pgf/contrib/tikz-ext/README.md33
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex10
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex9
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-layers.tex68
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex71
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-nodes.tex126
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex4
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-pgffor.tex93
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex18
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex103
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-uncentered.tex116
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib116
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdfbin424759 -> 649739 bytes
-rw-r--r--graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex14
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/pgffor-ext.code.tex73
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/pgfkeyslibraryext.pgfkeys-plus.code.tex14
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/pgflibraryext.shapes.uncenteredrectangle.code.tex56
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.calendar-plus.code.tex15
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.layers.code.tex235
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.misc.code.tex113
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.node-families.code.tex13
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.nodes.code.tex140
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.paths.timer.code.tex10
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.shapes.uncenteredrectangle.code.tex46
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/latex/pgffor-ext.sty44
-rw-r--r--graphics/pgf/contrib/tikz-ext/tex/plain/pgffor-ext.tex13
26 files changed, 1403 insertions, 150 deletions
diff --git a/graphics/pgf/contrib/tikz-ext/README.md b/graphics/pgf/contrib/tikz-ext/README.md
index 33ec46d366..b4aed92f3e 100644
--- a/graphics/pgf/contrib/tikz-ext/README.md
+++ b/graphics/pgf/contrib/tikz-ext/README.md
@@ -10,27 +10,30 @@ Name: Qrrbrbirlbel
## Introduction
-This is not a LaTeX package but a collection of libraries for PGF and TikZ.
+This is not a LaTeX package but a collection of libraries for PGF and TikZ;
-These are
-
- * `ext.calendar-plus`
- * `ext.node-families`
+ * `ext.calendar-plus` extends the `calendar` library with more tests, week numbers and a few goodies.
+ * `ext.layers` allows to put nodes etc on a separate layer without having to use `pgfonlayer`.
+ * `ext.nodes` extends the functionalities around nodes.
+ * `ext.node-families` uses the AUX file to sync the sizes of nodes.
* `ext.node-families.shapes.geometric`
- * `ext.paths.arcto`
- * `ext.paths.ortho`
- * `ext.paths.timer`
- * `ext.patterns.images`
- * `ext.positioning-plus`
- * `ext.topaths.arcthrough`
- * `ext.transformations.mirror`
- * `ext.misc`
+ * `ext.paths.arcto` uses `\pgfpatharcto` to construct an arc *to* a point.
+ * `ext.paths.ortho` provides orthogonal path operations `-|-`, `|-|`, `r-rl`, `r-lr`, `r-du` and `r-ud`.
+ * `ext.paths.timer` adds timers to `rectangle`, `parabola`, `sin` and `cos`.
+ * `ext.patterns.images` allows images to be used as a path‘s pattern.
+ * `ext.positioning-plus` adds more ways to position nodes in reference to each other.
+ * `ext.scalepicture` scales a TikZ picture to the desired dimensions.
+ * `ext.topaths.arcthrough` installs a `to path` that expects a third point that defines an arc.
+ * `ext.transformations.mirror` adds transformations that reflect on arbitrary lines.
+ * `ext.misc` which includes
+ * the PGFKeys library `ext.pgfkeys-plus` and
+ * the PGFFor extension `pgffor-ext`.
* Shapes:
* `ext.shapes.circlearrow`
* `ext.shapes.circlecrosssplit`
* `ext.shapes.heatmark`
* `ext.shapes.rectangleroundedcorners`
* `ext.shapes.superellipse`
+ * `ext.shapes.uncenteredrectangle`
- These were developed in response to questions on tex.stackexchange.com.
- Some of these can be find by searching for my [user id](https://tex.stackexchange.com/search?q=user%3A16595+%22my+library%22). \ No newline at end of file
+ These were developed in response to questions on tex.stackexchange.com or texwelt.de. \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
index 09bd261a21..73f1cbf593 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-calendar.tex
@@ -10,11 +10,11 @@
\section{Calendar: Weeknumbers and more conditionals}
\label{sec:calendar}
-\begin{package}{calendar-ext}
+\begin{texpackage}{calendar-ext}
This package adds week numbers and more conditionals to the \pgfname\space package |pgfcalendar|.
- (Despite the code example above, this package is not set up to work with Con\TeX t.)
+% (Despite the code example above, this package is not set up to work with Con\TeX t.)
\inspiration{WeekNum-Q,CalCond-Q,CalFullWeek-Q}{WeekNum-A,CalCond-A,CalFullWeek-A}
-\end{package}
+\end{texpackage}
%This package extends the |pgfcalendar| package.
@@ -79,9 +79,9 @@ are added. These are
\subsection{Week numbering (ISO~8601)}
\label{calendar:weeknumbering}
-\begin{command}{\pgfcalendarjulianyeartoweek\marg{Julian day}\marg{year}\marg{week counter}}
+\begin{command}{\pgfcalendarjulianyeartoweek\marg{Julian day}\marg{year}\marg{week count}}
This command calculates the week for the \meta{Julian day} of \meta{year}.
- The \meta{week counter} must be a \TeX\space counter.
+ The \meta{week counter} must be a \TeX\space count.
The calculation follows the rule of ISO~8601 where the first week has that
year's first Thursday in it.
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
index f9468175cb..179d641c5b 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-intro.tex
@@ -12,8 +12,8 @@
\section{Usage}
This package is called |tikz-ext|, however,
one can't load it via |\usepackage|.%
-\footnote{Except for \texttt{calendar-ext} of section~\ref{sec:calendar}.}
-Instead, this package consists of multiple
+\footnote{Except for \texttt{calendar-ext} and \texttt{pgffor-ext}.}
+Instead, this package consists mostly of
\pgfname\space and \tikzname\space libraries
which are loaded by either |\usepgflibrary| or |\usetikzlibrary|.
@@ -27,5 +27,10 @@ I don't like reinventing the wheel which is why I've gathered
the solutions of my answers in this package.
\section{Having problems?}
+Note however, that most of these extensions haven't been
+stress-tested properly and might be considered
+experimental.
+
Don't hesitate to open an issue on GitHub.
+You probably found a bug.
\end{multicols} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-layers.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-layers.tex
new file mode 100644
index 0000000000..9a32694abb
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-layers.tex
@@ -0,0 +1,68 @@
+% !TeX root = tikz-ext-manual.tex
+% !TeX spellcheck = en_US
+% 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.
+%
+
+\section{Layers}
+\begin{tikzlibrary}{ext.layers}
+This library extends \tikzname's functionalities to put nodes, edges, matrices and pics
+on a separate layer without having to use the \referenceEnvironmentandIndexO{pgfonlayer} environment.
+
+\textbf{Consider this library experimental.}
+If you can, avoid it and use the |pgfonlayer| environment
+or change the drawing order.
+\end{tikzlibrary}
+
+\begin{multicols}{2}
+\subsection{Internal keys}
+\begin{key}{/tikz-ext/patch=\meta{specification}}
+Since this library is experimental, its functionality needs to be activated explicitly.
+The \meta{specification} is one of
+\begin{itemize}
+\item |node|,
+\item |matrix|,
+\item |pic|%
+ \footnote{Only the normal \referenceKeyandIndexO[/tikz/pics/]{code}
+ can be placed on different layers.
+ Both \referenceKeyandIndexO[/tikz/pics/]{background code}
+ and \referenceKeyandIndexO[/tikz/pics/]{foreground code}
+ will not be affected.},
+\item |edge| or
+\item |all| which applies all the patches at once.
+\end{itemize}
+\end{key}
+
+These keys only work when a patch is applied but don't need to be used
+since the patching activated specific
+\begin{key}{/tikz-ext/layers/in box=\meta{box}}
+\end{key}
+
+\begin{key}{/tikz-ext/layers/on layer=\meta{layer}}
+\end{key}
+
+\subsection{User-level keys}
+\begin{key}{/tikz/node on layer=\meta{layer}}
+\end{key}
+\begin{key}{/tikz/node in box=\meta{box}}
+\end{key}
+
+\begin{key}{/tikz/matrix on layer=\meta{layer}}
+\end{key}
+\begin{key}{/tikz/matrix in box=\meta{box}}
+\end{key}
+
+\begin{key}{/tikz/edge on layer=\meta{layer}}
+\end{key}
+\begin{key}{/tikz/edge in box=\meta{box}}
+\end{key}
+
+\begin{key}{/tikz/pic on layer=\meta{layer}}
+\end{key}
+\begin{key}{/tikz/pic in box=\meta{box}}
+\end{key}
+\end{multicols} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
index 44228a5445..227317e765 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-misc.tex
@@ -11,19 +11,19 @@
\section{And a little bit more}
\begin{tikzlibrary}{ext.misc}
This library adds miscellaneous utilities to \pgfname math, \pgfname\space or \tikzname.
- \inspiration{FullArc-Q,ForeachUse-Q}{FullArc-A,ForeachUse-A}
+ \inspiration{FullArc-Q}{FullArc-A}
\end{tikzlibrary}
\subsection{\pgfname math}
-\begin{multicols}{2}
+\begin{multicols}{2}\
\pgfkeys{/codeexample/every codeexample/.append style={width=3cm}}
\subsubsection{Postfix operator \texttt{R}}
Similar to |\segments[<num>]| in PSTricks, the postfix operator |R| allows the user
to use an arbitrary number of segments of a circle to be used instead of an angle.
-\begin{key}{/tikz/full arc=\meta{num} (default |{}|)}
+\begin{key}{/pgf/full arc=\meta{num} (default |\{\}|)}
The number \meta{num} of segments will be set up.
Using |full arc| with an empty value disables the segmentation and |1R| equals $1^\circ$.
@@ -139,17 +139,20 @@ them in |"|.
\subsection{\pgfname for}
-Instead of |\foreach \var in {start, start + delta, ..., end}| one can use
-|\foreach \var[use int=start to end step delta]|.
-
-\begin{key}{/pgf/foreach/use int=\meta{start}|to|\meta{end}\opt{|step|\meta{delta}}}
-The values \meta{start}, \meta{end} and \meta{delta} are evaluates by \pgfname math at initialization.
-The part |step |\meta{delta} is optional (\meta{delta} = 1).
-\end{key}
-
-\begin{key}{/pgf/foreach/use float=\meta{start}|to|\meta{end}\opt{|step|\meta{delta}}}
-Same as above, however the results are not truncated.
-\end{key}
+This library loads also most of the functions of the
+\referencePackageandIndex{pgffor-ext} of section~\ref{pkg:pgffor-ext}
+on page~\pageref{pkg:pgffor-ext}.
+%Instead of |\foreach \var in {start, start + delta, ..., end}| one can use
+%|\foreach \var[use int=start to end step delta]|.
+%
+%\begin{key}{/pgf/foreach/use int=\meta{start}|to|\meta{end}\opt{|step|\meta{delta}}}
+%The values \meta{start}, \meta{end} and \meta{delta} are evaluates by \pgfname math at initialization.
+%The part |step |\meta{delta} is optional (\meta{delta} = 1).
+%\end{key}
+%
+%\begin{key}{/pgf/foreach/use float=\meta{start}|to|\meta{end}\opt{|step|\meta{delta}}}
+%Same as above, however the results are not truncated.
+%\end{key}
%TODO: edges to and edges through
%\pagebreak
@@ -286,4 +289,44 @@ not all of them are.
\end{tikzpicture}
\end{codeexample}
+\pagebreak
+\subsection{\tikzname}
+\begin{multicols}{2}
+\begin{key}{/tikz/reverse clip=\meta{direction} (default counter clockwise)}
+This key installs a very big rectangle which is either constructed
+|counter clockwise| (like the \referencePathOperationandIndexO{circle}
+path operation) or |clockwise|.
+\end{key}
+\begin{key}{/tikz/clip rule=\meta{direction} (default even odd)}
+This key switches directly\footnote{%
+ Meaning, it directly executes
+ \referenceCommandandIndexO{\pgfseteorule}/%
+ \referenceCommandandIndexO{\pgfsetnonzerorule}
+ and doesn't accumulates where \tikzname\space
+ throws an error.}
+to the specified rule which is
+either |even odd| or |nonzero|.
+This corresponds to the \referenceKeyandIndexO{even odd rule} and
+\referenceKeyandIndexO{nonzero rule} keys.
+\end{key}
+\end{multicols}
+\begin{codeexample}[preamble=\usetikzlibrary{ext.misc},width=6cm]
+\newcommand*\myDiagram[1]{
+ \fill[left color=blue, right color=green] (0, 0) rectangle (2, 1);
+ \clip (1, .5) #1 [reverse clip];
+ \fill[left color=green, right color=blue] (0, 0) rectangle (2, 1);
+}
+\begin{tikzpicture}[radius=.4, row sep=5mm, column sep=5mm]
+\matrix[
+ row 2/.append style={clip rule=even odd},
+ column 1/.append style={reverse clip/.default=clockwise}
+]{
+ \myDiagram{circle[]} &
+ \myDiagram{+(0:.4) arc[start angle=0, delta angle=-360] -- cycle}
+\\
+ \myDiagram{circle[]} &
+ \myDiagram{+(0:.4) arc[start angle=0, delta angle=-360] -- cycle}
+\\};
+\end{tikzpicture}
+\end{codeexample}
\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-nodes.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-nodes.tex
new file mode 100644
index 0000000000..37d4f79de6
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-nodes.tex
@@ -0,0 +1,126 @@
+% !TeX root = tikz-ext-manual.tex
+% !TeX spellcheck = en_US
+% 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.
+%
+
+\section{Nodes}
+\begin{tikzlibrary}{ext.nodes}
+This library extends \tikzname's functionalities when it comes to nodes.
+\inspiration{NodesOnLine-Q, NodesOnCurve-Q}{NodesOnLine-A, NodesOnCurve-A}
+\end{tikzlibrary}
+
+\begin{multicols}{2}
+
+\subsection{Pic as a node}
+\begin{key}{/tikz/pic=\opt{\meta{boolean}} (default true, initially false)}
+This key allows one to use a pic where usually only nodes are accepted,
+for example as a label.
+\begin{codeexample}[preamble=\usetikzlibrary{ext.nodes, ext.misc}]
+\begin{tikzpicture}[
+ slsl/.pic={\draw (-2pt, 1.5pt) -- (2pt, .5pt)
+ (2pt, -1.5pt) -- (-2pt, -.5pt);}]
+\node[draw, minimum width=3cm, minimum height=1cm,
+ label={[pic ] east:slsl},
+ label={[pic, rotate=90] north:slsl},
+ label={[pic ] west:slsl},
+ label={[pic, rotate=-90]south:slsl}]{};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\subsection{Nodes on paths}
+When nodes are placed along paths they don't interrupt
+the path at that place.
+The decoration \referenceLibraryandIndexO{markings}
+and its \referenceKeyandIndexO[/pgf/decoration/]{mark connection node}
+key can help but only works for straight paths and
+doesn't play nicely with arrow tips.
+
+This library provides alternatives.
+These are separated into straight paths, i.\,e. \referencePathOperationandIndexO{--},
+and everything else (including any |to path|).
+
+\subsubsection{Nodes on Lines}
+
+\begin{stylekey}{/tikz/node on line=\opt{\meta{anchor specification}} (default |\{\}|)}
+This installs a \referenceKeyandIndexO{to path} that places \emph{one}
+node along a straight line but connect the line with it.
+
+This allows a node to be placed \emph{on} a straight line without having to
+use |fill = white| or similar tricks to make the line disappear
+beneath the node.
+
+The optional \meta{anchor specification} allows to specify the
+anchors to which the line should connect.
+It allows one or two anchors divided by | and | to be specified.
+\end{stylekey}
+
+\begin{stylekey}{/tikz/nodes on line}
+This is similar to the previous key but allows
+multiple nodes to be placed on a straight line
+\emph{if} they are in the correct order (from start to target),
+don't overlap with each other, the start or the target.
+
+It allows \emph{no} anchor specification.
+\end{stylekey}
+
+\begin{codeexample}[preamble=\usetikzlibrary{ext.nodes, quotes}]
+\tikz[inner sep=.15em, circle, nodes=draw, sloped]
+ \draw[ultra thick, ->, node on line] (0,0) to["0"] (1,1)
+ to["1"] (2,0)
+ to[nodes on line, "2.1" near start, "2.2", "2.3" near end] (5,1);
+\end{codeexample}
+\begin{codeexample}[preamble=\usetikzlibrary{ext.nodes, quotes}]
+\tikz[inner sep=.15em, nodes=draw]
+ \draw[thick, ->, node on line=west and east]
+ (0,0) to["0"] (1,1)
+ to["1"] (2,0)
+ to["2"] (4,1);
+\end{codeexample}
+
+\subsubsection{Nodes on Curves}
+The following keys need the \referenceLibraryandIndexO{intersections}
+and the \referenceLibraryandIndexExt{spath3} \cite{spath3}
+library to be loaded. They will not be automatically
+loaded by this library.
+
+Any \referenceKeyandIndexO[/pgf/]{outer sep} will be ignored.
+
+If you can, use \texttt{fill=\meta{bg color}}
+instead of these keys, it will be much faster and easier.
+
+\begin{stylekey}{/tikz/nodes on curve=\meta{to path} (default line to)}
+Similar to \referenceKeyandIndex{nodes on line}, this key allows
+to have nodes on arbitrary paths.
+
+This is not suitable for paths connecting nodes.
+\end{stylekey}
+
+\begin{stylekey}{/tikz/nodes on curve'=\meta{to path} (default line to)}
+As above but suitable for connecting nodes.
+\end{stylekey}
+
+\begin{codeexample}[preamble=\usetikzlibrary{ext.nodes, intersections, quotes, spath3}]
+\begin{tikzpicture}[ultra thick]
+ \node (A) at (0, 0) {A} ;
+ \node (B) at (3, 0) {B} ;
+ \draw [red, ->, nodes on curve'=bend left]
+ (A) to node[blue,draw]{label} (B)
+ to ["X" {sloped, near start},
+ "Z" {sloped, near end},
+ "Y"] (A);
+\end{tikzpicture}
+\end{codeexample}
+\begin{codeexample}[preamble=\usetikzlibrary{ext.nodes, intersections, quotes, spath3}]
+\tikz[inner sep=.15em, circle, nodes={draw, green}, sloped, ultra thick]
+ \draw[->, nodes on curve=bend left] (0,0) to["0"] (1,1)
+ to["1"] (2,0)
+ to["2" near start, "3", "4" near end] (4,1)
+ -- ++(down:1);
+\end{codeexample}
+\end{multicols} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
index 595a647917..37fcbc241f 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-paths.timer.tex
@@ -31,6 +31,10 @@ For the |rectangle| path operator, the timer starts with |pos = 0| (= |at start|
the starting coordinate in a counter-clockwise direction along the rectangle.
The corners will be at positions 0.0, 0.25, 0.5, 0.75 and 1.0.
+\begin{key}{/tikz/rectangle timer=|line| or |rectangle| (default |rectangle|)}
+By default, the library activates the new (correct) timer for |rectangle|.
+With |rectangle timer = line| the original line timer can be reinstated.
+\end{key}
\begin{codeexample}[width=10cm,preamble=\usetikzlibrary{ext.paths.timer}]
\begin{tikzpicture}[scale=2, every pin edge/.style={latex-, gray}]
\coordinate [label=above right:Target] (A) at (0,0);
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-pgffor.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-pgffor.tex
new file mode 100644
index 0000000000..4d01acc24e
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-pgffor.tex
@@ -0,0 +1,93 @@
+% !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.
+%
+\section{Repeating Things and Other Things}
+\label{pkg:pgffor-ext}
+\begin{texpackage}{pgffor-ext}
+ This package adds small niceties to the \referencePackageandIndexO{pgffor} package.
+ Most of these additions are also available
+ with the \referenceLibraryandIndex{ext.misc} library.
+
+ \textbf{Warning:} Consider this package experimental.
+ At the very least, it will break the |...| notation and possibly gobbles spaces after the body.
+
+ \inspiration{ForeachUse-Q, ForeachNoSep-Q, ForeachXparse-Q}{ForeachUse-A, ForeachNoSep-A, ForeachXparse-A}
+\end{texpackage}
+
+Instead of |\foreach \var in {start, start + delta, ..., end}| one can use
+|\foreach \var[use int=start to end step delta]|.
+
+\begin{key}{/pgf/foreach/use int=\meta{start}|to|\meta{end}\opt{|step|\meta{delta}}}
+The values \meta{start}, \meta{end} and \meta{delta} are evaluates by \pgfname math at initialization.
+The part |step |\meta{delta} is optional (\meta{delta} = 1).
+\end{key}
+
+\begin{key}{/pgf/foreach/use float=\meta{start}|to|\meta{end}\opt{|step|\meta{delta}}}
+Same as above, however the results are not truncated.
+\end{key}
+
+\begin{key}{/pgf/foreach/no separator}
+This key disables any separator between elements of the list.
+Every token is its own element. This also means that Unicode characters
+need to be grouped between |{| and |}| if Lua\TeX\space isn't used.
+Spaces will be ignored.
+
+\begin{codeexample}[preamble=\usetikzlibrary{ext.misc}]
+\newcommand*{\board}[3][]{%
+ \begin{tikzpicture}[#1]
+ \foreach[
+ count=\i from 0,
+ no separator,
+ evaluate=\i as \colX using {mod(\i,#2)},
+ evaluate=\i as \rowY using {int(\i/#2)}
+ ] \elem in {#3} {
+ \draw[black, board/\elem/.try, rectangle timer/.try=line]
+ (\colX,\rowY) rectangle node {\elem} ++(1, 1);}
+ \end{tikzpicture}}
+\board[
+ board/W/.style={fill=red},
+ board/X/.style={fill=blue!50},
+ board/B/.style={fill=green},
+ board/-/.style={fill=gray},
+]{3}{WXX---BXX}
+\end{codeexample}
+\end{key}
+
+\begin{key}{/pgf/foreach/normal list}
+This key simply disables all other special parsers and returns to the original list parser.
+\end{key}
+
+The following keys only work with \LaTeX\ and cannot be used when only the \referenceLibraryandIndex{ext.misc}
+library or the plain\TeX\space |pgffor-ext.tex| are loaded.
+For this, you will need to use |\usepackage{pgffor-ext}|.
+\begin{key}{/pgf/foreach/xparser=\marg{argument specification}\marg{foreach value}}
+This key can be used to specify a \referencePackageandIndeXExt{xparse}
+specification for each element in the list.
+
+For this to work somewhat seamless, the following needs to observed:
+\begin{itemize}
+ \item Every \marg{argument specification} get appended |u,|.
+ This means there's always one additional mandatory argument at the end of every element.
+ \item The \marg{foreach value} needs to correspond to the
+ \referenceKeyandIndexO[/pgf/foreach/]{var}
+ value.
+\end{itemize}
+\end{key}
+
+\begin{key}{/pgf/foreach/xparser Om}
+Sets up a list whose elements may contain an optional argment inside |[]| which correspond to
+two |\foreach| variables, say |\Options/\Text|.
+\end{key}
+
+\begin{handler}{{.list xparse}|=|\marg{argument specification}\marg{comma-separated list of values}}
+ This handler causes the key to be used repeatedly, namely
+ once for every element of the list of values.
+ The \meta{comma-separated list of values} is processed using |\foreach|
+ and the given |xparse| \meta{argument specification} with the aforementioned |xparser| key.
+\end{handler} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
index bf6620a2be..12d96ca7c5 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-body.tex
@@ -8,7 +8,11 @@
% 2. under the GNU Free Documentation License.
%
\newcommand*\tikzextname{Ti\textit kZ-Extensions}
-\newcommand*\tikzextversion{0.4.2}
+\newcommand*\tikzextversion{0.5}
+%\includeonly{
+% tikz-ext-manual-en-library-misc,
+% tikz-ext-manual-en-library-nodes,
+%}
\begin{document}
{\colorlet{blue}{black}% links shall be black
\title{\bfseries The \tikzextname\space Package\\
@@ -64,7 +68,9 @@ These libraries only work with \tikzname.
\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}
@@ -161,9 +167,11 @@ These libraries (should) work with both \pgfname\space and \tikzname.
\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}.}
@@ -172,6 +180,14 @@ These libraries (should) work with both \pgfname\space and \tikzname.
\section*{Changelog}\addcontentsline{toc}{section}{Changelog}
\begin{multicols}{2}\raggedright
\noindent
+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}
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
index 682b83b435..30b21dee6a 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-main-preamble.tex
@@ -1,4 +1,4 @@
-% !TeX spellcheck = en_US
+% !TeX spellcheck = <none>
% !TeX root = tikz-ext-manual.tex
% Copyright 2022 by Qrrbrbirlbel
%
@@ -110,6 +110,7 @@
ext.misc,
ext.node-families,
ext.node-families.shapes.geometric,
+ ext.nodes,
ext.paths.arcto,
ext.paths.ortho,
ext.paths.timer,
@@ -128,12 +129,14 @@
calc,
cd,
fit,
+ intersections,
matrix,
shapes.geometric,
+ spath3,
through,
trees,
}
-
+\usepackage{pgffor-ext}
%% needs Lua!
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{force}
@@ -306,6 +309,15 @@
\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}%
@@ -374,33 +386,75 @@
\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*{\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}}
\colorlet{originalindex}{gray}
-\newcommand*{\original}[1]{\textcolor{originalindex}{#1}}
+\newcommand*{\original}[1]{\textcolor{originalindex}{#1}}%
\newcommand*{\originalsuffix}{}%\textsuperscript{\textdagger}}%\normalsize
\newcommand*{\originalprefix}{}%\footnotesize
-%\newcommand*{\original}[1]{\textcolor{originalindex}{#1}}
-%\newcommand*{\original}[1]{#1}%\textcolor{originalindex}{#1}}
-%\newcommand*{\originalsuffix}{}%\textsuperscript{\color{blue}\tikzname}}
-%\DeclareRobustCommand*{\originalprefix}{\smash{\footnotesize\llap{\textbullet\space}}}
+\newcommand*{\indexPackageExt}[1]{%
+ \begingroup
+% \originalExternals
+ \index{#1@\originalExternals{\originalprefix\protect\texttt{\original{#1}} package\originalsuffix}}%
+ \index{Packages and files!#1@\originalExternals{\originalprefix\protect\texttt{\original{#1}}\originalsuffix}}%
+ \endgroup
+}
+\newcommand*{\indexLibraryExt}[1]{%
+ \index{#1@\originalExternals{\originalprefix\protect\texttt{\original{#1}} library\originalsuffix}}%
+ \index{Libraries!#1@\originalExternals{\originalprefix\protect\texttt{\original{#1}}\originalsuffix}}%
+}
+\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.
+ original functionalities of \pgfname/\tikzname\space
+ and \originalExternals{\originalprefix\original{references}\originalsuffix} to functionalities outside of \pgfname/\tikzname.
\bigskip
}
\makeatother
@@ -417,4 +471,33 @@
\newcommand*{\inspiration}[2]{%
\par\textbf{Q\,\&\,A:} \cite{#1} \& \cite{#2}\par
}
-\newcommand*\inspirationQ[1]{\par\textbf{Q:} \cite{#1}} \ No newline at end of file
+\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}
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-uncentered.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-uncentered.tex
index cb79e4ac7b..818408a9aa 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-uncentered.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-uncentered.tex
@@ -9,10 +9,10 @@
%
\section{Shape: Uncentered Rectangle}
-\begin{pgflibrary}{ext.shapes.uncenteredrectangle}
+\begin{purepgflibrary}{ext.shapes.uncenteredrectangle}
A rectangle that has a variable horizontal center with three node parts.
\inspiration{UncRectCD-Q,UncRectForest-Q}{UncRectCD-A,UncRectForest-A}
-\end{pgflibrary}
+\end{purepgflibrary}
\begin{shape}{uncentered rectangle}
For some alignment problems, this shape could be useful.
@@ -31,54 +31,21 @@ calculate the appropriate point on the border.
In the picture below, this are marked red.
\end{key}
+\begin{key}{/pgf/uncentered rectangle use saved center=\meta{true}\textrm{ or }\meta{false} (default true)}
+When this is set to true, the border anchors will use the horizontal center that was used when
+the node was created.
+\end{key}
+
For support of the \referenceLibraryandIndexO{cd} library of the |tikz-cd| package,
this shape also supports a dynamic $y$ value for its anchors |center|, |west| and |east|.
\begin{key}{/pgf/uncentered rectangle center yshift=\meta{dimension} (initially \{\})}
This determines the distance between the baseline and the |center| anchors.
- If \meta{dimension} is empty, the real center will be used which is the default.
+ If \meta{dimension} is empty, the real vertical center will be used.
For use with |cd|, set this to |axis_height|.
- Due to a bug with \referenceKeyandIndexO{execute at end node}
- this needs a lot of fixing to be able to use in a commutative diagram, though.
-
-\tikzexternaldisable
-\catcode`\|=12
-\begin{codeexample}[leave comments, preamble=\usetikzlibrary{cd, ext.shapes.uncenteredrectangle}]
-\makeatletter
-\tikzcdset{
- every diagram/.append style={
- /pgf/uncentered rectangle center=text,
- /tikz/math align/.style={
- shape=uncentered rectangle,
- /pgf/uncentered rectangle center yshift=axis_height,
- commutative diagrams/math mode=false},
- /tikz/math align left/.style={
- math align,
- /utils/exec={\def\mathalign####1=####2;{$####2$\nodepart{left}$####1={}$}}},
- /tikz/math align right/.style={
- math align,
- /utils/exec={\def\mathalign####1=####2;{$####1$\nodepart{right}${}=####2$}}},
- /tikz/matrix of math nodes/.style={
- matrix of nodes,
- nodes={
- execute at begin node=\iftikzcd@mathmode$\fi,
- execute at end node =\iftikzcd@mathmode$\fi}}}}
-\makeatother
-\tikzcdset{install C shortcut/.code=\newcommand*\C[1]{C_{\%_{##1}}}}
-\begin{tikzcd}[
- install C shortcut,
- sep=tiny,
- arrows={-, gray},
- cells={font=\strut, inner xsep=.2ex, inner ysep=.1ex}
-]
-\C{1} \drar & & |[math align right]| \mathalign m_{r_1} = \C{2}-C_\%; \dlar\\
- & C_\% \\
-\C{2} \urar & & |[math align right]| \mathalign m_{r_2} = \C{1}-C_\%; \ular
-\end{tikzcd}
-\end{codeexample}
\end{key}
-\pagebreak
+%\pagebreak
\begin{codeexample}[preamble=\usepgflibrary{ext.shapes.uncenteredrectangle}]
\begin{tikzpicture}[style north/.style=red, style south/.style=red, style center/.style=red, style base/.style=red, style mid/.style=red]
\Huge
@@ -96,4 +63,69 @@ this shape also supports a dynamic $y$ value for its anchors |center|, |west| an
\end{tikzpicture}
\end{codeexample}
\end{shape}
+
+\begin{tikzlibrary}{ext.shapes.uncenteredrectangle}
+This library extends the \referenceLibraryandIndexO{cd} library (from the |tikz-cd| package)
+so that it can be used with the |uncentered rectangle| shape.
+
+\inspirationQ{UncRectCD2-Q}
+\end{tikzlibrary}
+
+This library provides only one key.
+\begin{stylekey}{/tikz-ext/tikz-cd fix}
+This key installs various \enquote{fixes} to the \referenceKeyandIndexO[/tikz/commutative diagrams/]{every diagram} style:
+
+\begin{itemize}
+\item Firstly, is defines a \referenceKeyandIndexO{matrix of math nodes} key (only for the \referenceEnvironmentandIndexO{tikzcd} environment)
+ which allows to toggle the \referenceKeyandIndexO[/tikz/commutative diagrams/]{math mode} for each node.%
+ \footnote{Due to a bug with \referenceKeyandIndexO{execute at end node}, the \enquote{automatic} math mode in matrices can't be used
+ with multipart nodes.}
+\item The helpful macro |\uncrec| will be installed.
+\begin{command}{\uncrec\marg{left}\marg{center}\marg{right}}
+ When used as the content of |uncentered rectangle|,
+ the node parts will be setup so that \meta{left} is in the left part of the node part etc.
+\end{command}
+\item Since math mode will be disabled with the |uncentered rectangle|, it is automatically enabled for each node part with |\uncrec| but it can be disabled with the following key.
+\begin{key}{/tikz/uncrec math mode=\meta{true}\textrm{ or }\meta{false} (default true)}
+When enabled the contents of |\uncrec| will be set in math mode.
+\end{key}
+\item For easy access to the |uncentered rectangle| shape, the following keys are available inside a Commutative Diagram.
+\begin{stylekey}{/tikz/uncrec=\meta{left}\textrm{ or }\meta{text}\textrm{ or }\meta{right}\textrm{ or }\meta{real} (initially text)}
+This key sets the shape to |uncentered rectangle| and \referenceKeyandIndex[/pgf/]{uncentered rectangle center} to its argument.
+\end{stylekey}
+\begin{stylekey}{/tikz/commutative diagrams/install uncentered rectangle in columns=\meta{column}}
+All nodes in column \meta{column} will be set to the |uncentered rectangle| shape.
+\end{stylekey}
+\end{itemize}
+\end{stylekey}
+
+\begingroup
+\tikzexternaldisable
+%\catcode`\|=12
+\begin{codeexample}[leave comments, width=8cm, preamble=\usetikzlibrary{cd, ext.shapes.uncenteredrectangle}]
+\tikzcdset{/tikz-ext/tikz-cd fix}
+\newcommand*\C[1]{C_{\%_{#1}}}
+\begin{tikzcd}[
+ sep=tiny,
+ arrows={-, gray},
+ cells={font=\strut, inner xsep=.2ex, inner ysep=.1ex},
+ install uncentered rectangle in column=3
+]
+\C{1} \drar & & \uncrec{}{m_{r_1}}{{} = \C{2}-C_\%} \dlar\\
+ & C_\% \\
+\C{2} \urar & & \uncrec{}{m_{r_2}}{{} = \C{1}-C_\%} \ular
+\end{tikzcd}
+\end{codeexample}
+\begin{codeexample}[leave comments, width=8cm, preamble=\usetikzlibrary{cd, ext.shapes.uncenteredrectangle}]
+\tikzset{/tikz-ext/tikz-cd fix}
+\begin{tikzcd}[install uncentered rectangle in column/.list={1,2}]
+ \uncrec{S \supset {}}{U_\tau}{} \arrow[r, "\varphi_0"]
+ \arrow[d, "\tau", "\sim"']
+& \uncrec{}{U_\pi}{{} \subset T} \arrow[d, "\pi", "\sim"']
+\\
+ \uncrec{\operatorname{Bl}_{(0,0)}(\mathbb{A}^2) \supset{}}{V_\tau}{} \arrow[r, "\epsilon"]
+& \uncrec{}{V_\pi}{{} \subset \mathbb{A}^2}
+\end{tikzcd}
+\end{codeexample}
+\endgroup
\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib
index 60cf094472..25c736c7cd 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib
@@ -378,4 +378,120 @@
year = {2022},
}
+'
+@Online{ForeachNoSep-Q,
+ author = {daan},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/666263/string-conditional-tikz/666265#666265:text/html},
+ month = nov,
+ title = {String conditional tikz},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/q/666263/16595},
+ urldate = {2022-12-03},
+ year = {2022},
+}
+
+@Online{ForeachNoSep-A,
+ author = {Qrrbrbirlbel},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/666263/string-conditional-tikz/666265#666265:text/html},
+ month = nov,
+ title = {Answer to \enquote{String conditional tikz}},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/a/666265/16595},
+ urldate = {2022-12-03},
+ year = {2022},
+}
+
+'
+@Online{ForeachXparse-Q,
+ author = {uulinux},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/618047/is-there-a-package-to-implement-this-style-of-register-diagrams-with-field-desc/667155#667155:text/html},
+ month = oct,
+ title = {Is there a package to implement this style of "Register diagrams with field descriptions"},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/q/618047/16595},
+ urldate = {2022-12-03},
+ year = {2021},
+}
+
+@Online{ForeachXparse-A,
+ author = {Qrrbrbirlbel},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/618047/is-there-a-package-to-implement-this-style-of-register-diagrams-with-field-desc/667155#667155:text/html},
+ month = dec,
+ title = {Answer to \enquote{Is there a package to implement this style of "Register diagrams with field descriptions"}},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/a/667155/16595},
+ urldate = {2022-12-03},
+ year = {2022},
+}
+
+'
+@Software{spath3,
+ abstract = {{TikZ}/{PGF} package for manipulating soft paths, includes the knots and calligraphy {TikZ} libraries.},
+ author = {Stacey, Andrew},
+ month = dec,
+ note = {original-date: 2014-05-26T12:08:12Z},
+ title = {spath3 {TikZ} library},
+ url = {https://github.com/loopspace/spath3},
+ urldate = {2022-12-10},
+ year = {2022},
+}
+
+'
+@Online{NodesOnLine-Q,
+ author = {Dimitris},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/667338/draw-two-concentric-circles-and-a-shaded-area-with-associated-text/667341#667341:text/html},
+ month = dec,
+ title = {Draw two concentric circles and a shaded area with associated text},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/q/667338/16595},
+ urldate = {2022-12-12},
+ year = {2022},
+}
+
+@Online{NodesOnLine-A,
+ author = {Qrrbrbirlbel},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/667338/draw-two-concentric-circles-and-a-shaded-area-with-associated-text/667341#667341:text/html},
+ month = dec,
+ title = {Answer to \enquote{Draw two concentric circles and a shaded area with associated text}},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/a/667341/16595},
+ urldate = {2022-12-12},
+ year = {2022},
+}
+
+'
+@Online{NodesOnCurve-Q,
+ author = {Liblit, Ben},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/99945/path-with-both-mark-connection-node-and-arrow-tip/667487#667487:text/html},
+ month = feb,
+ title = {path with both mark connection node and arrow tip},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/q/99945/16595},
+ urldate = {2022-12-12},
+ year = {2013},
+}
+
+@Online{NodesOnCurve-A,
+ author = {Qrrbrbirlbel},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/99945/path-with-both-mark-connection-node-and-arrow-tip/667487#667487:text/html},
+ month = dec,
+ title = {Answer to \enquote{path with both mark connection node and arrow tip}},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/a/667487/16595},
+ urldate = {2022-12-12},
+ year = {2022},
+}
+
+'
+@Online{UncRectCD2-Q,
+ author = {sro5h},
+ file = {Snapshot:https\://tex.stackexchange.com/questions/652540/achieve-desired-alignment-of-arrows-in-tikz-cd-diagram:text/html},
+ month = jul,
+ title = {Achieve desired alignment of arrows in tikz-cd diagram},
+ titleaddon = {{TeX} - {LaTeX} Stack Exchange},
+ url = {https://tex.stackexchange.com/q/652540/16595},
+ urldate = {2023-02-19},
+ year = {2022},
+}
+
@Comment{jabref-meta: databaseType:bibtex;}
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
index 855ee19374..c04e209f81 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
index 3070585487..1f2400847a 100644
--- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
+++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex
@@ -11,18 +11,22 @@
%
\documentclass[a4paper,doc2,landscape]{ltxdoc}
+
\input{tikz-ext-manual-en-main-preamble.tex}
\usetikzlibrary{external}
+%\newif\iftikzextmanualexternalize
+%\tikzextmanualexternalizetrue
+%\iftikzextmanualexternalize
\tikzexternalize[
prefix=tikz/,
% mode=convert with system call,
%mode=list and make,
%mode=list only,export=true,% simply skips EVERY picture -> good for debugging the text.
]
-% \tikzexternalenable
- \tikzexternaldisable
- \tikzifexternalizing{
- \pgfkeys{/pdflinks/codeexample links=false}
- }{}
+ \tikzexternalenable
+ \tikzifexternalizing{%
+ \pgfkeys{/pdflinks/codeexample links=false}%
+ }{}%
+%\fi
\input{tikz-ext-manual-en-main-body.tex}
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/pgffor-ext.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/pgffor-ext.code.tex
new file mode 100644
index 0000000000..b4d9e60f50
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/pgffor-ext.code.tex
@@ -0,0 +1,73 @@
+% 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.
+%
+
+%% foreach
+%% http://tex.stackexchange.com/a/126418/16595
+%% instead of \foreach \var in {start, start + delta, ..., end}
+%% this allows to use \foreach[use int={start to end step delta}] without(!) a list in {}
+%% the values start, end and delta are evaluated by PGFmath at the start of the loop.
+%% In addition to use int, there's also use float.
+\newif\iftikzext@pgf@foreach@no@list
+\pgfqkeys{/pgf/foreach}{
+ normal list/.code={%
+ \tikzext@pgf@foreach@no@listfalse
+ \def\pgffor@scan{\pgfutil@ifnextchar({\pgffor@scanround}{\pgffor@scanone}}%
+ },
+ no separator/.code={% token for token
+ \def\pgffor@scan@custom##1{%
+ \def\pgffor@value{##1}%
+ \pgffor@scanned
+ }%
+ \def\pgffor@scan@custom@comma,{%
+ \pgfutil@ifnextchar\pgffor@stop
+ \pgffor@scanone
+ {\pgffor@scan@custom,}%
+ }%
+ \def\pgffor@scan{%
+ \pgfutil@ifnextchar,%
+ \pgffor@scan@custom@comma
+ {%
+ \pgfutil@ifnextchar\pgffor@stop
+ \pgffor@scanone
+ \pgffor@scan@custom
+ }%
+ }%
+ },
+ use int/.code={%
+ \tikzext@pgf@foreach@no@list@parse@to\pgfmathtruncatemacro#1\pgffor@stop
+ },
+ use float/.code={%
+ \tikzext@pgf@foreach@no@list@parse@to\pgfmathsetmacro#1\pgffor@stop
+ }
+}
+
+\def\tikzext@pgf@foreach@no@list@parse@to#1#2to#3\pgffor@stop{%
+ \tikzext@pgf@foreach@no@listtrue
+ #1\foreachStart{#2}%
+ \pgfutil@in@{step}{#3}
+ \ifpgfutil@in@
+ \tikzext@pgf@foreach@no@list@parse@step{#1}#3\pgffor@stop
+ \else
+ \tikzext@pgf@foreach@no@list@parse@step{#1}#3step1\pgffor@stop
+ \fi
+ \edef\tikzext@pgf@foreach@no@list@list{\foreachStart,\foreachSecond,...,\foreachEnd}%
+}
+\def\tikzext@pgf@foreach@no@list@parse@step#1#2step#3\pgffor@stop{%
+ #1\foreachEnd{#2}%
+ #1\foreachSecond{\foreachStart+#3}%
+}
+\def\pgffor@vars{%
+ \pgfutil@ifnextchar i{\pgffor@@vars@end}{%
+ \pgfutil@ifnextchar[{\pgffor@@vars@opt}{%]
+ \pgfutil@ifnextchar/{\pgffor@@vars@slash@gobble}{%
+ \iftikzext@pgf@foreach@no@list\expandafter\pgfutil@firstoftwo\else
+ \expandafter\pgfutil@secondoftwo\fi
+ {\tikzext@pgf@foreach@no@listfalse\pgffor@macro@list\tikzext@pgf@foreach@no@list@list}
+ {\pgffor@@vars}}}}}%
+
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/pgfkeyslibraryext.pgfkeys-plus.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/pgfkeyslibraryext.pgfkeys-plus.code.tex
index 49aedb64c6..50cbe7a60c 100644
--- a/graphics/pgf/contrib/tikz-ext/tex/generic/pgfkeyslibraryext.pgfkeys-plus.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/pgfkeyslibraryext.pgfkeys-plus.code.tex
@@ -88,13 +88,22 @@
},
%% http://tex.stackexchange.com/a/144187/16595
%% key/.List={(point-1),(point-2),(point-...),(point-6)} will call
- %% key=(point-1)(point-2)(point-3)(point-4)(point-5),(point-6)
+ %% key=(point-1)(point-2)(point-3)(point-4)(point-5)(point-6)
.List/.code=%
\let\pgfkeys@global@temp\pgfutil@empty
\foreach\pgfkeys@temp in{#1}{%
\expandafter\pgfutil@g@addto@macro\expandafter\pgfkeys@global@temp\expandafter{\pgfkeys@temp}%
}%
- \expandafter\pgfkeys@exp@call\expandafter{\pgfkeys@global@temp}%
+ \expandafter\pgfkeys@exp@call\expandafter{\pgfkeys@global@temp},
+ .--/.code=% decrements a value (only TeX integers!)
+ \pgfkeyssetevalue{\pgfkeyscurrentpath}
+ {\the\numexpr\pgfkeysvalueof{\pgfkeyscurrentpath}-1\relax},
+ .++/.code=% increments a value (only TeX integers!)
+ \pgfkeyssetevalue{\pgfkeyscurrentpath}
+ {\the\numexpr\pgfkeysvalueof{\pgfkeyscurrentpath}+1\relax},
+ .value/.code=% copies the value of one key to another w/o expanding it
+ \pgfkeysgetvalue{#1}\pgfkeys@temp
+ \expandafter\pgfkeys@exp@call\expandafter{\pgfkeys@temp}}
}
\pgfqkeys{/utils}{
@@ -134,6 +143,7 @@
\pgfutil@ifempty{#1}{\pgfkeysalso{#2}}{\pgfkeysalso{#3}}%
},
tex/.search also=/utils/TeX,
+ loops/do until/.code 2 args={\pgfutil@loop\pgfkeysalso{#1}#2\relax\pgfutil@repeat}%
}
\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/pgflibraryext.shapes.uncenteredrectangle.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/pgflibraryext.shapes.uncenteredrectangle.code.tex
index 182ebbbcb7..f0ed9c5c46 100644
--- a/graphics/pgf/contrib/tikz-ext/tex/generic/pgflibraryext.shapes.uncenteredrectangle.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/pgflibraryext.shapes.uncenteredrectangle.code.tex
@@ -12,7 +12,11 @@
\let\pgfnodepartleftbox\pgfnodeparttwobox
\let\pgfnodepartrightbox\pgfnodepartthreebox
}
+
+\newif\iftikzext@uncenteredrectangle@usesavedcenter
+
\pgfset{
+ uncentered rectangle use saved center/.is if=tikzext@uncenteredrectangle@usesavedcenter,
uncentered rectangle center yshift/.initial=,
uncentered rectangle center/@center/.initial=2,
uncentered rectangle center/.is choice,
@@ -176,8 +180,16 @@
\advance\pgf@y by \pgf@ya
}%
%
+ \savedmacro\center{%
+ \pgfkeysgetvalue{/pgf/uncentered rectangle center/@center}\center
+ }
\anchor{center}{%
- \ifcase\pgfkeysvalueof{/pgf/uncentered rectangle center/@center}\relax
+ \ifcase
+ \iftikzext@uncenteredrectangle@usesavedcenter
+ \center
+ \else
+ \pgfkeysvalueof{/pgf/uncentered rectangle center/@center}%
+ \fi\relax
\realCenter\or
\leftCenter\or
\middleCenter\or
@@ -203,7 +215,8 @@
\pgfmathsetlength\pgf@y{.5ex}}%
\anchor{base}{%
\csname pgf@anchor@uncentered rectangle@center\endcsname
- \pgf@y=0pt }%
+ \pgf@y=0pt
+ }%
\anchor{left mid} {\leftCenter \pgfmathsetlength\pgf@y{+.5ex}}
\anchor{text mid} {\middleCenter\pgfmathsetlength\pgf@y{+.5ex}}
\anchor{right mid} {\rightCenter \pgfmathsetlength\pgf@y{+.5ex}}
@@ -273,30 +286,51 @@
\pgf@xa=\pgf@x
\pgf@ya=\pgf@y
% xc/yc is "center"
- \pgf@sh@reanchor{uncentered rectangle}{center}%
+ \pgf@process{\csname pgf@anchor@uncentered rectangle@center\endcsname}%
\pgf@xc=\pgf@x
\pgf@yc=\pgf@y
\ifdim\pgf@xa<0pt
% left side
\southwest
- \advance\pgf@x by -\pgf@xc
- \advance\pgf@y by -\pgf@yc
- \pgf@x=-\pgf@x
- \pgf@y=-\pgf@y
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \advance\pgf@xb by -\pgf@xc
+ \ifdim\pgf@ya<0pt
+ % south west side
+ \advance\pgf@yb by -\pgf@yc
+ \pgf@yb=-\pgf@yb
+ \else
+ % north west side
+ \northeast
+ \pgf@yb=\pgf@y
+ \advance\pgf@yb by -\pgf@yc
+ \fi
+ \pgf@xb=-\pgf@xb
\edef\pgf@marshal{%
\noexpand\pgfpointborderrectangle
{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}
- {\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}%
}%
\else
% right side
\northeast
- \advance\pgf@x by -\pgf@xc
- \advance\pgf@y by -\pgf@yc
+ \pgf@xb=\pgf@x
+ \pgf@yb=\pgf@y
+ \advance\pgf@xb by -\pgf@xc
+ \ifdim\pgf@ya>0pt
+ % north east side
+ \advance\pgf@yb by -\pgf@yc
+ \else
+ % south east side
+ \southwest
+ \pgf@yb=\pgf@y
+ \advance\pgf@yb by -\pgf@yc
+ \pgf@yb=-\pgf@yb
+ \fi
\edef\pgf@marshal{%
\noexpand\pgfpointborderrectangle
{\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}
- {\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}%
+ {\noexpand\pgfqpoint{\the\pgf@xb}{\the\pgf@yb}}%
}%
\fi
\pgf@process{\pgf@marshal}%
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.calendar-plus.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.calendar-plus.code.tex
index 195ecf9414..1ad4c9fe52 100644
--- a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.calendar-plus.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.calendar-plus.code.tex
@@ -13,18 +13,33 @@
\def\tikz@lib@cal@xshift{\pgfkeysvalueof{/tikz/day xshift}}
\def\tikz@lib@cal@yshift{\pgfkeysvalueof{/tikz/day yshift}}
+\pgfkeyslet{/tikz/day xshift/.@cmd}\@undefined
+\pgfkeyslet{/tikz/day xshift/.@body}\@undefined
+\pgfkeyslet{/tikz/day xshift/.@def}\@undefined
+\pgfkeyslet{/tikz/day yshift/.@cmd}\@undefined
+\pgfkeyslet{/tikz/day yshift/.@body}\@undefined
+\pgfkeyslet{/tikz/day yshift/.@def}\@undefined
\tikzset{day xshift/.initial=3ex,day yshift/.initial=3.5ex}
% Shift between months
\def\tikz@lib@cal@month@xshift{\pgfkeysvalueof{/tikz/month xshift}}
\def\tikz@lib@cal@month@yshift{\pgfkeysvalueof{/tikz/month yshift}}
+\pgfkeyslet{/tikz/month xshift/.@cmd}\@undefined
+\pgfkeyslet{/tikz/month xshift/.@body}\@undefined
+\pgfkeyslet{/tikz/month xshift/.@def}\@undefined
+\pgfkeyslet{/tikz/month yshift/.@cmd}\@undefined
+\pgfkeyslet{/tikz/month yshift/.@body}\@undefined
+\pgfkeyslet{/tikz/month xshift/.@def}\@undefined
\tikzset{month xshift/.initial=9ex,month yshift/.initial=9ex}
% Internal option for storing the "width" of a calendar as a number of
% days
\def\tikz@lib@cal@width{\pgfkeysvalueof{/tikz/tikz@lib@cal@width}}
+\pgfkeyslet{/tikz/tikz@lib@cal@width/.@cmd}\@undefined
+\pgfkeyslet{/tikz/tikz@lib@cal@width/.@body}\@undefined
+\pgfkeyslet{/tikz/tikz@lib@cal@width/.@def}\@undefined
\tikzset{tikz@lib@cal@width/.initial=1}
% Weeks
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.layers.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.layers.code.tex
new file mode 100644
index 0000000000..c981190f4d
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.layers.code.tex
@@ -0,0 +1,235 @@
+% 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.
+%
+
+\pgfdeclarelayer{discard}
+
+\def\tikzext@layers@swapfirstsetbox#1\setbox#2\tikzext@stop{%
+ #1\tikzext@layers@setbox@which#2%
+}
+\let\tikzext@layers@setbox@which\setbox
+
+\def\tikzshowdiscardlayeranyway{\box\pgf@layerbox@discard}
+\tikzset{
+ discard layer/.code=\expandafter\let\csname pgf@layerbox@#1\endcsname\pgfutil@voidb@x,
+ discard layer global/.code=\expandafter\global\expandafter\let\csname pgf@layerbox@#1\endcsname\pgfutil@voidb@x,
+}
+\def\tikzext@layers@whichbox{\tikz@figbox}%
+\pgfqkeys{/tikz-ext/layers}{
+ in box/.code={%
+ \expandafter\ifx\tikzext@layers@whichbox#1%
+ \pgfutil@packagewarning{tikz-ext}{Layer is already set. Setting will be skipped.}%
+ \else
+ \def\tikzext@layers@whichbox{#1}%
+ \def\tikz@whichbox{#1}%
+ \def\tikzext@layers@setbox@which{\global\setbox}%
+ \fi
+ },
+ on layer/.style={
+ /tikz-ext/layers/in box/.expand once=\csname pgf@layerbox@#1\endcsname
+ },
+ discard/.style={
+ /tikz-ext/layers/on layer=discard
+ },
+ @common patch/.style={
+ /tikz/behind path/.append code =\let\tikzext@layers@setbox@which\setbox,
+ /tikz/in front of path/.append code =\let\tikzext@layers@setbox@which\setbox,
+ /tikz-ext/layers/@common patch/.code=%
+ },
+ patch/.is choice,
+ patch/all/.style={
+ /tikz-ext/layers/@common patch,
+ /tikz-ext/layers/patch/node,
+ /tikz-ext/layers/patch/matrix,
+ /tikz-ext/layers/patch/pic,
+ /tikz-ext/layers/patch/edge,
+ },
+ patch/node/.style={%
+ /utils/exec=%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\tikz@fig@continue
+ \expandafter\expandafter\expandafter{\expandafter\tikzext@layers@swapfirstsetbox\tikz@fig@continue\tikzext@stop},%
+ /tikz-ext/layers/@common patch,
+ /tikz-ext/layers/patch/node/.code=\pgfutil@packagewarning{tikz-ext}{You can't apply the layers patch twice.},
+ /tikz/discard node/.style ={/tikz-ext/layers/discard},
+ /tikz/node on layer/.style={/tikz-ext/layers/on layer={##1}},
+ /tikz/node in box/.style ={/tikz-ext/layers/in box={##1}},
+ },
+ patch/matrix/.style={%
+ /utils/exec=%
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter\tikz@do@matrix
+ \expandafter\expandafter\expandafter{\expandafter\tikzext@layers@swapfirstsetbox\tikz@do@matrix\tikzext@stop},%
+ /tikz-ext/layers/@common patch,
+ /tikz-ext/layers/patch/matrix/.code=\pgfutil@packagewarning{tikz-ext}{You can't apply the layers patch twice.},
+ /tikz/execute at begin matrix={% in case patched node/edge/pic is used inside matrix
+ \let\tikzext@layers@setbox@which\setbox
+ \def\tikz@whichbox{\tikz@figbox}%
+ \pgfkeys{/tikz-ext/layers/in box/.code=\pgfutil@packageerror{tikz-ext}{Layers inside a matrix can't be used.}}%
+ },
+ /tikz/discard matrix/.style ={/tikz-ext/layers/discard},
+ /tikz/matrix on layer/.style={/tikz-ext/layers/on layer={##1}},
+ /tikz/matrix in box/.style ={/tikz-ext/layers/in box={##1}},
+ },
+ patch/edge/.style={%
+ /utils/exec=\let\tikz@do@edge\tikzext@layers@tikz@do@edge,
+ /tikz-ext/layers/@common patch,
+ /tikz-ext/layers/patch/edge/.code=\pgfutil@packagewarning{tikz-ext}{You can't apply the layers patch twice.},
+ /tikz/discard edge/.style={/tikz-ext/layers/discard},
+ /tikz/edge on layer/.style={
+ /tikz-ext/layers/on layer={##1}
+ },
+ /tikz/edge in box/.style={/tikz-ext/layers/in box={##1}},
+ },
+ patch/pic/.style={%
+ /utils/exec=\let\tikz@subpicture@handle@\tikzext@layers@tikz@subpicture@handle@,
+ /tikz-ext/layers/@common patch,
+ /tikz-ext/layers/patch/pic/.code=\pgfutil@packagewarning{tikz-ext}{You can't apply the layers patch twice.},
+ /tikz/discard pic/.style={/tikz-ext/layers/discard},
+ /tikz/pic on layer/.style={/tikz-ext/layers/on layer={##1}},
+ /tikz/pic in box/.style={/tikz-ext/layers/in box={##1}},
+ }
+}
+\def\tikzext@layers@tikz@do@edge{%
+ \ifx\tikz@edge@macro\pgfutil@empty%
+ \tikzext@layers@setbox@which\tikz@whichbox=\hbox\bgroup%
+ \unhbox\tikz@whichbox%
+ \hbox\bgroup
+ \bgroup%
+ \pgfinterruptpath%
+ \pgfscope%
+ \let\tikz@transform=\pgfutil@empty%
+ \let\tikz@options=\pgfutil@empty%
+ \tikz@clear@rdf@options%
+ \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@do@rdf@pre@options%
+ \pgfidscope%
+ \tikz@do@rdf@post@options%
+ \tikz@transform%
+ \let\tikz@transform=\relax%
+ % Typeset node:
+ \let\tikz@after@path\pgfutil@empty%
+ \tikz@atbegin@to%
+ \tikz@enable@edge@quotes%
+ % in case patched nodes/edges/pics/matrices are used
+ \let\tikzext@layers@setbox@which\setbox
+ \def\tikz@whichbox{\tikz@figbox}%
+ \path[style=every edge]\expandafter[\tikz@@to@local@options](\tikztostart)\tikz@to@path
+ \pgfextra{\global\let\tikz@after@path@smuggle=\tikz@after@path};%
+ \tikz@atend@to%
+ \endpgfidscope%
+ \endpgfscope%
+ \endpgfinterruptpath%
+ \egroup
+ \egroup%
+ \egroup%
+ \ifx\tikzext@layers@setbox@which\setbox
+ \global\setbox\tikz@tempbox=\box\tikz@whichbox%
+ \expandafter\endgroup%
+ \expandafter\setbox\tikz@whichbox=\box\tikz@tempbox%
+ \else
+ \endgroup
+ \fi
+ \else%
+ \expandafter\expandafter\expandafter\tikz@edge@macro%
+ \expandafter\expandafter\expandafter{\expandafter\tikz@@to@local@options\expandafter}\expandafter{\tikz@collected@onpath}%
+ \endgroup%
+ \let\tikz@after@path@smuggle=\pgfutil@empty%
+ \fi%
+ \expandafter\tikz@scan@next@command\tikz@after@path@smuggle%
+}%
+\def\tikzext@layers@tikz@subpicture@handle@#1{
+ \pgfkeys{/tikz/pics/.cd,#1}%
+ \tikz@node@transformations%
+ \let\tikz@transform=\relax%
+ \let\tikz@picmode\tikz@mode%
+ \tikzset{name prefix ../.style/.expanded={/tikz/name prefix=\pgfkeysvalueof{/tikz/name prefix}}}%
+ \ifx\tikz@fig@name\pgfutil@empty\else%
+ \tikzset{name prefix/.expanded=\tikz@fig@name}%
+ \fi%
+ \pgfkeysvalueof{/tikz/pics/setup code}%
+ \pgfkeysgetvalue{/tikz/pics/code}{\tikz@pic@code}
+ \ifx\tikz@pic@code\pgfutil@empty\else% Qrr: next line
+ \tikzext@layers@setbox@which\tikz@whichbox=\hbox\bgroup%
+ \unhbox\tikz@whichbox%
+ \hbox\bgroup
+ \bgroup%
+ \pgfinterruptpath%
+ \pgfscope%
+ \tikz@options%
+ % Qrr: in case patched node/matrix/edge/pic is used inside the pic
+ \let\tikzext@layers@setbox@which\setbox
+ \def\tikz@whichbox{\tikz@figbox}%
+ \setbox\tikz@figbox=\box\pgfutil@voidb@x%
+ \setbox\tikz@figbox@bg=\box\pgfutil@voidb@x%
+ \tikz@atbegin@scope%
+ \scope[every pic/.try]%
+ \tikz@pic@code%
+ \endscope%
+ \tikz@atend@scope%
+ \endpgfscope%
+ \endpgfinterruptpath%
+ \egroup
+ \egroup%
+ \egroup%
+ \fi%
+ \pgfkeysgetvalue{/tikz/pics/foreground code}{\tikz@pic@code}
+ \ifx\tikz@pic@code\pgfutil@empty\else%
+ \unless\ifx\tikzext@layers@setbox@which\setbox
+ \pgfutil@packagewarning{tikz-ext}{Only the main pic code can be placed on selective layers.}
+ \fi
+ \setbox\tikz@figbox=\hbox\bgroup%
+ \unhbox\tikz@figbox%
+ \hbox\bgroup
+ \bgroup%
+ \pgfinterruptpath%
+ \pgfscope%
+ \tikz@options%
+ \setbox\tikz@figbox=\box\pgfutil@voidb@x%
+ \setbox\tikz@figbox@bg=\box\pgfutil@voidb@x%
+ \tikz@atbegin@scope%
+ \scope[every front pic/.try]%
+ \tikz@pic@code%
+ \endscope%
+ \tikz@atend@scope%
+ \endpgfscope%
+ \endpgfinterruptpath%
+ \egroup
+ \egroup%
+ \egroup%
+ \fi%
+ \pgfkeysgetvalue{/tikz/pics/background code}{\tikz@pic@code}
+ \ifx\tikz@pic@code\pgfutil@empty\else%
+ \unless\ifx\tikzext@layers@setbox@which\setbox
+ \pgfutil@packagewarning{tikz-ext}{Only the main pic code can be placed on selective layers.}
+ \fi
+ \setbox\tikz@figbox@bg=\hbox\bgroup%
+ \unhbox\tikz@figbox@bg%
+ \hbox\bgroup
+ \bgroup%
+ \pgfinterruptpath%
+ \pgfscope%
+ \tikz@options%
+ \setbox\tikz@figbox=\box\pgfutil@voidb@x%
+ \setbox\tikz@figbox@bg=\box\pgfutil@voidb@x%
+ \tikz@atbegin@scope%
+ \scope[every behind pic/.try]%
+ \tikz@pic@code%
+ \endscope%
+ \tikz@atend@scope%
+ \endpgfscope%
+ \endpgfinterruptpath%
+ \egroup
+ \egroup%
+ \egroup%
+ \fi%
+ \tikz@node@finish%
+}%
+\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.misc.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.misc.code.tex
index a5a982020f..0f06079e74 100644
--- a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.misc.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.misc.code.tex
@@ -35,45 +35,9 @@
\pgfmath@returnone\pgfmath@x
\endgroup}
-%% foreach
-%% http://tex.stackexchange.com/a/126418/16595
-%% instead of \foreach \var in {start, start + delta, ..., end}
-%% this allows to use \foreach[use int={start to end step delta}] without(!) a list in {}
-%% the values start, end and delta are evaluated by PGFmath at the start of the loop.
-%% In addition to use int, there's also use float.
-\newif\iftikzext@pgf@foreach@no@list
-\pgfqkeys{/pgf/foreach}{
- use int/.code={%
- \tikzext@pgf@foreach@no@list@parse@to\pgfmathtruncatemacro#1\pgffor@stop
- },
- use float/.code={%
- \tikzext@pgf@foreach@no@list@parse@to\pgfmathsetmacro#1\pgffor@stop
- }
-}
-
-\def\tikzext@pgf@foreach@no@list@parse@to#1#2to#3\pgffor@stop{%
- \tikzext@pgf@foreach@no@listtrue
- #1\foreachStart{#2}%
- \pgfutil@in@{step}{#3}
- \ifpgfutil@in@
- \tikzext@pgf@foreach@no@list@parse@step{#1}#3\pgffor@stop
- \else
- \tikzext@pgf@foreach@no@list@parse@step{#1}#3step1\pgffor@stop
- \fi
- \edef\tikzext@pgf@foreach@no@list@list{\foreachStart,\foreachSecond,...,\foreachEnd}%
-}
-\def\tikzext@pgf@foreach@no@list@parse@step#1#2step#3\pgffor@stop{%
- #1\foreachEnd{#2}%
- #1\foreachSecond{\foreachStart+#3}%
-}
-\def\pgffor@vars{% manually extended, better etoolbox
- \pgfutil@ifnextchar i{\pgffor@@vars@end}{%
- \pgfutil@ifnextchar[{\pgffor@@vars@opt}{%]
- \pgfutil@ifnextchar/{\pgffor@@vars@slash@gobble}{%
- \iftikzext@pgf@foreach@no@list\expandafter\pgfutil@firstoftwo\else
- \expandafter\pgfutil@secondoftwo\fi
- {\tikzext@pgf@foreach@no@listfalse\pgffor@macro@list\tikzext@pgf@foreach@no@list@list}
- {\pgffor@@vars}}}}}%
+\pgfutil@IfUndefined{tikzext@pgf@foreach@no@list@parse@to}{% stupid test
+ \input pgffor-ext.code.tex
+}{}
%% PGFmath
%% strrepeat("x", 5) = "xxxxx"
@@ -134,6 +98,7 @@
\pgfmathdeclarefunction{distancebetween}{2}{% only coordinates/nodes
\begingroup
+ \nullfont
\pgfpointdiff{\pgfpointanchor{#1}{center}}{\pgfpointanchor{#2}{center}}%
\edef\pgfmath@temp{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}%
\expandafter\pgfmathveclen@\pgfmath@temp
@@ -141,6 +106,7 @@
\endgroup}
\pgfmathdeclarefunction{qdistancebetween}{1}{% only coordinates/nodes
\begingroup
+ \nullfont
\pgfpointdiff{\pgfpointorigin}{\pgfpointanchor{#1}{center}}%
\edef\pgfmath@temp{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}%
\expandafter\pgfmathveclen@\pgfmath@temp
@@ -148,10 +114,20 @@
\endgroup}
\pgfmathdeclarefunction{qanglebetween}{1}{%
- \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfpointanchor{#1}{center}}}
+ \begingroup
+ \nullfont
+ \pgfmathanglebetweenpoints{\pgfpointorigin}{\pgfpointanchor{#1}{center}}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
\pgfmathdeclarefunction{anglebetween}{2}{%
- \pgfmathanglebetweenpoints{\pgfpointanchor{#1}{center}}{\pgfpointanchor{#2}{center}}}
+ \begingroup
+ \nullfont
+ \pgfmathanglebetweenpoints{\pgfpointanchor{#1}{center}}{\pgfpointanchor{#2}{center}}%
+ \pgfmath@smuggleone\pgfmathresult
+ \endgroup
+}
\pgfmathdeclarefunction{isEmpty}{1}{%
\begingroup
@@ -177,4 +153,57 @@
\pgfutil@g@addto@macro\pgfmathdeclareconstant@@@{\pgfmathdeclarepseudoconstant{#1}{\def\pgfmathresult{#2}}}%
\pgfmathdeclareconstant@#3\pgf@stop
}%
-} \ No newline at end of file
+}
+
+%%% Some shape
+
+\tikzset{% quick versions of reverse clips
+ reverse clip/.is choice,
+ reverse clip/clockwise/.code={%
+ \begingroup
+ \pgfsetcornersarced{\pgfpointorigin}%
+ \pgfpathqmoveto{16000pt}{16000pt}%
+ \pgfpathqlineto{16000pt}{-16000pt}%
+ \pgfpathqlineto{-16000pt}{-16000pt}%
+ \pgfpathqlineto{-16000pt}{16000pt}%
+ \pgfpathclose
+ \endgroup
+ },
+ reverse clip/counter clockwise/.code={%
+ \begingroup
+ \pgfsetcornersarced{\pgfpointorigin}%
+ \pgfpathqmoveto{16000pt}{16000pt}%
+ \pgfpathqlineto{-16000pt}{16000pt}%
+ \pgfpathqlineto{-16000pt}{-16000pt}%
+ \pgfpathqlineto{16000pt}{-16000pt}%
+ \pgfpathclose
+ \endgroup
+ },
+ clip rule/.is choice,
+ clip rule/even odd/.code=\pgfseteorule,
+ clip rule/nonzero/.code=\pgfsetnonzerorule,
+ reverse clip/.default=counter clockwise,
+ remember path/.code={%
+ \tikz@addmode{%
+ \expandafter\pgfsyssoftpath@getcurrentpath\csname tikz@intersect@path@name@remember path-#1\endcsname
+ \immediate\write\pgfutil@auxout{%
+ \noexpand\expandafter\gdef\noexpand\csname tikz@intersect@path@name@remember path-#1\endcsname{%
+ \expandafter\expandafter\expandafter\unexpanded
+ \expandafter\expandafter\expandafter{%
+ \csname tikz@intersect@path@name@remember path-#1\endcsname
+ }%
+ }%
+ }%
+ }%
+ },
+ remembered path/.code={%
+ \pgfutil@IfUndefined{tikz@intersect@path@name@remember path-#1}{}{%
+ \tikz@addmode{%
+ \expandafter\pgfsyssoftpath@setcurrentpath
+ \expandafter{%
+ \csname tikz@intersect@path@name@remember path-#1\endcsname
+ }%
+ }%
+ }%
+ },%
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.node-families.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.node-families.code.tex
index c0ecda441a..8661ec637a 100644
--- a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.node-families.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.node-families.code.tex
@@ -67,6 +67,19 @@
}%
}
+% #1 = family type
+% #2 = family
+\def\tikzext@nf@get#1#2{%
+ \pgfutil@IfUndefined{tikzext@nf@#1@\pgfkeysvalueof{/tikz/node family/prefix}#2@previous}
+ {0pt}
+ {\csname tikzext@nf@#1@\pgfkeysvalueof{/tikz/node family/prefix}#2@previous\endcsname}%
+}
+\def\tikzextnodefamiliesgetwidth{\tikzext@nf@get{width}}
+\def\tikzextnodefamiliesgetheight{\tikzext@nf@get{height}}
+\def\tikzextnodefamiliesgettextwidth{\tikzext@nf@get{text width}}
+\def\tikzextnodefamiliesgettextdepth{\tikzext@nf@get{text depth}}
+\def\tikzextnodefamiliesgettextheight{\tikzext@nf@get{text height}}
+
\pgfdeclareshape{Rectangle}{%
\savedanchor\northeast{%
% Calculate x
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.nodes.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.nodes.code.tex
new file mode 100644
index 0000000000..ab7678022b
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.nodes.code.tex
@@ -0,0 +1,140 @@
+% 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.
+%
+
+\newcount\tikzext@nodesonpath
+\tikzset{
+ pic/.is if=tikz@node@is@pic,
+ /tikz-ext/nodes/node on line/.style 2 args={
+ /tikz/to path={
+ \pgfextra{%
+ \edef\tikz@temp{% rescuing nodes and target for edge
+ edge[
+ line to,% --
+ path only,% no draw, no fill, …
+ every edge quotes/.append style={auto=false},% node *on* the line
+ nodes={alias=tikzext-node on line}]
+ coordinate(tikzext-node on line)% fallback coordinate
+ \unexpanded\expandafter{\tikz@tonodes}(\tikztotarget)
+ }\expandafter
+ }\tikz@temp
+ -- (tikzext-node on line#1)
+ (tikzext-node on line#2)
+ -- (\tikztotarget)
+ }
+ },
+ /tikz-ext/nodes/@node on line/.style args={#1 and #2}{
+ /tikz-ext/nodes/node on line={.#1}{.#2}
+ },
+ node on line/.default=,
+ node on line/.code={%
+ \pgfutil@ifempty{#1}{%
+ \pgfkeys{/tikz-ext/nodes/node on line={}{}}%
+ }{%
+ \pgfutil@in@{ and }{#1}%
+ \ifpgfutil@in@
+ \pgfkeys{/tikz-ext/nodes/@node on line={#1}}%
+ \else
+ \pgfkeys{/tikz-ext/nodes/@node on line={#1 and #1}}%
+ \fi
+ }%
+ },
+ nodes on line/.style={
+ /tikz/to path={
+ \pgfextra{%
+ \tikzext@nodesonpath=0
+ \edef\tikz@temp{% rescuing nodes and target for edge
+ edge[
+ line to,% --
+ path only,% no draw, no fill, …
+ every edge quotes/.append style={auto=false},% node *on* the line
+ nodes={
+ /utils/exec=\global\noexpand\advance\tikzext@nodesonpath by 1,
+ alias=tikzext-node on line-\noexpand\the\tikzext@nodesonpath
+ }]
+ \pgfutil@unexpanded\expandafter{\tikz@tonodes}(\tikztotarget)
+ }\expandafter
+ }\tikz@temp
+ \ifnum\tikzext@nodesonpath=0
+ -- (\tikztotarget)
+ \else
+ -- (tikzext-node on line-1)
+ \unless\ifnum\tikzext@nodesonpath=1
+ foreach[expand list] \tikzext@counter in {2, ..., \the\tikzext@nodesonpath} {
+ (tikzext-node on line-\pgfinteval{\tikzext@counter-1})
+ -- (tikzext-node on line-\tikzext@counter)
+ }
+ \fi
+ (tikzext-node on line-\the\tikzext@nodesonpath) -- (\tikztotarget)
+ \fi
+ }
+ },
+ %%% nodes on curve, needs spath3
+ /tikz-ext/spath/split multiple at intersections/.style n args={3}{
+ /utils/temp/.style={
+ /tikz/spath/split at intersections with={#1}{#2##1}
+ },
+ /utils/temp/.list={#3}
+ },
+ nodes on curve/.default=line to,
+ nodes on curve'/.default=line to,
+ nodes on curve/.style={% normal path
+ /tikz-ext/nodes/nodes on curve={#1}{/tikz/spath/append}{}
+ },
+ nodes on curve'/.style={% for edges and tos
+ /tikz-ext/nodes/nodes on curve={#1}{/tikz/spath/use}{%
+ \ifx\tikz@to@or@edge@function\tikz@do@to(\tikztotarget)\fi
+ }
+ },
+ % spath/prefix/tikzext-nodes/.style={
+ % set prefix=tikzext-node on curve
+ % },
+ % spath/suffix/tikzext-nodes/.style={
+ % set suffix=
+ % },
+ /tikz-ext/nodes/nodes on curve/.code n args={3}{%
+ \pgfutil@IfUndefined{tikz@library@spath3@loaded}{%
+ \pgfutil@packagerror{tikz-ext}{%
+ You need to say \string\usetikzlibrary{spath3} to use nodes on curve.}{}%
+ }{%
+ \tikzset{to path={%
+ % \def\tikz@to@path{% to path =
+ \pgfextra{%
+ \tikzext@nodesonpath=0
+ \edef\tikz@temp{% rescuing nodes and target for edge
+ edge[%
+ #1, path only,% path only = no draw, no fill, …
+ every edge quotes/.append style={auto=false},% node *on* the line
+ nodes={
+ /utils/exec=\global\noexpand\advance\tikzext@nodesonpath by 1,
+ % spath/set name=tikzext-nodes,
+ spath/save global=tikzext-node on curve-\noexpand\the\tikzext@nodesonpath,
+ },
+ % spath/set name=tikzext-nodes,
+ spath/save global=tikzext-node on curve-curve
+ ]
+ \pgfutil@unexpanded\expandafter{\tikz@tonodes}(\tikztotarget)
+ }\expandafter
+ }\tikz@temp
+ [%
+ /tikz-ext/spath/split multiple at intersections/.expanded=%
+ {tikzext-node on curve-curve}%
+ {tikzext-node on curve-}%
+ {1\ifnum\tikzext@nodesonpath>1 ,...,\the\tikzext@nodesonpath\fi},
+ spath/remove components/.expanded={tikzext-node on curve-curve}{%
+ 2%
+ \ifnum\tikzext@nodesonpath>1
+ ,4,...,\pgfinteval{2*\the\tikzext@nodesonpath}%
+ \fi
+ },
+ #2=tikzext-node on curve-curve%
+ ]%
+ #3%
+ }}%
+ }
+ }
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.paths.timer.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.paths.timer.code.tex
index 3a4d30e68f..5fadd1738d 100644
--- a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.paths.timer.code.tex
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.paths.timer.code.tex
@@ -5,6 +5,7 @@
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Free Documentation License.
%
+
\def\tikz@rectB#1{% originally from tikz.code.tex
\tikz@make@last@position{#1}%
\edef\tikz@timer@end{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}%
@@ -63,7 +64,7 @@
\tikz@scan@next@command
}
-\def\tikz@timer@rectangle{%
+\def\tikzext@timer@rectangle{%
\pgfutil@tempdima\tikz@time pt
\ifdim\pgfutil@tempdima<.5pt\else % if we're at the return pos-ition we switch start and end
\advance\pgfutil@tempdima-.5pt
@@ -185,4 +186,11 @@
{\noexpand\tikz@timer@end}}%
\tikz@marshall
}
+
+\tikzset{
+ rectangle timer/.is choice,
+ rectangle timer/line/.code=\let\tikz@timer@rectangle\tikz@timer@line,
+ rectangle timer/rectangle/.code=\let\tikz@timer@rectangle\tikzext@timer@rectangle,
+ rectangle timer=rectangle
+}
\endinput \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.shapes.uncenteredrectangle.code.tex b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.shapes.uncenteredrectangle.code.tex
new file mode 100644
index 0000000000..71ee1d6be8
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/tex/generic/tikzlibraryext.shapes.uncenteredrectangle.code.tex
@@ -0,0 +1,46 @@
+% Copyright 2023 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.
+%
+\usepgflibrary{ext.shapes.uncenteredrectangle}
+\newif\iftikzext@uncrec@mathmode
+\pgfqkeys{/tikz-ext}{
+ tikz-cd fix/.code={% #1
+ \tikzcdset{
+ /tikz-ext/tikz-cd fix/.code=,
+ urc/.style={/pgf/uncentered rectangle center={##1}},
+ every diagram/.append style={% ##1
+ /pgf/uncentered rectangle center yshift=axis_height,
+ /tikz/uncentered rectangle/.style={
+ /tikz/shape=uncentered rectangle,
+ /tikz/commutative diagrams/math mode=false,
+ },
+ /tikz/matrix of math nodes/.style={
+ /tikz/matrix of nodes,
+ /tikz/nodes={
+ execute at begin node=\iftikzcd@mathmode$\fi,
+ execute at end node=\iftikzcd@mathmode$\fi
+ }
+ },
+ /utils/exec=%
+ \def\uncrec####1####2####3{%
+ \iftikzext@uncrec@mathmode$\fi####2\iftikzext@uncrec@mathmode$\fi
+ \nodepart{left}\iftikzext@uncrec@mathmode$\fi####1\iftikzext@uncrec@mathmode$\fi
+ \nodepart{right}\iftikzext@uncrec@mathmode$\fi####3\iftikzext@uncrec@mathmode$\fi
+ },
+ /tikz/uncrec math mode/.is if=tikzext@uncrec@mathmode,
+ /tikz/uncrec math mode=true,
+ /tikz/uncrec/.style={% ####1
+ /tikz/uncentered rectangle,
+ /pgf/uncentered rectangle center={####1}
+ },
+ install uncentered rectangle in column/.style={
+ /tikz/column ####1/.append style={/tikz/uncentered rectangle}
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/graphics/pgf/contrib/tikz-ext/tex/latex/pgffor-ext.sty b/graphics/pgf/contrib/tikz-ext/tex/latex/pgffor-ext.sty
new file mode 100644
index 0000000000..28f359a813
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/tex/latex/pgffor-ext.sty
@@ -0,0 +1,44 @@
+% 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.
+%
+
+\RequirePackage{pgffor}
+\ifcsname tikzext@pgf@foreach@no@list@parse@to\endcsname
+ \expandafter\@gobble
+\else
+ \expandafter\@firstofone
+\fi
+{
+ \input{pgffor-ext.code.tex}
+}
+
+\pgfqkeys{/pgf/foreach}{
+ xparser/.code 2 args={%
+ \DeclareDocumentCommand\pgffor@scan@custom{ #1 u, }{%
+ \def\pgffor@value{#2}%
+ \pgffor@scanned
+ }%
+ \def\pgffor@scan{%
+ \pgfutil@ifnextchar\pgffor@stop\pgffor@scanone\pgffor@scan@custom
+ }%
+ },
+ xparser Om/.style={
+ xparser={ O{} }{{##1}/{##2}}
+ },
+}
+\pgfqkeys{/handlers}{
+ .list xparse/.code n args={3}{%
+ \def\pgf@keys@temp{}%
+ \foreach[xparser={#1}{#2}]\pgf@keys@key in{#3}{%
+ \expandafter\pgfutil@g@addto@macro\expandafter\pgf@keys@temp\expandafter{\expandafter{\pgf@keys@key}}}%
+ \edef\pgf@keys@list@path{\pgfkeyscurrentpath}%
+ \expandafter\expandafter\expandafter\pgf@keys@do@list%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\pgf@keys@list@path\expandafter}%
+ \pgf@keys@temp\pgf@stop}%
+}
+\endinput
diff --git a/graphics/pgf/contrib/tikz-ext/tex/plain/pgffor-ext.tex b/graphics/pgf/contrib/tikz-ext/tex/plain/pgffor-ext.tex
new file mode 100644
index 0000000000..6d2527a241
--- /dev/null
+++ b/graphics/pgf/contrib/tikz-ext/tex/plain/pgffor-ext.tex
@@ -0,0 +1,13 @@
+% 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.
+%
+
+\input pgffor.tex
+\catcode`\@=11
+\input pgffor-ext.code.tex
+\catcode`\@=\pgfforatcode
+\endinput