diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.layers.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.layers.code.tex | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.layers.code.tex b/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.layers.code.tex new file mode 100644 index 00000000000..c981190f4d0 --- /dev/null +++ b/Master/texmf-dist/tex/generic/tikz-ext/tikzlibraryext.layers.code.tex @@ -0,0 +1,235 @@ +% Copyright 2022 by Qrrbrbirlbel +% +% This file may be distributed and/or modified +% +% 1. under the LaTeX Project Public License and/or +% 2. under the GNU Free Documentation License. +% + +\pgfdeclarelayer{discard} + +\def\tikzext@layers@swapfirstsetbox#1\setbox#2\tikzext@stop{% + #1\tikzext@layers@setbox@which#2% +} +\let\tikzext@layers@setbox@which\setbox + +\def\tikzshowdiscardlayeranyway{\box\pgf@layerbox@discard} +\tikzset{ + discard layer/.code=\expandafter\let\csname pgf@layerbox@#1\endcsname\pgfutil@voidb@x, + discard layer global/.code=\expandafter\global\expandafter\let\csname pgf@layerbox@#1\endcsname\pgfutil@voidb@x, +} +\def\tikzext@layers@whichbox{\tikz@figbox}% +\pgfqkeys{/tikz-ext/layers}{ + in box/.code={% + \expandafter\ifx\tikzext@layers@whichbox#1% + \pgfutil@packagewarning{tikz-ext}{Layer is already set. Setting will be skipped.}% + \else + \def\tikzext@layers@whichbox{#1}% + \def\tikz@whichbox{#1}% + \def\tikzext@layers@setbox@which{\global\setbox}% + \fi + }, + on layer/.style={ + /tikz-ext/layers/in box/.expand once=\csname pgf@layerbox@#1\endcsname + }, + discard/.style={ + /tikz-ext/layers/on layer=discard + }, + @common patch/.style={ + /tikz/behind path/.append code =\let\tikzext@layers@setbox@which\setbox, + /tikz/in front of path/.append code =\let\tikzext@layers@setbox@which\setbox, + /tikz-ext/layers/@common patch/.code=% + }, + patch/.is choice, + patch/all/.style={ + /tikz-ext/layers/@common patch, + /tikz-ext/layers/patch/node, + /tikz-ext/layers/patch/matrix, + /tikz-ext/layers/patch/pic, + /tikz-ext/layers/patch/edge, + }, + patch/node/.style={% + /utils/exec=% + \expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter\tikz@fig@continue + \expandafter\expandafter\expandafter{\expandafter\tikzext@layers@swapfirstsetbox\tikz@fig@continue\tikzext@stop},% + /tikz-ext/layers/@common patch, + /tikz-ext/layers/patch/node/.code=\pgfutil@packagewarning{tikz-ext}{You can't apply the layers patch twice.}, + /tikz/discard node/.style ={/tikz-ext/layers/discard}, + /tikz/node on layer/.style={/tikz-ext/layers/on layer={##1}}, + /tikz/node in box/.style ={/tikz-ext/layers/in box={##1}}, + }, + patch/matrix/.style={% + /utils/exec=% + \expandafter\expandafter\expandafter\def + \expandafter\expandafter\expandafter\tikz@do@matrix + \expandafter\expandafter\expandafter{\expandafter\tikzext@layers@swapfirstsetbox\tikz@do@matrix\tikzext@stop},% + /tikz-ext/layers/@common patch, + /tikz-ext/layers/patch/matrix/.code=\pgfutil@packagewarning{tikz-ext}{You can't apply the layers patch twice.}, + /tikz/execute at begin matrix={% in case patched node/edge/pic is used inside matrix + \let\tikzext@layers@setbox@which\setbox + \def\tikz@whichbox{\tikz@figbox}% + \pgfkeys{/tikz-ext/layers/in box/.code=\pgfutil@packageerror{tikz-ext}{Layers inside a matrix can't be used.}}% + }, + /tikz/discard matrix/.style ={/tikz-ext/layers/discard}, + /tikz/matrix on layer/.style={/tikz-ext/layers/on layer={##1}}, + /tikz/matrix in box/.style ={/tikz-ext/layers/in box={##1}}, + }, + patch/edge/.style={% + /utils/exec=\let\tikz@do@edge\tikzext@layers@tikz@do@edge, + /tikz-ext/layers/@common patch, + /tikz-ext/layers/patch/edge/.code=\pgfutil@packagewarning{tikz-ext}{You can't apply the layers patch twice.}, + /tikz/discard edge/.style={/tikz-ext/layers/discard}, + /tikz/edge on layer/.style={ + /tikz-ext/layers/on layer={##1} + }, + /tikz/edge in box/.style={/tikz-ext/layers/in box={##1}}, + }, + patch/pic/.style={% + /utils/exec=\let\tikz@subpicture@handle@\tikzext@layers@tikz@subpicture@handle@, + /tikz-ext/layers/@common patch, + /tikz-ext/layers/patch/pic/.code=\pgfutil@packagewarning{tikz-ext}{You can't apply the layers patch twice.}, + /tikz/discard pic/.style={/tikz-ext/layers/discard}, + /tikz/pic on layer/.style={/tikz-ext/layers/on layer={##1}}, + /tikz/pic in box/.style={/tikz-ext/layers/in box={##1}}, + } +} +\def\tikzext@layers@tikz@do@edge{% + \ifx\tikz@edge@macro\pgfutil@empty% + \tikzext@layers@setbox@which\tikz@whichbox=\hbox\bgroup% + \unhbox\tikz@whichbox% + \hbox\bgroup + \bgroup% + \pgfinterruptpath% + \pgfscope% + \let\tikz@transform=\pgfutil@empty% + \let\tikz@options=\pgfutil@empty% + \tikz@clear@rdf@options% + \let\tikz@tonodes=\tikz@collected@onpath% + \def\tikztonodes{{\pgfextra{\tikz@node@is@a@labeltrue}\tikz@tonodes}}% + \let\tikz@collected@onpath=\pgfutil@empty% + \tikz@options% + \tikz@do@rdf@pre@options% + \pgfidscope% + \tikz@do@rdf@post@options% + \tikz@transform% + \let\tikz@transform=\relax% + % Typeset node: + \let\tikz@after@path\pgfutil@empty% + \tikz@atbegin@to% + \tikz@enable@edge@quotes% + % in case patched nodes/edges/pics/matrices are used + \let\tikzext@layers@setbox@which\setbox + \def\tikz@whichbox{\tikz@figbox}% + \path[style=every edge]\expandafter[\tikz@@to@local@options](\tikztostart)\tikz@to@path + \pgfextra{\global\let\tikz@after@path@smuggle=\tikz@after@path};% + \tikz@atend@to% + \endpgfidscope% + \endpgfscope% + \endpgfinterruptpath% + \egroup + \egroup% + \egroup% + \ifx\tikzext@layers@setbox@which\setbox + \global\setbox\tikz@tempbox=\box\tikz@whichbox% + \expandafter\endgroup% + \expandafter\setbox\tikz@whichbox=\box\tikz@tempbox% + \else + \endgroup + \fi + \else% + \expandafter\expandafter\expandafter\tikz@edge@macro% + \expandafter\expandafter\expandafter{\expandafter\tikz@@to@local@options\expandafter}\expandafter{\tikz@collected@onpath}% + \endgroup% + \let\tikz@after@path@smuggle=\pgfutil@empty% + \fi% + \expandafter\tikz@scan@next@command\tikz@after@path@smuggle% +}% +\def\tikzext@layers@tikz@subpicture@handle@#1{ + \pgfkeys{/tikz/pics/.cd,#1}% + \tikz@node@transformations% + \let\tikz@transform=\relax% + \let\tikz@picmode\tikz@mode% + \tikzset{name prefix ../.style/.expanded={/tikz/name prefix=\pgfkeysvalueof{/tikz/name prefix}}}% + \ifx\tikz@fig@name\pgfutil@empty\else% + \tikzset{name prefix/.expanded=\tikz@fig@name}% + \fi% + \pgfkeysvalueof{/tikz/pics/setup code}% + \pgfkeysgetvalue{/tikz/pics/code}{\tikz@pic@code} + \ifx\tikz@pic@code\pgfutil@empty\else% Qrr: next line + \tikzext@layers@setbox@which\tikz@whichbox=\hbox\bgroup% + \unhbox\tikz@whichbox% + \hbox\bgroup + \bgroup% + \pgfinterruptpath% + \pgfscope% + \tikz@options% + % Qrr: in case patched node/matrix/edge/pic is used inside the pic + \let\tikzext@layers@setbox@which\setbox + \def\tikz@whichbox{\tikz@figbox}% + \setbox\tikz@figbox=\box\pgfutil@voidb@x% + \setbox\tikz@figbox@bg=\box\pgfutil@voidb@x% + \tikz@atbegin@scope% + \scope[every pic/.try]% + \tikz@pic@code% + \endscope% + \tikz@atend@scope% + \endpgfscope% + \endpgfinterruptpath% + \egroup + \egroup% + \egroup% + \fi% + \pgfkeysgetvalue{/tikz/pics/foreground code}{\tikz@pic@code} + \ifx\tikz@pic@code\pgfutil@empty\else% + \unless\ifx\tikzext@layers@setbox@which\setbox + \pgfutil@packagewarning{tikz-ext}{Only the main pic code can be placed on selective layers.} + \fi + \setbox\tikz@figbox=\hbox\bgroup% + \unhbox\tikz@figbox% + \hbox\bgroup + \bgroup% + \pgfinterruptpath% + \pgfscope% + \tikz@options% + \setbox\tikz@figbox=\box\pgfutil@voidb@x% + \setbox\tikz@figbox@bg=\box\pgfutil@voidb@x% + \tikz@atbegin@scope% + \scope[every front pic/.try]% + \tikz@pic@code% + \endscope% + \tikz@atend@scope% + \endpgfscope% + \endpgfinterruptpath% + \egroup + \egroup% + \egroup% + \fi% + \pgfkeysgetvalue{/tikz/pics/background code}{\tikz@pic@code} + \ifx\tikz@pic@code\pgfutil@empty\else% + \unless\ifx\tikzext@layers@setbox@which\setbox + \pgfutil@packagewarning{tikz-ext}{Only the main pic code can be placed on selective layers.} + \fi + \setbox\tikz@figbox@bg=\hbox\bgroup% + \unhbox\tikz@figbox@bg% + \hbox\bgroup + \bgroup% + \pgfinterruptpath% + \pgfscope% + \tikz@options% + \setbox\tikz@figbox=\box\pgfutil@voidb@x% + \setbox\tikz@figbox@bg=\box\pgfutil@voidb@x% + \tikz@atbegin@scope% + \scope[every behind pic/.try]% + \tikz@pic@code% + \endscope% + \tikz@atend@scope% + \endpgfscope% + \endpgfinterruptpath% + \egroup + \egroup% + \egroup% + \fi% + \tikz@node@finish% +}% +\endinput
\ No newline at end of file |