diff options
author | Karl Berry <karl@freefriends.org> | 2013-10-03 22:23:41 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-10-03 22:23:41 +0000 |
commit | 17c26f8a0e90231c7f95311cd8270fcd345002e4 (patch) | |
tree | b0378783b5421fc11bc25ca967c349d4938fd923 /Master/texmf-dist/tex/generic/pgfplots | |
parent | 9334469d545fb017cccf5b7f4075005dc17a4949 (diff) |
pgfplots (3oct13)
git-svn-id: svn://tug.org/texlive/trunk@31822 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgfplots')
20 files changed, 2611 insertions, 1713 deletions
diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.external.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.external.code.tex index 94344c62860..f9e27d52321 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.external.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.external.code.tex @@ -31,6 +31,8 @@ % % +% \pgfplots@glob@TMPa = 1 iff we can rely on the external lib shipped +% with tikz: \pgfplotsiffileexists{tikzlibraryexternal.code.tex}{% \pgfplots@ifneedspgfcompabitibilitycode@has@pgf@one@zero@zero{% \def\pgfplots@glob@TMPa{0}% @@ -40,9 +42,11 @@ }{% \def\pgfplots@glob@TMPa{0}% }% -\pgfutil@ifundefined{tikzexternal@getnextfilename@resetglobals}{% - \def\pgfplots@glob@TMPa{0}% -}{}% + +% this is non-sense - we would need to load the external lib first... +%\pgfutil@ifundefined{tikzexternal@getnextfilename@resetglobals}{% +% \def\pgfplots@glob@TMPa{0}% +%}{}% \if1\pgfplots@glob@TMPa \usetikzlibrary{external}% diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.ternary.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.ternary.code.tex index 7000f8c13cf..cefa4fd82a0 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.ternary.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.ternary.code.tex @@ -305,15 +305,19 @@ \def\pgfplots@ternary@init@map@to@unit#1{% \begingroup - \pgfmath@basic@subtract@ - {\csname pgfplots@#1max\endcsname} - {\csname pgfplots@#1min\endcsname}% - \pgfmath@basic@reciprocal@\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@#1max\endcsname}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@#1min\endcsname}% + \let\pgfplots@map@to@unit@scale@diff=\pgfmathresult + \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@loc@TMPa}{\pgfmathresult}}% + \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfmathresult}}% \let\pgfplots@map@to@unit@scale=\pgfmathresult % \expandafter\xdef\csname pgfplots@ternary@map@to@unit@#1\endcsname##1{% - \noexpand\pgfmath@basic@subtract@{##1}{\csname pgfplots@#1min\endcsname}% - \noexpand\pgfmath@basic@multiply@{\noexpand\pgfmathresult}{\pgfplots@map@to@unit@scale}% + \noexpand\pgfplotscoordmath{default}{parsenumber}{##1}% + \noexpand\pgfplotscoordmath{default}{op}{subtract}{{\noexpand\pgfmathresult}{\pgfplots@map@to@unit@scale@diff}}% + \noexpand\pgfplotscoordmath{default}{op}{multiply}{{\noexpand\pgfmathresult}{\pgfplots@map@to@unit@scale}}% + \noexpand\pgfplotscoordmath{default}{tofixed}{\noexpand\pgfmathresult}% }% \endgroup } diff --git a/Master/texmf-dist/tex/generic/pgfplots/lua/pgfplots.lua b/Master/texmf-dist/tex/generic/pgfplots/lua/pgfplots.lua index 8242222e8d6..dcb8ea94007 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/lua/pgfplots.lua +++ b/Master/texmf-dist/tex/generic/pgfplots/lua/pgfplots.lua @@ -1,6 +1,13 @@ pgfplotsGetLuaBinaryStringFromCharIndicesChunkSize = 7000; +if unpack == nil then + -- LUA 0.76 renamed unpack to table.unpack + pgfplotsUnpack = table.unpack; +else + pgfplotsUnpack = unpack; +end + -- Takes a table containing an arbitrary number of integers in the range 0..255 and converts it -- into a binary stream of the corresponding binary chars. -- @@ -21,10 +28,10 @@ function pgfplotsGetLuaBinaryStringFromCharIndices(charIndices) -- ok, append all full chunks of chunkSize first: local numFullChunks = math.floor(len/chunkSize); for i = 0, numFullChunks-1, 1 do - table.insert(buf, string.char(unpack(charIndices, 1+i*chunkSize, (i+1)*chunkSize))); + table.insert(buf, string.char(pgfplotsUnpack(charIndices, 1+i*chunkSize, (i+1)*chunkSize))); end -- append the rest: - table.insert(buf, string.char(unpack(charIndices, 1+numFullChunks*chunkSize))); + table.insert(buf, string.char(pgfplotsUnpack(charIndices, 1+numFullChunks*chunkSize))); return table.concat(buf); end diff --git a/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstable.code.tex b/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstable.code.tex index 19e19fb3fe1..84971e5045f 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstable.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstable.code.tex @@ -149,7 +149,7 @@ % this sanity checking is NOT fool proof: it % fails if there are different occurances of % unique in the same file - \pgfplotstable@error{Sorry, the row predicate /pgfplots/table/unique={#1} has been used in the wrong context: it needs to be invoked for the very first processed column, not column no \pgfplotstablecol. Please provide it as argument to \string\pgfplotstabletypeset[unique={#1}] and not inside of column-specific styles}% + \pgfplotsthrow{invalid argument}{Sorry, the row predicate /pgfplots/table/unique={#1} has been used in the wrong context: it needs to be invoked for the very first processed column, not column no \pgfplotstablecol. Please provide it as argument to \string\pgfplotstabletypeset[unique={#1}] and not inside of column-specific styles}\pgfeov% }{}% \fi % acquire the assembled list here: we'll do a lot of @@ -1880,6 +1880,8 @@ \global\advance\c@pgfplotstable@colindex by1\relax }% % + \pgfplotstable@disable@column@styles + % \pgfplotslistcheckempty\pgfplotstabletypeset@final@colnames \ifpgfplotslistempty \let\pgfplotstable@result=\pgfutil@empty @@ -2121,6 +2123,20 @@ \pgfplots@glob@TMPa% execute 'write to macro' if set. }% +\def\pgfplotstable@disable@column@styles@error#1{% + \pgfplotsthrow{invalid argument}\pgfplots@loc@TMPa{Sorry, the key '#1' has been assigned while processing row options. However, it needs to be invoked while processing column options. If your options depend on specific row indices, consider using \string\pgfplotstablerow\space and \string\pgfplotstablerows}\pgfeov% +}% +\def\pgfplotstable@disable@column@styles@#1{% + \pgfkeysdef{/pgfplots/table/#1/.code}{\pgfplotstable@disable@column@styles@error{#1}}% + \pgfkeysdef{/pgfplots/table/#1/.append code}{\pgfplotstable@disable@column@styles@error{#1}}% + \pgfkeysdefargs{/pgfplots/table/#1/.add code}{##1##2}{\pgfplotstable@disable@column@styles@error{#1}}% + \pgfkeysdef{/pgfplots/table/#1/.append style}{\pgfplotstable@disable@column@styles@error{#1}}% +} +\def\pgfplotstable@disable@column@styles{% + \pgfplotstable@disable@column@styles@{postproc cell content}% + \pgfplotstable@disable@column@styles@{preproc cell content}% + \pgfplotstable@disable@column@styles@{assign cell content}% +}% \newif\ifpgfplotstable@isfirstrow \newif\ifpgfplotstable@islastrow diff --git a/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.tex b/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.tex index da14efc159f..f8cf773826b 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.tex @@ -85,15 +85,60 @@ /pgfplots/table/meta index/.initial=, /pgfplots/table/meta/.initial=, /pgfplots/table/meta expr/.initial=, - /pgfplots/table/x error index/.initial=, - /pgfplots/table/y error index/.initial=, - /pgfplots/table/z error index/.initial=, - /pgfplots/table/x error/.initial=, - /pgfplots/table/y error/.initial=, - /pgfplots/table/z error/.initial=, - /pgfplots/table/x error expr/.initial=, - /pgfplots/table/y error expr/.initial=, - /pgfplots/table/z error expr/.initial=, + /pgfplots/table/x error index/.style={ + x error plus index={#1},% + x error minus index={#1}% + }, + /pgfplots/table/y error index/.style={ + y error plus index={#1},% + y error minus index={#1}% + }, + /pgfplots/table/z error index/.style={ + z error plus index={#1},% + z error minus index={#1}% + }, + /pgfplots/table/x error/.style={ + x error plus={#1},% + x error minus={#1}% + }, + /pgfplots/table/y error/.style={ + y error plus={#1},% + y error minus={#1}% + }, + /pgfplots/table/z error/.style={ + z error plus={#1},% + z error minus={#1}% + }, + /pgfplots/table/x error expr/.style={ + x error plus expr={#1},% + x error minus expr={#1}% + }, + /pgfplots/table/y error expr/.style={ + y error plus expr={#1},% + y error minus expr={#1}% + }, + /pgfplots/table/z error expr/.style={ + z error plus expr={#1},% + z error minus expr={#1}% + }, + /pgfplots/table/x error plus index/.initial=, + /pgfplots/table/y error plus index/.initial=, + /pgfplots/table/z error plus index/.initial=, + /pgfplots/table/x error plus/.initial=, + /pgfplots/table/y error plus/.initial=, + /pgfplots/table/z error plus/.initial=, + /pgfplots/table/x error plus expr/.initial=, + /pgfplots/table/y error plus expr/.initial=, + /pgfplots/table/z error plus expr/.initial=, + /pgfplots/table/x error minus index/.initial=, + /pgfplots/table/y error minus index/.initial=, + /pgfplots/table/z error minus index/.initial=, + /pgfplots/table/x error minus/.initial=, + /pgfplots/table/y error minus/.initial=, + /pgfplots/table/z error minus/.initial=, + /pgfplots/table/x error minus expr/.initial=, + /pgfplots/table/y error minus expr/.initial=, + /pgfplots/table/z error minus expr/.initial=, /pgfplots/table/ignore chars/.initial=, /pgfplots/table/white space chars/.initial=, /pgfplots/table/comment chars/.initial=, @@ -153,6 +198,13 @@ \fi \let#1=\pgfutil@empty },% + /pgfplots/exception/table columns unbalanced/.code={% + \ifx\pgfplotsexceptionmsg\relax + \pgfplots@error{#1}% + \else + \pgfplots@error{\pgfplotsexceptionmsg}% + \fi + }, } % \pgfplotstableread[OPTIONS] {FILE} to \name @@ -1135,7 +1187,7 @@ \fi \ifnum\pgfplotstableread@curcol=\pgfplotstableread@numcols\relax \else - \pgfplotstable@error{input table '\pgfplotstableread@filename' has an unbalanced number of columns in row '\thepgfplotstableread@lineno' (expected '\thepgfplotstableread@numcols' cols; got '\thepgfplotstableread@curcol'). Maybe the input table is corrupted? If you need unbalanced data, consider using 'nan' in empty cells (perhaps combined with 'unbounded coords=jump')}% + \pgfplotsthrow{table columns unbalanced}{input table '\pgfplotstableread@filename' has an unbalanced number of columns in row '\thepgfplotstableread@lineno' (expected '\thepgfplotstableread@numcols' cols; got '\thepgfplotstableread@curcol'). Maybe the input table is corrupted? If you need unbalanced data, consider using 'nan' in empty cells (perhaps combined with 'unbounded coords=jump')}\pgfeov% \fi \ifpgfplots@tableread@to@listener \ifpgfplotstableread@curline@contains@colnames @@ -1494,9 +1546,9 @@ \pgfplotstable@getcol{#1}\of{\pgfplotstableread@filename}\to{#2}\getcolmethod{getptr}% }% -% As \pgfplotstablereadgetptrtocolname, but this here access columns +% As \pgfplotstablereadgetptrtocolname, but this here accesses columns % by index. -\def\pgfplotstablereadgetptrtocolindex@#1#2{\def#2{#1}}% +\def\pgfplotstablereadgetptrtocolindex@#1#2{\edef#2{#1}}% % \pgfplotstablereadevalptr{<\ptr>}{<\content} % writes the current value of <\ptr> to <\content>. The pointer <\ptr> @@ -1525,7 +1577,7 @@ \else \begingroup \t@pgfplots@tokc={#1}% - \pgfplotstable@error{Table '\pgfplotstableread@filename' appears to have too many columns in line \thepgfplotstableread@lineno: Ignoring '\the\t@pgfplots@tokc'. PGFPlots found that the number of columns is larger than the previously determined number of columns. Please verify that every cell entry is separated correctly (use braces {<cell entry>} if necessary. Also verify that column names are plain ASCII.). This error is not critical}% + \pgfplotsthrow{table columns unbalanced}{Table '\pgfplotstableread@filename' appears to have too many columns in line \thepgfplotstableread@lineno: Ignoring '\the\t@pgfplots@tokc'. PGFPlots found that the number of columns is larger than the previously determined number of columns. Please verify that every cell entry is separated correctly (use braces {<cell entry>} if necessary. Also verify that column names are plain ASCII.). This error is not critical}\pgfeov% \endgroup \fi } @@ -1533,6 +1585,14 @@ \long\def\pgfplotstableread@impl@collectcolnames@NEXT#1{% + \edef\pgfplotstable@loc@TMPa{#1}% + \ifx\pgfplotstable@loc@TMPa\pgfutil@empty + \edef\pgfplotstable@loc@TMPa{\thepgfplotstableread@curcol}% + \pgfplotswarning{empty column name}{\pgfplotstableread@filename}{\pgfplotstable@loc@TMPa'}\pgfeov% + \fi + \expandafter\pgfplotstableread@impl@collectcolnames@NEXT@\expandafter{\pgfplotstable@loc@TMPa}% +} +\long\def\pgfplotstableread@impl@collectcolnames@NEXT@#1{% %\pgfplots@message{Got column name no \thepgfplotstableread@curcol\ as '#1'}% \pgfutil@ifundefined{pgfplotstableread@impl@COLNAME@#1}{% \def\pgfplotstable@loc@TMPa{#1}% diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex index f4906039522..ed2a7dabe4a 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex @@ -7,7 +7,7 @@ % % It is based on Till Tantau's PGF package. % -% Copyright 2007-2012 by Christian Feuersänger. +% 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 @@ -36,6 +36,8 @@ \input pgfplotsplothandlers.code.tex \input pgfplots.scaling.code.tex \input pgfplotscoordprocessing.code.tex +\input pgfplots.errorbars.code.tex +\input pgfplots.markers.code.tex \input pgfplotsticks.code.tex \input pgfplots.paths.code.tex @@ -109,9 +111,9 @@ \newif\ifpgfplots@xticklabel@interval \newif\ifpgfplots@yticklabel@interval \newif\ifpgfplots@zticklabel@interval -\newif\ifpgfplots@stackedmode \newif\ifpgfplots@stacked@reverse \newif\ifpgfplots@stacked@plus +\newif\ifpgfplots@stacked@ignores@zero \newif\ifpgfplots@plot@file@skipfirst \newif\ifpgfplots@threedim \newif\ifpgfplots@curplot@threedim @@ -496,6 +498,8 @@ % }% +\newif\ifpgfplots@stackedmode + \newif\ifpgfplotsplothandlermesh@shownormals \pgfkeys{% @@ -1759,6 +1763,8 @@ /pgfplots/stack dir/minus/.code={\pgfplots@stacked@plusfalse}, /pgfplots/stack dir/minus/.belongs to family=/pgfplots, /pgfplots/stack dir=plus, + /pgfplots/stacked ignores zero/.is if=pgfplots@stacked@ignores@zero, + /pgfplots/stacked ignores zero/.default=true, /pgfplots/filter discard warning/.is if=pgfplots@warn@for@filter@discards, /pgfplots/filter discard warning=true, /pgfplots/pre filter/.code={}, @@ -2673,98 +2679,172 @@ }; }, /pgfplots/every node near coord/.style={}, - % values: 'horizontal', 'vertical' or any tikz alignment command - % like 'left' or 'anchor=south west' or so. - /pgfplots/nodes near coords align/.initial=auto,% % - % 'nodes near coords=<content of node>'. - % The content is by default \pgfmathprintnumber\pgfplotspointmeta. - % - % Use 'point meta=y' after 'nodes near coords' to typeset the y coordinates - % Use 'point meta=x' to typeset the x coordinates - /pgfplots/nodes near coords/.style={% - /pgfplots/scatter/@pre marker code/.code={},% - /pgfplots/scatter/@post marker code/.code={},% - /pgfplots/nodes near coords*={#1},% - },% - /pgfplots/nodes near coords*/.style={% - /pgfplots/scatter/true*,% - /pgfplots/set point meta if empty=f(x),% - scatter/@post marker code/.append code={% - % determine default alignment: - \pgfkeysgetvalue{/pgfplots/nodes near coords align}{\pgfplots@nodes@near@coords@align}% - \edef\pgfplots@nodes@near@coords@align{\pgfplots@nodes@near@coords@align}% - \def\pgfplots@loc@TMPa{auto}% - \ifx\pgfplots@nodes@near@coords@align\pgfplots@loc@TMPa - \def\pgfplots@loc@TMPa{x}% - \ifx\pgfplotspointmetainputhandler\pgfplots@loc@TMPa% - % point meta=x: - \def\pgfplots@nodes@near@coords@align{horizontal}% - \else - \def\pgfplots@nodes@near@coords@align{vertical}% - \fi - \fi - % check for sign-dependand alignment options: - \def\pgfplots@loc@TMPa{horizontal}% - \ifx\pgfplots@nodes@near@coords@align\pgfplots@loc@TMPa - \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname% - \def\pgfplots@nodes@near@coords@align{above}% - \else - \pgfplotscoordmath{meta}{if is}{\pgfplotspointmeta}{-}{% - % \pgfplotspointmeta < 0 - \def\pgfplots@nodes@near@coords@align{left}% - }{% - % \pgfplotspointmeta >= 0 - \def\pgfplots@nodes@near@coords@align{right}% - }% + % Replaces the 'nodes near coords' CONFIGURATION by its default + % settings. It does NOT activate 'nodes near coords'. + /pgfplots/nodes near coords defaults/.style={ + % values: 'horizontal', 'vertical' or any tikz alignment command + % like 'left' or 'anchor=south west' or so. + /pgfplots/nodes near coords align/.initial=auto,% + % + % 'nodes near coords=<content of node>'. + % The content is by default \pgfmathprintnumber\pgfplotspointmeta. + % + % Use 'point meta=y' after 'nodes near coords' to typeset the y coordinates + % Use 'point meta=x' to typeset the x coordinates + /pgfplots/nodes near coords/.style={% + /pgfplots/scatter/@pre marker code/.code={},% + /pgfplots/scatter/@post marker code/.code={},% + /pgfplots/nodes near coords*={##1},% + },% + /pgfplots/nodes near coords*/.style={% + /pgfplots/scatter/true*,% + /pgfplots/set point meta if empty=f(x),% + scatter/@post marker code/.append code={% + % determine default alignment: + \pgfkeysgetvalue{/pgfplots/nodes near coords align}{\pgfplots@nodes@near@coords@align}% + \edef\pgfplots@nodes@near@coords@align{\pgfplots@nodes@near@coords@align}% + \def\pgfplots@loc@TMPa{auto}% + \ifx\pgfplots@nodes@near@coords@align\pgfplots@loc@TMPa + \def\pgfplots@loc@TMPa{x}% + \ifx\pgfplotspointmetainputhandler\pgfplots@loc@TMPa% + % point meta=x: + \def\pgfplots@nodes@near@coords@align{horizontal}% + \else + \def\pgfplots@nodes@near@coords@align{vertical}% + \fi \fi - \else - \def\pgfplots@loc@TMPa{vertical}% + % check for sign-dependand alignment options: + \def\pgfplots@loc@TMPa{horizontal}% \ifx\pgfplots@nodes@near@coords@align\pgfplots@loc@TMPa \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname% \def\pgfplots@nodes@near@coords@align{above}% \else \pgfplotscoordmath{meta}{if is}{\pgfplotspointmeta}{-}{% % \pgfplotspointmeta < 0 - \def\pgfplots@nodes@near@coords@align{below}% + \def\pgfplots@nodes@near@coords@align{left}% }{% % \pgfplotspointmeta >= 0 - \def\pgfplots@nodes@near@coords@align{above}% + \def\pgfplots@nodes@near@coords@align{right}% }% \fi \else - \pgfutil@ifundefined{pgfplots@nodesnearcoordsalign@isanchor@\pgfplots@nodes@near@coords@align} - {}% - {% - \t@pgfplots@toka=\expandafter{\pgfplots@nodes@near@coords@align}% - \edef\pgfplots@nodes@near@coords@align{anchor=\the\t@pgfplots@toka}% - }% - \fi - \fi - % ok, place the node. - \expandafter\node\expandafter[\pgfplots@nodes@near@coords@align,% - /pgfplots/every node near coord] - at (0pt,0pt) - {% - \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname% - % point meta=explicit symbolic - % do not try to invoke \pgfmathprintnumber on - % symbolic data... this check should keep the user - % interface simpler. - \def\pgfplots@loc@TMPa{\pgfmathprintnumber\pgfplotspointmeta}% - \def\pgfplots@loc@TMPb{#1}% - \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb - \pgfplotspointmeta + \def\pgfplots@loc@TMPa{vertical}% + \ifx\pgfplots@nodes@near@coords@align\pgfplots@loc@TMPa + \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname% + \def\pgfplots@nodes@near@coords@align{above}% + \else + \pgfplotscoordmath{meta}{if is}{\pgfplotspointmeta}{-}{% + % \pgfplotspointmeta < 0 + \def\pgfplots@nodes@near@coords@align{below}% + }{% + % \pgfplotspointmeta >= 0 + \def\pgfplots@nodes@near@coords@align{above}% + }% + \fi \else - #1% + \pgfutil@ifundefined{pgfplots@nodesnearcoordsalign@isanchor@\pgfplots@nodes@near@coords@align} + {}% + {% + \t@pgfplots@toka=\expandafter{\pgfplots@nodes@near@coords@align}% + \edef\pgfplots@nodes@near@coords@align{anchor=\the\t@pgfplots@toka}% + }% \fi - \else - #1% \fi - }; + % ok, place the node. + \expandafter\node\expandafter[\pgfplots@nodes@near@coords@align,% + /pgfplots/every node near coord] + {% + \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname% + % point meta=explicit symbolic + % do not try to invoke \pgfmathprintnumber on + % symbolic data... this check should keep the user + % interface simpler. + \def\pgfplots@loc@TMPa{\pgfmathprintnumber\pgfplotspointmeta}% + \def\pgfplots@loc@TMPb{##1}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + \pgfplotspointmeta + \else + ##1% + \fi + \else + ##1% + \fi + }; + },% },% - },% - /pgfplots/nodes near coords*/.default={\pgfmathprintnumber\pgfplotspointmeta}, + /pgfplots/nodes near coords*/.default={\pgfmathprintnumber\pgfplotspointmeta}, + }, + /pgfplots/nodes near coords defaults, + % + % + /pgfplots/nodes near coords bar offset/.initial=0.5, + % + % Replaces the 'nodes near coords' CONFIGURATION by one suitable + % for xbar stacked + /pgfplots/nodes near coords xbar stacked configuration/.style={ + /pgfplots/nodes near coords defaults, + /pgfplots/nodes near coords*/.add code={% + \pgfkeysalso{ + /pgfplots/set point meta if empty=rawx,% + }% + }{% + \pgfkeysalso{% + /pgfplots/scatter/position/absolute, + /pgfplots/scatter/@post marker code/.add code={ + \pgfplotspointgetnormalizedcoordinates + \pgfplotspointgetnormalizedzerolevelcoordinates + \pgfkeysgetvalue{/pgfplots/nodes near coords bar offset}\pgfplots@nodes@near@coords@bar@offset + \tikzset{ + every node/.append style={% + at={(normalized axis cs:% + { (\pgfplots@nodes@near@coords@bar@offset) *\pgfkeysvalueof{/data point/x} + +(1-\pgfplots@nodes@near@coords@bar@offset)*\pgfkeysvalueof{/data point/zero/x}},% + \pgfkeysvalueof{/data point/y})% + }% + } + }% + }{},% + }% + }, + /pgfplots/nodes near coords align={% + anchor=center, + }, + }, + % Replaces the 'nodes near coords' CONFIGURATION by one suitable + % for ybar stacked + /pgfplots/nodes near coords ybar stacked configuration/.style={ + /pgfplots/nodes near coords defaults, + /pgfplots/nodes near coords*/.add code={% + \pgfkeysalso{ + /pgfplots/set point meta if empty=rawy,% + }% + }{% + \pgfkeysalso{% + /pgfplots/scatter/position/absolute, + /pgfplots/scatter/@post marker code/.add code={ + \pgfplotspointgetnormalizedcoordinates + \pgfplotspointgetnormalizedzerolevelcoordinates + \pgfkeysgetvalue{/pgfplots/nodes near coords bar offset}\pgfplots@nodes@near@coords@bar@offset + \tikzset{ + every node/.append style={% + at={(normalized axis cs:% + \pgfkeysvalueof{/data point/x},% + { (\pgfplots@nodes@near@coords@bar@offset) *\pgfkeysvalueof{/data point/y} + +(1-\pgfplots@nodes@near@coords@bar@offset)*\pgfkeysvalueof{/data point/zero/y}})% + }% + } + }% + }{},% + }% + }, + /pgfplots/nodes near coords align={% + anchor=center, + }, + }, + % + % + % /pgfplots/scatter explicit color/.style 2 args={% /pgfplots/scatter/@pre marker code/.code=,% /pgfplots/scatter/@post marker code/.code=,% @@ -2928,24 +3008,27 @@ /tikz/xbar interval, }, /pgfplots/xbar interval/.default=1, + /pgfplots/stacked since 1.9/.style={}, /pgfplots/xbar stacked/.style={ bar direction=x, - /pgfplots/set point meta if empty=x,% bar cycle list, single xbar legend, stack plots=x, stack dir=#1, /tikz/xbar, + stacked since 1.9, + activate nodes near coords xbar stacked, }, /pgfplots/xbar stacked/.default=plus, /pgfplots/ybar stacked/.style={ bar direction=y, - /pgfplots/set point meta if empty=f(x),% bar cycle list, single ybar legend, stack plots=y, stack dir=#1, /tikz/ybar, + stacked since 1.9, + activate nodes near coords ybar stacked, }, /pgfplots/ybar stacked/.default=plus, /pgfplots/xbar interval stacked/.style={ @@ -3325,7 +3408,7 @@ /pgfplots/point meta/symbolic/.style={/pgfplots/point meta/TeX code symbolic={\def\pgfplotspointmeta{#1}}}, /pgfplots/set point meta if empty/.code={% \ifx\pgfplotspointmetainputhandler\pgfutil@empty - \pgfkeysalso{/pgfplots/point meta/#1}% + \pgfkeysalso{/pgfplots/point meta=#1}% \fi },% /pgfplots/point meta/none, @@ -3412,6 +3495,10 @@ % '#1' is empty. /pgfplots/scatter/@pre marker code/.code=,% /pgfplots/scatter/@post marker code/.code=,% + /pgfplots/scatter/position/.is choice, + /pgfplots/scatter/position/absolute/.code={\def\pgfplots@scatter@position{a}}, + /pgfplots/scatter/position/relative/.code={\def\pgfplots@scatter@position{r}}, + /pgfplots/scatter/position=relative, /pgfplots/scatter/use mapped color/.style={% /pgfplots/scatter/@pre marker code/.code=,% /pgfplots/scatter/@post marker code/.code=,% @@ -3553,6 +3640,7 @@ /pgfplots/compat/anchors/1.6/.style= {/pgfplots/compat/anchors/1.3},% /pgfplots/compat/anchors/1.7/.style= {/pgfplots/compat/anchors/1.3},% /pgfplots/compat/anchors/1.8/.style= {/pgfplots/compat/anchors/1.3},% + /pgfplots/compat/anchors/1.9/.style= {/pgfplots/compat/anchors/1.3},% /pgfplots/compat/anchors/newest/.style= {/pgfplots/compat/anchors/1.3},% /pgfplots/compat/anchors/default/.style={/pgfplots/compat/anchors/1.3},% % @@ -3565,6 +3653,7 @@ /pgfplots/compat/empty line/1.6/.style= {/pgfplots/compat/empty line/1.4},% /pgfplots/compat/empty line/1.7/.style= {/pgfplots/compat/empty line/1.4},% /pgfplots/compat/empty line/1.8/.style= {/pgfplots/compat/empty line/1.4},% + /pgfplots/compat/empty line/1.9/.style= {/pgfplots/compat/empty line/1.4},% /pgfplots/compat/empty line/newest/.style= {/pgfplots/compat/empty line/1.4},% /pgfplots/compat/empty line/default/.style= {/pgfplots/compat/empty line/1.4},% % @@ -3577,6 +3666,7 @@ /pgfplots/compat/path replacement/1.6/.style= {/pgfplots/compat/path replacement/1.5.1}, /pgfplots/compat/path replacement/1.7/.style= {/pgfplots/compat/path replacement/1.5.1}, /pgfplots/compat/path replacement/1.8/.style= {/pgfplots/compat/path replacement/1.5.1}, + /pgfplots/compat/path replacement/1.9/.style= {/pgfplots/compat/path replacement/1.5.1}, /pgfplots/compat/path replacement/newest/.style= {/pgfplots/compat/path replacement/1.5.1},% /pgfplots/compat/path replacement/default/.style= {/pgfplots/compat/path replacement/pre 1.3},% %ellipse/.is if=pgfplots@path@replace@ellipse, @@ -3599,8 +3689,47 @@ /pgfplots/compat/labels/1.3, /pgfplots/compat/axis line style post 1.8, },% + /pgfplots/compat/labels/1.9/.style= {/pgfplots/compat/labels/1.8},% /pgfplots/compat/labels/newest/.style= {/pgfplots/compat/labels/1.8},% - /pgfplots/compat/labels/default/.style= {/pgfplots/compat/labels/pre 1.3},% maintain backwards compatibility for labels :-( + /pgfplots/compat/labels/default/.style= {/pgfplots/compat/labels/pre 1.3},% maintain backwards compatibility + % + /pgfplots/compat/bar nodes/.is choice, + /pgfplots/compat/bar nodes/pre 1.3/.style={% + /pgfplots/stacked since 1.9/.style={ + /pgfplots/stacked ignores zero=false,% backwards compatible. + },% + % + % empty - early versions did not know anything about them. + % But people might have arrived at suitable work-arounds; do + % not destroy their work. + /pgfplots/activate nodes near coords xbar stacked/.style={% + /pgfplots/set point meta if empty=f(x),% + },% + /pgfplots/activate nodes near coords ybar stacked/.code={% + /pgfplots/set point meta if empty=f(x),% + },% + },% + /pgfplots/compat/bar nodes/1.3/.style= {/pgfplots/compat/bar nodes/pre 1.3},% + /pgfplots/compat/bar nodes/1.4/.style= {/pgfplots/compat/bar nodes/pre 1.3},% + /pgfplots/compat/bar nodes/1.5/.style= {/pgfplots/compat/bar nodes/pre 1.3},% + /pgfplots/compat/bar nodes/1.5.1/.style= {/pgfplots/compat/bar nodes/pre 1.3},% + /pgfplots/compat/bar nodes/1.6/.style= {/pgfplots/compat/bar nodes/pre 1.3},% + /pgfplots/compat/bar nodes/1.7/.style= {/pgfplots/compat/bar nodes/pre 1.3},% + /pgfplots/compat/bar nodes/1.8/.style= {/pgfplots/compat/bar nodes/pre 1.3},% + /pgfplots/compat/bar nodes/1.9/.style= { + /pgfplots/stacked since 1.9/.style={ + /pgfplots/stacked ignores zero=true,% + }, + /pgfplots/activate nodes near coords xbar stacked/.style={ + /pgfplots/nodes near coords xbar stacked configuration, + }, + /pgfplots/activate nodes near coords ybar stacked/.style={ + /pgfplots/nodes near coords ybar stacked configuration, + }, + },% + /pgfplots/compat/bar nodes/newest/.style= {/pgfplots/compat/bar nodes/1.9},% + /pgfplots/compat/bar nodes/default/.style= {/pgfplots/compat/bar nodes/pre 1.3},% maintain backwards compatibility + /pgfplots/compat/bar nodes/default, % % search for the \pgfplots@compat@scaling@coordmath -- using float % is much more accurate. But it changes the spacing slightly. @@ -3625,6 +3754,7 @@ }, /pgfplots/compat/scaling/1.7/.style={/pgfplots/compat/scaling/1.6}, /pgfplots/compat/scaling/1.8/.style={/pgfplots/compat/scaling/1.6}, + /pgfplots/compat/scaling/1.9/.style={/pgfplots/compat/scaling/1.6}, /pgfplots/compat/scaling/newest/.style={/pgfplots/compat/scaling/1.6}, /pgfplots/compat/scaling/default/.style={/pgfplots/compat/scaling/1.4}, % @@ -3637,6 +3767,7 @@ /pgfplots/compat/scale mode/1.6/.code=\def\pgfplots@compat@scale@mode@compatible@mode{0}, /pgfplots/compat/scale mode/1.7/.style={/pgfplots/compat/scale mode/1.6}, /pgfplots/compat/scale mode/1.8/.style={/pgfplots/compat/scale mode/1.6}, + /pgfplots/compat/scale mode/1.9/.style={/pgfplots/compat/scale mode/1.6}, /pgfplots/compat/scale mode/newest/.style={/pgfplots/compat/scale mode/1.6}, /pgfplots/compat/scale mode/default/.style={/pgfplots/compat/scale mode/1.5}, % @@ -3650,6 +3781,7 @@ /pgfplots/compat/plot3graphics/1.6/.code= {\def\b@pgfplots@compat@plot@graphics@threedim{2}},% /pgfplots/compat/plot3graphics/1.7/.style= {/pgfplots/compat/plot3graphics/1.6},% /pgfplots/compat/plot3graphics/1.8/.style= {/pgfplots/compat/plot3graphics/1.6},% + /pgfplots/compat/plot3graphics/1.9/.style= {/pgfplots/compat/plot3graphics/1.6},% /pgfplots/compat/plot3graphics/newest/.style= {/pgfplots/compat/plot3graphics/1.6},% /pgfplots/compat/plot3graphics/default/.style= {/pgfplots/compat/plot3graphics/1.5},% % @@ -3688,7 +3820,8 @@ /pgfplots/compat/bar width by units/1.5.1/.style= {/pgfplots/compat/bar width by units/pre 1.3},% /pgfplots/compat/bar width by units/1.6/.style= {/pgfplots/compat/bar width by units/pre 1.3},% /pgfplots/compat/bar width by units/1.7/.code= {\def\b@pgfplots@compat@bar@width@units{0}},% - /pgfplots/compat/bar width by units/1.8/.code= {\def\b@pgfplots@compat@bar@width@units{0}},% + /pgfplots/compat/bar width by units/1.8/.style= {/pgfplots/compat/bar width by units/1.7}, + /pgfplots/compat/bar width by units/1.9/.style= {/pgfplots/compat/bar width by units/1.7}, /pgfplots/compat/bar width by units/newest/.style= {/pgfplots/compat/bar width by units/1.7}, /pgfplots/compat/bar width by units/default/.style={/pgfplots/compat/bar width by units/pre 1.3}, % @@ -3701,6 +3834,7 @@ /pgfplots/compat/BB/1.6/.style= {/pgfplots/compat/BB/pre 1.3},% /pgfplots/compat/BB/1.7/.style= {/pgfplots/compat/BB/pre 1.3},% /pgfplots/compat/BB/1.8/.style= {/pgfplots/clip bounding box=upper bound},% + /pgfplots/compat/BB/1.9/.style= {/pgfplots/compat/BB/1.8},% /pgfplots/compat/BB/newest/.style= {/pgfplots/compat/BB/1.8}, /pgfplots/compat/BB/default/.style={/pgfplots/compat/BB/pre 1.3}, % @@ -3713,13 +3847,14 @@ /pgfplots/compat/general/1.6/.style= {/pgfplots/compat/general/1.5},% /pgfplots/compat/general/1.7/.style= {/pgfplots/compat/general/1.5},% /pgfplots/compat/general/1.8/.style= {/pgfplots/compat/general/1.5},% + /pgfplots/compat/general/1.9/.style= {/pgfplots/compat/general/1.5},% /pgfplots/compat/general/newest/.style= {/pgfplots/compat/general/1.8}, /pgfplots/compat/general/default/.style={/pgfplots/compat/general/1.5}, % /pgfplots/compat/show suggested version/.is if=pgfplots@show@suggested@version, /pgfplots/compat/show suggested version=true, /pgfplots/compat/current/.initial=, - /pgfplots/compat/mostrecent/.initial=1.8, + /pgfplots/compat/mostrecent/.initial=1.9, /pgfplots/compat/.style={% % ATTENTION: *every* /pgfplots/compat/ setting needs to accept % the same choices due to this construction: @@ -3734,6 +3869,7 @@ /pgfplots/compat/path replacement=#1,% /pgfplots/compat/plot3graphics=#1,% /pgfplots/compat/bar width by units=#1,% + /pgfplots/compat/bar nodes=#1,% },% /pgfplots/compat/.default=pre 1.3,% this is used if you type '\pgfplotsset{compat}' without value /pgfplots/compat=default,% this is the initial config. @@ -3893,7 +4029,11 @@ \ifx\pgfplots@plot@samples@at\pgfutil@empty \if 1\pgfplots@loc@TMPa % Resample! See above. - \tikzset{samples=\pgfplots@plot@samples}% + \tikzset{% + /pgf/fpu/output format=fixed,% seems as if /tikz/samples calls register arithmetics. + samples=\pgfplots@plot@samples, + /pgf/fpu/output format=float,% + }% \fi \pgfplots@gettikzinternal@keyval{samples at}{tikz@plot@samplesat}{-5,-4.6,...,5}% \pgfkeyslet{/pgfplots/samples at}{\tikz@plot@samplesat}% @@ -5793,6 +5933,7 @@ }% \pgfplotscoordmath{#1}{tostring}{\pgfmathresult}% \pgfkeyslet{/pgfplots/#1#2}\pgfmathresult + % this runs \pgfkeyslet{/pgfplots/xmin}\pgfmathresult }% @@ -7476,46 +7617,6 @@ \fi }% -% validates 'mark layer' such that it can be queried afterwards. -\def\pgfplots@prepare@layered@graphics@marks{% - \ifpgfplots@layered@graphics - \pgfkeysgetvalue{/pgfplots/mark layer}\pgfplots@loc@TMPa - \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}% - \ifx\pgfplots@loc@TMPa\pgfutil@empty - \def\pgfplots@loc@TMPa{auto}% - \fi - \def\pgfplots@loc@TMPb{auto}% - \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb - % COMBINATION: 'activate layers,mark layer=auto' --> keep - % backwards compatibility with 'clip marker paths' - % -> nothing to do. - \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty% - \else - % mark layer=like plot - \def\pgfplots@loc@TMPb{like plot}% - \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb - % draw markers together with their plot (no matter - % on which layer): - \pgfplots@clip@marker@pathstrue - \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty% - \else - \edef\pgfplots@loc@TMPb{\pgfkeysvalueof{/pgfplots/on layer}}% - \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb - % nothing to do; they are on the same layer - % anyway: (this is the same as 'like plot' - \pgfplots@clip@marker@pathstrue - \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty% - \else - % OK, marks will be plotted on their own layer. - \fi - \fi - \fi - \else - % reset its value: - \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty% - \fi -}% - % #2: context information (for improved error recovery), optional \def\pgfplotsonlayer#1{% \pgfutil@ifnextchar\bgroup{\pgfplotsonlayer@{#1}}{\pgfplotsonlayer@{#1}{}}% @@ -8312,25 +8413,8 @@ \fi \pgfplots@draw@axis@post % - % Draw any markers for which drawing has been postponed. - % - % The motivation here is that markers should be drawn on top of - % their plots, and AFTER the clip path. - % - % If the plotting logic added serialized marker streams to - % \pgfplots@stored@markerlist, these markers will be plotted here. - % - % Note that this list will be EMPTY if - % \ifpgfplots@clip@marker@paths is true. - % - % whats the better sequence for \ifpgfplots@axis@on@top and \ifpgfplots@clip@marker@paths !? - % This here looks better, I think... markers should not be obscured by descriptions. - \pgfplotslistforeach\pgfplots@stored@markerlist\as\pgfplots@loc@TMPa{% -%\message{Executing marker stuff: \meaning\pgfplots@loc@TMPa]]]]]}% -%\tracingmacros=2\tracingcommands=2 - \pgfplots@loc@TMPa - }% - \global\pgfplotslistnewempty\pgfplots@stored@markerlist% clear. + \pgfplots@markers@visphase@after@axis + \global\pgfplotslistnewempty\pgfplots@stored@plotlist% delete contents. % \begingroup \pgfkeysvalueof{/pgfplots/after end axis/.@cmd}\pgfeov% @@ -8371,24 +8455,29 @@ } % definition of 'axis cs': -\tikzdeclarecoordinatesystem{axis}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface\pgfplots@loc@TMPa\pgfplots@coord@end} -\def\pgfplotspointaxisxy#1#2{\pgfplots@evalute@tikz@coord@system@interface#1,#2\pgfplots@coord@end}% -\def\pgfplotspointaxisxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface#1,#2,#3\pgfplots@coord@end}% +\tikzdeclarecoordinatesystem{axis}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface\pgfplots@loc@TMPa,\pgfplots@coord@end} +\def\pgfplotspointaxisxy#1#2{\pgfplots@evalute@tikz@coord@system@interface{#1},{#2},\pgfplots@coord@end}% +\def\pgfplotspointaxisxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface{#1},{#2},{#3},\pgfplots@coord@end}% + +% definition of 'normalized axis cs': +\tikzdeclarecoordinatesystem{normalized axis}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface@normalized\pgfplots@loc@TMPa,\pgfplots@coord@end} +\def\pgfplotspointnormalizedaxisxy#1#2{\pgfplots@evalute@tikz@coord@system@interface@normalized{#1},{#2},\pgfplots@coord@end}% +\def\pgfplotspointnormalizedaxisxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface@normalized{#1},{#2},{#3},\pgfplots@coord@end}% \tikzdeclarecoordinatesystem{axis direction}{% \edef\pgfplots@loc@TMPa{% \noexpand\pgfplots@evalute@tikz@coord@system@interface[ noshift]% - #1\noexpand\pgfplots@coord@end + #1,\noexpand\pgfplots@coord@end }% \pgfplots@loc@TMPa } -\def\pgfplotspointaxisdirectionxy#1#2{\pgfplots@evalute@tikz@coord@system@interface[ noshift]#1,#2\pgfplots@coord@end}% -\def\pgfplotspointaxisdirectionxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface[ noshift]#1,#2,#3\pgfplots@coord@end}% +\def\pgfplotspointaxisdirectionxy#1#2{\pgfplots@evalute@tikz@coord@system@interface[ noshift]{#1},{#2},\pgfplots@coord@end}% +\def\pgfplotspointaxisdirectionxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface[ noshift]{#1},{#2},{#3},\pgfplots@coord@end}% % rel axis cs: -\tikzdeclarecoordinatesystem{rel axis}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface@rel\pgfplots@loc@TMPa\pgfplots@coord@end} -\def\pgfplotspointrelaxisxy#1#2{\pgfplots@evalute@tikz@coord@system@interface@rel#1,#2\pgfplots@coord@end}% -\def\pgfplotspointrelaxisxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface@rel#1,#2,#3\pgfplots@coord@end}% +\tikzdeclarecoordinatesystem{rel axis}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface@rel\pgfplots@loc@TMPa,\pgfplots@coord@end} +\def\pgfplotspointrelaxisxy#1#2{\pgfplots@evalute@tikz@coord@system@interface@rel{#1},{#2},\pgfplots@coord@end}% +\def\pgfplotspointrelaxisxyz#1#2#3{\pgfplots@evalute@tikz@coord@system@interface@rel{#1},{#2},{#3},\pgfplots@coord@end}% % axis description cs: \tikzdeclarecoordinatesystem{axis description}{\edef\pgfplots@loc@TMPa{#1}\expandafter\pgfplots@evalute@tikz@coord@system@interface@axis@description\pgfplots@loc@TMPa\pgfplots@coord@end} @@ -8427,6 +8516,9 @@ \else \expandafter\pgfplots@loc@TMPc\expandafter{\pgfmathresult}\pgfeov \fi + \ifpgfplots@plot@coords@mathparser + \pgfplotscoordmath{default}{parse}{\pgfmathresult}% + \fi \let\pgfplots@loc@TMPc=\pgfmathresult% FIXME: is that necessary? I doubt it... but just to make sure... \csname ifpgfplots@#2islinear\endcsname \pgfplotscoordmath{#2}{parsenumber}{\pgfplots@loc@TMPc}% @@ -8438,33 +8530,55 @@ \fi } +\long\def\pgfplots@evalute@tikz@coord@system@interface@for@normalized[#1]#2#3{% + \edef\pgfmathresult{#3}% + \pgfplotscoordmath{default}{parse}{\pgfmathresult}% + \let\pgfplots@loc@TMPc=\pgfmathresult% FIXME: is that necessary? I doubt it... but just to make sure... + \pgfplotscoordmath{#2}{parsenumber}{\pgfplots@loc@TMPc}% + \csname ifpgfplots@#2islinear\endcsname + \pgfplots@if{pgfplots@apply@datatrafo@#2}{% + \pgfplotscoordmath{#2}{datascaletrafo#1}{\pgfmathresult}% + }{}% + \else + % OK, assume it *is* in the normalized format. + \fi +} + \def\pgfplots@evalute@tikz@coord@system@interface{% + \begingroup \pgfutil@ifnextchar[% - {\pgfplots@evalute@tikz@coord@system@interface@}% - {\pgfplots@evalute@tikz@coord@system@interface@[]}% + {\pgfplots@evalute@tikz@coord@system@interface@x}% + {\pgfplots@evalute@tikz@coord@system@interface@x[]}% } -\long\def\pgfplots@evalute@tikz@coord@system@interface@[#1]#2,#3\pgfplots@coord@end{% - \global\let\pgfplots@glob@TMPc=\pgfutil@empty - \begingroup - \pgfplots@evalute@tikz@coord@system@interface@for[#1]{x}{#2}% - \let\pgfplots@evaluate@tikz@coord@x=\pgfmathresult - \edef\pgfplots@loc@TMPa{#3}% - \expandafter\pgfutil@in@\expandafter,\expandafter{\pgfplots@loc@TMPa}% - \ifpgfutil@in@ - \def\pgfplots@loc@TMPb##1,##2\pgfplots@EOI{% - \def\pgfplots@axiscs@y{##1}% - \def\pgfplots@axiscs@z{##2}% - }% - \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\pgfplots@EOI - \pgfplots@evalute@tikz@coord@system@interface@for[#1]{y}{\pgfplots@axiscs@y}% - \let\pgfplots@evaluate@tikz@coord@y=\pgfmathresult - \pgfplots@evalute@tikz@coord@system@interface@for[#1]{z}{\pgfplots@axiscs@z}% - \let\pgfplots@evaluate@tikz@coord@z=\pgfmathresult - \else - \pgfplots@evalute@tikz@coord@system@interface@for[#1]{y}{#3}% - \let\pgfplots@evaluate@tikz@coord@y=\pgfmathresult - \let\pgfplots@evaluate@tikz@coord@z=\pgfutil@empty - \fi +\def\pgfplots@evalute@tikz@coord@system@interface@x[#1]#2,{% + \def\pgfplots@evaluate@tikz@coord@opts{#1}% + \def\pgfplots@evaluate@tikz@coord@x{#2}% + \pgfplots@evalute@tikz@coord@system@interface@xy% +}% + +\def\pgfplots@evalute@tikz@coord@system@interface@xy#1,{% + \def\pgfplots@evaluate@tikz@coord@y{#1}% + \pgfutil@ifnextchar\pgfplots@coord@end{% + % ah - we have no Z component. ok. + \let\pgfplots@evaluate@tikz@coord@z\pgfutil@empty + % jump to the end of the state machine: + \pgfplots@evalute@tikz@coord@system@interface@@@@@ + }{% + \pgfplots@evalute@tikz@coord@system@interface@xyz + }% +}% + +\def\pgfplots@evalute@tikz@coord@system@interface@xyz#1,{% + \def\pgfplots@evaluate@tikz@coord@z{#1}% + \pgfplots@evalute@tikz@coord@system@interface@@@@@ +}% + +% equals only itsself in \ifx: +\def\pgfplots@coord@end{\pgfplots@coord@end} + +\long\def\pgfplots@evalute@tikz@coord@system@interface@@@@@#1\pgfplots@coord@end{% + %\begingroup <--- has already been opened at the beginning of the state machine + \pgfplots@evalute@tikz@coord@system@interface@tocoords[\pgfplots@evaluate@tikz@coord@opts]% \xdef\pgfplots@glob@TMPa{\pgfplots@evaluate@tikz@coord@x}% \xdef\pgfplots@glob@TMPb{\pgfplots@evaluate@tikz@coord@y}% \xdef\pgfplots@glob@TMPc{\pgfplots@evaluate@tikz@coord@z}% @@ -8475,26 +8589,42 @@ \pgfplotsqpointxyz{\pgfplots@glob@TMPa}{\pgfplots@glob@TMPb}{\pgfplots@glob@TMPc}% \fi } -\long\def\pgfplots@evalute@tikz@coord@system@interface@rel#1,#2\pgfplots@coord@end{% + +% Defines \pgfplots@evaluate@tikz@coord@[xyz] +\def\pgfplots@evalute@tikz@coord@system@interface@tocoords[#1]{% + \pgfplots@evalute@tikz@coord@system@interface@for[#1]{x}{\pgfplots@evaluate@tikz@coord@x}% + \let\pgfplots@evaluate@tikz@coord@x=\pgfmathresult + \pgfplots@evalute@tikz@coord@system@interface@for[#1]{y}{\pgfplots@evaluate@tikz@coord@y}% + \let\pgfplots@evaluate@tikz@coord@y=\pgfmathresult + % + \ifx\pgfplots@evaluate@tikz@coord@z\pgfutil@empty + \else + \pgfplots@evalute@tikz@coord@system@interface@for[#1]{z}{\pgfplots@evaluate@tikz@coord@z}% + \let\pgfplots@evaluate@tikz@coord@z=\pgfmathresult + \fi +}% + +\def\pgfplots@evalute@tikz@coord@system@interface@rel{% \begingroup + \let\pgfplots@evalute@tikz@coord@system@interface@@@@@=\pgfplots@evalute@tikz@coord@system@interface@@@@@rel + \pgfutil@ifnextchar[% + {\pgfplots@evalute@tikz@coord@system@interface@x}% + {\pgfplots@evalute@tikz@coord@system@interface@x[]}% +} + +\long\def\pgfplots@evalute@tikz@coord@system@interface@@@@@rel#1\pgfplots@coord@end{% + %\begingroup <--- has already been opened at the beginning of the state machine \pgfkeys{/pgf/fpu=false}% - \pgfmathparse{#1}% - \let\pgfplots@axiscs@x=\pgfmathresult - \edef\pgfplots@loc@TMPa{#2}% - \expandafter\pgfutil@in@\expandafter,\expandafter{\pgfplots@loc@TMPa}% - \ifpgfutil@in@ - \def\pgfplots@loc@TMPb##1,##2\pgfplots@EOI{% - \pgfmathparse{##1}% - \let\pgfplots@axiscs@y=\pgfmathresult - \pgfmathparse{##2}% - \let\pgfplots@axiscs@z=\pgfmathresult - }% - \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\pgfplots@EOI + \pgfmathparse{\pgfplots@evaluate@tikz@coord@x}% + \let\pgfplots@evaluate@tikz@coord@x=\pgfmathresult + \pgfmathparse{\pgfplots@evaluate@tikz@coord@y}% + \let\pgfplots@evaluate@tikz@coord@y=\pgfmathresult + \ifx\pgfplots@evaluate@tikz@coord@z\pgfutil@empty \else - \pgfmathparse{#2}% - \let\pgfplots@axiscs@y=\pgfmathresult - \def\pgfplots@axiscs@z{}% + \pgfmathparse{\pgfplots@evaluate@tikz@coord@z}% + \let\pgfplots@evaluate@tikz@coord@z=\pgfmathresult \fi + % \pgfplotspointxaxis \pgf@xx=\pgf@x \pgf@xy=\pgf@y @@ -8505,27 +8635,27 @@ % \ifpgfplots@allow@reversal@of@rel@axis@cs \if\pgfkeysvalueof{/pgfplots/x dir/value}r% - \pgf@xa=-\pgfplots@axiscs@x pt + \pgf@xa=-\pgfplots@evaluate@tikz@coord@x pt \advance\pgf@xa by1pt - \edef\pgfplots@axiscs@x{\pgf@sys@tonumber\pgf@xa}% + \edef\pgfplots@evaluate@tikz@coord@x{\pgf@sys@tonumber\pgf@xa}% \fi \if\pgfkeysvalueof{/pgfplots/y dir/value}r% - \pgf@xa=-\pgfplots@axiscs@y pt + \pgf@xa=-\pgfplots@evaluate@tikz@coord@y pt \advance\pgf@xa by1pt - \edef\pgfplots@axiscs@y{\pgf@sys@tonumber\pgf@xa}% + \edef\pgfplots@evaluate@tikz@coord@y{\pgf@sys@tonumber\pgf@xa}% \fi \fi % - \ifx\pgfplots@axiscs@z\pgfutil@empty + \ifx\pgfplots@evaluate@tikz@coord@z\pgfutil@empty \pgfpointadd {\pgfplotspointminminmin}% - {\pgfplotsqpointxy{\pgfplots@axiscs@x}{\pgfplots@axiscs@y}}% + {\pgfplotsqpointxy{\pgfplots@evaluate@tikz@coord@x}{\pgfplots@evaluate@tikz@coord@y}}% \else \ifpgfplots@allow@reversal@of@rel@axis@cs \if\pgfkeysvalueof{/pgfplots/z dir/value}r% - \pgf@xa=-\pgfplots@axiscs@z pt + \pgf@xa=-\pgfplots@evaluate@tikz@coord@z pt \advance\pgf@xa by1pt - \edef\pgfplots@axiscs@z{\pgf@sys@tonumber\pgf@xa}% + \edef\pgfplots@evaluate@tikz@coord@z{\pgf@sys@tonumber\pgf@xa}% \fi \fi \pgfplotspointzaxis @@ -8533,12 +8663,20 @@ \pgf@zy=\pgf@y \pgfpointadd {\pgfplotspointminminmin}% - {\pgfplotsqpointxyz{\pgfplots@axiscs@x}{\pgfplots@axiscs@y}{\pgfplots@axiscs@z}}% + {\pgfplotsqpointxyz{\pgfplots@evaluate@tikz@coord@x}{\pgfplots@evaluate@tikz@coord@y}{\pgfplots@evaluate@tikz@coord@z}}% \fi \pgf@process{}% \endgroup } +\def\pgfplots@evalute@tikz@coord@system@interface@normalized{% + \begingroup + \let\pgfplots@evalute@tikz@coord@system@interface@for=\pgfplots@evalute@tikz@coord@system@interface@for@normalized + \pgfutil@ifnextchar[% + {\pgfplots@evalute@tikz@coord@system@interface@x}% + {\pgfplots@evalute@tikz@coord@system@interface@x[]}% +} + % In case of (semi-) logplots, this command will % - assign a filter which invokes \pgfmathlog@{} for each coordinate % - replace any user-specified coordinate by its log. @@ -8649,26 +8787,26 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1min\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{parse}{\pgfplots@loc@TMPa}% \expandafter\global\expandafter\let\csname pgfplots@#1min\endcsname=\pgfmathresult \fi \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1max\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{parse}{\pgfplots@loc@TMPa}% \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult \fi % Check for any existing tick limits: \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tickmin\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{parse}{\pgfplots@loc@TMPa}% \expandafter\global\expandafter\let\csname pgfplots@#1tickmin\endcsname=\pgfmathresult \fi \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tickmax\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{parse}{\pgfplots@loc@TMPa}% \expandafter\global\expandafter\let\csname pgfplots@#1tickmax\endcsname=\pgfmathresult \fi \fi @@ -8715,7 +8853,8 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1min\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \pgfplotscoordmath{#1}{log}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{default}{parse}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{log}{\pgfmathresult}% \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% }{% \pgfplotswarning{illegal user argument in log axis}{#1min}{\csname pgfplots@#1min\endcsname}\pgfeov% @@ -8725,7 +8864,8 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1max\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \pgfplotscoordmath{#1}{log}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{default}{parse}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{log}{\pgfmathresult}% \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% }{% \pgfplotswarning{illegal user argument in log axis}{#1max}{\csname pgfplots@#1max\endcsname}\pgfeov% @@ -9557,9 +9697,20 @@ }% % \pgfplots@set@options@sanitize + \pgfplots@check@global@colorspace@overrides \pgfplots@notify@options@are@set } +% EMPTY. This will be overridden by tex-engine specific code. +% At the time of this writing, the latex driver will check for xcolor +% configuration options and will override +% mesh/colorspace explicit color output +% and +% colormap default colorspace +% if needed. +\def\pgfplots@check@global@colorspace@overrides{% +}% + \def\pgfplots@add@named@child@node#1{% \xdef\pgfplots@named@child@node@list{\pgfplots@named@child@node@list,{#1}}% }% @@ -9878,7 +10029,7 @@ % restore the modes manually. \pgfplots@every@addplot@path@prepare% % - \pgfplots@check@for@default@plot@mark% + \pgfplots@markers@check@for@default@plot@mark% % % % This is done here. The \pgfplots@drawmodes is ONLY set @@ -10329,12 +10480,14 @@ \pgfplots@install@path@replacements % \pgfplots@stacked@initialise - \global\pgfplotslistnewempty\pgfplots@stored@markerlist + \pgfplots@markers@visphase@after@axis@prepare \ifpgfplots@stacked@reverse % This here applies any scaling trafos and assembles a % NEW \pgfplots@stored@plotlist! \pgfplots@stacked@finalize@stored@plots \fi + % make it ungrouped: we must not destroy group nesting of tikz + % path instructions at this point. \pgfplotslistforeachungrouped\pgfplots@stored@plotlist\as\pgfplots@loc@TMPa{% \expandafter\pgfplots@stored@plotlist@EXTRACTENTRY\pgfplots@loc@TMPa %\message{^^JProcessing stored plot with precommand '\meaning\pgfplots@stored@current@precmd';^^J pgfplots@plotcmd '\meaning\pgfplots@stored@current@cmd'^^J postcommand '\meaning\pgfplots@stored@current@postcmd'^^J}% @@ -10354,49 +10507,10 @@ % % this code here means we REALLY have a plotting % command! - \begingroup - \pgfplotsonlayer{\pgfkeysvalueof{/pgfplots/on layer}}{a plot or graphical element (or inherited from the axis)}% - \pgfkeysvalueof{/pgfplots/execute at begin plot visualization}% - \ifpgfplots@threedim - \else - % axis = 2d and plot=3d is forbidden here. - \pgfplots@curplot@threedimfalse - \fi - \pgfplots@execute@at@begin@plot@visualization@internal - \scope[current plot style] % this does set BOTH pgfplots and tikz options. - % FIXME : what, precisely, was the motivation to use a - % scope here? It causes a lot of problems and - % work-arounds. Is it worth the effort!? - \ifpgfplots@clip - \if2\pgfplots@clipmode - % clip=true and 'clip mode=individual' - \pgfplots@clippath@install{\pgfusepath{clip}}% - \fi - \fi - % - \pgfplots@prepare@layered@graphics@marks - % - % de-activate the FPU here! I fear its number - % format may cause errors when used in low-level - % routines. - \pgfkeys{/pgf/fpu=false}% - % - \ifpgfplots@stacked@reverse - % has already been processed above, in \pgfplots@stacked@finalize@stored@plots. - \pgfplots@stacked@draw@reversed@plot - \else - % modifies \pgfplots@stored@markerlist if necessary. - \expandafter\pgfplots@coord@stream@finalize@storedcoords@START\pgfplots@stored@current@data\pgfplots@EOI - \fi - \endscope - \pgfplots@execute@at@end@plot@visualization@internal - \pgfkeysvalueof{/pgfplots/execute at end plot visualization}% - \endpgfplotsonlayer - \endgroup + \pgfplots@stored@plotlist@visualize@selected@phases{\pgfplots@visphase@names}% \fi \pgfplots@stored@current@postcmd }% - \global\pgfplotslistnewempty\pgfplots@stored@plotlist% delete contents. % \pgfplots@END@init@and@draw@axis % @@ -10483,6 +10597,102 @@ \aftergroup\pgfplots@cell@picture@remembered } +% visualizes selected phases. +% +% #1 a comma-separated list of selected phases. May be empty. +% This is typically \pgfplots@visphase@names. The content will be +% expanded, i.e. it can be a macro. +\def\pgfplots@stored@plotlist@visualize@selected@phases#1{% + \begingroup + \pgfplotsonlayer{\pgfkeysvalueof{/pgfplots/on layer}}{a plot or graphical element (or inherited from the axis)}% + \pgfkeysvalueof{/pgfplots/execute at begin plot visualization}% + \ifpgfplots@threedim + \else + % axis = 2d and plot=3d is forbidden here. + \pgfplots@curplot@threedimfalse + \fi + \pgfplots@execute@at@begin@plot@visualization@internal + % + \pgfplots@markers@prepare@layered@graphics@marks + % + \edef\pgfplots@current@phases{#1}% + % + % "boolean shouldExecuteClippedPart = \ifpgfplots@loc@tmp" + \pgfplots@loc@tmptrue + \ifx\pgfplots@current@phases\pgfutil@empty + \ifx\pgfplots@markers@visphase@name\pgfplots@markers@visphase@name@afterpath@clipped + % some special handling.... ok; start phase. + \else + \pgfplots@loc@tmpfalse + \fi + \fi + \ifpgfplots@loc@tmp + \expandafter\pgfplots@stored@plotlist@visualize@clippedpart\expandafter{\pgfplots@current@phases}% + \fi + % + \ifx\pgfplots@markers@visphase@name\pgfplots@markers@visphase@name@afterpath@unclipped + \scope[current plot style]% + \pgfplots@visphase@markers + \endscope + \fi + \pgfplots@execute@at@end@plot@visualization@internal + \pgfkeysvalueof{/pgfplots/execute at end plot visualization}% + \endpgfplotsonlayer + \endgroup +} + +% #1: the list of phases to execute. This excludes marker phases. +\def\pgfplots@stored@plotlist@visualize@clippedpart#1{% + \scope[current plot style] % this does set BOTH pgfplots and tikz options. + % FIXME : what, precisely, was the motivation to use a + % scope here? It causes a lot of problems and + % work-arounds. Is it worth the effort!? + \ifpgfplots@clip + \if2\pgfplots@clipmode + % clip=true and 'clip mode=individual' + \pgfplots@clippath@install{\pgfusepath{clip}}% + \fi + \fi + % + \def\pgfplots@loc@TMPa{#1}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + % skip. there is a case in which this can happen and makes + % sense: if + % \pgfplots@markers@visphase@name=\pgfplots@markers@visphase@name@afterpath@clipped + \else + % Standard visualization phases. See + % \pgfplotssurveyphase@set@visphase@names for a discussion about + % their intented use-case. + \pgfplotsutilforeachcommasep{#1}\as\pgfplots@visphase@name{% + \begingroup + \pgfutil@ifundefined{pgfplots@visphase@\pgfplots@visphase@name}{% + \pgfplots@error{Illegal state encountered: unknown visualization phase \pgfplots@visphase@name}% + }{% + \csname pgfplots@visphase@\pgfplots@visphase@name\endcsname + }% + \endgroup + }% + \fi + % + % marker visualization phase (one of the available ones): + \ifx\pgfplots@markers@visphase@name\pgfplots@markers@visphase@name@afterpath@clipped + \pgfplots@visphase@markers + \fi + % + \endscope +}% + +\def\pgfplots@visphase@markers{% + \begingroup + \pgfplots@markers@install@plotmark@handler + \let\pgfplots@visphase@name=\pgfplotsaxis@visphase@name@markers + \expandafter\pgfplots@coord@stream@finalize@storedcoords@START\pgfplots@stored@current@data\pgfplots@EOI + \endgroup +}% + +\def\pgfplots@execute@at@end@plot@visualization@internal{% +}% + \def\pgfplots@beforenode{% \pgfplots@sys@beforenode }% diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex new file mode 100644 index 00000000000..62d56ad1915 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.errorbars.code.tex @@ -0,0 +1,598 @@ +%-------------------------------------------- +% +% 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 <http://www.gnu.org/licenses/>. +% +%-------------------------------------------- + + +% the \addplot commands assign +% \pgfplots@current@point@error@x@plus +% \pgfplots@current@point@error@x@minus +% \pgfplots@current@point@error@y@plus +% \pgfplots@current@point@error@y@minus +% \pgfplots@current@point@error@z@plus +% \pgfplots@current@point@error@z@minus +% +% the error bar processing takes these values as input, adds them to +% the current coordinates where applicable and according the the error +% bar configuration and overwrites these macros. +% +% Then, these values are registered as "visualization depends on", +% i.e. they will be available for every visualization phase. +% +% The visualization phase, in turn, expects these values. More +% precisely, a separate visualization phase called +% \pgfplotsaxis@visphase@name@errorbars is started. This installs the +% plot handler \pgfplots@errorbars@plot@handler and does the same job +% as it would for normal plot handlers. +% +\def\pgfplots@errorbars@survey@begin{% + % + \pgfplots@errorbars@prepare@value@serialization + % + % Now, prepare the coordinate processing for errorbars: + \pgfplots@PREPARE@errorbar@processing@in@dir x% + \pgfplots@PREPARE@errorbar@processing@in@dir y% + \ifpgfplots@curplot@threedim + \pgfplots@PREPARE@errorbar@processing@in@dir z% + \else + \let\pgfplots@PREPARE@errorbar@process@z=\relax + \fi +} + +\def\pgfplots@errorbars@survey@end{% + \pgfplots@streamerrorbarend +}% + +\def\pgfplots@errorbars@survey@point{% + % This thing gets the 'current@point@...' context, + % that means + % \pgfplots@current@point@[xy] + % \pgfplots@current@point@[xy]@error + % \pgfplots@current@point@[xy]@unfiltered + \pgfplots@PREPARE@errorbar@process@x% + \pgfplots@PREPARE@errorbar@process@y% + \pgfplots@PREPARE@errorbar@process@z% +} + +\def\pgfplots@errorbars@visphase@begin{% + \pgfplots@errorbars@prepare@value@serialization +} + +\def\pgfplots@errorbars@visphase@end{% +}% + +\def\pgfplots@errorbars@visphase@point{% +}% + +\def\pgfplots@errorbars@prepare@value@serialization{% + \if0\pgfplots@errorbars@xdirection + \else + \pgfplotsset{% + visualization depends on=value \pgfplots@current@point@error@x@plus\as\pgfplots@current@point@error@x@plus, + visualization depends on=value \pgfplots@current@point@error@x@minus\as\pgfplots@current@point@error@x@minus, + }% + \fi + \if0\pgfplots@errorbars@ydirection + \else + \pgfplotsset{% + visualization depends on=value \pgfplots@current@point@error@y@plus\as\pgfplots@current@point@error@y@plus, + visualization depends on=value \pgfplots@current@point@error@y@minus\as\pgfplots@current@point@error@y@minus, + }% + \fi + \ifpgfplots@curplot@threedim + \if0\pgfplots@errorbars@zdirection + \else + \pgfplotsset{% + visualization depends on=value \pgfplots@current@point@error@z@plus\as\pgfplots@current@point@error@z@plus, + visualization depends on=value \pgfplots@current@point@error@z@minus\as\pgfplots@current@point@error@z@minus, + }% + \fi + \fi +}% + +% Prepares a macro \pgfplots@PREPARE@process@errorbar@for@dir##1 +% which can then be used to process error bars. The macro will be +% \relax if error bars are disabled for #1. +% +% #1: either x, y or z. +% +% POSTCONDITION: +% the macro \pgfplots@PREPARE@errorbar@process@#1 will be defined. +% It is supposed to be used inside of the pgfplots streaming methods +% and depends on the arguments +% \pgfplots@current@point@[xyz] +% \pgfplots@current@point@[xyz]@unfiltered +% \pgfplots@current@point@[xyz]@error +% The '@unfilterered' arguments are needed for log plots. I do not +% want to compute exp(current@point@[xyz]) again. +\def\pgfplots@PREPARE@errorbar@processing@in@dir#1{% + \pgfplots@PREPARE@errorbar@processing@in@dir@reset#1% + % + \if0\csname pgfplots@errorbars@#1direction\endcsname + % no error bars. Ok. Do nothing here. + \expandafter\let\csname pgfplots@PREPARE@errorbar@process@#1\endcsname=\relax + \else + % + % The routine which is invoked for every reported input + % coordinate is \pgfplots@process@errorbar@for. + % + % This here prepares its helper macros for direction '#1': + % + % More precisely, it prepared + % + % ##1 is either '+' or '-': + % \pgfplots@PREPARE@errorbar@process@x@##1 + % \pgfplots@PREPARE@errorbar@process@y@##1 + % \pgfplots@PREPARE@errorbar@process@z@##1 + % + \pgfplots@if{pgfplots@#1islinear}{% + \ifcase\csname pgfplots@errorbars@#1mode\endcsname\relax + % fixed absolute error. + \pgfplotscoordmath{#1}{parsenumber}{\csname pgfplots@errorbars@#1fixed\endcsname}% + \expandafter\let\csname pgfplots@error@coord@#1\endcsname=\pgfmathresult + \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% + \if +##1% + \def\pgfplots@loc@TMPb{add}% + \else + \def\pgfplots@loc@TMPb{subtract}% + \fi + \pgfplotscoordmath{#1}{op}{\pgfplots@loc@TMPb}{% + {\csname pgfplots@current@point@#1\endcsname}% + {\csname pgfplots@error@coord@#1\endcsname}% + }% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplots@PREPARE@errorbar@stream@it@#1##1% + }% + \or% fixed relative error: + \pgfplotscoordmath{#1}{parsenumber}{\csname pgfplots@errorbars@#1rel\endcsname}% + \let\pgfplots@loc@TMPb=\pgfmathresult + % + % +1: + \pgfplotscoordmath{#1}{parsenumber}{1}% + \let\pgfplots@loc@TMPa=\pgfmathresult + % + % Prepare '1 + err': + \pgfplotscoordmath{#1}{op}{add}{% + {\pgfplots@loc@TMPa}% + {\pgfplots@loc@TMPb}% + }% + \expandafter\let\csname pgfplots@error@coord@#1@+\endcsname=\pgfmathresult + % + % Prepare '1 - err': + \pgfplotscoordmath{#1}{op}{subtract}{% + {\pgfplots@loc@TMPa}% + {\pgfplots@loc@TMPb}% + }% + \expandafter\let\csname pgfplots@error@coord@#1@-\endcsname=\pgfmathresult + % + \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% + \pgfplotscoordmath{#1}{op}{multiply}{% + {\csname pgfplots@current@point@#1\endcsname} + {\csname pgfplots@error@coord@#1@##1\endcsname}% + }% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplots@PREPARE@errorbar@stream@it@#1##1% + }% + \or% explicit absolute: + \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% + \edef\pgfplots@error@coord{\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname}% + \ifx\pgfplots@error@coord\pgfutil@empty + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + \else + \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@error@coord}% + \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% + \let\pgfplots@error@coord=\pgfmathresult + % remember result here - will be used in case + % of '+' AND '-' error bars: + %\expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname=\pgfmathresult + \if +##1% + \def\pgfplots@loc@TMPb{add}% + \else + \def\pgfplots@loc@TMPb{subtract}% + \fi + \pgfplotscoordmath{#1}{op}{\pgfplots@loc@TMPb}{% + {\csname pgfplots@current@point@#1\endcsname}% + {\pgfplots@error@coord}% + }% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplots@PREPARE@errorbar@stream@it@#1##1% + }{% + % input is unbounded. Skip it. + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + }% + \fi + }% + \or% explicit relative: + \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% + \edef\pgfplots@error@coord{\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname}% + \ifx\pgfplots@error@coord\pgfutil@empty + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + \else + \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@error@coord}% + \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% + \let\pgfplots@error@coord=\pgfmathresult + % compute ' 1 + value' or '1-value': + \pgfplotscoordmath{#1}{one}% + \if +##1% + \def\pgfplots@loc@TMPb{add}% + \else + \def\pgfplots@loc@TMPb{subtract}% + \fi + \pgfplotscoordmath{#1}{op}{\pgfplots@loc@TMPb}{% + {\pgfmathresult}% + {\pgfplots@error@coord}% + }% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplotscoordmath{#1}{op}{multiply}{% + {\csname pgfplots@current@point@#1\endcsname} + {\pgfplots@error@coord}% + }% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplots@PREPARE@errorbar@stream@it@#1##1% + }{% + % input is unbounded. Skip it. + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + }% + \fi + }% + \fi + }{% + % LOGARITHMIC scaling. All errors are interpreted as + % log(x +- e_x) + % or + % log( x*(1+-e_x) ) + % + % That means any input argument is + % given in log base e and in fixed point. + % Furthermore, we expect the '@unfiltered' keys to be + % present (I don't want to apply 'exp' again!). + % + \ifcase\csname pgfplots@errorbars@#1mode\endcsname + % fixed absolute, log( x +- e_x ) + % + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@errorbars@#1fixed\endcsname}% + \expandafter\let\csname pgfplots@error@coord@#1\endcsname=\pgfmathresult + \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@current@point@#1@unfiltered\endcsname}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \if +##1% + \def\pgfplots@loc@op{add}% + \else + \def\pgfplots@loc@op{subtract}% + \fi + \pgfplotscoordmath{default}{op}{\pgfplots@loc@op}{% + {\pgfplots@loc@TMPa}% + {\csname pgfplots@error@coord@#1\endcsname}% + }% + \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% + \pgfplotscoordmath{#1}{log}{\pgfmathresult}% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplots@PREPARE@errorbar@stream@it@#1##1% + }% + \or% fixed relative, log( x ( 1+-e_x ) ) = log(x) + log(1+-e_x) + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@errorbars@#1rel\endcsname}% + \let\pgfplots@loc@TMPb=\pgfmathresult + % + % +1: + \pgfplotscoordmath{default}{one}% + \let\pgfplots@loc@TMPa=\pgfmathresult + % + % Prepare '1 + err': + \pgfplotscoordmath{default}{op}{add}{{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}}% + \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% + \pgfplotscoordmath{#1}{log}{\pgfmathresult}% + \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% + }{% + % 1 + err <= 0 and log(1+err) is undefined: + \pgfplotscoordmath{default}{tostring}{\pgfplots@loc@TMPb}% + \pgfplots@error{Sorry, log(1 + \pgfmathresult) is undefined. Please provide a different argument for '/pgfplots/error bar/#1 fixed relative'.}% + \let\pgfmathresult=\pgfutil@empty + }% + \expandafter\let\csname pgfplots@error@coord@#1@+\endcsname=\pgfmathresult + % + % Prepare '1 - err': + \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}}% + \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% + \pgfplotscoordmath{#1}{log}{\pgfmathresult}% + \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% + }{% + % 1 - err <= 0 and log(1+err) is undefined: + \pgfplotscoordmath{default}{tostring}{\pgfplots@loc@TMPb}% + \pgfplots@error{Sorry, log(1 - \pgfmathresult) (\pgfplots@loc@TMPa - \pgfplots@loc@TMPb) is undefined. Please provide a different argument for '/pgfplots/error bar/#1 fixed relative'.}% + \let\pgfmathresult=\pgfutil@empty + }% + \expandafter\let\csname pgfplots@error@coord@#1@-\endcsname=\pgfmathresult + % + \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% + \expandafter\ifx\csname pgfplots@current@point@#1@##1\endcsname\pgfutil@empty + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + \else + \pgfmath@basic@add@ + {\csname pgfplots@current@point@#1\endcsname} + {\csname pgfplots@error@coord@#1@##1\endcsname}% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplots@PREPARE@errorbar@stream@it@#1##1% + \fi + }% + \or% explicit absolute + % log( x +- e_x ) + \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% + \edef\pgfplots@error@coord{\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname}% + \ifx\pgfplots@error@coord\pgfutil@empty + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + \else + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@error@coord}% + \pgfplotscoordmath{default}{if is bounded}{\pgfmathresult}{% + \let\pgfplots@error@coord=\pgfmathresult + % remember result here - will be used in case + % of '+' AND '-' error bars: + %\expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname=\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@current@point@#1@unfiltered\endcsname}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \if +##1% + \def\pgfplots@loc@op{add}% + \else + \def\pgfplots@loc@op{subtract}% + \fi + \pgfplotscoordmath{default}{op}{\pgfplots@loc@op}{% + {\pgfplots@loc@TMPa}% + {\pgfplots@error@coord}% + }% + \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% + \pgfplotscoordmath{#1}{log}{\pgfmathresult}% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplots@PREPARE@errorbar@stream@it@#1##1% + }{% + % input is unbounded. Skip it. + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + }% + \fi + }% + % + \or% explicit relative: + % log( x ( 1+-e_x ) ) = log(x) + log(1+-e_x) + \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% + \edef\pgfplots@error@coord{\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname}% + \ifx\pgfplots@error@coord\pgfutil@empty + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + \else + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@error@coord}% + \pgfplotscoordmath{default}{if is bounded}{\pgfmathresult}{% + \let\pgfplots@error@coord=\pgfmathresult + % remember result here - will be used in case + % of '+' AND '-' error bars: + %\expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus##1\endcsname=\pgfmathresult + % + \pgfplotscoordmath{default}{one}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \if +##1% + \def\pgfplots@loc@op{add}% + \else + \def\pgfplots@loc@op{subtract}% + \fi + \pgfplotscoordmath{default}{op}{\pgfplots@loc@op}{% + {\pgfplots@loc@TMPa}% + {\pgfplots@error@coord}% + }% + \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% + \pgfplotscoordmath{#1}{log}{\pgfmathresult}% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% + \pgfplotscoordmath{#1}{op}{add}{% + {\csname pgfplots@current@point@#1\endcsname} + {\pgfplots@error@coord}% + }% + \let\pgfplots@error@coord=\pgfmathresult + \pgfplots@PREPARE@errorbar@stream@it@#1##1% + }{% + % -> log( <= 0 ) -> do nothing. + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + }% + }{% + % input is unbounded - do nothing. + \pgfplots@PREPARE@errorbar@stream@it@empty#1##1% + }% + \fi + }% + % + \fi + }% + \ifcase\csname pgfplots@errorbars@#1direction\endcsname + % none + \or + % plus + \expandafter\edef\csname pgfplots@PREPARE@errorbar@process@#1\endcsname{% + \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname+% + }% + \or + % minus + \expandafter\edef\csname pgfplots@PREPARE@errorbar@process@#1\endcsname{% + \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname-% + }% + \or + % both + \expandafter\edef\csname pgfplots@PREPARE@errorbar@process@#1\endcsname{% + \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname+% + \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname-% + }% + \fi + \fi +} + +\def\pgfplots@PREPARE@errorbar@processing@in@dir@reset#1{% + \expandafter\let\csname pgfplots@current@point@error@#1@plus\endcsname=\pgfutil@empty + \expandafter\let\csname pgfplots@current@point@error@#1@minus\endcsname=\pgfutil@empty +}% + +% #1: one of x,y, or z +% #2: either '+' or '-', denotes the direction of the error +% bar +% +% PRECONDITION: \pgfplots@error@coord contains the value which is to +% be stored as \pgfplots@current@point@error@#1@plus or +% \pgfplots@current@point@error@#1@minus +% +% POSTCONDITION: limits updated and +% \pgfplots@current@point@error@#1@plus or +% \pgfplots@current@point@error@#1@minus +% is defined. +\def\pgfplots@PREPARE@errorbar@stream@it@#1#2{% + \ifx\pgfplots@error@coord\pgfutil@empty + \else + \expandafter\let\expandafter\pgfplots@current@point@@old\csname pgfplots@current@point@#1\endcsname + \expandafter\let\csname pgfplots@current@point@#1\endcsname=\pgfplots@error@coord + \pgfplotsaxisupdatelimitsforcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z + \expandafter\let\csname pgfplots@current@point@#1\endcsname=\pgfplots@current@point@@old + \fi + % + % ... and remember what we need! This value will be stored as + % "visualization depends on" + \expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus#2\endcsname=\pgfplots@error@coord +}% + +\def\pgfplots@PREPARE@errorbar@stream@it@empty#1#2{% + % ... and remember what we need! This value will be stored as + % "visualization depends on" + \expandafter\let\csname pgfplots@current@point@error@#1@\pgfplots@errorbars@plusminus#2\endcsname=\pgfutil@empty +} + +\def\pgfplots@errorbars@plusminus#1{% + \if#1+% + plus% + \else + minus% + \fi +}% + +% A dummy plot handler which is used in a special visualization phase +% for error bars. +\def\pgfplots@errorbars@plot@handler{% + \gdef\pgf@plotstreamstart{% + \pgfplots@streamerrorbar@directdraw + \global\let\pgf@plotstreampoint=\pgfplots@errorbars@plot@handler@point + \global\let\pgf@plotstreamspecial=\relax + \global\let\pgf@plotstreamend=\pgfplots@streamerrorbarend + \pgfplots@streamerrorbarstart + }% +}% + +\def\pgfplots@errorbars@plot@handler@point#1{% + \pgf@process{#1}% + \edef\pgfplots@errorbars@src{(\the\pgf@x,\the\pgf@y)}% + % + % we want to allow scatter plots to vary depending on 'point + % meta'. This here does not hurt: + \pgfplotsaxisvisphasetransformpointmetaifany + % + \pgfplots@errorbars@plot@handler@point@dir x% + \pgfplots@errorbars@plot@handler@point@dir y% + \ifpgfplots@curplot@threedim + \pgfplots@errorbars@plot@handler@point@dir z% + \fi +} + +% #1: one of x,y, or z +% #2: the error bar value in dir #1 +% output: \pgfplots@errorbars@trg in the form (<x>,<y>,<z>) +\def\pgfplots@errorbars@to@pt#1#2{% + \begingroup + \expandafter\let\csname pgfplots@current@point@#1\endcsname=#2% + \ifpgfplots@curplot@threedim + \edef\pgfplotsretval{(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z)}% + \else + \edef\pgfplotsretval{(\pgfplots@current@point@x,\pgfplots@current@point@y)}% + \fi + \global\let\pgfplots@errorbars@trg=\pgfplotsretval + \endgroup +}% + +% #1: a <\macro> containing the value +% #2: either x,y, or z +\def\pgfplots@errorbars@plot@handler@point@dir@@#1#2{% + \ifx#1\pgfutil@empty + \else + \pgfplotsaxisvisphasetransformcoordinateentry{#2}{#1}% + \pgfplots@errorbars@to@pt{#2}{\pgfmathresult}% + \pgfplots@streamerrorbarcoords{\pgfplots@errorbars@src}{\pgfplots@errorbars@trg}% + \fi +}% + +\def\pgfplots@errorbars@plot@handler@point@dir#1{% + \ifcase\csname pgfplots@errorbars@#1direction\endcsname + % none + \or + % plus + \expandafter\pgfplots@errorbars@plot@handler@point@dir@@\csname pgfplots@current@point@error@#1@plus\endcsname#1% + \or + % minus + \expandafter\pgfplots@errorbars@plot@handler@point@dir@@\csname pgfplots@current@point@error@#1@minus\endcsname#1% + \or + % both + \expandafter\pgfplots@errorbars@plot@handler@point@dir@@\csname pgfplots@current@point@error@#1@plus\endcsname#1% + \expandafter\pgfplots@errorbars@plot@handler@point@dir@@\csname pgfplots@current@point@error@#1@minus\endcsname#1% + \fi +}% + +\def\pgfplots@streamerrorbarstart{% +}% +\def\pgfplots@streamerrorbarend{% +}% +\def\pgfplots@streamerrorbarcoords#1#2{% +}% + +\def\pgfplots@streamerrorbar@directdraw{% + \def\pgfplots@streamerrorbarstart{}% + \def\pgfplots@streamerrorbarend{}% + \def\pgfplots@streamerrorbarcoords##1##2{% + \pgfplots@errorbar@draw{##1}{##2}% + }% +} + +% This thing here shall draw all error bar commands listed in '#2'. +% +% It will be invoked when any plotting commands take effect (that +% means all limits are computed; the axis has been drawn, +% transformations are set up...) +\def\pgfplots@errorbars@finishwithstyleoptions[#1]#2{% + \scope[/pgfplots/.cd,#1,/pgfplots/every error bar]% it uses the /pgfplots/.unknown handler + #2% + \endscope +} + +\def\pgfplots@errorbar@draw#1#2{% + \begingroup + \pgfkeysvalueof{/pgfplots/error bars/draw error bar/.@cmd}{#1}{#2}\pgfeov% + \endgroup +}% + +\def\pgfplotsaxis@visphase@name@errorbars{errorbars} + +\expandafter\def\csname pgfplots@visphase@\pgfplotsaxis@visphase@name@errorbars\endcsname{% + \pgfplots@errorbars@finishwithstyleoptions[]{% + \let\tikz@plot@handler=\pgfplots@errorbars@plot@handler + \expandafter\pgfplots@coord@stream@finalize@storedcoords@START\pgfplots@stored@current@data\pgfplots@EOI + }% +}% + +\endinput diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex new file mode 100644 index 00000000000..902dcecfe14 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.markers.code.tex @@ -0,0 +1,361 @@ +%-------------------------------------------- +% +% 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 <http://www.gnu.org/licenses/>. +% +%-------------------------------------------- + +\def\pgfplots@markers@visphase@name@none{none}% +\def\pgfplots@markers@visphase@name@afterpath@clipped{afterpath@clipped}% +\def\pgfplots@markers@visphase@name@afterpath@unclipped{afterpath@unclipped}% +\def\pgfplots@markers@visphase@name@endaxis@unclipped{endaxis@unclipped}% + +% defines \pgfplotsretval to contain the visualization phase used by +% the current plot. +\def\pgfplots@markers@survey@set@visphasename{% + \begingroup + % + % this validates+normalizes \tikz@plot@mark: + \pgfplots@markers@check@for@default@plot@mark + \ifx\tikz@plot@mark\pgfutil@empty + \ifpgfplots@scatterplotenabled + \def\b@pgfplots@has@plot@mark{1}% + \else + \def\b@pgfplots@has@plot@mark{0}% + \fi + \else + \def\b@pgfplots@has@plot@mark{1}% + \fi + % + % this sets \ifpgfplots@clip@marker@paths: + \pgfplots@markers@prepare@layered@graphics@marks + % + \if0\b@pgfplots@has@plot@mark + % no markers. Ok, we do not need a visualization phase for + % markers. + \let\pgfplotsretval=\pgfplots@markers@visphase@name@none + \else + \ifpgfplots@clip@marker@paths + \let\pgfplotsretval=\pgfplots@markers@visphase@name@afterpath@clipped + \else + \if2\pgfplots@clipmode + % clip mode=individual: + \let\pgfplotsretval=\pgfplots@markers@visphase@name@afterpath@unclipped + \else + % clip mode=global + \let\pgfplotsretval=\pgfplots@markers@visphase@name@endaxis@unclipped + \fi + \fi + \fi + % + \pgfmath@smuggleone\pgfplotsretval + \endgroup +}% + +\def\pgfplots@markers@visphase@after@axis@prepare{% + \global\pgfplotslistnewempty\pgfplots@stored@markerlist +} + +% Draw any markers for which drawing has been postponed. +% +% The motivation here is that markers should be drawn on top of +% their plots, and AFTER the clip path. +% +\def\pgfplots@markers@visphase@after@axis{% + \begingroup + \pgfplotslistforeach\pgfplots@stored@plotlist\as\pgfplots@loc@TMPa{% + \expandafter\pgfplots@stored@plotlist@EXTRACTENTRY\pgfplots@loc@TMPa +%\message{^^JProcessing stored plot with precommand '\meaning\pgfplots@stored@current@precmd';^^J pgfplots@plotcmd '\meaning\pgfplots@stored@current@cmd'^^J postcommand '\meaning\pgfplots@stored@current@postcmd'^^J}% +%\message{DATA: '\meaning\pgfplots@stored@current@data';^^J}% + % The precmd sets all required variables needed to + % finalize a plot. + % @see the stream preparation routines. + \pgfplots@stored@current@precmd + \ifx\pgfplots@markers@visphase@name\pgfplots@markers@visphase@name@endaxis@unclipped + \ifx\pgfplots@stored@current@cmd\pgfutil@empty + % Ah: some \pgfplotsextra command like \draw,\path, + % \node or even \scope or \endscope. + % Has been done earlier. + \else + \begingroup + % reconfigure... + \pgfkeyssetvalue{/pgfplots/on layer}{\pgfkeysvalueof{/pgfplots/mark layer}}% + % + % choose the one that is necessary for us here: + \let\pgfplots@markers@visphase@name=\pgfplots@markers@visphase@name@afterpath@unclipped + % + % provide an empty list of phase names here in order + % to turn off standard visualization phases: they + % have been applied already. + \pgfplots@stored@plotlist@visualize@selected@phases{}% + \endgroup + \fi + \pgfplots@stored@current@postcmd + \fi + }% + \endgroup +} + +\def\pgfplots@execute@at@begin@plot@visualization@internal{% + \global\let\pgfplots@stored@markerlist@last=\relax +}% + +\def\pgfplots@markers@install@plotmark@handler{% + % note: I can't check on tikz@transform because it can be '\relax'. + \pgfplots@gettikzinternal@keyval{mark indices}{tikz@mark@list}{}% + \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}% + % + % + % do not reset \tikz@options: draw color may be acquired + % from 'current plot style' + %\let\tikz@options=\pgfutil@empty% + \let\tikz@transform=\pgfutil@empty% + \tikzset{every plot/.try,every mark}% + % + % This sets colors: + \tikz@options + % + % This sets the \iftikz@mode@draw etc: + %\tikz@mode + % FIXME: using 'color=blue' will NOT activate filltrue! + % So: if 'tikz@mode' *contains* 'fillfalse', I know what to do... + % but all other cases are not clear + %-------------------------------------------------- + % \iftikz@mode@draw + % \else + % % Override the marker codes: force 'draw=none' + % % even if the markers likes to be stroked: + % \let\pgfusepathqfillstroke=\pgfusepathqfill + % \fi + % \iftikz@mode@fill + % \else + % % Override the marker codes: force 'fill=none' + % % even if the markers likes to be filled: + % \let\pgfusepathqfillstroke=\pgfusepathqstroke + % \fi + %-------------------------------------------------- + % + % this here is the MAIN marker code. + % It may be modified if scatter plot is enabled, see below. + \def\pgfplots@loc@TMPa{% + % the transformation has been reset before processing plot + % marks. + % Consequently, it applies only transformation options in "every mark". + \tikz@transform + \pgfuseplotmark{\tikz@plot@mark}% + }% + \ifpgfplots@scatterplotenabled + % Scatter plots work like this: + % + % <compute per-point meta info> + % /pgfplots/scatter/@pre marker code + % <marker code, lowlevel> + % /pgfplots/scatter/@post marker code + % + % -> that's all. The Rest is configurable with style which + % (re)define '@pre marker code' and '@post marker code' (see + % the docs for details). + % + % Prepare arguments for '@pre/@post' macros: + \t@pgfplots@toka={% + \begingroup + % prepare programmatic access to '/data point/x' etc: + \pgfplotspointgetcoordinates + \pgfplotsaxisvisphasetransformpointmeta + \pgfkeysvalueof{/pgfplots/scatter/@pre marker code/.@cmd}\pgfeov + }% + \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}% + \t@pgfplots@tokc={% + \pgfkeysvalueof{/pgfplots/scatter/@post marker code/.@cmd}\pgfeov + \endgroup + }% + \edef\pgfplots@loc@TMPa{% + \the\t@pgfplots@toka + \the\t@pgfplots@tokb + \the\t@pgfplots@tokc + }% + \if r\pgfplots@scatter@position + % scatter/position=relative + % + % tikz transforms the coordinate system such that "(0,0)" + % is the point where the mark should be placed. + \else + % scatter/position=absolute + % + % ah - we do not want tikz's transformation. + % + % Disable it by means of \aftergroup hackery: + \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}% + \xdef\pgfplots@scatter@plot@mark{% + \noexpand\begingroup + \the\t@pgfplots@tokc + \noexpand\endgroup + }% + \def\pgfplots@loc@TMPa{\aftergroup\pgfplots@scatter@plot@mark}% + \fi + \fi + \def\pgfplots@loc@TMPb##1{% + \ifx\tikz@mark@list\pgfutil@empty% + \pgfplothandlermark{##1}% + \else + \pgfplothandlermarklisted{##1}{\tikz@mark@list}% + \fi + }% + \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa}}% + \edef\pgfplots@basiclevel@plothandler{\the\t@pgfplots@tokc}% + \expandafter\def\expandafter\pgfplots@basiclevel@plothandler\expandafter{% + \pgfplots@basiclevel@plothandler + \global\let\pgfplots@markers@plotstreamstart=\pgf@plotstreamstart + \def\pgf@plotstreamstart{% + \pgfplots@markers@plotstreamstart + \global\let\pgfplots@markers@mark@handler@@=\pgf@plotstreampoint + \global\let\pgf@plotstreampoint=\pgfplots@markers@mark@handler + }% + }% + \let\tikz@plot@handler=\pgfplots@basiclevel@plothandler + % + \pgfplots@basiclevel@plothandler + % +}% + +\def\pgfplots@markers@mark@handler#1{% + \ifpgfplots@clip + % check for clip marker paths: + \pgfplotsaxisifcontainspoint{\pgfplots@markers@mark@handler@@{#1}}{}% + \else + \pgfplots@markers@mark@handler@@{#1} + \fi +}% + + +\def\pgfplots@markers@check@for@default@plot@mark{% + % make sure there is a mark set! + \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}% + \def\pgfplots@loc@TMPa{none}% + \ifx\tikz@plot@mark\pgfplots@loc@TMPa + % this here happens only in older versions of pgf. + \let\tikz@plot@mark\pgfutil@empty + \fi + \ifx\tikz@plot@mark\pgfutil@empty + \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler + \ifx\pgfplots@basiclevel@plothandler\pgfplothandlerdiscard + % oh, the "only marks" plot handler-- and no plot mark!? + % what's that!? + \ifpgfplots@scatterplotenabled + % scatter handles this in /pgfplots/scatter/true + % automatically. + \else + % that appears to be nonsense... + \def\tikz@plot@mark{*}% + \fi + \fi + \fi +}% + + +% Used inside of /pgfplots/scatter/classes : +\def\pgfplots@scatter@classes@pre@marker@code{% + \pgfutil@ifundefined{pgfp@scatter@class@\pgfplotspointmeta}{% + \let\pgfplots@loc@TMPa=\pgfplotspointmeta + % + % ups - no styles available? Maybe something went + % wrong with the 'scatter src' key. Check whether it + % was accidentally a numerical style: + \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname + \else + % ok, be fault tolerant and round to an integer: + \pgfplotscoordmath{meta}{tofixed}{\pgfplotspointmeta}% + \begingroup + \pgfkeys{/pgf/number format/precision=0}% + \expandafter\pgfmathroundto\expandafter{\pgfmathresult}% + \pgfmath@smuggleone\pgfmathresult + \endgroup + \let\pgfplotspointmeta=\pgfmathresult + \fi + % now, check again: + \pgfutil@ifundefined{pgfp@scatter@class@\pgfplotspointmeta}{% + % still not possible? Then, try truncating the + % number to an integer. + \expandafter\pgfutil@in@\expandafter.\expandafter{\pgfplotspointmeta}% + \ifpgfutil@in@ + \def\pgfplots@loc@TMPb##1.##2\relax{\def\pgfplotspointmeta{##1}}% + \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\relax + \fi + % now, check again: + \pgfutil@ifundefined{pgfp@scatter@class@\pgfplotspointmeta}{% + \pgfutil@ifundefined{pgfp@scatter@WARNING@\pgfplotspointmeta}{% + \pgfplotswarning{scatter classes no such class}\pgfplotspointmeta\pgfeov% + \expandafter\gdef\csname pgfp@scatter@WARNING@\pgfplotspointmeta\endcsname{ALREADY CHECKED}% + }{}% + \def\pgfplots@loc@TMPa{}% + }{% + \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@scatter@class@\pgfplotspointmeta\endcsname + }% + }{% + \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@scatter@class@\pgfplotspointmeta\endcsname + }% + }{% + \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@scatter@class@\pgfplotspointmeta\endcsname + }% + \expandafter\scope\expandafter[\pgfplots@loc@TMPa]% +}% + +% validates 'mark layer' such that it can be queried afterwards. +\def\pgfplots@markers@prepare@layered@graphics@marks{% + \ifpgfplots@layered@graphics + \pgfkeysgetvalue{/pgfplots/mark layer}\pgfplots@loc@TMPa + \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \def\pgfplots@loc@TMPa{auto}% + \fi + \def\pgfplots@loc@TMPb{auto}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + % COMBINATION: 'activate layers,mark layer=auto' --> keep + % backwards compatibility with 'clip marker paths' + % -> nothing to do. + \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty% + \else + % mark layer=like plot + \def\pgfplots@loc@TMPb{like plot}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + % draw markers together with their plot (no matter + % on which layer): + \pgfplots@clip@marker@pathstrue + \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty% + \else + \edef\pgfplots@loc@TMPb{\pgfkeysvalueof{/pgfplots/on layer}}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + % nothing to do; they are on the same layer + % anyway: (this is the same as 'like plot' + \pgfplots@clip@marker@pathstrue + \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty% + \else + % OK, marks will be plotted on their own layer. + \fi + \fi + \fi + \else + % reset its value: + \pgfkeyslet{/pgfplots/mark layer}\pgfutil@empty% + \fi +}% + diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex index e7d7f3ec550..7268171ec4b 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex @@ -5,10 +5,10 @@ \catcode`\:=12 \catcode`\+=12 \catcode`\-=12 -\gdef\pgfplotsrevision{1.8-3-gaf58a29} -\gdef\pgfplotsversion{1.8} -\gdef\pgfplotsversiondatetime{2013-03-17 18:23:16 +0100} -\gdef\pgfplotsrevisiondatetime{2013-03-23 10:05:25 +0100} +\gdef\pgfplotsrevision{1.9} +\gdef\pgfplotsversion{1.9} +\gdef\pgfplotsversiondatetime{2013-10-03 13:31:02 +0200} +\gdef\pgfplotsrevisiondatetime{2013-10-03 13:31:02 +0200} \gdef\pgfplots@glob@TMPa#1-#2-#3 #4\relax{#1/#2/#3} \xdef\pgfplotsversiondate{\expandafter\pgfplots@glob@TMPa\pgfplotsversiondatetime\relax} \xdef\pgfplotsrevisiondate{\expandafter\pgfplots@glob@TMPa\pgfplotsrevisiondatetime\relax} diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex index 32c2cdacd0c..478c3fe2bef 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.scaling.code.tex @@ -3004,7 +3004,18 @@ \def\pgfplots@compute@number@order@for@trafo@isfloat#1\tocount#2{% \pgfmathfloatparsenumber{#1}% \expandafter\pgfmathfloat@decompose@E\pgfmathresult\relax#2\relax - \advance#2 by1\relax + \advance#2 by1 +} + +\def\pgfplots@if@is@float@zero#1#2#3{% + \pgfmathfloatparsenumber{#1}% + \pgfmathfloatgetflags{\pgfmathresult}{\c@pgf@countd}% + \ifnum\c@pgf@countd=0 % + % ah - it *is* 0.0: + #2% + \else + #3% + \fi } % Initialises the data scale transformation such that it is optimal @@ -3051,21 +3062,43 @@ \let\pgfplots@data@min@float=\pgfmathresult \fi % -%\message{minmax = [\pgfplots@data@min@float,\pgfplots@data@max@float]}% +%\message{minmax = [\pgfplots@data@min@float,\pgfplots@data@max@float]^^J}% % Step 1: compute 'm', the data order - \pgfplots@compute@number@order@for@trafo@isfloat - \pgfplots@data@min@float - \tocount\data@cur@order - % - \data@max@order=\data@cur@order + \pgfplots@if@is@float@zero{\pgfplots@data@min@float}{% + \pgfplots@if@is@float@zero{\pgfplots@data@max@float}{% + \data@max@order=1 % both are zero. ok. + % Note that this is '1' due to backwards + % compatibility. + }{% + % one of them is zero. Take the other one! + \pgfplots@compute@number@order@for@trafo@isfloat + \pgfplots@data@max@float + \tocount\data@cur@order + \data@max@order=\data@cur@order + }% + }{% + \pgfplots@if@is@float@zero{\pgfplots@data@max@float}{% + % one of them is zero. Take the other one! + \pgfplots@compute@number@order@for@trafo@isfloat + \pgfplots@data@min@float + \tocount\data@cur@order + \data@max@order=\data@cur@order + }{% + % none of them is zero. Compute MAX: + \pgfplots@compute@number@order@for@trafo@isfloat + \pgfplots@data@min@float + \tocount\data@cur@order + \data@max@order=\data@cur@order + \pgfplots@compute@number@order@for@trafo@isfloat + \pgfplots@data@max@float + \tocount\data@cur@order + \ifnum\data@cur@order>\data@max@order + \data@max@order=\data@cur@order + \fi + }% + }% % - \pgfplots@compute@number@order@for@trafo@isfloat - \pgfplots@data@max@float - \tocount\data@cur@order % - \ifnum\data@cur@order>\data@max@order - \data@max@order=\data@cur@order - \fi % % Step 2: compute 'q', the #1-size of the axis. %\expandafter\ifx\csname pgfplots@#1\endcsname\pgfutil@empty @@ -3105,7 +3138,7 @@ % \data@dimen@order=3 %\fi % -%\message{Direction #1: data max order=\the\data@max@order; data dimen order=\the\data@dimen@order. }% +%\message{Direction #1: data max order=\the\data@max@order; data dimen order=\the\data@dimen@order. ^^J}% \data@EXPONENT=\data@dimen@order \advance\data@EXPONENT by-\data@max@order % Now, I introduce a loop which shall avoid cancellation of @@ -3138,7 +3171,7 @@ \pgfplotscoordmath{#1}{datascaletrafo}{\pgfplots@data@max@float}% \let\pgfplots@max@fixed=\pgfmathresult \data@tmp=\pgfplots@max@fixed pt -%\message{Current trafo EXPONENT for #1 direction: \the\data@EXPONENT; original #1 data limits: [\pgfplots@data@min@float:\pgfplots@data@max@float]; current transformed #1 limits: [\pgfplots@min@fixed:\pgfplots@max@fixed]; cancellation check max-min running...}% +%\message{Current trafo EXPONENT for #1 direction: \the\data@EXPONENT; original #1 data limits: [\pgfplots@data@min@float:\pgfplots@data@max@float]; current transformed #1 limits: [\pgfplots@min@fixed:\pgfplots@max@fixed]; cancellation check max-min running...^^J}% \ifdim\data@tmp<0pt % I need absolute values here: \multiply\data@tmp by-1\relax diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex index 81a81d41c66..5692a8abc79 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex @@ -1897,7 +1897,7 @@ \edef\pgfplotsdeclarecoordmath@{@#1@}% \pgfqkeys{/pgfplots/@declare coord math}{% initialise=, - parse=\pgfmathparse{##1}, + parse=\edef\pgfmathresult{##1}\expandafter\pgfmathparse\expandafter{\pgfmathresult}, parsenumber=\pgfmathfloatparsenumber{##1}\pgfmathfloattofixed{##1},% zero= \pgfplotscoordmath{\pgfplotscoordmathid}{parsenumber}{0}, one= \pgfplotscoordmath{\pgfplotscoordmathid}{parsenumber}{1}, @@ -2327,7 +2327,14 @@ \expandafter\edef\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname{0}% }{}, parsenumber=\pgfmathfloatparsenumber{#1}, - parse=\begingroup \pgfkeys{/pgf/fpu}\pgfmathparse{#1}\pgfmath@smuggleone\pgfmathresult\endgroup, + parse={% + \begingroup + \pgfkeys{/pgf/fpu}% + \edef\pgfmathresult{#1}% + \expandafter\pgfmathparse\expandafter{\pgfmathresult}% + \pgfmath@smuggleone\pgfmathresult + \endgroup + }, zero=\pgfmathfloatcreate{0}{0.0}{0},% one=\pgfmathfloatcreate{1}{1.0}{0},% -one=\pgfmathfloatcreate{2}{1.0}{0},% @@ -2719,9 +2726,12 @@ \let\pgfplots@current@point@y=\pgfutil@empty \let\pgfplots@current@point@z=\pgfutil@empty \let\pgfplots@current@point@meta=\pgfutil@empty - \let\pgfplots@current@point@x@error=\pgfutil@empty - \let\pgfplots@current@point@y@error=\pgfutil@empty - \let\pgfplots@current@point@z@error=\pgfutil@empty + \let\pgfplots@current@point@error@x@plus=\pgfutil@empty + \let\pgfplots@current@point@error@x@minus=\pgfutil@empty + \let\pgfplots@current@point@error@y@plus=\pgfutil@empty + \let\pgfplots@current@point@error@y@minus=\pgfutil@empty + \let\pgfplots@current@point@error@z@plus=\pgfutil@empty + \let\pgfplots@current@point@error@z@minus=\pgfutil@empty \pgfplots@coord@stream@start@}% \def\pgfplots@coord@stream@end{\pgfplots@coord@stream@end@} @@ -3017,7 +3027,6 @@ % - For now, the following things are global / local: % - point coordinate list: local % - meta data limits: global, -% - recorded error bar commands: local, % - what about stacked plot stuff: appears to be a combination % of local/global. % - all that will be serialized and written into @@ -3035,6 +3044,9 @@ \def\pgfplotsaxisfilteredcoordsaway{0}% \def\pgfplotsaxisplothasjumps{0}% % + % FIXME : these macros should not be redefined! They are defined + % in \pgfplots@prepare@axis@API right during \begin{axis}... they + % probably shouldn't be changed. \ifpgfplots@curplot@threedim \let\pgfplotsaxisupdatelimitsforcoordinate=\pgfplotsaxisupdatelimitsforcoordinatethreedim \let\pgfplotsaxisparsecoordinate=\pgfplotsaxisparsecoordinatethreedim @@ -3115,14 +3127,7 @@ \E\pgfplotsaxissurveysetpointmeta % \ifpgfplots@errorbars@enabled - % This thing gets the 'current@point@...' context, - % that means - % \pgfplots@current@point@[xy] - % \pgfplots@current@point@[xy]@error - % \pgfplots@current@point@[xy]@unfiltered - \E\pgfplots@PREPARE@errorbar@process@x% - \E\pgfplots@PREPARE@errorbar@process@y% - \E\pgfplots@PREPARE@errorbar@process@z% + \E\pgfplots@errorbars@survey@point \fi % \ifpgfplots@collect@firstplot@astick @@ -3239,32 +3244,16 @@ \pgfkeyssetvalue{/data point/z}{\pgfplots@current@point@z}% \pgfkeyssetvalue{/data point/meta}{\pgfplots@current@point@meta}% % - \pgfplots@prepare@visualization@dependencies - % - \ifpgfplots@errorbars@enabled - % prepare error bar processing. - % - % The actual implementation stores every final drawing command - % into a list. - % - % Prepare that list: - \pgfplots@streamerrorbar@recordto{\pgfplots@recordederrorbar}% - \pgfplots@streamerrorbarstart - % - % Now, prepare the coordinate processing for errorbars: - \pgfplots@PREPARE@errorbar@processing@in@dir x% - \pgfplots@PREPARE@errorbar@processing@in@dir y% - \ifpgfplots@curplot@threedim - \pgfplots@PREPARE@errorbar@processing@in@dir z% - \else - \let\pgfplots@PREPARE@errorbar@process@z=\relax - \fi - \else - \let\pgfplots@recordederrorbar=\pgfutil@empty - \fi \ifpgfplots@stackedmode \pgfplots@stacked@beginplot \fi + \ifpgfplots@errorbars@enabled + % prepare error bar processing. + \pgfplots@errorbars@survey@begin + \fi + % + % + \pgfplots@prepare@visualization@dependencies % % Inside of math expressions, 'x', 'y' and 'z' expand to the % current x,y and z coords respectively. Introduce these (and some @@ -3386,10 +3375,10 @@ \global\let\pgfplots@data@zmax=\pgfplots@zmax \fi \ifpgfplots@errorbars@enabled - \pgfplots@streamerrorbarend + \pgfplots@errorbars@survey@end \fi \ifpgfplots@stackedmode - \pgfplots@stacked@endplot + \pgfplots@stacked@survey@endplot \fi \ifx\pgfplots@currentplot@firstcoord@x\pgfutil@empty \pgfplotswarning{plot without coordinates}\pgfeov% @@ -3421,6 +3410,14 @@ % \pgfplotsplothandlerserializestateto\pgfplots@loc@TMPa \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}% + % + \pgfplots@markers@survey@set@visphasename + \let\pgfplots@markers@visphase@name=\pgfplotsretval + % + \pgfplotssurveyphase@set@visphase@names{#1}% + \let\pgfplots@visphase@names=\pgfplotsretval + % + % % SERIALIZE RESULT: % % everything which has been accumulated so far (including the @@ -3450,6 +3447,10 @@ \noexpand\def\noexpand\pgfplots@current@point@coordindex{\noexpand\the\noexpand\c@pgfplots@coordindex}% \noexpand\def\noexpand\coordindex{\noexpand\pgfplots@current@point@coordindex}% valid inside of \addplot % + \ifpgfplots@stackedmode + \pgfplots@stacked@serialized@commands + \fi + % % save the possibly prepare/adjusted plot % variables [FIXME: move after \pgfplots@define@currentplotstyle@as ?]: \noexpand\pgfkeyssetvalue{/pgfplots/samples}{\pgfplots@plot@samples}% @@ -3473,6 +3474,8 @@ \noexpand\xdef\noexpand\pgfplots@metamax{\pgfplots@metamax}% \noexpand\def\noexpand\pgfplotspointmetainputhandler{\pgfplotspointmetainputhandler}% \noexpand\def\noexpand\pgfplots@serialized@state@plothandler{\the\t@pgfplots@tokb}% + \noexpand\def\noexpand\pgfplots@markers@visphase@name{\pgfplots@markers@visphase@name}% + \noexpand\def\noexpand\pgfplots@visphase@names{\pgfplots@visphase@names}% \noexpand\def\noexpand\pgfplotsaxisfilteredcoordsaway{\pgfplotsaxisfilteredcoordsaway}% \noexpand\def\noexpand\pgfplotsaxisplothasjumps{\pgfplotsaxisplothasjumps}% \noexpand\pgfkeyssetvalue{/pgfplots/on layer}{\pgfkeysvalueof{/pgfplots/on layer}}% @@ -3495,33 +3498,73 @@ }% }% % - % Ok, now assemble the POST COMMANDS. Error bar - % commands will be append here (if any) - \ifx\pgfplots@recordederrorbar\pgfutil@empty - \pgfplots@glob@TMPa - {% - % Post commands are empty here. - }% - \else - \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPa}% - \t@pgfplots@tokb=\expandafter{\pgfplots@recordederrorbar}% - \def\pgfplots@loc@TMPb{% - \noexpand\pgfplots@errorbars@finishwithstyleoptions[current plot style]{\the\t@pgfplots@tokb}% - }% - \xdef\pgfplots@glob@TMPa{ - \the\t@pgfplots@toka - { - % Post commands: append error bar commands. - \pgfplots@loc@TMPb - }% + \pgfplots@glob@TMPa + {% + % Post commands are empty here. }% - \pgfplots@glob@TMPa - \fi %^^^^^^^^^^^^ ... END of \pgfplots@addplot@enqueue@coords HERE \fi \pgfplots@end@plot }% +% Defines \pgfplotsretval to contain a comma-separated-list of +% visualization phase names. May be empty. +% +% These names will be stored as \pgfplots@visphase@names during the +% visualization phase. +% +% The role of "visualization phases" is to call the plot +% handler, and perhaps further visualization phases. +% +% This is entirely *independent* of plot marks which have their own, +% very special visualization phase. +% +% It is allowed if a plot has an empty list of visualization phases +% (common for 'only marks'). +% +% #1: any tikz path instructions after the \addplot command but before +% the semicolon. +\def\pgfplotssurveyphase@set@visphase@names#1{% + % 1. check if we need the 'default' visualization phase: + \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler + \ifx\pgfplots@basiclevel@plothandler\pgfplothandlerdiscard + % Ah - "only marks". In this case, we rely on the (special) + % marker visualization phase - there is no need for a further + % phase. + \pgfplotsutil@trim{#1}% + \ifx\pgfplotsretval\pgfutil@empty + % OK, we do not have after-path instructions. + % No need for this phase. + \let\pgfplotsretval=\pgfutil@empty + \else + % Hm. We found after-path instructions! These *need* to be + % done during the standard visualization phase. Ok, then + % do it, even if it has no uses otherwise! + \let\pgfplotsretval=\pgfplotsaxis@visphase@name@default + \fi + \else + \let\pgfplotsretval=\pgfplotsaxis@visphase@name@default + \fi + % + % 2. error bar phase: + \ifpgfplots@errorbars@enabled + \ifx\pgfplotsretval\pgfutil@empty + \else + \edef\pgfplotsretval{\pgfplotsretval,}% + \fi + % + \edef\pgfplotsretval{\pgfplotsretval \pgfplotsaxis@visphase@name@errorbars}% + \fi + % + % markers have the special phase \pgfplots@markers@visphase@name . +}% + +\def\pgfplotsaxis@visphase@name@default{default} +\def\pgfplotsaxis@visphase@name@markers{markers} + +\expandafter\def\csname pgfplots@visphase@\pgfplotsaxis@visphase@name@default\endcsname{% + \expandafter\pgfplots@coord@stream@finalize@storedcoords@START\pgfplots@stored@current@data\pgfplots@EOI +}% % A routine which transforms the current set of % \pgfplots@current@point@[xyz] values to the coordinate system @@ -3653,13 +3696,44 @@ \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, I do not know how to transform the coordinate system '\pgfplots@loc@TMPa' to '\pgfplots@loc@TMPb'. Maybe you misspelled the 'data cs'? Or perhaps the feature is not yet implemented?}\pgfeov% }% -\def\pgfplotsaxisserializedatapoint{% +% Takes the current point and serializes it into \pgfplotsretval. +% +% The serialization includes the coordinates (as returned by the +% current plot handler), the point meta, and any "visualization +% depends on" keys. +% +% See \pgfplotsaxisdeserializedatapointfrom +% +% POSTCONDITION: +% \pgfplotsretval contains everything that is needed to restore the +% current coordinate. This includes +% - the coordinate values for x,y, and z +% - any special coordinate values reported by the plot handler +% (like u,v,w for quiver plots) +% - the point meta +% - any 'visualization depends on' value +% - anything which is needed for other purposes (stacked plots have +% a plugin). +% +% The result has an EXTRA SET OF BRACES which needs to be dealt with. +% +% Example: +% \pgfplotsaxisserializedatapointtostring +% +% \expandafter\pgfplotsaxisdeserializedatapointfrom\pgfplotsretval +% +% -> note the absence of extra braces for the deserialization! +\def\pgfplotsaxisserializedatapointtostring{% \pgfplotsplothandlerserializepointto\pgfplotsaxisserializedatapoint@val \pgfplotsaxisserializedatapoint@private \t@pgfplots@toka=\expandafter{\pgfplotsaxisserializedatapoint@val}% \t@pgfplots@tokb=\expandafter{\pgfplotsretval}% - \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@tokb;\the\t@pgfplots@toka}}% - \expandafter\pgfplotsapplistXXpushback\expandafter{\pgfplots@loc@TMPa}% + \edef\pgfplotsretval{{\the\t@pgfplots@tokb;\the\t@pgfplots@toka}}% +}% + +\def\pgfplotsaxisserializedatapoint{% + \pgfplotsaxisserializedatapointtostring + \expandafter\pgfplotsapplistXXpushback\expandafter{\pgfplotsretval}% }% \def\pgfplotsaxisserializedatapoint@private{% \let\pgfplotsretval=\pgfplots@current@point@meta @@ -3805,8 +3879,12 @@ \pgfplots@prepare@visualization@depends@on@preparetype{#1}\as{#2}% % prepare the serialization: \t@pgfplots@tokb=\expandafter{\the\t@pgfplots@tokb\noexpand#2{\csname\string#2@value\endcsname}}% - \t@pgfplots@tokc=\expandafter{\the\t@pgfplots@tokc#2}% + \t@pgfplots@tokc=\expandafter{\the\t@pgfplots@tokc\csname assign@\string#2\endcsname}% }% + +% task: define a macro '\csname assign@\string#2\endcsname' which, when executed, +% defines \csname\string#2@value\endcsname such that it expands +% to a the correct value. \def\pgfplots@prepare@visualization@depends@on@preparetype#1\as#2{% \pgfplots@prepare@visualization@depends@on@preparetype@checkvalue#1value\pgfplots@EOI \ifpgfutil@in@ @@ -3817,13 +3895,13 @@ }% \def\pgfplots@prepare@visualization@depends@on@preparetype@expr#1\as#2{% \pgflibraryfpuifactive{% - \def#2{% + \expandafter\def\csname assign@\string#2\endcsname{% \pgfmathparse{#1}% \pgfmathfloattofixed{\pgfmathresult}% \expandafter\let\csname \string#2@value\endcsname=\pgfmathresult }% }{% - \def#2{% + \expandafter\def\csname assign@\string#2\endcsname{% \pgfmathparse{#1}% \expandafter\let\csname \string#2@value\endcsname=\pgfmathresult }% @@ -3838,16 +3916,28 @@ \fi }% \def\pgfplots@prepare@visualization@depends@on@preparetype@value value#1\as#2{% - \begingroup % remove spaces from #1: \pgfkeys@spdef\pgfplots@loc@TMPa{#1}% - \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa}% - \t@pgfplots@tokb=\expandafter{\csname\string#2@value\endcsname}% - \xdef\pgfplots@glob@TMPa{% - \noexpand\def\the\t@pgfplots@tokb{\the\t@pgfplots@toka}% - }% - \endgroup - \let#2=\pgfplots@glob@TMPa + % + % ok, prepare the value. + \def\pgfplots@loc@TMPb{#2}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + % oh - a special case! We have value\macro\as\macro. + \expandafter\def\csname\string#2@value\endcsname{#2}% + % + % this is special; we do not need to EXECUTE assign@\string#2 to arrive at its value. + % But we need to define #2@value as that will be stored. + \expandafter\let\csname assign@\string#2\endcsname=\relax + \else + \begingroup + \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa}% + \t@pgfplots@tokb=\expandafter{\csname\string#2@value\endcsname}% + \xdef\pgfplots@glob@TMPa{% + \noexpand\def\the\t@pgfplots@tokb{\the\t@pgfplots@toka}% + }% + \endgroup + \expandafter\let\csname assign@\string#2\endcsname=\pgfplots@glob@TMPa + \fi } \def\pgfplotsaxisdeserializedatapointfrom@private@withdeplist#1{% @@ -3881,369 +3971,6 @@ {\pgfkeyssetvalue{/pgfplots/#1 coord sorting}{-}}% }% -% Prepares a macro \pgfplots@PREPARE@process@errorbar@for@dir##1 -% which can then be used to process error bars. The macro will be -% \relax if error bars are disabled for #1. -% -% #1: either x, y or z. -% -% POSTCONDITION: -% the macro \pgfplots@PREPARE@errorbar@process@#1 will be defined. -% It is supposed to be used inside of the pgfplots streaming methods -% and depends on the arguments -% \pgfplots@current@point@[xyz] -% \pgfplots@current@point@[xyz]@unfiltered -% \pgfplots@current@point@[xyz]@error -% The '@unfilterered' arguments are needed for log plots. I do not -% want to compute exp(current@point@[xyz]) again. -\def\pgfplots@PREPARE@errorbar@processing@in@dir#1{% - \if0\csname pgfplots@errorbars@#1direction\endcsname - % no error bars. Ok. Do nothing here. - \expandafter\let\csname pgfplots@PREPARE@errorbar@process@#1\endcsname=\relax - \else - % - % Prepare a macro which invokes - % \pgfplots@streamerrorbarcoords. - % - % This involves to assign point coordinates in the correct - % ordering; prepare that: - \if x#1% - \ifpgfplots@curplot@threedim - \t@pgfplots@toka={% - {(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z)}% - {(\pgfplots@error@coord,\pgfplots@current@point@y,\pgfplots@current@point@z)} - }% - \else - \t@pgfplots@toka={% - {(\pgfplots@current@point@x,\pgfplots@current@point@y)}% - {(\pgfplots@error@coord,\pgfplots@current@point@y)} - }% - \fi - \else - \if y#1% - \ifpgfplots@curplot@threedim - \t@pgfplots@toka={% - {(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z)}% - {(\pgfplots@current@point@x,\pgfplots@error@coord,\pgfplots@current@point@z)} - }% - \else - \t@pgfplots@toka={% - {(\pgfplots@current@point@x,\pgfplots@current@point@y)}% - {(\pgfplots@current@point@x,\pgfplots@error@coord)} - }% - \fi - \else - \t@pgfplots@toka={% - {(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z)}% - {(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@error@coord)} - }% - \fi - \fi - \begingroup - % now, assemble the macro which will invoke - % \pgfplots@streamerrorbarcoords: - \let\E=\noexpand - \expandafter\xdef\csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname{% - \E\ifx\E\pgfplots@error@coord\E\pgfutil@empty - \E\else - \E\let\E\pgfplots@current@point@@old\expandafter\E\csname pgfplots@current@point@#1\endcsname - \E\let\expandafter\E\csname pgfplots@current@point@#1\endcsname=\E\pgfplots@error@coord - \E\pgfplotsaxisupdatelimitsforcoordinate\E\pgfplots@current@point@x\E\pgfplots@current@point@y\E\pgfplots@current@point@z - \E\let\expandafter\E\csname pgfplots@current@point@#1\endcsname=\E\pgfplots@current@point@@old - \E\edef\E\pgfplots@loc@TMPa{\the\t@pgfplots@toka}% - \E\expandafter\E\pgfplots@streamerrorbarcoords\E\pgfplots@loc@TMPa - \E\fi - }% - \endgroup - % - % The routine which is invoked for every reported input - % coordinate is \pgfplots@process@errorbar@for. - % - % This here prepares its helper macros for direction '#1': - \pgfplots@if{pgfplots@#1islinear}{% - \ifcase\csname pgfplots@errorbars@#1mode\endcsname\relax - % fixed absolute error. - \pgfplotscoordmath{#1}{parsenumber}{\csname pgfplots@errorbars@#1fixed\endcsname}% - \expandafter\let\csname pgfplots@error@coord@#1\endcsname=\pgfmathresult - \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% - \if +##1% - \def\pgfplots@loc@TMPb{add}% - \else - \def\pgfplots@loc@TMPb{subtract}% - \fi - \pgfplotscoordmath{#1}{op}{\pgfplots@loc@TMPb}{% - {\csname pgfplots@current@point@#1\endcsname}% - {\csname pgfplots@error@coord@#1\endcsname}% - }% - \let\pgfplots@error@coord=\pgfmathresult - \csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname - }% - \or% fixed relative error: - \pgfplotscoordmath{#1}{parsenumber}{\csname pgfplots@errorbars@#1rel\endcsname}% - \let\pgfplots@loc@TMPb=\pgfmathresult - % - % +1: - \pgfplotscoordmath{#1}{parsenumber}{1}% - \let\pgfplots@loc@TMPa=\pgfmathresult - % - % Prepare '1 + err': - \pgfplotscoordmath{#1}{op}{add}{% - {\pgfplots@loc@TMPa}% - {\pgfplots@loc@TMPb}% - }% - \expandafter\let\csname pgfplots@error@coord@#1@+\endcsname=\pgfmathresult - % - % Prepare '1 - err': - \pgfplotscoordmath{#1}{op}{subtract}{% - {\pgfplots@loc@TMPa}% - {\pgfplots@loc@TMPb}% - }% - \expandafter\let\csname pgfplots@error@coord@#1@-\endcsname=\pgfmathresult - % - \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% - \pgfplotscoordmath{#1}{op}{multiply}{% - {\csname pgfplots@current@point@#1\endcsname} - {\csname pgfplots@error@coord@#1@##1\endcsname}% - }% - \let\pgfplots@error@coord=\pgfmathresult - \csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname - }% - \or% explicit absolute: - \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% - \edef\pgfplots@error@coord{\csname pgfplots@current@point@#1@error\endcsname}% - \ifx\pgfplots@error@coord\pgfutil@empty - \else - \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@error@coord}% - \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% - \let\pgfplots@error@coord=\pgfmathresult - % remember result here - will be used in case - % of '+' AND '-' error bars: - \expandafter\let\csname pgfplots@current@point@#1@error\endcsname=\pgfmathresult - \if +##1% - \def\pgfplots@loc@TMPb{add}% - \else - \def\pgfplots@loc@TMPb{subtract}% - \fi - \pgfplotscoordmath{#1}{op}{\pgfplots@loc@TMPb}{% - {\csname pgfplots@current@point@#1\endcsname}% - {\pgfplots@error@coord}% - }% - \let\pgfplots@error@coord=\pgfmathresult - \csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname - }{% - % input is unbounded. Skip it. - }% - \fi - }% - \or% explicit relative: - \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% - \edef\pgfplots@error@coord{\csname pgfplots@current@point@#1@error\endcsname}% - \ifx\pgfplots@error@coord\pgfutil@empty - \else - \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@error@coord}% - \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% - \let\pgfplots@error@coord=\pgfmathresult - % compute ' 1 + value' or '1-value': - \pgfplotscoordmath{#1}{one}% - \if +##1% - \def\pgfplots@loc@TMPb{add}% - \else - \def\pgfplots@loc@TMPb{subtract}% - \fi - \pgfplotscoordmath{#1}{op}{\pgfplots@loc@TMPb}{% - {\pgfmathresult}% - {\pgfplots@error@coord}% - }% - \let\pgfplots@error@coord=\pgfmathresult - \pgfplotscoordmath{#1}{op}{multiply}{% - {\csname pgfplots@current@point@#1\endcsname} - {\pgfplots@error@coord}% - }% - \let\pgfplots@error@coord=\pgfmathresult - \csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname - }{% - % input is unbounded. Skip it. - }% - \fi - }% - \fi - }{% - % LOGARITHMIC scaling. All errors are interpreted as - % log(x +- e_x) - % or - % log( x*(1+-e_x) ) - % - % That means any input argument is - % given in log base e and in fixed point. - % Furthermore, we expect the '@unfiltered' keys to be - % present (I don't want to apply 'exp' again!). - % - \ifcase\csname pgfplots@errorbars@#1mode\endcsname - % fixed absolute, log( x +- e_x ) - % - \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@errorbars@#1fixed\endcsname}% - \expandafter\let\csname pgfplots@error@coord@#1\endcsname=\pgfmathresult - \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% - \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@current@point@#1@unfiltered\endcsname}% - \let\pgfplots@loc@TMPa=\pgfmathresult - \if +##1% - \def\pgfplots@loc@op{add}% - \else - \def\pgfplots@loc@op{subtract}% - \fi - \pgfplotscoordmath{default}{op}{\pgfplots@loc@op}{% - {\pgfplots@loc@TMPa}% - {\csname pgfplots@error@coord@#1\endcsname}% - }% - \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% - \pgfplotscoordmath{#1}{log}{\pgfmathresult}% - \let\pgfplots@error@coord=\pgfmathresult - \csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname - }% - \or% fixed relative, log( x ( 1+-e_x ) ) = log(x) + log(1+-e_x) - \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@errorbars@#1rel\endcsname}% - \let\pgfplots@loc@TMPb=\pgfmathresult - % - % +1: - \pgfplotscoordmath{default}{one}% - \let\pgfplots@loc@TMPa=\pgfmathresult - % - % Prepare '1 + err': - \pgfplotscoordmath{default}{op}{add}{{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}}% - \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% - \pgfplotscoordmath{#1}{log}{\pgfmathresult}% - \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% - }{% - % 1 + err <= 0 and log(1+err) is undefined: - \pgfplotscoordmath{default}{tostring}{\pgfplots@loc@TMPb}% - \pgfplots@error{Sorry, log(1 + \pgfmathresult) is undefined. Please provide a different argument for '/pgfplots/error bar/#1 fixed relative'.}% - \let\pgfmathresult=\pgfutil@empty - }% - \expandafter\let\csname pgfplots@error@coord@#1@+\endcsname=\pgfmathresult - % - % Prepare '1 - err': - \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}}% - \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% - \pgfplotscoordmath{#1}{log}{\pgfmathresult}% - \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% - }{% - % 1 - err <= 0 and log(1+err) is undefined: - \pgfplotscoordmath{default}{tostring}{\pgfplots@loc@TMPb}% - \pgfplots@error{Sorry, log(1 - \pgfmathresult) (\pgfplots@loc@TMPa - \pgfplots@loc@TMPb) is undefined. Please provide a different argument for '/pgfplots/error bar/#1 fixed relative'.}% - \let\pgfmathresult=\pgfutil@empty - }% - \expandafter\let\csname pgfplots@error@coord@#1@-\endcsname=\pgfmathresult - % - \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% - \expandafter\ifx\csname pgfplots@current@point@#1@##1\endcsname\pgfutil@empty - \else - \pgfmath@basic@add@ - {\csname pgfplots@current@point@#1\endcsname} - {\csname pgfplots@error@coord@#1@##1\endcsname}% - \let\pgfplots@error@coord=\pgfmathresult - \csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname - \fi - }% - \or% explicit absolute - % log( x +- e_x ) - \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% - \edef\pgfplots@error@coord{\csname pgfplots@current@point@#1@error\endcsname}% - \ifx\pgfplots@error@coord\pgfutil@empty - \else - \pgfplotscoordmath{default}{parsenumber}{\pgfplots@error@coord}% - \pgfplotscoordmath{default}{if is bounded}{\pgfmathresult}{% - \let\pgfplots@error@coord=\pgfmathresult - % remember result here - will be used in case - % of '+' AND '-' error bars: - \expandafter\let\csname pgfplots@current@point@#1@error\endcsname=\pgfmathresult - \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@current@point@#1@unfiltered\endcsname}% - \let\pgfplots@loc@TMPa=\pgfmathresult - \if +##1% - \def\pgfplots@loc@op{add}% - \else - \def\pgfplots@loc@op{subtract}% - \fi - \pgfplotscoordmath{default}{op}{\pgfplots@loc@op}{% - {\pgfplots@loc@TMPa}% - {\pgfplots@error@coord}% - }% - \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% - \pgfplotscoordmath{#1}{log}{\pgfmathresult}% - \let\pgfplots@error@coord=\pgfmathresult - \csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname - }{% - % input is unbounded. Skip it. - }% - \fi - }% - % - \or% explicit relative: - % log( x ( 1+-e_x ) ) = log(x) + log(1+-e_x) - \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% - \edef\pgfplots@error@coord{\csname pgfplots@current@point@#1@error\endcsname}% - \ifx\pgfplots@error@coord\pgfutil@empty - \else - \pgfplotscoordmath{default}{parsenumber}{\pgfplots@error@coord}% - \pgfplotscoordmath{default}{if is bounded}{\pgfmathresult}{% - \let\pgfplots@error@coord=\pgfmathresult - % remember result here - will be used in case - % of '+' AND '-' error bars: - \expandafter\let\csname pgfplots@current@point@#1@error\endcsname=\pgfmathresult - % - \pgfplotscoordmath{default}{one}% - \let\pgfplots@loc@TMPa=\pgfmathresult - \if +##1% - \def\pgfplots@loc@op{add}% - \else - \def\pgfplots@loc@op{subtract}% - \fi - \pgfplotscoordmath{default}{op}{\pgfplots@loc@op}{% - {\pgfplots@loc@TMPa}% - {\pgfplots@error@coord}% - }% - \pgfplotscoordmath{default}{tostring}{\pgfmathresult}% - \pgfplotscoordmath{#1}{log}{\pgfmathresult}% - \let\pgfplots@error@coord=\pgfmathresult - \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{% - \pgfplotscoordmath{#1}{op}{add}{% - {\csname pgfplots@current@point@#1\endcsname} - {\pgfplots@error@coord}% - }% - \let\pgfplots@error@coord=\pgfmathresult - \csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname - }{% - % -> log( <= 0 ) -> do nothing. - }% - }{% - % input is unbounded - do nothing. - }% - \fi - }% - % - \fi - }% - \ifcase\csname pgfplots@errorbars@#1direction\endcsname - % none - \or - % plus - \expandafter\edef\csname pgfplots@PREPARE@errorbar@process@#1\endcsname{% - \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname+% - }% - \or - % minus - \expandafter\edef\csname pgfplots@PREPARE@errorbar@process@#1\endcsname{% - \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname-% - }% - \or - % both - \expandafter\edef\csname pgfplots@PREPARE@errorbar@process@#1\endcsname{% - \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname+% - \expandafter\noexpand\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname-% - }% - \fi - \fi -} - % Defines the linear transformation macro \pgfplots@perpointmeta@trafo, % % phi : [meta_min,meta,max] -> [0,10^k] @@ -4426,6 +4153,10 @@ \fi }% +\def\pgfplotsaxisvisphasetransformpointmetaifany{% + \pgfplotsaxisifhaspointmeta{\pgfplotsaxisvisphasetransformpointmeta}{}% +} + % A looping method which applies % \pgfplots@coord@stream@start % for each coordinate '(x,y)' or '(x,y) +- (ex,ey)', @@ -4440,12 +4171,13 @@ % or % '(x,y[,z]) +- (ex,ey)' % or +% '(x,y[,z]) += (ex+,ey+) -= (ex-,ey-)' +% or % '(x,y) [meta]' % or % '(x,y) +- (ex,ey) [meta]' % separated by white-space. % -% The per-point meta is not implemented yet. \long\def\pgfplots@coord@stream@foreach#1{% \pgfplots@coord@stream@start \pgfplotsscanlinelengthinitzero @@ -4492,17 +4224,26 @@ \def\pgfplots@current@point@x{#1}% \def\pgfplots@current@point@y{#2}% \fi + \let\pgfplots@current@point@error@x@plus=\pgfutil@empty + \let\pgfplots@current@point@error@x@minus=\pgfutil@empty + \let\pgfplots@current@point@error@y@plus=\pgfutil@empty + \let\pgfplots@current@point@error@y@minus=\pgfutil@empty + \let\pgfplots@current@point@meta=\pgfutil@empty + \pgfplots@foreach@plot@coord@NEXT@cont +} +\def\pgfplots@foreach@plot@coord@NEXT@cont{% \pgfutil@ifnextchar+{% - \pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE% + \pgfplots@foreach@plot@coord@NEXT@plus% }{% - \let\pgfplots@current@point@x@error=\pgfutil@empty - \let\pgfplots@current@point@y@error=\pgfutil@empty - \pgfutil@ifnextchar[{% - \pgfplots@foreach@plot@coord@NEXT@meta + \pgfutil@ifnextchar-{% + \pgfplots@foreach@plot@coord@NEXT@minus% }{% - \let\pgfplots@current@point@meta=\pgfutil@empty - \pgfplots@coord@stream@coord - \pgfplots@foreach@plot@coord@ITERATE + \pgfutil@ifnextchar[{% + \pgfplots@foreach@plot@coord@NEXT@meta + }{% + \pgfplots@coord@stream@coord + \pgfplots@foreach@plot@coord@ITERATE + }% }% }% } @@ -4511,25 +4252,57 @@ \pgfplots@coord@stream@coord \pgfplots@foreach@plot@coord@ITERATE }% -% processing something like '(x,y) +- (error_x,error_y)' -\def\pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE+-#1({% - \pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE@% +\def\pgfplots@foreach@plot@coord@NEXT@plus+{% + \pgfutil@ifnextchar={% + \pgfplots@foreach@plot@coord@NEXT@pluseq% + }{% + \pgfplots@foreach@plot@coord@NEXT@plusminus% + }% +} +\def\pgfplots@foreach@plot@coord@NEXT@minus-=#1({% + \def\pgfplots@foreach@plot@coord@state{-}% + \pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE@ } +\def\pgfplots@foreach@plot@coord@NEXT@pluseq=#1({% + \def\pgfplots@foreach@plot@coord@state{+}% + \pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE@ +} +\def\pgfplots@foreach@plot@coord@NEXT@plusminus-#1({% + \def\pgfplots@foreach@plot@coord@state{B}% + \pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE@ +} + +% processing something like '(x,y) +- (error_x,error_y)' \def\pgfplots@foreach@plot@coord@NEXT@WITH@ERRORRANGE@#1,#2){% \ifpgfplots@plot@coords@mathparser - \pgfmathparse{#1}\let\pgfplots@current@point@x@error=\pgfmathresult - \pgfmathparse{#2}\let\pgfplots@current@point@y@error=\pgfmathresult + \pgfmathparse{#1}% + \let\pgfplots@loc@TMPb=\pgfmathresult + \pgfmathparse{#2}% + \let\pgfplots@loc@TMPc=\pgfmathresult \else - \def\pgfplots@current@point@x@error{#1}% - \def\pgfplots@current@point@y@error{#2}% + \def\pgfplots@loc@TMPb{#1}% + \def\pgfplots@loc@TMPc{#2}% \fi - \pgfutil@ifnextchar[{% - \pgfplots@foreach@plot@coord@NEXT@meta - }{% - \let\pgfplots@current@point@meta=\pgfutil@empty - \pgfplots@coord@stream@coord - \pgfplots@foreach@plot@coord@ITERATE - }% + % + \if +\pgfplots@foreach@plot@coord@state + % ah, it was a "+=" item: + \let\pgfplots@current@point@error@x@plus=\pgfplots@loc@TMPb + \let\pgfplots@current@point@error@y@plus=\pgfplots@loc@TMPc + \else + \if -\pgfplots@foreach@plot@coord@state + % ah, it was a "-=" item: + \let\pgfplots@current@point@error@x@minus=\pgfplots@loc@TMPb + \let\pgfplots@current@point@error@y@minus=\pgfplots@loc@TMPc + \else + % ah, it was a "+-" item: + \let\pgfplots@current@point@error@x@plus=\pgfplots@loc@TMPb + \let\pgfplots@current@point@error@x@minus=\pgfplots@loc@TMPb + \let\pgfplots@current@point@error@y@plus=\pgfplots@loc@TMPc + \let\pgfplots@current@point@error@y@minus=\pgfplots@loc@TMPc + \fi + \fi + % + \pgfplots@foreach@plot@coord@NEXT@cont } \def\pgfplots@foreach@plot@coord@FINISH\pgfplots@EOI{} @@ -4575,18 +4348,30 @@ \def\pgfplots@current@point@y{#2}% \def\pgfplots@current@point@z{#3}% \fi + \let\pgfplots@current@point@error@x@plus=\pgfutil@empty + \let\pgfplots@current@point@error@x@minus=\pgfutil@empty + \let\pgfplots@current@point@error@y@plus=\pgfutil@empty + \let\pgfplots@current@point@error@y@minus=\pgfutil@empty + \let\pgfplots@current@point@error@z@plus=\pgfutil@empty + \let\pgfplots@current@point@error@z@minus=\pgfutil@empty + % + \let\pgfplots@current@point@meta=\pgfutil@empty + % + \pgfplots@foreach@plot@coord@threedim@NEXT@cont +} +\def\pgfplots@foreach@plot@coord@threedim@NEXT@cont{% \pgfutil@ifnextchar+{% - \pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE% + \pgfplots@foreach@plot@coord@threedim@NEXT@plus% }{% - \let\pgfplots@current@point@x@error=\pgfutil@empty - \let\pgfplots@current@point@y@error=\pgfutil@empty - \let\pgfplots@current@point@z@error=\pgfutil@empty - \pgfutil@ifnextchar[{% - \pgfplots@foreach@plot@coord@threedim@NEXT@meta + \pgfutil@ifnextchar-{% + \pgfplots@foreach@plot@coord@threedim@NEXT@minus% }{% - \let\pgfplots@current@point@meta=\pgfutil@empty - \pgfplots@coord@stream@coord - \pgfplots@foreach@plot@coord@threedim@ITERATE + \pgfutil@ifnextchar[{% + \pgfplots@foreach@plot@coord@threedim@NEXT@meta + }{% + \pgfplots@coord@stream@coord + \pgfplots@foreach@plot@coord@threedim@ITERATE + }% }% }% } @@ -4595,27 +4380,61 @@ \pgfplots@coord@stream@coord \pgfplots@foreach@plot@coord@threedim@ITERATE }% -% processing something like '(x,y) +- (error_x,error_y)' -\def\pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE+-#1({% - \pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE@% + +\def\pgfplots@foreach@plot@coord@threedim@NEXT@plus+{% + \pgfutil@ifnextchar={% + \pgfplots@foreach@plot@coord@threedim@NEXT@pluseq% + }{% + \pgfplots@foreach@plot@coord@threedim@NEXT@plusminus% + }% +} +\def\pgfplots@foreach@plot@coord@threedim@NEXT@minus-=#1({% + \def\pgfplots@foreach@plot@coord@state{-}% + \pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE@ } +\def\pgfplots@foreach@plot@coord@threedim@NEXT@pluseq=#1({% + \def\pgfplots@foreach@plot@coord@state{+}% + \pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE@ +} +\def\pgfplots@foreach@plot@coord@threedim@NEXT@plusminus-#1({% + \def\pgfplots@foreach@plot@coord@state{B}% + \pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE@ +} +% processing something like '(x,y) +- (error_x,error_y)' \def\pgfplots@foreach@plot@coord@threedim@NEXT@WITH@ERRORRANGE@#1,#2,#3){% \ifpgfplots@plot@coords@mathparser - \pgfmathparse{#1}\let\pgfplots@current@point@x@error=\pgfmathresult - \pgfmathparse{#2}\let\pgfplots@current@point@y@error=\pgfmathresult - \pgfmathparse{#3}\let\pgfplots@current@point@z@error=\pgfmathresult + \pgfmathparse{#1}\let\pgfplots@loc@TMPb=\pgfmathresult + \pgfmathparse{#2}\let\pgfplots@loc@TMPc=\pgfmathresult + \pgfmathparse{#3}\let\pgfplots@loc@TMPd=\pgfmathresult \else - \def\pgfplots@current@point@x@error{#1}% - \def\pgfplots@current@point@y@error{#2}% - \def\pgfplots@current@point@z@error{#3}% + \def\pgfplots@loc@TMPb{#1}% + \def\pgfplots@loc@TMPc{#2}% + \def\pgfplots@loc@TMPd{#3}% \fi - \pgfutil@ifnextchar[{% - \pgfplots@foreach@plot@coord@threedim@NEXT@meta - }{% - \let\pgfplots@current@point@meta=\pgfutil@empty - \pgfplots@coord@stream@coord - \pgfplots@foreach@plot@coord@threedim@ITERATE - }% + % + \if +\pgfplots@foreach@plot@coord@state + % ah, it was a "+=" item: + \let\pgfplots@current@point@error@x@plus=\pgfplots@loc@TMPb + \let\pgfplots@current@point@error@y@plus=\pgfplots@loc@TMPc + \let\pgfplots@current@point@error@z@plus=\pgfplots@loc@TMPd + \else + \if -\pgfplots@foreach@plot@coord@state + % ah, it was a "-=" item: + \let\pgfplots@current@point@error@x@minus=\pgfplots@loc@TMPb + \let\pgfplots@current@point@error@y@minus=\pgfplots@loc@TMPc + \let\pgfplots@current@point@error@z@minus=\pgfplots@loc@TMPd + \else + % ah, it was a "+-" item: + \let\pgfplots@current@point@error@x@plus=\pgfplots@loc@TMPb + \let\pgfplots@current@point@error@x@minus=\pgfplots@loc@TMPb + \let\pgfplots@current@point@error@y@plus=\pgfplots@loc@TMPc + \let\pgfplots@current@point@error@y@minus=\pgfplots@loc@TMPc + \let\pgfplots@current@point@error@z@plus=\pgfplots@loc@TMPd + \let\pgfplots@current@point@error@z@minus=\pgfplots@loc@TMPd + \fi + \fi + % + \pgfplots@foreach@plot@coord@threedim@NEXT@cont } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 @@ -5712,9 +5531,12 @@ \pgfplots@error{sorry, plot file{#1} could not be opened}% \else \pgfplots@logfileopen{#1}% - \let\pgfplots@current@point@x@error=\pgfutil@empty - \let\pgfplots@current@point@y@error=\pgfutil@empty - \let\pgfplots@current@point@z@error=\pgfutil@empty + \let\pgfplots@current@point@error@x@plus=\pgfutil@empty + \let\pgfplots@current@point@error@x@minus=\pgfutil@empty + \let\pgfplots@current@point@error@y@plus=\pgfutil@empty + \let\pgfplots@current@point@error@y@minus=\pgfutil@empty + \let\pgfplots@current@point@error@z@plus=\pgfutil@empty + \let\pgfplots@current@point@error@z@minus=\pgfutil@empty \let\pgfplots@current@point@meta=\pgfutil@empty \ifpgfplots@curplot@threedim \let\pgfplots@addplotimpl@file@parsesingle=\pgfplots@addplotimpl@file@parsesingle@threedim @@ -6023,36 +5845,25 @@ \fi % % - \let\addplot@tbl@error@x=\pgfutil@empty - \let\addplot@tbl@error@y=\pgfutil@empty - \let\addplot@tbl@error@z=\pgfutil@empty - \ifpgfplots@errorbars@enabled - \pgfplots@addplot@table@fromstructure@preparecolname{x error}{#3}\pgfplots@plot@tbl@error@x\columnerrorx - \pgfplots@addplot@table@fromstructure@preparecolname{y error}{#3}\pgfplots@plot@tbl@error@y\columnerrory - \ifpgfplots@curplot@threedim - \pgfplots@addplot@table@fromstructure@preparecolname{z error}{#3}\pgfplots@plot@tbl@error@z\columnerrorz - \else - \let\pgfplots@plot@tbl@error@z=\pgfutil@empty - \fi - % - % now: load the columns: - \ifx\pgfplots@plot@tbl@error@x\pgfutil@empty - \else - \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@error@x}\of#3\to\addplot@tbl@error@x - \fi - \ifx\pgfplots@plot@tbl@error@y\pgfutil@empty - \else - \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@error@y}\of#3\to\addplot@tbl@error@y - \fi - \ifx\pgfplots@plot@tbl@error@z\pgfutil@empty - \else - \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@error@z}\of#3\to\addplot@tbl@error@z - \fi - % - \else - \let\pgfplots@current@point@x@error=\pgfutil@empty - \let\pgfplots@current@point@y@error=\pgfutil@empty - \let\pgfplots@current@point@z@error=\pgfutil@empty + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init x{#3}{plus}% + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init x{#3}{minus}% + % + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init y{#3}{plus}% + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init y{#3}{minus}% + % + \ifpgfplots@curplot@threedim + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init z{#3}{plus}% + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init z{#3}{minus}% + \fi + % + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load x{#3}{plus}% + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load x{#3}{minus}% + % + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load y{#3}{plus}% + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load y{#3}{minus}% + \ifpgfplots@curplot@threedim + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load z{#3}{plus}% + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load z{#3}{minus}% \fi % \let\coordindex=\pgfplotstable@coordindex@old @@ -6085,20 +5896,15 @@ \pgfplotslistpopfront\addplot@tbl@meta\to\pgfplots@current@point@meta \fi \ifpgfplots@errorbars@enabled - \ifx\addplot@tbl@error@x\pgfutil@empty - \let\pgfplots@current@point@x@error=\pgfutil@empty - \else - \pgfplotslistpopfront\addplot@tbl@error@x\to\pgfplots@current@point@x@error - \fi - \ifx\addplot@tbl@error@y\pgfutil@empty - \let\pgfplots@current@point@y@error=\pgfutil@empty - \else - \pgfplotslistpopfront\addplot@tbl@error@y\to\pgfplots@current@point@y@error - \fi - \ifx\addplot@tbl@error@z\pgfutil@empty - \let\pgfplots@current@point@z@error=\pgfutil@empty - \else - \pgfplotslistpopfront\addplot@tbl@error@z\to\pgfplots@current@point@z@error + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext x{plus}% + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext x{minus}% + % + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext y{plus}% + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext y{minus}% + % + \ifpgfplots@curplot@threedim + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext z{plus}% + \pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext z{minus}% \fi \fi \pgfplots@coord@stream@coord @@ -6108,6 +5914,61 @@ \endgroup } +% #1: x, y, or z +% #2: the table name +% #3: either "plus" or "minus" +\def\pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@init#1#2#3{% + \expandafter\let\csname addplot@tbl@error@#1@#3\endcsname=\pgfutil@empty + \expandafter\let\csname pgfplots@current@point@error@#1@#3\endcsname=\pgfutil@empty + \ifpgfplots@errorbars@enabled + % prepare with suitable expansion: + \def\pgfplots@loc@TMPa{% + \pgfplots@addplot@table@fromstructure@preparecolname{#1 error #3}{#2}}% + \edef\pgfplots@loc@TMPb{% + \expandafter\noexpand\csname pgfplots@plot@tbl@error@#1@#3\endcsname + % FIXME : these macros are UNDOCUMENTED! I suppose they are dead code... + \expandafter\noexpand\csname columnerror#1\endcsname + }% + % execute prepared statement: + % = \pgfplots@addplot@table@fromstructure@preparecolname + % {x error plus}{#2}{\pgfplots@plot@tbl@error@x@plus}{\columnerrorx} + \expandafter\pgfplots@loc@TMPa\pgfplots@loc@TMPb + % + \fi +}% + +% #1: x, y, or z +% #2: the table name +% #3: either "plus" or "minus" +\def\pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@load#1#2#3{% + \ifpgfplots@errorbars@enabled + \expandafter\ifx\csname pgfplots@plot@tbl@error@#1@#3\endcsname\pgfutil@empty + % ok, we do not have this error kind. + \else + % assemble the statement + % \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@error@x@plus}\of#2\to\addplot@tbl@error@x@plus + % -> but with suitable expansion restrictions. + \edef\pgfplots@loc@TMPa{\expandafter\noexpand\csname pgfplots@plot@tbl@error@#1@#3\endcsname}% + % + \def\pgfplots@loc@TMPb{% + \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@loc@TMPa}\of#2\to + }% + \expandafter\pgfplots@loc@TMPb\csname addplot@tbl@error@#1@#3\endcsname + \fi + \fi +}% + +% #1: x, y, or z +% #2: either "plus" or "minus" +\def\pgfplots@addplotimpl@table@fromstructure@prepare@errorbar@getnext#1#2{% + \expandafter\ifx\csname addplot@tbl@error@#1@#2\endcsname\pgfutil@empty + \expandafter\let\csname pgfplots@current@point@error@#1@#2\endcsname=\pgfutil@empty + \else + \expandafter\pgfplotslistpopfront\csname addplot@tbl@error@#1@#2\endcsname\to\pgfplots@loc@TMPa + \expandafter\let\csname pgfplots@current@point@error@#1@#2\endcsname=\pgfplots@loc@TMPa + \fi +}% + % A private helper macro which initialises the '#1 expr' keys for plot % table from structure. % @@ -6184,10 +6045,13 @@ \ifpgfplots@curplot@threedim \pgfplots@addplotimpl@table@check@createonuse@for{z}% \fi - \pgfplots@addplotimpl@table@check@createonuse@for{x error}% - \pgfplots@addplotimpl@table@check@createonuse@for{y error}% + \pgfplots@addplotimpl@table@check@createonuse@for{x error plus}% + \pgfplots@addplotimpl@table@check@createonuse@for{x error minus}% + \pgfplots@addplotimpl@table@check@createonuse@for{y error plus}% + \pgfplots@addplotimpl@table@check@createonuse@for{y error minus}% \ifpgfplots@curplot@threedim - \pgfplots@addplotimpl@table@check@createonuse@for{z error}% + \pgfplots@addplotimpl@table@check@createonuse@for{z error plus}% + \pgfplots@addplotimpl@table@check@createonuse@for{z error minus}% \fi \pgfplots@addplotimpl@table@check@createonuse@for{meta}% \fi @@ -6229,11 +6093,15 @@ \let\pgfplots@table@ERRPTR@z=\pgfutil@empty % % prepare: - \let\pgfplots@current@point@x@error=\pgfutil@empty - \let\pgfplots@current@point@y@error=\pgfutil@empty - \let\pgfplots@current@point@z@error=\pgfutil@empty + \let\pgfplots@current@point@error@x@plus=\pgfutil@empty + \let\pgfplots@current@point@error@x@minus=\pgfutil@empty + \let\pgfplots@current@point@error@y@plus=\pgfutil@empty + \let\pgfplots@current@point@error@y@minus=\pgfutil@empty + \let\pgfplots@current@point@error@z@plus=\pgfutil@empty + \let\pgfplots@current@point@error@z@minus=\pgfutil@empty % % high level user interface functions: + % FIXME : these macros are UNDOCUMENTED! I suppose they are dead code... \def\columnerrorx{\pgfplotstablereadvalueofptr{\pgfplots@table@ERRPTR@x}}% \def\columnerrory{\pgfplotstablereadvalueofptr{\pgfplots@table@ERRPTR@y}}% \def\columnerrorz{\pgfplotstablereadvalueofptr{\pgfplots@table@ERRPTR@z}}% @@ -6353,95 +6221,55 @@ \pgfplots@dereferencepointer@and@ASSIGN@z \pgfplots@dereferencepointer@and@ASSIGN@meta }% -\def\pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare{% - % this here is only evaluated ONCE. - \pgfkeysgetvalue{/pgfplots/table/x error index}\pgfplots@plot@tbl@error@xindex - \pgfkeysgetvalue{/pgfplots/table/x error}\pgfplots@plot@tbl@error@x - \pgfkeysgetvalue{/pgfplots/table/y error index}\pgfplots@plot@tbl@error@yindex - \pgfkeysgetvalue{/pgfplots/table/y error}\pgfplots@plot@tbl@error@y - \pgfkeysgetvalue{/pgfplots/table/z error index}\pgfplots@plot@tbl@error@zindex - \pgfkeysgetvalue{/pgfplots/table/z error}\pgfplots@plot@tbl@error@z - % - \def\pgfplots@table@ERRPTR@x{x error}% - \def\pgfplots@table@ERRPTR@y{y error}% - \def\pgfplots@table@ERRPTR@z{z error}% - % - \def\pgfplots@dereferencepointer@and@ASSIGN@error@x{% - \pgfplotstablereadevalptr\pgfplots@table@ERRPTR@x\pgfplots@current@point@x@error - }% - \def\pgfplots@dereferencepointer@and@ASSIGN@error@y{% - \pgfplotstablereadevalptr\pgfplots@table@ERRPTR@y\pgfplots@current@point@y@error - }% - \def\pgfplots@dereferencepointer@and@ASSIGN@error@z{% - \pgfplotstablereadevalptr\pgfplots@table@ERRPTR@z\pgfplots@current@point@z@error - }% - % - \ifx\pgfplots@plot@tbl@error@x\pgfutil@empty - \ifx\pgfplots@plot@tbl@error@xindex\pgfutil@empty - \let\pgfplots@table@ERRPTR@x=\relax% - \let\pgfplots@dereferencepointer@and@ASSIGN@error@x=\relax - \else - \pgfplotstablereadgetptrtocolindex{\pgfplots@plot@tbl@error@xindex}{\pgfplots@table@ERRPTR@x}% - \fi - \else - \pgfplotstablereadgetptrtocolname{\pgfplots@plot@tbl@error@x}{\pgfplots@table@ERRPTR@x}% - \fi + +% #1: x, y, or z +% #2: either "plus" or "minus" +\def\pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@#1#2{% + \pgfkeysgetvalue{/pgfplots/table/#1 error #2 index}\pgfplots@plot@tbl@error@index + \pgfkeysgetvalue{/pgfplots/table/#1 error #2}\pgfplots@plot@tbl@error % - \pgfkeysgetvalue{/pgfplots/table/x error expr}{\pgfplots@loc@TMPa}% - \ifx\pgfplots@loc@TMPa\pgfutil@empty - \else - \def\pgfplots@dereferencepointer@and@ASSIGN@error@x{% - \pgfmathparse{\pgfkeysvalueof{/pgfplots/table/x error expr}}% - \let\pgfplots@current@point@x@error=\pgfmathresult - }% - \fi + \expandafter\def\csname pgfplots@table@ERRPTR@#1@#2\endcsname{#1 error #2}% % + \expandafter\def\csname pgfplots@dereferencepointer@and@ASSIGN@error@#1@#2\endcsname{% + \expandafter\pgfplotstablereadevalptr\csname pgfplots@table@ERRPTR@#1@#2\endcsname\pgfmathresult + \expandafter\let\csname pgfplots@current@point@error@#1@#2\endcsname=\pgfmathresult + }% % - \ifx\pgfplots@plot@tbl@error@y\pgfutil@empty - \ifx\pgfplots@plot@tbl@error@yindex\pgfutil@empty - \let\pgfplots@table@ERRPTR@y=\relax% - \let\pgfplots@dereferencepointer@and@ASSIGN@error@y=\relax + \ifx\pgfplots@plot@tbl@error\pgfutil@empty + \ifx\pgfplots@plot@tbl@error@index\pgfutil@empty + \let\pgfplotsretval=\relax + \expandafter\let\csname pgfplots@dereferencepointer@and@ASSIGN@error@#1@#2\endcsname=\relax \else - \pgfplotstablereadgetptrtocolindex{\pgfplots@plot@tbl@error@yindex}{\pgfplots@table@ERRPTR@y}% + \pgfplotstablereadgetptrtocolindex{\pgfplots@plot@tbl@error@index}{\pgfplotsretval}% \fi \else - \pgfplotstablereadgetptrtocolname{\pgfplots@plot@tbl@error@y}{\pgfplots@table@ERRPTR@y}% + \pgfplotstablereadgetptrtocolname{\pgfplots@plot@tbl@error}{\pgfplotsretval}% \fi + \expandafter\let\csname pgfplots@table@ERRPTR@#1@#2\endcsname=\pgfplotsretval % - \pgfkeysgetvalue{/pgfplots/table/y error expr}{\pgfplots@loc@TMPa}% + \pgfkeysgetvalue{/pgfplots/table/#1 error #2 expr}{\pgfplots@loc@TMPa}% \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \def\pgfplots@dereferencepointer@and@ASSIGN@error@y{% - \pgfmathparse{\pgfkeysvalueof{/pgfplots/table/y error expr}}% - \let\pgfplots@current@point@y@error=\pgfmathresult + \expandafter\def\csname pgfplots@dereferencepointer@and@ASSIGN@error@#1@#2\endcsname{% + \pgfmathparse{\pgfkeysvalueof{/pgfplots/table/#1 error #2 expr}}% + \expandafter\let\csname pgfplots@current@point@error@#1@#2\endcsname=\pgfmathresult }% \fi - % +}% + +\def\pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare{% + % this here is only evaluated ONCE. + \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ x{plus}% + \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ x{minus}% + \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ y{plus}% + \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ y{minus}% % \ifpgfplots@curplot@threedim - \ifx\pgfplots@plot@tbl@error@z\pgfutil@empty - \ifx\pgfplots@plot@tbl@error@zindex\pgfutil@empty - \let\pgfplots@table@ERRPTR@z=\relax% - \let\pgfplots@dereferencepointer@and@ASSIGN@error@z=\relax - \else - \pgfplotstablereadgetptrtocolindex{\pgfplots@plot@tbl@error@zindex}{\pgfplots@table@ERRPTR@z}% - \fi - \else - \pgfplotstablereadgetptrtocolname{\pgfplots@plot@tbl@error@z}{\pgfplots@table@ERRPTR@z}% - \fi - % - \pgfkeysgetvalue{/pgfplots/table/z error expr}{\pgfplots@loc@TMPa}% - \ifx\pgfplots@loc@TMPa\pgfutil@empty - \else - \def\pgfplots@dereferencepointer@and@ASSIGN@error@z{% - \pgfmathparse{\pgfkeysvalueof{/pgfplots/table/z error expr}}% - \let\pgfplots@current@point@z@error=\pgfmathresult - }% - \fi - % - % + \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ z{plus}% + \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare@ z{minus}% \else - \let\pgfplots@dereferencepointer@and@ASSIGN@error@z=\relax + \let\pgfplots@dereferencepointer@and@ASSIGN@error@z@plus=\relax + \let\pgfplots@dereferencepointer@and@ASSIGN@error@z@minus=\relax \fi \let\pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare=\relax } @@ -6449,16 +6277,17 @@ \pgfplots@addplotimpl@table@fromfile@listener@ \pgfplots@addplotimpl@table@fromfile@listener@witherrors@COLLECTHIGHLEVEL@prepare % - \pgfplots@dereferencepointer@and@ASSIGN@error@x - \pgfplots@dereferencepointer@and@ASSIGN@error@y + \pgfplots@dereferencepointer@and@ASSIGN@error@x@plus + \pgfplots@dereferencepointer@and@ASSIGN@error@x@minus + % + \pgfplots@dereferencepointer@and@ASSIGN@error@y@plus + \pgfplots@dereferencepointer@and@ASSIGN@error@y@minus + % \ifpgfplots@curplot@threedim - \pgfplots@dereferencepointer@and@ASSIGN@error@z - %\edef\pgfplots@current@point{(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z)+-(\pgfplots@current@point@x@error,\pgfplots@current@point@y@error,\pgfplots@current@point@z@error) [\pgfplots@current@point@meta]}% - %\else - %\edef\pgfplots@current@point{(\pgfplots@current@point@x,\pgfplots@current@point@y)+-(\pgfplots@current@point@x@error,\pgfplots@current@point@y@error) [\pgfplots@current@point@meta]}% + \pgfplots@dereferencepointer@and@ASSIGN@error@z@plus + \pgfplots@dereferencepointer@and@ASSIGN@error@z@minus \fi \pgfplots@coord@stream@coord - %\expandafter\pgfplotsapplistXXglobalpushback\expandafter{\pgfplots@current@point}% }% \def\pgfplots@addplotimpl@table@installkeypath{% \pgfkeysdef{/pgfplots/table/.unknown}{% @@ -6656,33 +6485,6 @@ \newif\ifpgfplots@update@limits@for@one@point@ISCLIPPED \def\pgfplots@math@ONE{1.0}% -\def\pgfplots@streamerrorbarstart{% -}% -\def\pgfplots@streamerrorbarend{% -}% -\def\pgfplots@streamerrorbarcoords#1#2{% -}% - -\def\pgfplots@streamerrorbar@recordto#1{% - \def\pgfplots@streamerrorbarstart{% - \pgfplotsapplistXnewempty\pgfplots@streamerrorbar@recordto@@ - }% - \def\pgfplots@streamerrorbarend{% - \pgfplotsapplistXlet#1=\pgfplots@streamerrorbar@recordto@@ - \pgfplotsapplistXnewempty\pgfplots@streamerrorbar@recordto@@% clear - }% - \def\pgfplots@streamerrorbarcoords##1##2{% - \pgfplotsapplistXpushback{\pgfplots@errorbar@draw{##1}{##2}}\to\pgfplots@streamerrorbar@recordto@@ - }% -} -\def\pgfplots@streamerrorbar@directdraw{% - \def\pgfplots@streamerrorbarstart{}% - \def\pgfplots@streamerrorbarend{}% - \def\pgfplots@streamerrorbarcoords##1##2{% - \pgfplots@errorbar@draw{##1}{##2}% - }% -} - \def\pgfplots@invoke@prefilter{% \pgfkeysvalueof{/pgfplots/pre filter/.@cmd}\pgfeov% }% @@ -6716,7 +6518,6 @@ \pgfplotstreampoint{\pgfqpoint{#3}{#4}}% } -\newif\ifpgfplots@record@marker@stream % Takes a sequence of PREPARED coordinates which are given in floating % point representation and applies the data scaling trafo (if % necessary). @@ -6726,9 +6527,7 @@ % This stream is designed to be done at the end of an axis. % See \pgfplots@coord@stream@finalize@storedcoords@START % -% #1 : a macro which will be filled with a pgf plot stream for the -% marker points. -\def\pgfplots@coord@stream@INIT@finalize@storedcoords#1{% +\def\pgfplots@coord@stream@INIT@finalize@storedcoords{% % % Init the plot handlers: \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler @@ -6737,6 +6536,12 @@ % \pgfplots@perpointmeta@preparetrafo % + \ifpgfplots@stackedmode + \pgfplots@stacked@visphase@beginplot + \fi + \ifpgfplots@errorbars@enabled + \pgfplots@errorbars@visphase@begin + \fi \pgfplots@prepare@visualization@dependencies % \def\pgfplots@loc@TMPa{0}% <-- if (collectmark positions) @@ -6747,86 +6552,29 @@ \else \def\pgfplots@loc@TMPa{1}% \fi - \if\pgfplots@loc@TMPa0% - % mark=none : no need to waste time collecting marker - % positions. - \pgfplots@record@marker@streamfalse - \else - % we need markers. - \pgfkeysgetvalue{/pgfplots/mark layer}\pgfplots@loc@TMPa - \ifx\pgfplots@loc@TMPa\pgfutil@empty - % no special mark layer. Good! - \ifx\pgfplots@basiclevel@plothandler\pgfplothandlerdiscard - \ifpgfplots@clip@marker@paths - % only marks: draw markers directly; no need for the - % two-pass-approach. - \let\pgfplots@basiclevel@plothandler=\relax - \pgfplots@install@plotmark@handler - \pgfplots@record@marker@streamfalse - \else - % collect mark positions... they will be drawn after - % the clipped axis range. Clipping will only be - % applied to their *positions*, not their paths. - \pgfplots@record@marker@streamtrue - \fi - \else - % ok, mark!=none and we also have a plot handler. - % So, collect mark positions! - \pgfplots@record@marker@streamtrue - \fi - \else - % we need to prepare for a separate mark layer: - \pgfplots@record@marker@streamtrue - \fi - \fi - \gdef#1{}% + % % % Now, set up coordinate streams. \def\pgfplots@coord@stream@start@{% - \ifpgfplots@apply@datatrafo - \ifpgfplots@stackedmode - \pgfplots@stacked@beginplot - \fi - \fi \pgfplotsresetplothandler \pgfplots@basiclevel@plothandler \expandafter\pgfplotsplothandlerdeserializestatefrom\expandafter{\pgfplots@serialized@state@plothandler}% \pgfplotstreamstart \let\pgfplots@data@scaletrafo@result=\pgfutil@empty - \ifpgfplots@record@marker@stream - \pgfplotsapplistXXnewempty - \pgfplotsapplistXXpushback{\pgfplotstreamstart}% - %\gdef#1{\pgfplotstreamstart}% - \fi \c@pgfplots@coordindex=0 }% \def\pgfplots@coord@stream@end@{% + \ifpgfplots@stackedmode + \pgfplots@stacked@visphase@endplot + \fi + \ifpgfplots@errorbars@enabled + \pgfplots@errorbars@visphase@end + \fi \ifpgfplots@apply@datatrafo - \ifpgfplots@stackedmode - \pgfplots@stacked@endplot - \fi \pgfplots@addplot@get@named@startendpoints@command\pgfplots@loc@TMPa \pgfplots@loc@TMPa \fi \pgfplotstreamend - \ifpgfplots@record@marker@stream - \pgfplotsapplistXXpushback{\pgfplotstreamend}% - \pgfplotsapplistXXflushbuffers% - \global\let#1=\pgfplotsapplistXX - \pgfplotsapplistXXclear - %\expandafter\gdef\expandafter#1\expandafter{#1\pgfplotstreamend}% - \fi - }% - \def\pgfplots@visualize@performserialization{% - % ATTENTION: a similar thing is REPLICATED for stacked plots! - \t@pgfplots@tokb=\expandafter{\pgfplotsaxisdeserializedatapointfrom@private@lastvalue}% - \edef\pgfplots@loc@TMPa{% - \noexpand\pgfplots@stream@decode@and@apply - {\the\c@pgfplots@coordindex} - {\the\t@pgfplots@tokb}% - {\the\pgf@x}{\the\pgf@y} - }% - \expandafter\pgfplotsapplistXXpushback\expandafter{\pgfplots@loc@TMPa}% }% \begingroup \let\E=\noexpand @@ -6841,20 +6589,13 @@ % above). % % It is prepared here to eliminate if's. - \xdef\pgfplots@coord@stream@finalize@currentpt{% + \gdef\pgfplots@coord@stream@finalize@currentpt{% % - \ifpgfplots@record@marker@stream - % remember the position (x,y) for markers. - % remember it before \pgfplotstreampoint (which might change (x,y) ) - \ifpgfplots@clip - % check for clip marker paths: - \E\pgfplotsaxisifcontainspoint{\E\pgfplots@visualize@performserialization}{}% - \else - \E\pgfplots@visualize@performserialization - \fi - \fi + % NOTE: this here INVALIDATES \pgfplotlastpoint. However, we assign a correct value + % for that macro after all coordinates have been assigned - and we do it in a way + % which respects the special coordinates of 'patch plots'. % - \E\pgfplotstreampoint{}% it will simply take \pgf@x and \pgf@y! + \pgfplotstreampoint{}% it will simply take \pgf@x and \pgf@y! % \advance\c@pgfplots@coordindex by1 }% @@ -6864,7 +6605,10 @@ %\message{Prepared macro \string \pgfplotsaxisvisphasetransformcoordinate {\meaning\pgfplotsaxisvisphasetransformcoordinate}}% %\message{Prepared macro \string \pgfplots@coord@stream@finalize@currentpt {\meaning\pgfplots@coord@stream@finalize@currentpt}}% \def\pgfplots@coord@stream@coord@{% - \ifx\pgfplots@current@point@x\pgfutil@empty% this realizes `unbounded coords=jump', for example + \ifpgfplots@stackedmode + \pgfplots@stacked@visphase@stream@coord@ + \fi + \ifx\pgfplots@current@point@x\pgfutil@empty% this implements `unbounded coords=jump', for example \pgfplotsplothandlervisualizejump \else \pgfplotsaxisvisphasegetpoint @@ -6894,30 +6638,90 @@ \fi }% -\def\pgfplots@check@for@default@plot@mark{% - % make sure there is a mark set! - \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}% - \def\pgfplots@loc@TMPa{none}% - \ifx\tikz@plot@mark\pgfplots@loc@TMPa - % this here happens only in older versions of pgf. - \let\tikz@plot@mark\pgfutil@empty - \fi - \ifx\tikz@plot@mark\pgfutil@empty - \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler - \ifx\pgfplots@basiclevel@plothandler\pgfplothandlerdiscard - % oh, the "only marks" plot handler-- and no plot mark!? - % what's that!? - \ifpgfplots@scatterplotenabled - % scatter handles this in /pgfplots/scatter/true - % automatically. - \else - % that appears to be nonsense... - \def\tikz@plot@mark{*}% - \fi - \fi +% Returns the current points into the keys +% /data point/x +% /data point/y +% /data point/z +% /data point/meta +\def\pgfplotspointgetcoordinates{% + \pgfplotspointgetnormalizedcoordinates + \pgfplotspointgetcoordinatesfromnormalized +}% + +% Same as \pgfplotspointgetcoordinates, but the resulting values are +% for use in 'normalized axis cs'. +\def\pgfplotspointgetnormalizedcoordinates{% + \pgfkeysgetvalue{/data point/x untransformed}\pgfplots@loc@TMPa + \pgfkeyslet{/data point/x}\pgfplots@loc@TMPa + \pgfkeysgetvalue{/data point/y untransformed}\pgfplots@loc@TMPa + \pgfkeyslet{/data point/y}\pgfplots@loc@TMPa + \pgfkeysgetvalue{/data point/z untransformed}\pgfplots@loc@TMPa + \pgfkeyslet{/data point/z}\pgfplots@loc@TMPa + \pgfkeyslet{/data point/meta}\pgfplots@current@point@meta + \edef\pgfplots@loc@TMPa{\pgfplots@current@point@coordindex}% + \pgfkeyslet{/data point/index}\pgfplots@loc@TMPa +}% + +% Assumes that we are given normalized coordinates (i.e. those for use +% in 'normalized axis cs') and transforms them into those which are +% for use in 'axis cs'. +% +% Accepts an optional argument in square brackets, namely one or more +% options in the /pgfplots/coords key path (see below). +\def\pgfplotspointgetcoordinatesfromnormalized{% + \pgfutil@ifnextchar[{\pgfplotspointgetcoordinatesfromnormalized@opt}{\pgfplotspointgetcoordinatesfromnormalized@opt[]}% +}% + +% Defines where to expect INPUT coordinates +% \pgfplotspointgetcoordinatesfromnormalized[path=/data point/ +% would expect input coordinates +% /data point/x +% /data point/y +% /data point/z +\pgfkeyssetvalue{/pgfplots/coords/path}{/data point} + +% \pgfplotspointgetcoordinatesfromnormalized[target path=/data point/zero/ +% would write output coordinates +% /data point/zero/x +% /data point/zero/y +% /data point/zero/z +\pgfkeyssetvalue{/pgfplots/coords/target path}{\pgfkeysvalueof{/pgfplots/coords/path}} + +\def\pgfplotspointgetcoordinatesfromnormalized@opt[#1]{% + \begingroup + \pgfqkeys{/pgfplots/coords}{#1}% + \pgfkeysgetvalue{/pgfplots/coords/path}\pgfplots@path + \pgfkeysgetvalue{/pgfplots/coords/target path}\pgfplots@path@trg + \pgfkeysifdefined{\pgfplots@path/x}{}{% + \pgfplots@error{Illegal argument: '\pgfplots@path' is no valid data point path (\pgfplots@path/x does not exist)}% + }% + \pgfkeysgetvalue{\pgfplots@path/x}\pgfplots@loc@x + \pgfkeysgetvalue{\pgfplots@path/y}\pgfplots@loc@y + \pgfkeysgetvalue{\pgfplots@path/z}\pgfplots@loc@z + % + \pgfplotspointgetcoordinatesfromnormalized@transform x\pgfplots@loc@x% + \pgfplotspointgetcoordinatesfromnormalized@transform y\pgfplots@loc@y% + \ifpgfplots@threedim + \pgfplotspointgetcoordinatesfromnormalized@transform z\pgfplots@loc@z% \fi + \xdef\pgfplots@glob@TMPa{% + \noexpand\pgfkeyssetvalue{\pgfplots@path@trg/x}{\pgfplots@loc@x}% + \noexpand\pgfkeyssetvalue{\pgfplots@path@trg/y}{\pgfplots@loc@y}% + \noexpand\pgfkeyssetvalue{\pgfplots@path@trg/z}{\pgfplots@loc@z}% + }% + \endgroup + \pgfplots@glob@TMPa +}% +\def\pgfplotspointgetcoordinatesfromnormalized@transform#1#2{% + \pgfplots@if{pgfplots@#1islinear}{% + \pgfplotscoordmath{#1}{tofixed}{#2}% + }{% + \pgfplotscoordmath{#1}{exp}{#2}% + }% + \let#2=\pgfmathresult + \pgfplots@coord@inv@trafo@apply{#1}{#2}% + \let#2=\pgfmathresult }% - % Defines an optimized and matching \pgfplotsaxisvisphasetransformcoordinate % during the coordinate finalization step in \end{axis}. @@ -6976,15 +6780,24 @@ \ifpgfplots@stackedmode % all these calls work with pgfmath; no more floating point % arithmetics are applied. - \E\pgfplots@stacked@getnextzerolevelpoint - \E\pgfplots@stacked@finishpoint% - \E\pgfplots@stacked@rememberzerolevelpoint@for@next@plot{(\E\pgfplots@current@point@x,\E\pgfplots@current@point@y\ifpgfplots@threedim,\E\pgfplots@current@point@z\fi)}% + \E\pgfplots@stacked@visphasepreparedatapoint% \fi }% % \endgroup } +% Defines \pgfmathresult to contain the transformed coordinate entry +% #1: one of x,y ,or z +% #2: the input value +\def\pgfplotsaxisvisphasetransformcoordinateentry#1#2{% + \pgfplots@if{pgfplots@apply@datatrafo@#1}{% + \pgfplotscoordmath{#1}{datascaletrafo}{#2}% + }{% + \edef\pgfmathresult{#2}% + }% +}% + \def\pgfplots@addplot@get@named@startendpoints@command#1{% \ifx\pgfplots@currentplot@firstcoord@x\pgfutil@empty % empty plot. @@ -7256,6 +7069,11 @@ % state of the \ifpgfplots@apply@datatrafo boolean) % \long\def\pgfplots@coord@stream@finalize@storedcoords@START normalized coordinates #1#2;\pgfplots@EOI{% + % de-activate the FPU here! I fear its number + % format may cause errors when used in low-level + % routines. + \pgfkeys{/pgf/fpu=false}% + % \ifpgfplots@threedim \pgfplots@apply@zbuffer{#1}% \let\pgfplots@coord@stream@finalize@storedcoords@START@coords=\pgfplotsglobalretval @@ -7276,283 +7094,58 @@ \pgfplots@stored@current@cmd%[current plot style] <--- options are already set \pgfextra \tikzset{every plot/.try}% - \pgfplots@coord@stream@INIT@finalize@storedcoords\pgfplots@recorded@marker@stream% - \expandafter\pgfplots@coord@stream@foreach@NORMALIZED\expandafter{\pgfplots@coord@stream@finalize@storedcoords@START@coords}% - \pgfutil@IfUndefined{pgfplotlastpoint}{}{% - \tikz@make@last@position{\pgfplotlastpoint}% - }% + \pgfplots@coord@stream@INIT@finalize@storedcoords% + \iffalse + %\ifx\pgfplots@basiclevel@plothandler\pgfplothandlerdiscard + % discard!? Well, no need to loop through the elements. + % But there may be a good reason that we entered the phase! + % keep it. + % FIXME : this does not work, although it might be desirable. + % It fails because we need the named start/end points. + \pgfplots@coord@stream@start + \pgfplots@coord@stream@end + \else + \expandafter\pgfplots@coord@stream@foreach@NORMALIZED\expandafter{\pgfplots@coord@stream@finalize@storedcoords@START@coords}% + \fi + % + % This here ensures that the LAST position of the path is the last plotted point. + % However, the "last plotted point" is not necessarily the LAST in the sequence. + % This here is the last plotted point: + \xdef\pgfplotlastpoint{\noexpand\pgfpointanchor{current plot end}{center}}% + \tikz@make@last@position{\pgfplotlastpoint}% + % \let\pgfplots@plot@timer@args=\pgfplots@coord@stream@finalize@storedcoords@START@coords \pgfplotspointplotattimeclearcache \let\tikz@timer=\pgfplots@plot@timer% + \pgfplotsaxisvisphase@get@afterpath{#2}% + \expandafter \endpgfextra - #2; + \pgfplotsretval + ; % \pgfplotspointplotattimeclearcache % - \ifx\pgfplots@recorded@marker@stream\pgfutil@empty - \else - \pgfkeysgetvalue{/pgfplots/mark layer}\pgfplots@loc@TMPa - \ifx\pgfplots@loc@TMPa\pgfutil@empty - \ifpgfplots@clip@marker@paths - % Draw markers on top of the plot lines: - % - \pgfplots@stored@current@cmd%[current plot style] <--- options are already set - \pgfextra - \pgfplots@install@plotmark@handler - \pgfplots@recorded@marker@stream - \endpgfextra - ; - \else - % sigh... ok, store the marker list (once more again). - % They need to be drawn after the clipped area. - % - % fortunately, the serialization is not expensive. - \pgfplots@stored@REMEMBER@MARK@COMMAND - \fi - \else - % oh - we need a mark layer! - \pgfplotsonlayer{\pgfkeysvalueof{/pgfplots/mark layer}}{mark layer}% - \pgfplots@serialize@mark@command - \pgfplotsretval - \endpgfplotsonlayer - \fi - \fi - \gdef\pgfplots@recorded@marker@stream{}% clear }% -% This method MUST be called while \pgfplots@stored@plotlist is -% evaluated, that means -% - \pgfplots@stored@* commands need to be valid, -% - the precommand has already been invoked. -% - pgfplots@recorded@marker@stream exists -% - current plot style is valid -\def\pgfplots@stored@REMEMBER@MARK@COMMAND{% - \pgfplots@serialize@mark@command - \ifpgfplots@clip - \if2\pgfplots@clipmode - % clip mode=individual: - \global\let\pgfplots@stored@markerlist@last=\pgfplotsretval - \else - % clip mode=global - \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplotsretval}\to\pgfplots@stored@markerlist - \fi - \fi -}% - -\def\pgfplots@execute@at@begin@plot@visualization@internal{% - \global\let\pgfplots@stored@markerlist@last=\relax -}% - -\def\pgfplots@execute@at@end@plot@visualization@internal{% - \ifpgfplots@clip - \if2\pgfplots@clipmode - % clip=true and 'clip mode=individually' - \pgfplots@stored@markerlist@last - \global\let\pgfplots@stored@markerlist@last=\relax - \fi - \fi -}% - -\def\pgfplots@serialize@mark@command{% - \pgfkeysgetvalue{/tikz/current plot style/.@cmd}{\pgfplots@loc@TMPa}% - \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa\pgfeov}% - \t@pgfplots@tokb=\expandafter{\pgfplots@stored@current@cmd[current plot style]}% - \t@pgfplots@tokc=\expandafter{\pgfplots@recorded@marker@stream}% - \edef\pgfplots@loc@TMPa{% - \noexpand\pgfkeysvalueof{/pgfplots/execute at begin plot visualization}% - \noexpand\def\noexpand\tikz@plot@mark{\tikz@plot@mark}% make sure we restore the environment setting - \noexpand\pgfkeysdef{/tikz/current plot style}{\the\t@pgfplots@toka}% - % de-activate the FPU here if it was active! I fear its number - % format may cause errors when used in low-level - % routines. - \noexpand\pgfkeys{/pgf/fpu=false}% - % - \noexpand\xdef\noexpand\pgfplots@metamin{\pgfplots@metamin}% - \noexpand\xdef\noexpand\pgfplots@metamax{\pgfplots@metamax}% - \noexpand\def\noexpand\pgfplotspointmetainputhandler{\pgfplotspointmetainputhandler}% - % - \the\t@pgfplots@tokb - \noexpand\pgfextra - \noexpand\pgfplots@install@plotmark@handler - \the\t@pgfplots@tokc - \noexpand\endpgfextra - ;% - \noexpand\pgfkeysvalueof{/pgfplots/execute at end plot visualization}% - }% - \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa}% - \t@pgfplots@tokb=\expandafter{\pgfplots@stored@current@precmd}% - \edef\pgfplotsretval{% - \noexpand\scope% make sure that 'fill opacity' and 'dotted' styles remain local! - \the\t@pgfplots@tokb - \the\t@pgfplots@toka - \noexpand\endscope}% -}% - -\def\pgfplots@install@plotmark@handler{% - % note: I can't check on tikz@transform because it can be '\relax'. - \pgfplots@gettikzinternal@keyval{mark indices}{tikz@mark@list}{}% - \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}% - % - % - % do not reset \tikz@options: draw color may be acquired - % from 'current plot style' - %\let\tikz@options=\pgfutil@empty% - \let\tikz@transform=\pgfutil@empty% - \tikzset{every plot/.try,every mark}% - % - % This sets colors: - \tikz@options - % - % This sets the \iftikz@mode@draw etc: - %\tikz@mode - % FIXME: using 'color=blue' will NOT activate filltrue! - % So: if 'tikz@mode' *contains* 'fillfalse', I know what to do... - % but all other cases are not clear - %-------------------------------------------------- - % \iftikz@mode@draw - % \else - % % Override the marker codes: force 'draw=none' - % % even if the markers likes to be stroked: - % \let\pgfusepathqfillstroke=\pgfusepathqfill - % \fi - % \iftikz@mode@fill - % \else - % % Override the marker codes: force 'fill=none' - % % even if the markers likes to be filled: - % \let\pgfusepathqfillstroke=\pgfusepathqstroke - % \fi - %-------------------------------------------------- - \pgfplots@perpointmeta@preparetrafo - % - \pgfplots@prepare@visualization@dependencies - % - % this here is the MAIN marker code. - % It may be modified if scatter plot is enabled, see below. - \def\pgfplots@loc@TMPa{\tikz@transform\pgfuseplotmark{\tikz@plot@mark}} - \ifpgfplots@scatterplotenabled - % Scatter plots work like this: - % - % <compute per-point meta info> - % /pgfplots/scatter/@pre marker code - % <marker code, lowlevel> - % /pgfplots/scatter/@post marker code +% Defines \pgfplotsretval to contain the "after path", i.e. the +% standard tikz instructions which are to be carried out after the +% plot path. This depends on the current visualization phase and the +% available visualization phases. +\def\pgfplotsaxisvisphase@get@afterpath#1{% + \ifx\pgfplots@visphase@name\pgfplotsaxis@visphase@name@default + % ah - we have the standard visualization phase. Draw them + % here. % - % -> that's all. The Rest is configurable with style which - % (re)define '@pre marker code' and '@post marker code' (see - % the docs for details). - % - % Prepare arguments for '@pre/@post' macros: - \t@pgfplots@toka={% - \begingroup - \pgfplotsaxisvisphasetransformpointmeta - \pgfkeysvalueof{/pgfplots/scatter/@pre marker code/.@cmd}\pgfeov - }% - \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}% - \t@pgfplots@tokc={% - \pgfkeysvalueof{/pgfplots/scatter/@post marker code/.@cmd}\pgfeov - \endgroup - }% - \edef\pgfplots@loc@TMPa{% - \the\t@pgfplots@toka - \the\t@pgfplots@tokb - \the\t@pgfplots@tokc - }% - \fi - \def\pgfplots@loc@TMPb##1{% - \ifx\tikz@mark@list\pgfutil@empty% - \pgfplothandlermark{##1}% - \else - \pgfplothandlermarklisted{##1}{\tikz@mark@list}% - \fi - }% - \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa}}% - \edef\pgfplots@basiclevel@plothandler{\the\t@pgfplots@tokc}% - % - \pgfplots@basiclevel@plothandler -}% - - -% This thing here shall draw all error bar commands listed in '#2'. -% -% It will be invoked when any plotting commands take effect (that -% means all limits are computed; the axis has been drawn, -% transformations are set up...) -\def\pgfplots@errorbars@finishwithstyleoptions[#1]#2{% - \scope[/pgfplots/.cd,#1,/pgfplots/every error bar]% it uses the /pgfplots/.unknown handler - #2% - \endscope -} - -\def\pgfplots@errorbar@draw@float(#1,#2)(#3,#4){% - \ifpgfplots@apply@datatrafo@x - \pgfplotscoordmath{x}{datascaletrafo}{#1}% - \let\pgfplots@xarg=\pgfmathresult% - \pgfplotscoordmath{x}{datascaletrafo}{#3}% - \let\pgfplots@error@xarg=\pgfmathresult% - \else - \def\pgfplots@xarg{#1}% - \def\pgfplots@error@xarg{#3}% - \fi - \ifpgfplots@apply@datatrafo@y - \pgfplotscoordmath{y}{datascaletrafo}{#2}% - \let\pgfplots@yarg=\pgfmathresult% - \pgfplotscoordmath{y}{datascaletrafo}{#4}% - \let\pgfplots@error@yarg=\pgfmathresult% - \else - \def\pgfplots@yarg{#2}% - \def\pgfplots@error@yarg{#4}% - \fi - \edef\pgfplots@loc@TMPa{{(\pgfplots@xarg,\pgfplots@yarg)}{(\pgfplots@error@xarg,\pgfplots@error@yarg)}}% - \def\pgfplots@loc@TMPb{\pgfkeysvalueof{/pgfplots/error bars/draw error bar/.@cmd}}% - \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\pgfeov -} -\def\pgfplots@errorbar@draw@float@threedim(#1,#2,#3)(#4,#5,#6){% - \ifpgfplots@apply@datatrafo@x - \pgfplotscoordmath{x}{datascaletrafo}{#1}% - \let\pgfplots@xarg=\pgfmathresult% - \pgfplotscoordmath{x}{datascaletrafo}{#4}% - \let\pgfplots@error@xarg=\pgfmathresult% + % Note that the existance of (nontrivial) after path + % instructions ALWAYS implies the existance of a standard + % visualization phase (compare \pgfplotssurveyphase@set@visphase@names) + \def\pgfplotsretval{#1}% \else - \def\pgfplots@xarg{#1}% - \def\pgfplots@error@xarg{#4}% - \fi - \ifpgfplots@apply@datatrafo@y - \pgfplotscoordmath{y}{datascaletrafo}{#2}% - \let\pgfplots@yarg=\pgfmathresult% - \pgfplotscoordmath{y}{datascaletrafo}{#5}% - \let\pgfplots@error@yarg=\pgfmathresult% - \else - \def\pgfplots@yarg{#2}% - \def\pgfplots@error@yarg{#5}% - \fi - \ifpgfplots@apply@datatrafo@z - \pgfplotscoordmath{z}{datascaletrafo}{#3}% - \let\pgfplots@zarg=\pgfmathresult% - \pgfplotscoordmath{z}{datascaletrafo}{#6}% - \let\pgfplots@error@zarg=\pgfmathresult% - \else - \def\pgfplots@zarg{#3}% - \def\pgfplots@error@zarg{#6}% - \fi - \edef\pgfplots@loc@TMPa{{(\pgfplots@xarg,\pgfplots@yarg,\pgfplots@zarg)}{(\pgfplots@error@xarg,\pgfplots@error@yarg,\pgfplots@error@zarg)}}% - \def\pgfplots@loc@TMPb{\pgfkeysvalueof{/pgfplots/error bars/draw error bar/.@cmd}}% - \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\pgfeov -} - -\def\pgfplots@errorbar@draw#1#2{% - \begingroup - \ifpgfplots@apply@datatrafo - \ifpgfplots@curplot@threedim - \pgfplots@errorbar@draw@float@threedim#1#2% - \else - \pgfplots@errorbar@draw@float#1#2% - \fi - \else - \pgfkeysvalueof{/pgfplots/error bars/draw error bar/.@cmd}{#1}{#2}\pgfeov% + \let\pgfplotsretval=\pgfutil@empty \fi - \endgroup }% + % This routine is called at the begin of every plot. % It initialises a zero level stream. % @@ -7681,6 +7274,15 @@ \xdef\pgfplots@ZERO@x{\the\pgf@x}% \xdef\pgfplots@ZERO@y{\the\pgf@y}% \xdef\pgfplotspointaxisorigin{\noexpand\global\pgf@x=\pgfplots@ZERO@x\space\noexpand\global\pgf@y=\pgfplots@ZERO@y\space}% + % + % + %-------------------------------------------------- + % \pgfkeyslet{/pgfplots/axis/zero/x}\pgfplots@logical@ZERO@x + % \pgfkeyslet{/pgfplots/axis/zero/y}\pgfplots@logical@ZERO@y + % \ifpgfplots@threedim + % \pgfkeyslet{/pgfplots/axis/zero/z}\pgfplots@logical@ZERO@z + % \fi + %-------------------------------------------------- }% @@ -8841,49 +8443,3 @@ \immediate\write18{sh #1.sh > #1.out} \fi% } -% Used inside of /pgfplots/scatter/classes : -\def\pgfplots@scatter@classes@pre@marker@code{% - \pgfutil@ifundefined{pgfp@scatter@class@\pgfplotspointmeta}{% - \let\pgfplots@loc@TMPa=\pgfplotspointmeta - % - % ups - no styles available? Maybe something went - % wrong with the 'scatter src' key. Check whether it - % was accidentally a numerical style: - \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname - \else - % ok, be fault tolerant and round to an integer: - \pgfplotscoordmath{meta}{tofixed}{\pgfplotspointmeta}% - \begingroup - \pgfkeys{/pgf/number format/precision=0}% - \expandafter\pgfmathroundto\expandafter{\pgfmathresult}% - \pgfmath@smuggleone\pgfmathresult - \endgroup - \let\pgfplotspointmeta=\pgfmathresult - \fi - % now, check again: - \pgfutil@ifundefined{pgfp@scatter@class@\pgfplotspointmeta}{% - % still not possible? Then, try truncating the - % number to an integer. - \expandafter\pgfutil@in@\expandafter.\expandafter{\pgfplotspointmeta}% - \ifpgfutil@in@ - \def\pgfplots@loc@TMPb##1.##2\relax{\def\pgfplotspointmeta{##1}}% - \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\relax - \fi - % now, check again: - \pgfutil@ifundefined{pgfp@scatter@class@\pgfplotspointmeta}{% - \pgfutil@ifundefined{pgfp@scatter@WARNING@\pgfplotspointmeta}{% - \pgfplotswarning{scatter classes no such class}\pgfplotspointmeta\pgfeov% - \expandafter\gdef\csname pgfp@scatter@WARNING@\pgfplotspointmeta\endcsname{ALREADY CHECKED}% - }{}% - \def\pgfplots@loc@TMPa{}% - }{% - \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@scatter@class@\pgfplotspointmeta\endcsname - }% - }{% - \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@scatter@class@\pgfplotspointmeta\endcsname - }% - }{% - \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfp@scatter@class@\pgfplotspointmeta\endcsname - }% - \expandafter\scope\expandafter[\pgfplots@loc@TMPa]% -}% diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex index 8f41c25cd31..112e33330de 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex @@ -273,6 +273,9 @@ /pgfplots/warning/center lines upgrade required/.code={% \pgfplotsthrow@warning{Please use '\string\pgfplotsset{compat=1.8}' to enable correct label placement for 3d axes (at least compat/labels=1.8).}% }, + /pgfplots/warning/empty column name/.code 2 args={% + \pgfplotsthrow@warning{Table '#1' has an empty column name; replacing it by '#2'}% + }, } \let\pgfplotsexceptionmsg=\relax diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex index e06f73da6cc..6e9bd868185 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex @@ -2498,6 +2498,7 @@ % use colordata of ONE corner point. That's easy, not % much to do. \def\pgfplotsplothandlermesh@get@flat@color{% + \message{pgfplotsplothandlermesh@get@flat@color^^J}% \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{first vertex}% \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta \pgfplotsaxisvisphasetransformpointmeta @@ -2509,8 +2510,8 @@ % use colordata as mean of all corners for shading. \if0\pgfplotsplothandlermesh@colorinput % mesh/color input=colormap - \global\pgfplots@tmpa=0pt \def\pgfplotsplothandlermesh@get@flat@color{% + \global\pgfplots@tmpa=0pt \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{foreach cdata vertex}{% \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta \pgfplotsaxisvisphasetransformpointmeta @@ -2531,13 +2532,14 @@ \def\pgfplotsplothandlermesh@get@flat@color{% \pgfplotscolorzero{\pgfplotsplothandlermesh@explicit@color@num@comps}% \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{foreach cdata vertex}{% - % no-op here: \pgfplotsaxisvisphasetransformpointmeta \pgfplotscoloraddweighted {\pgfplotsplothandlermesh@explicit@color@num@comps}% {\pgfplotsretval} {\pgfplotsplothandlermesh@get@flat@color@@}% {\pgfplotspatchvertexmeta}% }% + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta }% \fi \fi diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex index d7352cc0970..d9bec6a91cf 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex @@ -566,10 +566,11 @@ \def\pgfplotsplothandlerserializepointto@default#1{% % Store normalized point for list: % We need - % xi,yi,zi,mi; - % where zi and mi may be empty. mi is the per-point meta - % information. It is used for per-coordinate marker - % modifications (like colormaps for scatter plots). + % xi,yi,zi; + % where zi may be empty. + % + % Note that per-point meta information is stored in + % \pgfplotsaxisserializedatapoint . \edef#1{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z}% }% @@ -1749,6 +1750,9 @@ \else \pgfmathfloatmultiply@{\pgfp@hist@totalcount@inv}{\pgfplotsplothandlerhistogram@invh}% \let\pgfp@hist@totalcount@times@h@inv=\pgfmathresult +% FIXME : this here is a patch suggestion for +% https://sourceforge.net/tracker/?func=detail&atid=1060656&aid=3609245&group_id=224188 +\let\pgfp@hist@totalcount@times@h@inv=\pgfp@hist@totalcount@inv \pgfplotsarrayforeachungrouped{pgfp@hist}\as\pgfplots@hist@count{% \pgfmathfloatparsenumber{\pgfplots@hist@count}% \pgfmathfloatmultiply@{\pgfmathresult}{\pgfp@hist@totalcount@times@h@inv}% @@ -1885,6 +1889,7 @@ contour prepared/.code={% \let\tikz@plot@handler=\pgfplotsplothandlercontourprepared \pgfqkeys{/pgfplots/contour}{% + every contour plot, #1,% }% }, @@ -1912,6 +1917,9 @@ % this is (only) used for contour filled: % data limits={(xmin,ymin,zmin,cmin) (xmax,ymax,ymax,cmax} contour/data limits/.initial=,% FIXME EXPERIMENTAL + contour/every contour plot/.style={ + /pgfplots/legend image post style={sharp plot}, + }, contour/every contour label/.style={% sloped,% transform shape,% @@ -1965,7 +1973,10 @@ % Interface to external tools: contour external/.code={% \edef\tikz@plot@handler{\noexpand\pgfplotsplothandlercontourexternal}% - \pgfqkeys{/pgfplots/contour external}{#1}% + \pgfqkeys{/pgfplots/contour external}{% + every contour plot, + #1% + }% }, contour external/scanline marks/.is choice, contour external/scanline marks/false/.code={\def\pgfplotsplothandlercontourexternal@scanlinemode{0}}, diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex index 6c89ab7016a..8118ad2ef16 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex @@ -7,7 +7,7 @@ % % It is based on Till Tantau's PGF package. % -% Copyright 2007/2008 by Christian Feuersänger. +% 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 @@ -43,7 +43,7 @@ % % The second one will be used to form zero levels for the next plot. % -% 2. At the beginning and end of each plot, the lists in 1.) are +% 2. At the beginning and end of the survey phase of each plot, the lists in 1.) are % initialised properly. % % 3.1 While plot coordinates are processed during the survey phase, the following methods @@ -57,7 +57,7 @@ % % % 3.2 during the final visualization phase, we have -% \pgfplots@stacked@finishpoint +% \pgfplots@stacked@visphasepreparedatapoint % -> takes coordinates as they will be given to Tikz. This method is % used to % - communicate zero level coordinates to Tikz @@ -72,6 +72,10 @@ \let\pgfplots@stacked@zerolevelpoint@x=\pgfutil@empty \let\pgfplots@stacked@zerolevelpoint@y=\pgfutil@empty + +% this value is populated during the survey phase. It will be copied +% to the visualization phase, i.e. it will be serialized along with +% the survey'ed state: \newif\ifpgfplots@stacked@isfirstplot \newif\ifpgfplots@stacked@isinitialised @@ -100,15 +104,18 @@ % % ATTENTION: call \pgfplots@stacked@initialise before the first call % of beginplot! +% +% ATTENTION: install this before 'visualization depends on' - it +% modifies \pgfplotsaxisserializedatapoint@private \def\pgfplots@stacked@beginplot{% %\message{pgfplots@stacked@beginplot: PLOT STARTED.}% \ifpgfplots@stacked@isinitialised \else \pgfplots@error{LOGIC ERROR: please call \string\pgfplots@stacked@initialise.}% \fi - \global\pgfplotslistnewempty\pgfplots@stacked@PGFzerolevels + \def\pgfplots@stacked@zerolevel@current{}% + \pgfplots@stacked@prepare@value@serialization % accumulate this command here for \closedcycle: - \let\pgfplots@stacked@closedcycle@impl=\pgfutil@empty \ifpgfplots@stacked@isfirstplot \global\pgfplotslistnewempty\pgfplots@stacked@zerolevellist % only work with float if its really necessary - for @@ -137,58 +144,130 @@ {\globaldefs=1 \pgfplotslistcopy\pgfplots@stacked@nextzerolevellist\to\pgfplots@stacked@zerolevellist }% - \ifpgfplots@threedim - \def\pgfplots@stacked@getnextzerolevelpoint{% - \pgfplotslistcheckempty\pgfplots@stacked@zerolevellist - \ifpgfplotslistempty - \pgfplots@stacked@wrong@count@error - \else - {\globaldefs=1 - \pgfplotslistpopfront\pgfplots@stacked@zerolevellist\to\pgfmathresult - }% - \expandafter\pgfplots@stacked@parsezerolevelpoint@threedim\pgfmathresult\relax - \fi - }% - \else - \def\pgfplots@stacked@getnextzerolevelpoint{% - \pgfplotslistcheckempty\pgfplots@stacked@zerolevellist - \ifpgfplotslistempty - \pgfplots@stacked@wrong@count@error - \else - {\globaldefs=1 - \pgfplotslistpopfront\pgfplots@stacked@zerolevellist\to\pgfmathresult - }% - \expandafter\pgfplots@stacked@parsezerolevelpoint\pgfmathresult\relax - \fi - }% - \fi + \def\pgfplots@stacked@getnextzerolevelpoint{% + \pgfplotslistcheckempty\pgfplots@stacked@zerolevellist + \ifpgfplotslistempty + \pgfplots@stacked@wrong@count@error + \else + {\globaldefs=1 + \pgfplotslistpopfront\pgfplots@stacked@zerolevellist\to\pgfmathresult + }% + \expandafter\pgfplots@stacked@parsezerolevelpoint\expandafter{\pgfmathresult}% + \fi + }% \fi \global\pgfplotslistnewempty\pgfplots@stacked@nextzerolevellist }% -\def\pgfplots@stacked@parsezerolevelpoint(#1,#2)\relax{% - \def\pgfplots@stacked@zerolevelpoint@x{#1}% - \def\pgfplots@stacked@zerolevelpoint@y{#2}% -} -\def\pgfplots@stacked@parsezerolevelpoint@threedim(#1,#2,#3)\relax{% - \def\pgfplots@stacked@zerolevelpoint@x{#1}% - \def\pgfplots@stacked@zerolevelpoint@y{#2}% - \def\pgfplots@stacked@zerolevelpoint@z{#3}% +% ATTENTION: install this before 'visualization depends on' - it +% modifies \pgfplotsaxisserializedatapoint@private +\def\pgfplots@stacked@visphase@beginplot{% +%\message{pgfplots@stacked@beginplot: VISUALIZATION OF PLOT STARTED (phase = \pgfplots@visphase@name).^^J}% + \let\pgfplots@stacked@closedcycle@impl=\pgfutil@empty + \pgfplots@stacked@prepare@value@serialization +}% + +\def\pgfplots@stacked@prepare@value@serialization{% + % This here is SIMILAR to 'visualization depends on'. + % + % The only difference is that 'visualization depends on' expands + % its arguments whereas this one here does not. + % + \pgfplotsset{% + visualization depends on=value \pgfplots@stacked@diff\as\pgfplots@stacked@diff + }% + % + % + % Modify the axis private parts such that a data point is + % serialized to the form + % {Z{<stacked zerolevel value>}{<point meta>};<x coordinate>,<y coordinate>,<z coordinate>} + % + % for example, a 2d data pont (0,1) without point meta is serialized to + % {Z{}{};0Y0.0e0],1Y1.0e0],} + % + % The deserialization looks for the magic token 'Z'. The next + % parameter is the zero level of the data point, the following one + % the "old" private serialization stuff (typically just point + % meta). + % + % Note that the zero level of a data point might have its own zero + % level (grand father) ... this would be part here as well, even + % if it is useless (?). This causes recursive references to all + % zero levels... and more memory for stacked plots. + % + % The zero'th level has an empty zero level point. + \expandafter\def\expandafter\pgfplotsaxisserializedatapoint@private\expandafter{% + \pgfplotsaxisserializedatapoint@private + \t@pgfplots@toka=\expandafter{\pgfplots@stacked@zerolevel@current}% + \t@pgfplots@tokb=\expandafter{\pgfplotsretval}% + \edef\pgfplotsretval{% + Z{\the\t@pgfplots@toka}% + {\the\t@pgfplots@tokb}% + }% + }% + % + \pgfutil@ifundefined{pgfplotsaxisdeserializedatapointfrom@private@backup@}{}{% + \pgfplots@error{Illegal internal state encountered: the stacked plots serialization preparation has been invoked twice}% + }% + \let\pgfplotsaxisdeserializedatapointfrom@private@backup@=\pgfplotsaxisdeserializedatapointfrom@private + \def\pgfplotsaxisdeserializedatapointfrom@private##1{% + \pgfplotsaxisdeserializedatapointfrom@private@stacked@##1% + }% +}% + +\def\pgfplotsaxisdeserializedatapointfrom@private@stacked@ Z#1#2{% + \def\pgfplots@stacked@zerolevel{#1}% + \pgfplotsaxisdeserializedatapointfrom@private@backup@{#2}% +}% + +\def\pgfplots@stacked@parsezerolevelpoint#1{% + \begingroup + \pgfplotsaxisdeserializedatapointfrom#1% no braces here! +% \pgfplotsplothandlerdeserializepointfrom{#1}% + \pgfplots@stacked@smuggle + \endgroup + % the value of \pgfplots@stacked@zerolevel@current will be configured as + % "visualization depends on". + % In other words: it is available later-on. + \def\pgfplots@stacked@zerolevel@current{#1}% } +\def\pgfplots@stacked@smuggle\endgroup{% + \xdef\pgfplots@glob@TMPb{% + \noexpand\def\noexpand\pgfplots@stacked@zerolevelpoint@x{\pgfplots@current@point@x}% + \noexpand\def\noexpand\pgfplots@stacked@zerolevelpoint@y{\pgfplots@current@point@y}% + \noexpand\def\noexpand\pgfplots@stacked@zerolevelpoint@z{\pgfplots@current@point@z}% + }% + \endgroup + \pgfplots@glob@TMPb +}% + \def\pgfplots@stacked@wrong@count@error{% \pgfplots@error{Sorry, pgfplots expects stacked plots to have exactly the same number of coordinates. Unfortunately, I encountered at plot with DIFFERENT NUMBERS OF COORDINATES. Please verify that 1. no point has been dropped by coordinate filters (for example log(0) or so) and 2. all plots have the same number of coordinates.}% }% -\def\pgfplots@stacked@endplot{% +\def\pgfplots@stacked@survey@endplot{% +%\message{Stacked plot survey phase end: isfirst = \ifpgfplots@stacked@isfirstplot true \else false\fi^^J}% \ifpgfplots@stacked@isfirstplot - \let\pgfplots@stacked@closedcycle@impl=\pgfplots@path@closed@cycle@std - \else \pgfplotslistcheckempty\pgfplots@stacked@zerolevellist \ifpgfplotslistempty \else \pgfplots@stacked@wrong@count@error \fi + \fi + \ifpgfplots@stacked@isfirstplot + \def\pgfplots@stacked@serialized@commands{\noexpand\pgfplots@stacked@isfirstplottrue}% + \else + \def\pgfplots@stacked@serialized@commands{\noexpand\pgfplots@stacked@isfirstplotfalse}% + \fi + \global\pgfplots@stacked@isfirstplotfalse +}% + +\def\pgfplots@stacked@visphase@endplot{% +%\message{Stacked plot vis phase end: isfirst = \ifpgfplots@stacked@isfirstplot true \else false\fi^^J}% + \ifpgfplots@stacked@isfirstplot + \let\pgfplots@stacked@closedcycle@impl=\pgfplots@path@closed@cycle@std + \else \t@pgfplots@tokc=\expandafter{\pgfplots@stacked@closedcycle@impl}% \edef\pgfplots@stacked@closedcycle@impl{% [mark=none,/utils/exec=\noexpand\pgfplots@try@mirror@plot@handler] @@ -197,7 +276,6 @@ }% \fi \global\pgfplots@stacked@isfirstplotfalse -%\message{pgfplots@stacked@endplot: PLOT ENDED}% }% % WARNING: when this method is called, NEITHER @@ -215,28 +293,116 @@ % #1: a point as (x,y) (or (x,y,z) ) \def\pgfplots@stacked@rememberzerolevelpoint@for@next@plot#1{% - \edef\pgfplots@loc@TMPa{#1}% - \expandafter\pgfplotslistpushbackglobal\pgfplots@loc@TMPa\to\pgfplots@stacked@nextzerolevellist + \expandafter\pgfplotslistpushbackglobal\expandafter{#1}\to\pgfplots@stacked@nextzerolevellist } +% Provides public access to zero levels into some key-value pairs. +% Returns the values into a set of keys in the /data point/ prefix. +% +% The values can be used in 'axis cs'. +\def\pgfplotspointgetzerolevelcoordinates{% + \pgfplotspointgetnormalizedzerolevelcoordinates + \pgfplotspointgetcoordinatesfromnormalized[path=/data point/zero]% + \pgfplotspointgetcoordinatesfromnormalized[path=/data point/diff]% +} + +% Same as \pgfplotsgetzerolevelcoordinates, but the resulting values +% are for use in 'normalized axis cs'. +% +% This works for both stacked plots and normal plots. +\def\pgfplotspointgetnormalizedzerolevelcoordinates{% + \begingroup + \ifpgfplots@stackedmode + \ifx\pgfplots@stacked@zerolevel\pgfutil@empty + \pgfplotspointgetnormalizedcoordinates% + \pgfplotsutilforeachcommasep{x,y,z}\as\pgfplots@loc@TMPa{% + \pgfkeysgetvalue{/data point/\pgfplots@loc@TMPa}\pgfplots@loc@TMPb + \expandafter\let\csname pgfplots@current@point@\pgfplots@loc@TMPa\endcsname=\pgfplots@loc@TMPb + }% + \pgfplotscoordmath{\pgfplots@stacked@dir}{zero}% + \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname\pgfmathresult% + % + \let\pgfplots@current@point@meta=\pgfutil@empty + \pgfkeyssetvalue{/data point/zero/auto}{1}% + \else + % + \expandafter\pgfplotsaxisdeserializedatapointfrom\pgfplots@stacked@zerolevel% + \pgfkeyssetvalue{/data point/zero/auto}{0}% + \fi + % + \pgfplotscoordmath{x}{zero}\let\pgfplots@stacked@diff@x=\pgfmathresult% + \pgfplotscoordmath{y}{zero}\let\pgfplots@stacked@diff@y=\pgfmathresult% + \pgfplotscoordmath{z}{zero}\let\pgfplots@stacked@diff@z=\pgfmathresult% + \pgfutil@namelet{pgfplots@stacked@diff@\pgfplots@stacked@dir}{pgfplots@stacked@diff}% + \else + % Ah - no stacked plot!? Well, than do "something useful": + \pgfplotscoordmath{x}{zero}\let\pgfplots@current@point@x=\pgfmathresult% + \pgfplotscoordmath{y}{zero}\let\pgfplots@current@point@y=\pgfmathresult% + \pgfplotscoordmath{z}{zero}\let\pgfplots@current@point@z=\pgfmathresult% + % + \pgfplotspointgetnormalizedcoordinates% + \pgfplotsutilforeachcommasep{x,y,z}\as\pgfplots@loc@TMPa{% + \pgfkeysgetvalue{/data point/\pgfplots@loc@TMPa}\pgfplots@loc@TMPb + \expandafter\let\csname pgfplots@stacked@diff@\pgfplots@loc@TMPa\endcsname=\pgfplots@loc@TMPb + }% + \pgfkeyssetvalue{/data point/zero/auto}{1}% + \fi + % + \xdef\pgfplots@glob@TMPd{% + \noexpand\pgfkeyssetvalue{/data point/zero/x}{\pgfplots@current@point@x}% + \noexpand\pgfkeyssetvalue{/data point/zero/y}{\pgfplots@current@point@y}% + \noexpand\pgfkeyssetvalue{/data point/zero/z}{\pgfplots@current@point@z}% + \noexpand\pgfkeyssetvalue{/data point/zero/meta}{\pgfplots@current@point@meta}% + \noexpand\pgfkeyssetvalue{/data point/zero/auto}{\pgfkeysvalueof{/data point/zero/auto}}% + \noexpand\pgfkeyssetvalue{/data point/diff/x}{\pgfplots@stacked@diff@x}% + \noexpand\pgfkeyssetvalue{/data point/diff/y}{\pgfplots@stacked@diff@y}% + \noexpand\pgfkeyssetvalue{/data point/diff/z}{\pgfplots@stacked@diff@z}% + }% + \endgroup + \pgfplots@glob@TMPd +% +%\message{pgfplotsgetzerolevelcoordinates returned x=\pgfkeysvalueof{/data point/zero/x}, y=\pgfkeysvalueof{/data point/zero/y}, diffx=\pgfkeysvalueof{/data point/diff/x}; diffy=\pgfkeysvalueof{/data point/diff/y}, diff=\pgfkeysvalueof{/data point/diff}^^J}% +}% + % PRECONDITION: % Is in invoked inside of a coord preparation routine, that means % - \pgfplots@current@point@[xyz] % - \ifpgfplots@curplot@threedim % are all set properly. -\def\pgfplots@stacked@finishpoint{% - \ifpgfplots@stacked@isfirstplot +\def\pgfplots@stacked@visphasepreparedatapoint{% + \ifx\pgfplots@stacked@zerolevel\pgfutil@empty + % this here is the case if we have the first encountered plot, + % i.e. the one on which others are stacked. + % + % Note that it is not necessarily the first one which is + % processed (compare reverse stacked plots). + \if\pgfplots@stacked@dir x + \edef\pgfplots@loc@TMPa{\pgfplots@logical@ZERO@x pt}% + \else + \edef\pgfplots@loc@TMPa{\pgfplots@logical@ZERO@y pt}% + \fi + \let\pgfplots@stacked@PGF@zerolevel\pgfplots@loc@TMPa + % \else - % FIXME : This needs to be converted to logical coords. + \begingroup + %\expandafter\pgfplotsplothandlerdeserializepointfrom\expandafter{\pgfplots@stacked@zerolevel}% + \expandafter\pgfplotsaxisdeserializedatapointfrom\pgfplots@stacked@zerolevel% + % + \pgfplots@stacked@logarithm@if@needed + % + % avoid endless recursion: + \let\pgfplots@stacked@visphasepreparedatapoint=\relax + \pgfplotsaxisvisphasegetpoint + \edef\pgfplots@current@point@x{\the\pgf@x}% + \edef\pgfplots@current@point@y{\the\pgf@y}% + \pgfplots@stacked@smuggle + \endgroup % - % FIXME : 3D is not supported by the low level plot interface (yet). - \pgfpointxy{\pgfplots@stacked@zerolevelpoint@x}{\pgfplots@stacked@zerolevelpoint@y}% \if\pgfplots@stacked@dir x - \edef\pgfplots@loc@TMPa{\the\pgf@x}% + \let\pgfplots@stacked@PGF@zerolevel=\pgfplots@stacked@zerolevelpoint@x% \else - \edef\pgfplots@loc@TMPa{\the\pgf@y}% + \let\pgfplots@stacked@PGF@zerolevel=\pgfplots@stacked@zerolevelpoint@y% \fi - \expandafter\pgfplotslistpushbackglobal\pgfplots@loc@TMPa\to\pgfplots@stacked@PGFzerolevels \t@pgfplots@toka=\expandafter{\pgfplots@stacked@closedcycle@impl}% \edef\pgfplots@stacked@closedcycle@impl{% (\pgfplots@stacked@zerolevelpoint@x,\pgfplots@stacked@zerolevelpoint@y)% @@ -244,6 +410,26 @@ \fi }% +% A special hook which is executed early in the visualization phase. +% It will be invoked *before* +% \pgfplots@stacked@visphasepreparedatapoint! +% +% Its purpose is to clear the data if necessary, i.e. it implements +% /pgfplots/stacked ignores zero +\def\pgfplots@stacked@visphase@stream@coord@{% + \ifpgfplots@stacked@ignores@zero + \ifx\pgfplots@current@point@x\pgfutil@empty% this implements `unbounded coords=jump', for example + \else + \pgfplotscoordmath{\pgfplots@stacked@dir}{if is}{\pgfplots@stacked@diff}{0}{% + \let\pgfplots@current@point@x=\pgfutil@empty + \let\pgfplots@current@point@y=\pgfutil@empty + \let\pgfplots@current@point@z=\pgfutil@empty + }{% + }% + \fi + \fi +}% + % PRECONDITION: % Is in invoked inside of a coord preparation routine, that means % - \pgfplots@current@point@[xyz] @@ -260,6 +446,9 @@ \else \def\pgfplots@stacked@op{subtract}% \fi + % + \pgfutil@namelet{pgfplots@stacked@diff}{pgfplots@current@point@\pgfplots@stacked@dir}% + % \pgfplots@if{pgfplots@\pgfplots@stacked@dir islinear}{% \pgfplotscoordmath{\pgfplots@stacked@dir}{op}{\pgfplots@stacked@op}{% {\csname pgfplots@stacked@zerolevelpoint@\pgfplots@stacked@dir\endcsname}% @@ -281,21 +470,44 @@ % % for logs, I remember just zerolevel+current; not its log. \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname=\pgfmathresult - \ifpgfplots@threedim - \ifpgfplots@curplot@threedim - \pgfplots@stacked@rememberzerolevelpoint@for@next@plot{(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z)}% - \else - \pgfplots@stacked@rememberzerolevelpoint@for@next@plot{(\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@logical@ZERO@z)}% - \fi - \else - \pgfplots@stacked@rememberzerolevelpoint@for@next@plot{(\pgfplots@current@point@x,\pgfplots@current@point@y)}% - \fi % + % this here would also be ok, but it would only store the coords + % of the zero level... + %\pgfplotsplothandlerserializepointto\pgfplotsretval +%\message{serializing current value current value to \meaning\pgfplotsretval^^J}% + % + \begingroup + % + % without this line, the "zerolevel" would also know all its zero + % levels recursively: + \pgfplots@stacked@strip@parents@zerolevel + % + \pgfplotsaxisserializedatapointtostring + \pgfplots@stacked@rememberzerolevelpoint@for@next@plot{\pgfplotsretval}% + \endgroup + % + % + % + \pgfplots@stacked@logarithm@if@needed +} + +% +% We store the normal values for zero levels. Consequently, we may +% need to (re)apply the log if we have a log axis. +% +% I am unsure of whether log+stacked is useful at all. +\def\pgfplots@stacked@logarithm@if@needed{% \pgfplots@if{pgfplots@\pgfplots@stacked@dir islinear}{% }{% \pgfplotscoordmath{\pgfplots@stacked@dir}{log}{\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}% \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname=\pgfmathresult }% +}% + +% you can \let this here to \relax if you want to gain access to all +% zero levels recursively: +\def\pgfplots@stacked@strip@parents@zerolevel{% + \def\pgfplots@stacked@zerolevel@current{}% } % This here is a re-implementation of the stored plot processing. @@ -311,48 +523,11 @@ % whatever must not be affected, only the sequence of drawing commands % shall change. % -% So, this command here does all numerics which is to be done and -% assembles a NEW, REVERSED STORED PLOT LIST. -% -% FIXME : this routine is a mess. It is largely out-of-sync with the -% remaining implementation of pgfplots and has way too many -% responsabilities. I suppose it should be rewritten from scratch. -% From what I see, it is more complicated than simply reversing the -% list of stored plots and their legends: one needs to postprocess the -% stacking order as it seems (?). -% -% +% So, this command here reverses the list. \def\pgfplots@stacked@finalize@stored@plots{% \pgfplotslistnewempty\pgfplots@stored@plotlist@reversed \begingroup \pgfplotslistforeachungrouped\pgfplots@stored@plotlist\as\pgfplots@loc@TMPa{% - \expandafter\pgfplots@stored@plotlist@EXTRACTENTRY\pgfplots@loc@TMPa - \ifx\pgfplots@stored@current@cmd\pgfutil@empty - \else - % Apply the data scaling transformation and compute - % stacked coordinates, but do NOT - % issue any drawing commands: - \expandafter\pgfplots@stacked@finalize@stored@coords@START\pgfplots@stored@current@data - \to - {\pgfplots@stored@current@data}% - {\pgfplots@stored@current@precmdappend}% - % store preparation commands into "precmd": - \t@pgfplots@tokb=\expandafter{\pgfplots@stored@current@precmd}% - \t@pgfplots@toka=\expandafter{\pgfplots@stored@current@precmdappend}% - \edef\pgfplots@stored@current@precmd{\the\t@pgfplots@tokb\the\t@pgfplots@toka}% - \fi - % Now, we need to insert all stored entities into the new, - % reversed list. We only expand them ONCE. - \t@pgfplots@toka=\expandafter{\pgfplots@stored@current@precmd}% - \t@pgfplots@tokb=\expandafter{\pgfplots@stored@current@cmd}% - \edef\pgfplots@loc@TMPa{% - {\the\t@pgfplots@toka}{\the\t@pgfplots@tokb}}% - \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}% - \t@pgfplots@toka=\expandafter{\pgfplots@stored@current@data}% - \t@pgfplots@tokb=\expandafter{\pgfplots@stored@current@postcmd}% - \edef\pgfplots@loc@TMPa{% - \the\t@pgfplots@tokc - {\the\t@pgfplots@toka}{\the\t@pgfplots@tokb}}% % Reverse sequence: \expandafter\pgfplotslistpushfront\pgfplots@loc@TMPa\to\pgfplots@stored@plotlist@reversed }% @@ -362,236 +537,32 @@ \endgroup }% -% This command finalizes the stored plot data. It records a coordinate -% stream into '#3' and assembles a macro '#4' which contains all -% preparation commands to ensure the functionality of -% \pgfplots@stacked@finalize@stored@plots -% -% The macro #4 will - if used as "precommand" -% befor a draw operation - restore all required options and performs -% pre-drawing. -\long\def\pgfplots@stacked@finalize@stored@coords@START normalized coordinates #1#2;\to#3#4{% - \pgfplots@stacked@beginplot - \pgfplots@coord@stream@INIT@finalize@stackedcoords@recordto{#3}{\pgfplots@recorded@marker@stream}% - \pgfplots@coord@stream@foreach@NORMALIZED{#1}% - \pgfplots@stacked@endplot - \pgfplots@stacked@savestateto\pgfplots@loc@TMPa - \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa\def\pgfplots@stacked@stored@postpath{#2}}% - \pgfplots@addplot@get@named@startendpoints@command\pgfplots@loc@TMPa - \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}% - \ifpgfplots@record@marker@stream - \t@pgfplots@tokb=\expandafter{\pgfplots@recorded@marker@stream}% - \else - \t@pgfplots@tokb={}% - \fi - \edef#4{% - \the\t@pgfplots@tokc - \noexpand\gdef\noexpand\pgfplots@recorded@marker@stream{\the\t@pgfplots@tokb}% - \the\t@pgfplots@toka - }% -}% - -% #1: for coordinates -% #2: for markers -\def\pgfplots@coord@stream@INIT@finalize@stackedcoords@recordto#1#2{% - \pgfplots@record@marker@streamtrue - % - \def\pgfplots@coord@stream@start@{% - \gdef#1{\pgfplotstreamstart}% - \ifpgfplots@record@marker@stream - \pgfplotsapplistXnewempty\pgfplots@stacked@record@mark@cmds - \pgfplotsapplistXpushback\pgfplotstreamstart\to\pgfplots@stacked@record@mark@cmds - \fi - }% - \def\pgfplots@coord@stream@end@{% - \expandafter\gdef\expandafter#1\expandafter{#1\pgfplotstreamend}% - \ifpgfplots@record@marker@stream - \pgfplotsapplistXpushback\pgfplotstreamend\to\pgfplots@stacked@record@mark@cmds - \pgfplotsapplistXlet\pgfplots@loc@TMPa=\pgfplots@stacked@record@mark@cmds - \global\let#2=\pgfplots@loc@TMPa - \fi - }% - % - \begingroup - \let\E=\noexpand - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \pgfplots@coord@stream@INIT@finalize@storedcoords@prepare@scaletrafomacro - % Will be inserted in one of two possible places below: - \def\pgfplots@loc@TMPa{% - \ifx\pgfplotspointmetainputhandler\pgfutil@empty - % we don't have per-point meta data. Nothing special to - % do: - \E\edef\E\pgfmathresult{\E\noexpand\E\pgfplots@stream@{\E\the\E\c@pgfplots@coordindex}{\E\the\E\pgf@x}{\E\the\E\pgf@y}}% - \E\expandafter\E\pgfplotsapplistXpushback\E\expandafter{\E\pgfmathresult}\E\to\E\pgfplots@stacked@record@mark@cmds% - \else - % Ok, then we need to process the meta data as well: - \E\edef\E\pgfmathresult{\E\noexpand\E\pgfplots@stream@withmeta@{\E\the\E\c@pgfplots@coordindex}{\E\the\E\pgf@x}{\E\the\E\pgf@y}{\E\pgfplots@current@point@meta}}% - \E\expandafter\E\pgfplotsapplistXpushback\E\expandafter{\E\pgfmathresult}\E\to\E\pgfplots@stacked@record@mark@cmds% - \fi - }% - % This finalize command maps the logical coordinate into PGF's - % point space. Furthermore, it collects marker coordinates - % (properly clipped by position) if markers are required (see - % above). - % - % It is prepared here to eliminate if's. - \xdef\pgfplots@coord@stream@finalize@currentpt{% - \ifpgfplots@curplot@threedim - \E\pgfplotsqpointxyz{\E\pgfplots@current@point@x}{\E\pgfplots@current@point@y}{\E\pgfplots@current@point@z}% - \else - \ifpgfplots@threedim - \E\pgfplotsqpointxyz{\E\pgfplots@current@point@x}{\E\pgfplots@current@point@y}{0.0}% - \else - \E\pgfplotsqpointxy{\E\pgfplots@current@point@x}{\E\pgfplots@current@point@y}% - \fi - \fi - \E\edef\E\pgfmathresult{{\E\the\E\pgf@x}{\E\the\E\pgf@y}}% - \E\t@pgfplots@toka=\E\expandafter{\E#1}% - \E\t@pgfplots@tokb=\E\expandafter{\E\pgfmathresult}% - \E\xdef\E#1{\E\the\E\t@pgfplots@toka - \E\noexpand\E\pgfplots@stream\E\the\E\t@pgfplots@tokb}% - % - \ifpgfplots@record@marker@stream - \E\pgf@xa=\E\pgfplots@current@point@x pt % FIXME : SCOPE REGISTERS!? - \E\pgf@ya=\E\pgfplots@current@point@y pt % - \ifpgfplots@curplot@threedim - \E\pgf@yb=\E\pgfplots@current@point@z pt % - \fi - \E\ifdim\E\pgf@xa<\E\pgfplots@xmin@reg - \E\else - \E\ifdim\E\pgf@xa>\E\pgfplots@xmax@reg - \E\else - \E\ifdim\E\pgf@ya<\E\pgfplots@ymin@reg - \E\else - \E\ifdim\E\pgf@ya>\E\pgfplots@ymax@reg - \E\else - \ifpgfplots@curplot@threedim - \E\ifdim\E\pgf@yb<\E\pgfplots@zmin@reg - \E\else - \E\ifdim\E\pgf@yb>\E\pgfplots@zmax@reg - \E\else - \pgfplots@loc@TMPa - \E\fi - \E\fi - \else - \pgfplots@loc@TMPa - \fi - \E\fi - \E\fi - \E\fi - \E\fi - \fi - }% - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \endgroup - % - \def\pgfplots@coord@stream@coord@{% - \pgfplotsaxisvisphasetransformcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z% - \pgfplotsaxisvisphasepreparedatapoint - \pgfplots@coord@stream@finalize@currentpt - }% -} - -% This command gets called after the sequence reversal has been done. -% It unpacks everything prepared by -% \pgfplots@stacked@finalize@stored@coords@START -% and draws the plot (and markers). -\def\pgfplots@stacked@draw@reversed@plot{% - \pgfplots@stored@current@cmd% [current plot style] <---- keys are already set - \pgfextra - \tikzset{every plot/.try}% - \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler - \pgfplots@basiclevel@plothandler - % this here contains a recorded plot stream, see above. - \pgfplots@stored@current@data - % - \pgfplots@assert@tikzinternal@exists{tikz@make@last@position}% - \tikz@make@last@position{\pgfplotlastpoint}% - \expandafter - \endpgfextra - \pgfplots@stacked@stored@postpath - ; - % this here has been assigned by the precommand as well. - \ifx\pgfplots@recorded@marker@stream\pgfutil@empty - \else - \ifpgfplots@clip@marker@paths - \scope% make sure that 'fill opacity' and 'dotted' styles remain local! - \pgfplots@stored@current@cmd%[current plot style] <---- keys are already set - \pgfextra - \pgfplots@install@plotmark@handler - \pgfplots@recorded@marker@stream - \endpgfextra - ; - \endscope - \else - \pgfplots@stored@REMEMBER@MARK@COMMAND - \fi - \fi - \gdef\pgfplots@recorded@marker@stream{}% clear -}% - - \def\pgfplots@stacked@path@closed@cycle{% \pgfplots@stacked@closedcycle@impl } -% Saves the finalized variables into macro #1 such that a call to #1 -% restores them. -% -% This affects pgf zero level handlers and whether this here is the -% first plot or not.. -\def\pgfplots@stacked@savestateto#1{% - \t@pgfplots@toka=\expandafter{\pgfplots@stacked@PGFzerolevels}% - \ifpgfplots@stacked@isfirstplot - \t@pgfplots@tokb={\pgfplots@stacked@isfirstplottrue}% - \else - \t@pgfplots@tokb={\pgfplots@stacked@isfirstplotfalse}% - \fi - \t@pgfplots@tokc=\expandafter{\pgfplots@stacked@closedcycle@impl}% - \edef#1{% - \noexpand\gdef\noexpand\pgfplots@stacked@PGFzerolevels{\the\t@pgfplots@toka}% - \the\t@pgfplots@tokb - \noexpand\def\noexpand\pgfplots@stacked@closedcycle@impl{\the\t@pgfplots@tokc}% - }% -} - % PGF interfaces: +% +% these are relatively simple right now: assuming that the zero-level +% streams are advanced if and only if the coordinate streams are +% advanced, we can simply inject the *currect* zero level rather than +% providing all at once. \def\pgfplotxzerolevelstream@@list{% \def\pgf@plotxzerolevelstreamstart{% - \global\let\pgfplotxzerolevelstream@@list@@backup=\pgfplots@stacked@PGFzerolevels \gdef\pgf@plotxzerolevelstreamnext{% - \pgfplotslistcheckempty\pgfplots@stacked@PGFzerolevels - \ifpgfplotslistempty - \global\pgf@x=\pgfplots@ZERO@x\relax - \else - {\globaldefs=1\relax - \pgfplotslistpopfront\pgfplots@stacked@PGFzerolevels\to\pgfmathresult - }% - \global\pgf@x=\pgfmathresult\relax - \fi + \global\pgf@x=\pgfplots@stacked@PGF@zerolevel\relax }% }% \def\pgf@plotxzerolevelstreamend{% - \global\let\pgfplots@stacked@PGFzerolevels=\pgfplotxzerolevelstream@@list@@backup }% }% \def\pgfplotyzerolevelstream@@list{% \def\pgf@plotyzerolevelstreamstart{% - \global\let\pgfplotyzerolevelstream@@list@@backup=\pgfplots@stacked@PGFzerolevels \gdef\pgf@plotyzerolevelstreamnext{% - \pgfplotslistcheckempty\pgfplots@stacked@PGFzerolevels - \ifpgfplotslistempty - \global\pgf@x=\pgfplots@ZERO@y\relax - \else - {\globaldefs=1\relax - \pgfplotslistpopfront\pgfplots@stacked@PGFzerolevels\to\pgfmathresult - }% - \global\pgf@x=\pgfmathresult\relax - \fi + \global\pgf@x=\pgfplots@stacked@PGF@zerolevel\relax }% }% \def\pgf@plotyzerolevelstreamend{% - \global\let\pgfplots@stacked@PGFzerolevels=\pgfplotyzerolevelstream@@list@@backup }% }% diff --git a/Master/texmf-dist/tex/generic/pgfplots/test/pgfplots.assert.code.tex b/Master/texmf-dist/tex/generic/pgfplots/test/pgfplots.assert.code.tex new file mode 100644 index 00000000000..4f913922266 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/test/pgfplots.assert.code.tex @@ -0,0 +1,50 @@ + +% Token-wise equals; will expand arguments with \edef +% #1: expected +% #2: actual +% #3: message +\def\pgfplotsassertequalstok#1#2#3{% + \edef\pgfplots@assert@a{#1}% + \edef\pgfplots@assert@b{#2}% + \pgfplotscommandtostring\pgfplots@assert@a\pgfplots@assert@a + \pgfplotscommandtostring\pgfplots@assert@b\pgfplots@assert@b + \ifx\pgfplots@assert@a\pgfplots@assert@b + \else + \pgfplotsassertfail{#3 ^^Jexpected '#1'^^J but was '#2'}% + \fi +}% + +% Token-wise equals of two MACROS; no expansion +% #1: expected +% #2: actual +% #3: message +\def\pgfplotsassertequalstoknoexpand#1#2#3{% + \ifx#1#2% + \else + \pgfplotsassertfail{#3 expected '\meaning#1' but was '\meaning#2'}% + \fi +}% + +\def\pgfplotsassertfail#1{% + \pgfplots@error{Assertion failed: #1}% +}% + +% Float-equals +% #1: expected +% #2: actual +% #3: message +\def\pgfplotsassertequalsfloat#1#2#3{% + \edef\pgfplots@assert@a{#1}% + \edef\pgfplots@assert@b{#2}% + % + \pgfmathfloatparsenumber{\pgfplots@assert@a}% + \let\pgfplots@assert@a\pgfmathresult + % + \pgfmathfloatparsenumber{\pgfplots@assert@b}% + \let\pgfplots@assert@b\pgfmathresult + % + \pgfmathfloatifapproxequalrel{\pgfplots@assert@a}{\pgfplots@assert@b}{% + }{% + \pgfplotsassertfail{#3 ^^Jexpected '#1'^^J but was '#2'}% + }% +}% diff --git a/Master/texmf-dist/tex/generic/pgfplots/test/pgfplots.assert.sty b/Master/texmf-dist/tex/generic/pgfplots/test/pgfplots.assert.sty new file mode 100644 index 00000000000..431c582a62a --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/test/pgfplots.assert.sty @@ -0,0 +1,2 @@ + +\input pgfplots.assert.code.tex diff --git a/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex index dc1a7a0aa78..f0145d7f78f 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolor.code.tex @@ -75,7 +75,7 @@ }% \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} + \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}% @@ -550,17 +550,14 @@ % #1: the number of color components to be used (like 3 for rgb) % @see \pgfplotscoloraddweighted \def\pgfplotscolorzero#1{% - \c@pgf@countb=#1\relax - % - \c@pgf@counta=1 % - \def\pgfplotsretval{0}% - \pgfutil@loop - \ifnum\c@pgf@counta<\c@pgf@countb - \edef\pgfplotsretval{\pgfplotsretval,0}% - \advance\c@pgf@counta by1 % - \pgfutil@repeat + \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) @@ -588,13 +585,15 @@ % % @see \pgfplotscolorzero \def\pgfplotscoloraddweighted#1#2#3#4{% - \begingroup - \expandafter\global + \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@glob@TMPd\csname pgfplotscolornormalizesequencegetnumcomponents@#1\endcsname - \endgroup - \edef\pgfplots@loc@TMPa{#2:#4\noexpand\relax{#3}}% - \expandafter\pgfplots@glob@TMPd\pgfplots@loc@TMPa% + \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{% diff --git a/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex index 4e369084a29..124406922db 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex @@ -615,7 +615,7 @@ \pgfmathdivide@{\pgfplotscolormaprange}{\pgfplots@loc@TMPb}% \let\pgfplots@loc@TMPa=\pgfmathresult \fi -%\message{mapping '#4' into colormap '#5' ... }% +%\message{mapping '#4' into colormap '#5' ... ^^J}% \def\pgfplots@loc@samerange{0:1000}% \ifx\pgfplots@loc@TMPa\pgfplots@loc@samerange % we have phi(#4) = #4 because #4 in [0:1000]. @@ -647,33 +647,42 @@ \let\pgfplots@loc@factor=\pgfmathresult \pgfmathsubtract@{1}{\pgfplots@loc@factor}% \let\pgfplots@loc@factor@two=\pgfmathresult -%\message{mapping [#1,#2] -> [0,\pgfplotscolormaprange] yielded phi(#4) = \pgfplotscolormapfind@transformedx, situated in interval no \pgfplotscolormapfind@intervalno.}% % Step 2: interpolate the desired RGB value using vector valued % interpolation on the identified interval. \c@pgf@counta=\pgfplotscolormapfind@intervalno\relax +%\message{mapping [#1,#2] -> [0,\pgfplotscolormaprange] yielded phi(#4) = \pgfplotscolormapfind@transformedx, situated in interval no \the\c@pgf@counta.^^J}% \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#5}\to\pgfplotscolormapfind@rgb@LEFT - \advance\c@pgf@counta by1 - \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#5}\to\pgfplotscolormapfind@rgb@RIGHT -%\message{After lookup: the corresponding RGB interval boundaries are [\pgfplotscolormapfind@rgb@LEFT: \pgfplotscolormapfind@rgb@RIGHT].}% % - % - % color^m(x) = ( x/h - i ) * ( c_{i+1}^m - c_{i}^m ) + c_i^m - % = s * c_{i+1}^m + S * c_i^m - % - % s= x_h / h -i - % S = 1 - s - \pgfplotscolorzero{\csname pgfpl@cm@#5@col@comps\endcsname}% - \pgfplotscoloraddweighted - {\csname pgfpl@cm@#5@col@comps\endcsname} - {\pgfplotsretval}% - {\pgfplots@loc@factor@two}% - {\pgfplotscolormapfind@rgb@LEFT}% - \pgfplotscoloraddweighted - {\csname pgfpl@cm@#5@col@comps\endcsname} - {\pgfplotsretval}% - {\pgfplots@loc@factor}% - {\pgfplotscolormapfind@rgb@RIGHT}% - \let\pgfmathresult=\pgfplotsretval + \pgfplotsarraysize{pgfpl@cm@#5}\to\c@pgf@countb + \advance\c@pgf@countb-1 % + \ifnum\c@pgf@counta<\c@pgf@countb + % Ah: (selected index < length-1) . That means: we have an interval. + \advance\c@pgf@counta by1 + \pgfplotsarrayselect\c@pgf@counta\of{pgfpl@cm@#5}\to\pgfplotscolormapfind@rgb@RIGHT +%\message{After lookup: the corresponding RGB interval boundaries are [\pgfplotscolormapfind@rgb@LEFT: \pgfplotscolormapfind@rgb@RIGHT].^^J}% + % + % + % color^m(x) = ( x/h - i ) * ( c_{i+1}^m - c_{i}^m ) + c_i^m + % = s * c_{i+1}^m + S * c_i^m + % + % s= x_h / h -i + % S = 1 - s + \pgfplotscolorzero{\csname pgfpl@cm@#5@col@comps\endcsname}% + \pgfplotscoloraddweighted + {\csname pgfpl@cm@#5@col@comps\endcsname} + {\pgfplotsretval}% + {\pgfplots@loc@factor@two}% + {\pgfplotscolormapfind@rgb@LEFT}% + \pgfplotscoloraddweighted + {\csname pgfpl@cm@#5@col@comps\endcsname} + {\pgfplotsretval}% + {\pgfplots@loc@factor}% + {\pgfplotscolormapfind@rgb@RIGHT}% + \let\pgfmathresult=\pgfplotsretval + \else + % Ah: selected index = last index. Use the rightmost color! + \let\pgfmathresult=\pgfplotscolormapfind@rgb@LEFT + \fi \pgfmath@smuggleone\pgfmathresult \endgroup %\message{-> got finally mapping(#4, #5) = RGB'\pgfmathresult'.}% @@ -743,7 +752,7 @@ [1.0] {#1} {\pgfkeysvalueof{/pgfplots/colormap name}} -%\message{Color for current point is RGB '\pgfmathresult' (determined using meta 'phi(\pgfplotspointmeta) = \pgfplotspointmetatransformed')}% +%\message{Color for current point is RGB '\pgfmathresult' (determined using meta 'phi(\pgfplotspointmeta) = \pgfplotspointmetatransformed')^^J}% \def\pgfplots@loc@TMPb{\pgfutil@definecolor{mapped color}{\csname pgfpl@cm@\pgfkeysvalueof{/pgfplots/colormap name}@colspace\endcsname}}% \expandafter\pgfplots@loc@TMPb\expandafter{\pgfmathresult}% }% diff --git a/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex index 57cc47873dd..56e472968b7 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex @@ -870,9 +870,11 @@ % and % \pgfplots@foreach@loc@TMPb := log(secondintervalpt) \def\pgfplotsforeachlogarithmicungrouped@readdomain#1:#2\relax{% - \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{log}{#1}% + \pgfplotscoordmath{default}{parse}{#1}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{log}{\pgfmathresult}% \let\pgfplots@foreach@loc@TMPa=\pgfmathresult - \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{log}{#2}% + \pgfplotscoordmath{default}{parse}{#2}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{log}{\pgfmathresult}% \let\pgfplots@foreach@loc@TMPb=\pgfmathresult } |