%-------------------------------------------- % % 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 2007-2013 by Christian Feuersänger. % % 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 . % %-------------------------------------------- \pgfkeys{ /pgfplots/color sequence/reset/.style={ /pgfplots/color sequence/colorspace, /pgfplots/color sequence/default input colorspace, /pgfplots/color sequence/every input component/.code=, /pgfplots/color sequence/context message, }, /pgfplots/color sequence/colorspace/.initial=auto, /pgfplots/color sequence/colorspace/.default=auto, /pgfplots/color sequence/default input colorspace/.initial=, /pgfplots/color sequence/default input colorspace/.default=\pgfkeysvalueof{/pgfplots/color sequence/colorspace}, % applied to every INPUT component, i.e. before transforming it to some target color space. /pgfplots/color sequence/every input component/.code=, /pgfplots/color sequence/context message/.code={\def\pgfplotscolornormalizesequence@context@message{#1}}, /pgfplots/color sequence/context message/.default=\pgfplotscolornormalizesequence@context@message@default, /pgfplots/color sequence/reset, } \newif\ifpgfplotscolor@colorspaceknown % the beginning of a normalized color sequence. % % It is to be used like % \pgfplotscolornormalizesequence[colorspace=rgb] % % \pgfplotscolornormalizesequencenext{1,1,1} % -> \pgfplotsretval = {1,1,1} % uses default colorspace % \pgfplotscolornormalizesequencenext{color=red} % -> \pgfplotsretval = {1,0,0} % \pgfplotscolornormalizesequencenext{color=blue} % -> \pgfplotsretval = {0,0,1} % \pgfplotscolornormalizesequencenext{rgb=1,0,0} % -> \pgfplotsretval = {1,0,0} % \pgfplotscolornormalizesequencenext{cmyk=1,0,0,1} % -> \pgfplotsretval = {} % % \endpgfplotscolornormalizesequence % % Every color provided in the sequence will be normalized by % transforming it to the common color space and by computing the % separate components representing the color in that space. % % These components are available for use in interpolation routines. % % #1 : keys in the /pgfplots/color sequence path \def\pgfplotscolornormalizesequence[#1]{% \pgfqkeys{/pgfplots/color sequence}{% #1,% }% \pgfkeysgetvalue{/pgfplots/color sequence/colorspace}\pgfplots@loc@TMPa \pgfkeysgetvalue{/pgfplots/color sequence/default input colorspace}\pgfplotscolornormalizesequence@colspace@input \edef\pgfplotscolornormalizesequence@colspace@input{\pgfplotscolornormalizesequence@colspace@input}% \pgfkeysgetvalue{/pgfplots/color sequence/every input component/.@cmd}\pgfplotscolornormalizesequencenext@every@component \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}% \def\pgfplots@loc@TMPb{auto}% \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa % colorspace=auto: same as empty. \let\pgfplots@loc@TMPa=\pgfutil@empty \fi \ifx\pgfplots@loc@TMPa\pgfutil@empty % colorspace=auto: \def\pgfplotscolornormalizesequence@colspace{}% \else \def\pgfplots@loc@TMPb{rgb}% \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa % colorspace=rgb: \def\pgfplotscolornormalizesequence@colspace{rgb}% \else \def\pgfplots@loc@TMPb{cmyk}% \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa % colorspace=cmyk: \def\pgfplotscolornormalizesequence@colspace{cmyk}% \else \def\pgfplots@loc@TMPb{gray}% \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa % colorspace=gray: \def\pgfplotscolornormalizesequence@colspace{gray}% \else \pgfplots@error{Sorry, the choice colorspace=\pgfplots@loc@TMPa\space is unsupported as interpolation colorspace in pgfplots, please use one of 'auto,rgb,cmyk,gray'}% \fi \fi \fi \fi }% % ends a normalized color sequence and returns the final colorspace % and its number of components into \pgfplotsretval and % \pgfplotsretvalb, respectively \def\endpgfplotscolornormalizesequence{% \let\pgfplotsretval=\pgfplotscolornormalizesequence@colspace \pgfplotscolor@get@num@components{\pgfplotsretval}{\pgfplotsretvalb}% \pgfqkeys{/pgfplots/color sequence}{reset}% }% % accepts the next color in a sequence of colors. The color will be % normalized and the normalized result written to \pgfplotsretval. % % SEE \pgfplotscolornormalizesequencenext -- it is MUCH more powerful! % % #1 the color space of the color. % #2 the components of the color, separated by comma. % % POSTCONDITION: % \pgfplotsretval contains '{}{}' % -> including the curly braces. % % \pgfplotsretvalb contains the number of input components in % \pgfplotsretval \def\pgfplotscolornormalizesequencenextbycomponents#1#2{% \edef\pgfplotscolornormalizesequence@cur@colspace{#1}% \pgfplotscolornormalizesequencenextbycomponents@normalize@components{#2}% % \ifx\pgfplotscolornormalizesequence@cur@colspace\pgfplotscolornormalizesequence@colspace \else \ifx\pgfplotscolornormalizesequence@colspace\pgfutil@empty \pgfplotscolornormalizesequencenextbycomponents@assign@auto@colspace \fi % \ifx\pgfplotscolornormalizesequence@colspace\pgfplotscolornormalizesequence@cur@colspace % Ah, ok - the colorspace is NOW the correct one (because % we chose it as the colorspace for this complete color % sequence. \else % Oh. We need to convert the color space! \edef\pgfplots@loc@TMPa{{\pgfplotscolornormalizesequence@cur@colspace}{\pgfplotsretval}}% \expandafter\pgfutil@convertcolorspec\pgfplots@loc@TMPa {\pgfplotscolornormalizesequence@colspace}% target color spaces {\pgfplotsretval}% target macro \fi \fi \edef\pgfplotsretval{\pgfplotsretval}% \pgfplotscolor@get@num@components{\pgfplotscolornormalizesequence@colspace}{\pgfplotsretvalb}% } \def\pgfplotscolornormalizesequencenextbycomponents@assign@auto@colspace{% % Ah; we have '/pgfplots/color sequence/colorspace=auto'. % Well, check if the current colorspace (stored in % \pgfplotscolornormalizesequence@cur@colspace) is suitable. % % It is suitable if it is rgb or cmyk. In all other cases, % we choose either rgb or cmyk. More precisely. 'cmy' is % mapped to cmyk. All other cases are treated as rgb. % \def\pgfplots@loc@TMPa{cmyk}% \ifx\pgfplotscolornormalizesequence@cur@colspace\pgfplots@loc@TMPa \let\pgfplotscolornormalizesequence@colspace=\pgfplotscolornormalizesequence@cur@colspace \else \def\pgfplots@loc@TMPa{cmy}% \ifx\pgfplotscolornormalizesequence@cur@colspace\pgfplots@loc@TMPa \def\pgfplotscolornormalizesequence@colspace{cmyk}% \else % rgb appears to be the best choice: (1) it is backwards % compatible and (2) gray or something like that might fit % badly to any other colors in the sequence. \def\pgfplotscolornormalizesequence@colspace{rgb}% \fi \fi } % #1: color components % % PRECONDITION: \pgfplotscolornormalizesequence@cur@colspace is the % current color space % % POSTCONDITION: \pgfplotsretval contains the normalized color % components \def\pgfplotscolornormalizesequencenextbycomponents@normalize@components#1{% \pgfutil@ifundefined{pgfplots@colspace@name@\pgfplotscolornormalizesequence@cur@colspace}{% \pgfplotscolor@colorspaceknownfalse }{% \pgfplotscolor@colorspaceknowntrue }% \edef\pgfplots@loc@TMPb{#1}% \def\pgfplotsretval{}% \c@pgf@counta=0 % \expandafter\pgfplotscolornormalizesequencenext@prepare@loop\pgfplots@loc@TMPb,\pgfplots@EOI,% }% % assigns the number of color components for the given colorspace to % \pgfplotsretval \def\pgfplotscolorspacegetcomponents#1{% \pgfplotscolor@get@num@components{#1}{\pgfplotsretval}% }% % Defines \pgfplotsretval to contain the number of components in the % color space. \def\pgfplotscolornormalizesequencegetnumcomponents{% \ifx\pgfplotscolornormalizesequence@colspace\pgfutil@empty \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Cannot create color with zero components: no colorspace set for the normalized color sequence.}\pgfeov% \fi \pgfplotscolorspacegetcomponents{\pgfplotscolornormalizesequence@colspace}% }% \def\pgfplotscolor@get@num@components#1#2{% \pgfutil@ifundefined{pgfplots@colspace@numcomp@#1}{% \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{The input color has an unsupported color space '#1'}\pgfeov% }{% \edef#2{\csname pgfplots@colspace@numcomp@#1\endcsname}% }% }% \def\pgfplots@colspace@numcomp@gray{1}% \def\pgfplots@colspace@name@gray{gray}% \def\pgfplots@colspace@numcomp@rgb{3}% \def\pgfplots@colspace@name@rgb{rgb}% \def\pgfplots@colspace@numcomp@cmyk{4}% \def\pgfplots@colspace@name@cmyk{cmyk}% \def\pgfplots@colspace@numcomp@cmy{3}% \def\pgfplots@colspace@name@cmy{cmy}% \def\pgfplots@colspace@numcomp@wave{1}% \def\pgfplots@colspace@name@wave{wave}% \pgfutil@namedef{pgfplots@colspace@minaccept@wave@0}{362.998}% \pgfutil@namedef{pgfplots@colspace@min@wave@0}{363}% \pgfutil@namedef{pgfplots@colspace@maxaccept@wave@0}{814.001}% \pgfutil@namedef{pgfplots@colspace@max@wave@0}{814}% \def\pgfplots@colspace@numcomp@Hsb{3}% \def\pgfplots@colspace@name@Hsb{Hsb}% \pgfutil@namedef{pgfplots@colspace@minaccept@Hsb@0}{-0.001}% \pgfutil@namedef{pgfplots@colspace@min@Hsb@0}{0}% \pgfutil@namedef{pgfplots@colspace@maxaccept@Hsb@0}{\rangeHsb}% \pgfutil@namedef{pgfplots@colspace@max@Hsb@0}{\rangeHsb}% \def\pgfplotscolornormalizesequencenext@prepare@loop#1,{% \def\pgfmathresult{#1}% \ifx\pgfmathresult\pgfplots@EOI \else \begingroup \pgfkeyslet{/pgf/fpu/handlers/invalid number/.@cmd}\pgfplotscolornormalizesequencenextbycomponents@parsenumber@error \expandafter\pgfplotscolornormalizesequencenext@every@component\expandafter{\pgfmathresult}\pgfeov% \ifpgfplotscolor@colorspaceknown \expandafter\pgfplotscolornormalizesequencenextbycomponents@parsenumber\expandafter{\pgfmathresult}% \fi \pgfmath@smuggleone\pgfmathresult \endgroup \ifpgfplotscolor@colorspaceknown \expandafter\pgfplotscolornormalizesequencenextbycomponents@sanitize\expandafter{\pgfmathresult}% \fi \ifx\pgfplotsretval\pgfutil@empty \edef\pgfplotsretval{\pgfmathresult}% \else \edef\pgfplotsretval{\pgfplotsretval,\pgfmathresult}% \fi \advance\c@pgf@counta by1 % \expandafter\pgfplotscolornormalizesequencenext@prepare@loop \fi } \def\pgfplotscolornormalizesequencenextbycomponents@parsenumber#1{% \pgfmathfloatparsenumber{#1}% \pgfmathfloattofixed\pgfmathresult } \def\pgfplotscolornormalizesequencenextbycomponents@parsenumber@error#1#2\pgfeov{% \pgfplotsthrow{invalid color component}{\pgfmathresult}{Sorry, the color component value '#1' is no number. Did you mean 'color=#1'? The error occured near `\pgfplotscolornormalizesequence@context@message'}\pgfeov% \pgfmathfloatcreate{0}{0.0}{0}% }% % #1 the color component value \def\pgfplotscolornormalizesequencenextbycomponents@sanitize#1{% \pgf@xa=#1pt % % % check if we have something like % \csname pgfplots@colspace@minaccept@@2\endcsname where 2 is component index: \edef\pgfplots@loc@TMPc{@\pgfplotscolornormalizesequence@cur@colspace @\the\c@pgf@counta}% \pgfutil@ifundefined{pgfplots@colspace@minaccept\pgfplots@loc@TMPc}{% % NO - implicitly defined to [0,1] \def\pgfplots@colspace@minaccept@@{-0.001}% \def\pgfplots@colspace@min@@{-0.001}% \def\pgfplots@colspace@maxaccept@@{1.001}% \def\pgfplots@colspace@max@@{1}% }{% % YES - expect all four values: \edef\pgfplots@colspace@minaccept@@{\csname pgfplots@colspace@minaccept\pgfplots@loc@TMPc\endcsname}% \edef\pgfplots@colspace@min@@{\csname pgfplots@colspace@min\pgfplots@loc@TMPc\endcsname}% \edef\pgfplots@colspace@maxaccept@@{\csname pgfplots@colspace@maxaccept\pgfplots@loc@TMPc\endcsname}% \edef\pgfplots@colspace@max@@{\csname pgfplots@colspace@max\pgfplots@loc@TMPc\endcsname}% }% \ifdim\pgf@xa<\pgfplots@colspace@minaccept@@ pt % \edef\pgfmathresult{\pgfplots@colspace@min@@}% \pgfplotscolor@rangeexception{#1}% \else \ifdim\pgf@xa>\pgfplots@colspace@maxaccept@@ pt % \edef\pgfmathresult{\pgfplots@colspace@max@@}% \pgfplotscolor@rangeexception{#1}% \else % Ah - the common case! \edef\pgfmathresult{\pgf@sys@tonumber\pgf@xa}% normalize number (strip trailing zeros etc). \fi \fi } \def\pgfplotscolor@rangeexception#1{% \pgfplotsthrow{invalid color component}{\pgfmathresult}{Sorry, the color component value #1 (no. \the\c@pgf@counta) is out of range. The allowed range is 0 <= value <= 1. The error occured near `\pgfplotscolornormalizesequence@context@message'}\pgfeov% } % Same as \pgfplotscolornormalizesequencenextbycomponents but with % more freedom in the input. % % #1 some color. % Accepted formats: % 'color=' % is any valid expression of the xcolor package. % % 'rgb=R,G,B' % R,G,B are numbers in [0,1] % % 'rgb255=R,G,B' % R,G,B are numbers in [0,255] % % 'cmyk=C,M,Y,K' % C, M, Y, and K are numbers in [0,1] % % 'cmyk255=C,M,Y,K' % C, M, Y, and K are numbers in [0,255] % % 'gray=G' % G is a gray scale number in [0,1] % % 'C1,C2,C3' % any number of Ci can folow, each is interpreted in the default % colorspace (i.e. the one set before at the beginning of the % sequence) % % % Example: % \pgfplotscolornormalizesequencenext{color=blue} % \pgfplotscolornormalizesequencenext{rgb=1,0,0} % \pgfplotscolornormalizesequencenext{cmyk=1,0,0,1} % \pgfplotscolornormalizesequencenext{1,0,0} (interpreted in the % colorspace set at \pgfplotscolornormalizesequence) % % POSTCONDITION: see \pgfplotscolornormalizesequencenextbycomponents \def\pgfplotscolornormalizesequencenext#1{% \edef\pgfplotscolornormalizesequence@context@message@default{#1}% \expandafter\pgfplotscolornormalizesequencenext@\pgfplotscolornormalizesequence@context@message@default\pgfplots@EOI } \def\pgfplotscolornormalizesequencenext@{% \pgfutil@ifnextchar c{% \pgfplotscolornormalizesequencenext@c }{% \pgfutil@ifnextchar r{% \pgfplotscolornormalizesequencenext@rgb }{% \pgfutil@ifnextchar g{% \pgfplotscolornormalizesequencenext@gray }{% \pgfplotscolornormalizesequencenext@defaultcolspace }% }% }% } \def\pgfplotscolornormalizesequencenext@gray gray=#1\pgfplots@EOI{% % FIXME : we might be better off with real support for a gray % colorspace! \pgfplotscolornormalizesequencenextbycomponents{rgb}{#1,#1,#1}% } \def\pgfplotscolornormalizesequencenext@defaultcolspace#1\pgfplots@EOI{% \edef\pgfplotsretval{#1}% \ifx\pgfplotsretval\pgfutil@empty % hm. Ok, simply return the empty input. % % ... and the number of components. \pgfplotscolor@get@num@components{\pgfplotscolornormalizesequence@colspace}{\pgfplotsretvalb}% % \else \expandafter\pgfutil@in@\expandafter=\expandafter{\pgfplotsretval}% \ifpgfutil@in@ \expandafter\pgfplotscolornormalizesequencenext@unknown@colspace\pgfplotsretval\pgfplots@EOI \else \ifx\pgfplotscolornormalizesequence@colspace@input\pgfutil@empty \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{The input color #1 cannot be interpreted; please assign a default color space first}\pgfeov% \fi \pgfplotscolornormalizesequencenextbycomponents{\pgfplotscolornormalizesequence@colspace@input}{#1}% \fi \fi } \def\pgfplotscolornormalizesequencenext@unknown@colspace#1=#2\pgfplots@EOI{% \pgfplotscolornormalizesequencenextbycomponents{#1}{#2}% } \def\pgfplotscolornormalizesequencenext@rgb rgb{% \pgfutil@ifnextchar2{% \pgfplotscolornormalizesequencenext@rgb@two@five@five }{% \pgfplotscolornormalizesequencenext@rgb@plain }% } \def\pgfplotscolornormalizesequencenext@rgb@plain=#1\pgfplots@EOI{% \pgfplotscolornormalizesequencenextbycomponents{rgb}{#1}% } \def\pgfplotscolorsequence@two@five@five@rescale#1{% \pgfmath@basic@multiply@{0.003921568}{#1}% }% \def\pgfplotscolornormalizesequencenext@rgb@two@five@five255=#1,#2,#3\pgfplots@EOI{% \pgfplotscolorsequence@two@five@five@rescale{#1}% \let\pgfplots@loc@TMPa=\pgfmathresult \pgfplotscolorsequence@two@five@five@rescale{#2}% \let\pgfplots@loc@TMPb=\pgfmathresult \pgfplotscolorsequence@two@five@five@rescale{#3}% \edef\pgfplots@loc@TMPc{{rgb}{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfmathresult}}% \expandafter\pgfplotscolornormalizesequencenextbycomponents\pgfplots@loc@TMPc% } \def\pgfplotscolornormalizesequencenext@c c{% \pgfutil@ifnextchar m{% \pgfplotscolornormalizesequencenext@cmyk }{% \pgfplotscolornormalizesequencenext@color }% }% \def\pgfplotscolornormalizesequencenext@cmyk myk{% \pgfutil@ifnextchar2{% \pgfplotscolornormalizesequencenext@cmyk@two@five@five }{% \pgfplotscolornormalizesequencenext@cmyk@plain }% }% \def\pgfplotscolornormalizesequencenext@cmyk@plain=#1\pgfplots@EOI{% \pgfplotscolornormalizesequencenextbycomponents{cmyk}{#1}% }% \def\pgfplotscolornormalizesequencenext@cmyk@two@five@five255=#1,#2,#3,#4\pgfplots@EOI{% \pgfplotscolorsequence@two@five@five@rescale{#1}% \let\pgfplots@loc@TMPa=\pgfmathresult \pgfplotscolorsequence@two@five@five@rescale{#2}% \let\pgfplots@loc@TMPb=\pgfmathresult \pgfplotscolorsequence@two@five@five@rescale{#3}% \let\pgfplots@loc@TMPc=\pgfmathresult \pgfplotscolorsequence@two@five@five@rescale{#4}% \edef\pgfplots@loc@TMPc{{cmyk}{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfplots@loc@TMPc,\pgfmathresult}}% \expandafter\pgfplotscolornormalizesequencenextbycomponents\pgfplots@loc@TMPc% } % The implementation of \pgfutil@extractcolorspec for plain tex and % context is ... strange. I prefer one which does the same as the % xcolor version (which is also what pgf does for latex): \def\pgfplotsutil@extractcolorspec@xcolor@substitute#1#2{% \begingroup % this here relies on PGF's emulation of color in plain tex and % context. Let's hope it works in the future... \def\xcolor@##1##2##3##4{% \edef#2{{##3}{##4}}% }% \csname\string\color@#1\endcsname \global\let\pgfutil@extractcolorspec@@temp=#2% \endgroup \let#2=\pgfutil@extractcolorspec@@temp }% \def\pgfplots@glob@TMPa#1#2{% \def#2{{#1}}% }% \pgfutil@IfUndefined{extractcolorspec}{% % Ah. We do not have a suitable implementation of % \extractcolorspec -- \pgfutil@extractcolorspec does not yield % the colorspec on context and plain tex. \def\pgfplotsutil@extractcolorspec{\pgfplotsutil@extractcolorspec@xcolor@substitute}% }{% \ifx\extractcolorspec\pgfplots@glob@TMPa % Same problem as above: pgfutil-plain.def says % \let\extractcolorspec=\pgfutil@extractcolorspec and that one % is broken. % Use my substitute: \def\pgfplotsutil@extractcolorspec{\pgfplotsutil@extractcolorspec@xcolor@substitute}% \else \def\pgfplotsutil@extractcolorspec{\extractcolorspec}% \fi }% \def\pgfplotscolornormalizesequencenext@color olor=#1\pgfplots@EOI{% \pgfutil@colorlet{pgf@tempcol}{#1}% \pgfplotsutil@extractcolorspec{pgf@tempcol}{\pgf@tempcolor}% \edef\pgfplots@loc@TMPa{\expandafter\pgfutil@firstoftwo\pgf@tempcolor}% \edef\pgfplots@loc@TMPb{\expandafter\pgfutil@secondoftwo\pgf@tempcolor}% % % I expect that \pgf@tempcolor is of the form % {}{} % % unfortunately, the has strange catcodes such that % we cannot easily compare it by means of \ifx. I normalize it % here: \pgfutil@ifundefined{pgfplots@colspace@name@\pgfplots@loc@TMPa}{% % ohoh. we cannot normalize the name. Let's hope that works out. % note that we cannot throw an exception here as we might very well be able % to convert the color to some suitable color space! }{% \edef\pgfplots@loc@TMPa{% \csname pgfplots@colspace@name@\pgfplots@loc@TMPa\endcsname% }% }% \edef\pgf@tempcolor{% {\pgfplots@loc@TMPa}% {\pgfplots@loc@TMPb}% }% \expandafter\pgfplotscolornormalizesequencenextbycomponents\pgf@tempcolor% % }% % Defines \pgfplotsretval to be a "neutral" color, i.e. one in which % all components are zero. % @see \pgfplotscolorzero % @see \pgfplotscoloraddweighted \def\pgfplotscolornormalizesequencezero{% \pgfplotscolornormalizesequencegetnumcomponents \pgfplotscolorzero{\pgfplotsretval}% } % Defines \pgfplotsretval to be a "neutral" color, i.e. one in which % all components are zero. % % #1: the number of color components to be used (like 3 for rgb) % @see \pgfplotscoloraddweighted \def\pgfplotscolorzero#1{% \csname pgfplotscolorzero@num@#1\endcsname }% \expandafter\def\csname pgfplotscolorzero@num@1\endcsname{\def\pgfplotsretval{0}} \expandafter\def\csname pgfplotscolorzero@num@2\endcsname{\def\pgfplotsretval{0,0}} \expandafter\def\csname pgfplotscolorzero@num@3\endcsname{\def\pgfplotsretval{0,0,0}} \expandafter\def\csname pgfplotscolorzero@num@4\endcsname{\def\pgfplotsretval{0,0,0,0}} % Defines \pgfplotsretval to be the interpolated color #1 + #2*#3. % #1 the first color (like 0,0,0) % #2 a scaling factor (like 4) % #3 the second color (like 1,0,0.5) % % POSTCONDITION: \pgfplotsretval contains the result % % @see \pgfplotscolorzero % @see \pgfplotscoloraddweighted \def\pgfplotscolornormalizesequenceaddweighted#1#2#3{% \begingroup \pgfplotscolornormalizesequencegetnumcomponents \global\let\pgfplots@glob@TMPd\pgfplotsretval \endgroup \pgfplotscoloraddweighted{\pgfplots@glob@TMPd}{#1}{#2}{#3}% } % Defines \pgfplotsretval to be the interpolated color #2 + #3*#4. % #1 the number of color components to be used (3 for rgb) % #2 the first color (like 0,0,0) % #3 a scaling factor (like 4) % #4 the second color (like 1,0,0.5) % % POSTCONDITION: \pgfplotsretval contains the result % % @see \pgfplotscolorzero \def\pgfplotscoloraddweighted#1#2#3#4{% \pgfplots@ifempty{#4}{% \pgfplots@error{Illegal input argument encountered while computing colors: one color argument is missing (was empty). Please ensure that you have explicit color values in your input}% }{% \expandafter\let \expandafter\pgfplots@loc@TMPb\csname pgfplotscolornormalizesequencegetnumcomponents@#1\endcsname \edef\pgfplots@loc@TMPa{#2:#4\noexpand\relax{#3}}% \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa% }% }% \def\pgfplotscolornormalizesequenceaddweighted@single#1#2#3{% \pgf@xa=#1pt % \pgf@xb=#3pt % \advance\pgf@xa by#2\pgf@xb \edef\pgfplotsretval{\pgf@sys@tonumber\pgf@xa}% }% \expandafter\def\csname pgfplotscolornormalizesequencegetnumcomponents@1\endcsname#1:#2\relax#3{% \pgfplotscolornormalizesequenceaddweighted@single{#1}{#3}{#2}% }% \expandafter\def\csname pgfplotscolornormalizesequencegetnumcomponents@3\endcsname#1,#2,#3:#4,#5,#6\relax#7{% \pgfplotscolornormalizesequenceaddweighted@single{#1}{#7}{#4}% \let\pgfplots@loc@TMPa=\pgfplotsretval \pgfplotscolornormalizesequenceaddweighted@single{#2}{#7}{#5}% \let\pgfplots@loc@TMPb=\pgfplotsretval \pgfplotscolornormalizesequenceaddweighted@single{#3}{#7}{#6}% \let\pgfplots@loc@TMPc=\pgfplotsretval \edef\pgfplotsretval{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfplots@loc@TMPc}% }% \expandafter\def\csname pgfplotscolornormalizesequencegetnumcomponents@4\endcsname#1,#2,#3,#4:#5,#6,#7,#8\relax#9{% \pgfplotscolornormalizesequenceaddweighted@single{#1}{#9}{#5}% \let\pgfplots@loc@TMPa=\pgfplotsretval \pgfplotscolornormalizesequenceaddweighted@single{#2}{#9}{#6}% \let\pgfplots@loc@TMPb=\pgfplotsretval \pgfplotscolornormalizesequenceaddweighted@single{#3}{#9}{#7}% \let\pgfplots@loc@TMPc=\pgfplotsretval \pgfplotscolornormalizesequenceaddweighted@single{#4}{#9}{#8}% \let\pgfplots@loc@TMPd=\pgfplotsretval \edef\pgfplotsretval{\pgfplots@loc@TMPa,\pgfplots@loc@TMPb,\pgfplots@loc@TMPc,\pgfplots@loc@TMPd}% }% \endinput