summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.fillbetween.code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.fillbetween.code.tex')
-rw-r--r--Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.fillbetween.code.tex167
1 files changed, 167 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.fillbetween.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.fillbetween.code.tex
new file mode 100644
index 00000000000..36c5b4ddf61
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.fillbetween.code.tex
@@ -0,0 +1,167 @@
+%--------------------------------------------
+%
+% Package pgfplots
+%
+% Provides a user-friendly interface to create function plots (normal
+% plots, semi-logplots and double-logplots).
+%
+% It is based on Till Tantau's PGF package.
+%
+% Copyright 2013 by Christian Feuersaenger
+%
+% This program is free software: you can redistribute it and/or modify
+% it under the terms of the GNU General Public License as published by
+% the Free Software Foundation, either version 3 of the License, or
+% (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+%--------------------------------------------
+
+
+% This library adds support for high-level instructions for "fill area
+% between two arbitrary plots of functions".
+%
+% It activates the syntax
+%
+% \addplot fill between[of=A and B];
+%
+% where A and B are two plots named by 'name path='.
+%
+% In fact, this here is not much more than a low-level invocation of
+% \pgfpathfillbetween
+% and a couple of styles. It could become a TikZ library because it
+% actually works on any two named paths, but it has its restrictions
+% regarding the supported input paths: both need to be plots of
+% functions (non-intersecting, should have at most one function value
+% for each canvas X coord)
+
+\pgfutil@IfUndefined{pgfplotsset}{%
+ \pgferror{Please load pgfplots before pgfplots.fillbetween.}%
+ \endinput
+}{}%
+
+\usetikzlibrary{fillbetween}
+\usepgfplotslibrary{decorations.softclip}
+
+\pgfkeys{
+ /pgfplots/every fill between plot/.style={/pgfplots/area legend,/tikz/fill},
+ /tikz/soft clip assign/domain/.code args={#1:#2}{%
+ \edef\pgfplots@loc@TMPa{(axis cs:#1,\pgfkeysvalueof{/pgfplots/ymin}) rectangle (axis cs:#2,\pgfkeysvalueof{/pgfplots/ymax})}%
+ \pgfkeysalso{/tikz/soft clip assign/path/.expand once=\pgfplots@loc@TMPa}%
+ },%
+ /tikz/soft clip assign/y domain y/.style={/tikz/soft clip assign/domain y={#1}},
+ /tikz/soft clip assign/domain y/.code args={#1:#2}{%
+ \edef\pgfplots@loc@TMPa{(axis cs:\pgfkeysvalueof{/pgfplots/xmin},#1) rectangle (axis cs:\pgfkeysvalueof{/pgfplots/xmax},#2)}%
+ \pgfkeysalso{/tikz/soft clip assign/path/.expand once=\pgfplots@loc@TMPa}%
+ },%
+ %
+ /pgfplots/execute at begin axis@@/.add={}{%
+ \gdef\pgfplotsfillbetween@list@of@layers@with@clippath{}%
+ \gdef\b@pgfplotsfillbetween@list@has@set@layers{0}%
+ },
+}
+
+\def\pgfplotsfillbetween@ensure@clipping@on@layer{%
+ \ifpgfplots@clip
+ \pgfkeysgetvalue{/tikz/fill between/on layer}\pgfplots@loc@TMPa
+ \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}%
+ %
+ % check if 'pre main,' is inside of the already prepared layers:
+ \def\pgfplots@loc@TMPb{\expandafter\pgfutil@in@\expandafter{\pgfplots@loc@TMPa,}}%
+ \expandafter\pgfplots@loc@TMPb\expandafter{\pgfplotsfillbetween@list@of@layers@with@clippath}%
+ %
+ \ifpgfutil@in@
+ % ah - already prepared. Good, nothing left to do.
+ \else
+ \pgfplots@log3{fill between: found 'clip=true'. installing clip path for layer '\pgfplots@loc@TMPa'...}%
+ \xdef\pgfplotsfillbetween@list@of@layers@with@clippath{\pgfplots@loc@TMPa,\pgfplotsfillbetween@list@of@layers@with@clippath}%
+ %
+ \edef\pgfplots@loc@TMPb{%
+ \noexpand\pgfplotsextra{%
+ \noexpand\pgfplotsonlayer{\pgfplots@loc@TMPa}%
+ \noexpand\pgfplotspathaxisoutline
+ \noexpand\pgfusepath{clip}%
+ \noexpand\endpgfplotsonlayer
+ }%
+ }%
+ \pgfplots@loc@TMPb
+ %
+ \fi
+ \fi
+}%
+
+% The options are from
+% \addplot[#1] fill between[#2] #3;
+%
+% This method is invoked from the global \addplot dispatching.
+\def\pgfplotslibraryfillbetween@addplot#1#2#3{%
+ %
+ \pgfplots@start@plot@with@behavioroptions{/pgfplots/every fill between plot,#1}%
+ %
+ \pgfkeysvalueof{/pgfplots/execute at end survey}%
+ \pgfplots@remember@survey@option@list
+ %
+ %
+ \pgfplotslibraryfillbetweenpreparecurrentlayer
+ %
+ \pgfplots@addplot@enqueue@coords{%
+ % precmd
+ }{%
+ % empty - this here is a TikZ instruction, not a "real" \addplot command
+ }{%
+ % the path instruction:
+ \tikzfillbetween[#2]{%
+ /pgfplots/.search also=/tikz,%
+ /pgfplots/.cd,%
+ #1%
+ }%
+ }{%
+ % post command.
+ }%
+}
+
+% SIDE-EFFECT: modifies \b@pgfplotsfillbetween@list@has@set@layers and
+% \pgfplotsfillbetween@list@of@layers@with@clippath
+\def\pgfplotslibraryfillbetweenpreparecurrentlayer{%
+ \pgfkeysgetvalue{/tikz/fill between/on layer}\pgfplots@loc@TMPa
+ \ifx\pgfplots@loc@TMPa\pgfutil@empty
+ \else
+ \if0\b@pgfplotsfillbetween@list@has@set@layers
+ \pgfplots@log3{fill between: activating layered graphics}%
+ \pgfplotssetlateoptions{set layers}%
+ \gdef\b@pgfplotsfillbetween@list@has@set@layers{1}%
+ \fi
+ \pgfplotsfillbetween@ensure@clipping@on@layer
+ \fi
+}
+
+\def\pgfplots@tikzfillbetween{\pgfutil@ifnextchar[{\pgfplots@tikzfillbetween@opt}{\pgfplots@tikzfillbetween@opt[]}}
+\def\pgfplots@tikzfillbetween@opt[#1]#2{%
+ \pgfplots@addplot@enqueue@coords{%
+ % precmd
+ }{%
+ % empty - this here is a TikZ instruction, not a "real" \addplot command
+ }{%
+ % the path instruction:
+ \tikzfillbetween[#1]{#2}%
+ }{%
+ % post command.
+ }%
+}%
+
+\expandafter\def\expandafter\pgfplots@replace@path@commands\expandafter{\pgfplots@replace@path@commands
+ \let\pgfplots@orig@tikzfillbetween=\tikzfillbetween
+ \let\tikzfillbetween=\pgfplots@tikzfillbetween
+}%
+\expandafter\def\expandafter\pgfplots@restore@path@commands\expandafter{\pgfplots@restore@path@commands
+ \let\tikzfillbetween=\pgfplots@orig@tikzfillbetween
+}
+
+\endinput