diff options
author | Norbert Preining <norbert@preining.info> | 2022-09-25 03:00:53 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2022-09-25 03:00:53 +0000 |
commit | ce8083552e0d948bf495e72d5c4d2680b505c90b (patch) | |
tree | 6c741e76b2a9e41d5c1b57a15ffa28d74c5317d8 /graphics/pgf/contrib/tikz-ext | |
parent | 41d1be12f4963b0f5bf9903116883f1458b58960 (diff) |
CTAN sync 202209250300
Diffstat (limited to 'graphics/pgf/contrib/tikz-ext')
34 files changed, 2403 insertions, 422 deletions
diff --git a/graphics/pgf/contrib/tikz-ext/README.md b/graphics/pgf/contrib/tikz-ext/README.md index b0e84a76de..bee9e3512a 100644 --- a/graphics/pgf/contrib/tikz-ext/README.md +++ b/graphics/pgf/contrib/tikz-ext/README.md @@ -14,16 +14,23 @@ This is not a LaTeX package but a collection of libraries for PGF and TikZ. These are - * `ext.calendar-plus`, - * `ext.node-familes`, - * `ext.transformations.mirror`, - * `ext.paths.arcto`, - * `ext.paths.ortho`, - * `ext.paths.timer`, - * `ext.patterns.images`, - * `ext.positioning-plus`, - * `ext.topaths.arcthrough` and - * `ext.misc`. + * `ext.calendar-plus` + * `ext.node-families` + * `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` + * Shapes: + * `ext.shapes.circlearrow` + * `ext.shapes.circlecrosssplit` + * `ext.shapes.heatmark` + * `ext.shapes.rectangleroundedcorners` + * `ext.shapes.superellopse` 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 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 88a3567c1a..4f2300a458 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 @@ -9,9 +9,11 @@ % \section{Calendar: Weeknumbers and more conditionals} +\label{sec:calendar} \begin{package}{calendar-ext} - This package adds week numbers and more conditionals to the PGF package |pgfcalendar|. + 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.) + \inspiration{WeekNum-Q,CalCond-Q}{WeekNum-A,CalCond-A} \end{package} %This package extends the |pgfcalendar| package. @@ -48,7 +50,7 @@ The following tests are added. \end{itemize} The shorthands for |d-| and |m-| are slightly changed so that they are -expandable. This makes it possible to use these shorthands inside of PGFmath. +expandable. This makes it possible to use these shorthands inside of \pgfname math. The shorthands for the week (see section~\ref{calendar:weeknumbering}) are added. These are \begin{itemize} 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 ac5811ac6e..f9468175cb 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 @@ -10,19 +10,22 @@ \part{Introduction} \begin{multicols}{2} \section{Usage} -This package is called |tikz-ext|, however, one can't load it via |\usepackage|. -Instead, this package consists of multiple PGF and \tikzname\space libraries +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 +\pgfname\space and \tikzname\space libraries which are loaded by either |\usepgflibrary| or |\usetikzlibrary|. \section{Why do we need it?} -Since I have been answering questions on \hyperlink{https://tex.stackexchange.com}{TeX.sx} +Since I have been answering questions on +\hyperlink{https://tex.stackexchange.com}{TeX.sx} I've noticed that some questions come up again and again, every time with a slightly different approach on how to solve them. -I don't like reinventing the wheel which is why I've gathered the code of my answers in this package. +I don't like reinventing the wheel which is why I've gathered +the solutions of my answers in this package. -And, yes, I am using them myself, too. - -\section{Should these libraries be part of \tikzname?} -I guess. +\section{Having problems?} +Don't hesitate to open an issue on GitHub. \end{multicols}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex index 14c78e9be0..bdfd225f3c 100644 --- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-calendar-plus.tex @@ -10,7 +10,8 @@ \section{Calendar} \begin{tikzlibrary}{ext.calendar-plus} - This library extends the \tikzname\space library |calendar|\indexLibraryO{calendar}. + This library extends the \tikzname\space library \referenceLibraryandIndexO{calendar}. + \inspiration{WeekNum-Q,CalCond-Q,CalMath-Q}{WeekNum-A,CalCond-A,CalMath-A} \end{tikzlibrary} \begin{multicols}{2} @@ -34,6 +35,17 @@ It is now also possible to nest |/tikz/if| occurrences. \begin{key}{/tikz/if=|(|\meta{conditions}|)|\meta{code or options}\opt{|else|\meta{else code or options}}} \end{key} +\subsection{\pgfname math functions} +\begin{math-function}{weeksinmonthofyear(\mvar{first weekday}, \mvar{month}, \mvar{year})} +\mathcommand + Returns the number of (partial) weeks in the month \mvar{month} of year \mvar{year} + when this month begins on a \mvar{first weekday}. +\end{math-function} +\begin{math-function}{lastdayinmonthofyear(\mvar{month}, \mvar{year})} +\mathcommand + Returns the last day (28, 29, 30 or 31) of month \mvar{month} of year \mvar{year}. +\end{math-function} + \subsection{Week numbering (ISO~8601)} The actual week number algorithm is implemented by the |pgfcalendar-ext| package/module in section~\ref{calendar:weeknumbering}. 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 79cc9c21c3..163097e6a1 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 @@ -10,10 +10,11 @@ \section{And a little bit more} \begin{tikzlibrary}{ext.misc} - This library adds miscellaneous utilities to PGFmath, PGF or \tikzname. + This library adds miscellaneous utilities to \pgfname math, \pgfname\space or \tikzname. + \inspiration{FullArc-Q,ForeachUse-Q}{FullArc-A,ForeachUse-A} \end{tikzlibrary} -\subsection{PGFmath} +\subsection{\pgfname math} \begin{multicols}{2} \pgfkeys{/codeexample/every codeexample/.append style={width=3cm}} @@ -101,7 +102,7 @@ The |R| operator can then be used. \end{math-function} \subsubsection{Functions: using coordinates} -The following functions can only be used with PGF and/or \tikzname. +The following functions can only be used with \pgfname\space and/or \tikzname. Since the arguments are usually plain text (and not numbers) one has to wrap them in |"|. \begin{math-function}{anglebetween("\mvar{p1}", "\mvar{p2}")}\mathcommand @@ -135,18 +136,19 @@ them in |"|. (intersection of @--[shift=(vecB)]@ and B--A) coordinate (A);} \end{tikzpicture} \end{codeexample} -\subsection{PGFkeys} - +\pagebreak +\subsection{\pgfname keys} +% \begin{multicols}{2} - +% \subsubsection{Conditionals} \begin{key}{/utils/if=\meta{cond}\meta{true}\opt{\meta{false}}} This key checks the conditional \meta{cond} and applies the styles \meta{true} if \meta{cond} is true, otherwise \meta{false}. - \meta{cond} can be anything that PGFmath understands. + \meta{cond} can be anything that \pgfname math understands. - As a side effect on how PGFkeys parses argument, the \meta{false} argument is + As a side effect on how \pgfname keys parses argument, the \meta{false} argument is actually optional. \end{key} @@ -157,7 +159,7 @@ executions. This key checks via |\if| if \meta{token A} matches \meta{token B} and applies the styles \meta{true} if it does, otherwise \meta{false}. - As a side effect on how PGFkeys parses argument, the \meta{false} argument is + As a side effect on how \pgfname keys parses argument, the \meta{false} argument is actually optional. \end{key} @@ -170,7 +172,7 @@ executions. and applies the styles \meta{true} if true, otherwise \meta{false}. A delimiting |\relax| will be inserted after \meta{num cond}. - As a side effect on how PGFkeys parses argument, the \meta{false} argument is + As a side effect on how \pgfname keys parses argument, the \meta{false} argument is actually optional. \end{key} @@ -186,7 +188,7 @@ executions. \subsubsection{Handlers} -While already a lot of values given to keys are evaluated by PGFmath at some point, +While already a lot of values given to keys are evaluated by \pgfname math at some point, not all of them are. \begin{handler}{{.pgfmath}|=|\meta{eval}} @@ -226,13 +228,13 @@ not all of them are. \end{tikzpicture} \end{codeexample} -\subsection{PGFfor} +\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 PGFmath at initialization. +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} diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex index 04ebb7c7a0..d4b274511c 100644 --- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-node-families.tex @@ -15,47 +15,35 @@ measurements to the \filetype{aux} file. Unfortunately, this does not work with the |external| library.\indexLibraryO{external}% - \footnote{Not only would the \texttt{external} library not notice the change of the value between compilations runs, - it also changes the way \texttt{\textbackslash pgfutil@writeout} works which suddenly writes to the \textsc{log} file instead.} + \footnote{First of all, I can't figure out how to use the \textsc{aux} file during externalization since it gets written to the \textsc{log} instead. + And then there's the question about how \texttt{external} would notice the need to export the picture again until it's stable \dots} + + \inspiration{NodeFam-Q}{NodeFam-A} + \end{tikzlibrary} -This library introduces two new shapes called |Circle| and |Rectangle| -that are basically copies of the original shapes |circle|\indexShapeO{circle} and |rectangle|\indexShapeO{rectangle}. -However, their dimension will be set to the same maximum |minimum width| and |minimum height| -when one of the following \meta{name}s are declared. -\begin{key}{/tikz/node family/width=\meta{name} (initially |\{\}|)} -Nodes with the same \meta{name} will have the same \referenceKeyandIndexO[/pgf/]{minimum width}. -An empty \meta{name} disables the evaluation by the library. -\begin{codeexample}[preamble=\usetikzlibrary{positioning,ext.node-families},/tikz/node distance=.5cm] -\tikzexternaldisable % ext.node-families does not work with active externalization -\begin{tikzpicture}[nodes={Rectangle, draw, node family/width=manual}] -\node (a) {Foo}; -\node[below=of a] (b) {Foobar}; -\end{tikzpicture} -\end{codeexample} -\end{key} -\begin{key}{/tikz/node family/height=\meta{name} (initially |\{\}|)} -Nodes with the same \meta{name} will have the same \referenceKeyandIndexO[/pgf/]{minimum height}. -An empty \meta{name} disables the evaluation by the library. -\end{key} -\begin{key}{/tikz/node family/size=\meta{name}} -Sets both |height| and |width|. +Before we get to the interesting keys, a common prefix can be set for the families' names. +Initially this is |\pgfpictureid-| so that families of different pictures don't interact. +\begin{key}{/tikz/node family/prefix=\meta{prefix}(initially \string\pgfpictureid-)} +The family names are prefixed with the value of |/tikz/node family/prefix|. \end{key} -While |node family/width| and |node family/height| only work for the new shapes |Circle| and |Rectangle|, -the following keys~-- when setup, see below~-- work with every shape with one single node part. -Initially though, only |circle|, |rectangle|, |Circle| and |Rectangle| are set up that way. -\begin{key}{/tikz/node family/text height=\meta{name} (initially |\{\}|)} +\subsection{Text Box} +\label{ssec:nf-text} +The following keys~-- when setup, see below~-- work with every shape with one single node part.% +\footnote{Technically, it will also work with shapes with multiple node parts but it will only affect the main node part.} +Initially though, only \referenceShapeandIndexO{circle} and \referenceShapeandIndexO{rectangle} are set up that way. +\begin{key}{/tikz/node family/text height=\meta{name} (initially \{\})} Nodes with the same \meta{name} will have the same text height. An empty \meta{name} disables the evaluation by the library. \end{key} -\begin{key}{/tikz/node family/text depth=\meta{name} (initially |\{\}|)} +\begin{key}{/tikz/node family/text depth=\meta{name} (initially \{\})} Nodes with the same \meta{name} will have the same text depth. An empty \meta{name} disables the evaluation by the library. \end{key} -\begin{key}{/tikz/node family/text width=\meta{name} (initially |\{\}|)} +\begin{key}{/tikz/node family/text width=\meta{name} (initially \{\})} Nodes with the same \meta{name} will have the same text width. An empty \meta{name} disables the evaluation by the library. \end{key} @@ -68,31 +56,65 @@ Since the width of the node's content's box is setup much earlier, the previous key only extends the width of that box which would make the text seem as if it where aligned to the left. With |text width family align| this can changed. -\begin{key}{/tikz/node family/text width align=\meta{alignment}(initially |center|)} +\begin{key}{/tikz/node family/text width align=\meta{alignment}(initially center)} \meta{alignment} is one of |left|, |center| or |right|. \begin{codeexample}[preamble=\usetikzlibrary{positioning,ext.node-families},/tikz/node distance=.5cm] \tikzexternaldisable % ext.node-families does not work with active externalization -\begin{tikzpicture}[nodes={Rectangle, draw, node family={text width=manual, text width align=right}}] +\begin{tikzpicture}[nodes={rectangle, draw, node family={text width=manual, text width align=right}}] \node (a) {Foo}; \node[below=of a] (b) {Foobar}; \end{tikzpicture} \end{codeexample} \end{key} -\begin{key}{/tikz/node family/prefix=\meta{prefix}(initially \expandafter|\string\pgfpictureid-|)} -The family names are prefixed with the value of |/tikz/node family/prefix|. -\end{key} - \begin{key}{/tikz/node family/setup shape=\meta{shape}} This adds instructions to the \meta{shape}'s definition which adjust the text box's dimensions according to the family. This should be only used once per shape. \end{key} -\begin{codeexample}[width=9cm,preamble=\usetikzlibrary{ext.node-families,shapes.geometric}] + +\subsection{Minimum Width/Height} +While the keys of the previous subsection work well enough for nodes of the same shape +(and the same |inner sep|s), for different node shapes the text box dimensions will be used +differently for the node's total dimension. + +For this, the following keys are necessary. +When one of the keys are used the values of |minimum width| and/or |minimum height| are set to |nf_width| or |nf_height| respectively. +\begin{key}{/tikz/node family/width=\meta{name} (initially \{\})} +Nodes with the same \meta{name} will have the same \referenceKeyandIndexO[/pgf/]{minimum width}. +An empty \meta{name} disables the evaluation by the library. +\begin{codeexample}[preamble=\usetikzlibrary{positioning,ext.node-families},/tikz/node distance=.5cm] +\tikzexternaldisable % ext.node-families does not work with active externalization +\begin{tikzpicture}[nodes={rectangle, draw, node family/width=manual}] +\node (a) {Foo}; +\node[below=of a] (b) {Foobar}; +\end{tikzpicture} +\end{codeexample} +\end{key} +\begin{key}{/tikz/node family/height=\meta{name} (initially \{\})} +Nodes with the same \meta{name} will have the same \referenceKeyandIndexO[/pgf/]{minimum height}. +An empty \meta{name} disables the evaluation by the library. +\end{key} +\begin{key}{/tikz/node family/size=\meta{name}} +Sets both |height| and |width|. +\end{key} + +\clearpage +\subsection{More shapes that support the keys \texttt{width} and \texttt{height}} +\begin{tikzlibrary}{ext.node-families.shapes.geometric} + This library adds support for the keys \referenceKeyandIndex[/tikz/node family/]{width} and + \referenceKeyandIndex[/tikz/node family/]{height} for the shapes of + the \pgfname\space library \referenceLibraryandIndexO{shapes.geometric}. + + \inspirationQ{NodeFam-Ellipse} +\end{tikzlibrary} +The shapes are also setup for the keys from subsection~\ref{ssec:nf-text}. + +\begin{codeexample}[width=9cm,preamble=\usetikzlibrary{ext.node-families.shapes.geometric}] \tikzexternaldisable % ext.node-families does not work with active externalization -\begin{tikzpicture}[node family/setup shape=diamond] +\begin{tikzpicture} \foreach \cnt[count=\Cnt] in {a,...,h} \node[draw, diamond, node family/text=aTOh] (\cnt) at (right:\Cnt) {\cnt}; 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 09049bf829..595a647917 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 @@ -13,6 +13,8 @@ \begin{tikzlibrary}{ext.paths.timer} This library adds timers to the path specifications |rectangle|, |parabola|, |sin| and |cos|. + + \inspiration{TimerRect-Q,TimerPara-Q}{TimerRect-A,TimerPara-A} \end{tikzlibrary} In \tikzname, the path specification |rectangle|, |parabola|, |sin| and |cos| do not provide diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex index 10fa3aca6d..c3c38a8517 100644 --- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-patterns.images.tex @@ -13,6 +13,8 @@ \begin{tikzlibrary}{ext.patterns.images} This library allows to use an image to be used as a repeating pattern for a path. + + \inspiration{Pattern-Q}{Pattern-A} \end{tikzlibrary} With this library arbitrary images (or indeed PDF documents) can be used as @@ -27,9 +29,9 @@ This is a two-step process: \begin{command}{\pgfsetupimageaspattern\oarg{options}\marg{name}\marg{image}} \end{command} -\begin{key}{/tikz/image as pattern=\meta{options} (default |\{\}|)} +\begin{key}{/tikz/image as pattern=\meta{options} (default \{\})} -\begin{codeexample}[preamble=\usetikzlibrary{ext.patterns.images}] +\begin{codeexample}[preamble=\usetikzlibrary{ext.patterns.images,shapes.geometric}] \pgfsetupimageaspattern[width=.5cm]{grid}{example-image-1x1} \tikz \node[star, minimum size=3cm, draw, image as pattern={name=grid,options={left, bottom, y=-.5cm, rotate=45}}] {}; @@ -41,7 +43,7 @@ Specifies the name of the ``image-pattern'' to be used. \end{key} \begin{stylekey}{/tikz/image as pattern/option} -Options that's be used by the internal |\pgftext|,\indexCommandO{\pgftext} +Options that will be used by the internal |\pgftext|,\indexCommandO{\pgftext} only keys from |/pgf/text| should be used.\indexKeyO[/pgf/]{text} \end{stylekey} diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex index a0451a8fd7..56c81376aa 100644 --- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-positioning-plus.tex @@ -12,7 +12,7 @@ \label{library:positioning-plus} \tikzsetnextfilename{posplus} \begin{tikzlibrary}{ext.positioning-plus} - With the help of the |positioning|\indexLibrary{positioning} and the |fit|\indexLibrary{fit} library this extends the placement of nodes. + With the help of the \referenceLibraryandIndexO{positioning} and the \referenceLibraryandIndexO{fit} library this extends the placement of nodes. \end{tikzlibrary} \subsection{Useful corner anchors} diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex index b2aa0f8f7f..97011bc4d0 100644 --- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-library-trans.tex @@ -17,7 +17,7 @@ \end{tikzlibrary} As explained in section~\ref{pgflibrary:transformations}, there are two approaches to setting a mirror transformation. -As with the commands in PGF, we'll be using a lowercase |m| for the reflection matrix and an uppercase |M| for the built-in approach. +As with the commands in \pgfname, we'll be using a lowercase |m| for the reflection matrix and an uppercase |M| for the built-in approach. \subsection{Using the reflection matrix} @@ -31,7 +31,7 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m \end{tikzpicture} \end{codeexample} -\begin{key}{/tikz/xmirror=\meta{value or coordinate}} +\begin{key}{/tikz/xmirror=\meta{value or coordinate} (default 0pt)} Sets up a transformation that mirrors along a horizontal line that goes through point $(\text{\meta{value}}, 0)$ or \meta{coordinate}. \begin{codeexample}[preamble=\usetikzlibrary{ext.transformations.mirror}] @@ -45,12 +45,12 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m \end{codeexample} \end{key} -\begin{key}{/tikz/ymirror=\meta{value or coordinate}} +\begin{key}{/tikz/ymirror=\meta{value or coordinate} (default 0pt)} Sets up a transformation that mirrors along a vertical line that goes through point $(0, \text{\meta{value}})$ or \meta{coordinate}. \end{key} -\begin{key}{/tikz/mirror x=\meta{coordinate}} +\begin{key}{/tikz/mirror x=\meta{coordinate} (default {(0,0)})} Similar to |/tikz/xmirror|, this however uses the |xyz| coordinate system instead of the |canvas| system. \begin{codeexample}[preamble=\usetikzlibrary{ext.transformations.mirror}] \begin{tikzpicture}[x=.5cm, y=(45:1cm)] @@ -65,7 +65,7 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m \end{codeexample} \end{key} -\begin{key}{/tikz/mirror y=\meta{coordinate}} +\begin{key}{/tikz/mirror y=\meta{coordinate} (default {(0,0)})} Similar to |/tikz/ymirror|, this however uses the |xyz| coordinate system instead of the |canvas| system. \end{key} @@ -88,7 +88,7 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m \end{tikzpicture} \end{codeexample} -\begin{key}{/tikz/xMirror=\meta{value or coordinate}} +\begin{key}{/tikz/xMirror=\meta{value or coordinate} (default 0pt)} Sets up a transformation that mirrors along a horizontal line that goes through point $(\text{\meta{value}}, 0)$ or \meta{coordinate}. \begin{codeexample}[preamble=\usetikzlibrary{ext.transformations.mirror}] @@ -102,12 +102,12 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m \end{codeexample} \end{key} -\begin{key}{/tikz/yMirror=\meta{value or coordinate}} +\begin{key}{/tikz/yMirror=\meta{value or coordinate} (default 0pt)} Sets up a transformation that mirrors along a vertical line that goes through point $(0, \text{\meta{value}})$ or \meta{coordinate}. \end{key} -\begin{key}{/tikz/Mirror x=\meta{coordinate}} +\begin{key}{/tikz/Mirror x=\meta{coordinate} (default {(0,0)})} Similar to |/tikz/xMirror|, this however uses the |xyz| coordinate system instead of the |canvas| system. \begin{codeexample}[preamble=\usetikzlibrary{ext.transformations.mirror}] \begin{tikzpicture}[x=.5cm, y=(45:1cm)] @@ -122,7 +122,7 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m \end{codeexample} \end{key} -\begin{key}{/tikz/Mirror y=\meta{coordinate}} +\begin{key}{/tikz/Mirror y=\meta{coordinate} (default {(0,0)})} Similar to |/tikz/yMirror|, this however uses the |xyz| coordinate system instead of the |canvas| system. \end{key} @@ -133,4 +133,4 @@ As with the commands in PGF, we'll be using a lowercase |m| for the reflection m When only \meta{point A} is given that line goes through \meta{point A} and the origin. \end{key} -\endinput +\endinput
\ 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 e4445d392b..1185cdb6d7 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,31 +8,20 @@ % 2. under the GNU Free Documentation License. % \newcommand*\tikzextname{Ti\textit kZ-Extensions} -\newcommand*\tikzextversion{0.2} - -%\includeonly{ -% tikz-ext-manual-en-library-paths.arcto, -% tikz-ext-manual-en-library-paths.ortho, -% tikz-ext-manual-en-library-paths.timer, -% tikz-ext-manual-en-library-patterns.images, -% tikz-ext-manual-en-library-topaths.arcthrough, -% tikz-ext-manual-en-library-trans, -% tikz-ext-manual-en-pgf-trans, -% tikz-ext-manual-en-library-misc, -%} +\newcommand*\tikzextversion{0.3} \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}} +\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} @@ -80,16 +69,20 @@ These libraries only work with \tikzname. \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{topaths.arcthrough}\include{tikz-ext-manual-en-library-topaths.arcthrough} -\tikzsetfigurename{trans} \include{tikz-ext-manual-en-library-trans} - -\part{PGF Libraries} +\tikzsetfigurename{positioning-plus} +\include{tikz-ext-manual-en-library-positioning-plus} +\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 PGF and \tikzname. +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}] +\begin{codeexample}[width=10cm,preamble=% + \usetikzlibrary{graphs,graphdrawing,ext.misc} \usegdlibrary{force}] \tikzset{ mynode/.style={ circle, minimum size=10mm, draw, densely dashdotted, thick, @@ -126,7 +119,12 @@ These libraries (should) work with both PGF and \tikzname. \end{center} \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} \part{Utilities} \label{part:misc} @@ -163,16 +161,29 @@ These libraries (should) work with both PGF and \tikzname. %%% END \newcommand*{\addTikz}[1]{Added \tikzname\space library \texttt{ext.#1}.} -\newcommand*{\addPGF}[1]{Added PGF library \texttt{ext.#1}.} -\part{Changelog \& Index} -\section*{Changelog} -\begin{multicols}{2} +\newcommand*{\addPGF}[1]{Added \pgfname\space 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.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} @@ -188,5 +199,6 @@ Version 0.1 \end{multicols} \printindex +\printbibliography[heading=bibintoc] %\typeout{Examples: \the\codeexamplecount}% \end{document}
\ No newline at end of file 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 238c10172f..494d63e012 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 @@ -14,9 +14,15 @@ \usepackage{imakeidx} \makeindex + +%%% Bibliography +\usepackage{csquotes} +\usepackage[backend=biber,style=numeric,backref]{biblatex} +\addbibresource{tikz-ext-manual.bib} + \usepackage{hyperref} \hypersetup{% - colorlinks=false, % use true to enable colors below: + colorlinks=true, % use true to enable colors below: linkcolor=blue,%red, filecolor=blue,%magenta, urlcolor=blue,%cyan, @@ -88,16 +94,23 @@ ext.calendar-plus, ext.misc, ext.node-families, + ext.node-families.shapes.geometric, ext.paths.arcto, ext.paths.ortho, ext.paths.timer, ext.patterns.images, ext.positioning-plus, + ext.shapes.heatmark, + ext.shapes.circlearrow, + ext.shapes.circlecrosssplit, + ext.shapes.rectangleroundedcorners, + ext.shapes.superellipse, ext.topaths.arcthrough, ext.transformations.mirror, % calc, fit, + matrix, shapes.geometric, through, trees, @@ -262,10 +275,13 @@ \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}% @@ -345,7 +361,11 @@ \index{\strippedat @\originalprefix\protect\texttt{\original{\protect\string\protect#1}}\originalsuffix}% } -\newcommand*{\referenceKeyandIndexO}[2][/tikz/]{\texttt{#1#2}\indexKeyO[#1]{#2}}% +\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}} \colorlet{originalindex}{gray} \newcommand*{\original}[1]{\textcolor{originalindex}{#1}} @@ -362,7 +382,21 @@ \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 PGF/\tikzname. + original functionalities of \pgfname/\tikzname. \bigskip } -\makeatother
\ No newline at end of file +\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}}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.tex new file mode 100644 index 0000000000..e26711bb35 --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlearrow.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{Shape: Circle Arrow} +\begin{pgflibrary}{ext.shapes.circlearrow} + A circular shape named |circle arrow| that has an arc as its background path that can have an arrow tip. + \inspiration{ShapeCircleArrow-Q}{ShapeCircleArrow-A} +\end{pgflibrary} +\begin{shape}{circle arrow} + This shape is an arrow whose path is an arc -- defined very similar to the |arc|% + \indexPathOperationO{arc} path operation -- that can possibly be customized with + arrow tips. + + \begin{key}{/pgf/circle arrow start angle=\meta{start angle} (initially \{\})} + Sets the start angle. + \end{key} + \begin{key}{/pgf/circle arrow end angle=\meta{end angle} (initially \{\})} + Sets the end angle. + \end{key} + \begin{key}{/pgf/circle arrow delta angle=\meta{delta angle} (initially \{\})} + Sets the delta angle. + \end{key} + \begin{key}{/pgf/circle arrow arrows=% + \meta{start arrow tip specification}-\meta{end arrow tip specification} (initially -)} + The specification will be forwarded to |\pgfsetarrows|\indexCommandO{\pgfsetarrows}. + \end{key} + + A few handful styles are pre-defined. + \begin{key}{/pgf/circle arrow turn left north} + Sets |circle arrow start angle = 100|, |circle arrow delta angle = 340| + and |circle arrow arrows = ->|. + \end{key} + \begin{key}{/pgf/circle arrow turn left east} + As above but |circle arrow start angle = 10|. + \end{key} + \begin{key}{/pgf/circle arrow turn left west} + As above but |circle arrow start angle = 280|. + \end{key} + \begin{key}{/pgf/circle arrow turn left south} + As above but |circle arrow start angle = 190|. + \end{key} + \begin{key}{/pgf/circle arrow turn right north} + Sets |circle arrow start angle = 100|, |circle arrow delta angle = 340| + and |circle arrow arrows = <-|. + \end{key} + \begin{key}{/pgf/circle arrow turn right east} + As above but |circle arrow start angle = 10|. + \end{key} + \begin{key}{/pgf/circle arrow turn right west} + As above but |circle arrow start angle = 280|. + \end{key} + \begin{key}{/pgf/circle arrow turn right south} + As above but |circle arrow start angle = 190|. + \end{key} + +{\catcode`\|=12 +\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.circlearrow,matrix}] +\begin{tikzpicture} +\matrix[matrix of nodes, draw=none, row sep=1em, column sep=1em, + every node/.style={draw=gray, shape=circle arrow, ultra thick, inner sep=1em} +] (m) { + |[circle arrow turn left north]| & |[circle arrow turn left east]| \\ + |[circle arrow turn left west]| & |[circle arrow turn left south]| \\ + |[circle arrow turn right north]| & |[circle arrow turn right east]| \\ + |[circle arrow turn right west]| & |[circle arrow turn right south]| \\ +}; +\end{tikzpicture} +\end{codeexample} +} +\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.circlearrow},width=16cm] +\begin{tikzpicture}\Huge +\node[name=s, shape=circle arrow, + circle arrow turn left west, shape example] + {Circle Arrow\vrule width 1pt height 2cm}; +\foreach \anchor/\placement in + {north west/above left, north/above, north east/above right, + west/left, center/above, east/right, + mid west/right, mid/above, mid east/left, + base west/left, base/below, base east/right, + south west/below left, south/below, south east/below right, + text/left, 10/right, 130/above} + \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} + node[\placement] {\scriptsize\texttt{(s.\anchor)}}; +\end{tikzpicture} +\end{codeexample} +\end{shape} +\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex new file mode 100644 index 0000000000..e7b2b9ba5a --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-circlecrosssplit.tex @@ -0,0 +1,53 @@ +% !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{Shape: Circle Cross Split} +\begin{pgflibrary}{ext.shapes.circlecrosssplit} + A circular shape with four parts that can be individually filled. + \inspiration{ShapeSplitCircle-Q}{ShapeSplitCircle-A} +\end{pgflibrary} +\begin{shape}{circle cross split} +This shape has four node parts that are placed near the center of a circle. + +\begin{key}{/pgf/circle cross split part fill=\marg{list} (initially none)} +Sets the custom fill color for each node part shape. +The items in \meta{list} should be separated by commas +(so if there is more than one item in \meta{list}, it must be surrounded by braces). +If \meta{list} has less entries than node parts, +then the remaining node parts use the color from the last entry in the list. +This key will automatically set |/pgf/circle cross split uses custom fill|. +\end{key} +\begin{key}{/pgf/circle cross split uses custom fill=\opt{\meta{boolean}} (default true)} +This enables the use of a custom fill for each of the node parts +(including the area covered by the |inner sep|). +The background path for the shape should not be filled (e.\,g., in \tikzname, +the |fill| option for the node must be implicitly or explicitly set to |none|). +Internally, this key sets the \TeX-if |\ifpgfcirclecrosssplitcustomfill| appropriately. +\end{key} +\begin{codeexample}[preamble=\usepgflibrary{ext.shapes.circlecrosssplit}] +\begin{tikzpicture}\Huge +\node[name=s, shape=circle cross split, shape example, inner xsep=1.5cm, fill=none, + circle cross split part fill={green,blue,red,yellow!90!black}] + {\nodepart{text}text\nodepart{two}two + \nodepart{three}three\nodepart{four}four}; +\foreach \anchor/\placement in + {north west/above left, north/above, north east/above right, + west/left, center/left, east/right, + mid west/right, mid/left, mid east/left, + base west/left, base/left, base east/right, +lower base west/left, lower base/below, lower base east/right, + lower mid west/left, lower mid/above, lower mid east/right, + south west/below left, south/below, south east/below right, + text/below, 10/right, 130/above, two/left, three/left, four/left} + \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} + node[\placement] {\scriptsize\texttt{(s.\anchor)}}; +\end{tikzpicture} +\end{codeexample} +\end{shape} +\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-heatmark.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-heatmark.tex new file mode 100644 index 0000000000..fa13cb0000 --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-heatmark.tex @@ -0,0 +1,83 @@ +% !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{Shape: Heatmark} +\begin{pgflibrary}{ext.shapes.heatmark} + A circular shape that has customizable rings around it. + \inspiration{ShapeHeat-Q}{ShapeHeat-A} +\end{pgflibrary} + +\begin{shape}{heatmark} + \begin{key}{/pgf/heatmark arcs=\meta{arcs num} (initially 3)} + Sets the number of arc around the circle to \meta{arcs num}. + \end{key} + \begin{key}{/pgf/heatmark arc width=\meta{arc width} (initially 4pt)} + Sets the width of the rings around the circle to \meta{arc width}. + \end{key} + \begin{key}{/pgf/heatmark arc sep=\meta{sep length} (initially 1pt)} + Sets the whitespace between the rings to \meta{sep length}. + \end{key} + \begin{key}{/pgf/heatmark arc rings=\meta{rings num} (initially 3)} + Sets the number of rings around the circle to \meta{rings num} + \end{key} + \begin{key}{/pgf/heatmark arc sep angle=\meta{sep angle} (initially 20)} + Sets the whitespace angle between the arcs in one ring to \meta{sep angle}. + \end{key} + \begin{key}{/pgf/heatmark inner opacity=\meta{inner opacity} (initially 0.8)} + Sets the opacity of the inner ring to \meta{inner opacity}. + \end{key} + \begin{key}{/pgf/heatmark outer opacity=\meta{low opacity} (initially 0.2)} + Sets the opacity of the outer ring to \meta{outer opacity}. + + The opacity of the rings between the outer and the inner ring will be interpolated by these two opacities. + \end{key} + +This shape takes the value of |/pgf/shape border rotate|% +\indexKeyO[/pgf/]{shape border rotate} into consideration. + +For every ring and for every arc the following styke keys are tried. +\begin{stylekey}{/pgf/heatmark ring \meta{ring number}} +\end{stylekey} +\begin{stylekey}{/pgf/heatmark arc \meta{arc number}} +\end{stylekey} +\begin{stylekey}{/pgf/heatmark ring \meta{ring number} arc \meta{arc number}} +\end{stylekey} + +The \pgfname shape is setup in a way that even \tikzname\space +styles can be used with a little bit work: +\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.heatmark}] +\tikz[ + shape border rotate=90, + /pgf/heatmark ring 1/.append style={/tikz/fill=green}, + /pgf/heatmark arc 1/.append style={/tikz/fill=blue}, + /pgf/heatmark ring 2 arc 2/.append style={/tikz/fill=yellow!70!black} +] \node[heatmark, fill=red] (n) {100}; +\end{codeexample} + +It is best to use this shape with no actual border (|draw = none|) and the |outer sep| set to zero. +\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.heatmark},width=16cm] +\begin{tikzpicture}\Huge +\node[name=s, shape=heatmark, shape example, + fill=blue!25, draw=none, outer sep=0pt] + {Heatmark\vrule width 1pt height 2cm}; +\foreach \anchor/\placement in + {north west/above left, north/above, + north east/above right, + west/left, center/above, east/right, + mid west/right, mid/above, mid east/left, + base west/left, base/below, base east/right, + south west/below left, south/below, + south east/below right, + text/left, 10/right, 130/above} + \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} + node[\placement] {\scriptsize\texttt{(s.\anchor)}}; +\end{tikzpicture} +\end{codeexample} +\end{shape} +\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-rectround.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-rectround.tex new file mode 100644 index 0000000000..78bab76925 --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-rectround.tex @@ -0,0 +1,58 @@ +% !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{Shape: Rectangle with Rounded Corners} +\begin{pgflibrary}{ext.shapes.rectangleroundedcorners} + A rectangle with rounded corners. +\end{pgflibrary} + +\begin{shape}{rectangle with rounded corners} +This library provides a |rectangle with rounded corners| where every corner can have a different radius. + +\begin{key}{/pgf/rectangle with rounded corners north west radius=\meta{dimen} (initially .5\string\pgflinewidth)} + Sets the north west radius to \meta{dimen}. +\end{key} +\begin{key}{/pgf/rectangle with rounded corners north east radius=\meta{dimen} (initially .5\string\pgflinewidth)} + Sets the north east radius to \meta{dimen}. +\end{key} +\begin{key}{/pgf/rectangle with rounded corners south west radius=\meta{dimen} (initially .5\string\pgflinewidth)} + Sets the south west radius to \meta{dimen}. +\end{key} +\begin{key}{/pgf/rectangle with rounded corners south east radius=\meta{dimen} (initially .5\string\pgflinewidth)} + Sets the south east radius to \meta{dimen}. +\end{key} +\begin{key}{/pgf/rectangle with rounded corners radius=\meta{dimen}} + Sets all radii to \meta{dimen}. +\end{key} + +\begin{codeexample}[preamble=\usepgflibrary{ext.shapes.rectangleroundedcorners}] +\begin{tikzpicture}\Huge +\node[name=s, shape=rectangle with rounded corners, shape example, + rectangle with rounded corners north west radius=10pt, + rectangle with rounded corners north east radius=20pt, + rectangle with rounded corners south west radius=30pt, + rectangle with rounded corners south east radius=40pt] {Rectangle with rounded corners\vrule width 1pt height 2cm}; +\foreach \anchor/\placement in + {north west/above left, north/above, north east/above right, + west/left, center/above, east/right, + mid west/right, mid/above, mid east/left, + base west/left, base/below, base east/right, + south west/below left, south/below, south east/below right, + text/below, 10/right, 130/above, + north west center/below right, north east center/left, + south west center/above right, south east center/left, + below north west/left, above south west/left, above south east/right, below north east/right, + right north west/above, right south west/below, left south east/below, left north east/above} + \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} + node[\placement] {\scriptsize\texttt{(s.\anchor)}}; +\end{tikzpicture} +\end{codeexample} +\end{shape} +\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex new file mode 100644 index 0000000000..580ef0d93f --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-shapes-superellipse.tex @@ -0,0 +1,105 @@ +% !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{Shape: Superellipse} +\begin{pgflibrary}{ext.shapes.superellipse} + Shape in the form of a ``superellipse''. + \inspiration{ShapeSuperEllipse-Q}{ShapeSuperEllipse-A} +\end{pgflibrary} + +\begin{shape}{superellipse} +This shape is defined by formula +\begin{equation*} + \biggl|\frac x{r_x}\biggr|^m + \biggl|\frac y{r_y}\biggr|^n = 1 +\end{equation*} +and will be plotted by +\begin{align*} + x(t) &= |\cos t|^{\frac 2m} \cdot r_x \sgn(\cos t) \\ + y(t) &= |\sin t|^{\frac 2n} \cdot r_y \sgn(\sin t) \\ +\end{align*} +where $r_x$ is half the node's width and $r_y$ is half the node's height. + +\begin{key}{/pgf/superellipse x exponent=\meta{x exponent}(initially 2.5)} +This sets $m$. +\end{key} +\begin{key}{/pgf/superellipse y exponent=\meta{y exponent}(initially 2.5)} +This sets $n$. +\end{key} +\begin{key}{/pgf/superellipse step=\meta{step}(initially 5)} +This specifies the step of the underlying plot handler. +The smaller \meta{step} is, the slower computation will be. + +Sensible values for \meta{step} are integer dividers of 90, i.\,e. +2, 3, 5, 6, 9, 10, 15, 18, 30 and 45. +\end{key} +\begin{key}{/pgf/superellipse exponent=\meta{exponent}} + Sets both |superellipse x exponent| and |superellipse y exponent| to \meta{exponent}. +\end{key} + +\paragraph{Notes on Implementation} +For implementing this shape, additional mathematical functions were declared. +\begin{math-function}{superellipsex(\mvar{t}, \mvar{2/m}, \mvar{$r_x$})} +\mathcommand +Returns the $x$ value on a point of the superellipse with its center on the origin following +\begin{equation*} + x = r_x\cos^{2/m} t +\end{equation*} +for values of $0 \leq t \leq 90$. +\end{math-function} +\begin{math-function}{superellipsey(\mvar{t}, \mvar{2/n}, \mvar{$r_y$})} +\mathcommand +Returns the $y$ value on a point of the superellipse with its center on the origin following +\begin{equation*} + y = r_y\cos^{2/n} t +\end{equation*} +for values of $0 \leq t \leq 90$. +\end{math-function} + +Both \pgfname math functions can be used at once with the following macro. +\begin{command}{\pgfmathsuperellipseXY\marg{t}\marg{2/m}\marg{2/n}\marg{a}\marg{b}} +Returns the $x$ value (in |\pgfmathresultX|) and the $y$ value (in |\pgfmathresultY|) of the superellipse with its center on the origin following +\begin{align*} + x & = a\cos^{2/m} t \\ + y & = b\cos^{2/n} t +\end{align*} +for values of $0 \leq t \leq 90$. + +Note: all arguments must be a valid number since they will not be parsed by \pgfname math. +\end{command} + +And additional internal macro was defined following the original naming scheme. +\def\temp{\begin{command}}% +\expandafter\temp\expandafter{\csname pgfutil@prefix@macrotomacro\endcsname\marg{macro 1}\marg{macro 2}} +Adds the once-expansion of \meta{macro 2} in front of \meta{macro 1}. +\end{command} + +\begin{codeexample}[preamble=\usetikzlibrary{ext.shapes.superellipse}] +\begin{tikzpicture}[superellipse step=1]\Huge +\node[name=s,shape=superellipse,shape example] {Superellipse\vrule width 1pt height 2cm}; +\foreach \anchor/\placement in + {north west/above left, north/above, north east/above right, + west/left, center/above, east/right, + mid west/right, mid/above, mid east/left, + base west/left, base/below, base east/right, + south west/below left, south/below, south east/below right, + text/left, 10/right, 130/above} + \draw[shift=(s.\anchor)] plot[mark=x] coordinates{(0,0)} + node[\placement] {\scriptsize\texttt{(s.\anchor)}}; +\end{tikzpicture} +\end{codeexample} +% +\begin{codeexample}[width=8cm,preamble=\usetikzlibrary{ext.shapes.superellipse}] +\begin{tikzpicture}[minimum width=1cm, minimum height=3cm] +\foreach \xe/\ye[count=\i] in {.5/.5, 1/1, 2/2, 3/3, .5/5} + \node[draw, superellipse, superellipse x exponent=\xe, superellipse y exponent=\ye] at (1.5*\i,0) {}; +\end{tikzpicture} +\end{codeexample} +\end{shape} +\endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex index b0f0f2906d..ccd378a6e7 100644 --- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual-en-pgf-trans.tex @@ -12,7 +12,7 @@ \label{pgflibrary:transformations} \begin{purepgflibrary}{ext.transformations.mirror} - This library adds mirror transformations to PGF. + This library adds mirror transformations to \pgfname. \end{purepgflibrary} Two approaches to mirror transformation exist: @@ -20,11 +20,12 @@ Two approaches to mirror transformation exist: \item Using the reflection matrix (see left column). This depends on |\pgfpointnormalised|\indexCommandO\pgfpointnormalised which involves - the sine\indexMathFunctionO{sin} and the cosine\indexMathFunctionO{cos} functions of PGFmath. + the sine\indexMathFunctionO{sin} and the cosine\indexMathFunctionO{cos} functions of \pgfname math. \item Using built-in transformations (see right column). - This depends on |\pgfmathanglebetween|\indexCommandO\pgfmathanglebetween which involves the arctangent (|atan2|\indexMathFunctionO{atan2}) function of PGFmath. + This depends on |\pgfmathanglebetweenpoints|\indexCommandO\pgfmathanglebetweenpoints which + involves the arctangent (|atan2|\indexMathFunctionO{atan2}) function of \pgfname math. \end{enumerate} Which one is better? I don't know. diff --git a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib new file mode 100644 index 0000000000..7bb85bf7b2 --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.bib @@ -0,0 +1,299 @@ +' +@Misc{NodeFam-Q, + author = {Holene}, + month = apr, + title = {Dependent node size in {TikZ}}, + year = {2017}, + file = {Snapshot:https\://tex.stackexchange.com/questions/107227/dependent-node-size-in-tikz/121054#121054:text/html}, + url = {https://tex.stackexchange.com/q/107227/16595}, + urldate = {2022-09-24}, +} + +@Misc{NodeFam-A, + author = {Qrrbrbirlbel}, + month = jun, + title = {Answer to \enquote{{Dependent} node size in {TikZ}}}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/107227/dependent-node-size-in-tikz/121054#121054:text/html}, + url = {https://tex.stackexchange.com/a/121054/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{TimerRect-Q, + author = {CrazyArm}, + month = apr, + title = {Is {It} {Possible} to {Combine} {TikZ} {Distance} and {Line}-{To} {Operations}?}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/106558/is-it-possible-to-combine-tikz-distance-and-line-to-operations/106571#106571:text/html}, + url = {https://tex.stackexchange.com/q/106558/16595}, + urldate = {2022-09-24}, +} + +@Misc{TimerRect-A, + author = {Qrrbrbirlbel}, + month = apr, + title = {Answer to \enquote{{Is} {It} {Possible} to {Combine} {TikZ} {Distance} and {Line}-{To} {Operations}?}}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/106558/is-it-possible-to-combine-tikz-distance-and-line-to-operations/106571#106571:text/html}, + shorttitle = {Answer to "{Is} {It} {Possible} to {Combine} {TikZ} {Distance} and {Line}-{To} {Operations}?}, + url = {https://tex.stackexchange.com/a/106571/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{TimerPara-Q, + author = {cis}, + month = may, + title = {{TikZ}: {How} to place a coordinate at parabola-path-position?}, + year = {2020}, + file = {Snapshot:https\://tex.stackexchange.com/questions/543251/tikz-how-to-place-a-coordinate-at-parabola-path-position/621012#621012:text/html}, + shorttitle = {{TikZ}}, + url = {https://tex.stackexchange.com/q/543251/16595}, + urldate = {2022-09-24}, +} + +@Misc{TimerPara-A, + author = {Qrrbrbirlbel}, + month = nov, + title = {Answer to \enquote{{TikZ}: {How} to place a coordinate at parabola-path-position?}}, + year = {2021}, + file = {Snapshot:https\://tex.stackexchange.com/questions/543251/tikz-how-to-place-a-coordinate-at-parabola-path-position/621012#621012:text/html}, + shorttitle = {Answer to "{TikZ}}, + url = {https://tex.stackexchange.com/a/621012/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{Pattern-Q, + author = {knut}, + month = mar, + title = {{TikZ}: {Define} pattern with reference to external picture}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/103980/tikz-define-pattern-with-reference-to-external-picture/107144#107144:text/html}, + shorttitle = {{TikZ}}, + url = {https://tex.stackexchange.com/q/103980/16595}, + urldate = {2022-09-24}, +} + +@Misc{Pattern-A, + author = {Qrrbrbirlbel}, + month = apr, + title = {Answer to \enquote{{TikZ}: {Define} pattern with reference to external picture}}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/103980/tikz-define-pattern-with-reference-to-external-picture/107144#107144:text/html}, + shorttitle = {Answer to "{TikZ}}, + url = {https://tex.stackexchange.com/a/107144/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{WeekNum-Q, + author = {Fence}, + month = nov, + title = {Add week day to calendar}, + year = {2019}, + file = {Snapshot:https\://tex.stackexchange.com/questions/517338/add-week-day-to-calendar/651888#651888:text/html}, + url = {https://tex.stackexchange.com/q/517338/16595}, + urldate = {2022-09-24}, +} + +@Misc{WeekNum-A, + author = {Qrrbrbirlbel}, + month = jul, + title = {Answer to \enquote{{Add} week day to calendar}}, + year = {2022}, + file = {Snapshot:https\://tex.stackexchange.com/questions/517338/add-week-day-to-calendar/651888#651888:text/html}, + url = {https://tex.stackexchange.com/a/651888/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{CalCond-Q, + author = {healyp}, + month = oct, + title = {{TikZ} calendar and conditional tests}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/140948/tikz-calendar-and-conditional-tests/141027#141027:text/html}, + url = {https://tex.stackexchange.com/q/140948/16595}, + urldate = {2022-09-24}, +} + +@Misc{CalCond-A, + author = {Qrrbrbirlbel}, + month = oct, + title = {Answer to \enquote{{TikZ} calendar and conditional tests}}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/140948/tikz-calendar-and-conditional-tests/141027#141027:text/html}, + url = {https://tex.stackexchange.com/a/141027/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{CalMath-Q, + author = {cis}, + month = dec, + title = {{TikZ} / calendar: {Set} the height of a monthly calendar}, + year = {2018}, + file = {Snapshot:https\://tex.stackexchange.com/questions/464589/tikz-calendar-set-the-height-of-a-monthly-calendar/653146#653146:text/html}, + shorttitle = {{TikZ} / calendar}, + url = {https://tex.stackexchange.com/q/464589/16595}, + urldate = {2022-09-24}, +} + +@Misc{CalMath-A, + author = {Qrrbrbirlbel}, + month = aug, + title = {Answer to \enquote{{TikZ} / calendar: {Set} the height of a monthly calendar}}, + year = {2022}, + file = {Snapshot:https\://tex.stackexchange.com/questions/464589/tikz-calendar-set-the-height-of-a-monthly-calendar/653146#653146:text/html}, + shorttitle = {Answer to "{TikZ} / calendar}, + url = {https://tex.stackexchange.com/a/653146/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{FullArc-Q, + author = {Peter, Anthony}, + month = apr, + title = {A rather difficult ring like picture to be drawn}, + year = {2017}, + file = {Snapshot:https\://tex.stackexchange.com/questions/144293/a-rather-difficult-ring-like-picture-to-be-drawn/144297#144297:text/html}, + url = {https://tex.stackexchange.com/q/144293/16595}, + urldate = {2022-09-24}, +} + +@Misc{FullArc-A, + author = {Qrrbrbirlbel}, + month = nov, + title = {Answer to "{A} rather difficult ring like picture to be drawn"}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/144293/a-rather-difficult-ring-like-picture-to-be-drawn/144297#144297:text/html}, + url = {https://tex.stackexchange.com/a/144297/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{NodeFam-Ellipse, + author = {nkk}, + month = jun, + title = {How to prevent tikz custom node fill from covering the text when using node-families library}, + year = {2019}, + file = {Snapshot:https\://tex.stackexchange.com/questions/494862/how-to-prevent-tikz-custom-node-fill-from-covering-the-text-when-using-node-fami:text/html}, + url = {https://tex.stackexchange.com/q/494862/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{ShapeHeat-Q, + author = {boje}, + month = may, + title = {Heatmap over country like {Google} {Map}}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/112929/heatmap-over-country-like-google-map/113004#113004:text/html}, + url = {https://tex.stackexchange.com/q/112929/16595}, + urldate = {2022-09-24}, +} + +@Misc{ShapeHeat-A, + author = {Qrrbrbirlbel}, + month = may, + title = {Answer to \enquote{{Heatmap} over country like {Google} {Map}}}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/112929/heatmap-over-country-like-google-map/113004#113004:text/html}, + url = {https://tex.stackexchange.com/a/113004/16595}, + urldate = {2022-09-24}, +} + +' +@Misc{ShapeSplitCircle-Q, + author = {Marco}, + month = apr, + title = {{TikZ} - {Four} {Colored} {Circle} {Split}}, + year = {2017}, + file = {Snapshot:https\://tex.stackexchange.com/questions/121686/tikz-four-colored-circle-split/121767#121767:text/html}, + url = {https://tex.stackexchange.com/q/121686/16595}, + urldate = {2022-09-24}, +} + +@Misc{ShapeSplitCircle-A, + author = {Qrrbrbirlbel}, + month = jun, + title = {Answer to \enquote{{TikZ} - {Four} {Colored} {Circle} {Split}}}, + year = {2013}, + file = {Snapshot:https\://tex.stackexchange.com/questions/121686/tikz-four-colored-circle-split/121767#121767:text/html}, + url = {https://tex.stackexchange.com/a/121767/16595}, + urldate = {2022-09-24}, +} + +' +@Online{ShapeSuperEllipse-Q, + author = {somenxavier}, + file = {Snapshot:https\://tex.stackexchange.com/questions/649144/an-oval-surrounded-a-long-text-inside-in-tikz-equivalent-cover-background-of/654759#654759:text/html}, + month = aug, + title = {An oval surrounded a *long text* inside in {TikZ} [equivalent cover background of {METAFUN}]}, + titleaddon = {{TeX} - {LaTeX} Stack Exchange}, + url = {https://tex.stackexchange.com/q/649144/16595}, + urldate = {2022-09-24}, + year = {2022}, +} + +@Online{ShapeSuperEllipse-A, + author = {Qrrbrbirlbel}, + file = {Snapshot:https\://tex.stackexchange.com/questions/649144/an-oval-surrounded-a-long-text-inside-in-tikz-equivalent-cover-background-of/654759#654759:text/html}, + month = aug, + title = {Answer to \enquote{An oval surrounded a *long text* inside in {TikZ} [equivalent cover background of {METAFUN}]}}, + titleaddon = {{TeX} - {LaTeX} Stack Exchange}, + url = {https://tex.stackexchange.com/a/654759/16595}, + urldate = {2022-09-24}, + year = {2022}, +} + +' +@Online{ShapeCircleArrow-Q, + author = {projetmbc}, + file = {Snapshot:https\://tex.stackexchange.com/questions/95221/tikz-circled-arrow/95263#95263:text/html}, + month = jan, + title = {{TikZ} - \enquote{Circled} arrow}, + titleaddon = {{TeX} - {LaTeX} Stack Exchange}, + url = {https://tex.stackexchange.com/q/95221/16595}, + urldate = {2022-09-24}, + year = {2013}, +} + +@Online{ShapeCircleArrow-A, + author = {Qrrbrbirlbel}, + file = {Snapshot:https\://tex.stackexchange.com/questions/95221/tikz-circled-arrow/95263#95263:text/html}, + month = jan, + title = {Answer to \enquote{{TikZ} - \enquote{Circled} arrow}}, + titleaddon = {{TeX} - {LaTeX} Stack Exchange}, + url = {https://tex.stackexchange.com/a/95263/16595}, + urldate = {2022-09-24}, + year = {2013}, +} + +' +@Online{ForeachUse-Q, + author = {Bar, Foo}, + file = {Snapshot:https\://tex.stackexchange.com/questions/110962/how-to-use-declared-tikz-functions-in-foreach-condition/110996#110996:text/html}, + month = apr, + title = {How to use declared {TikZ} functions in {\textbackslash}foreach condition?}, + titleaddon = {{TeX} - {LaTeX} Stack Exchange}, + url = {https://tex.stackexchange.com/q/110962/16595}, + urldate = {2022-09-24}, + year = {2013}, +} + +@Online{ForeachUse-A, + author = {Qrrbrbirlbel}, + file = {Snapshot:https\://tex.stackexchange.com/questions/110962/how-to-use-declared-tikz-functions-in-foreach-condition/110996#110996:text/html}, + month = apr, + shorttitle = {Answer to "How to use declared {TikZ} functions in {\textbackslash}foreach condition?}, + title = {Answer to \enquote{How to use declared {TikZ} functions in {\textbackslash}foreach condition?}}, + titleaddon = {{TeX} - {LaTeX} Stack Exchange}, + url = {https://tex.stackexchange.com/a/110996/16595}, + urldate = {2022-09-24}, + year = {2013}, +} + +@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 Binary files differindex 7879c7cd9b..afeef21a22 100644 --- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.pdf 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 2375904d80..1f2400847a 100644 --- a/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex +++ b/graphics/pgf/contrib/tikz-ext/doc/tikz-ext-manual.tex @@ -19,7 +19,6 @@ %\iftikzextmanualexternalize \tikzexternalize[ prefix=tikz/, -% prefix=../../tikz-extensions-tikz/, % mode=convert with system call, %mode=list and make, %mode=list only,export=true,% simply skips EVERY picture -> good for debugging the text. diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlearrow.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlearrow.code.tex new file mode 100644 index 0000000000..9eb1c6ab09 --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlearrow.code.tex @@ -0,0 +1,66 @@ +% 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. +% +\pgfset{ + circle arrow start angle/.initial=, + circle arrow end angle/.initial=, + circle arrow delta angle/.initial=, + circle arrow arrows/.initial=-, + circle arrow/@turn left/.style={/pgf/circle arrow arrows=->,/pgf/circle arrow delta angle=340}, + circle arrow/@turn right/.style={/pgf/circle arrow arrows=<-,/pgf/circle arrow delta angle=340}, + circle arrow turn left north/.style = {/pgf/circle arrow/@turn left, /pgf/circle arrow start angle=100}, + circle arrow turn left east/.style = {/pgf/circle arrow/@turn left, /pgf/circle arrow start angle=10}, + circle arrow turn left south/.style = {/pgf/circle arrow/@turn left, /pgf/circle arrow start angle=280}, + circle arrow turn left west/.style = {/pgf/circle arrow/@turn left, /pgf/circle arrow start angle=190}, + circle arrow turn right north/.style = {/pgf/circle arrow/@turn right, /pgf/circle arrow start angle=100}, + circle arrow turn right east/.style = {/pgf/circle arrow/@turn right, /pgf/circle arrow start angle=10}, + circle arrow turn right south/.style = {/pgf/circle arrow/@turn right, /pgf/circle arrow start angle=280}, + circle arrow turn right west/.style = {/pgf/circle arrow/@turn right, /pgf/circle arrow start angle=190}, +} +\pgfdeclareshape{circle arrow}{ + \inheritsavedanchors[from=circle] + \inheritanchorborder[from=circle] + \inheritanchor[from=circle]{north} + \inheritanchor[from=circle]{north west} + \inheritanchor[from=circle]{north east} + \inheritanchor[from=circle]{center} + \inheritanchor[from=circle]{west} + \inheritanchor[from=circle]{east} + \inheritanchor[from=circle]{mid} + \inheritanchor[from=circle]{mid west} + \inheritanchor[from=circle]{mid east} + \inheritanchor[from=circle]{base} + \inheritanchor[from=circle]{base west} + \inheritanchor[from=circle]{base east} + \inheritanchor[from=circle]{south} + \inheritanchor[from=circle]{south west} + \inheritanchor[from=circle]{south east} + \backgroundpath{ + \pgfkeysgetvalue{/pgf/circle arrow start angle}\pgf@sh@circlearrow@s + \pgfkeysgetvalue{/pgf/circle arrow end angle}\pgf@sh@circlearrow@e + \pgfkeysgetvalue{/pgf/circle arrow delta angle}\pgf@sh@circlearrow@d + \ifx\pgf@sh@circlearrow@s\pgfutil@empty% + \pgfmathsetmacro\pgf@sh@circlearrow@s{\pgf@sh@circlearrow@e-\pgf@sh@circlearrow@d}% + \else + \ifx\pgf@sh@circlearrow@e\pgfutil@empty% + \pgfmathsetmacro\pgf@sh@circlearrow@e{\pgf@sh@circlearrow@s+\pgf@sh@circlearrow@d}% + \fi% + \fi + \pgfutil@tempdima=\radius + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}% + \ifdim\pgf@xb<\pgf@yb + \advance\pgfutil@tempdima by-\pgf@yb + \else + \advance\pgfutil@tempdima by-\pgf@xb + \fi + \pgfpathmoveto{\pgfpointadd{\centerpoint}{\pgfpointpolar{\pgf@sh@circlearrow@s}{\pgfutil@tempdima}}}% + \pgfpatharc{\pgf@sh@circlearrow@s}{\pgf@sh@circlearrow@e}{\pgfutil@tempdima}% + \pgfkeysgetvalue{/pgf/circle arrow arrows}\pgf@temp + \expandafter\pgfsetarrows\expandafter{\pgf@temp}% + } +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlecrosssplit.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlecrosssplit.code.tex new file mode 100644 index 0000000000..7bc2761fb4 --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.circlecrosssplit.code.tex @@ -0,0 +1,292 @@ +% 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. +% +\usepgflibrary{shapes.multipart} +\let\pgfnodeparttrbox\pgfnodeparttwobox +\let\pgfnodepartblbox\pgfnodepartthreebox +\let\pgfnodepartbrbox\pgfnodepartfourbox +\newif\ifpgfcirclecrosssplitcustomfill +\pgfset{% + circle cross split part fill/.code=% + \def\pgf@lib@sh@ccs@list@fill{#1}% + \pgfcirclecrosssplitcustomfilltrue,% + circle cross split uses custom fill/.is if=pgfcirclecrosssplitcustomfill +} +\def\pgf@lib@sh@ccs@list@fill{none}% +\pgfdeclareshape{circle cross split}{% + \nodeparts{text,two,three,four}% + \savedanchor\centerpoint{% + \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}% + \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}% + \pgf@x =\wd\pgfnodeparttextbox + \pgf@yb=\dp\pgfnodeparttextbox + \pgf@y=\dp\pgfnodeparttwobox + \ifdim\pgf@yb>\pgf@y + \pgf@y=\pgf@yb + \fi + \advance\pgf@x\pgf@xa + \advance\pgf@y-\pgf@ya + \advance\pgf@x.5\pgflinewidth + \advance\pgf@y-.5\pgflinewidth + }% + \savedanchor\twoanchor{% + \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}% + \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}% + \advance\pgf@x.5\pgflinewidth + \advance\pgf@x\pgf@xa + \advance\pgf@y.5\pgflinewidth + \advance\pgf@y\pgf@ya + \pgf@yb\dp\pgfnodeparttextbox + \pgf@yc\dp\pgfnodeparttwobox + \ifdim\pgf@yb>\pgf@yc + \pgf@yc\pgf@yb + \fi + \advance\pgf@y\pgf@yc + }% + \savedanchor\threeanchor{% + \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}% + \pgf@x\wd\pgfnodeparttextbox + \pgf@yb\dp\pgfnodeparttextbox + \pgf@yc\dp\pgfnodeparttwobox + \ifdim\pgf@yb>\pgf@yc + \pgf@yc\pgf@yb + \fi + \advance\pgf@y-\pgf@yc + \advance\pgf@y-2\pgf@ya + \advance\pgf@y-\pgflinewidth + \pgf@yb\ht\pgfnodepartthreebox + \pgf@yc\ht\pgfnodepartfourbox + \ifdim\pgf@yb>\pgf@yc + \pgf@yc\pgf@yb + \fi + \advance\pgf@y-\pgf@yc + \advance\pgf@x-\wd\pgfnodepartthreebox + }% + \saveddimen\radius{% + % height (upper): + \pgf@y=\ht\pgfnodeparttextbox + \ifdim\pgf@y<\ht\pgfnodeparttwobox + \pgf@y=\ht\pgfnodeparttwobox + \fi + \ifdim\dp\pgfnodeparttextbox>\dp\pgfnodeparttwobox + \advance\pgf@y by\dp\pgfnodeparttextbox + \else + \advance\pgf@y by\dp\pgfnodeparttwobox + \fi + % height (lower): + \pgf@yb\ht\pgfnodepartthreebox + \ifdim\pgf@yb<\ht\pgfnodepartfourbox + \pgf@yb=\ht\pgfnodepartfourbox + \fi + \pgf@yc=\dp\pgfnodepartthreebox + \ifdim\pgf@yc<\dp\pgfnodepartfourbox + \advance\pgf@yb by\dp\pgfnodepartfourbox + \else + \advance\pgf@yb by\pgf@yc + \fi + \ifdim\pgf@yc>\pgf@y + \pgf@y=\pgf@yc + \fi + \pgfmathsetlength\pgf@ya{\pgfkeysvalueof{/pgf/inner ysep}}% + \advance\pgf@y2\pgf@ya + % + \pgf@x\wd\pgfnodeparttextbox + \pgf@xa\wd\pgfnodepartthreebox + \pgf@xb\wd\pgfnodeparttwobox + \pgf@xc\wd\pgfnodepartfourbox + \ifdim\pgf@xa>\pgf@x + \pgf@x\pgf@xa + \fi + \ifdim\pgf@xb>\pgf@x + \pgf@x\pgf@xb + \fi + \ifdim\pgf@xc>\pgf@x + \pgf@x\pgf@xc + \fi + \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/inner xsep}}% + \advance\pgf@x by 2\pgf@xa + \ifdim\pgf@y>\pgf@x + \pgf@x=\pgf@y + \fi + \advance\pgf@x by\pgflinewidth + % + \pgf@xa=\pgf@x + \pgf@ya=\pgf@y + % from circle: + \pgf@process{\pgfpointnormalised{}}% + \ifdim\pgf@x>\pgf@y% + \c@pgf@counta=\pgf@x% + \ifnum\c@pgf@counta=0\relax% + \else% + \divide\c@pgf@counta by 255\relax% + \pgf@xa=16\pgf@xa\relax% + \divide\pgf@xa by\c@pgf@counta% + \pgf@xa=16\pgf@xa\relax% + \fi% + \else% + \c@pgf@counta=\pgf@y% + \ifnum\c@pgf@counta=0\relax% + \else% + \divide\c@pgf@counta by 255\relax% + \pgf@ya=16\pgf@ya\relax% + \divide\pgf@ya by\c@pgf@counta% + \pgf@xa=16\pgf@ya\relax% + \fi% + \fi% + \pgf@x=\pgf@xa% + % + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/minimum width}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/minimum height}}% + \ifdim\pgf@x<.5\pgf@xb + \pgf@x=.5\pgf@xb + \fi + \ifdim\pgf@x<.5\pgf@yb + \pgf@x=.5\pgf@yb + \fi + % + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}% + \ifdim\pgf@xb<\pgf@yb + \advance\pgf@x\pgf@yb + \else + \advance\pgf@x\pgf@xb + \fi + }% + \inheritanchorborder[from=circle]% + \inheritanchor[from=circle]{north}% + \inheritanchor[from=circle]{north west}% + \inheritanchor[from=circle]{north east}% + \inheritanchor[from=circle]{center}% + \inheritanchor[from=circle]{west}% + \inheritanchor[from=circle]{east}% + \inheritanchor[from=circle]{mid}% + \inheritanchor[from=circle]{mid west}% + \inheritanchor[from=circle]{mid east}% + \inheritanchor[from=circle]{base}% + \inheritanchor[from=circle]{base west}% + \inheritanchor[from=circle]{base east}% + \inheritanchor[from=circle]{south}% + \inheritanchor[from=circle]{south west}% + \inheritanchor[from=circle]{south east}% + \anchor{two}{\twoanchor}% + \anchor{three}{\threeanchor}% + \anchor{four}{ + \threeanchor + \pgf@ya=\pgf@y + \twoanchor + \pgf@y=\pgf@ya + }% + \anchor{lower base}{% + \threeanchor + \pgf@ya=\pgf@y + \centerpoint + \pgf@y=\pgf@ya + } + \anchor{lower base west}{% + \threeanchor + \pgf@ya=\pgf@y + \centerpoint + \pgf@y=\pgf@ya + \advance\pgf@x by-\radius + } + \anchor{lower base east}{% + \threeanchor + \pgf@ya=\pgf@y + \centerpoint + \pgf@y=\pgf@ya + \advance\pgf@x by\radius + } + \anchor{lower mid}{% + \threeanchor + \pgf@ya=\pgf@y + \centerpoint + \pgf@y=\pgf@ya + \pgfmathsetlength\pgf@ya{+.5ex}% + \advance\pgf@y by\pgf@ya + } + \anchor{lower mid west}{% + \threeanchor + \pgf@ya=\pgf@y + \centerpoint + \pgf@y=\pgf@ya + \advance\pgf@x by-\radius + \pgfmathsetlength\pgf@ya{+.5ex}% + \advance\pgf@y by\pgf@ya + } + \anchor{lower mid east}{% + \threeanchor + \pgf@ya=\pgf@y + \centerpoint + \pgf@y=\pgf@ya + \advance\pgf@x by\radius + \pgfmathsetlength\pgf@ya{+.5ex}% + \advance\pgf@y by\pgf@ya + } + \inheritbackgroundpath[from=circle] + \beforebackgroundpath{% + \pgfutil@tempdima=\radius + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}% + \ifdim\pgf@xb<\pgf@yb + \advance\pgfutil@tempdima by-\pgf@yb + \else + \advance\pgfutil@tempdima by-\pgf@xb + \fi + \advance\pgfutil@tempdima by-.5\pgflinewidth% + \pgfsetshortenstart{0pt}% + \pgfsetshortenend{0pt}% + \pgfsetarrows{-}% + \pgfpathmoveto + {\pgfpointadd{\centerpoint}{\pgfqpoint{-\pgfutil@tempdima}{0pt}}}% + \pgfpathlineto + {\pgfpointadd{\centerpoint}{\pgfqpoint{\pgfutil@tempdima}{0pt}}}% + \pgfpathmoveto + {\pgfpointadd{\centerpoint}{\pgfqpoint{0pt}{-\pgfutil@tempdima}}}% + \pgfpathlineto + {\pgfpointadd{\centerpoint}{\pgfqpoint{0pt}{\pgfutil@tempdima}}}% + \pgfusepathqstroke + }% + \behindbackgroundpath{% + \pgfutil@tempdima=\radius + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}% + \ifdim\pgf@xb<\pgf@yb + \advance\pgfutil@tempdima by-\pgf@yb + \else + \advance\pgfutil@tempdima by-\pgf@xb + \fi + \advance\pgfutil@tempdima by-.5\pgflinewidth% + \ifpgfcirclecrosssplitcustomfill% + \pgf@lib@sh@rs@process@list{\pgf@lib@sh@ccs@list@fill}{4}% + {% + \pgfmathloop + \ifnum\pgfmathcounter>4% + \else% + \pgf@lib@sh@getalpha\pgf@lib@sh@rs@number{\pgfmathcounter}% + \edef\pgf@tempa + {\csname pgf@lib@sh@rs@\pgf@lib@sh@rs@number @item\endcsname}% + \ifx\pgf@tempa\pgf@lib@sh@rs@nonetext\else + \pgfsetfillcolor{\pgf@tempa}% + \ifcase\pgfmathcounter\or + \def\pgf@lib@sh@ccs@angle{90}\or + \def\pgf@lib@sh@ccs@angle{0}\or + \def\pgf@lib@sh@ccs@angle{180}\else + \def\pgf@lib@sh@ccs@angle{270}% + \fi + \pgfpathmoveto{\centerpoint}% + \pgfpathlineto{\pgfpointadd{\centerpoint} + {\pgfqpointpolar{\pgf@lib@sh@ccs@angle}{\pgfutil@tempdima}}}% + \pgfpatharc{+\pgf@lib@sh@ccs@angle}{\pgf@lib@sh@ccs@angle+90} + {+\pgfutil@tempdima}% + \pgfpathclose + \pgfusepathqfill + \fi + \repeatpgfmathloop + }% + \fi + }% +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.heatmark.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.heatmark.code.tex new file mode 100644 index 0000000000..477d0442da --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.heatmark.code.tex @@ -0,0 +1,181 @@ +% 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. +% +\pgfset{ + heatmark arc width/.initial=+4pt, + heatmark arc sep/.initial=+1pt, + heatmark arc rings/.initial=3, + heatmark arcs/.initial=3, + heatmark arc sep angle/.initial=20, + heatmark inner opacity/.initial=.8, + heatmark outer opacity/.initial=.2 +} +\pgfdeclareshape{heatmark} +% +% Draws a circle around the text +% +{ + \savedanchor\centerpoint{% + \pgf@x=.5\wd\pgfnodeparttextbox% + \pgf@y=.5\ht\pgfnodeparttextbox% + \advance\pgf@y by-.5\dp\pgfnodeparttextbox% + } + + \saveddimen\innerradius{% + % + % Caculate ``height radius'' + % + \pgf@ya=.5\ht\pgfnodeparttextbox% + \advance\pgf@ya by.5\dp\pgfnodeparttextbox% + \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/inner ysep}}% + \advance\pgf@ya by\pgf@yb% + % + % Caculate ``width radius'' + % + \pgf@xa=.5\wd\pgfnodeparttextbox% + \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/inner xsep}}% + \advance\pgf@xa by\pgf@xb% + % + % Calculate length of radius vector: + % + \pgf@process{\pgfpointnormalised{\pgfqpoint{\pgf@xa}{\pgf@ya}}}% + \ifdim\pgf@x>\pgf@y% + \c@pgf@counta=\pgf@x% + \ifnum\c@pgf@counta=0\relax% + \else% + \divide\c@pgf@counta by 255\relax% + \pgf@xa=16\pgf@xa\relax% + \divide\pgf@xa by\c@pgf@counta% + \pgf@xa=16\pgf@xa\relax% + \fi% + \else% + \c@pgf@counta=\pgf@y% + \ifnum\c@pgf@counta=0\relax% + \else% + \divide\c@pgf@counta by 255\relax% + \pgf@ya=16\pgf@ya\relax% + \divide\pgf@ya by\c@pgf@counta% + \pgf@xa=16\pgf@ya\relax% + \fi% + \fi% + \pgf@x=\pgf@xa% + % + % If necessary, adjust radius so that the size requirements are + % met: + % + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/minimum width}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/minimum height}}% + \ifdim\pgf@x<.5\pgf@xb% + \pgf@x=.5\pgf@xb% + \fi% + \ifdim\pgf@x<.5\pgf@yb% + \pgf@x=.5\pgf@yb% + \fi% + }% + + \saveddimen\radius{% + \pgfmathsetlength{\pgf@xb}{\pgfkeysvalueof{/pgf/outer xsep}}% + \pgfmathsetlength{\pgf@yb}{\pgfkeysvalueof{/pgf/outer ysep}}% + \ifdim\pgf@xb<\pgf@yb% + \advance\pgf@x by\pgf@yb% + \else% + \advance\pgf@x by\pgf@xb% + \fi% + \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/heatmark arc rings}}% + \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/heatmark arc width}+\pgfkeysvalueof{/pgf/heatmark arc sep}}% + \multiply\pgf@xa\c@pgf@counta + \advance\pgf@x\pgf@xa + }% + % + % Anchors + % + \inheritanchor[from=circle]{north} + \inheritanchor[from=circle]{north west} + \inheritanchor[from=circle]{north east} + \inheritanchor[from=circle]{center} + \inheritanchor[from=circle]{west} + \inheritanchor[from=circle]{east} + \inheritanchor[from=circle]{mid} + \inheritanchor[from=circle]{mid west} + \inheritanchor[from=circle]{mid east} + \inheritanchor[from=circle]{base} + \inheritanchor[from=circle]{base west} + \inheritanchor[from=circle]{base east} + \inheritanchor[from=circle]{south} + \inheritanchor[from=circle]{south west} + \inheritanchor[from=circle]{south east} + \inheritanchorborder[from=circle] + % + % Background path + % + \backgroundpath{ + \pgfutil@tempdima=\innerradius% + \pgfpathcircle{\centerpoint}{\pgfutil@tempdima}% + }% + % + % + % + \behindbackgroundpath{% + \pgfmathsetcount\c@pgf@counta{\pgfkeysvalueof{/pgf/heatmark arc rings}}% heat arc rings + \pgfmathsetcount\c@pgf@countb{\pgfkeysvalueof{/pgf/heatmark arcs}}% heat arcs + \pgfmathsetlength\pgf@xa{\pgfkeysvalueof{/pgf/heatmark arc width}}% heat arc width + \pgfmathsetlength\pgf@xb{\pgfkeysvalueof{/pgf/heatmark arc sep}}% heat arc sep + %\pgfmathsetmacro\pgf@tempa{\pgfkeysvalueof{/pgf/heat arc sep angle}}% heat arc sep angle + \pgfmathsetmacro\pgf@tempb{360/\c@pgf@countb-(\pgfkeysvalueof{/pgf/heatmark arc sep angle})}% heat arc + \pgfmathsetmacro\pgf@tempc{\pgfkeysvalueof{/pgf/shape border rotate}}% heat rotate + % + \pgfmathsetmacro\pgf@tempd{\pgfkeysvalueof{/pgf/heatmark inner opacity}}% heat opacity high + \ifnum\c@pgf@counta=1 + \def\tikzext@heatmark@opacity@seps{0}% + \else + \pgfmathsetmacro\tikzext@heatmark@opacity@seps + {(\pgf@tempd-(\pgfkeysvalueof{/pgf/heatmark outer opacity}))% + /(\c@pgf@counta-1)}% + \fi + \pgfutil@tempcnta=0 + \pgfutil@tempcntb=0 + \pgf@ya\innerradius\relax + \pgftransformshift{\centerpoint} + \pgfutil@loop % ring loop + \advance\pgf@ya\pgf@xb % current radius + heat arc sep + \pgf@yb\pgf@ya + \advance\pgf@yb\pgf@xa % current radius + heat arc sep + heat arc width + \pgfsetfillopacity{\pgf@tempd}% + \begingroup + \edef\pgf@marshal{\noexpand\pgfset{heatmark ring \the\numexpr\pgfutil@tempcnta+1\relax/.try}}% + \pgf@marshal + \csname tikz@options\endcsname + {% + \pgfutil@loop + \pgfmathsetmacro\tikzext@heatmark@start@angle{\pgf@tempc-.5*\pgf@tempb+\pgfutil@tempcntb*(360/\c@pgf@countb)}% + % path + \begingroup + \edef\pgf@marshal{\noexpand\pgfset{heatmark arc \the\numexpr\pgfutil@tempcntb+1\relax/.try}% + \noexpand\pgfset{heatmark ring \the\numexpr\pgfutil@tempcnta+1\relax\space arc \the\numexpr\pgfutil@tempcntb+1\relax/.try}}% + \pgf@marshal + \csname tikz@options\endcsname + \pgfpathmoveto{\pgfpointpolar{\tikzext@heatmark@start@angle}{\pgf@ya}}% + \pgfpatharc{\tikzext@heatmark@start@angle}{\tikzext@heatmark@start@angle+\pgf@tempb}{\pgf@ya}% + \pgfpathlineto{\pgfpointpolar{\tikzext@heatmark@start@angle+\pgf@tempb}{\pgf@yb}}% + \pgfpatharc{\tikzext@heatmark@start@angle+\pgf@tempb}{\tikzext@heatmark@start@angle}{\pgf@yb}% + \pgfpathclose + \pgfusepathqfill + \endgroup + \advance\pgfutil@tempcntb\@ne + \ifnum\pgfutil@tempcntb<\c@pgf@countb + \pgfutil@repeat + }% + \endgroup + \advance\pgfutil@tempcnta\@ne + \ifnum\pgfutil@tempcnta<\c@pgf@counta + \pgf@ya\pgf@yb + \pgfmathsetmacro\pgf@tempd{\pgf@tempd-\tikzext@heatmark@opacity@seps}% + \pgfutil@repeat + \pgftransformshift{\pgfqpointscale{-1}{\centerpoint}}% + } +} +\endinput diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.rectangleroundedcorners.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.rectangleroundedcorners.code.tex new file mode 100644 index 0000000000..37baf7abbf --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.rectangleroundedcorners.code.tex @@ -0,0 +1,318 @@ +\pgfset{ + rectangle with rounded corners north west radius/.initial=.5\pgflinewidth, + rectangle with rounded corners north east radius/.initial=.5\pgflinewidth, + rectangle with rounded corners south west radius/.initial=.5\pgflinewidth, + rectangle with rounded corners south east radius/.initial=.5\pgflinewidth, + rectangle with rounded corners radius/.style={ + /pgf/rectangle with rounded corners north west radius={#1}, + /pgf/rectangle with rounded corners north east radius={#1}, + /pgf/rectangle with rounded corners south west radius={#1}, + /pgf/rectangle with rounded corners south east radius={#1}} +}% +\pgfdeclareshape{rectangle with rounded corners}{% + \savedmacro\rectanglewithroundedcornersparameter{% + % + % width = max(text width + 2 * inner xseps, minimum width) + 2 * outer xseps + \pgf@x=\wd\pgfnodeparttextbox + \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}% + \advance\pgf@x by 2\pgf@xc + \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/minimum width}}% + \ifdim\pgf@x<\pgf@xc + \pgf@x=\pgf@xc + \fi + % + \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/outer xsep}}% + \edef\outerxsep{\the\pgf@xc}% + \addtosavedmacro\outerxsep + \advance\pgf@x by 2\pgf@xc + \pgf@x=.5\pgf@x + \edef\halfwidth{\the\pgf@x}% + \addtosavedmacro\halfwidth + % + % height = max(text height + text depth + 2 * inner yseps, minimum height) + 2 * outer yseps + \pgf@y=\ht\pgfnodeparttextbox + \advance\pgf@y by \dp\pgfnodeparttextbox + \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}% + \advance\pgf@y by 2\pgf@yc + \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/minimum height}}% + \ifdim\pgf@y<\pgf@yc + \pgf@y=\pgf@yc + \fi + % + \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/outer ysep}}% + \edef\outerysep{\the\pgf@yc}% + \addtosavedmacro\outerysep + \advance\pgf@y by 2\pgf@yc + \pgf@y=.5\pgf@y + \edef\halfheight{\the\pgf@y}% + \addtosavedmacro\halfheight + % + % \centerpoint + \pgf@x=.5\wd\pgfnodeparttextbox + \pgf@y=.5\ht\pgfnodeparttextbox + \advance\pgf@y by -.5\dp\pgfnodeparttextbox + \pgfextract@process\centerpoint{}% + \addtosavedmacro\centerpoint + % + \pgfmathsetlengthmacro\northwestradius{\pgfkeysvalueof{/pgf/rectangle with rounded corners north west radius}} + \pgfmathsetlengthmacro\northeastradius{\pgfkeysvalueof{/pgf/rectangle with rounded corners north east radius}} + \pgfmathsetlengthmacro\southwestradius{\pgfkeysvalueof{/pgf/rectangle with rounded corners south west radius}} + \pgfmathsetlengthmacro\southeastradius{\pgfkeysvalueof{/pgf/rectangle with rounded corners south east radius}} + \addtosavedmacro\northwestradius + \addtosavedmacro\northeastradius + \addtosavedmacro\southwestradius + \addtosavedmacro\southeastradius + }% + \anchor{center}{% + \rectanglewithroundedcornersparameter + \centerpoint + } + \anchor{west}{% + \rectanglewithroundedcornersparameter + \centerpoint + \advance\pgf@x by -\halfwidth + } + \anchor{east}{% + \rectanglewithroundedcornersparameter + \centerpoint + \advance\pgf@x by \halfwidth + } + \anchor{north}{% + \rectanglewithroundedcornersparameter + \centerpoint + \advance\pgf@y by \halfheight + } + \anchor{south}{% + \rectanglewithroundedcornersparameter + \centerpoint + \advance\pgf@y by -\halfheight + } + \anchor{mid}{% + \rectanglewithroundedcornersparameter + \centerpoint + \pgfmathsetlength\pgf@y{+.5ex}% + } + \anchor{mid west}{% + \csname pgf@anchor@rectangle with rounded corners@west\endcsname + \pgfmathsetlength\pgf@y{+.5ex}% + } + \anchor{mid east}{% + \csname pgf@anchor@rectangle with rounded corners@east\endcsname + \pgfmathsetlength\pgf@y{+.5ex}% + } + \anchor{base}{% + \rectanglewithroundedcornersparameter + \centerpoint + \pgf@y=0pt + } + \anchor{base west}{% + \csname pgf@anchor@rectangle with rounded corners@west\endcsname + \pgf@y=0pt + } + \anchor{base east}{% + \csname pgf@anchor@rectangle with rounded corners@east\endcsname + \pgf@y=0pt + } + \anchor{north west}{% + \csname pgf@anchor@rectangle with rounded corners@north west center\endcsname + \ifdim\northwestradius=0pt + \else + \pgf@process{\pgfpointadd{}{\pgfpointpolar{135}{\northwestradius+\outerxsep and \northwestradius+\outerysep}}}% + \fi + } + \anchor{north west center}{% + \rectanglewithroundedcornersparameter + \pgf@x=-\halfwidth + \pgf@y=\halfheight + \ifdim\northwestradius=0pt + \else + \advance\pgf@x by \outerxsep + \advance\pgf@x by \northwestradius + \advance\pgf@y by -\outerysep + \advance\pgf@y by -\northwestradius + \fi + \pgf@process{\pgfpointadd{}{\centerpoint}}% + } + \anchor{north east}{% + \csname pgf@anchor@rectangle with rounded corners@north east center\endcsname + \ifdim\northeastradius=0pt + \else + \pgf@process{\pgfpointadd{}{\pgfpointpolar{45}{\northeastradius+\outerxsep and \northeastradius+\outerysep}}}% + \fi + } + \anchor{north east center}{% + \rectanglewithroundedcornersparameter + \pgf@x=\halfwidth + \pgf@y=\halfheight + \ifdim\northeastradius=0pt + \else + \advance\pgf@x by -\outerxsep + \advance\pgf@x by -\northeastradius + \advance\pgf@y by -\outerysep + \advance\pgf@y by -\northeastradius + \fi + \pgf@process{\pgfpointadd{}{\centerpoint}}% + } + \anchor{south west}{% + \csname pgf@anchor@rectangle with rounded corners@south west center\endcsname + \ifdim\southwestradius=0pt + \else + \pgf@process{\pgfpointadd{}{\pgfpointpolar{225}{\southwestradius+\outerxsep and \southwestradius+\outerysep}}}% + \fi + } + \anchor{south west center}{% + \rectanglewithroundedcornersparameter + \pgf@x=-\halfwidth + \pgf@y=-\halfheight + \ifdim\southwestradius=0pt + \else + \advance\pgf@x by \outerxsep + \advance\pgf@x by \southwestradius + \advance\pgf@y by \outerysep + \advance\pgf@y by \southwestradius + \fi + \pgf@process{\pgfpointadd{}{\centerpoint}}% + } + \anchor{south east}{% + \csname pgf@anchor@rectangle with rounded corners@south east center\endcsname + \ifdim\southeastradius=0pt + \else + \pgf@process{\pgfpointadd{}{\pgfpointpolar{315}{\southeastradius+\outerxsep and \southeastradius+\outerysep}}}% + \fi + } + \anchor{south east center}{% + \rectanglewithroundedcornersparameter + \pgf@x=\halfwidth + \pgf@y=-\halfheight + \ifdim\southeastradius=0pt + \else + \advance\pgf@x by -\outerxsep + \advance\pgf@x by -\southeastradius + \advance\pgf@y by \outerysep + \advance\pgf@y by \southeastradius + \fi + \pgf@process{\pgfpointadd{}{\centerpoint}}% + } + \anchor{below north west}{% + \csname pgf@anchor@rectangle with rounded corners@north west center\endcsname + \advance\pgf@x by -\northwestradius + \advance\pgf@x by -\outerxsep + } + \anchor{above south west}{% + \csname pgf@anchor@rectangle with rounded corners@south west center\endcsname + \advance\pgf@x by -\southwestradius + \advance\pgf@x by -\outerxsep + } + \anchor{below north east}{% + \csname pgf@anchor@rectangle with rounded corners@north east center\endcsname + \advance\pgf@x by \northeastradius + \advance\pgf@x by \outerxsep + } + \anchor{above south east}{% + \csname pgf@anchor@rectangle with rounded corners@south east center\endcsname + \advance\pgf@x by \southeastradius + \advance\pgf@x by \outerxsep + } + \anchor{right north west}{% + \csname pgf@anchor@rectangle with rounded corners@north west center\endcsname + \advance\pgf@y by \northwestradius + \advance\pgf@y by \outerysep + } + \anchor{right south west}{% + \csname pgf@anchor@rectangle with rounded corners@south west center\endcsname + \advance\pgf@y by -\southwestradius + \advance\pgf@y by -\outerysep + } + \anchor{left north east}{% + \csname pgf@anchor@rectangle with rounded corners@north east center\endcsname + \advance\pgf@y by \northeastradius + \advance\pgf@y by \outerysep + } + \anchor{left south east}{% + \csname pgf@anchor@rectangle with rounded corners@south east center\endcsname + \advance\pgf@y by -\southeastradius + \advance\pgf@y by -\outerysep + } + \backgroundpath{% + \rectanglewithroundedcornersparameter + % + \pgf@xa=\halfwidth + \advance\pgf@xa by -\outerxsep + \edef\HalfWidth{\the\pgf@xa}% + % + \pgf@ya=\halfheight + \advance\pgf@ya by -\outerysep + \edef\HalfHeight{\the\pgf@ya}% + % + \pgftransformshift{\centerpoint}% + % + \pgfpathmoveto{\pgfqpoint{\HalfWidth}{0pt}}% + \pgfpathlineto{\pgfpoint {+\HalfWidth}{\HalfHeight-\northeastradius}}% + \pgfpatharc{0}{90}{\northeastradius}% + \pgfpathlineto{\pgfpoint{-\HalfWidth+\northwestradius}{+\HalfHeight}} + \pgfpatharc{90}{180}{\northwestradius}% + \pgfpathlineto{\pgfpoint{+-\HalfWidth}{-\HalfHeight+\southwestradius}}% + \pgfpatharc{180}{270}{\southwestradius}% + \pgfpathlineto{\pgfpoint{\HalfWidth-\southeastradius}{+-\HalfHeight}}% + \pgfpatharc{270}{360}{\southeastradius}% + \pgfpathclose + \pgftransformshift{\pgfqpointscale{-1}{\centerpoint}}% + }% + \anchorborder{% + \pgfextract@process\externalpoint{}% + \ifdim\pgf@x=0pt + \ifdim\pgf@y<0pt + \csname pgf@anchor@rectangle with rounded corners@south\endcsname + \else + \csname pgf@anchor@rectangle with rounded corners@north\endcsname + \fi + \else + \ifdim\pgf@y=0pt + \ifdim\pgf@x<0pt + \csname pgf@anchor@rectangle with rounded corners@west\endcsname + \else + \csname pgf@anchor@rectangle with rounded corners@east\endcsname + \fi + \else + \rectanglewithroundedcornersparameter + \pgfmathanglebetweenpoints{\pgfpointorigin}{\externalpoint}% + \let\angle\pgfmathresult + \pgf@xa=\pgf@x + \pgf@ya=\pgf@y + \pgfextract@process\externalPoint{\pgfpointadd{}{\centerpoint}}% + \ifdim\pgf@xa<0pt + \ifdim\pgf@ya<0pt + % south west + \pgf@sh@rwrc@anchorborder{above south west}{right south west}{south west}{180}{270}{\southwestradius}% + \else + % north west + \pgf@sh@rwrc@anchorborder{right north west}{below north west}{north west}{90}{180}{\northwestradius}% + \fi + \else + \ifdim\pgf@ya<0pt + % south east + \pgf@sh@rwrc@anchorborder{left south east}{above south east}{south east}{270}{360}{\southeastradius}% + \else + % north east + \pgf@sh@rwrc@anchorborder{below north east}{left north east}{north east}{0}{90}{\northeastradius}% + \fi + \fi + \fi + \fi + } +} +\def\pgf@sh@rwrc@anchorborder#1#2#3#4#5#6{% + \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rectangle with rounded corners@#1\endcsname}% + \let\angleA\pgfmathresult + \pgfmathanglebetweenpoints{\centerpoint}{\csname pgf@anchor@rectangle with rounded corners@#2\endcsname}% + \let\angleB\pgfmathresult + \if\ifdim\angle pt>\angleA pt 0\else1\fi\ifdim\angle pt<\angleB pt 0\else 2\fi + \pgfmathpointintersectionoflineandarc{\externalPoint}{\centerpoint} + {\csname pgf@anchor@rectangle with rounded corners@#3 center\endcsname} + {#4}{#5}{#6+\outerxsep and #6+\outerysep}% + \else + \pgf@process{\pgfpointadd{\pgfpointborderrectangle{\externalpoint}{\pgfqpoint{\halfwidth}{\halfheight}}}{\centerpoint}}% + \fi +} + +\endinput diff --git a/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.superellipse.code.tex b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.superellipse.code.tex new file mode 100644 index 0000000000..9a89b5a8a6 --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/pgflibraryext.shapes.superellipse.code.tex @@ -0,0 +1,198 @@ +% 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. +% +\usepgflibrary{shapes.geometric,intersections} +\pgfset{ + superellipse x exponent/.initial=2.5, + superellipse y exponent/.initial=2.5, + superellipse step/.initial=4, + superellipse exponent/.style={/pgf/superellipse x exponent={#1},/pgf/superellipse y exponent={#1}}} + +% Evaluates the x-value of a superellipse around the center +% #1 = t (0≤t≤90) +% #2 = 2/m (x-exp) +% #3 = a (x-rad) +\pgfmathdeclarefunction{superellipsex}{3}{% + \pgfmathcos@{#1}% + \pgfmathpow@{\pgfmathresult}{#2}% + \pgfmathmultiply@{\pgfmathresult}{#3}} + +% Evaluates the y-value of a superellipse around the center +% #1 = t (0≤t≤90) +% #2 = 2/n (y-exp) +% #3 = a (y-rad) +\pgfmathdeclarefunction{superellipsey}{3}{% + \pgfmathsin@{#1}% + \pgfmathpow@{\pgfmathresult}{#2}% + \pgfmathmultiply@{\pgfmathresult}{#3}} + +% Evaluates the x- and y- value of superellipse around the center +% #1 = t (0≤t≤90) +% #2 = 2/m (x-exp) +% #3 = 2/n (y-exp) +% #4 = a (x-rad) +% #5 = b (y-rad) +\def\pgfmathsuperellipseXY#1#2#3#4#5{% + \begingroup + \pgfmathsuperellipsex@{#1}{#2}{#4}% + \let\pgfmath@temp\pgfmathresult + \pgfmathsuperellipsey@{#1}{#3}{#5}% + \edef\pgfmath@temp{\def\noexpand\pgfmathresultX{\pgfmath@temp}% + \def\noexpand\pgfmathresultY{\pgfmathresult}}% + \expandafter + \endgroup\pgfmath@temp} + +\pgfdeclareshape{superellipse}{% + \inheritsavedanchors[from=ellipse] + \inheritanchor[from=ellipse]{text}\inheritanchor[from=ellipse]{center} + \inheritanchor[from=ellipse]{mid}\inheritanchor[from=ellipse]{base} + \inheritanchor[from=ellipse]{north}\inheritanchor[from=ellipse]{south} + \inheritanchor[from=ellipse]{west}\inheritanchor[from=ellipse]{east} + \inheritanchor[from=ellipse]{mid west}\inheritanchor[from=ellipse]{base west} + \inheritanchor[from=ellipse]{mid east}\inheritanchor[from=ellipse]{base east} + \anchor{north east}{% + \pgf@process{\radius}% + \pgfmathpow@{.70710678118}{\xexponent}% + \pgf@x=\pgfmathresult\pgf@x + \pgfmathpow@{.70710678118}{\yexponent}% + \pgf@y=\pgfmathresult\pgf@y + \pgfpointadd{}{\centerpoint}% + } + \anchor{north west}{% + \pgf@process{\radius}% + \pgfmathpow@{.70710678118}{\xexponent}% + \pgf@x=-\pgfmathresult\pgf@x + \pgfmathpow@{.70710678118}{\yexponent}% + \pgf@y=\pgfmathresult\pgf@y + \pgfpointadd{}{\centerpoint}% + } + \anchor{south west}{% + \pgf@process{\radius}% + \pgfmathpow@{.70710678118}{\xexponent}% + \pgf@x=-\pgfmathresult\pgf@x + \pgfmathpow@{.70710678118}{\yexponent}% + \pgf@y=-\pgfmathresult\pgf@y + \pgfpointadd{}{\centerpoint}% + } + \anchor{south east}{% + \pgf@process{\radius}% + \pgfmathpow@{.70710678118}{\xexponent}% + \pgf@x=\pgfmathresult\pgf@x + \pgfmathpow@{.70710678118}{\yexponent}% + \pgf@y=-\pgfmathresult\pgf@y + \pgfpointadd{}{\centerpoint}% + } + \savedmacro\xexponent{% + \pgfmathreciprocal{\pgfkeysvalueof{/pgf/superellipse x exponent}}% + \pgfmathmultiply@{\pgfmathresult}{2}% + \let\xexponent\pgfmathresult + } + \savedmacro\yexponent{% + \pgfmathreciprocal{\pgfkeysvalueof{/pgf/superellipse y exponent}}% + \pgfmathmultiply@{\pgfmathresult}{2}% + \let\yexponent\pgfmathresult + } + \savedmacro\step{% + \pgfmathtruncatemacro\step{\pgfkeysvalueof{/pgf/superellipse step}}% + } + \backgroundpath{% + \pgf@process{\radius}% + \pgfmathsetmacro\xradius{\pgf@x-(\pgfkeysvalueof{/pgf/outer xsep})}% + \pgfmathsetmacro\yradius{\pgf@y-(\pgfkeysvalueof{/pgf/outer ysep})}% + \let\pgf@tempa\pgfutil@empty\let\pgf@tempb\pgfutil@empty + \let\pgf@tempc\pgfutil@empty\let\pgf@tempd\pgfutil@empty + \c@pgf@counta=\step + \pgfutil@loop + \ifnum\c@pgf@counta<90 + \pgfmathsuperellipseXY{\the\c@pgf@counta}{\xexponent}{\yexponent}{\xradius}{\yradius}% + \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{\pgfmathresultX pt}{\pgfmathresultY pt}}}% + \pgfutil@append@macrotomacro\pgf@tempa\pgf@temp + \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{-\pgfmathresultX pt}{\pgfmathresultY pt}}}% + \pgfutil@prefix@macrotomacro\pgf@tempb\pgf@temp + \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{-\pgfmathresultX pt}{-\pgfmathresultY pt}}}% + \pgfutil@append@macrotomacro\pgf@tempc\pgf@temp + \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{\pgfmathresultX pt}{-\pgfmathresultY pt}}}% + \pgfutil@prefix@macrotomacro\pgf@tempd\pgf@temp + \advance\c@pgf@counta by\step + \pgfutil@repeat + \pgftransformshift{\centerpoint}% + \pgfplothandlerclosedcurve + \pgfplotstreamstart + \pgfplotstreampoint{\pgfqpoint{\xradius pt}{0pt}}% east + \pgf@tempa + \pgfplotstreampoint{\pgfqpoint{0pt}{\yradius pt}}% north + \pgf@tempb + \pgfplotstreampoint{\pgfqpoint{-\xradius pt}{0pt}}% west + \pgf@tempc + \pgfplotstreampoint{\pgfqpoint{0pt}{-\yradius pt}}% south + \pgf@tempd + \pgfplotstreamend + \pgftransformshift{\centerpoint\pgf@x=-\pgf@x\pgf@y=-\pgf@y} + } + \anchorborder{% + \pgfextract@process\externalpoint{}% + \ifdim\pgf@x=0pt % catch special case x = 0 + \ifdim\pgf@y<0pt \pgf@anchor@superellipse@south\else\pgf@anchor@superellipse@north\fi + \else + \ifdim\pgf@y=0pt % catch special case y = 0 + \ifdim\pgf@x<0pt \pgf@anchor@superellipse@west\else\pgf@anchor@superellipse@east\fi + \else % both are not zero + % save original direction + \pgf@xa=\pgf@x + \pgf@ya=\pgf@y + % make both positive, we're not looking at one quadrant + \ifdim\pgf@xa<0pt \pgf@x=-\pgf@x\fi + \ifdim\pgf@ya<0pt \pgf@y=-\pgf@y\fi + % save that point again + \pgfextract@process\externalpoint{}% + % we need to do the calculations without any transformations + % since we're using plots and \pgfpointborderrectangle + \pgftransformreset + \pgfintersectionofpaths{% + % from center to point on rectangle that encompasses superellipse + \pgf@relevantforpicturesizefalse + \pgfpathmoveto{\pgfpointorigin}% + \pgfpathlineto{\pgfpointborderrectangle{\externalpoint}{\radius}}% + }{% + \pgf@relevantforpicturesizefalse + \pgf@process{\radius} + \edef\xradius{\pgf@sys@tonumber\pgf@x}% + \edef\yradius{\pgf@sys@tonumber\pgf@y}% + \let\pgf@tempa\pgfutil@empty + \c@pgf@counta=\step + \pgfutil@loop + \ifnum\c@pgf@counta<90 + \pgfmathsuperellipseXY{\the\c@pgf@counta}{\xexponent}{\yexponent}{\xradius}{\yradius}% + \edef\pgf@temp{\noexpand\pgfplotstreampoint{\noexpand\pgfqpoint{\pgfmathresultX pt}{\pgfmathresultY pt}}}% + \pgfutil@append@macrotomacro\pgf@tempa\pgf@temp + \advance\c@pgf@counta by\step + \pgfutil@repeat + % we're only using curveto since closedcurve + % messes with our other path + \pgfplothandlercurveto + \pgfplotstreamstart + \pgfplotstreampoint{\pgfqpoint{\xradius pt}{0pt}}% east + \pgf@tempa + \pgfplotstreampoint{\pgfqpoint{0pt}{\yradius pt}}% north + \pgfplotstreamend + }% + \ifnum\pgfintersectionsolutions>0 % only if a solution was found + \pgf@process{\pgfpointintersectionsolution{1}}% + \else % otherwise take the border on the rectangle (close enough?) + \pgf@process{\pgfpointborderrectangle{\externalpoint}{\radius}}% + \fi + \ifdim\pgf@xa<0pt \pgf@x=-\pgf@x\fi + \ifdim\pgf@ya<0pt \pgf@y=-\pgf@y\fi + \pgf@process{\pgfpointadd{}{\centerpoint}}% + \fi + \fi + } +} +\def\pgfutil@prefix@macrotomacro#1#2{% + \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter% + #1\expandafter\expandafter\expandafter{\expandafter#2#1}} +\endinput diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex index d1300ed290..195ecf9414 100644 --- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex +++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.calendar-plus.code.tex @@ -48,7 +48,7 @@ % Overwriting original \tikz@lib@cal@if@else@code % \def\tikz@lib@cal@if@else@code#1#2#3{% - \tikzcalendar@addto\tikz@lib@cal@ifs{\ifdate{#1}{#2}{#3}}% + \pgfutil@addto@macro\tikz@lib@cal@ifs{\ifdate{#1}{#2}{#3}}% \tikz@lib@cal@scanner% } @@ -62,7 +62,7 @@ \tikz@before@day% \scope% \tikz@atbegin@day% - \let\tikzcalendar@addto\pgfutil@secondoftwo + \let\pgfutil@addto@macro\pgfutil@secondoftwo \tikz@lib@cal@ifs% \tikzdaycode% \tikz@atend@day% @@ -72,7 +72,7 @@ \endgroup% } -\def\tikzcalendar@addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}} +\def\pgfutil@addto@macro#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}} \pgfmathdeclarefunction{weeksinmonthofyear}{3}{% #1 = first weekday, #2 = month, #3 = year \begingroup diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex index b68520081c..830b3513e5 100644 --- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex +++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.misc.code.tex @@ -39,28 +39,28 @@ %% 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\ifqrr@pgf@foreach@no@list +\newif\iftikzext@pgf@foreach@no@list \pgfqkeys{/pgf/foreach}{ use int/.code={% - \qrr@pgf@foreach@no@list@parse@to\pgfmathtruncatemacro#1\pgffor@stop + \tikzext@pgf@foreach@no@list@parse@to\pgfmathtruncatemacro#1\pgffor@stop }, use float/.code={% - \qrr@pgf@foreach@no@list@parse@to\pgfmathsetmacro#1\pgffor@stop + \tikzext@pgf@foreach@no@list@parse@to\pgfmathsetmacro#1\pgffor@stop } } -\def\qrr@pgf@foreach@no@list@parse@to#1#2to#3\pgffor@stop{% - \qrr@pgf@foreach@no@listtrue +\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@ - \qrr@pgf@foreach@no@list@parse@step{#1}#3\pgffor@stop + \tikzext@pgf@foreach@no@list@parse@step{#1}#3\pgffor@stop \else - \qrr@pgf@foreach@no@list@parse@step{#1}#3step1\pgffor@stop + \tikzext@pgf@foreach@no@list@parse@step{#1}#3step1\pgffor@stop \fi - \edef\qrr@pgf@foreach@no@list@list{\foreachStart,\foreachSecond,...,\foreachEnd}% + \edef\tikzext@pgf@foreach@no@list@list{\foreachStart,\foreachSecond,...,\foreachEnd}% } -\def\qrr@pgf@foreach@no@list@parse@step#1#2step#3\pgffor@stop{% +\def\tikzext@pgf@foreach@no@list@parse@step#1#2step#3\pgffor@stop{% #1\foreachEnd{#2}% #1\foreachSecond{\foreachStart+#3}% } @@ -68,9 +68,9 @@ \pgfutil@ifnextchar i{\pgffor@@vars@end}{% \pgfutil@ifnextchar[{\pgffor@@vars@opt}{%] \pgfutil@ifnextchar/{\pgffor@@vars@slash@gobble}{% - \ifqrr@pgf@foreach@no@list\expandafter\pgfutil@firstoftwo\else + \iftikzext@pgf@foreach@no@list\expandafter\pgfutil@firstoftwo\else \expandafter\pgfutil@secondoftwo\fi - {\qrr@pgf@foreach@no@listfalse\pgffor@macro@list\qrr@pgf@foreach@no@list@list} + {\tikzext@pgf@foreach@no@listfalse\pgffor@macro@list\tikzext@pgf@foreach@no@list@list} {\pgffor@@vars}}}}}% %% Handlers @@ -198,7 +198,7 @@ \else \expandafter\pgfutil@secondoftwo \fi - {\qrr@misc@handle@else#2\pgf@stop}{\qrr@misc@handle@else#2else\pgf@stop}% + {\tikzext@misc@handle@else#2\pgf@stop}{\tikzext@misc@handle@else#2else\pgf@stop}% }, TeX/if/.code n args={4}{% \if#1#2\expandafter\pgfutil@firstoftwo\else\expandafter\pgfutil@secondoftwo\fi @@ -222,7 +222,7 @@ }, tex/.search also=/utils/TeX, } -\def\qrr@misc@handle@else#1else#2\pgf@stop{% +\def\tikzext@misc@handle@else#1else#2\pgf@stop{% \ifdim\pgfmathresult pt=0pt \expandafter\pgfutil@firstoftwo \else diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex index 9cee62be90..699170d178 100644 --- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex +++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.code.tex @@ -6,20 +6,22 @@ % 2. under the GNU Free Documentation License. % -\def\tikz@nf@align@left#1{} -\def\tikz@nf@align@center#1{\kern.5#1} -\def\tikz@nf@align@right#1{\kern#1} +\def\tikzext@nf@align@left#1{} +\def\tikzext@nf@align@center#1{\kern.5#1} +\def\tikzext@nf@align@right#1{\kern#1} \pgfqkeys{/tikz/node family}{ width/.initial=, + width/.append style={/pgf/minimum width=nf_width}, height/.initial=, - size/.style=\pgfqkeys{/tikz/node family}{width={#1},height={#1}}, + height/.append style={/pgf/minimum height=nf_height}, + size/.code=\pgfqkeys{/tikz/node family}{width={#1},height={#1}}, text depth/.initial=, text height/.initial=, text width align/.is choice, - text width align/left/.code=\let\tikz@nf@align@action\tikz@nf@align@left, - text width align/center/.code=\let\tikz@nf@align@action\tikz@nf@align@center, - text width align/right/.code=\let\tikz@nf@align@action\tikz@nf@align@right, + text width align/left/.code=\let\tikzext@nf@align@action\tikzext@nf@align@left, + text width align/center/.code=\let\tikzext@nf@align@action\tikzext@nf@align@center, + text width align/right/.code=\let\tikzext@nf@align@action\tikzext@nf@align@right, text width align=center, text width/.initial=, text/.code=\pgfqkeys{/tikz/node family}{text depth={#1},text height={#1},text width={#1}}, @@ -28,40 +30,39 @@ \tikzset{node family/.code=\pgfqkeys{/tikz/node family}{#1}} % #1 = family type + name -\def\tikz@nf@save#1{% +\def\tikzext@nf@save#1{% %\errmessage{#1}% \immediate\write\pgfutil@auxout{% - \noexpand\expandafter\noexpand\gdef\noexpand\csname tikz@nf@#1@previous\endcsname - {\csname tikz@nf@#1@next\endcsname}% + \noexpand\expandafter\noexpand\gdef\noexpand\csname tikzext@nf@#1@previous\endcsname + {\csname tikzext@nf@#1@next\endcsname}% }% - %\expandafter\global\expandafter\let\csname tikz@nf@#1@next\endcsname\relax } % #1 = value to set % #2 = family type % #3 = return dimen -\def\tikz@nf@getandset#1#2#3{% +\def\tikzext@nf@getandset#1#2#3{% % what's our family's name? #3=0pt\relax - \pgfkeysgetvalue{/tikz/node family/#2}\tikz@nf@familyname - \pgfutil@ifxempty\tikz@nf@familyname{% no family to deal with + \pgfkeysgetvalue{/tikz/node family/#2}\tikzext@nf@familyname + \pgfutil@ifxempty\tikzext@nf@familyname{% no family to deal with }{% - \edef\tikz@nf@familyname{\pgfkeysvalueof{/tikz/node family/prefix}\tikz@nf@familyname}% + \edef\tikzext@nf@familyname{\pgfkeysvalueof{/tikz/node family/prefix}\tikzext@nf@familyname}% % we need to save the value for the next run - \pgfutil@IfUndefined{tikz@nf@#2@\tikz@nf@familyname @next}{% + \pgfutil@IfUndefined{tikzext@nf@#2@\tikzext@nf@familyname @next}{% % first time: define first value and install hook at end of picture - \expandafter\xdef\csname tikz@nf@#2@\tikz@nf@familyname @next\endcsname{#1}% - \edef\tikz@temp{\noexpand\tikz@nf@save{#2@\tikz@nf@familyname}}% + \expandafter\xdef\csname tikzext@nf@#2@\tikzext@nf@familyname @next\endcsname{#1}% + \edef\tikz@temp{\noexpand\tikzext@nf@save{#2@\tikzext@nf@familyname}}% %\expandafter\AtVeryEndDocument\expandafter{\tikz@temp}% \expandafter\pgfutil@g@addto@macro\expandafter\tikz@atend@picture\expandafter{\tikz@temp}% }{% - \ifdim\csname tikz@nf@#2@\tikz@nf@familyname @next\endcsname<#1\relax - \expandafter\xdef\csname tikz@nf@#2@\tikz@nf@familyname @next\endcsname{#1}% + \ifdim\csname tikzext@nf@#2@\tikzext@nf@familyname @next\endcsname<#1\relax + \expandafter\xdef\csname tikzext@nf@#2@\tikzext@nf@familyname @next\endcsname{#1}% \fi }% - \pgfutil@IfUndefined{tikz@nf@#2@\tikz@nf@familyname @previous}{% first run, ignore + \pgfutil@IfUndefined{tikzext@nf@#2@\tikzext@nf@familyname @previous}{% first run, ignore }{% set previous value - #3=\csname tikz@nf@#2@\tikz@nf@familyname @previous\endcsname\relax + #3=\csname tikzext@nf@#2@\tikzext@nf@familyname @previous\endcsname\relax }% }% } @@ -75,7 +76,7 @@ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}% \advance\pgf@x by 2\pgf@xc% % Qrr: family width - \tikz@nf@getandset{\the\pgf@x}{width}{\pgfutil@tempdima}% + \tikzext@nf@getandset{\the\pgf@x}{width}{\pgfutil@tempdima}% \ifdim\pgf@x<\pgfutil@tempdima \pgf@x=\pgfutil@tempdima \fi @@ -98,9 +99,9 @@ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}% \advance\pgf@y by 2\pgf@yc% % Qrr: family height - \tikz@nf@getandset{\the\pgf@y}{height}{\pgfutil@tempdima}% + \tikzext@nf@getandset{\the\pgf@y}{height}{\pgfutil@tempdima}% \ifdim\pgf@y<\pgfutil@tempdima - \pgf@y=\pgfutil@tempa + \pgf@y=\pgfutil@tempdima \fi % \pgfmathsetlength\pgf@yb{\pgfkeysvalueof{/pgf/minimum height}}% @@ -116,7 +117,7 @@ \advance\pgf@y by\pgf@ya% }% -\savedanchor\southwest{% + \savedanchor\southwest{% % Calculate x % % First, is width < minimum width? @@ -124,7 +125,7 @@ \pgfmathsetlength\pgf@xc{\pgfkeysvalueof{/pgf/inner xsep}}% \advance\pgf@x by 2\pgf@xc% % Qrr: family width - \tikz@nf@getandset{\the\pgf@x}{width}{\pgfutil@tempdima}% + \tikzext@nf@getandset{\the\pgf@x}{width}{\pgfutil@tempdima}% \ifdim\pgf@x<\pgfutil@tempdima \pgf@x=\pgfutil@tempdima \fi @@ -147,7 +148,7 @@ \pgfmathsetlength\pgf@yc{\pgfkeysvalueof{/pgf/inner ysep}}% \advance\pgf@y by 2\pgf@yc% % Qrr: family height - \tikz@nf@getandset{\the\pgf@y}{height}{\pgfutil@tempdima}% + \tikzext@nf@getandset{\the\pgf@y}{height}{\pgfutil@tempdima}% \ifdim\pgf@y<\pgfutil@tempdima \pgf@y=\pgfutil@tempdima \fi @@ -226,8 +227,8 @@ \fi \pgf@x=\pgf@xa% % Qrr: check for families - \tikz@nf@getandset{\the\dimexpr2\pgf@x\relax}{width}{\pgfutil@tempdima}% - \tikz@nf@getandset{\the\dimexpr2\pgf@x\relax}{height}{\pgfutil@tempdimb}% + \tikzext@nf@getandset{\the\dimexpr2\pgf@x\relax}{width}{\pgfutil@tempdima}% + \tikzext@nf@getandset{\the\dimexpr2\pgf@x\relax}{height}{\pgfutil@tempdimb}% % Qrr: and adjust like minimum width and minimum height \ifdim\pgf@x<.5\pgfutil@tempdima \pgf@x=.5\pgfutil@tempdima @@ -285,17 +286,17 @@ \pgfqkeys{/tikz/node family}{ setup shape/.code={% \expandafter\pgfutil@prefixto@macro\csname pgf@sh@s@#1\endcsname{% - \tikz@nf@getandset{\the\wd\pgfnodeparttextbox}{text width}{\pgfutil@tempdima}% + \tikzext@nf@getandset{\the\wd\pgfnodeparttextbox}{text width}{\pgfutil@tempdima}% \ifdim\wd\pgfnodeparttextbox<\pgfutil@tempdima \pgfutil@tempdimb=\pgfutil@tempdima \advance\pgfutil@tempdimb-\wd\pgfnodeparttextbox - \setbox\pgfnodeparttextbox=\hbox to \pgfutil@tempdima{\tikz@nf@align@action\pgfutil@tempdimb\box\pgfnodeparttextbox}% + \setbox\pgfnodeparttextbox=\hbox to \pgfutil@tempdima{\tikzext@nf@align@action\pgfutil@tempdimb\box\pgfnodeparttextbox}% \fi - \tikz@nf@getandset{\the\dp\pgfnodeparttextbox}{text depth}{\pgfutil@tempdima}% + \tikzext@nf@getandset{\the\dp\pgfnodeparttextbox}{text depth}{\pgfutil@tempdima}% \ifdim\dp\pgfnodeparttextbox<\pgfutil@tempdima \dp\pgfnodeparttextbox=\pgfutil@tempdima \fi - \tikz@nf@getandset{\the\ht\pgfnodeparttextbox}{text height}{\pgfutil@tempdima}% + \tikzext@nf@getandset{\the\ht\pgfnodeparttextbox}{text height}{\pgfutil@tempdima}% \ifdim\ht\pgfnodeparttextbox<\pgfutil@tempdima \ht\pgfnodeparttextbox=\pgfutil@tempdima \fi @@ -303,3 +304,36 @@ }, setup shape/.list={rectangle,circle,Rectangle,Circle} } + +%% nf functions +\def\tikzext@nf@function@default{{\the\pgf@x}{\the\pgf@y}} +\def\tikzext@nf@function@default@double{{\the\dimexpr2\pgf@x\relax}{\the\dimexpr2\pgf@y\relax}} +\def\tikzext@nf@function@circle{{\the\pgf@x}{\the\pgf@x}} +\def\tikzext@nf@function@circle@double{{\the\dimexpr2\pgf@x\relax}{\the\dimexpr2\pgf@x\relax}} + +\pgfmathdeclarefunction{nf_width}{0}{% + \begingroup + \pgfutil@IfUndefined{tikzext@nf@function@\pgf@sm@shape@name}{% + \let\tikzext@nf@function\tikzext@nf@function@default + }{% + \pgfutil@IfUndefined{tikzext@nf@function@\pgf@sm@shape@name @extra}{}{\csname tikzext@nf@function@\pgf@sm@shape@name @extra\endcsname}% + \expandafter\let\expandafter\tikzext@nf@function\csname tikzext@nf@function@\pgf@sm@shape@name\endcsname + }% + \tikzext@nf@getandset{\expandafter\pgfutil@firstoftwo\tikzext@nf@function}{width}{\pgfutil@tempdima}% + \edef\pgfmathresult{\pgf@sys@tonumber\pgfutil@tempdima}% + \pgfmath@smuggleone\pgfmathresult + \endgroup +} +\pgfmathdeclarefunction{nf_height}{0}{% + \begingroup + \pgfutil@IfUndefined{tikzext@nf@function@\pgf@sm@shape@name}{% + \let\tikzext@nf@function\tikzext@nf@function@default + }{% + \pgfutil@IfUndefined{tikzext@nf@function@\pgf@sm@shape@name @extra}{}{\csname tikzext@nf@function@\pgf@sm@shape@name @extra\endcsname}% + \expandafter\let\expandafter\tikzext@nf@function\csname tikzext@nf@function@\pgf@sm@shape@name\endcsname + }% + \tikzext@nf@getandset{\expandafter\pgfutil@secondoftwo\tikzext@nf@function}{height}{\pgfutil@tempdima}% + \edef\pgfmathresult{\pgf@sys@tonumber\pgfutil@tempdima}% + \pgfmath@smuggleone\pgfmathresult + \endgroup +}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex new file mode 100644 index 0000000000..58384960a8 --- /dev/null +++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.node-families.shapes.geometric.code.tex @@ -0,0 +1,38 @@ +% 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. +% + +\usetikzlibrary{ext.node-families,shapes.geometric} + +\let\tikzext@nf@function@ellipse \tikzext@nf@function@default@double +\let\tikzext@nf@function@star \tikzext@nf@function@circle +\let\tikzext@nf@function@diamond \tikzext@nf@function@default@double +\let\tikzext@nf@function@star \tikzext@nf@function@circle@double +\expandafter\let\csname tikzext@nf@function@regular polygon\endcsname + \tikzext@nf@function@circle@double +\let\tikzext@nf@function@trapezium\tikzext@nf@function@default@double +\def\tikzext@nf@function@semicircle {{\the\dimexpr2\pgf@x\relax}{\the\pgf@x}} +\expandafter\def\csname tikzext@nf@function@isosceles triangle\endcsname + {{\the\dimexpr2\pgf@ya\relax}{\the\pgf@xa}} +\def\tikzext@nf@function@kite {{\the\dimexpr2\pgf@xa\relax}{\the\dimexpr\pgf@ya+\pgf@yb\relax}} +\def\tikzext@nf@function@dart {{\the\dimexpr2\pgf@ya\relax}{\the\pgf@xb}} +\expandafter\def\csname tikzext@nf@function@circular sector\endcsname{{\the\pgf@xc}{\the\pgf@xa}} +\def\tikzext@nf@function@cylinder{{\the\dimexpr2\pgfutil@tempdimb\relax}{\the\pgf@x}} + +\tikzset{node family/setup shape/.list={ + ellipse, + star, + diamond, + regular polygon, + trapezium, + semicircle, + isosceles triangle, + kite, + dart, + circular sector, + cylinder +}}
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex index a84fae7150..e7a3b02ed7 100644 --- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex +++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.paths.ortho.code.tex @@ -8,12 +8,12 @@ %% For the operators r-lr, r-rl, r-ud and r-du we need to check after TikZ found r \let\tikz@orig@rect\tikz@rect -\def\tikz@rect{\pgfutil@ifnextchar e\tikz@orig@rect\qrr@tikz@r} -\def\qrr@tikz@r -{% - \pgfutil@ifnextchar l\qrr@tikz@lr@lineto{% - \pgfutil@ifnextchar r\qrr@tikz@rl@lineto{% - \pgfutil@ifnextchar u\qrr@tikz@ud@lineto{% - \pgfutil@ifnextchar d\qrr@tikz@du@lineto\tikz@expand +\def\tikz@rect{\pgfutil@ifnextchar e\tikz@orig@rect\tikzext@tikz@r} +\def\tikzext@tikz@r -{% + \pgfutil@ifnextchar l\tikzext@tikz@lr@lineto{% + \pgfutil@ifnextchar r\tikzext@tikz@rl@lineto{% + \pgfutil@ifnextchar u\tikzext@tikz@ud@lineto{% + \pgfutil@ifnextchar d\tikzext@tikz@du@lineto\tikz@expand }% }% }% @@ -21,34 +21,33 @@ %% For the operator |-| we need to check after TikZ found |- \let\tikz@orig@vh@lineto@next\tikz@vh@lineto@next \def\tikz@vh@lineto@next{% - \pgfutil@ifnextchar|{\expandafter\qrr@tikz@vhv@lineto\pgfutil@gobble}% - {\pgfutil@ifnextchar\tikz@activebar{\expandafter\qrr@tikz@vhv@lineto\pgfutil@gobble}% + \pgfutil@ifnextchar|{\expandafter\tikzext@tikz@vhv@lineto\pgfutil@gobble}% + {\pgfutil@ifnextchar\tikz@activebar{\expandafter\tikzext@tikz@vhv@lineto\pgfutil@gobble}% {\tikz@orig@vh@lineto@next}}} %% For the operator -|- we need to check after TikZ found -| \let\tikz@orig@hv@lineto\tikz@hv@lineto \def\tikz@hv@lineto{% - \pgfutil@ifnextchar-{\expandafter\qrr@tikz@hvh@lineto\pgfutil@gobble}% + \pgfutil@ifnextchar-{\expandafter\tikzext@tikz@hvh@lineto\pgfutil@gobble}% {\tikz@orig@hv@lineto}} %% |-|[<opts>] and -|-[<opts>] are allowed -\def\qrr@tikz@vhv@lineto{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@vhv@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@vhv@lineto@next[]}} -\def\qrr@tikz@hvh@lineto{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@hvh@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@hvh@lineto@next[]}} +\def\tikzext@tikz@vhv@lineto{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@vhv@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@vhv@lineto@next[]}} +\def\tikzext@tikz@hvh@lineto{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@hvh@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@hvh@lineto@next[]}} %% r-rl[<opts>], r-lr[<opts>], etc. -\def\qrr@tikz@rl@lineto rl{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@rl@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@rl@lineto@next[]}} -\def\qrr@tikz@lr@lineto lr{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@lr@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@lr@lineto@next[]}} -\def\qrr@tikz@du@lineto du{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@du@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@du@lineto@next[]}} -\def\qrr@tikz@ud@lineto ud{\pgfutil@ifnextchar[{\qrr@tikz@collect@hvvh@options\qrr@tikz@ud@lineto@next}{\qrr@tikz@collect@hvvh@options\qrr@tikz@ud@lineto@next[]}} +\def\tikzext@tikz@rl@lineto rl{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@rl@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@rl@lineto@next[]}} +\def\tikzext@tikz@lr@lineto lr{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@lr@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@lr@lineto@next[]}} +\def\tikzext@tikz@du@lineto du{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@du@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@du@lineto@next[]}} +\def\tikzext@tikz@ud@lineto ud{\pgfutil@ifnextchar[{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@ud@lineto@next}{\tikzext@tikz@collect@hvvh@options\tikzext@tikz@ud@lineto@next[]}} %% TikZ interjects are done, the rest is independent: -\newlength\qrr@tikz@udlr@distance -\newlength\qrr@tikz@hvvh@distance -\newif\ifqrr@tikz@hvvh@middle % checks whether spacing = 0 was selected -\newif\ifqrr@tikz@hvvh@fromcenter -\newif\iftikz@ortho@preflush -\tikz@ortho@preflushtrue -\let\tikz@origtotarget\pgfutil@empty +\newlength\tikzext@tikz@udlr@distance +\newlength\tikzext@tikz@hvvh@distance +\newif\iftikzext@tikz@hvvh@middle % checks whether spacing = 0 was selected +\newif\iftikzext@tikz@hvvh@fromcenter +\newif\iftikzext@ortho@preflush +\tikzext@ortho@preflushtrue %%% HVVH/UDLR \tikzset{% @@ -57,29 +56,29 @@ hvvh/.search also=/tikz,% udlr/.search also=/tikz,% hvvh/middle 0 to 1/.style={hvvh/spacing=0},% - hvvh/from center/.is if=qrr@tikz@hvvh@fromcenter,% + hvvh/from center/.is if=tikzext@tikz@hvvh@fromcenter,% udlr/from center/.style={/tikz/hvvh/from center={#1}}, hvvh/spacing/.code=% spacing = 0 means that the middle part are the pos-itions 0 to 1, % the first part is -1 to 0, the last part is to 2 - \pgfmathint{#1}\let\qrr@tikz@hvvh@timing@parts\pgfmathresult% in case they are calculations to be done - \ifcase\qrr@tikz@hvvh@timing@parts\relax - \qrr@tikz@hvvh@middletrue - \def\qrr@tikz@hvvh@timing@parts{1}% - \def\qrr@tikz@hvvh@timing@first{0}% - \def\qrr@tikz@hvvh@timing@last{1}% - \def\qrr@tikz@hvvh@timing@subtr{0}% - \def\qrr@tikz@hvvh@timing@factor{1}% + \pgfmathint{#1}\let\tikzext@tikz@hvvh@timing@parts\pgfmathresult% in case they are calculations to be done + \ifcase\tikzext@tikz@hvvh@timing@parts\relax + \tikzext@tikz@hvvh@middletrue + \def\tikzext@tikz@hvvh@timing@parts{1}% + \def\tikzext@tikz@hvvh@timing@first{0}% + \def\tikzext@tikz@hvvh@timing@last{1}% + \def\tikzext@tikz@hvvh@timing@subtr{0}% + \def\tikzext@tikz@hvvh@timing@factor{1}% \else % in all other cases n > 0 the kinks are at pos = 1/n and (n - 1)/n - \qrr@tikz@hvvh@middlefalse - \pgfmathreciprocal{#1}\let\qrr@tikz@hvvh@timing@first\pgfmathresult - \pgfmathsetmacro\qrr@tikz@hvvh@timing@last{1-\pgfmathresult}% + \tikzext@tikz@hvvh@middlefalse + \pgfmathreciprocal{#1}\let\tikzext@tikz@hvvh@timing@first\pgfmathresult + \pgfmathsetmacro\tikzext@tikz@hvvh@timing@last{1-\pgfmathresult}% \pgfmathreciprocal{#1-2}% - \let\qrr@tikz@hvvh@timing@subtr\pgfmathresult - \pgfmathsetmacro\qrr@tikz@hvvh@timing@factor{1+2*\pgfmathresult}% + \let\tikzext@tikz@hvvh@timing@subtr\pgfmathresult + \pgfmathsetmacro\tikzext@tikz@hvvh@timing@factor{1+2*\pgfmathresult}% \fi,% - hvvh/ratio/.code=\pgfmathsetmacro\qrr@tikz@hvvh@ratio{#1},% + hvvh/ratio/.code=\pgfmathsetmacro\tikzext@tikz@hvvh@ratio{#1},% % TODO: not possible to do distance in TikZ coordinate system - hvvh/distance/.code=\pgfmathsetlength\qrr@tikz@hvvh@distance{#1}\let\qrr@tikz@hvvh@ratio\pgfutil@empty,% + hvvh/distance/.code=\pgfmathsetlength\tikzext@tikz@hvvh@distance{#1}\let\tikzext@tikz@hvvh@ratio\pgfutil@empty,% udlr/distance/.style={% /tikz/udlr/ud distance={#1},% /tikz/udlr/du distance={#1},% @@ -98,27 +97,27 @@ \pgf@process{\tikz@timer@start}\pgf@ya\pgf@y \pgf@process{\tikz@timer@end}\pgf@yc\pgf@y \pgf@process{\tikz@timer@middle}\pgf@xb\tikz@time pt% - \ifdim\tikz@time pt<\qrr@tikz@hvvh@timing@first pt% first quarter - \ifqrr@tikz@hvvh@middle + \ifdim\tikz@time pt<\tikzext@tikz@hvvh@timing@first pt% first quarter + \iftikzext@tikz@hvvh@middle \advance\pgf@xb1pt% \else - \pgf@xb\qrr@tikz@hvvh@timing@parts\pgf@xb + \pgf@xb\tikzext@tikz@hvvh@timing@parts\pgf@xb \fi \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}{\noexpand\tikz@timer@start}{% \noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@ya}}}% \else - \ifdim\tikz@time pt>\qrr@tikz@hvvh@timing@last pt% last quarter - \ifqrr@tikz@hvvh@middle + \ifdim\tikz@time pt>\tikzext@tikz@hvvh@timing@last pt% last quarter + \iftikzext@tikz@hvvh@middle \advance\pgf@xb-1pt% \else - \pgf@xb\qrr@tikz@hvvh@timing@parts\pgf@xb + \pgf@xb\tikzext@tikz@hvvh@timing@parts\pgf@xb \fi - \advance\pgf@xb\dimexpr-\qrr@tikz@hvvh@timing@parts pt+1pt\relax% + \advance\pgf@xb\dimexpr-\tikzext@tikz@hvvh@timing@parts pt+1pt\relax% \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}% {\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@yc}}{\noexpand\tikz@timer@end}}% \else% middle half - \pgf@xb\qrr@tikz@hvvh@timing@factor\pgf@xb% - \advance\pgf@xb-\qrr@tikz@hvvh@timing@subtr pt% + \pgf@xb\tikzext@tikz@hvvh@timing@factor\pgf@xb% + \advance\pgf@xb-\tikzext@tikz@hvvh@timing@subtr pt% \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}% {\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@ya}}{\noexpand\tikz@timer@middle}}% \fi\fi\tikz@marshal} @@ -126,58 +125,58 @@ \pgf@process{\tikz@timer@start}\pgf@xa\pgf@x \pgf@process{\tikz@timer@end}\pgf@xc\pgf@x \pgf@process{\tikz@timer@middle}\pgf@xb\tikz@time pt% - \ifdim\tikz@time pt<\qrr@tikz@hvvh@timing@first pt% first quarter - \ifqrr@tikz@hvvh@middle + \ifdim\tikz@time pt<\tikzext@tikz@hvvh@timing@first pt% first quarter + \iftikzext@tikz@hvvh@middle \advance\pgf@xb1pt% \else - \pgf@xb\qrr@tikz@hvvh@timing@parts\pgf@xb + \pgf@xb\tikzext@tikz@hvvh@timing@parts\pgf@xb \fi \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}{\noexpand\tikz@timer@start}{% \noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@y}}}% \else - \ifdim\tikz@time pt>\qrr@tikz@hvvh@timing@last pt% last quarter - \ifqrr@tikz@hvvh@middle + \ifdim\tikz@time pt>\tikzext@tikz@hvvh@timing@last pt% last quarter + \iftikzext@tikz@hvvh@middle \advance\pgf@xb-1pt% \else - \pgf@xb\qrr@tikz@hvvh@timing@parts\pgf@xb + \pgf@xb\tikzext@tikz@hvvh@timing@parts\pgf@xb \fi - \advance\pgf@xb by\dimexpr-\qrr@tikz@hvvh@timing@parts pt+1pt\relax% + \advance\pgf@xb by\dimexpr-\tikzext@tikz@hvvh@timing@parts pt+1pt\relax% \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}% {\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@y}}{\noexpand\tikz@timer@end}}% \else% middle half - \pgf@xb=\qrr@tikz@hvvh@timing@factor\pgf@xb - \advance\pgf@xb by-\qrr@tikz@hvvh@timing@subtr pt% + \pgf@xb=\tikzext@tikz@hvvh@timing@factor\pgf@xb + \advance\pgf@xb by-\tikzext@tikz@hvvh@timing@subtr pt% \edef\tikz@marshal{\noexpand\pgftransformlineattime{\pgf@sys@tonumber{\pgf@xb}}% {\noexpand\pgfqpoint{\the\pgf@xa}{\the\pgf@y}}{\noexpand\tikz@timer@middle}}% \fi\fi\tikz@marshal}% %% collect options and nodes, coordinates and pics onpath \let\tikz@hvvh@currentoption\pgfutil@empty -\def\qrr@tikz@collect@hvvh@options#1[#2]{\edef\tikz@hvvh@currentoption{#2}#1} -\def\qrr@tikz@hvh@lineto@next{% - \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@hvh@lineto@next} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@hvh@lineto@next}% - {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@hvh@lineto@next}{\tikz@scan@one@point\qrr@tikz@@hvh@lineto}}}}% -\def\qrr@tikz@vhv@lineto@next{% - \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@vhv@lineto@next} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@vhv@lineto@next}% - {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@vhv@lineto@next}{\tikz@scan@one@point\qrr@tikz@@vhv@lineto}}}}% -\def\qrr@tikz@ud@lineto@next{% - \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@ud@lineto@next} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@ud@lineto@next} - {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@ud@lineto@next}{\tikz@scan@one@point\qrr@tikz@@ud@lineto}}}}% -\def\qrr@tikz@du@lineto@next{% - \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@du@lineto@next} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@du@lineto@next} - {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@du@lineto@next}{\tikz@scan@one@point\qrr@tikz@@du@lineto}}}}% -\def\qrr@tikz@lr@lineto@next{% - \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@lr@lineto@next} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@lr@lineto@next} - {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@lr@lineto@next}{\tikz@scan@one@point\qrr@tikz@@lr@lineto}}}}% -\def\qrr@tikz@rl@lineto@next{% - \pgfutil@ifnextchar n{\tikz@collect@label@onpath\qrr@tikz@rl@lineto@next} - {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\qrr@tikz@rl@lineto@next} - {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\qrr@tikz@rl@lineto@next}{\tikz@scan@one@point\qrr@tikz@@rl@lineto}}}}% +\def\tikzext@tikz@collect@hvvh@options#1[#2]{\edef\tikz@hvvh@currentoption{#2}#1} +\def\tikzext@tikz@hvh@lineto@next{% + \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@hvh@lineto@next} + {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@hvh@lineto@next}% + {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@hvh@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@hvh@lineto}}}}% +\def\tikzext@tikz@vhv@lineto@next{% + \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@vhv@lineto@next} + {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@vhv@lineto@next}% + {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@vhv@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@vhv@lineto}}}}% +\def\tikzext@tikz@ud@lineto@next{% + \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@ud@lineto@next} + {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@ud@lineto@next} + {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@ud@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@ud@lineto}}}}% +\def\tikzext@tikz@du@lineto@next{% + \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@du@lineto@next} + {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@du@lineto@next} + {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@du@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@du@lineto}}}}% +\def\tikzext@tikz@lr@lineto@next{% + \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@lr@lineto@next} + {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@lr@lineto@next} + {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@lr@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@lr@lineto}}}}% +\def\tikzext@tikz@rl@lineto@next{% + \pgfutil@ifnextchar n{\tikz@collect@label@onpath\tikzext@tikz@rl@lineto@next} + {\pgfutil@ifnextchar c{\tikz@collect@coordinate@onpath\tikzext@tikz@rl@lineto@next} + {\pgfutil@ifnextchar p{\tikz@collect@pic@onpath\tikzext@tikz@rl@lineto@next}{\tikz@scan@one@point\tikzext@tikz@@rl@lineto}}}}% \def\tikz@do@hvvh#1#2#3#4#5{% % #1 = first kink @@ -200,7 +199,7 @@ \tikz@scan@next@command}% %% -|- operator -\def\qrr@tikz@@hvh@lineto#1{% +\def\tikzext@tikz@@hvh@lineto#1{% \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \pgf@xb=\tikz@lastx \pgf@xc=\tikz@lastx @@ -211,51 +210,51 @@ \pgfqkeys{/tikz/hvvh}{/tikz/style/.expand once=\tikz@hvvh@currentoption}% \iftikz@shapeborder \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@xb}{\tikz@lasty}}}% - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@xc\pgf@xb \fi - \pgfutil@ifxempty\qrr@tikz@hvvh@ratio{% - \ifdim\qrr@tikz@hvvh@distance<0pt\relax - \ifqrr@tikz@hvvh@fromcenter + \pgfutil@ifxempty\tikzext@tikz@hvvh@ratio{% + \ifdim\tikzext@tikz@hvvh@distance<0pt\relax + \iftikzext@tikz@hvvh@fromcenter \pgf@xc\tikz@lastx \else \pgf@xc\pgf@x \fi \fi \ifdim\pgf@xb>\tikz@lastx - \qrr@tikz@hvvh@distance-\qrr@tikz@hvvh@distance + \tikzext@tikz@hvvh@distance-\tikzext@tikz@hvvh@distance \fi }{% - \ifqrr@tikz@hvvh@fromcenter - \qrr@tikz@hvvh@distance\tikz@lastx + \iftikzext@tikz@hvvh@fromcenter + \tikzext@tikz@hvvh@distance\tikz@lastx \else - \qrr@tikz@hvvh@distance\pgf@x + \tikzext@tikz@hvvh@distance\pgf@x \fi - \advance\qrr@tikz@hvvh@distance-\pgf@xc - \qrr@tikz@hvvh@distance\qrr@tikz@hvvh@ratio\qrr@tikz@hvvh@distance + \advance\tikzext@tikz@hvvh@distance-\pgf@xc + \tikzext@tikz@hvvh@distance\tikzext@tikz@hvvh@ratio\tikzext@tikz@hvvh@distance }% - \advance\pgf@xc\qrr@tikz@hvvh@distance + \advance\pgf@xc\tikzext@tikz@hvvh@distance \edef\pgf@tempa{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}% \edef\pgf@tempb{\noexpand\pgfqpoint{\the\pgf@xc}{\the\tikz@lasty}}% \edef\pgf@temp{\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% \else \let\tikz@shapeborder@name\pgfutil@empty - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@xc\pgf@xb \fi - \pgfutil@ifxempty\qrr@tikz@hvvh@ratio{% - \ifdim\qrr@tikz@hvvh@distance<0pt\relax + \pgfutil@ifxempty\tikzext@tikz@hvvh@ratio{% + \ifdim\tikzext@tikz@hvvh@distance<0pt\relax \pgf@xc\tikz@lastx \fi \ifdim\pgf@xb>\tikz@lastx - \qrr@tikz@hvvh@distance-\qrr@tikz@hvvh@distance + \tikzext@tikz@hvvh@distance-\tikzext@tikz@hvvh@distance \fi }{% - \qrr@tikz@hvvh@distance\tikz@lastx - \advance\qrr@tikz@hvvh@distance-\pgf@xc - \qrr@tikz@hvvh@distance\qrr@tikz@hvvh@ratio\qrr@tikz@hvvh@distance + \tikzext@tikz@hvvh@distance\tikz@lastx + \advance\tikzext@tikz@hvvh@distance-\pgf@xc + \tikzext@tikz@hvvh@distance\tikzext@tikz@hvvh@ratio\tikzext@tikz@hvvh@distance }% - \advance\pgf@xc\qrr@tikz@hvvh@distance + \advance\pgf@xc\tikzext@tikz@hvvh@distance \edef\pgf@tempa{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}% \edef\pgf@tempb{\noexpand\pgfqpoint{\the\pgf@xc}{\the\tikz@lasty}}% \edef\pgf@temp{\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% @@ -270,7 +269,7 @@ \pgf@marshal}% %% |-| operator -\def\qrr@tikz@@vhv@lineto#1{% +\def\tikzext@tikz@@vhv@lineto#1{% \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \pgf@xc=\tikz@lastx \pgf@yb=\tikz@lasty @@ -281,51 +280,51 @@ \pgfqkeys{/tikz/hvvh}{/tikz/style/.expand once=\tikz@hvvh@currentoption}% \iftikz@shapeborder \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\tikz@lastx}{\pgf@yb}}}% - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@yc\pgf@yb \fi - \ifx\qrr@tikz@hvvh@ratio\pgfutil@empty - \ifdim\qrr@tikz@hvvh@distance<0pt\relax - \ifqrr@tikz@hvvh@fromcenter + \ifx\tikzext@tikz@hvvh@ratio\pgfutil@empty + \ifdim\tikzext@tikz@hvvh@distance<0pt\relax + \iftikzext@tikz@hvvh@fromcenter \pgf@yc\tikz@lasty \else \pgf@yc\pgf@y \fi \fi \ifdim\pgf@yb>\tikz@lasty - \qrr@tikz@hvvh@distance-\qrr@tikz@hvvh@distance + \tikzext@tikz@hvvh@distance-\tikzext@tikz@hvvh@distance \fi \else - \ifqrr@tikz@hvvh@fromcenter - \qrr@tikz@hvvh@distance\tikz@lasty + \iftikzext@tikz@hvvh@fromcenter + \tikzext@tikz@hvvh@distance\tikz@lasty \else - \qrr@tikz@hvvh@distance\pgf@y + \tikzext@tikz@hvvh@distance\pgf@y \fi - \advance\qrr@tikz@hvvh@distance-\pgf@yc - \qrr@tikz@hvvh@distance\qrr@tikz@hvvh@ratio\qrr@tikz@hvvh@distance + \advance\tikzext@tikz@hvvh@distance-\pgf@yc + \tikzext@tikz@hvvh@distance\tikzext@tikz@hvvh@ratio\tikzext@tikz@hvvh@distance \fi - \advance\pgf@yc\qrr@tikz@hvvh@distance + \advance\pgf@yc\tikzext@tikz@hvvh@distance \edef\pgf@tempa{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}% \edef\pgf@tempb{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\pgf@yc}}% \edef\pgf@temp{\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% \else \let\tikz@shapeborder@name\pgfutil@empty - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@yc\pgf@yb \fi - \ifx\qrr@tikz@hvvh@ratio\pgfutil@empty - \ifdim\qrr@tikz@hvvh@distance<0pt\relax + \ifx\tikzext@tikz@hvvh@ratio\pgfutil@empty + \ifdim\tikzext@tikz@hvvh@distance<0pt\relax \pgf@yc\tikz@lasty \fi \ifdim\pgf@yb>\tikz@lasty - \qrr@tikz@hvvh@distance-\qrr@tikz@hvvh@distance + \tikzext@tikz@hvvh@distance-\tikzext@tikz@hvvh@distance \fi \else - \qrr@tikz@hvvh@distance\tikz@lasty - \advance\qrr@tikz@hvvh@distance-\pgf@yc - \qrr@tikz@hvvh@distance\qrr@tikz@hvvh@ratio\qrr@tikz@hvvh@distance + \tikzext@tikz@hvvh@distance\tikz@lasty + \advance\tikzext@tikz@hvvh@distance-\pgf@yc + \tikzext@tikz@hvvh@distance\tikzext@tikz@hvvh@ratio\tikzext@tikz@hvvh@distance \fi - \advance\pgf@yc\qrr@tikz@hvvh@distance + \advance\pgf@yc\tikzext@tikz@hvvh@distance \edef\pgf@tempa{\noexpand\pgfqpoint{\the\pgf@xc}{\the\pgf@yc}}% \edef\pgf@tempb{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\pgf@yc}}% \edef\pgf@temp{\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% @@ -340,7 +339,7 @@ \pgf@marshal}% %% r-ud operator -\def\qrr@tikz@@ud@lineto#1{% +\def\tikzext@tikz@@ud@lineto#1{% \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \pgf@xc\tikz@lastx \pgf@yb\tikz@lasty @@ -350,34 +349,34 @@ \tikz@make@last@position{#1}% \begingroup \pgfqkeys{/tikz/udlr}{/tikz/style/.expand once=\tikz@hvvh@currentoption}% - \pgfmathsetlength\qrr@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/ud distance}}% + \pgfmathsetlength\tikzext@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/ud distance}}% \iftikz@shapeborder \advance\pgf@y1pt% \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@x}{\pgf@y}}}% - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@yc\pgf@yb \else\ifx\pgf@temp\relax \pgf@yc\pgf@yb \fi \fi \ifdim\pgf@yc<\pgf@y - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@yc=\tikz@lasty \else \pgf@yc=\pgf@y \fi \fi - \advance\pgf@yc\qrr@tikz@udlr@distance + \advance\pgf@yc\tikzext@tikz@udlr@distance \edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% \else \let\tikz@shapeborder@name\pgfutil@empty \ifx\pgf@temp\relax\else - \ifqrr@tikz@hvvh@fromcenter\else + \iftikzext@tikz@hvvh@fromcenter\else \pgf@yb\pgf@yc \fi \fi \ifdim\pgf@yb<\tikz@lasty\pgf@yb\tikz@lasty\fi - \advance\pgf@yb\qrr@tikz@udlr@distance + \advance\pgf@yb\tikzext@tikz@udlr@distance \pgf@yc\pgf@yb \edef\pgf@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \fi @@ -391,7 +390,7 @@ \pgf@marshal}% %% r-du operator -\def\qrr@tikz@@du@lineto#1{% +\def\tikzext@tikz@@du@lineto#1{% \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \pgf@xc\tikz@lastx \pgf@yb\tikz@lasty @@ -401,34 +400,34 @@ \tikz@make@last@position{#1}% \begingroup \pgfqkeys{/tikz/udlr}{/tikz/style/.expand once=\tikz@hvvh@currentoption}% - \pgfmathsetlength\qrr@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/du distance}}% + \pgfmathsetlength\tikzext@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/du distance}}% \iftikz@shapeborder \advance\pgf@y-1pt% \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@x}{\pgf@y}}}% - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@yc\pgf@yb \else\ifx\pgf@temp\relax \pgf@yc\pgf@yb \fi \fi \ifdim\pgf@yc>\pgf@y - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@yc=\tikz@lasty \else \pgf@yc=\pgf@y \fi \fi - \advance\pgf@yc-\qrr@tikz@udlr@distance + \advance\pgf@yc-\tikzext@tikz@udlr@distance \edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% \else \let\tikz@shapeborder@name\pgfutil@empty \ifx\pgf@temp\relax\else - \ifqrr@tikz@hvvh@fromcenter\else + \iftikzext@tikz@hvvh@fromcenter\else \pgf@yb\pgf@yc \fi \fi \ifdim\pgf@yb>\tikz@lasty\pgf@yb\tikz@lasty\fi - \advance\pgf@yb-\qrr@tikz@udlr@distance + \advance\pgf@yb-\tikzext@tikz@udlr@distance \pgf@yc\pgf@yb \edef\pgf@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \fi @@ -442,7 +441,7 @@ \pgf@marshal}% %% r-lr operator -\def\qrr@tikz@@lr@lineto#1{% +\def\tikzext@tikz@@lr@lineto#1{% \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \pgf@xb\tikz@lastx \pgf@yc\tikz@lasty @@ -452,34 +451,34 @@ \tikz@make@last@position{#1}% \begingroup \pgfqkeys{/tikz/udlr}{/tikz/style/.expand once=\tikz@hvvh@currentoption}% - \pgfmathsetlength\qrr@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/lr distance}}% + \pgfmathsetlength\tikzext@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/lr distance}}% \iftikz@shapeborder \advance\pgf@x-1pt% \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@x}{\pgf@y}}}% - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@xc\pgf@xb \else\ifx\pgf@temp\relax \pgf@xc\pgf@xb \fi \fi \ifdim\pgf@xc>\pgf@x - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@xc=\tikz@lastx \else \pgf@xc=\pgf@x \fi \fi - \advance\pgf@xc-\qrr@tikz@udlr@distance + \advance\pgf@xc-\tikzext@tikz@udlr@distance \edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% \else \let\tikz@shapeborder@name\pgfutil@empty \ifx\pgf@temp\relax\else - \ifqrr@tikz@hvvh@fromcenter\else + \iftikzext@tikz@hvvh@fromcenter\else \pgf@xb\pgf@xc \fi \fi \ifdim\pgf@xb>\tikz@lastx\pgf@xb\tikz@lastx\fi - \advance\pgf@xb-\qrr@tikz@udlr@distance + \advance\pgf@xb-\tikzext@tikz@udlr@distance \pgf@xc\pgf@xb \edef\pgf@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \fi @@ -493,7 +492,7 @@ \pgf@marshal}% %% r-rl operator -\def\qrr@tikz@@rl@lineto#1{% +\def\tikzext@tikz@@rl@lineto#1{% \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \pgf@xb\tikz@lastx \pgf@yc\tikz@lasty @@ -503,34 +502,34 @@ \tikz@make@last@position{#1}% \begingroup \pgfqkeys{/tikz/udlr}{/tikz/style/.expand once=\tikz@hvvh@currentoption}% - \pgfmathsetlength\qrr@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/rl distance}}% + \pgfmathsetlength\tikzext@tikz@udlr@distance{\pgfkeysvalueof{/tikz/udlr/rl distance}}% \iftikz@shapeborder% \advance\pgf@x1pt% \pgf@process{\pgfpointshapeborder{\tikz@shapeborder@name}{\pgfqpoint{\pgf@x}{\pgf@y}}}% - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@xc\pgf@xb \else\ifx\pgf@temp\relax \pgf@xc\pgf@xb \fi \fi \ifdim\pgf@xc<\pgf@x - \ifqrr@tikz@hvvh@fromcenter + \iftikzext@tikz@hvvh@fromcenter \pgf@xc=\tikz@lastx \else \pgf@xc=\pgf@x \fi \fi - \advance\pgf@xc\qrr@tikz@udlr@distance + \advance\pgf@xc\tikzext@tikz@udlr@distance \edef\pgf@temp{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% \else \let\tikz@shapeborder@name\pgfutil@empty% \ifx\pgf@temp\relax\else - \ifqrr@tikz@hvvh@fromcenter\else + \iftikzext@tikz@hvvh@fromcenter\else \pgf@xb\pgf@xc \fi \fi \ifdim\pgf@xb<\tikz@lastx\pgf@xb\tikz@lastx\fi - \advance\pgf@xb\qrr@tikz@udlr@distance + \advance\pgf@xb\tikzext@tikz@udlr@distance \pgf@xc\pgf@xb \edef\pgf@temp{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}% \fi @@ -544,9 +543,8 @@ \pgf@marshal}% %% a few nice to haves, use with to or edge operator -\let\tikz@origtotarget\pgfutil@empty \tikzset{ - node as new start/.is if=tikz@ortho@preflush, + node as new start/.is if=tikzext@ortho@preflush, node as new start, horizontal vertical/.style={to path={-| (\tikztotarget) \tikztonodes}}, vertical horizontal/.style={to path={|- (\tikztotarget) \tikztonodes}}, @@ -554,79 +552,79 @@ vertical horizontal vertical/.style={to path={|-| (\tikztotarget) \tikztonodes}}, only vertical second/.style={to path={ \pgfextra - \let\tikz@ortho@anchor\pgfutil@empty - \let\tikz@origtotarget\pgfutil@empty + \let\tikzext@ortho@anchor\pgfutil@empty + \let\tikzext@origtotarget\pgfutil@empty \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax \iftikz@shapeborder \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax \ifdim\pgf@y>\tikz@lasty\relax \edef\tikztostart{\tikztostart.north}% - \iftikz@shapeborder\def\tikz@ortho@anchor{.south}\fi + \iftikz@shapeborder\def\tikzext@ortho@anchor{.south}\fi \else \edef\tikztostart{\tikztostart.south}% - \iftikz@shapeborder\def\tikz@ortho@anchor{.north}\fi + \iftikz@shapeborder\def\tikzext@ortho@anchor{.north}\fi \fi \fi \def\tikz@tempa{#1}% \ifx\tikz@tempa\pgfutil@empty\else - \let\tikz@origtotarget\tikztotarget - \edef\tikztotarget{[xshift={#1}]\tikztotarget\tikz@ortho@anchor}% + \let\tikzext@origtotarget\tikztotarget + \edef\tikztotarget{[xshift={#1}]\tikztotarget\tikzext@ortho@anchor}% \fi \endpgfextra [insert path/.expanded={ (perpendicular cs: horizontal line through={(\tikztostart)}, vertical line through={(\tikztotarget)}) -- (\tikztotarget)}] \tikztonodes \pgfextra - \ifx\tikz@origtotarget\pgfutil@empty\else - \iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi\endpgfextra}}, + \ifx\tikzext@origtotarget\pgfutil@empty\else + \iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi\endpgfextra}}, only vertical second/.default=, only horizontal second/.style={to path={ \pgfextra - \let\tikz@ortho@anchor\pgfutil@empty - \let\tikz@origtotarget\pgfutil@empty + \let\tikzext@ortho@anchor\pgfutil@empty + \let\tikzext@origtotarget\pgfutil@empty \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax \iftikz@shapeborder \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax \ifdim\pgf@x>\tikz@lastx\relax \edef\tikztostart{\tikztostart.east}% - \iftikz@shapeborder\def\tikz@ortho@anchor{.west}\fi + \iftikz@shapeborder\def\tikzext@ortho@anchor{.west}\fi \else \edef\tikztostart{\tikztostart.west}% - \iftikz@shapeborder\def\tikz@ortho@anchor{.east}\fi + \iftikz@shapeborder\def\tikzext@ortho@anchor{.east}\fi \fi \fi \def\tikz@tempa{#1}% \ifx\tikz@tempa\pgfutil@empty\else - \let\tikz@origtotarget\tikztotarget - \edef\tikztotarget{[yshift={#1}]\tikztotarget\tikz@ortho@anchor}% + \let\tikzext@origtotarget\tikztotarget + \edef\tikztotarget{[yshift={#1}]\tikztotarget\tikzext@ortho@anchor}% \fi \endpgfextra [insert path/.expanded={ (perpendicular cs: vertical line through={(\tikztostart)}, horizontal line through={(\tikztotarget)}) -- (\tikztotarget)}] \tikztonodes \pgfextra - \ifx\tikz@origtotarget\pgfutil@empty\else - \iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi\endpgfextra}}, + \ifx\tikzext@origtotarget\pgfutil@empty\else + \iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi\endpgfextra}}, only horizontal second/.default=, only vertical first/.style={to path={ \pgfextra - \let\tikz@ortho@anchor\pgfutil@empty - \let\tikz@origtotarget\pgfutil@empty + \let\tikzext@ortho@anchor\pgfutil@empty + \let\tikzext@origtotarget\pgfutil@empty \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax \iftikz@shapeborder - \let\tikz@origtotarget\tikztotarget + \let\tikzext@origtotarget\tikztotarget \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax \ifdim\pgf@y>\tikz@lasty\relax \edef\tikztotarget{\tikztotarget.south}% - \iftikz@shapeborder\def\tikz@ortho@anchor{.north}\fi + \iftikz@shapeborder\def\tikzext@ortho@anchor{.north}\fi \else \edef\tikztotarget{\tikztotarget.north}% - \iftikz@shapeborder\def\tikz@ortho@anchor{.south}\fi + \iftikz@shapeborder\def\tikzext@ortho@anchor{.south}\fi \fi \fi \def\tikz@tempa{#1}% \ifx\tikz@tempa\pgfutil@empty\else - \edef\tikztostart{[xshift={#1}]\tikztostart\tikz@ortho@anchor}% + \edef\tikztostart{[xshift={#1}]\tikztostart\tikzext@ortho@anchor}% \fi \endpgfextra [insert path/.expanded={(\tikztostart)}] @@ -634,50 +632,50 @@ horizontal line through={(\tikztotarget)}) \tikztonodes \pgfextra - \ifx\tikz@origtotarget\pgfutil@empty\else - \iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi\endpgfextra}}, + \ifx\tikzext@origtotarget\pgfutil@empty\else + \iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi\endpgfextra}}, only vertical first/.default=, only horizontal first/.style={to path={ \pgfextra - \let\tikz@ortho@anchor\pgfutil@empty - \let\tikz@origtotarget\pgfutil@empty + \let\tikzext@ortho@anchor\pgfutil@empty + \let\tikzext@origtotarget\pgfutil@empty \tikz@scan@one@point\pgfutil@firstofone(\tikztotarget)\relax \iftikz@shapeborder - \let\tikz@origtotarget\tikztotarget + \let\tikzext@origtotarget\tikztotarget \tikz@scan@one@point\pgfutil@firstofone(\tikztostart)\relax \ifdim\pgf@x>\tikz@lastx\relax \edef\tikztotarget{\tikztotarget.west}% - \iftikz@shapeborder\def\tikz@ortho@anchor{.east}\fi + \iftikz@shapeborder\def\tikzext@ortho@anchor{.east}\fi \else \edef\tikztotarget{\tikztotarget.east}% - \iftikz@shapeborder\def\tikz@ortho@anchor{.west}\fi + \iftikz@shapeborder\def\tikzext@ortho@anchor{.west}\fi \fi \fi \def\tikz@tempa{#1}% \ifx\tikz@tempa\pgfutil@empty\else - \edef\tikztostart{[yshift={#1}]\tikztostart\tikz@ortho@anchor}% + \edef\tikztostart{[yshift={#1}]\tikztostart\tikzext@ortho@anchor}% \fi \endpgfextra [insert path/.expanded={(\tikztostart)}] -- (perpendicular cs: horizontal line through/.expanded={(\tikztostart)}, vertical line through={(\tikztotarget)}) \tikztonodes \pgfextra - \ifx\tikz@origtotarget\pgfutil@empty\else - \iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi\endpgfextra}}, + \ifx\tikzext@origtotarget\pgfutil@empty\else + \iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi\endpgfextra}}, only horizontal first/.default=, only vertical first to center/.style={to path={ \pgfextra - \let\tikz@origtotarget\tikztotarget + \let\tikzext@origtotarget\tikztotarget \endpgfextra (\tikztostart) -- (perpendicular cs: vertical line through={(\tikztostart)}, horizontal line through={(\tikztotarget)}) - \tikztonodes \ifx\tikz@origtotarget\pgfutil@empty\else\iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi}}, + \tikztonodes \ifx\tikzext@origtotarget\pgfutil@empty\else\iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi}}, only horizontal first to center/.style={to path={ \pgfextra - \let\tikz@origtotarget\tikztotarget + \let\tikzext@origtotarget\tikztotarget \endpgfextra (\tikztostart) -- (perpendicular cs: horizontal line through={(\tikztostart)}, vertical line through={(\tikztotarget)}) - \tikztonodes \ifx\tikz@origtotarget\pgfutil@empty\else\iftikz@ortho@preflush(\tikz@origtotarget)\fi\fi}}% + \tikztonodes \ifx\tikzext@origtotarget\pgfutil@empty\else\iftikzext@ortho@preflush(\tikzext@origtotarget)\fi\fi}}% } \endinput
\ No newline at end of file diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex index 7cad25e42b..aa732ab835 100644 --- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex +++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.patterns.images.code.tex @@ -1,3 +1,10 @@ +% 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. +% % This is the TikZ library patterns.images % Load with \usetikzlibrary{patterns.images} % @@ -8,13 +15,13 @@ % - use image as pattern=<name> % - image as pattern=<opt arguments for \pgftext> -\def\pgfsetupimageaspattern{\pgfutil@ifnextchar[\qrr@pgfsetupimageaspattern{\qrr@pgfsetupimageaspattern[]}} -\def\qrr@pgfsetupimageaspattern[#1]#2#3{% #1 = options +\def\pgfsetupimageaspattern{\pgfutil@ifnextchar[\tikzext@pgfsetupimageaspattern{\tikzext@pgfsetupimageaspattern[]}} +\def\tikzext@pgfsetupimageaspattern[#1]#2#3{% #1 = options % #2 = image name % #3 = file name - \pgfdeclareimage[#1]{qrr@pgf@iap@#2}{#3}% - \sbox\pgfutil@tempboxa{\pgfuseimage{qrr@pgf@iap@#2}}% - \expandafter\edef\csname qrr@pgf@iap@#2@\endcsname{{\the\wd\pgfutil@tempboxa}{\the\ht\pgfutil@tempboxa}}% + \pgfdeclareimage[#1]{tikzext@pgf@iap@#2}{#3}% + \sbox\pgfutil@tempboxa{\pgfuseimage{tikzext@pgf@iap@#2}}% + \expandafter\edef\csname tikzext@pgf@iap@#2@\endcsname{{\the\wd\pgfutil@tempboxa}{\the\ht\pgfutil@tempboxa}}% } \tikzset{ image as pattern/name/.initial=, @@ -22,13 +29,13 @@ image as pattern/options/.style={/tikz/image as pattern/option/.append style={#1}}, image as pattern/.default=, image as pattern/.code={ - \tikzset{image as pattern/.cd,#1} + \pgfqkeys{/tikz/image as pattern}{#1}% \pgfkeysgetvalue{/tikz/image as pattern/name}\tikz@temp \pgfutil@ifxempty\tikz@temp{% \tikzerror{You need to specify a name for the ``image-pattern'' to be used.}% }{% - \edef\tikz@tempa{\expandafter\expandafter\expandafter\pgfutil@firstoftwo\csname qrr@pgf@iap@\tikz@temp @\endcsname}% - \edef\tikz@tempb{\expandafter\expandafter\expandafter\pgfutil@secondoftwo\csname qrr@pgf@iap@\tikz@temp @\endcsname}% + \edef\tikz@tempa{\expandafter\expandafter\expandafter\pgfutil@firstoftwo\csname tikzext@pgf@iap@\tikz@temp @\endcsname}% + \edef\tikz@tempb{\expandafter\expandafter\expandafter\pgfutil@secondoftwo\csname tikzext@pgf@iap@\tikz@temp @\endcsname}% \pgfkeysalso{/tikz/path picture={% \pgf@process{\pgfpointanchor{path picture bounding box}{north east}}% \pgf@xa\pgf@x\pgf@ya\pgf@y @@ -37,7 +44,7 @@ \pgfutil@loop {% \pgfutil@loop - \expandafter\pgftext\expandafter[/tikz/image as pattern/option,at=\pgfqpoint{\pgf@xb}{\pgf@yb}]{\pgfuseimage{qrr@pgf@iap@\tikz@temp}}% + \expandafter\pgftext\expandafter[/tikz/image as pattern/option,at=\pgfqpoint{\pgf@xb}{\pgf@yb}]{\pgfuseimage{tikzext@pgf@iap@\tikz@temp}}% \ifdim\pgf@yb<\pgf@ya \advance\pgf@yb\tikz@tempb \pgfutil@repeat diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex index a29d4ace64..98de181c27 100644 --- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex +++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.positioning-plus.code.tex @@ -66,7 +66,7 @@ \tikzset{east above/.code =\tikz@lib@place@handle@{#1}{south east}{0}{1}{north east}{1}} \tikzset{east below/.code=\tikz@lib@place@handle@{#1}{north east}{0}{-1}{south east}{1}} -\newif\ifqrr@tikz@lib@place@postransform +\newif\iftikzext@tikz@lib@place@postransform \tikzset{node distance transformation/.is if=qrr@tikz@lib@place@postransform} \def\tikz@lib@place@handle@@#1#2#3#4{% \pgfutil@in@{of }{#1}% @@ -81,7 +81,7 @@ \expandafter\tikz@lib@place@parse@nums\expandafter{\tikz@lib@place@nums}% \pgf@x=#2\pgf@x \pgf@y=#3\pgf@y - \ifqrr@tikz@lib@place@postransform + \iftikzext@tikz@lib@place@postransform \pgf@pos@transform{\pgf@x}{\pgf@y}% change from original \fi \edef\tikz@lib@pos@call{\noexpand\pgftransformshift{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}}% @@ -91,7 +91,7 @@ \def\tikz@lib@place@handle@#1#2#3#4#5#6{% \pgfutil@in@{:}{#1}% \ifpgfutil@in@ - \tikz@lib@place@handle@qrr@#1\tikz@stop + \tikzext@lib@place@handle@#1\tikz@stop \ifx\pgf@temp\pgfutil@empty \let\pgf@temp\tikz@node@distance \fi @@ -107,24 +107,24 @@ \expandafter\tikz@lib@place@handle@@\expandafter{\tikz@temp}{#3}{#4}{#5}% \fi } -\def\tikz@lib@place@handle@qrr@#1:#2\tikz@stop{% +\def\tikzext@lib@place@handle@#1:#2\tikz@stop{% \pgfutil@in@{and}{#1}% \ifpgfutil@in@ - \tikz@lib@place@handle@qrr@@#1\tikz@stop + \tikzext@lib@place@handle@@#1\tikz@stop \else - \tikz@lib@place@handle@qrr@@#1and#1\tikz@stop + \tikzext@lib@place@handle@@#1and#1\tikz@stop \fi \def\pgf@temp{#2}% } -\def\tikz@lib@place@handle@qrr@@#1and#2\tikz@stop{% +\def\tikzext@lib@place@handle@@#1and#2\tikz@stop{% \def\pgf@tempa{#1}% \def\pgf@tempb{#2}% } -\def\qrr@xyshift@starred#1#2#3{% +\def\tikzext@xyshift@starred#1#2#3{% \edef\tikz@marshal{\noexpand\pgfutil@in@{and}{\tikz@node@distance}}% \tikz@marshal \ifpgfutil@in@ - \expandafter\tikz@lib@place@handle@qrr@@\tikz@node@distance\tikz@stop + \expandafter\tikzext@lib@place@handle@@\tikz@node@distance\tikz@stop \else \let#3\tikz@node@distance \fi @@ -144,8 +144,8 @@ \pgftransformshift{\pgfqpoint{\pgf@x}{\pgf@y}}% \fi} \tikzset{ - xshift*/.code=\qrr@xyshift@starred{#1}x\pgf@tempb, - yshift*/.code=\qrr@xyshift@starred{#1}y\pgf@tempa + xshift*/.code=\tikzext@xyshift@starred{#1}x\pgf@tempb, + yshift*/.code=\tikzext@xyshift@starred{#1}y\pgf@tempa } \def\pgfutil@firstofmany#1#2\pgf@stop{#1} @@ -233,7 +233,7 @@ \begingroup \edef\pgfmath@temp{\noexpand\pgfutil@in@{and}{\tikz@node@distance}}% \pgfmath@temp\ifpgfutil@in@ - \expandafter\tikz@lib@place@handle@qrr@@\tikz@node@distance\tikz@stop + \expandafter\tikzext@lib@place@handle@@\tikz@node@distance\tikz@stop \else \let\pgf@tempb\tikz@node@distance \fi @@ -245,7 +245,7 @@ \begingroup \edef\pgfmath@temp{\noexpand\pgfutil@in@{and}{\tikz@node@distance}}% \pgfmath@temp\ifpgfutil@in@ - \expandafter\tikz@lib@place@handle@qrr@@\tikz@node@distance\tikz@stop + \expandafter\tikzext@lib@place@handle@@\tikz@node@distance\tikz@stop \else \let\pgf@tempa\tikz@node@distance \fi @@ -256,7 +256,7 @@ %\tikzdeclarecoordinatesystem{node distance}{% % \tikz@cs@nd#1\tikz@stop} %\def\tikz@cs@nd#1,#2\tikz@stop{% -% \def\qrr@xyshift@starred@action##1{\pgftransformshift{##1}}% -% \qrr@xyshift@starred{#1}x\pgf@tempb -% \qrr@xyshift@starred{#2}y\pgf@tempa} +% \def\tikzext@xyshift@starred@action##1{\pgftransformshift{##1}}% +% \tikzext@xyshift@starred{#1}x\pgf@tempb +% \tikzext@xyshift@starred{#2}y\pgf@tempa} \endinput diff --git a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex index c235cd179c..026b39ab2f 100644 --- a/graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex +++ b/graphics/pgf/contrib/tikz-ext/tikzlibraryext.transformations.mirror.code.tex @@ -10,61 +10,121 @@ mirror/.code={% \pgfutil@in@{--}{#1}% \ifpgfutil@in@ - \tikz@trans@mirror#1\@nil + \tikzext@trans@mirror#1\tikz@stop \else - \tikz@scan@one@point\pgfqtransformmirror#1\relax + \tikz@addtransform{\tikz@scan@one@point\pgfqtransformmirror#1\relax}% \fi}, - ymirror/.code={\pgfutil@ifnextchar(\tikz@trans@ymirror@coordinate\tikz@trans@ymirror@simple#1\@nil}, - xmirror/.code={\pgfutil@ifnextchar(\tikz@trans@xmirror@coordinate\tikz@trans@xmirror@simple#1\@nil}, + ymirror/.code={\pgfutil@ifnextchar(\tikzext@trans@ymirror@coordinate\tikzext@trans@ymirror@simple#1\tikz@stop}, + xmirror/.code={\pgfutil@ifnextchar(\tikzext@trans@xmirror@coordinate\tikzext@trans@xmirror@simple#1\tikz@stop}, mirror x/.code={% \pgfextract@process\tikz@temp{\tikz@scan@one@point\pgfutil@firstofone#1\relax}% - \pgftransformmirror{\tikz@temp}{\pgfpointadd{\tikz@temp}{\pgfqpointxy{0}{1}}}}, + \edef\tikz@marshal{% + \noexpand\tikz@addtransform{% + \noexpand\pgftransformmirror + {\expandafter\noexpand\tikz@temp} + {\noexpand\pgfpointadd{\expandafter\noexpand\tikz@temp} + {\noexpand\pgfqpointxy{0}{1}}}}}% + \tikz@marshal + }, mirror y/.code={% \pgfextract@process\tikz@temp{\tikz@scan@one@point\pgfutil@firstofone#1\relax}% - \pgftransformmirror{\tikz@temp}{\pgfpointadd{\tikz@temp}{\pgfqpointxy{1}{0}}}}, + \edef\tikz@marshal{% + \noexpand\tikz@addtransform{% + \noexpand\pgftransformmirror + {\expandafter\noexpand\tikz@temp} + {\noexpand\pgfpointadd{\expandafter\noexpand\tikz@temp} + {\noexpand\pgfqpointxy{1}{0}}}}}% + \tikz@marshal + }, mirror/.value required, - ymirror/.value required, - xmirror/.value required, - mirror x/.value required, - mirror y/.value required} -\def\tikz@trans@mirror#1--#2\@nil{% - \pgftransformmirror{\tikz@scan@one@point\pgfutil@firstofone#1\relax} - {\tikz@scan@one@point\pgfutil@firstofone#2\relax}} -\def\tikz@trans@xmirror@simple#1\@nil{\pgftransformxmirror{#1}} -\def\tikz@trans@ymirror@simple#1\@nil{\pgftransformymirror{#1}} -\def\tikz@trans@xmirror@coordinate#1\@nil{% - \tikz@scan@one@point\pgfutil@firstofone#1\pgftransformxmirror{+\the\pgf@x}} -\def\tikz@trans@ymirror@coordinate#1\@nil{% - \tikz@scan@one@point\pgfutil@firstofone#1\pgftransformymirror{+\the\pgf@y}} + ymirror/.default=+0pt, + xmirror/.default=+0pt, + mirror x/.default={(0,0)}, + mirror y/.default={(0,0)}% +} +\def\tikzext@trans@mirror#1--#2\tikz@stop{% + \tikz@addtransform{% + \pgftransformmirror{\tikz@scan@one@point\pgfutil@firstofone#1\relax} + {\tikz@scan@one@point\pgfutil@firstofone#2\relax}}} +\def\tikzext@trans@xmirror@simple#1\tikz@stop{\tikz@addtransform{\pgftransformxmirror{#1}}} +\def\tikzext@trans@ymirror@simple#1\tikz@stop{\tikz@addtransform{\pgftransformymirror{#1}}} +\def\tikzext@trans@xmirror@coordinate#1\tikz@stop{% + \tikz@scan@one@point\pgfutil@firstofone#1\relax + \edef\tikz@marshal{% + \noexpand\tikz@addtransform{% + \noexpand\pgftransformxmirror{+\the\pgf@x}% + }% + }% + \tikz@marshal +} +\def\tikzext@trans@ymirror@coordinate#1\tikz@stop{% + \tikz@scan@one@point\pgfutil@firstofone#1\relax + \edef\tikz@marshal{% + \noexpand\tikz@addtransform{% + \noexpand\pgftransformymirror{+\the\pgf@y}% + }% + }% + \tikz@marshal +} \tikzset{ Mirror/.code={% \pgfutil@in@{--}{#1}% \ifpgfutil@in@ - \tikz@trans@Mirror#1\@nil + \tikzext@trans@Mirror#1\tikz@stop \else - \tikz@scan@one@point\pgfqtransformMirror#1\relax + \tikz@addtransform{\tikz@scan@one@point\pgfqtransformMirror#1\relax}% \fi}, - yMirror/.code={\pgfutil@ifnextchar(\tikz@trans@yMirror@coordinate\tikz@trans@yMirror@simple#1\@nil}, - xMirror/.code={\pgfutil@ifnextchar(\tikz@trans@xMirror@coordinate\tikz@trans@xMirror@simple#1\@nil}, + yMirror/.code={\pgfutil@ifnextchar(\tikzext@trans@yMirror@coordinate\tikzext@trans@yMirror@simple#1\tikz@stop}, + xMirror/.code={\pgfutil@ifnextchar(\tikzext@trans@xMirror@coordinate\tikzext@trans@xMirror@simple#1\tikz@stop}, Mirror x/.code={% \pgfextract@process\tikz@temp{\tikz@scan@one@point\pgfutil@firstofone#1\relax}% - \pgftransformMirror{\tikz@temp}{\pgfpointadd{\tikz@temp}{\pgfqpointxy{0}{1}}}}, + \edef\tikz@marshal{% + \noexpand\tikz@addtransform{% + \noexpand\pgftransformMirror + {\expandafter\noexpand\tikz@temp} + {\noexpand\pgfpointadd{\expandafter\noexpand\tikz@temp} + {\noexpand\pgfqpointxy{0}{1}}}}}% + \tikz@marshal + }, Mirror y/.code={% \pgfextract@process\tikz@temp{\tikz@scan@one@point\pgfutil@firstofone#1\relax}% - \pgftransformMirror{\tikz@temp}{\pgfpointadd{\tikz@temp}{\pgfqpointxy{1}{0}}}}, + \edef\tikz@marshal{% + \noexpand\tikz@addtransform{% + \noexpand\pgftransformMirror + {\expandafter\noexpand\tikz@temp} + {\noexpand\pgfpointadd{\expandafter\noexpand\tikz@temp} + {\noexpand\pgfqpointxy{1}{0}}}}}% + \tikz@marshal + }, Mirror/.value required, - yMirror/.value required, - xMirror/.value required, - Mirror x/.value required, - Mirror y/.value required} -\def\tikz@trans@Mirror#1--#2\@nil{% - \pgftransformMirror{\tikz@scan@one@point\pgfutil@firstofone#1\relax} - {\tikz@scan@one@point\pgfutil@firstofone#2\relax}} -\def\tikz@trans@xMirror@simple#1\@nil{\pgftransformxMirror{#1}} -\def\tikz@trans@yMirror@simple#1\@nil{\pgftransformyMirror{#1}} -\def\tikz@trans@xMirror@coordinate#1\@nil{% - \tikz@scan@one@point\pgfutil@firstofone#1\pgftransformxMirror{+\the\pgf@x}} -\def\tikz@trans@yMirror@coordinate#1\@nil{% - \tikz@scan@one@point\pgfutil@firstofone#1\pgftransformyMirror{+\the\pgf@y}} + yMirror/.default=+0pt, + xMirror/.default=+0pt, + Mirror x/.default={(0,0)}, + Mirror y/.default={(0,0)}% +} +\def\tikzext@trans@Mirror#1--#2\tikz@stop{% + \tikz@addtransform{% + \pgftransformMirror{\tikz@scan@one@point\pgfutil@firstofone#1\relax} + {\tikz@scan@one@point\pgfutil@firstofone#2\relax}}} +\def\tikzext@trans@xMirror@simple#1\tikz@stop{\tikz@addtransform{\pgftransformxMirror{#1}}} +\def\tikzext@trans@yMirror@simple#1\tikz@stop{\tikz@addtransform{\pgftransformyMirror{#1}}} +\def\tikzext@trans@xMirror@coordinate#1\tikz@stop{% + \tikz@scan@one@point\pgfutil@firstofone#1\relax + \edef\tikz@marshal{% + \noexpand\tikz@addtransform{% + \noexpand\pgftransformxMirror{+\the\pgf@x}% + }% + }% + \tikz@marshal +} +\def\tikzext@trans@yMirror@coordinate#1\tikz@stop{% + \tikz@scan@one@point\pgfutil@firstofone#1\relax + \edef\tikz@marshal{% + \noexpand\tikz@addtransform{% + \noexpand\pgftransformyMirror{+\the\pgf@y}% + }% + }% + \tikz@marshal +} \endinput |