diff options
author | Karl Berry <karl@freefriends.org> | 2011-08-01 00:47:16 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2011-08-01 00:47:16 +0000 |
commit | aec2bbc3994991ebc6c5f4dbc90ad15c55f1a1fb (patch) | |
tree | 8940f33f6b173fb5cc630cc58ed4b791ad29e3fe /Master | |
parent | 868233e6288b5e35a7d7aabd79bf8e56a802bc12 (diff) |
pgfplots 1.5 (29jul11)
git-svn-id: svn://tug.org/texlive/trunk@23292 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
180 files changed, 42586 insertions, 5731 deletions
diff --git a/Master/texmf-dist/doc/context/third/pgfplots/pgfplotsexample.pdf b/Master/texmf-dist/doc/context/third/pgfplots/pgfplotsexample.pdf Binary files differindex b449ad1afbd..2fc6a4e621f 100644 --- a/Master/texmf-dist/doc/context/third/pgfplots/pgfplotsexample.pdf +++ b/Master/texmf-dist/doc/context/third/pgfplots/pgfplotsexample.pdf diff --git a/Master/texmf-dist/doc/generic/pgfplots/README b/Master/texmf-dist/doc/generic/pgfplots/README index fbbdbad8246..0f9546dbbf6 100644 --- a/Master/texmf-dist/doc/generic/pgfplots/README +++ b/Master/texmf-dist/doc/generic/pgfplots/README @@ -2,12 +2,14 @@ pgfplots - Create normal/logarithmic plots in two and three dimensions for LaTeX pgfplotstable - Loads, rounds, formats and postprocesses numerical tables. -PGFPlots draws high-quality function plots in normal or logarithmic scaling +PGFPlots draws high--quality function plots in normal or logarithmic scaling with a user-friendly interface directly in TeX. The user supplies axis labels, legend entries and the plot coordinates for one or more plots and PGFPlots applies axis scaling, computes any logarithms and axis ticks and draws the -plots, supporting line plots, scatter plots, piecewise constant plots, bar -plots, area plots, mesh-- and surface plots and some more. +plots. It supports line plots, scatter plots, piecewise constant plots, bar +plots, area plots, mesh-- and surface plots, patch plots, contour plots, quiver +plots, histogram plots, polar axes, ternary diagrams, smith charts and some +more. Pgfplots is based on Till Tantau's package PGF/TikZ (pgf). @@ -27,7 +29,7 @@ The virus killer Avira Antivir reports the virus HTML/Malicious PDF.Gen in pgfpl This is a FALSE ALARM caused by the pgfplots library for interactive, clickable plots (based on javascript). It is virus-free. -Copyright 2007-2010 by Christian Feuersaenger. +Copyright 2007-2011 by Christian Feuersaenger. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -42,3 +44,92 @@ 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/>. + +HISTORY: +1.5: + - Contour plots, + - Histograms, + - Quiver plots, + - patch plots (library) + - Triangle Meshes + - Bilinear Elements + - Quadratic Triangles + - Biquadratic Quadrilaterals + - Coons Patches + - Discrete colorbars, + - Table sorting, + - Linear regression, + - Ternary diagrams, + - Tieline Plots + - Smith Charts + - Polar axes, + - Empty lines in input files result in interrupted plots, + - PDF user defined coordinate mouse popups + - CMYK colormaps and shadings, + - new markers and cycle lists + - access to axis limits, + - \addplot3 graphics: pgfplots draws an appropriate axis for a three-dimensional(!) external png graphics + - 3D axes: support to provide explicit unit vectors: + - explicit unit vectors + - explicit unit vectors which are uniformly rescaled to match width/height + - 3D axes: improved support for unit vector ratios + - improvements of the groupplot styles + - preliminary support for (2d) bar plots in 3d axes + - new shader 'faceted interp' + - table package: + - 'every nth row' style + - 'comment chars' key to define comment characters in input files + - 'skip first n' style + - lots of smaller bugfixes (see ChangeLog for details) + + +1.4.1: +- improved compatibility to gnuplot 4.4 + +1.4: +Version 1.4 contains several new features, mostly work on details. +It fixes many bugs and provides the following improvements: +- detached legends +- detached colorbars +- ybar (and similar plots) can now be mixed with other plot types + like line plots. +- improved legend formatting +- added 'restrict x to domain*' which cups coordinates outside of a specified domain (same for y and z) +- Added support for linear regression +- Inline tables, +- Lots of bug fixes + +The next version will make a greater step when it is stable. + + +1.3.1: +Version 1.3.1 is a bugfix release containing +- improved parametric plots with gnuplot +- improved normalsize, small and footnotesize scale styles and added tiny +- a lot of bugfixes + +1.3: +- improvements for two dimensional visualization, among them + - axis equal, + - color bars, + - nodes near coords, + - jumps in plots, + - improved description positioning, + - reverseable axis directions, + - simpler alignment of adjacent axes, + - units and a simplified user interface, +- new three dimensional line, scatter, mesh and surface plots, +- a copy of the automatic pdf externalization library, +- an improved manual enhanced with a lot of pdf cross references. + +1.2.2: +- fixed a problem with the samples key, +- provides some smaller fixes and some manual improvements. +- added plot graphics. + +1.2: +- completely rewritten math expression parser with extended data range, +- colormaps for scatter plots +- fine tuning for plot parameters. +- table package has been extended and is now a fully featured table typesetting, computing and postprocessing tool. + diff --git a/Master/texmf-dist/doc/latex/pgfplots/ChangeLog b/Master/texmf-dist/doc/latex/pgfplots/ChangeLog index 58e4a627321..af6cc90165e 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/ChangeLog +++ b/Master/texmf-dist/doc/latex/pgfplots/ChangeLog @@ -1,11 +1,277 @@ +2011-07-25 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added \pgfplotsplotfromname{<label>} macro which does the work for \ref{<label>} + +2011-07-25 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed \axisdefaultticklabel: it should not contain math mode switches. + - fixed bug: 'scaled . labels=manual' did not allow \pgfmathparse. + - fixed bug: "origin" of logarithmic axes with -infty, not 0. + +2011-06-26 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed a lot of typos in manual and removed warnings + - removed "Missing-character"-Warnings + - polar lib: implemented marker clipping + - fixed incompatibility between insdljs and babel with 'spanish' option + I also contacted the author of the acrotex-bundle + - fixed bug with 'log basis 10' and loglog plots + +2011-05-14 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug introduces last week: hist plots tried to transform empty axis limits + - wrote docs for Tikz interoperability + - fixed bug: now, one can use macros inside of the paranthesis of plot coordinates + +2011-05-09 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added '/pgfplots/scale' style which should only scale the axis + +2011-05-08 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved coordinate filters and -transformations such that they can be + applied to hist/data and quiver/u and the-like as well + +2011-05-07 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug in symbolic coords: it was not possible to provide different + sets for x and y + - added support for hist and quiver such that they can use coord filtering + as well + - fixed bug: histogram computation now uses an internal threshold to + reduce rounding effects during "getbinfor" + +2011-05-01 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved contour external such that it works also if no end-of-scanline + markers have been found in the input. + +2011-04-30 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: using \begin{scope}[no markers] or similar constructs will now work + - number printing: added '1000 sep in fractionals' switch + - fixed bug: hist now advances the coordinate index (for hist/data filter) + +2011-04-29 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: axis line paths are now closed for boxed axes + +2011-04-28 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: the 'anchorborder' of the axis shape was wrong such that + the connection -- (anAxis) failed. + + +2011-04-28 Bastian Sauert <sauert@users.sourceforge.net> + - fixed bug: 'legend to name' and 'every legend image post' did not work + together + +2011-04-25 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: axis line paths are now closed (using --cycle for boxed axes) + -> causes regressions with axis line decorations + +2011-04-20 Christian Feuersaenger <ludewich@users.sourceforge.net> + - table package: added 'every row <index> column <index>' styles and their + variants. + - table package: added 'string replace*' preprocessor style. + - table package: improved style evaluation of cell formatting styles + preproc cell content, assign cell content, and postproc cell content + +2011-04-18 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed incompatibility with memoir class: now, 'legend to name' works + also in memoir subfigures. + - improved error message of table package when encountered encoding problems + +2011-04-17 Christian Feuersaenger <ludewich@users.sourceforge.net> + - implemented /pgf/number format/relative formatting style + - adjusted every contour label style to use the new relative number + formatting style. + +2011-04-16 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: new CMYK interpolation in colormaps inserted a comma at the wrong position + - worked on docs + +2011-03-16 Christian Feuersaenger <ludewich@users.sourceforge.net> + - experimented with 'smithchart mirrored' feature + +2011-03-13 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved 'scale uniformly' such that it also works for 2d axes. + - wrote first draft for docs on 'scale mode'. + +2011-03-11 Christian Feuersaenger <ludewich@users.sourceforge.net> + - dateplot lib: fixed rounding inaccuracy which allowed 0:60 instead of 1:00 + +2011-03-09 Christian Feuersaenger <ludewich@users.sourceforge.net> + - Improved manual (version numbers, mail address) + - Improved default styles for polar lib (title style and legend style) + - Improved default styles for smithchart lib (title style and legend style) + +2011-02-27 Christian Feuersaenger <ludewich@users.sourceforge.net> + - finished a lot of refactoring applied to the test framework. + - introduced further compatibility option which allows to restore old + scaling features (/pgfplots/compat/scaling) + - added 'execute at [begin|end] plot visualization' keys and documented + example how to combine that with \usepackage{ocg} + +2011-01-20 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed 'x expr=\coordindex' bug when used in \addplot table \structure + +2010-10-29 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved TeX-programming-notes.tex (thanks to Frederik Heber!) + +2010-10-20 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: log basis x and plot expression (the sample logarithmically + feature) did not work together. + +2010-10-15 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added new predefined cycle list 'mark list*' + - improved 'mark list': the otimes* marker now has a better visible + distinction between fill and stroke + - improved 'mark list': the fill color can now be specified manually with + 'mark list fill' + +2010-10-14 Christian Feuersaenger <ludewich@users.sourceforge.net> + - documented CMYK colormaps and shadings. + - provided automatic changes to the colorbar styles such that colorbars + also support CMYK without user input. + +2010-10-13 Christian Feuersaenger <ludewich@users.sourceforge.net> + - documented new pgf markers. + - provided access to the final axis limits using + \pgfkeysvalueof{/pgfplots/xmin}. + - patch plot handler: improved display of sharp triangle corners by + added the 'every patch' style with initial value 'miter limit=1' + - added support for CMYK colormaps, and CMYK shadings. + - added 'colormap default colorspace' feature + +2010-10-11 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved the \addplot3 graphics manual section (and fixed a small bug in + it) + - improved docs for contour plots + - improved access of contour external to internal variables. + +2010-10-06 Christian Feuersaenger <ludewich@users.sourceforge.net> + - \addplot3 graphics: added support for reversed axis (untested) + - fixed bug: 'scale mode=scale uniformly' did not work if z=(0,0). + +2010-09-30 Christian Feuersaenger <ludewich@users.sourceforge.net> + - polar lib: improved default tick positions + +2010-09-29 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: there was a comma missing in the line style keys (inner axis + line style and outer axis line style) + +2010-09-26 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: explicitly provided unit vectors are now processed with the + floating point unit, thereby allowing also extended data ranges + +2010-09-25 Christian Feuersaenger <ludewich@users.sourceforge.net> + - polar axis: improved limit updating routines + - polar axis: enlarge x limits (degrees) is now disabled, enlarge y limits (radius) only for + upper range + - polar axis: improved default tick pos + - polar lib: added support for radians with the 'data cs=polarrad' key + - polar lib: wrote documentation + +2010-09-24 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added 'data cs' feature (and removed the temporary 'output cs' key) + now, automatic conversions between coordinate systems are possible + - polar axes: allowed \addplot3 (third coordinate is ignored). + +2010-09-22 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: the clickable library now checks whether it is loaded before + pgfplots and complaints if so + - fixed bug: '\addplot[only marks]' had no default plot mark. It uses + 'mark=*' now. + - fixed bug: removed "bashishm" in matlab2pgfplots.sh + +2010-09-21 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug with unit vector ratio: there have been expansion problems in + certain cases which lead to wrongly scaled graphics or compilation failure + - fixed bug in polar lib + +2010-09-16 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved plot graphics 3D: improved examples and added 'snap z' feature. + +2010-09-15 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved automatic normal vector detection + - improved plot graphics 3D + +2010-09-11 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved bugtracker + +2010-09-09 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: legend to name and colorbar to name have been broken + - improved handling of 'empty line=auto': for mesh/surf, it will + automatically be set to scanline, otherwise it is 'jump'. It now also has a + backwards compatibility switch activated by 'compat' which uses 'none' for + 2d plots + - improved consistency between 'plot box ratio' and 'unit vector ratio': + both now accept space--separated arguments (plot box ratio also brace + constructions for backw. compat) + +2010-09-08 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added 'table/every nth row' key + - fixed bug: now, extra tick labels can have a different 'ticklabel pos' + than the original axes (it was broken since 1.2.2) + - fixed bug: it is now allowed to provide '#' (hash sign) in \addplot + option arguments (for example to define 'x filter/.code={...#1...}') + - added support for \pgfplotsforeachungrouped \a/\b in {...} syntax + +2010-09-07 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added 'table/comment chars' key. + - added 'table/skip first n' key. + +2010-09-01 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added 'scale mode=stretch to fill|scale uniformly' and a preliminary implementation. + +2010-08-31 Christian Feuersaenger <ludewich@users.sourceforge.net> + - patch plots: added 'patch table with individual point meta' to allow + per-patch cdata for every vertex + - patch plots: improved handling of unbounded input coords. + Now, 'mesh input=patches' automatically sets 'empty line=none'. + Other 'empty line' values could have interfered with jump processing. + - documented '\addplot3 graphics' (still produces compilation bugs :-( ) + +2010-08-29 Christian Feuersaenger <ludewich@users.sourceforge.net> + - patchplots lib: added 'quadratic spline' and 'cubic spline' patch types. + - patch plots: added 'patch table with point meta' to allow per-patch cdata. + +2010-08-27 Christian Feuersaenger <ludewich@users.sourceforge.net> + - now, \addplot+ [...] is possible -- the space gobbling did not work. + +2010-08-26 Christian Feuersaenger <ludewich@users.sourceforge.net> + - provided support for \label<slidespec> to allow beamer's \label + modifications with PGFPlots. + +2010-08-22 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved new coordmath framework + +2010-08-20 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved legend for xbar stacked and ybar stacked + - improved bugtracker + +2010-08-18 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug in processing of \addplot[ybar] and \addplot[xbar] + There was a problem in conjunction with 'nodes near coords' + +2010-08-12 Christian Feuersaenger <ludewich@users.sourceforge.net> + - Fixed processing of (x,y) coordinates in 3D axes: they invoked the 2D + point command now (to allow distinctions in other axes classes) + +2010-08-10 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved the 'sloped like x axis' key: it now accepts optional arguments + to control the transformation. + +2010-08-06 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added 'minor xtick' key which allows to provide non-uniform minor tick + positions + +2010-08-10 Christian Feuersaenger <ludewich@users.sourceforge.net> + - ternary lib: added 'tielines' plot handler + 2010-08-05 Christian Feuersaenger <ludewich@users.sourceforge.net> - RELEASED VERSION 1.4.1 Changes since 1.4: - Improved compatibility with windows gnuplot and logarithmic scaling +2010-07-28 Christian Feuersaenger <ludewich@users.sourceforge.net> + - implemented first draft of smith charts + - implemented support for \pgfplots@ticknum during tick typesetting + 2010-07-27 Christian Feuersaenger <ludewich@users.sourceforge.net> - activated math parser for 'view' arguments and improved docs on 'view' 2010-07-22 Christian Feuersaenger <ludewich@users.sourceforge.net> + - mesh plot handler: fixed broken support for interrupted mesh plots - Fixed bug: the windows version had problems with gnuplot when used with logarithmic scales: - gnuplot 4.2 does not identify itsself, causing the new check to bail @@ -14,6 +280,8 @@ a directory. Both is fixed now. +2010-07-20 Christian Feuersaenger <ludewich@users.sourceforge.net> + - Added 'hist/data min' / 'hist/data max' keys. 2010-07-14 Christian Feuersaenger <ludewich@users.sourceforge.net> - RELEASED VERSION 1.4 Release notes: @@ -32,6 +300,11 @@ - using colorbar source now implies 'point meta rel=per plot' to get consistency between the plot's colors and the colorbar. +2010-07-12 Christian Feuersaenger <ludewich@users.sourceforge.net> + - wrote prototype for 3d plot graphics. It's already partially functional. + - Added 'x post scale', 'y post scale' and 'z post scale' features to + increase the unit vectors after all scaling things have been applied. + 2010-07-10 Christian Feuersaenger <ludewich@users.sourceforge.net> - fixed bug: 'xlabels at=edge top' and 'ylabels at=edge right' did not adjust the ticklabel pos. @@ -79,16 +352,42 @@ compatibility with existing images; recompile many old documents to check it) +2010-06-28 Christian Feuersaenger <ludewich@users.sourceforge.net> + - patchplots lib: added 'tensor bezier' patch. + 2010-06-27 Christian Feuersaenger <ludewich@users.sourceforge.net> - - fixed bug: 'point meta=f(x)' was evaluated too early. Now it is - evaluated inside of \addplot in the survey phase. + - documented patch plots. + - Bugfix for point meta=f(x): it is now evaluated inside of the survey + phase 2010-06-25 Christian Feuersaenger <ludewich@users.sourceforge.net> + - patch plots: implemented refine for biquadratic. - fixed bug: 'each nth point' worked only for #1<10 +2010-06-24 Christian Feuersaenger <ludewich@users.sourceforge.net> + - patch plots: implemented 'refine' feature (refines to same element) + - patch plots: implemented 'refine,patch to triangles' (results in triangles) + - patch plots: implemented 'refine' for triangles (longest edge bisection) + - high order patch plots are now a separate library. + - patch plots: implemented 'refine' for bilinear + +2010-06-23 Christian Feuersaenger <ludewich@users.sourceforge.net> + - patch plots: implemented internal z buffering for bilinear and + biquadratic patches. + - patch plots: added support for 'patch to triangles,patch type=bilinear'. + - patch plots: added support for 'patch to triangles,patch type=triangle quadr'. + +2010-06-22 Christian Feuersaenger <ludewich@users.sourceforge.net> + - quadratic triangle: changed node sequence. + 2010-06-21 Christian Feuersaenger <ludewich@users.sourceforge.net> - nodes near coords align now accepts some standard anchor names and appends 'anchor=<value>' automatically. + +2010-06-20 Christian Feuersaenger <ludewich@users.sourceforge.net> + - rewrote surf/mesh/patch plot API. + - added support for 'patch type=line|triangle|rectangle|bilinear|triangle quadratic|biquadratic' + and coons type shadings 2010-06-17 Christian Feuersaenger <ludewich@users.sourceforge.net> - legend to name: now supports \numplots @@ -105,6 +404,9 @@ separate file names when used with the external library. - fixed bug: colorbars and french babel have been incompatible. +2010-06-14 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed bug: log basis X was broken in the meantime + 2010-06-11 Christian Feuersaenger <ludewich@users.sourceforge.net> - optimized runtime of colormap serialized from O(N^2) to O(N) @@ -112,8 +414,12 @@ - fixed bug: the 'every table' style now has higher precedence than options provided in square brackets (the old variant yielded either problems with row sep,col sep keys or with '/.add={}{}' inside of options) + - fixed bug: stacked plots for logarithmic scales now produces correct + output - improved compatibility of detached legends/colorbar/\ref legends with external lib + - fixed bug: the new plot handler framework activated the FPU too early, + causing changes in line width to use the FPU - fixed sanity checking for 'table/unique' style and provided meaningful error messages 2010-06-08 Christian Feuersaenger <ludewich@users.sourceforge.net> @@ -123,6 +429,21 @@ - fixed bug: 'nodes near coords' and stacked plots did not work - fixed bug: 'point meta' and stacked plots did not work +2010-06-07 Christian Feuersaenger <ludewich@users.sourceforge.net> + - patch plots: added 'patch table={<connectivity file>}' feature + +2010-06-06 Christian Feuersaenger <ludewich@users.sourceforge.net> + - polar library: tick label positioning and empty axis handling + - polar library: introduced check to avoid double tick label at lower and upper end + +2010-06-02 Christian Feuersaenger <ludewich@users.sourceforge.net> + - documented patch plots + - improved z buffer=sort + +2010-06-01 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added support for patch plots + - added 'shader=faceted interp' (experimental; its really inefficient) + 2010-05-28 Christian Feuersaenger <ludewich@users.sourceforge.net> - reduced save stack usage - linear regression: x value is now determined from context @@ -138,7 +459,24 @@ results. - fixed bug: shader=interp consumed too much stack save space. +2010-05-24 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added 'contour/labels over line' style + - clickable: fixed clickable coords with unbounded or empty coordinates + - ternary: improved docs and fixed ternary limits relative. + +2010-05-22 Christian Feuersaenger <ludewich@users.sourceforge.net> + - improved docs + - bar cycle list: added two more entries + - plot graphics: added the 'points=' feature which allows to provide more + than 2 points. Now, the graphics is placed into the bounding box of all + provided coordinates. + +2010-05-21 Christian Feuersaenger <ludewich@users.sourceforge.net> + - worked on ternary stuff + 2010-05-19 Christian Feuersaenger <ludewich@users.sourceforge.net> + - fixed problem with `empty lines=nan' outside of an axis (for example in + table typesetting) - table package: during lazy column creation, the macro \pgfplotstablename expands to the currently processed table. This is now used as default for linear regression. @@ -149,34 +487,67 @@ from an embedding axis. - added 'transpose legend' style +2010-05-15 Christian Feuersaenger <ludewich@users.sourceforge.net> + - contour plots: added support to read the output of matlab's contour plot + algorithms (contour prepared format=matlab) + - contour plots: added support for 'contour gnuplot' which invokes gnuplot + to compute contours and invokes 'contour prepared' afterwards. + - contour plots: also added generic 'contour external' interface. It can + even support matlab (although that's probably too slow). + - added hist/cumulative flag + +2010-05-13 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - added polar axes library + - wrote utility functions \pgfplotsmathpoltocart and + \pgfplotsmathcarttopol to work with polar/cartesian coordinate conversion. + 2010-05-10 Christian Feuersaenger <ludewich@users.sourceforge.net> + - clickable lib: added support for multi-line fields + richtext formatted + clickable coords - added 'legend cell align=left|right|center' styles to reduce the amount of typing for this task. +2010-05-08 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - Added ternary library for three-phase diagrams (triangular axes). + - added support for ternary lib in clickable lib + + 2010-05-06 Christian Feuersaenger <ludewich@users.sourceforge.net> - table package: improved accuracy during gradient loglog. - added possibility to exchange \includegraphics in plot graphics. -2010-05-05 Christian Feuersaenger <ludewich@users.sourceforge.net> +2010-05-03 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - fixed bug: \addplot table (without '[]') sets 'x index=0,y index=1' + instead of using their actual value. + +2010-04-27 Christian Feuersaenger <ludewich@users.sourceforge.net> + - clickable lib: now supports reversed axis (and other non-standard + directions for x and y axes) + - clickable lib: has now support for 3D axes as well (snap--to--nearest feature) + +2010-05-05 Christian Feuersaenger <ludewich@users.sourceforge.net> - fixed handling of colormap mesh width + reinterpolation. It seems it was broken or at least not fully functional. Now it appears to work, is more robust and provides more information on error. 2010-05-03 Christian Feuersaenger <ludewich@users.sourceforge.net> - - fixed bug: \addplot table (without '[]') sets 'x index=0,y index=1' instead of using their actual value. -2010-04-29 Christian Feuersaenger <ludewich@users.sourceforge.net> +2010-04-25 Christian Feuersaenger <ludewich@users.sourceforge.net> - implemented missing \thisrowno (and \nextrowno and \prevrowno) macros inside of \pgfplotstablecreatecol. -2010-04-25 Christian Feuersaenger <ludewich@users.sourceforge.net> - +2010-04-26 Christian Feuersaenger <ludewich@users.sourceforge.net> + - clickable lib: `clickable coords' now cycles through points on the same + position. - fixed bug: named nodes inside of groupplots produced infinite loop 2010-04-22 Christian Feuersaenger <ludewich@users.sourceforge.net> @@ -185,11 +556,32 @@ to wrong automatically generated ticks. 2010-04-21 Christian Feuersaenger <ludewich@users.sourceforge.net> + - table package: Fixed bug in 'unique' style. It worked only for the first column. + - renamed 'contour filled' to 'contour prepared filled' - fixed bug: named nodes did not function properly in conjunction with pgf 2.00 +2010-04-20 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - clickable lib: added square marker to highlight the clicked position + - clickable lib: Added 'clickable coords' and 'clickable coords code' + features which allow a snap-to-nearest feature *and* user-defined, + additional information when clicking onto data points. + +2010-04-18 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - Added plot handler 'contour prepared' which relies on already + precomputed contour line coordinates (has preliminary support for filled + contours) + +2010-04-14 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - Added 'empty line=auto,scanline,jump,nan' key which allows interrupted + plots at input empty lines + 2010-04-12 Christian Feuersaenger <ludewich@users.sourceforge.net> + - added 'restrict x to domain*' which truncates to domain boundaries instead of assigning -inf or +inf. @@ -206,6 +598,13 @@ - Fixed bug: |colorbar sampled line| and |colorbar left| where incompatible. +2010-04-07 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - Added extensible layer for coordinate arithmetics. + Now, there is a unified math operation interface which uses the correct + math engine transparently (pgf basic math for log axes, float for linear + axes currently). + 2010-04-06 Christian Feuersaenger <ludewich@users.sourceforge.net> - Added 'colorbar source' feature @@ -252,6 +651,8 @@ - Fixed bug: the auto-generation of .dep files could fail. Now, it will only be generated (automatically) if we are currently externalizing. + - improved (wrote) docs for histogram plots and quiver + plots. 2010-02-23 Christian Feuersaenger <ludewich@users.sourceforge.net> @@ -267,6 +668,17 @@ - Fixed bug: providing a point meta expression twice as in 'point meta=<expr>, point meta=<expr>' yielded an infinite recursion - Provided first rudimentary version for \pgfplotstablesort + - Added first version of a histogram plot handler. + +2010-02-20 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - Fixed docs for \addlegendimage which was documented using the wrong name |\legendimage| + - Allowed paragraphs in legend texts (was broken before) + - the updatelimits and parsecoordinates are now available throughout the + complete axis. + They can also detect 3d coords automatically and enable 3d axes if so. + \addplot will use a specialized variant which respects \addplot vs + \addplot3 2010-02-18 Christian Feuersaenger <ludewich@users.sourceforge.net> @@ -317,32 +729,28 @@ - Added 'numeric type' to table package to switch back from string type or data type. - added 'numeric as string type' to table package. + - tuned quiver plot handler -2010-01-26 Christian Feuersaenger <ludewich@users.sourceforge.net> - - Introduced 'compat=1.3' . The name 'compat=newest' was not not such a - good idea since it might introduce a problem for following releases. - - Emphasized key names in references to show that /pgfplots/, /tikz/ and - similar prefixes are unnecessary. - - Fixed the 'xticklabels' key such that it also accepts '\\' terminated - lists. This fixes strange bugs with dots '.' as last characters in - entries. +2010-01-31 Christian Feuersaenger <ludewich@users.sourceforge.net> -2010-01-21 Christian Feuersaenger <ludewich@users.sourceforge.net> + - Added user interface and tests to quiver plot handler + - fixed some bugs in the new internal structure. There will be more + changes to prepare for Till Tantau's new Data Visualization Engine - - added sanity checks such that 'xmin/max' and friends can't be invoked - within an \addplot. - - plot gnuplot: added user customizable styles to change the dummy - variables. The initial config will now use 'x' for 1d, 'x,y' for 2d, 't' - for 1d parametric and 'u,v' for 2d parametric plots. - - fixed bug: one couldn't use different log/normal scalings in a group - plot. Relaxed sanity checking here. - - added docs for |variable| and |variable y| which appeared to be missing. +2010-01-30 Christian Feuersaenger <ludewich@users.sourceforge.net> -2010-01-14 Christian Feuersaenger <ludewich@users.sourceforge.net> - - - fixed that '\addlegendimage' did not respect the every plot styles. - - added 'every legend image post' style. + - First draft of a quiver plot handler (undocumented). + +2010-01-29 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - Rewrote internal structure to allow better extensability of the plot + handlers, particularly the number of accepted input data fields. + +2010-01-26 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - Fixed problem with spurious white space occuring during table input command + - added 'visualization depends on'. 2010-01-26 Christian Feuersaenger <ludewich@users.sourceforge.net> @@ -366,18 +774,16 @@ plot. Relaxed sanity checking here. - added docs for |variable| and |variable y| which appeared to be missing. -2010-01-15 Christian Feuersaenger <ludewich@users.sourceforge.net> - - - added support to generate makefile dependencies for pgfplots input files - automatically - 2010-01-14 Christian Feuersaenger <ludewich@users.sourceforge.net> - fixed that '\addlegendimage' did not respect the every plot styles. - added 'every legend image post' style. +2010-01-15 Christian Feuersaenger <ludewich@users.sourceforge.net> + + - added support to generate makefile dependencies for pgfplots input files + automatically ->>>>>>> 2010-03-23 Christian Feuersaenger <ludewich@users.sourceforge.net> - Fixed bug: \pgfplotstablesave did not reset 'postproc cell content' @@ -446,16 +852,6 @@ - fixed bug: \coordindex for plot table from already loaded structure was wrong. -2010-01-26 Christian Feuersaenger <ludewich@users.sourceforge.net> - - - Introduced 'compat=1.3' . The name 'compat=newest' was not not such a - good idea since it might introduce a problem for following releases. - - Emphasized key names in references to show that /pgfplots/, /tikz/ and - similar prefixes are unnecessary. - - Fixed the 'xticklabels' key such that it also accepts '\\' terminated - lists. This fixes strange bugs with dots '.' as last characters in - entries. - 2010-01-21 Christian Feuersaenger <ludewich@users.sourceforge.net> - added sanity checks such that 'xmin/max' and friends can't be invoked within an \addplot. diff --git a/Master/texmf-dist/doc/latex/pgfplots/Makefile b/Master/texmf-dist/doc/latex/pgfplots/Makefile index daed5651ffe..23e3e471e83 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/Makefile +++ b/Master/texmf-dist/doc/latex/pgfplots/Makefile @@ -1,10 +1,11 @@ PDFLATEX=pdflatex -shell-escape -all: pgfplots.pdf pgfplotstable.pdf TeX-programming-notes.pdf +all: pgfplots.pdf pgfplotstable.pdf TeX-programming-notes.pdf pgfplotstodo.pdf @echo "$^ have been compiled successfully. I did NOT check for references, so you may need to rerun make several times." notes: TeX-programming-notes.pdf +todo: pgfplotstodo.pdf pgfplots: pgfplots.pdf pgfplotstable: pgfplotstable.pdf @@ -24,7 +25,7 @@ pgfplots.makefile: @export TEXMFCNF=.: && $(PDFLATEX) pgfplots clean: - rm -f *.aux *.ind *.idx *.toc *.out *.log *.ilg *.dvi pgfplots.pdf pgfplotstable.pdf *.djs *.bbl *.blg figures/expensiveexample* + rm -f *.aux *.ind *.idx *.toc *.out *.log *.ilg *.dvi pgfplots.makefile pgfplots.pdf pgfplotstable.pdf *.djs *.bbl *.blg figures/expensiveexample* FORCE: diff --git a/Master/texmf-dist/doc/latex/pgfplots/TeX-programming-notes.pdf b/Master/texmf-dist/doc/latex/pgfplots/TeX-programming-notes.pdf Binary files differindex 84d7c571922..82a4fcb2760 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/TeX-programming-notes.pdf +++ b/Master/texmf-dist/doc/latex/pgfplots/TeX-programming-notes.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/TeX-programming-notes.tex b/Master/texmf-dist/doc/latex/pgfplots/TeX-programming-notes.tex index c675157b408..18cad8e6738 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/TeX-programming-notes.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/TeX-programming-notes.tex @@ -108,12 +108,12 @@ The value is now \the\dimen0. \end{codeexample} The same rules with expansion of macros after assignments apply here as well. - The |\dimen| registers perform their arithmetics internally with 32 bit scaled integers, so called `scaled point' with unit `|sp|'. It holds |1sp=65536pt|=$2^{16}$|pt|. One of the 32 bits is used as sign. The total number range in |pt| is $[-(2^{30}-1)/2^{16}, (2^{30}-1)/2^{16} ] = [-16383.9998,+16383.9998]$\footnote{Please note that this does not cover the complete range of a 32 bit integer, I do not know why.}. + The |\dimen| registers perform their arithmetics internally with 32 bit scaled integers, so called `scaled point' with unit `|sp|'. It holds |1pt=65536sp|=$2^{16}$|sp|. One of the 32 bits is used as sign. The total number range in |pt| is $[-(2^{30}-1)/2^{16}, (2^{30}-1)/2^{16} ] = [-16383.9998,+16383.9998]$\footnote{Please note that this does not cover the complete range of a 32 bit integer, I do not know why.}. \end{command} \begin{command}{\toks\meta{number}} \label{cmd:toks} - There are also 255 token registers which can be thought of as special string variables. Of course, every macro assignment |\def\macro|\marg{content} is also some kind of string variable, but token registers are special: their contents won't be expanded when used with |\the\toks|\meta{number}. This can be used for fine grained expansion control, see section~\ref{sec:expansion:control} below. + There are also 255 token registers which can be thought of as special string variables. Of course, every macro assignment |\def\macro|\marg{content} is also some kind of string variable, but token registers are special: their contents won't be expanded when used with |\the\toks|\meta{number}. This can be used for fine grained expansion control, see Section~\ref{sec:expansion:control} below. \end{command} \subsubsection{Allocating Registers} @@ -417,7 +417,7 @@ because |\noexpand\a| yields the token `|\a|' (unexpanded)\footnote{The \texttt{ \end{command} \subsubsection{Token Registers} -Now, we turn to token registers. As we have already seen in section~\ref{cmd:toks}, a token register stores a token list. A macro does also store a token list in its \marg{replacement text}, so where is the difference? There are two differences: +Now, we turn to token registers. As we have already seen in Section~\ref{cmd:toks}, a token register stores a token list. A macro does also store a token list in its \marg{replacement text}, so where is the difference? There are two differences: \begin{enumerate} \item Token registers are faster. \item The contents of token registers will \emph{never} be expanded. @@ -434,7 +434,7 @@ The following examples demonstrates the second point. |Macro `d' is defined to be `macro:->A \token list \a \b \count 0=42 will never be expanded'|. -So, the contents of |\toks0| has been copied unexpanded into |\d|, although we have just |\edef|. Note that the space token after |\the\toks0| is indeed important! \TeX\ uses it to delimit the integer |0|. Without the space token, it would have continued scanning, even beyond the boundaries of the replacement text of |\edef| (see section~\ref{sec:variables} for details about this scanning). +So, the contents of |\toks0| has been copied unexpanded into |\d|, although we have just |\edef|. Note that the space token after |\the\toks0| is indeed important! \TeX\ uses it to delimit the integer |0|. Without the space token, it would have continued scanning, even beyond the boundaries of the replacement text of |\edef| (see Section~\ref{sec:variables} for details about this scanning). The example is very simple, and we could have done the same with |\expandafter| as before. But let's try something more difficult: we want to assemble a new macro which consists of different pieces. Each piece is stored in a macro, and for whatever reason, we only want top-level expansion of the single pieces. And: the pieces won't be adjacent to each other. We can assemble the target macro using the following example listing. @@ -637,6 +637,239 @@ Let's start with macro definitions which should be carried over the end of the g Sometimes one needs to copy other variables outside of a scope. The trick with a temporary global variable works always, of course. But it is also possible to define a macro which contains commands to apply any required changes and transport that macro out of the scope. +\subsection{Branching} +\label{sec:branching} + +Here we discuss some of the available branching constructions of \TeX, with emphasis on conditions involving numbers and tokens. + +\begin{command}{ifnum\meta{count/integer number}=\meta{count/integer number}\meta{true-block}\textbackslash else\meta{false-block}\textbackslash fi} +|\ifnum| compare integer numbers or integer registers (|\count| registers) and contains two branches, one is executed in the true case, the other in the case of false: +\begin{codeexample}[] +\ifnum1=2 % this space is important. +This is shown if above were true. +\else +This is shown if above results to false. +\fi +\end{codeexample} + + Note that the |\else| with its \meta{false-block} is optional. +\end{command} + +\begin{command}{ifdim\meta{dimen/fixed point number}=\meta{dimen/fixed point number}\meta{true-block}\textbackslash else\meta{false-block}\textbackslash fi} + Similar to |\ifnum|, |\ifdim| compares two fixed point numbers or |\dimen| registers. The numbers must have a unit. +\begin{codeexample}[] +\ifdim1pt=2pt % this space is important. +This is shown if above were true. +\else +This is shown if above results to false. +\fi +\end{codeexample} +\end{command} + +\begin{command}{ifx\meta{token1}\meta{token2}\meta{true-block}\textbackslash else\meta{false-block}\textbackslash fi} +|\ifx| is a bit more complex: It compares two \emph{tokens} up to their first-level expansion. +\begin{codeexample}[] +\def\empty{\empty} +\ifx\empty\empty % +This is shown if the two tokens have equal expansion. +\else +This is shown if the two tokens expand to something different. +\fi +\end{codeexample} + +Here, we have defined a token |\empty| to be a replacement for |\empty| and subsequently have compared whether these two tokens are equal in first-level expansion. Note that the definition is actually nonsense. If \TeX{} ever were to go through the whole expansion -- i.e. we would put |\empty| somewhere else -- it would do so indefinitely. However, with |\ifx| only first-level expansion is done and compared. Hence, the statement evaluates to true. + +Have a look at the following example: +\begin{codeexample}[] +\def\empty{\relax} +\ifx\empty\relax % +This is shown if the two tokens have equal expansion. +\else +This is shown if the two tokens expand to something different. +\fi +\end{codeexample} + +On first glance, this should evaluate to true: |\empty| is defined as a replacement for |\relax|. But it does not. Why? + +|\empty| is expanded to |\relax|, however |\relax| expanded has a different meaning, namely stop scanning and not |\relax| anymore. Hence, they are different and the statement is false! If the expansion in |\ifx| were to be taken till maximum, both would be equal but not in the case of a comparison on first-level expansion only. +\end{command} + +\begin{command}{if\meta{token1}\meta{token2}\meta{true-block}\textbackslash else\meta{false-block}\textbackslash fi} + The |\if| comparison is closely related to the |\ifx| conditional, with one major exception: it expands tokens until it finds the next two unexpandable tokens. If these two tokens are the same, it expands to the \meta{true-block}, otherwise to the \meta{false-block}. + + The |\if| conditional should be handled with care as it might produce undesirable effects. Use it only if you know what you do. + + A useful example is if you \emph{know} that a macro contains at most one character, and you want to test for a particular one: +\begin{codeexample}[] +\def\choice{a} +\if b\choice + This is shown for the `b' choice. +\else + This is shown for all other choices. +\fi +\end{codeexample} +\end{command} + +\begin{command}{iftrue\meta{true-block}\textbackslash else\meta{false-block}\textbackslash fi} + A ``conditional'' which always invokes the \meta{true-block}. +\end{command} +\begin{command}{iffalse\meta{true-block}\textbackslash else\meta{false-block}\textbackslash fi} + A ``conditional'' which always invokes the \meta{false-block}. +\end{command} + +\subsubsection{Boolean Variables} +\begin{command}{\newif\meta{if-name}} + You can declare a new ``boolean variable `|\ifsupermanmode| by means of |\newif\ifsupermanmode|. Afterwards, you can use the |\supermanmodetrue| and |\supermanmodefalse| switches to assign the boolean and |\ifsupermanmode| to check it. + + The \meta{if-name} has to start with |\if| (to support scans for nested |\if...\fi| pairs, see below). +\end{command} + +\subsubsection{Special Cases for Conditionals} +Whenever you work with |\if|\ldots\ and friends, you should know the following features: +\begin{enumerate} + \item |\if...\else...\fi| is expandable (including each of the single macros |\if...|, |\else| and |\fi|), which means you can even use it inside of |\edef|: +\begin{codeexample}[] +\def\choice{a} +\edef\temp{The choice is \if a\choice `a'\else not `a'\fi} +We have now \texttt{\string temp=\meaning\temp}. +\end{codeexample} + +\begin{codeexample}[] +\def\shownexttoken#1{The next token is `\texttt{\string#1}'.} +\def\mymacro{% + \ifnum1=1 % + \expandafter\shownexttoken% + \fi% +}% +\mymacro 23 +\end{codeexample} + This example is tricky. What would have happened without the |\expandafter|!? Well, |\shownexttoken| would be invoked with |#1=\fi|. This would lead to an error because the |\fi| would be missing, and it would spoil the effect since we do not want the |\fi| to be seen -- we expected |#1=2|. The |\expandafter| first expands |\fi| (which simply removes the |\fi| without further effect) such that |\shownexttoken| will see the |2| token in our example above. This would also have worked if there was an |\else| branch instead of |\fi|. + + \item You should generally make sure that the matching |\else| or |\fi| tokens are ``directly reachable'', i.e.\ without token expansion. + + The background here is that \TeX\ works on a token--based level: Whenever it encounters an |\if|\ldots\ statement, it evaluates it and scans tokens to find the matching end part (either an |\else| or an |\fi| token). But it will not expand tokens fduring this scan, although it will count nested |\if...\fi| pairs! Thus, if you are careless, it might become confused and your conditional will go awry. +\end{enumerate} + +\subsection{Loops} +\label{sec:loops} +As you have seen, in \TeX{} we have a a very specific control over token expansion. This makes it possible to construct even loops via means of recursion. In essence, a loop consist of the following parts: +\begin{itemize} + \item counter or, more generally, list of items + \item incrementor, or more generally, a next item picker + \item threshold or, more generally, an end list marker + \item a check of the threshold or end marker, respectively +\end{itemize} + +Leafing through the sections above, we realize that all of this is actually in place: We do know about counters, we do know about branching. Only the specifics of how to create these loops is still to be made clear. We will show both cases, the counting loop and the loop over a list of items in the following in detail. + +In general, for a loop done via a recursion we need two definitions: One for the loop start and another for the loop step. + +\subsubsection{Counting loops} +\label{sec:counting:loops} +For a counting loop, we need a counter |\count0|, an incrementor |\advance|, a threshold |3| and a check |\ifnum\count=10| if the threshold has been reached. + + +\begin{codeexample}[] +\long\def\countingloop#1 in #2:#3#4{% + #1=#2 % + \loopcounter{#1}{#3}{#4}% +} + +\long\def\loopcounter#1#2#3{% + #3% + \ifnum#1=#2 % + \else% + \advance#1 by1 % + \loopcounter{#1}{#2}{#3}% + \fi% +} +\countingloop{\count0} in 0:{3}{% + The current value is `\the\count0'\par +} +\end{codeexample} + +There are some subtleties to the above example: +\begin{itemize} + \item We put a lot of \% in the example. Why? Note that whenever \TeX{} scans for a number -- e.\,g. as in the case of |#1=#2| -- it will continue scanning token by token, that is digit by digit, till he is sure that the number has ended, even over white space, and even expanding macros in case they themself might not represent numbers again. Hence, \% tells \TeX{} to stop scanning. It is generally good practice to place \% to tell \TeX{} to stop scanning for more digits. However, there are some exceptions to it as well: In case of |\advance#1 by1| one should keep a white space in between, as well as in the case of |\ifnum#1=#2|. + \item We placed the threshold |3| in |\countingloop{\count0} in 0:{3}| in curly brackets. Why? \TeX{} otherwise will recognize only the token |1| if a threshold of e\,g. |10| is given and stumble over the now remnant `extra' argument |0|. That is because a single letter represents a token to \TeX{}. Hence, two letters are two tokens and -- ungrouped -- become two arguments. Here, we have to group the threshold to make clear what we mean. + \item One last thing becomes clear first when debugging is activated: As loops are done by recursion, i.\,e. by expansion followed by expansion till some threshold is reached, we will end with a lot of |\fi|s in the above case. If we place |\tracingmacros=2 \tracingcommands=2| before the |\countingloop| call and inspect the log file this will become apparent. This is bad because \TeX{} will keep a stack frame open for each |\if|\ldots|\fi| sequence. If we now have a loop over 10.000 items \ldots + \item It is not good practice to use one of the system counters, here |\count0|, becaused one can never be sure that is not used for something else or changed somewhere else. E.\,g. when the page is full, \TeX{} will interrupt the current sequence of tokens to deal with creating a new page and finishing the old one, in this course changing |\count0|. Hence, we should also create our own counter. +\end{itemize} + +Hence, we modify the example as follows: +\begin{codeexample}[] +\long\def\countingloop#1 in #2:#3#4{% + #1=#2 % + \loopcounter{#1}{#3}{#4}% +} + +\long\def\loopcounter#1#2#3{% + #3% + \ifnum#1=#2 % + \let\next=\relax% + \else + \advance#1 by1 % + \def\next{\loopcounter{#1}{#2}{#3}}% + \fi + \next +} +\newcount\ourcounter + +\countingloop{\ourcounter} in 0:{3}{% + The current value is `\the\ourcounter'\par +} +\end{codeexample} + +Principally, nothing has changed in terms of the output. However, notice that we have introduced the macro |\next| which either recurses into the next level -- but after the |\fi| statement has been given -- or ends the recursion by simply containing |\relax|. Also, we have declared a new counter called |\ourcounter| that is safe from harm. + +Finally, let us briefly summarize what happens in detail: +\begin{enumerate} + \item |\countingloop|\ldots is expanded to an assignment |#1=#2| and another macro |\loopcounter|\ldots. + \item The assignment is done: |\ourcounter| is set to the starting value |0|. + \item\label{countingloop:loopstart} The actual loop macro is expanded to the command block -- printing the current value -- and an if statement. + \item The current value is printed. + \item |\ourcounter| is compared to the threshold |3| and \ldots + \begin{itemize} + \item False, i.\,e. the if statement is expanded to an |\advance| statement followed by defining |\next| to be another call of the same macro loop. + \item True, i.\,e. |\next| is set to be just |\relax|. + \end{itemize} + \item The statement is still false: |\advance| will increase |\ourcounter| by one, it is now |1|. |\next| is set to the loop macro. + \item The loop macro is again expanded, go to step~\ref{countingloop:loopstart}. |\ourcounter| is \ldots |2| \ldots |\ourcounter| is |3|. + \item Now the statement is true: |\next| is expanded to |\relax| and nothing happens. +\end{enumerate} + +\subsubsection{Loops over list of items} +\label{sec:loops:over:list:of:items} +Looping over a list of items is very similar, only we will need |\ifx| in place of |\ifnum| and we need some end marker instead of the threshold value. However, how do we specify the list itself? Let's make some comma-separated list, e.\,g. |{a,b,c,d}| and call the end marker |\listingloopENDMARKER|. + +\begin{codeexample}[] +\def\listingloopENDMARKER{\par \listingloopENDMARKER} +\long\def\listingloop#1in#2#3{% + \looppicker{#1}{#3}#2,\listingloopENDMARKER,% +}% +\long\def\looppicker#1#2#3,{% + \def\tempitem{#3}% + \ifx\tempitem\listingloopENDMARKER + \let\next=\relax% + \else + \def#1{#3}% + #2% + \def\next{\looppicker{#1}{#2}}% + \fi + \next +}% +\listingloop\x in{a,b,c,,d,e}{% + The current item is `\x' +} +\end{codeexample} + +Again, we make clear the subtleties contained therein: +\begin{itemize} + \item We have defined |\listingloopENDMARKER| to replace itself. This is possible because |\ifx| will only compare first-level expansion, see Section~\ref{sec:branching}. + \item We seem to miss a white space in \ldots|#1in#2|\ldots. However, tokens are always ending with an additional white space as |\xin| is not equal to |\x in|. Hence, none is needed here and more than one white space would probably get gobbled. + \item The definition |\looppicker#1#2#3,|\ldots has three arguments but the recursive call |\looppicker{#1}{#2}| only gives two arguments!? This is the actual magic making this type of list possible! \TeX{} is actually scanning beyond the scope of the given token to obtain the third argument. In effect, we are biting off piece by piece, list item by list item off the given list. All because we have stated an additional |,| -- comma being the item separator -- in the definition of the |\looppicker| macro. The expansion of the loop macro will always pick up one more item from the list concatenated to its end until it has reached the |\ENDMARKER|. This is added to the list's very end on the loop's start, and there it stops. +\end{itemize} + \subsection{More On \TeX} This document is far from complete. I recommend reading about conditional expressions in \cite{schwartz} (german, online version) or \cite{texbook} (bounded book). Hints about loops can be found in the manual of \PGFPlots, \cite{pgfplots} and the manual of \PGF, \cite{tikz}. Moreover, \PGFPlots\ and \PGF\ come with a whole lot of utility functions which are documented in the source |.code.tex| files. @@ -650,6 +883,45 @@ This document is far from complete. I recommend reading about conditional expres %\section{Utility Function of \PGFPlots} +\section{Special Tricks} + +\subsection{Handling \# in Arguments} +More than once, I encountered the following difficulty: I wanted to collect an argument which contains the hash sign, `|#|'. That's not particularly difficult, but it can lead to a lot of strange error messages when the resulting argument shall be processed! Consider +\begin{codeexample}[code only] +\def\collectargument#1{% + \def\collectedcontent{#1}% + \ifx\collectedcontent\empty + It is empty. + \else + It is not empty, executing it: #1. + \fi +}% + +\collectargument{}% works + +\collectargument{something}% works + +\collectargument{% does not work! + \def\something#1{which depends on #1} +}% +\end{codeexample} +The code in this example is relatively simple: the |\collectargument| macro expects one argument and checks if it is empty (using |\ifx|, which is a common and reliable check for emptiness). It is is not empty, it executes it. The |\collectargument| macro works in most circumstances. More precisely: it works as long as there is \emph{no} hash sign in its argument! In our example, the third call fails with ``Illegal parameter number in definition of |\collectedcontent|.'' which occurs during the |\def\collectedcontent{#1}| line (and \TeX\ has reasons for this message due to the special meaning of the parameter expansion). + +The cure: redefine the |\collectargument| macro using +\begin{codeexample}[code only] +\def\collectargument#1{% + \toks0={#1}% + \edef\collectedcontent{\the\toks0}% + \ifx\collectedcontent\empty + It is empty. + \else + It is not empty, executing it: #1. + \fi +}% + +\end{codeexample} +\noindent (you may want to allocate a temporary token register for this task). What is the difference? Well, the |\toks0={#1}| assignment introduces no special meaning for the hash sign |#|, and |\the\toks0| neither. Note, however, that this requires |\edef\collectedcontent| instead of |\def\collectedcontent| since the |\the| statement needs to be expanded. Everything works as expected. + \printindex \bibliographystyle{abbrv} %gerapali} %gerabbrv} %gerunsrt.bst} %gerabbrv}% gerplain} diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_0.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_0.pdf Binary files differindex 4332cb3ccbe..acd73c30dbc 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_0.pdf +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_0.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_1.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_1.pdf Binary files differnew file mode 100644 index 00000000000..3f75f3f8085 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_1.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_1.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_1.tex new file mode 100644 index 00000000000..15b4e0d7dfa --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_1.tex @@ -0,0 +1,144 @@ + +\documentclass[a4paper]{report} +\usepackage{pgfplots} + +\pgfplotsset{compat=1.3} +\begin{document} +\begin{tikzpicture} + \begin{axis}[ + xbar, + width=12cm, + height=3.5cm, + enlarge y limits=0.5, + xlabel={\#participants}, + xmin=0, + symbolic y coords={no,yes}, + ytick=data, + nodes near coords, + nodes near coords align={horizontal}, + ] + \addplot coordinates {(3,no) (7,yes)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + xbar, + width=12cm, + height=3.5cm, + enlarge y limits=0.5, + xlabel={\#participants}, + symbolic y coords={no,yes}, + ytick=data, + nodes near coords, + nodes near coords align={horizontal}, + ] + \addplot coordinates {(1,no) (9,yes)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + xbar, + width=12cm, + height=3.5cm, + enlarge y limits=0.5, + xlabel={\#participants}, + xmin=0, + symbolic y coords={set A,set B}, + ytick=data, + nodes near coords, + nodes near coords align={horizontal}, + ] + \addplot coordinates {(6,set A) (4,set B)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar, + enlargelimits=0.15, + xlabel={\# of bananas}, + ylabel={\#participants}, + ytick={0,1,2,3}, + ymin=0, + symbolic x coords={1,2,3,4,5,more}, + nodes near coords, + ] + \addplot coordinates {(1,1) (2,1) (3,3) (4,2) (5,1) (more,2)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar stacked, + enlargelimits=0.15, + legend style={at={(0.5,-0.20)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={tool1, tool2, tool3, tool4, tool5, tool6, tool7}, + xtick=data, + x tick label style={rotate=45,anchor=east}, + ] + \addplot+[ybar] plot coordinates {(tool1,0) (tool2,2) (tool3,2) (tool4,3) (tool5,0) (tool6,2) (tool7,0)}; % never + \addplot+[ybar] plot coordinates {(tool1,0) (tool2,0) (tool3,0) (tool4,3) (tool5,1) (tool6,1) (tool7,0)}; % rarely + \addplot+[ybar] plot coordinates {(tool1,6) (tool2,6) (tool3,8) (tool4,2) (tool5,6) (tool6,5) (tool7,6)}; % sometimes + \addplot+[ybar] plot coordinates {(tool1,4) (tool2,2) (tool3,0) (tool4,2) (tool5,3) (tool6,2) (tool7,4)}; % often + \legend{never, rarely, sometimes, often} + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar, + enlargelimits=0.15, + legend style={at={(0.5,-0.15)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={tool8,tool9,tool10}, + xtick=data, + nodes near coords, + nodes near coords align={vertical}, + ] + \addplot coordinates {(tool8,7) (tool9,9) (tool10,4)}; + \addplot coordinates {(tool8,4) (tool9,4) (tool10,4)}; + \addplot coordinates {(tool8,1) (tool9,1) (tool10,1)}; + \legend{used,understood,not understood} + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar, + enlargelimits=0.15, + legend style={at={(0.5,-0.2)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={excellent,good,neutral,not good,poor}, + xtick=data, + nodes near coords, + nodes near coords align={vertical}, + x tick label style={rotate=45,anchor=east}, + ] + \addplot coordinates {(excellent,0) (good,8) (neutral,2) (not good,0) (poor,0)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar, + enlargelimits=0.15, + legend style={at={(0.5,-0.2)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={excellent,good,neutral,not good,poor}, + xtick=data, + nodes near coords, + nodes near coords align={vertical}, + x tick label style={rotate=45,anchor=east}, + ] + \addplot coordinates { (excellent,0) (good,7) (neutral,3) (not good,0) (poor,0)}; + \end{axis} +\end{tikzpicture} +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_10.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_10.pdf Binary files differnew file mode 100644 index 00000000000..cd081384d29 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_10.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_10.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_10.tex new file mode 100644 index 00000000000..3f11c01a719 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_10.tex @@ -0,0 +1,37 @@ + +\documentclass{article} +\usepackage{pgfplots} +\begin{document} +\begin{tikzpicture} +\begin{axis}[ + small, + width=12cm, + height=1.8in, + ymin=0, + ymax=10, + xmin=0, + xmax=2, + ybar, + ymajorgrids=true, + yminorgrids=false, + minor y tick num=0, + ytick pos=left, + xtick pos=left, + ytick align=center, + yticklabel={$\pgfmathprintnumber{\tick}\%$}, + xtick align=outside, + x tick style={}, + xticklabel style={rotate=45,anchor=east,font=\scriptsize\sffamily}, + extra y tick style={tick pos=right, ticklabel pos=right, grid +style={thick,color=black}}, + extra y ticks={6.25}, + extra y tick labels={Extra Label}, +] + +%\addplot plot[error bars/.cd,y dir=plus,y explicit,x dir=none] table +%[x=Index,y expr=100*\thisrow{AvgLocked},y error=Diff]{locked_tabbed.dat}; + +\end{axis} +\end{tikzpicture} +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_11.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_11.pdf Binary files differnew file mode 100644 index 00000000000..15c4213f18c --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_11.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_11.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_11.tex new file mode 100644 index 00000000000..3f11c01a719 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_11.tex @@ -0,0 +1,37 @@ + +\documentclass{article} +\usepackage{pgfplots} +\begin{document} +\begin{tikzpicture} +\begin{axis}[ + small, + width=12cm, + height=1.8in, + ymin=0, + ymax=10, + xmin=0, + xmax=2, + ybar, + ymajorgrids=true, + yminorgrids=false, + minor y tick num=0, + ytick pos=left, + xtick pos=left, + ytick align=center, + yticklabel={$\pgfmathprintnumber{\tick}\%$}, + xtick align=outside, + x tick style={}, + xticklabel style={rotate=45,anchor=east,font=\scriptsize\sffamily}, + extra y tick style={tick pos=right, ticklabel pos=right, grid +style={thick,color=black}}, + extra y ticks={6.25}, + extra y tick labels={Extra Label}, +] + +%\addplot plot[error bars/.cd,y dir=plus,y explicit,x dir=none] table +%[x=Index,y expr=100*\thisrow{AvgLocked},y error=Diff]{locked_tabbed.dat}; + +\end{axis} +\end{tikzpicture} +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_2.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_2.pdf Binary files differnew file mode 100644 index 00000000000..fb0b471b8df --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_2.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_2.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_2.tex new file mode 100644 index 00000000000..3f11c01a719 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_2.tex @@ -0,0 +1,37 @@ + +\documentclass{article} +\usepackage{pgfplots} +\begin{document} +\begin{tikzpicture} +\begin{axis}[ + small, + width=12cm, + height=1.8in, + ymin=0, + ymax=10, + xmin=0, + xmax=2, + ybar, + ymajorgrids=true, + yminorgrids=false, + minor y tick num=0, + ytick pos=left, + xtick pos=left, + ytick align=center, + yticklabel={$\pgfmathprintnumber{\tick}\%$}, + xtick align=outside, + x tick style={}, + xticklabel style={rotate=45,anchor=east,font=\scriptsize\sffamily}, + extra y tick style={tick pos=right, ticklabel pos=right, grid +style={thick,color=black}}, + extra y ticks={6.25}, + extra y tick labels={Extra Label}, +] + +%\addplot plot[error bars/.cd,y dir=plus,y explicit,x dir=none] table +%[x=Index,y expr=100*\thisrow{AvgLocked},y error=Diff]{locked_tabbed.dat}; + +\end{axis} +\end{tikzpicture} +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_3.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_3.pdf Binary files differnew file mode 100644 index 00000000000..55d823a5648 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_3.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_3.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_3.tex new file mode 100644 index 00000000000..664ddc7df31 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_3.tex @@ -0,0 +1,23 @@ + +\documentclass[10pt]{article} + +\usepackage{pgfplots} +\usepgfplotslibrary{groupplots} + +\begin{document} + +\begin{tikzpicture}% +%\begin{axis}[% +\begin{groupplot}[% + group style={group size=1 by 1},% +]% + \nextgroupplot; + \node[name=a] at (axis cs:0.1,-1) {N}; + \addplot coordinates{(0,1) (1,2)}; +\end{groupplot} +%\end{axis} + +\draw (a) circle (5pt); +\end{tikzpicture}% +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_4.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_4.pdf Binary files differnew file mode 100644 index 00000000000..63d9e554d87 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_4.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_4.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_4.tex new file mode 100644 index 00000000000..664ddc7df31 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_4.tex @@ -0,0 +1,23 @@ + +\documentclass[10pt]{article} + +\usepackage{pgfplots} +\usepgfplotslibrary{groupplots} + +\begin{document} + +\begin{tikzpicture}% +%\begin{axis}[% +\begin{groupplot}[% + group style={group size=1 by 1},% +]% + \nextgroupplot; + \node[name=a] at (axis cs:0.1,-1) {N}; + \addplot coordinates{(0,1) (1,2)}; +\end{groupplot} +%\end{axis} + +\draw (a) circle (5pt); +\end{tikzpicture}% +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_5.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_5.pdf Binary files differnew file mode 100644 index 00000000000..4cd0f1e8034 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_5.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_5.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_5.tex new file mode 100644 index 00000000000..3f11c01a719 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_5.tex @@ -0,0 +1,37 @@ + +\documentclass{article} +\usepackage{pgfplots} +\begin{document} +\begin{tikzpicture} +\begin{axis}[ + small, + width=12cm, + height=1.8in, + ymin=0, + ymax=10, + xmin=0, + xmax=2, + ybar, + ymajorgrids=true, + yminorgrids=false, + minor y tick num=0, + ytick pos=left, + xtick pos=left, + ytick align=center, + yticklabel={$\pgfmathprintnumber{\tick}\%$}, + xtick align=outside, + x tick style={}, + xticklabel style={rotate=45,anchor=east,font=\scriptsize\sffamily}, + extra y tick style={tick pos=right, ticklabel pos=right, grid +style={thick,color=black}}, + extra y ticks={6.25}, + extra y tick labels={Extra Label}, +] + +%\addplot plot[error bars/.cd,y dir=plus,y explicit,x dir=none] table +%[x=Index,y expr=100*\thisrow{AvgLocked},y error=Diff]{locked_tabbed.dat}; + +\end{axis} +\end{tikzpicture} +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_6.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_6.pdf Binary files differnew file mode 100644 index 00000000000..9f6faa0316b --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_6.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_6.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_6.tex new file mode 100644 index 00000000000..3f11c01a719 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_6.tex @@ -0,0 +1,37 @@ + +\documentclass{article} +\usepackage{pgfplots} +\begin{document} +\begin{tikzpicture} +\begin{axis}[ + small, + width=12cm, + height=1.8in, + ymin=0, + ymax=10, + xmin=0, + xmax=2, + ybar, + ymajorgrids=true, + yminorgrids=false, + minor y tick num=0, + ytick pos=left, + xtick pos=left, + ytick align=center, + yticklabel={$\pgfmathprintnumber{\tick}\%$}, + xtick align=outside, + x tick style={}, + xticklabel style={rotate=45,anchor=east,font=\scriptsize\sffamily}, + extra y tick style={tick pos=right, ticklabel pos=right, grid +style={thick,color=black}}, + extra y ticks={6.25}, + extra y tick labels={Extra Label}, +] + +%\addplot plot[error bars/.cd,y dir=plus,y explicit,x dir=none] table +%[x=Index,y expr=100*\thisrow{AvgLocked},y error=Diff]{locked_tabbed.dat}; + +\end{axis} +\end{tikzpicture} +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_7.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_7.pdf Binary files differnew file mode 100644 index 00000000000..950e03d078a --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_7.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_7.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_7.tex new file mode 100644 index 00000000000..1567c1d6eab --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_7.tex @@ -0,0 +1,25 @@ + +\documentclass{article} + +\usepackage{pgfplots} +\begin{document} +\begin{tikzpicture} +\begin{axis}[axis equal] +% FokkerDrI_layer_0.patches.dat contains: +% # each row is one vertex; three consecutive +% # vertices make one triangle (patch) +% 105.577 -19.7332 2.85249 +% 88.9233 -21.1254 13.0359 +% 89.2104 -22.1547 1.46467 +% # end of facet 0 +% 105.577 -19.7332 2.85249 +% 105.577 -17.2161 12.146 +% 88.9233 -21.1254 13.0359 +% # end of facet 1 +\addplot3[patch] + file + {plotdata/FokkerDrI_layer_0.patches.dat}; +\end{axis} +\end{tikzpicture} +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_8.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_8.pdf Binary files differnew file mode 100644 index 00000000000..f341833cb5a --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_8.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_8.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_8.tex new file mode 100644 index 00000000000..664ddc7df31 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_8.tex @@ -0,0 +1,23 @@ + +\documentclass[10pt]{article} + +\usepackage{pgfplots} +\usepgfplotslibrary{groupplots} + +\begin{document} + +\begin{tikzpicture}% +%\begin{axis}[% +\begin{groupplot}[% + group style={group size=1 by 1},% +]% + \nextgroupplot; + \node[name=a] at (axis cs:0.1,-1) {N}; + \addplot coordinates{(0,1) (1,2)}; +\end{groupplot} +%\end{axis} + +\draw (a) circle (5pt); +\end{tikzpicture}% +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_9.pdf b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_9.pdf Binary files differnew file mode 100644 index 00000000000..e61a15b136a --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_9.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_9.tex b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_9.tex new file mode 100644 index 00000000000..3f11c01a719 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/bugtracker/minimal_9.tex @@ -0,0 +1,37 @@ + +\documentclass{article} +\usepackage{pgfplots} +\begin{document} +\begin{tikzpicture} +\begin{axis}[ + small, + width=12cm, + height=1.8in, + ymin=0, + ymax=10, + xmin=0, + xmax=2, + ybar, + ymajorgrids=true, + yminorgrids=false, + minor y tick num=0, + ytick pos=left, + xtick pos=left, + ytick align=center, + yticklabel={$\pgfmathprintnumber{\tick}\%$}, + xtick align=outside, + x tick style={}, + xticklabel style={rotate=45,anchor=east,font=\scriptsize\sffamily}, + extra y tick style={tick pos=right, ticklabel pos=right, grid +style={thick,color=black}}, + extra y ticks={6.25}, + extra y tick labels={Extra Label}, +] + +%\addplot plot[error bars/.cd,y dir=plus,y explicit,x dir=none] table +%[x=Index,y expr=100*\thisrow{AvgLocked},y error=Diff]{locked_tabbed.dat}; + +\end{axis} +\end{tikzpicture} +\end{document} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig1.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig1.png Binary files differindex af18e37dabd..27bead1c2d5 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig1.png +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig1.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig2.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig2.png Binary files differindex 446a25616e1..9f0b5a394ca 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig2.png +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig2.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig3.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig3.png Binary files differindex 44a0cc17e97..c0ae9c52576 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig3.png +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig3.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig4.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig4.png Binary files differindex c72f79ac85c..59c0f47a1a6 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig4.png +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-fig4.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-log-snap0.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-log-snap0.png Binary files differnew file mode 100644 index 00000000000..e21a728696e --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-log-snap0.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-log-snap1.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-log-snap1.png Binary files differnew file mode 100644 index 00000000000..c841c79e37d --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-log-snap1.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-log-snap2.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-log-snap2.png Binary files differnew file mode 100644 index 00000000000..034307a144c --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-log-snap2.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-logcode-snap0.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-logcode-snap0.png Binary files differnew file mode 100644 index 00000000000..50d519f808f --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-logcode-snap0.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-logcode-snap1.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-logcode-snap1.png Binary files differnew file mode 100644 index 00000000000..afa84bc09c7 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-logcode-snap1.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-scatter0.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-scatter0.png Binary files differnew file mode 100644 index 00000000000..746c0839333 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-scatter0.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-scatter1.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-scatter1.png Binary files differnew file mode 100644 index 00000000000..97c804f2dde --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-scatter1.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-scatter2.png b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-scatter2.png Binary files differnew file mode 100644 index 00000000000..52742f9e2a7 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable-scatter2.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable.tex b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable.tex index 2bf3609b914..fa75e0cb81e 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/figures/pgfplotsclickable.tex @@ -5,11 +5,15 @@ \usepgfplotslibrary{clickable} \begin{document} +\parindent=0pt +\parskip=30pt + \begin{tikzpicture} \begin{axis}[xlabel=$x$,ylabel=$y$, domain=-2:2, samples=17, - legend style={at={(0.5,0.98)},anchor=north,legend columns=-1} + legend style={at={(0.5,0.98)},anchor=north,legend columns=-1}, + clickable coords, ] \addplot {x}; \addplot {x^2}; @@ -23,12 +27,99 @@ xlabel=$x$,ylabel=$f(x)$, samples=10, domain=0:6, - legend style={at={(0.5,0.98)},anchor=north,legend columns=-1} + legend style={at={(0.5,0.98)},anchor=north,legend columns=-1}, + clickable coords, ] \addplot {exp(x)}; \addplot {10^x}; \legend{$\exp(x)$,$10^x$} \end{semilogyaxis} \end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[xlabel=$x$,ylabel=$y$, + xmin=0,xmax=1e3, + ymin=0,ymax=1e3, + ] + \end{axis} +\end{tikzpicture} + + +\begin{tikzpicture} + \begin{loglogaxis}[clickable coords={Level \thisrow{level} (q=\thisrow{q})}] + \addplot table[x=dof,y=error] { +level dof error q +1 4 2.50000000e-01 48 +2 16 6.25000000e-02 25 +3 64 1.56250000e-02 41 +4 256 3.90625000e-03 8 +5 1024 9.76562500e-04 22 +6 4096 2.44140625e-04 46 +7 16384 6.10351562e-05 40 +8 65536 1.52587891e-05 3 +9 262144 3.81469727e-06 1 +10 1048576 9.53674316e-07 9 + }; + + \end{loglogaxis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + clickable coords={(xy): \thisrow{label}}, + scatter/classes={ + a={mark=square*,blue},% + b={mark=triangle*,red},% + c={mark=o,draw=black}}, + ] + + \addplot[scatter,only marks, + scatter src=explicit symbolic] + table[meta=label] { +x y label +0.1 0.15 a +0.45 0.27 c +0.02 0.17 a +0.06 0.1 a +0.9 0.5 b +0.5 0.3 c +0.85 0.52 b +0.12 0.05 a +0.73 0.45 b +0.53 0.25 c +0.76 0.5 b +0.55 0.32 c + }; + + \end{axis} +\end{tikzpicture} + + + +\begin{tikzpicture} + \begin{loglogaxis}[clickable coords code={% + \pgfmathprintnumberto[verbatim,precision=1]{\thisrow{error}}\pgfmathresult% + \edef\pgfplotsretval{log error \pgfmathresult}% + \pgfmathprintnumberto[verbatim,frac]{\thisrow{frac}}\pgfmathresult% + \edef\pgfplotsretval{\pgfplotsretval, R=\pgfmathresult}% + }]% + \addplot table[x=dof,y=error] { +level dof error frac +1 4 2.50000000e-01 0.5 +2 16 6.25000000e-02 0.75 +3 64 1.56250000e-02 0.1 +4 256 3.90625000e-03 0.2 +5 1024 9.76562500e-04 0.5 +6 4096 2.44140625e-04 0.8 +7 16384 6.10351562e-05 0.125 +8 65536 1.52587891e-05 0.725 +9 262144 3.81469727e-06 0.625 +10 1048576 9.53674316e-07 1 + }; + + \end{loglogaxis} +\end{tikzpicture} + + \end{document} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfmanual-en-macros.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfmanual-en-macros.tex index e12e483dcb6..e9082ddce87 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfmanual-en-macros.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfmanual-en-macros.tex @@ -798,7 +798,7 @@ \gdef\@gobble@till@return#1^^M{} \gdef\@gobble@till@return@ignore#1^^M{\ignorespaces} \gdef\typesetcomment{\catcode`\%=13\def%{\@typeset@till@return}} -\gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\textsl{\char`\%#1}}\par} +\gdef\@typeset@till@return#1^^M{{\def%{\char`\%}\pgfkeysvalueof{/codeexample/comment font}{\char`\%#1}}\par} \endgroup % Define tab-implementation functions @@ -873,8 +873,9 @@ vbox/.code= {\def\code@pre{\vbox\bgroup\setlength{\hsize}{\linewidth-6pt}}\def\code@post{\egroup}}, ignorespaces/.code= {\let\@gobble@till@return=\@gobble@till@return@ignore}, leave comments/.code= {\def\code@catcode@hook{\catcode`\%=12}\let\commenthandler=\relax\let\typesetcomment=\relax}, + comment font/.initial=\textsl,% FIXME : doesn't work!? tabsize/.initial=0, - newline/.initial=, + newline/.initial=^^J,% use 'newline=^^J' to insert a *real* newline every codeexample/.style={width=4cm+7pt}, } @@ -914,6 +915,7 @@ \commenthandler% \xdef\code@temp{#1}% removes returns and comments }% +%\message{Nach returntospace: \meaning\code@temp^^J^^J^^J}% \colorbox{graphicbackground}{\color{black}\ignorespaces% \code@pre\expandafter\scantokens\expandafter{\code@temp\ignorespaces}\code@post\ignorespaces}% }% diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots-macros.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots-macros.tex index 92a024a6035..fbb1c10f42c 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots-macros.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots-macros.tex @@ -102,17 +102,18 @@ \pgfplotsmanualexternalexpensivetrue@orig \tikzexternalize[ prefix=figures/expensiveexample, + figure name={}, export=false, % needs to be activated for single pictures (i.e. expensive ones) mode=list and make, - verbose IO=false, + verbose=false, %xport=true,% FASTER FOR DEBUGGING ] - {pgfplots} \tikzifexternalizing{% \nofiles \pgfkeys{/pdflinks/codeexample links=false}% }{}% }% +\pgfkeys{/pgf/images/include external/.code={\href{file:#1}{\pgfimage{#1}}}} % FIXME : NOT FOR THE FINAL VERSION \newif\ifpgfplots@example@is@expensive @@ -518,7 +519,14 @@ \newif\ifxykeyfound +\def\pgfmanual@xykey@install@replacements{% + \def\ { }% + \def\space{ }% +}% + \def\xykey@eq#1=#2\@nil{% + \begingroup + \pgfmanual@xykey@install@replacements \def\x{x}% \xdef\mykey{#1}% \def\xykey@@{#1}% @@ -536,8 +544,11 @@ \xdef\mykey{#1}% \expandafter\extractkey\mykey=#2\@nil% \fi + \endgroup } \def\xykey@noeq#1\@nil{% + \begingroup + \pgfmanual@xykey@install@replacements \def\x{x}% \xdef\mykey{#1}% \def\xykey@@{#1}% @@ -555,6 +566,7 @@ \xdef\mykey{#1}% \expandafter\extractkey\mykey\@nil% \fi + \endgroup } % \begin{pgfplotsxykey}{\x label=value} @@ -664,6 +676,8 @@ \pgfplotsassertcmdkeyexists{#2}% \begin{pgfplotskey}{#1=\marg{key-value-list}} An abbreviation for \texttt{\pgfmanualpdfref{#2}{#2}/\pgfmanualpdfref{/handlers/.append style}{.append style}=}\marg{key-value-list}. + + It appends options to the already existing style \texttt{\pgfmanualpdfref{#2}{#2}}. \end{pgfplotskey} } \def\pgfplotsshortxystylekey #1=#2\pgfeov{% @@ -671,7 +685,12 @@ \pgfplotsassertXYcmdkeyexists{#2}% \begin{pgfplotsxykey}{#1=\marg{key-value-list}} An abbreviation for {\def\x{x}\texttt{\pgfmanualpdfref{#2}{#2}/\pgfmanualpdfref{/handlers/.append style}{.append style}=}}\marg{key-value-list} - (or the respective style for $y$, {\def\x{y}\texttt{\pgfmanualpdfref{#2}{#2}/\pgfmanualpdfref{/handlers/.append style}{.append style}=}}). + (or the respective styles for $y$, + {\def\x{y}\texttt{\pgfmanualpdfref{#2}{#2}/\pgfmanualpdfref{/handlers/.append style}{.append style}=}}\marg{key-{}value-{}list}, + and the $z$--axis, + {\def\x{z}\texttt{\pgfmanualpdfref{#2}{#2}/\pgfmanualpdfref{/handlers/.append style}{.append style}=}}\marg{key-{}value-{}list}). + + It appends options to the already existing style {\def\x{x}\texttt{\pgfmanualpdfref{#2}{#2}}}. \end{pgfplotsxykey} } \def\pgfplotsshortstylekeys #1,#2=#3\pgfeov{% @@ -692,7 +711,10 @@ #1=\marg{key-value-list}, #2=\marg{key-value-list}} Different abbreviations for {\def\x{x}\texttt{\pgfmanualpdfref{#3}{#3}/\pgfmanualpdfref{/handlers/.append style}{.append style}=}}\marg{key-value-list} - (or the respective style for $y$, {\def\x{y}\texttt{\pgfmanualpdfref{#3}{#3}/\pgfmanualpdfref{/handlers/.append style}{.append style}=}}). + (or the respective styles for $y$, + {\def\x{y}\texttt{\pgfmanualpdfref{#3}{#3}/\pgfmanualpdfref{/handlers/.append style}{.append style}=}\marg{key-{}value-{}list}}, and $z$, + {\def\x{z}\texttt{\pgfmanualpdfref{#3}{#3}/\pgfmanualpdfref{/handlers/.append style}{.append style}=}\marg{key-{}value-{}list}}% + ). \end{pgfplotsxykeylist} } diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.basic.reference.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.basic.reference.tex index a51bcaed5b8..e81c8fcb7d2 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.basic.reference.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.basic.reference.tex @@ -39,12 +39,25 @@ All collected = \allcollected. \paragraph{Remark: } The special syntax \meta{list}=\meta{$x_0$}|,|\meta{$x_1$}|,...,|\meta{$x_n$}, i.e.\ with two leading elements, followed by dots and a final element, invokes the math parser for the loop. Thus, it allows larger number ranges than any other syntax if |/pgf/fpu| is active. In all other cases, |\pgfplotsforeachungrouped| invokes |\foreach| and provides the results without \TeX\ groups. + Keep in mind that inside of an axis environment, all loop constructions (including custom loops, |\foreach| and |\pgfplotsforeachungrouped|) need to be handled with care: loop arguments can only be used in places where they are immediately evaluated; but \PGFPlots\ postpones the evaluation of many macros. For example, to loop over something and to generate axis descriptions of the form |\node at (axis cs:\i,0.5)....|, the loop macro |\i| will be evaluated in |\end{axis}| -- but at that time, the loop is over and its value is lost. The correct way to handle such an application is to \emph{expand} the loop variable \emph{explicitly}. For example: +\begin{codeexample}[code only] +\pgfplotsforeachungrouped \i/\j in { + 1 / a, + 2 / b, + 3 / c +}{ + \edef\temp{\noexpand\node at (axis cs: \i,0.5) {\j};} + % \show\temp % lets TeX show you what \temp contains + \temp +} +\end{codeexample} + The example generates three loop iterations: |\i=1|, |\j=a|; then |\i=2|, |j=b|; then |\i=3|, |\j=c|. Inside of the loop body, it expands them and assigns the result to a macro using an ``expanded definition'', |\edef|. The result no longer contains either |\i| or |\j| (since these have been expanded). Then, it invokes the resulting macro. Details about the \TeX\ command |\edef| and expansion control can be found in the document \href{file:TeX-programming-notes.pdf}{TeX-programming-notes.pdf} which comes with \PGFPlots. \end{command} \begin{command}{\pgfplotsinvokeforeach\marg{list} \marg{command}} A variant of |\pgfplotsforeachungrouped| (and such also of |\foreach|) which replaces any occurrence of |#1| inside of \meta{command} once for every element in \meta{list}. Thus, it actually assumes that \marg{command} is like a |\newcommand| body. - In other words, \marg{command} is invoked for every element of \marg{list}. The actual element of \marg{list} is available as |#1|. + In other words, \meta{command} is invoked for every element of \meta{list}. The actual element of \meta{list} is available as |#1|. As |\pgfplotsforeachungrouped|, this command does \emph{not} introduce extra scopes (i.e.\ it is ungrouped as well). @@ -97,10 +110,10 @@ The result is `\pgfmathresult'. \end{command} \begin{command}{\pgfplotsiffileexists\marg{filename}\marg{true code}\marg{false code}} - Invokes \marg{true code} if \marg{filename} exists and \marg{false code} if not. Can be used in looping macros, for example to plot every data file until there are no more of them. + Invokes \meta{true code} if \meta{filename} exists and \meta{false code} if not. Can be used in looping macros, for example to plot every data file until there are no more of them. \end{command} \begin{command}{\pgfplotsutilifstringequal\marg{first}\marg{second}\marg{true code}\marg{false code}} - A simple ``strcmp'' tool which invokes \marg{true code} if \marg{first} $=$\marg{second} and \marg{false code} otherwise. This does not expand macros. + A simple ``strcmp'' tool which invokes \meta{true code} if \meta{first} $=$\meta{second} and \meta{false code} otherwise. This does not expand macros. \end{command} @@ -114,15 +127,15 @@ The result is `\pgfmathresult'. \subsection[Commands Inside Of PGFPlots Axes]{Commands Inside Of {\normalfont\PGFPlots} Axes} \begin{command}{\autoplotspeclist} -This command should no longer be used, although it will be kept as technical implementation detail. Please use the `|cycle list|' option, section~\ref{sec:cycle:list}. +This command should no longer be used, although it will be kept as technical implementation detail. Please use the `|cycle list|' option, Section~\ref{sec:cycle:list}. \end{command} \begin{command}{\logten} -Expands to the constant $\log(10)$. Useful for logplots because $\log(10^i) = i\log(10)$. This command is only available inside of an \Tikz-picture. +Expands to the constant $\log(10)$. Useful for logplots because $\log(10^i) = i\log(10)$. This command is only available inside of a \Tikz-picture. \end{command} \begin{command}{\pgfmathprintnumber\marg{number}} -Generates pretty--printed output\footnote{This method was previously \texttt{\textbackslash prettyprintnumber}. It's functionality has been included into \PGF\ and the old command is now deprecated.} for \marg{number}. This method is used for every tick label. +Generates pretty--printed output\footnote{This method was previously \texttt{\textbackslash prettyprintnumber}. Its functionality has been included into \PGF\ and the old command is now deprecated.} for \meta{number}. This method is used for every tick label. The number is printed using the current number printing options, see the manual of \PGFPlotstable\ which comes with this package for the different number styles, rounding precision and rounding methods. \end{command} @@ -139,13 +152,13 @@ The number is printed using the current number printing options, see the manual \end{command} \begin{command}{\plotnumofactualtype} - Like |\plotnum|, but it returns the number among all plots of the same type (see |\numplotsofactualtype|). + Like |\plotnum|, but it returns the number among all plots of the same type. The number of all such plots is available using |\numplotsofactualtype|. \end{command} \begin{command}{\coordindex} Inside of an |\addplot| command, this macro expands to the number of the actual coordinate (starting with~$0$). - It is useful together with |x filter| or |y filter| to (de-)select coordinates. + It is useful together with |x filter| or |y filter| to (de)select coordinates. \end{command} \subsection{Path Operations} @@ -174,12 +187,12 @@ The number is printed using the current number printing options, see the manual } \begin{keylist}{/tikz/xshift=\marg{dimension},/tikz/yshift=\marg{dimension}} - These \Tikz\ keys allow to shift something by \marg{dimension} which is any \TeX\ size (or expression). + These \Tikz\ keys allow to shift something by \meta{dimension} which is any \TeX\ size (or expression). \end{keylist} \begin{command}{\pgfplotsextra\marg{low-level path commands}} - A command to execute \marg{low-level path commands} in a \PGFPlots\ axis. Since any drawing commands inside of an axis need to be postponed until the axis is complete and the scaling has been initialised, it is not possible to simply draw any paths. + A command to execute \meta{low-level path commands} in a \PGFPlots\ axis. Since any drawing commands inside of an axis need to be postponed until the axis is complete and the scaling has been initialised, it is not possible to simply draw any paths. Instead, it is necessary to draw them as soon as the axis is finished. This is done automatically for every \Tikz\ path -- and it is also done manually if you write |\pgfplotsextra|\marg{commands}. \begin{codeexample}[] \begin{tikzpicture} @@ -192,7 +205,7 @@ The number is printed using the current number printing options, see the manual \end{axis} \end{tikzpicture} \end{codeexample} - The example above initialises an axis and executes the basic level path commands as soon as the axis is ready. The execution of multiple |\path|, |\addplot| and |\pgfplotsextra| commands is in the same sequence as they occur in the environment\footnote{Except for stacked plots where the sequence may be reverse, see the key \texttt{reverse stack plots}.}.% + The example above initializes an axis and executes the basic level path commands as soon as the axis is ready. The execution of multiple |\path|, |\addplot| and |\pgfplotsextra| commands is in the same sequence as they occur in the environment\footnote{Except for stacked plots where the sequence may be reverse, see the key \texttt{reverse stack plots}.}.% \end{command} \subsection{Specifying Basic Coordinates} @@ -202,7 +215,7 @@ The number is printed using the current number printing options, see the manual \pgfplotspointaxisxyz\marg{x coordinate}\marg{y coordinate}\marg{z coordinate}} Point commands like |\pgfpointxy| which take logical, absolute coordinates and return a low--level point. Every transformation from user transformations to logarithms are applied. - Since the transformations are initialised after the axis is complete, this command needs to be postponed (see |\pgfplotsextra|). + Since the transformations are initialized after the axis is complete, this command needs to be postponed (see |\pgfplotsextra|). \end{commandlist} \begin{commandlist}{% @@ -218,9 +231,9 @@ The number is printed using the current number printing options, see the manual \begin{commandlist}{% \pgfplotspointdescriptionxy\marg{$x$ fraction}\marg{$y$ fraction},% \pgfplotsqpointdescriptionxy\marg{$x$ fraction}\marg{$y$ fraction}}% - Point commands such that |{0}{0}| is the lower left corner of the axis' bounding box and |{1}{1}| the upper right one; everything else is in-between. The `|q|' variant is quicker as it doesn't invoke the math parser on its arguments. + Point commands such that |{0}{0}| is the lower left corner of the axis' bounding box and |{1}{1}| the upper right one; everything else is in between. The `|q|' variant is quicker as it doesn't invoke the math parser on its arguments. - They are used for |axis description cs|, see section~\ref{pgfplots:sec:axis:description:cs}. + They are used for |axis description cs|, see Section~\ref{pgfplots:sec:axis:description:cs}. \end{commandlist} \begin{commandlist}{% @@ -257,7 +270,7 @@ The number is printed using the current number printing options, see the manual The desired axis is uniquely identified by a three character string, provided as first argument to the command. The first of the three characters is `|0|' if the $x$ coordinate of the specified axis passes through the lower axis limit. It is `|1|', if the $x$ coordinate of the specified axis passes through the upper axis limit. Furthermore, it is `|2|' if it passes through the origin. The second character is also either |0|, |1| or |2| and it characterizes the position on the $y$ axis. The third character is for the third dimension, the $z$ axis. It should be left at `|0|' for two dimensional plots. However, \emph{one} of the three characters should be `|v|', meaning the axis \underline varies. For example, |v01| denotes $\{ (x,y_{\text{min}},z_{\text{max}}) \vert x \in \R \}$. - The second argument, \meta{coordinate} is the logical coordinate on that axis. Since two coordinate of the axis are fixed, \meta{coordinate} refers to the \underline varying component of the axis. It must be a number without unit; no math expressions are supported here. + The second argument, \meta{coordinate} is the logical coordinate on that axis. Since two coordinates of the axis are fixed, \meta{coordinate} refers to the \underline varying component of the axis. It must be a number without unit; no math expressions are supported here. The third argument \meta{normal distance} is a dimension like |10pt|. It shifts the coordinate away from the designated axis in direction of the outer normal vector. The outer normal vector always points away from the axis. It is computed using |\pgfplotspointouternormalvectorofaxis|. @@ -323,7 +336,7 @@ The number is printed using the current number printing options, see the manual It is possible to use the result as arguments for the |\pgfpointxyz| commands. - The effect is to multiply \marg{dimension} with the inverse length of the unit vector for the specified axis. These lengths are precomputed in \PGFPlots\ so the operation is fast. + The effect is to multiply \meta{dimension} with the inverse length of the unit vector for the specified axis. These lengths are precomputed in \PGFPlots\ so the operation is fast. \begin{codeexample}[code only] \pgfplotsconvertunittocoordinate{x}{5pt} % now, the command uses exactly 5pt in x direction: @@ -345,3 +358,6 @@ The number is printed using the current number printing options, see the manual \begin{texif}{pgfplotsthreedim} A \TeX\ |\if| which evaluates the \meta{true code} if the axis is three dimensional and the \meta{else code} if not. \end{texif} + +\subsection{Accessing Axis Limits} +It is also possible to access axis limits during the visualization phase, i.e.\ during |\end{axis}|. Please refer to the reference documentation for |xmin| on page~\pageref{page:access:limits}. diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.figlist b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.figlist index cea2b0e7b56..f07c8ae81ef 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.figlist +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.figlist @@ -1,48 +1,63 @@ -figures/expensiveexamplepgfplots-figure0 -figures/expensiveexamplepgfplots-figure1 -figures/expensiveexamplepgfplots-figure2 -figures/expensiveexamplepgfplots-figure3 -figures/expensiveexamplepgfplots-figure4 -figures/expensiveexamplepgfplots-figure5 -figures/expensiveexamplepgfplots-figure6 -figures/expensiveexamplepgfplots-figure7 -figures/expensiveexamplepgfplots-figure8 -figures/expensiveexamplepgfplots-figure9 -figures/expensiveexamplepgfplots-figure10 -figures/expensiveexamplepgfplots-figure11 -figures/expensiveexamplepgfplots-figure12 -figures/expensiveexamplepgfplots-figure13 -figures/expensiveexamplepgfplots-figure14 -figures/expensiveexamplepgfplots-figure15 -figures/expensiveexamplepgfplots-figure16 -figures/expensiveexamplepgfplots-figure17 -figures/expensiveexamplepgfplots-figure18 -figures/expensiveexamplepgfplots-figure19 -figures/expensiveexamplepgfplots-figure20 -figures/expensiveexamplepgfplots-figure21 -figures/expensiveexamplepgfplots-figure22 -figures/expensiveexamplepgfplots-figure23 -figures/expensiveexamplepgfplots-figure24 -figures/expensiveexamplepgfplots-figure25 -figures/expensiveexamplepgfplots-figure26 -figures/expensiveexamplepgfplots-figure27 -figures/expensiveexamplepgfplots-figure28 -figures/expensiveexamplepgfplots-figure29 -figures/expensiveexamplepgfplots-figure30 -figures/expensiveexamplepgfplots-figure31 -figures/expensiveexamplepgfplots-figure32 -figures/expensiveexamplepgfplots-figure33 -figures/expensiveexamplepgfplots-figure34 -figures/expensiveexamplepgfplots-figure35 -figures/expensiveexamplepgfplots-figure36 -figures/expensiveexamplepgfplots-figure37 -figures/expensiveexamplepgfplots-figure38 -figures/expensiveexamplepgfplots-figure39 -figures/expensiveexamplepgfplots-figure40 -figures/expensiveexamplepgfplots-figure41 -figures/expensiveexamplepgfplots-figure42 -figures/expensiveexamplepgfplots-figure43 -figures/expensiveexamplepgfplots-figure44 -figures/expensiveexamplepgfplots-figure45 -figures/expensiveexamplepgfplots-figure46 -figures/expensiveexamplepgfplots-figure47 +figures/expensiveexamplereference_addplot_0 +figures/expensiveexamplereference_addplot_1 +figures/expensiveexamplereference_addplot_2 +figures/expensiveexamplereference_twodim_0 +figures/expensiveexamplereference_twodim_1 +figures/expensiveexamplereference_twodim_2 +figures/expensiveexamplereference_twodim_3 +figures/expensiveexamplereference_twodim_4 +figures/expensiveexamplereference_threedim_0 +figures/expensiveexamplereference_threedim_1 +figures/expensiveexamplereference_threedim_2 +figures/expensiveexamplereference_threedim_3 +figures/expensiveexamplereference_threedim_4 +figures/expensiveexamplereference_threedim_5 +figures/expensiveexamplereference_threedim_6 +figures/expensiveexamplereference_threedim_7 +figures/expensiveexamplereference_threedim_8 +figures/expensiveexamplereference_threedim_9 +figures/expensiveexamplereference_threedim_10 +figures/expensiveexamplereference_threedim_11 +figures/expensiveexamplereference_threedim_12 +figures/expensiveexamplereference_threedim_13 +figures/expensiveexamplereference_threedim_14 +figures/expensiveexamplereference_threedim_15 +figures/expensiveexamplereference_threedim_16 +figures/expensiveexamplereference_threedim_17 +figures/expensiveexamplereference_threedim_18 +figures/expensiveexamplereference_threedim_19 +figures/expensiveexamplereference_threedim_20 +figures/expensiveexamplereference_threedim_21 +figures/expensiveexamplereference_threedim_22 +figures/expensiveexamplereference_threedim_23 +figures/expensiveexamplereference_threedim_24 +figures/expensiveexamplereference_threedim_contour_0 +figures/expensiveexamplereference_threedim_contour_1 +figures/expensiveexamplereference_threedim_contour_2 +figures/expensiveexamplereference_threedim_contour_3 +figures/expensiveexamplereference_threedim_25 +figures/expensiveexamplereference_threedim_26 +figures/expensiveexamplereference_threedim_27 +figures/expensiveexamplereference_threedim_28 +figures/expensiveexamplereference_threedim_29 +figures/expensiveexamplereference_threedim_30 +figures/expensiveexamplereference_threedim_31 +figures/expensiveexamplereference_0 +figures/expensiveexamplereference_1 +figures/expensiveexamplereference_2 +figures/expensiveexamplereference_3 +figures/expensiveexamplereference_threedimaxis_0 +figures/expensiveexamplereference_threedimaxis_1 +figures/expensiveexamplereference_threedimaxis_2 +figures/expensiveexamplereference_threedimaxis_3 +figures/expensiveexamplereference_threedimaxis_4 +figures/expensiveexamplereference_threedimaxis_5 +figures/expensiveexamplereference_threedimaxis_6 +figures/expensiveexamplereference_threedimaxis_7 +figures/expensiveexamplereference_threedimaxis_8 +figures/expensiveexamplereference_4 +figures/expensiveexamplereference_5 +figures/expensiveexamplepolar_0 +figures/expensiveexamplememspeed_0 +figures/expensiveexamplememspeed_1 +figures/expensiveexamplememspeed_2 diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.importexport.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.importexport.tex index 87c87058fc1..0a63ad07dce 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.importexport.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.importexport.tex @@ -1,4 +1,7 @@ + \section{Import/Export From Other Formats} +{ +\tikzset{external/figure name/.add={}{importexport_}}% \label{sec:pgfplots:importexport} This section contains information of how to single pictures into separate \pdf\ graphics files (or \eps\ graphics files). Furthermore, it explains a matlab (tm) script which allows to convert from matlab to \PGFPlots. @@ -22,7 +25,7 @@ It is possible to export images to single \pdf-documents using routines of \pgfn \begin{enumerate} \item Every |\begin{tikzpicture}| $\dotsc$ |\end{tikzpicture}| gets a file name. The file name can be assigned manually with |\tikzsetnextfilename|\marg{output file name} or automatically, in which case \meta{tex file name}|-figure|\meta{number} is used with an increasing \meta{number}. - \item The library writes the resulting images using system calls of the form |pdflatex --jobname |\marg{output file name} automatically, using the write18 system call of \TeX. It is the same framework which can be used to call |gnuplot|. + \item The library writes the resulting images using system calls of the form |pdflatex --jobname |\meta{output file name} automatically, using the write18 system call of \TeX. It is the same framework which can be used to call |gnuplot|. \end{enumerate} The only steps which are necessary is to use @@ -31,7 +34,7 @@ The only steps which are necessary is to use |\tikzexternalize| -\noindent somewhere in your document's preamble. No further modification to the document is necessary. Suppose we have a file called |test.tex|: +\noindent somewhere in your document's preamble (see below for system-dependent configuration options). No further modification to the document is necessary. Suppose we have a file called |test.tex|: \begin{codeexample}[code only] \documentclass{article} @@ -66,7 +69,7 @@ pdflatex -shell-escape test \end{codeexample} \noindent and \LaTeX\ will now generate the required graphics files |test-figure0.pdf| and |test-figure1.pdf| automatically. Any further call to |pdflatex| will simply use |\includegraphics| and the |tikzpicture|s as such are no longer considered (you need a different command line switch for Mik\TeX, see the |shell escape| option). -If a figure shall be remade, one can simply delete all or selected graphics files and re-generate them. Alternatively, one can use the command |\tikzset{external/force remake}| somewhere in the document to remake every following picture automatically. +If a figure shall be remade, one can simply delete all or selected graphics files and regenerate them. Alternatively, one can use the command |\tikzset{external/force remake}| somewhere in the document to remake every following picture automatically. There are three ways to modify the file names of externalized figures: \begin{itemize} @@ -91,7 +94,7 @@ There are three ways to modify the file names of externalized figures: Pictures for which no explicit file name has been set will get automatically generated file names. - Please note that |prefix| will still be prepended to \marg{file name}. + Please note that |prefix| will still be prepended to \meta{file name}. \begin{codeexample}[code only] \documentclass{article} % main document, called main.tex @@ -123,7 +126,7 @@ pdflatex -shell-escape main Same as |\tikzsetfigurename|\marg{name}. \end{key} \begin{command}{\tikzsetfigurename\marg{name}} - Changes the names of \emph{all} following figures. It is possible to change |figure name| during the document using |\tikzset{external/figure name|=\marg{name}|}|. A unique counter\footnote{These counters are stored into into different \emph{macros}. In other words: no \TeX\ register will be needed.} will be used for each different \marg{name}, and each counter will start at $0$. + Changes the names of \emph{all} following figures. It is possible to change |figure name| during the document using |\tikzset{external/figure name|=\marg{name}|}|. A unique counter\footnote{These counters are stored into different \emph{macros}. In other words: no \TeX\ register will be needed.} will be used for each different \meta{name}, and each counter will start at $0$. The value of |prefix| will be applied after |figure name| has been evaluated. \begin{codeexample}[code only] @@ -197,9 +200,14 @@ pdflatex -shell-escape main \end{command} +\paragraph{Configuration option for \textsc{eps} output or Mik\TeX:} Since the |external| lib works by means of system calls, it has to be modified to fit the local system. This is necessary for Mik\TeX\ since it uses a different option to enable these system calls. It is also necessary for \textsc{eps} output since this involves a different set of utilities. + +Note that the \emph{most important part} is to enable system calls. This is typically done by typesetting your document with |pdflatex -shell-escape| or |pdflatex -enable-write18| (Mik\TeX). These options \emph{need to be configured in your \TeX\ editor}. +Besides this step, one may want to configure the system call: + \begin{key}{/tikz/external/system call=\marg{template}} \label{extlib:systemcall:option} - A template string used to generate system calls. Inside of \marg{template}, the macro |\image| can be used as placeholder for the image which is about to be generated while |\texsource| contains the main file name (in truth, it contains |\input|\marg{main file name}, but that doesn't matter). + A template string used to generate system calls. Inside of \meta{template}, the macro |\image| can be used as placeholder for the image which is about to be generated while |\texsource| contains the main file name (in truth, it contains |\input|\marg{main file name}, but that doesn't matter). The default is \begin{codeexample}[code only] @@ -212,15 +220,17 @@ pdflatex -shell-escape main For |eps| output, you can (and need to) use \begin{codeexample}[code only] \tikzset{external/system call={latex \tikzexternalcheckshellescape -halt-on-error - -interaction=batchmode -jobname "\image" "\texsource"; + -interaction=batchmode -jobname "\image" "\texsource" && dvips -o "\image".ps "\image".dvi}} \end{codeexample} - The argument \marg{template} will be expanded using |\edef|, so any control sequences will be expanded. During this evaluation, `|\\|' will result in a normal backslash, `|\|'. Furthermore, double quotes `|"|', single quotes `|'|', semicolons and dashes `|-|' will be made to normal characters if any package uses them as macros. This ensures compatibility with the |german| package, for example. + The argument \meta{template} will be expanded using |\edef|, so any control sequences will be expanded. During this evaluation, `|\\|' will result in a normal backslash, `|\|'. Furthermore, double quotes `|"|', single quotes `|'|', semicolons and dashes `|-|' will be made to normal characters if any package uses them as macros. This ensures compatibility with the |german| package, for example. \end{key} \begin{key}{/tikz/external/shell escape=\marg{command-line arg} (initially -shell-escape)} - Contains the command line option for |latex| which enables the |\write18| feature. For \TeX-Live, this is |-shell-escape|. For Mik\TeX, you should use |\tikzexternalize[shell escape=-enable-write18]|. + Contains the command line option for |latex| which enables the |\write18| feature. + + For \TeX-Live, this is |-shell-escape|. For Mik\TeX, you should use |\tikzexternalize[shell escape=-enable-write18]|. \end{key} \paragraph{Support for Labels and References In External Files} @@ -238,9 +248,9 @@ Point b) is realized automatically by the external library. In detail, a |\label \begin{enumerate} \item The external graphics needs to be generated together with its |.dpth| (usually automatically by \tikzname). \item The main document includes the external graphics and copies the |.dpth| content into its main |.aux| file. - \item The main document needs to be translated one further time to re-read its |.aux| file\footnote{Note that it is not possible to activate the content of an auxiliary file after \texttt{\textbackslash begin\{document\}} in \LaTeX.}. + \item The main document needs to be translated once again to re-read its |.aux| file\footnote{Note that it is not possible to activate the content of an auxiliary file after \texttt{\textbackslash begin\{document\}} in \LaTeX.}. \end{enumerate} -There is just one special case which occurs if a |\label|/|\ref| combination is realized itsself by a |tikzpicture|. This is, for example, the case for the legend |\ref| images or for the |\pgfplotslegendfromname| feature. In such cases, you need to proceed as for case a) since |mode=convert with system call| can't handle that stuff on its own. +There is just a special case if a |\label|/|\ref| drawn as a |tikzpicture|. This is, for example, the case for the legend |\ref| images or for the |\pgfplotslegendfromname| feature. In such cases, you need to proceed as for case a) since |mode=convert with system call| can't handle that stuff on its own. In other words: a |\label| in an external document works automatically, just translate the main document often enough. A |\ref| might need manual adjustments as described for case a) above. @@ -256,7 +266,7 @@ In other words: a |\label| in an external document works automatically, just tra The two modes have the following characteristics: \begin{enumerate} \item |convert with system call| is automatic and does everything on--the--fly. However, it \emph{can't} work with |\ref| and/or |\label| information in external pictures. - \item |list and make| requires either manual (by calling the system calls manually) or semi--automatic conversion (using the generated \meta{main}|.makefile|), and multiple runs of |pdflatex|. The generated Makefile can be processed in parallel. Furthermore, |list and make| provides \emph{full support} for |\ref| and |\label|: any |\label| defined inside of an externalized graphics is still available for the main document. + \item |list and make| requires either manual (by issuing the system calls manually) or semi--automatic conversion (using the generated \meta{main}|.makefile|), and multiple runs of |pdflatex|. The generated Makefile can be processed in parallel. Furthermore, |list and make| provides \emph{full support} for |\ref| and |\label|: any |\label| defined inside of an externalized graphics is still available for the main document. If you have legends with |legend to name| or |\label|/|\ref|, you need to generate the graphics defining the |\label| (or |legend to name|), then run |pdflatex| twice on the main document. Afterwards, you can externalize the legend graphics. \end{enumerate} @@ -268,6 +278,7 @@ The complete reference documentation and remaining options are documented in~\ci \item how to disable the externalization partially with |\tikzset{external/|\declareandlabel{export}|=false}| or completely with |\tikzexternaldisable|, \item how to optimize the speed of the conversion process using |\tikzset{external/optimize command away=\myExpensiveMacro}|, \item how to add further remake-dependencies with |\tikzpicturedependsonfile|\marg{name} and/or |\tikzexternalfiledependsonfile|\marg{external file}\marg{name}, + \item examples how to enable |png| export, \item how to typeset such a document without \pgfname\ installed or \item how to provide work-arounds with |.pdf| images and bounding box restrictions. \index{External Graphics!Bounding Box Issues} @@ -318,8 +329,8 @@ The basic idea is to encapsulate the desired parts with \noindent in the preamble. This enables two different modes: \begin{enumerate} - \item The first is the normal typesetting mode. \LaTeX\ checks whether a file named \marg{output file name} with one of the accepted file extensions exists -- if that is the case, the graphics file is included with |\pgfimage| and the \meta{picture contents} is skipped. If no such file exists, the \meta{picture contents} is typeset normally. This mode is applied if |\jobname| equals \marg{the real job's name}. - \item The second mode applies if |\jobname| equals \marg{output file name}, it initiates the ``conversion mode'' which is used to write the graphics file \marg{output file name}. In this case, \emph{only} \meta{picture contents} is written to |\jobname|, the complete rest of the \LaTeX\ is processed as normal, but it is silently discarded. + \item The first is the normal typesetting mode. \LaTeX\ checks whether a file named \meta{output file name} with one of the accepted file extensions exists -- if that is the case, the graphics file is included with |\pgfimage| and the \meta{picture contents} is skipped. If no such file exists, the \meta{picture contents} is typeset normally. This mode is applied if |\jobname| equals \meta{the real job's name}. + \item The second mode applies if |\jobname| equals \meta{output file name}, it initiates the ``conversion mode'' which is used to write the graphics file \meta{output file name}. In this case, \emph{only} \meta{picture contents} is written to |\jobname|, the complete rest of the \LaTeX\ is processed as normal, but it is silently discarded. This mode needs to be started manually with |pdflatex --jobname |\meta{output file name} for every externalized graphics file. \end{enumerate} @@ -364,9 +375,9 @@ pdflatex test pdflatex --jobname testfigure test pdflatex --jobname testfigure2 test \end{codeexample} -\noindent to enter conversion mode. These last calls will \emph{only} write the contents of our named graphics environments, one for \marg{testfigure} and one for \marg{testfigure2} into the respective output files |testfigure.pdf| and |testfigure2.pdf|. +\noindent to enter conversion mode. These last calls will \emph{only} write the contents of our named graphics environments, one for \meta{testfigure} and one for \meta{testfigure2} into the respective output files |testfigure.pdf| and |testfigure2.pdf|. -In summary, one needs |\pgfrealjobname| and calls |pdflatex --jobname |\marg{graphics file} for every externalized graphics environment. Please note that it is absolutely necessary to use the syntax above, \emph{not} |\begin{pgfgraphicnamed}|. +In summary, one needs |\pgfrealjobname| and calls |pdflatex --jobname |\meta{graphics file} for every externalized graphics environment. Please note that it is absolutely necessary to use the syntax above, \emph{not} |\begin{pgfgraphicnamed}|. These steps are explained in much more detail in Section``Externalizing Graphics'' of~\cite{tikz}. @@ -398,13 +409,14 @@ Simply uncomment the packages |\usepackage{tikz}| and |\usepackage{pgfplots}| an \end{codeexample} instead. This will include the generated graphics files (and it will respect the |baseline| information stored in |.dpth| files). Consequently, you won't need \pgfname\ or \PGFPlots\ installed. See Section``Externalizing Graphics'' of~\cite{tikz} for details. +\subsection{Importing From Matlab} -\subsection{Exporting Mesh Data From Matlab To \PGFPlots} +\subsubsection{Importing Mesh Data From Matlab To PGFPlots} While it is easy to write Matlab vectors to files (using |save P.dat data -ASCII|), it is more involved to export mesh data. The main problem is to communicate the mesh structure to \PGFPlots. -Here is an example how to realize this task: in Matlab, we have mesh data |X|, |Y| and |Z| which are matrizes of the same size. For example, suppose we have +Here is an example how to realize this task: in Matlab, we have mesh data |X|, |Y| and |Z| which are matrices of the same size. For example, suppose we have \begin{codeexample}[code only] [X,Y] = meshgrid( linspace(-1,1,5), linspace(4,5,10) ); @@ -421,9 +433,9 @@ save P.dat data -ASCII |\addplot3[surf,mesh/rows=10,mesh/ordering=colwise,shader=interp] file {P.dat};| -in \PGFPlots\ to read this data. We need to provide either the number of rows ($10$ here) or the number of columns -- and the ordering (which is |colwise| for Matlab matrizes). +in \PGFPlots\ to read this data. We need to provide either the number of rows ($10$ here) or the number of columns -- and the ordering (which is |colwise| for Matlab matrices). -An alternative which is faster in \PGFPlots\ would be to transpose the matrizes in Matlab and tell \PGFPlots\ they are in |rowwise| ordering. So, the last step becomes +An alternative which is faster in \PGFPlots\ would be to transpose the matrices in Matlab and tell \PGFPlots\ they are in |rowwise| ordering. So, the last step becomes \begin{codeexample}[code only] XX=X'; YY=Y'; ZZ=Z'; @@ -434,8 +446,8 @@ save P.dat data -ASCII |\addplot3[surf,mesh/cols=10,mesh/ordering=rowwise,shader=interp] file {P.dat};|. -\subsection{matlab2pgfplots.m} -This is a Matlab (tm) script which attempts to convert a matlab figure to \PGFPlots. It requires Matlab version 7.4 (or higher). +\subsubsection{matlab2pgfplots.m} +This is a Matlab (tm) script which attempts to convert a Matlab figure to \PGFPlots. It requires Matlab version 7.4 (or higher). \paragraph{Attention:} The author of \PGFPlots\ does not have enough time to maintain this script as much as he wants to. In other words, it supports only a small subset of \PGFPlots. You may also want to look at |matlab2tikz|, a conversion script of Nico Schl\"omer available at @@ -460,7 +472,7 @@ on your matlab prompt for more information about its features and its limitation This script is experimental. -\subsection{matlab2pgfplots.sh} +\subsubsection{matlab2pgfplots.sh} A \texttt{bash}-script which simply starts matlab and runs \begin{lstlisting} f=hgload( 'somefigure.fig' ); @@ -468,8 +480,23 @@ A \texttt{bash}-script which simply starts matlab and runs \end{lstlisting} See matlab2pgfplots.m above. +\subsubsection{Importing Colormaps From Matlab} +Occasionally, you may want to reuse your matlab |colormap| in \PGFPlots. Here is a small Matlab script which converts it to \PGFPlots: +\begin{codeexample}[code only] +C = colormap; % gets data of the current colormap. +% C = colormap(jet) % gets data of "jet" +eachnth = 1; +I = 1:eachnth:size(C,1); % this is nonsense for eachnth=1 -- but perhaps you don't want each color. +CC = C(I,:); +TeXstring = [ ... + sprintf('\\pgfplotsset{\n\tcolormap={matlab}{\n') ... + sprintf('\t\trgb=(%f,%f,%f)\n',CC') ... + sprintf('\t}\n}\n') ] +\end{codeexample} + \subsection{SVG Output} It is possible to write every single \Tikz\ picture into a scalable vector graphics (\texttt{.svg}) file. This has nothing to do with \PGFPlots, it is a separate driver of \PGF. Please refer to~\cite[Section ``Producing HTML / SVG Output'']{tikz}. \subsection{Generate \PGFPlots\ Graphics Within Python} Mario Orne D\'IAZ ANAD\'ON contributed a small python script |pgfplots.py| which provides a simple interface to generate \PGFPlots\ figures from within python. It can be found in the \PGFPlots\ installation directory, in |pgfplots/scripts/pgfplots/pgfplots.py|; documentation can be found in the file. +} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.install.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.install.tex index c356a2ebefb..ed892ae4c92 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.install.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.install.tex @@ -23,7 +23,7 @@ You may also visit~\url{http://www.gnu.org/licenses}. \begin{verbatim} \usepackage{pgfplots} \end{verbatim} -in your preamble (see section~\ref{sec:tex:dialects} for information about how to use it with Con{\TeX}t and plain \TeX). +in your preamble (see Section~\ref{sec:tex:dialects} for information about how to use it with Con{\TeX}t and plain \TeX). %\subsubsection{Installation} @@ -34,7 +34,7 @@ Windows users often use Mik\TeX\ which downloads the latest stable package versi However, Mik\TeX\ provides a feature to install packages locally in its own \TeX-Directory-Structure (TDS). This is the preferred way if you like to install newer version than those of Mik\TeX. The basic idea is to unzip \PGFPlots\ in a directory of your choice and configure the Mik\TeX\ Package Manager to use this specific directory with higher priority than its default paths. If you want to do this, start the Mik\TeX\ Settings using ``Start $\gg$ Programs $\gg$ Mik\TeX\ $\gg$ Settings''. There, use the ``Roots'' menu section. It contains the Mik\TeX\ Package directory as initial configuration. Use ``Add'' to select the directory in which the unzipped \PGFPlots\ tree resides. Then, move the newly added path to the list's top using the ``Up'' button. Then press ``Ok''. For Mik\TeX\ 2.8, you may need to uncheck the ``Show Mik\TeX-maintained root directories'' button to see the newly installed path. -Mik\TeX\ complains if the provided directory is not TDS conform (see section~\ref{pgfplots:tds} for details), so you can't provide a wrong directory here. This method does also work for other packages, but some packages may need some directory restructuring before Mik\TeX\ accepts them. +Mik\TeX\ complains if the provided directory is not TDS conform (see Section~\ref{pgfplots:tds} for details), so you can't provide a wrong directory here. This method does also work for other packages, but some packages may need some directory restructuring before Mik\TeX\ accepts them. \subsubsection{Installation of Linux Packages} At the time of this writing, I am unaware of \PGFPlots\ packages for recent stable Linux distributions. For Ubuntu, there are unofficial Ubuntu Package Repositories which can be added to the Ubuntu Package Tools. The idea is: add a simple URL to the Ubuntu Package Tool, run update and the installation takes place automatically. These URLs are maintained as PPA on Ubuntu Servers. @@ -45,7 +45,7 @@ and download the readme files with recent links. \subsubsection{Installation in Any Directory - the \texttt{TEXINPUTS} Variable} -You can simply install \PGFPlots\ anywhere on your disc, for example into +You can simply install \PGFPlots\ anywhere on your harddrive, for example into \begin{verbatim} /foo/bar/pgfplots. \end{verbatim} @@ -69,16 +69,16 @@ Please refer to your operating systems manual for how to set environment variabl \label{pgfplots:tds} \PGFPlots\ comes in a ``\TeX\ Directory Structure'' (TDS) conforming directory structure, so you can simply unpack the files into a directory which is searched by \TeX\ automatically. Such directories are |~/texmf| on Linux systems, for example. -Copy \PGFPlots\ to a local \texttt{texmf} directory like \lstinline!~/texmf!. You need at least the \PGFPlots\ directories |tex/generic/pgfplots| and |tex/latex/pgfplots|. Then, run \lstinline!texhash! (or some equivalent path--updating command specific to your \TeX\ distribution). +Copy \PGFPlots\ to a local \texttt{texmf} directory like \lstinline!~/texmf!. You need at least the \PGFPlots\ directories |tex/generic/pgfplots| and |tex/latex/pgfplots|. Then, run \lstinline!texhash! (or some equivalent path-updating command specific to your \TeX\ distribution). -The TDS consists of several sub directories which are searched separately, depending on what has been requested: the sub-directories |doc/latex/|\meta{package} are used for (\LaTeX) documentation, the sub-directories |doc/generic/|\meta{package} for documentation which apply to \LaTeX\ and other \TeX\ dialects (like plain \TeX\ and Con\TeX t which have their own, respective sub-directories) as well. +The TDS consists of several sub directories which are searched separately, depending on what has been requested: the sub directories |doc/latex/|\meta{package} are used for (\LaTeX) documentation, the sub-directories |doc/generic/|\meta{package} for documentation which apply to \LaTeX\ and other \TeX\ dialects (like plain \TeX\ and Con\TeX t which have their own, respective sub-directories) as well. Similarly, the |tex/latex/|\meta{package} sub-directories are searched whenever \LaTeX\ packages are requested. The |tex/generic/|\meta{package} sub-directories are searched for packages which work for \LaTeX\ \emph{and} other \TeX\ dialects. Do not forget to run \lstinline!texhash!. \subsubsection{Installation If Everything Else Fails...} -If \TeX\ still doesn't find your files, you can copy all \lstinline!.sty! and all |.code.tex|-files (perhaps all |.def| files as well) into your current project's working directory. In fact, you need all which is in the |tex/latex/pgfplots| and |tex/generic/pgfplots| sub directories. +If \TeX\ still doesn't find your files, you can copy all \lstinline!.sty! and all |.code.tex|-files (perhaps all |.def| files as well) into your current project's working directory. In fact, you need everything which is in the |tex/latex/pgfplots| and |tex/generic/pgfplots| sub directories. Please refer to \url{http://www.ctan.org/installationadvice/} for more information about package installation. @@ -102,7 +102,15 @@ in most cases. It should work with any modern installation of \TeX\ (it activate The core mathematical engine of \PGF\ relies on \TeX\ registers to perform fast arithmetics. To compute $50+299$, it actually computes |50pt+299pt| and strips the |pt| suffix of the result. Since \TeX\ registers can only contain numbers up to $\pm 16384$, overflow error messages like ``Dimension too large'' occur if the result leaves the allowed range. Normally, this should never happen -- \PGFPlots\ uses a floating point unit with data range $\pm 10^{324}$ and performs all mappings automatically. However, there are some cases where this fails. Some of these cases are: \begin{enumerate} \item The axis range (for example, for $x$) becomes \emph{relatively} small. It's no matter if you have absolutely small ranges like $[10^{-17},10^{-16}]$. But if you have an axis range like $[1.99999999,2]$, where a lot of significant digits are necessary, this may be problematic. + + I guess I can't help here: you may need to prepare the data somehow before \PGFPlots\ processes it. + \item This may happen as well if you only view a very small portion of the data range. + + This happens, for example, if your input data ranges from $x\in [0,10^6]$, and you say |xmax=10|. + + Consider using the |restrict x to domain*=|\meta{min}|:|\meta{max} key in such a case, where the \meta{min} and \meta{max} should be (say) four times of your axis limits (see page~\pageref{key:restrict:x:to:domain} for details). + \item The |axis equal| key will be confused if $x$ and $y$ have a very different scale. \item You may have found a bug -- please contact the developers. \end{enumerate} @@ -138,10 +146,10 @@ Please read the corresponding sections in~\cite[Section 7.2.1 and 7.2.2]{tikz} i The choice which won't produce any problems at all is |pdflatex|. \subsubsection{Problems with \TeX's Memory Capacities} -\PGFPlots\ can handle small up to medium sized plots. However, \TeX\ has never been designed for data plots -- you will eventually face the problem of small memory capacities. See section~\ref{sec:pgfplots:optimization} for how to enlarge them. +\PGFPlots\ can handle small up to medium sized plots. However, \TeX\ has never been designed for data plots -- you will eventually face the problem of small memory capacities. See Section~\ref{sec:pgfplots:optimization} for how to enlarge them. \subsubsection{Problems with Language Settings and Active Characters} -Both, \PGF\ and \PGFPlots\ use a lot of characters -- which may lead to incompatibilities with other packages which define active characters. Compatibility is better than in earlier versions, but may still be an issue. The manual compiles with the |babel| package for english and french, the |german| package does also work. If you experience any trouble, let me know. Sometimes it may work to disable active characters temporarily (|babel| provides such a command). +Both \PGF\ and \PGFPlots\ use a lot of active characters -- which may lead to incompatibilities with other packages which define active characters. Compatibility is better than in earlier versions, but may still be an issue. The manual compiles with the |babel| package for english and french, the |german| package does also work. If you experience any trouble, let me know. Sometimes it may work to disable active characters temporarily (|babel| provides such a command). \subsubsection{Other Problems} Please read the mailing list at diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.intro.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.intro.tex index a66239c4b25..aa84de1bdbd 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.intro.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.intro.tex @@ -1,9 +1,22 @@ % main=pgfplots.tex \section{User's Guide: Drawing Axes and Plots} + +The user interface of \PGFPlots\ consists of three components: a |tikzpicture| environment, an |axis| and the |\addplot| command. + +Each axis is generated as part of a picture environment (which can be used to annotate plots afterwards, for example). The axis environment encapsulates one or more |\addplot| commands and controls axis-wide settings (like limits, legends, and descriptions). The |\addplot| command supports several coordinate input methods (like table input or mathematical expressions) and allows various sorts of visualization options with straight lines as initial configuration. + +The rest of \PGFPlots\ is a huge set of key--value options to modify the initial configuration or to select plot types. The reference manual has been optimized for electronical display: a lot of examples illustrate the features, and reference documentation can be found by clicking into the sourcecode text fields. Note that most pdf viewers also support to jump back from a hyperlink: for Acrobat Reader, open the menu View$\gg$Toolbars$\gg$More Tools and activate the ``Previous View'' and ``Next View'' buttons (which are under ``Page Navigation Toolbar''). Thus, knowledge of all keys is unnecessary; you can learn them when it is necessary. + +To learn \PGFPlots, you should learn about the |\addplot| command and its coordinate input methods. The most important input methods are \verbpdfref{\addplot table} and \verbpdfref{\addplot expression}. + +The following sections explain the basics of \PGFPlots, namely how to work with the |\addplot| commands and |axis| environments and how line styles are assigned automatically. + \subsection{\TeX-dialects: \LaTeX, Con{\TeX}t, plain \TeX } \label{sec:tex:dialects}% -\PGFPlots\ is compatible with \LaTeX, Con{\TeX}t and plain \TeX. The only difference is how to specify environments. This affects any \PGF/\Tikz-environments and all \PGFPlots-environments like axis, semilogxaxis, semilogyaxis and loglogaxis: +The starting point for \PGFPlots\ is an |axis| enviroment like |axis| or the logarithmic variants |semilogxaxis|, |semilogyaxis| or |loglogaxis|. + +Each environment is available for \LaTeX, Con{\TeX}t and plain \TeX: \begin{description} \def\HEAD{% \small @@ -130,11 +143,12 @@ A complete plain--\TeX--example file can be found in doc/plain/pgfplots/pgfplotsexample.tex. \end{codeexample} \end{description} -The default system drivers for |dvips| and |pdftex| work without any additional work; for |dvipdfm|, the |pgfsysdriver| macro needs to be redefined manually (see also section~\ref{sec:drivers}). + +If you use |latex| / |dvips| or |pdflatex|, no further modifications are necessary. For |dvipdfm|, you should use the |\def\pgfsysdriver| line as indicated above in the examples (see also Section~\ref{sec:drivers}). \subsection{A First Plot} -Plotting is done using \lstinline|\begin{axis} ... \addplot ...; \end{axis}|, where |\addplot| is the main interface to perform plotting operations. +Plotting is done using |\begin{axis} ... \addplot ...; \end{axis}|, where |\addplot| is the main interface to perform plotting operations. \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[ @@ -179,10 +193,10 @@ Plotting is done using \lstinline|\begin{axis} ... \addplot ...; \end{axis}|, wh \end{tikzpicture} \end{codeexample} -The |plot coordinates|, |plot expression| and |plot gnuplot| commands are three of the several supported ways to create plots, see section~\ref{sec:addplot} for more details\footnote{Please note that you need \lstinline{gnuplot} installed to use \lstinline{plot gnuplot}.} and the remaining ones (|plot file|, |plot shell|, |plot table| and |plot graphics|). The options `|xlabel|' and `|ylabel|' define axis descriptions. +The |plot coordinates|, |plot expression| and |plot gnuplot| commands are three of the several supported ways to create plots, see Section~\ref{sec:addplot} for more details\footnote{Please note that you need \lstinline{gnuplot} installed to use \lstinline{plot gnuplot}.} and the remaining ones (|plot file|, |plot shell|, |plot table| and |plot graphics|). The options `|xlabel|' and `|ylabel|' define axis descriptions. \subsection{Two Plots in the Same Axis} -Multiple |\addplot|-commands can be placed into the same axis. +Multiple |\addplot|-commands can be placed into the same axis, and a |cycle list| is used to automatically select different line styles: % generated with this statement: %\addplot plot[id=filesuffix_noise,domain=-6:5,samples=10] gnuplot{(-x**5 - 242 + (-300 + 600*rand(0)))}; \begin{codeexample}[leave comments] @@ -193,7 +207,7 @@ Multiple |\addplot|-commands can be placed into the same axis. grid=major, ] - \addplot gnuplot[id=filesuffix]{(-x**5 - 242)}; + \addplot {-x^5 - 242}; \addlegendentry{model} \addplot coordinates { @@ -243,7 +257,7 @@ Level Cost Error 8 18943 2.873e-05 9 47103 8.437e-06 \end{codeexample} -then we can plot |Cost| versus |Error| using +\noindent then we can plot |Cost| versus |Error| using \begin{codeexample}[] \begin{tikzpicture} \begin{loglogaxis}[ @@ -350,7 +364,7 @@ You can skip the style arguments for |\addplot[...]| to determine plot specifica The |cycle list| can be modified, see the reference below. \subsection{Scaling Plots} -You can use any of the \Tikz\ options to modify the appearance. For example, the ``|scale|'' transformation takes the picture as such and scales it. +You can use any of the \Tikz\ options to modify the appearance. For example, the ``|scale|'' transformation takes the picture as such and scales it (just like |\includegraphics|): \begin{codeexample}[] \begin{tikzpicture}[scale=0.5] @@ -398,6 +412,6 @@ However, you can also scale plots by assigning a |width=5cm| and/or |height=3cm| \end{tikzpicture} \end{codeexample} -Use the predefined styles |normalsize|, |small|, |footnotesize| to adopt font sizes and ticks automatically. +Use the predefined styles |normalsize|, |small|, |footnotesize| to adopt font sizes and ticks automatically. Use the |/pgfplots/scale| key to rescale the axis without affecting fonts. \endinput diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.clickable.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.clickable.tex new file mode 100644 index 00000000000..0c86c140e8a --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.clickable.tex @@ -0,0 +1,370 @@ +\subsection{Clickable Plots} +\begin{pgfplotslibrary}{clickable} + A library which generates small popups whenever one clicks into a plot. The popup displays the coordinate under the mouse pointer, supporting the optional snap--to--nearest |clickable coords| feature with customizable displayed information. Furthermore, the library allows to display slopes if one holds the mouse pressed and drags it to another point in the plot. + + The library has two purposes: to compute slopes in a simple way\footnote{The author is applied mathematician...} and to provide related, optional information to single data points which are not important enough to be listed in the main text (like prototype parameters or other technical things). +\end{pgfplotslibrary} + + +\subsubsection{Overview} + It is completely sufficient to write +\begin{codeexample}[code only] +\usepgfplotslibrary{clickable} +\end{codeexample} + \noindent in the document preamble. This will automatically prepare every plot. + + The library works with Acrobat Javascript and \pdf\ forms: every plot becomes a push--button. + + \includegraphics[height=6cm]{figures/pgfplotsclickable-fig1.png} + \rlap{\includegraphics[height=6cm]{figures/pgfplotsclickable-fig2.png}}\hfill + + \nobreak + These screenshots show the result of clicking into the axis range (left column) and of dragging from one point to another (right column). The second case shows the result of Drag-and-Drop: it displays start- and end points and the equation for the line segment between between the first point of the drag- and drop and the second point where the mouse has been released. The line segment is + \[ l(x; x_0,y_0,x_1,y_1) = m \cdot x + n \] + where $m = (y_1-y_0) / (x_1-x_0)$ is the slope and $n$ the offset chosen such that $l(x_0;\dotsc) = y_0$. For logarithmic plots, logarithms will be applied before computing slopes. + + \noindent + \hbox to \linewidth{% + \hspace{-0.5cm}% + \begin{tikzpicture} + \node at (8cm,0cm) {\includegraphics[height=6cm]{figures/pgfplotsclickable-fig4.png}}; + \node at (0cm,0cm) {\includegraphics[height=6cm]{figures/pgfplotsclickable-fig3.png}}; + \end{tikzpicture}\hss}% + + \nobreak + These screen shots show the result of drag- and drop for \emph{logarithmic} axes: the end points show, again, the coordinates (without logs) and the form field in the middle shows the slope and offset of the linear equation in log coordinates. + + The log basis for any logarithmic axes is usually~$10$, but it respects the current setting of |log basis x| and |log basis y|. The applied log will always use the same logarithm which is also used for the axis descriptions (this is not necessarily the same as used by \PGFPlotstable!). + + This document has been produced with the |clickable| library, so it is possible to load it into Acrobat Reader and simply click into a plot. + + \expandafter\ifx\csname pgfplotsclickabledisabled\endcsname\relax + \else + \paragraph{Attention:} For this document, the |clickable| library has been deactivated. You may find a different version on \url{http://sourceforge.net/projects/pgfplots}. + \fi + +\begin{pgfplotskey}{clickable coords=\marg{displayed text}} + Activates a snap--to--nearest feature when clicking onto plot coordinates. The \meta{displayed text} is the coordinate's $x$ and $y$ value by default (i.e.\ you write just |clickable coords| without an equal sign). +\begin{codeexample}[] +\begin{tikzpicture} + \begin{loglogaxis}[clickable coords= + {Level \thisrow{level} (q=\thisrow{q})}] + \addplot table[x=dof,y=error] { +level dof error q +1 4 2.50000000e-01 48 +2 16 6.25000000e-02 25 +3 64 1.56250000e-02 41 +4 256 3.90625000e-03 8 +5 1024 9.76562500e-04 22 +6 4096 2.44140625e-04 46 +7 16384 6.10351562e-05 40 +8 65536 1.52587891e-05 3 +9 262144 3.81469727e-06 1 +10 1048576 9.53674316e-07 9 + }; + + \end{loglogaxis} +\end{tikzpicture} +\end{codeexample} + \noindent Now, clicking onto a data point yields `Level 7 (q=40)' + whereas clicking besides a data point results in the click coordinates as before, + + \noindent\hbox to \linewidth{\hfill + \includegraphics[scale=0.4]{figures/pgfplotsclickable-log-snap0}\hfill + \includegraphics[scale=0.4]{figures/pgfplotsclickable-log-snap2}\hfill + \includegraphics[scale=0.4]{figures/pgfplotsclickable-log-snap1}.\hfill + }% + + Note that logarithmic slopes work as before. + + If you want the $(x,y)$ values to be displayed, use the special placeholder string `|(xy)|' inside of \meta{displayed text}. As an example, we consider again the |scatter/classes| example of page~\pageref{pgfplots:scatterclasses}: + +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[% + clickable coords={(xy): \thisrow{label}},% + scatter/classes={% + a={mark=square*,blue},% + b={mark=triangle*,red},% + c={mark=o,draw=black}}] + \addplot[scatter,only marks,% + scatter src=explicit symbolic]% + table[meta=label] { +x y label +0.1 0.15 a +0.45 0.27 c +0.02 0.17 a +0.06 0.1 a +0.9 0.5 b +0.5 0.3 c +0.85 0.52 b +0.12 0.05 a +0.73 0.45 b +0.53 0.25 c +0.76 0.5 b +0.55 0.32 c + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent Here, we find popups like + + \noindent\hbox to \linewidth{\hfill + \includegraphics[scale=0.4]{figures/pgfplotsclickable-scatter1.png}\hfill + \includegraphics[scale=0.4]{figures/pgfplotsclickable-scatter2.png}\hfill + \includegraphics[scale=0.4]{figures/pgfplotsclickable-scatter0.png}.\hfill + }% + + The \meta{displayed text} is a richtext string displayed with \emph{Javascript}. For most purposes, it is used like an unformatted C string: it contains characters, perhaps line breaks with `|\n|' or tabulators with `|\t|', but it should not contain \TeX\ formatting instructions, especially no math mode (the `|(xy)|' replacement text is formatted with |sprintf|, see below). Consider |clickable coords code| in case you'd like to preprocess data before displaying it. If you experience problems with special characters, try prepending a backslash to them. If that doesn't work either, try to prefix the word with `|\\|' and/or with `|\string|'. Consider using |clickable coords size| if you intend to work with multiline fields and the size allocation needs improvements. + + In fact, \meta{displayed text} can even contain richtext (=XHTML) formatting instructions like `|<br/>|' (note the final slash) or `|<span style="color:\#7E0000;">text</span>|' (note the backslash before `|#|') which changes the color for |text|. The |<span style="">| arguments are CSS fields, consider an HTML reference for a list of CSS attributes. + + It is possible to use |clickable coords| together with three dimensional axes. Note that dynamic (clickable) features of a three dimensional axis without |clickable coords| will be disabled (they appear to be useless). Furthermore, three dimensional axes do not support slope calculations; only the snap--to--nearest feature is available. + + Consider using |annot/snap dist=6| to increase the snap--to--nearest distance. + + The |clickable coords| can be specified for all plots in an axis (as in the examples above), but also once for every single |\addplot| commands for which the snap--to--nearest feature is desired (with different \meta{displayed text}). + + If multiple |clickable coords| are on the same position, each click chooses the next one (in the order of appearance). +\end{pgfplotskey} + +\begin{pgfplotskey}{clickable coords code=\marg{\TeX\ code which defines {\normalfont\ttfamily\textbackslash pgfplotsretval}}} + A variant of |clickable coords| which allows to prepare the displayed information before it is handed over to Javascript. + + The value should be \TeX\ code which defines |\pgfplotsretval| somehow. The result is used as simple, unformatted string which is associated to coordinates. + + Consider using + + \hspace{2em}|\pgfmathprintnumberto[verbatim]|\marg{number}|\macroname| + + \hspace{2em}|\edef\pgfplotsretval{Number=\macroname}| + + to provide number printing. The |\pgfmathprintnumberto[verbatim]| doesn't use math mode to format a number\footnote{See the \PGFPlotstable\ manual for details about number printing.}, and it writes its result into |\macroname|. The name `|\macroname|' is arbitrary, use anything like `|\eps|' or `|\info|'. The |\edef| means ``expanded definition'' and has the effect of expanding all macros to determine the value, in our case ``Number= \meta{the value}''. The following example uses it twice to pretty--print the data: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{loglogaxis}[clickable coords code={% + \pgfmathprintnumberto[verbatim,precision=1]% + {\thisrow{error}}% + \error% + \pgfmathprintnumberto[verbatim,frac]% + {\thisrow{frac}}% + \fraccomp% + \edef\pgfplotsretval{error \error, R=\fraccomp}% +}]% +\addplot table[x=dof,y=error] { +level dof error frac +1 4 2.50000000e-01 0.5 +2 16 6.25000000e-02 0.75 +3 64 1.56250000e-02 0.1 +4 256 3.90625000e-03 0.2 +5 1024 9.76562500e-04 0.5 +6 4096 2.44140625e-04 0.8 +7 16384 6.10351562e-05 0.125 +8 65536 1.52587891e-05 0.725 +9 262144 3.81469727e-06 0.625 +10 1048576 9.53674316e-07 1 +}; + +\end{loglogaxis} +\end{tikzpicture} +\end{codeexample} + \noindent resulting in + + \noindent\hbox to \linewidth{\hfill + \includegraphics[scale=0.4]{figures/pgfplotsclickable-logcode-snap0.png}\hfill + \includegraphics[scale=0.4]{figures/pgfplotsclickable-logcode-snap1.png}.\hfill + }% + + The \meta{\TeX\ code} is evaluated inside of a local scope, all locally declared variables are freed afterwards (that's why you can use any names you want). +\end{pgfplotskey} + +\begin{pgfplotskey}{clickable coords size=\texttt{auto} or \marg{max chars} or \marg{max chars x,max chars y} (initially auto)} + This is actually just another name for |annot/popup size snap|, see its documentation below. +\end{pgfplotskey} + +\subsubsection{Requirements for the Library} + \begin{itemize} + \item The library relies on the \LaTeX\ packages |insdljs| (``Insert document level Javascript'') and |eforms| which are both part of the freely available |AcroTeX| education bundle~\cite{acrotex}\footnote{These packages rely on \LaTeX, so the library is only available for \LaTeX, not for plain \TeX\ or Con\TeX t.}. The |insdljs| package creates a temporary file with extension |.djs|. + + \item At the time of this writing, only Adobe Acrobat Reader interpretes Javascript and Forms properly. The library doesn't have any effect if the resulting document is used in other viewers (as far as I know). + + \end{itemize} + Note that although this library has been written for \PGFPlots, it can be used independently of a \PGFPlots\ environment. + + \paragraph{Compatibility issues:} + There a several restrictions when using this library. Most of them will vanish in future versions -- but up to now, I can't do magic. + \begin{itemize} + \item The library does not yet support rotated axes. Use |clickable=false| for those axes. + \item The library works only with |pdflatex|; |dvips| or |dvipdfm| are not supported\footnote{In fact, they should be. I don't really know why they don't $\hdots$ any hint is welcome.}. + + \item Up to now, it is \emph{not} possible to use this library together with the |external| library and other image externalization methods of Section~\ref{sec:pgfplots:importexport}. + + To be more precise, you can (with two extra preamble lines, see below) get correctly annotated, exported \pdf\ documents, but the |\includegraphics| command does not import the dynamic features. + + In case you decide to use this work--around, you need to insert +\begin{codeexample}[code only] +% \maxdeadcycles=10000 % in case you get the error `Output loop---<N> consecutive dead cycles.' +\usepackage[pdftex]{eforms} +\end{codeexample} + \noindent \emph{before} loading \pgfname, \Tikz\ or \PGFPlots. The |\maxdeadcycles| appears to be necessary for large documents, try it out. + + As long as you are working on a draft version of your document, you might want to use +\begin{codeexample}[code only] +\pgfkeys{/pgf/images/include external/.code={\href{file:#1}{\pgfimage{#1}}}} +\end{codeexample} + in your preamble. This will generate hyperlinks around the graphics files which link to the exported figures. Clicking on the hyperlinks opens the exported figure which, in turn, has been generated with the |clickable| library and allows dynamic features\footnote{This special treatment needs the external files in the same base directory as the main document, so this approach is most certainly \emph{not} suitable for a final document.}. + + + \item The library automatically calls |\begin{Form}| at |\begin{document}| and |\end{Form}| at the end of the document. This environment of |hyperref| is necessary for dynamic user interaction and should be kept in mind if the document contains other form elements. + \end{itemize} + + \paragraph{Acknowledgements:} + \begin{itemize} + \item I have used a Javascript |sprintf| implementation of Kevin van Zonneveld~\cite{phptojs} (the Javascript API has only a limited set of conversions). + \end{itemize} + + +\subsubsection{Customization} +It is possible to customize the library with several options. + +\begin{pgfplotskey}{clickable=\mchoice{true,false} (initially true)} + Allows to disable the library for single plots. +\end{pgfplotskey} + +\begin{pgfplotskey}{annot/js fillColor=\marg{Javascript color} (initially ["RGB",1,1,.855])} + Sets the background (fill) color of the short popup annotations. + + Possible choices are |transparent|, gray, RGB or CMYK color specified as four--element--arrays of the form + |["RGB", |\meta{red}|,|\meta{green}|,|\meta{blue}|]|. Each color component is between $0$ and $1$. + + Again: this option is for Javascript. It is \emph{not} possible to use colors as in \pgfname. +\end{pgfplotskey} + +\begin{pgfplotskeylist}{% + annot/point format=\marg{sprintf-format} (initially {(\%.1f,\%.1f)}), + annot/point format 3d=\marg{sprintf-format} (initially {(\%.1f,\%.1f,\%.1f)})} + Allows to provide an |sprintf| format string which is used to fill the annotations with text. + The first argument to |sprintf| is the $x$-coordinate and the second argument is the $y$-coordinate. + + The |point format 3d| variant is used for any three--dimensional axis whereas the |point format| is used (only) for two--dimensional ones. + + The |every semilogx axis|, |every semilogy axis| and |every loglog axis| styles have been updated to +\begin{codeexample}[code only] +\pgfplotsset{ + every semilogy axis/.append style={/pgfplots/annot/point format={(\%.1f,\%.1e)}}, + every semilogx axis/.append style={/pgfplots/annot/point format={(\%.1e,\%.1f)}}, + every loglog axis/.append style={/pgfplots/annot/point format={(\%.1e,\%.1e)}} +} +\end{codeexample} + \noindent such that every logarithmic coordinate is displayed in scientific format. +\end{pgfplotskeylist} + +\begin{pgfplotskey}{annot/slope format=\marg{sprintf-format} (initially \%.1f*x \%+.1f)} + Allows to provide an |sprintf| format string which is used to fill the slope--annotation with text. + The first argument is the slope and the second the line offset. +\end{pgfplotskey} + +\begin{pgfplotskey}{annot/printable=\mchoice{true,false} (initially false)} + Allows to configure whether the small annotations will be printed. Otherwise, they are only available on screen. +\end{pgfplotskey} + +\begin{pgfplotskey}{annot/font=\marg{Javascript font name} (initially font.Times)} + Allows to choose a Javascript font for the annotations. Possible choices are limited to what Javascript accepts (which is \emph{not} the same as \LaTeX). The default fonts and its names are shown below. + + \begin{center} + \begin{tabular}{ll} + \toprule + Font Name & Name in Javascript\\ + \midrule + Times-Roman & font.Times\\ + Times-Bold & font.TimesB\\ + Times-Italic & font.TimesI\\ + Times-BoldItalic & font.TimesBI\\ + Helvetica & font.Helv\\ + Helvetica-Bold & font.HelvB\\ + Helvetica-Oblique & font.HelvI\\ + Helvetica-BoldOblique & font.HelvBI\\ + Courier & font.Cour\\ + Courier-Bold & font.CourB\\ + Courier-Oblique & font.CourI\\ + Courier-BoldOblique & font.CourBI\\ + Symbol & font.Symbol\\ + ZapfDingbats & font.ZapfD\\ + \bottomrule + \end{tabular} + \end{center} +\end{pgfplotskey} + +\begin{pgfplotskey}{annot/textSize=\marg{Size in Point} (initially 11)} + Sets the text size of annotations in points. +\end{pgfplotskey} + +\begin{pgfplotskeylist}{% + annot/popup size generic=\texttt{auto} or \marg{x} or \marg{x,y} (initially auto),% + annot/popup size snap=\texttt{auto} or \marg{x} or \marg{x,y} (initially auto),% + annot/popup size=\marg{value}}% + The first key defines the size of popups if you just click into an axis. The second key defines the size of popups for the snap--to--nearest feature (i.e.\ those prepared by |clickable coords|). The third key sets both to the same \meta{value}. + + The argument can be |auto| in which case \PGFPlots\ tries to be smart and counts characters. This may fail for multiline texts. The choice \meta{x} provides the \emph{horizontal} size only, in units of |annot/textSize|. Thus, |annot/popup size generic=6| makes the popup $6\cdot 11$ points wide. In this case, only one line will be allocated. Finally, \meta{x,y} allows to provide horizontal and vertical size, both in units of |annot/textSize|. + + See also |clickable coords size| which is an alias for |annot/popup size snap|. +\end{pgfplotskeylist} + + +\begin{pgfplotskey}{annot/snap dist=\marg{Size in Point} (initially 4)} + Defines the size within two mouse clicks are considered to be equivalent, meased in points (Euclidean distance). +\end{pgfplotskey} + +\begin{pgfplotskey}{annot/richtext=\mchoice{true,false} (initially true)} + Enables or disables richtext formatting in |clickable coords| arguments. Richtext is kind of XHTML and allows CSS styles like colors, font changes and other CSS attributes, see the documentation for |clickable coords| for details. + + The case |annot/richtext=false| is probably more robust. +\end{pgfplotskey} + +\subsubsection{Using the Clickable Library in Other Contexts} +This library provides essentially one command, |\pgfplotsclickablecreate| which creates a clickable area of predefined size, combined with Javascript interaction code. It can be used independently of \PGFPlots. + +\begin{command}{\pgfplotsclickablecreate\oarg{required key-value-options}} + Creates an area which is clickable. A click produces a popup which + contains information about the point under the cursor. + + The complete (!) context needs to be provided using key-value-pairs, either set before + calling this method of inside of \oarg{required key-value-options}. + + This command actually creates an AcroForm which invokes Javascript + whenever it is clicked. A Javascript Object is created which + represents the context (axis limits and options). This Javascript + object is available at runtime. + + This method is public and it is \emph{not} restricted to \PGFPlots. + The \PGFPlots\ hook simply initializes the required key-value-pairs. + + This method does not draw anything. It initializes only a + clickable area and Javascript code. + + The required key-value-pairs are documented below. + + \paragraph{Attention:} Complete key-value validation is \emph{not} performed here. It + can happen that invalid options will produce Javascript bugs when + opened with Acrobat Reader. Use the Javascript console to find them. +\end{command} + +\noindent All options described in the following are only interesting for users who intend to use this library without \PGFPlots. + +\begin{pgfplotskey}{annot/width=\marg{dimension} (initially -)} + This required key communicates the area's width to |\pgfplotsclickablecreate|. It must be a \TeX\ dimension like |5cm|. +\end{pgfplotskey} +\begin{pgfplotskey}{annot/height=\marg{dimension} (initially -)} + This required key communicates the area's height to |\pgfplotsclickablecreate|. It must be a \TeX\ dimension like |5cm|. +\end{pgfplotskey} +\begin{pgfplotskey}{annot/jsname=\marg{string} (initially -)} + This required key communicates a unique identifier to |\pgfplotsclickablecreate|. This identifier is used to identify the object in Javascript, so there can't be more than one of them. If it is empty, a default identifier will be generated. +\end{pgfplotskey} + +\begin{pgfplotskeylist}{annot/xmin=\marg{number},annot/xmax=\marg{number},annot/ymin=\marg{number},annot/ymax=\marg{number} (initially empty)} + These required keys communicate the axis limits to |\pgfplotsclickablecreate|. They should be set to numbers which can be assigned to a Javascript floating point number (standard IEEE double precision). +\end{pgfplotskeylist} + +\begin{pgfplotskey}{annot/collected plots=\marg{nested arrays} (initially empty)} + The low level interface to implement a snap--to--nearest feature. The value is an array of plots, where each plot is again an array of coordinates and each coordinate is an array of three elements, $x$, $y$ and text. Please consult the code comments for details and examples. +\end{pgfplotskey} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.colormaps.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.colormaps.tex new file mode 100644 index 00000000000..4d30ee8d0c7 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.colormaps.tex @@ -0,0 +1,316 @@ +\subsection{Colormaps} + +{\emph{An extension by Patrick H\"acker}} + + +\begin{pgfplotslibrary}{colormaps} + A small library providing a number of additional |colormap|s. Many of these |colormap|s originate from the free Matlab package ``SC --- powerful image rendering'' of Oliver Woodford. + + The purpose of this library is to provide further |colormap|s to all users and to provide some of them which are similar to those used by Matlab (tm). + +\begin{stylekey}{/pgfplots/colormap/autumn} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={autumn}{rgb255=(255,0,0) rgb255=(255,255,0)} +} +\end{codeexample} + + \pgfplotsshowcolormap{autumn} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/bled} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={bled}{rgb255=(0,0,0) rgb255=(43,43,0) rgb255=(0,85,0) + rgb255=(0,128,128) rgb255=(0,0,170) rgb255=(213,0,213) rgb255=(255,0,0)} +} +\end{codeexample} + + \pgfplotsshowcolormap{bled} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/bright} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={bright}{rgb255=(0,0,0) rgb255=(78,3,100) rgb255=(2,74,255) + rgb255=(255,21,181) rgb255=(255,113,26) rgb255=(147,213,114) rgb255=(230,255,0) + rgb255=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{bright} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/bone} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={bone}{[1cm]rgb255(0cm)=(0,0,0) rgb255(3cm)=(84,84,116) + rgb255(6cm)=(167,199,199) rgb255(8cm)=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{bone} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/cold} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={cold}{rgb255=(0,0,0) rgb255=(0,0,255) rgb255=(0,255,255) + rgb255=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{cold} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/copper} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={copper}{[1cm]rgb255(0cm)=(0,0,0) rgb255(4cm)=(255,159,101) + rgb255(5cm)=(255,199,127)} +} +\end{codeexample} + + \pgfplotsshowcolormap{copper} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/copper2} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={copper2}{rgb255=(0,0,0) rgb255=(68,62,63) rgb255=(170,112,95) + rgb255=(207,194,138) rgb255=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{copper2} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/earth} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={earth}{rgb255=(0,0,0) rgb255=(0,28,15) rgb255=(42,39,6) + rgb255=(28,73,33) rgb255=(67,85,24) rgb255=(68,112,46) rgb255=(81,129,83) + rgb255=(124,137,87) rgb255=(153,147,122) rgb255=(145,173,164) rgb255=(144,202,180) + rgb255=(171,220,177) rgb255=(218,229,168) rgb255=(255,235,199) rgb255=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{earth} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/gray} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={gray}{rgb255=(0,0,0) rgb255=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{gray} + + This |colormap| is an alias for the standard |colormap/blackwhite|. + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/hot2} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={hot2}{[1cm]rgb255(0cm)=(0,0,0) rgb255(3cm)=(255,0,0) + rgb255(6cm)=(255,255,0) rgb255(8cm)=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{hot2} + + Note that this particular choice ships directly with \PGFPlots, you do not need to load the |colormaps| library for this value. + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/hsv} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={hsv}{rgb255=(255,0,0) rgb255=(255,255,0) rgb255=(0,255,0) + rgb255=(0,255,255) rgb255=(0,0,255) rgb255=(255,0,255) rgb255=(255,0,0)} +} +\end{codeexample} + + \pgfplotsshowcolormap{hsv} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/hsv2} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={hsv2}{rgb255=(0,0,0) rgb255=(128,0,128) rgb255=(0,0,230) + rgb255=(0,255,255) rgb255=(0,255,0) rgb255=(255,255,0) rgb255=(255,0,0)} +} +\end{codeexample} + + \pgfplotsshowcolormap{hsv2} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/jet} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={jet}{rgb255(0cm)=(0,0,128) rgb255(1cm)=(0,0,255) + rgb255(3cm)=(0,255,255) rgb255(5cm)=(255,255,0) rgb255(7cm)=(255,0,0) + rgb255(8cm)=(128,0,0)} +} +\end{codeexample} + + \pgfplotsshowcolormap{jet} + + Note that this particular choice ships directly with \PGFPlots, you do not need to load the |colormaps| library for this value. + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/pastel} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={pastel}{rgb255=(0,0,0) rgb255=(120,0,5) rgb255=(0,91,172) + rgb255=(215,35,217) rgb255=(120,172,78) rgb255=(255,176,24) rgb255=(230,255,0) + rgb255=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{pastel} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/pink} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={pink}{rgb255=(0,0,0) rgb255=(12,16,46) rgb255=(62,22,43) + rgb255=(53,53,65) rgb255=(79,72,58) rgb255=(122,80,67) rgb255=(147,91,102) + rgb255=(147,115,140) rgb255=(144,145,154) rgb255=(173,163,146) rgb255=(216,171,149) + rgb255=(250,179,179) rgb255=(255,198,227) rgb255=(246,229,255) rgb255=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{pink} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/sepia} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={sepia}{rgb255(0cm)=(0,0,0) rgb255(1cm)=(26,13,0) + rgb255(18cm)=(255,230,204) rgb255(20cm)=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{sepia} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/spring} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={spring}{rgb255=(255,0,255) rgb255=(255,255,0)} +} +\end{codeexample} + + \pgfplotsshowcolormap{spring} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/summer} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={summer}{rgb255=(0,128,102) rgb255=(255,255,102)} +} +\end{codeexample} + + \pgfplotsshowcolormap{summer} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/temp} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={temp}{rgb255=(36,0,217) rgb255=(25,29,247) rgb255=(41,87,255) + rgb255=(61,135,255) rgb255=(87,176,255) rgb255=(117,211,255) rgb255=(153,235,255) + rgb255=(189,249,255) rgb255=(235,255,255) rgb255=(255,255,235) rgb255=(255,242,189) + rgb255=(255,214,153) rgb255=(255,172,117) rgb255=(255,120,87) rgb255=(255,61,61) + rgb255=(247,40,54) rgb255=(217,22,48) rgb255=(166,0,33)} +} +\end{codeexample} + + \pgfplotsshowcolormap{temp} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/thermal} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={thermal}{rgb255=(0,0,0) rgb255=(77,0,179) rgb255=(255,51,0) + rgb255=(255,255,0) rgb255=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{thermal} + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/winter} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={winter}{rgb255=(0,0,255) rgb255=(0,255,128)} +} +\end{codeexample} + + \pgfplotsshowcolormap{winter} + + \matlabcolormaptext +\end{stylekey} + +\end{pgfplotslibrary} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.dateplot.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.dateplot.tex new file mode 100644 index 00000000000..f9e6a417ecd --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.dateplot.tex @@ -0,0 +1,6 @@ +\subsection{Dates as Input Coordinates} +\begin{pgfplotslibrary}{dateplot} + A library which allows to use dates like |2008-01-01| or dates with time like |2008-01-01 11:35| as input coordinates in plots. The library converts dates to numbers and tick labels will be pretty-printed dates (or times). + + This library is documented in Section~\ref{pgfplots:sec:symbolic:coords} on page~\pageref{pgfplots:sec:date:coords}. +\end{pgfplotslibrary} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.external.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.external.tex new file mode 100644 index 00000000000..cf38a25109e --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.external.tex @@ -0,0 +1,9 @@ +\subsection{Image Externalization} +\begin{pgfplotslibrary}{external} + The |external| library offers a convenient method to export every single |tikzpicture| into a separate~|.pdf| (or~|.eps|). Later runs of \LaTeX\ will simply include these graphics, thereby reducing typesetting time considerably. + + This library is documented in more detail in Section~\ref{sec:pgfplots:export} ``Export to {\pdf/\eps}''. + + + The |external| library has been written by Christian Feuers\"anger (author of \PGFPlots). It has been contributed to \Tikz\ as general purpose library, so the reference documentation along with all tweaks can be found in~\cite[Section ``Externalization Library'']{tikz}. The command |\usepgfplotslibrary{external}| is actually just a wrapper which loads |\usetikzlibrary{external}| or, if this library does not yet exist because the installed \pgfname\ has at most version $2.00$, it will load a copy which is shipped with \PGFPlots. +\end{pgfplotslibrary} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.groupplot.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.groupplot.tex index ed18c1a5ffe..8f7eac17aed 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.groupplot.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.groupplot.tex @@ -16,9 +16,7 @@ \end{pgfplotslibrary} \begin{environment}{{groupplot}\oarg{options}} - Once you have loaded the |groupplots| library you will gain access to this environment. This environment is limited to the same restrictions as the - |axis| environment. It actually utilizes this environment so consider it as an extension of this. What is important to note is that \oarg{options} gets - applied to all plots in the entire environment. This can be really handy when you need the same |xmin|, |xmax|, |ymin| and |ymax|. + Once you have loaded the |groupplots| library you will gain access to this environment. This environment is limited to the same restrictions as the |axis| environment. It actually utilizes this environment so consider it as an extension of this. What is important to note is that \oarg{options} are applied to all plots in the entire environment. This can be really handy when you need the same |xmin|, |xmax|, |ymin| and |ymax|. \end{environment} With such an environment one can typeset plots in matrix like styles @@ -102,7 +100,8 @@ to quickly create an aligned structure of plots. But you can also utilize it to \addplot[very thick] file {plotdata/group-1.dat}; \nextgroupplot[xmax=5,ymax=50] \addplot[very thick] file {plotdata/group-1.dat}; - \nextgroupplot[xmin=5,xmax=10,ymax=50,yticklabels={}] + \nextgroupplot[xmin=5,xmax=10,ymax=50, + yticklabels={}] \addplot[very thick] file {plotdata/group-1.dat}; \end{groupplot} \end{tikzpicture} @@ -134,12 +133,11 @@ Or for instance zooming in on data as in the next example. \subsubsection{Grouping options} \label{sec:pgfplots:group:options} -Here the various available options of the library reside. \begin{pgfplotskey}{group style=\marg{options with {\normalfont\texttt{group/}} prefix}} This key sets all \meta{options} using the |/pgfplots/group/| prefix. - Note that the distinction between |group/| and normal options is important has some of them are quite similar. + Note that the distinction between |group/| and normal options is important as some of them are quite similar. For example, the following statements are all equivalent: \begin{codeexample}[code only] @@ -153,7 +151,7 @@ All the following keys are in the subdirectory |group|. \begin{pgfplotskeylist}{group/group size=\meta{columns} by \meta{rows} (initially 1 by 1), group/columns=\meta{columns} (initially 1), group/rows=\meta{rows} (initially 1)} - These keys determines the total number of plots that can be in one environment |groupplot|. It is thus important not to add more + These keys determine the total number of plots that can be in one environment |groupplot|. It is thus important not to add more |\nextgroupplot| in the environment than \meta{columns}$\times$\meta{rows}. This is critical to set if one uses more than 1 more plot. As the key |group size| uses |columns| and |rows| you should stick to either |group size| or both |columns| and |rows|. \end{pgfplotskeylist} @@ -171,7 +169,7 @@ All the following keys are in the subdirectory |group|. \begin{pgfplotskeylist}{% group/xlabels at=\mchoice{all,edge bottom,edge top} (initially all),% group/ylabels at=\mchoice{all,edge left,edge right} (initially all)} - In order to determine which plots get labels typeset one can use these keys. By default all axis gets typeset normally and thus have both $x$ and + In order to determine which plots get labels typeset one can use these keys. By default all axes get typeset normally and thus have both $x$ and $y$ axis labels. % \usepgfplotslibrary{groupplots} \begin{codeexample}[] @@ -208,7 +206,7 @@ $y$ axis on their left side. These keys are especially handy when using \textit{ \begin{pgfplotskeylist}{% group/xticklabels at=\mchoice{all,edge top,edge bottom} (initially all),% group/yticklabels at=\mchoice{all,edge left,edge right} (initially all)} - In order to determine which plots get tick labels typeset one can use these keys. By default all axis gets typeset normally and thus have both $x$ and + In order to determine which plots get tick labels typeset one can use these keys. By default all axes gets typeset normally and thus have both $x$ and $y$ axis tick labels. If one sets \begin{codeexample}[code only] @@ -223,7 +221,7 @@ specially handy when using \textit{glued} plots. \begin{pgfplotskeylist}{% group/x descriptions at=\mchoice{all,edge top,edge bottom} (initially all),% group/y descriptions at=\mchoice{all,edge left,edge right} (initially all)} - These are simply a short hand for both using both |xticklabels at| and |xlabels at| simultaneously: + These are simply a short hand for using both |xticklabels at| and |xlabels at| simultaneously: % \usepgfplotslibrary{groupplots} \begin{codeexample}[] @@ -320,6 +318,6 @@ Here, |x descriptions at=edge bottom| yields that $x$ descriptions (|xlabel| and circle (3pt) node {North west}; \end{tikzpicture} \end{codeexample} -Notice that you need to call a |\nextgroupplot| again after to jump to the next plot. +Notice that you need to call a |\nextgroupplot| againwards to jump to the next plot. \end{pgfplotskey} } diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.patchplots.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.patchplots.tex new file mode 100644 index 00000000000..f226828055a --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.patchplots.tex @@ -0,0 +1,411 @@ +\subsection{Patchplots Library} +\label{sec:lib:patchplots} +\begin{pgfplotslibrary}{patchplots} + A library for advanced |patch| plots. It has been designed to visualize shaded isoparametric finite element meshes of higher order. Its core is an interface to the generation of smoothly shaped elements with interpolated color values (based on \texttt{.pdf} Shading Type 6 and \texttt{.pdf} Shading Type 7), with additional (limited) support for constant color filling without shadings. + +\subsubsection{Additional Patch Types} +\message{Underfull hbox is OK.^^J}% +\begin{pgfplotskey}{patch type=\mchoice{default,rectangle,triangle,line,quadratic spline,cubic spline,\\bilinear,triangle quadr,biquadratic,coons} (initially default)} + The |patchplots| library supports several new |patch type|s in addition to the initially available choices (which are |rectangle|,|triangle| and |line|). The documentation of the two--dimensional choices from page~\pageref{key:patch:type} is repeated here. + + There are two new one--dimensional patch types, namely |quadratic spline| and |cubic spline|. Here, |patch type=quadratic spline| consists of quadratic patches of $n=3$ vertices each. The vertices are interpolated exactly: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title={\texttt{patch type=quadratic spline}}] +\addplot[ + mark=*, + patch,mesh,% without mesh, pgfplots tries to fill + patch type=quadratic spline] +coordinates { + % left, right, middle-> first segment + (0,0) (1,1) (0.5,0.5^2) + % left, right, middle-> second segment + (1.2,1) (2.2,1) (1.7,2) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent In our example, the first segment interpolates $f(x)=x^2$ at the points $\{0,\nicefrac12,1\}$. The |quadratic spline| is actually nothing but piecewise Lagrangian interpolation with quadratic polynomials: it expects three points in the sequence `(left end), (right end), (middle)' and interpolates these three points with a quadratic polynomial. Unlike the default 1d |mesh| visualization (which uses |patch type=line| implicitly), you have to use the special syntax above (or the equivalent approach by means of |patch table|). Note that |patch type=quadratic spline| results in correct shapes, but uses \emph{just constant color} for each segment; high--order color shading is only supported approximately using |patch refines|. + + The |patch type=cubic spline| is very similar: it expects patches of $n=4$ vertices and interpolates them with a cubic polynomial: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title={\texttt{patch type=cubic spline}}] +\addplot[ + mark=*, + patch,mesh, + patch type=cubic spline] +coordinates { + % left, right, left middle, right middle + (-1,-1) + (1,1) + (-1/3,{(-1/3)^3}) + (1/3,{(1/3)^3}) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent Here, we interpolated $f(x)=x^3$ at the four equidistant points $\{-1,-\nicefrac13,\nicefrac13,1\}$ with a cubic polynomial (which is $x^3$). The |cubic spline| expects a sequence of patches, each with four coordinates, given in the sequence `(left end), (right end), (interpolation point at $\nicefrac13$), (interpolation point at $\nicefrac23$)'. It has limitations and features like |quadratic spline|, see above. + + + The |patchplots| library is especially strong for |shader=interp|, so this is our main focus in the remaining documentation here. + + \paragraph{Attention:} At the time of this writing, many free pdf viewers do not fully support the following shadings\footnote{The author of this package has submitted bugfixes to Linux viewers based on xpdf/libpoppler, so the problem will (hopefully) vanish in future versions.}. The preferred viewer is Adobe Acrobat Reader. + + The choice \declaretext{rectangle} expects one or more rectangular patches with $n=4$ vertices each. These vertices are either encoded as a matrix or as individual patches (using |mesh input=patches|), in the sequence in which you would connect the vertices: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title=Rectangle from matrix input] +% note that surf implies 'patch type=rectangle' +\addplot3[surf,shader=interp,samples=2, + patch type=rectangle] + {x*y}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title=Rectangle from patch input] +\addplot3[patch,shader=interp,patch type=rectangle] coordinates { + (0,0,1) (1,0,0) (1,1,0) (0,1,0) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent As already documented on page~\pageref{key:patch:type}, the |shader=interp| implementation for |rectangle| uses two triangles and interpolates them linearly. The differences between the two examples above arise due to $z$ buffering approaches: the matrix input reorders the matrix in linear time, whereas the second example would sort complete rectangles. In our case, this yields to the different corner sequence. + + The choice \declareandlabel{bilinear} is essentially the same as |rectangular| with respect to its input formats and stroke paths, but it uses correct bilinear shading for |shader=interp|. The two examples from above now become +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title=Bilinear from $2\times 2$ matrix input] +% note that surf implies 'patch type=rectangle' +\addplot3[surf,shader=interp,samples=2, + patch type=bilinear] + {x*y}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title=Bilinear from $4$--point patch input] +\addplot3[patch,shader=interp,patch type=bilinear] +coordinates { + (0,0,1) (1,0,0) (1,1,0) (0,1,0) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + + The choice \declaretext{triangle} expects a sequence of linear triangles, each encoded using $n=3$ vertices: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[enlargelimits, + nodes near coords={(\coordindex)}, + title=Single Triangle patch] +\addplot3[patch,shader=interp] coordinates { + (0,0,1) + (1,0,0) + (1,1,0) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + + The choice \declareandlabel{triangle quadr} expects a sequence of isoparametric quadratic triangles, each defined by $n=6$ vertices: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title=Quadratic Triangle] +\addplot[patch,patch type=triangle quadr, + shader=interp,point meta=explicit] +coordinates { + (0,0) [1] (5,4) [2] (0,7) [3] + (2,3) [1] (3,6) [2] (-1,4) [3] +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title=Quadratic Triangle] +\addplot3[patch,patch type=triangle quadr, + shader=interp] +coordinates { + (0,0,1) (5,4,0) (0,7,0) + (2,3,0) (3,6,0) (-1,4,0) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent Here, the edges have the correct quadratic shape. However, the color interpolation is just \emph{bilinear}; using the color values of the corners and ignoring the rest (consider using |patch refines| to improve the color interpolation). For three dimensions, \PGFPlots\ checks the depth of corners to determine foreground/background. For two dimensions, strongly distorted elements may fold over each other in unexpected ways. + + The choice \declareandlabel{biquadratic} expects a sequence of isoparametric biquadratic quadrilaterals (rectangles), each defined by $n=9$ vertices: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title=Single Biquadratic Quadrilateral] +\addplot[patch,patch type=biquadratic, + shader=interp,point meta=explicit] +coordinates { + (0,0) [1] (6,1) [2] (5,5) [3] (-1,5) [4] + (3,1) [1] (6,3) [2] (2,6) [3] (0,3) [4] + (3,3.75) [4] +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + title=Single Biquadratic Quadrilateral] +\addplot3[patch,patch type=biquadratic,shader=interp] +coordinates { + (0,0,1) (6,1,0) (5,5,0) (-1,5,0) + (3,1,0) (6,3,0) (2,6,0) (0,3,0) + (3,3.75,0) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent Similar to |triangle quadr|, the edges have the correct quadratic shape -- but the color interpolation is just \emph{bilinear}; using the color values of the corners and ignoring the rest. Again, consider using |patch refines| to improve the color interpolation. + + The choice \declareandlabel{coons} expects a sequence of one or more Coons patches, made up of $n=12$ points each. A Coons patch is delimited by four cubic B\'ezier curves, with the end points attached to each other -- and the $n$ points provide the required control points for these curves in a specific ordering which is illustrated in the following example: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[nodes near coords={(\coordindex)}, + width=12cm, + title=A Coons Patch] +\addplot[mark=*,patch,patch type=coons, + shader=interp,point meta=explicit] +coordinates { + (0,0) [0] % first corner + (1,-1) [0] % Bezier control point between (0) and (3) + (4,0.7) [0] % Bezier control point between (0) and (3) + % + (3,2) [1] % second corner + (4,3.5) [1] % Bezier control point between (3) and (6) + (7,2) [1] % Bezier control point between (3) and (6) + % + (7,1) [2] % third corner + (6,0.6) [2] % Bezier control point between (6) and (9) + (4.5,-0.5) [2] % Bezier control point between (6) and (9) + % + (5,-2) [3] % fourth corner + (4,-2.5) [3] % Bezier control point between (9) and (0) + (-1,-2) [3] % Bezier control point between (9) and (0) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The four cubic B\'ezier curves are \emph{equivalent} to \texttt{curveto} paths of \pgfname, i.e.\ \parg{corner 1}|.. controls|\parg{control point A}| and |\parg{control point B}| .. |\parg{corner 2} paths. The interpolated shading is bilinear. More precisely, a bilinear shading in the unit cube $[0,1]^2$ is initialised which is then mapped into the Coons patch such that the corners match. The color interpolation uses only the color data of the four corners, color values of intermediate control points are ignored for the shading (although their value will be respected for the upper and lower limit of color data). In contrast to the finite element patches, a Coons patch is inherently two--dimensional. While you can still use three--dimensional coordinates, \PGFPlots\ will draw the shading as you provide it, without checking for the depth information (as it does for the other |patch type|s). In other words: depending on the current |view| angle, the shading might fold over itself in unexpected ways. + + Even for two dimensions, Coons patches may fold over themselves. To determine which part is foreground and which part is background, the following rule applies: the four corner points $(0)$, $(3)$, $(6)$, $(9)$ are associated to the unit cube points $(u,v) = (0,0)$, $(0,1)$, $(1,1)$ and $(1,0)$, respectively. The edge between corner $(3)$ and $(6)$ (i.e. the one with $v=1$) is foreground, the edge between $(1)$ and $(9)$ is background. Thus, large values of $v$ are drawn on top of small values of $v$. If $v$ is constant, large values of $u$ are drawn on top of small values of $u$. Thus, reordering the patch vertices (choosing a different first vertex and/or reversing the sequence) allows to get different foreground/background configurations\footnote{Internally, \PGFPlots\ employs such mechanisms to map the higher order isoparametric patch types to Coons patches, sorting according their corner's depth information.}. + +\end{pgfplotskey} + + + +\subsubsection{Automatic Patch Refinement and Triangulation} +\PGFPlots\ supports automatic patch refinement for most of its |patch type|s. There are mainly two purposes for patch refinement: to increase the quality of |z buffer=sort| and/or to improve color interpolation for high--order patches. + +\begin{pgfplotskey}{patch refines=\marg{levels} (initially 0)} + This key controls patch refinement. The initial choice |patch refines=0| disables refinement and visualizes elements as they have been found in input files. + + A positive \meta{levels} enables (recursive) patch refinement: each patch is refined individually. + + The following example illustrates the |patch refines| feature for a |triangle quadr| shape function on an edge. Note that since \PGFPlots\ uses only first order shading which is based on the corner points $(0)$, $(1)$ and $(2)$, the specified shape function of |patch refines=0| has constant color. Higher \meta{levels} approximate the patch with increasing quality: +\begin{codeexample}[] +\foreach \level in {0,1,2} {% + \begin{tikzpicture} + \begin{axis}[ + nodes near coords={(\coordindex)}, + footnotesize, + title={patch refines=\level}] + + \addplot3[patch,patch type=triangle quadr, + shader=faceted interp,patch refines=\level] + coordinates { + (0,0,0) (5,4,0) (0,7,0) + (2,3,0) (3,6,1) (-1,4,0) + }; + \end{axis} + \end{tikzpicture} +} +\end{codeexample} + \noindent In this example, patch refinement makes a huge difference since it is just one element with huge displacements. For practical examples, you probably won't need many refinement levels. + + The refined patches reproduce the geometry's shape exactly. In addition, they improve color interpolation. Note that its purpose is just visualization, therefor hanging nodes are allowed (and will be generated by |patch refine| for most |patch type|s). + + Patch refinement is implemented for all supported patches except for |patch type=coons|. +\end{pgfplotskey} + +\begin{pgfplotskey}{patch to triangles=\mchoice{true,false} (initially false)} + Occasionally, one has a complicated |patch type| on input and would like to visualize it as a |triangle| mesh. \PGFPlots\ supports automatic triangulation of patches. Triangulation means to replace each individual input patch by one or more triangles. Triangulation can be combined with |patch refines| in which case |patch refines| is applied first and the resulting refined patches are then triangulated. +\begin{codeexample}[] +\foreach \level in {0,1,2} {% + \begin{tikzpicture} + \begin{axis}[ + nodes near coords={(\coordindex)}, + footnotesize, + title={Triangulation + \level\ refines}] + + \addplot3[patch,patch type=biquadratic,shader=faceted interp, + patch to triangles,patch refines=\level] + coordinates { + (0,0,0) (6,1,0) (5,5,0) (-1,5,0) + (3,1,0) (6,3,0) (2,6,0) (0,3,0) + (3,3.75,1) + }; + \end{axis} + \end{tikzpicture}% +} +\end{codeexample} + + For one--dimensional |patch type|s like |quadratic spline|, |patch to triangles| results in approximation by means of |patch type=line| instead of |triangle|. + + The |patch to triangles| feature is implemented for all supported patches except for |patch type=coons|. +\end{pgfplotskey} + +\subsubsection{Peculiarities of Flat Shading and High Order Patches} +\label{sec:lib:patchplots:flat} +The |patchplots| library has been optimized for use with interpolated shadings, i.e.\ for |shader=interp|: it allows the filled area to fold over itself or to be outside of the patch boundaries. + +\PGFPlots\ also supports |shader=flat| and |shader=faceted| by simply stroking and/or filling the patch boundaries. Naturally, such an approach works only if the enclosed patch boundary and the filled area are essentially the same! Consider using |shader=flat| or |shader=faceted| only if the \emph{mesh width is small enough} such that patches do not fold over themselves. + +The following example illustrates the effect: the coarse single element on the left folds over itsself, resulting in strange fill patterns. Refining the mesh reduces the effect. +\begin{codeexample}[] +\foreach \level in {0,1,2} {% + \begin{tikzpicture} + \begin{axis}[ + footnotesize, + title={Faceted + \level\ refines}] + + \addplot3[patch,patch type=biquadratic,shader=faceted, + patch refines=\level] + coordinates { + (0,0,1) (6,1,0) (5,5,0) (-1,5,0) + (3,1,0) (6,3,0) (2,6,0) (0,3,0) + (3,3.75,0) + }; + \end{axis} + \end{tikzpicture} +} +\end{codeexample} + +\subsubsection{Drawing Grids} +The |patchplots| library supports grid (|mesh|) visualization in the same way as for two/three--dimensional |mesh|- and |surf| plots. This includes four different approaches: the first is |shader=faceted|, which uses constant fill color and |faceted color| for stroke paths (as we already saw in Section~\ref{sec:lib:patchplots:flat}). The second approach is to use |shader=faceted interp| which uses interpolated shadings for filling and issues stroke paths on top of each interpolated element. The third approach is to issue two |\addplot| commands, one with the filled |patch| plot, and one with a |patch,mesh| style which only draws (colored) grid lines on top of the previous plot. The three approaches are shown below. +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + title={Grids with shader=faceted}] + +\addplot3[patch,patch type=biquadratic, + shader=faceted,patch refines=3] +coordinates { + (0,0,1) (6,1,1.6) (5,5,1.3) (-1,5,0) + (3,1,0) (6,3,0.4) (2,6,1.1) (0,3,0.9) + (3,3.75,0.5) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\noindent As already discussed in Section~\ref{sec:lib:patchplots:flat}, the approach with |shader=faceted| works well if the mesh width is small enough (such that single patches do not overlap and their fill area is within the patch boundaries). +% +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + title={Grids with shader=faceted interp}] + +\addplot3[patch,patch type=biquadratic, + shader=faceted interp,patch refines=3] +coordinates { + (0,0,1) (6,1,1.6) (5,5,1.3) (-1,5,0) + (3,1,0) (6,3,0.4) (2,6,1.1) (0,3,0.9) + (3,3.75,0.5) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\noindent Here, grid lines are defined to be the patch boundary, so it may occasionally happen for coarse patches that grid lines cross the filled area. If you experience problems, consider using the |patch refines| key. The |shader=faceted interp| supports |z buffer| -- at the cost of generating one shading for \emph{each} patch element (the stroke path is drawn immediately after the patch element is shaded). This can become quite expensive\footnote{I would really like to hear any well--founded ideas how to improve this issue. In case you have an idea-- let me know!} at display time and may lead to huge pdf files. However, |shader=faceted interp| provides smooth shadings and, at the same time, good grid lines which are drawn in the correct order. + +% +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + title={Mesh on top of patches (i): obscured}] + +\addplot3[patch,patch type=biquadratic,shader=interp, + patch refines=3] +coordinates { + (0,0,1) (6,1,1.6) (5,5,1.3) (-1,5,0) + (3,1,0) (6,3,0.4) (2,6,1.1) (0,3,0.9) + (3,3.75,0.5) +}; +\addplot3[patch,patch type=biquadratic,mesh,black, + patch refines=3] +coordinates { + (0,0,1) (6,1,1.6) (5,5,1.3) (-1,5,0) + (3,1,0) (6,3,0.4) (2,6,1.1) (0,3,0.9) + (3,3.75,0.5) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +% +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + title={Mesh on top of patches (ii): unobscured\\ + \tiny Geometry provided by Prof. Chernov, Bonn}, + title style={align=center}, + view={156}{28}] +\addplot3[patch,patch type=bilinear, + shader=interp, + patch table=plotdata/patchexample_conn.dat] + file {plotdata/patchexample_verts.dat}; + +\addplot3[patch,patch type=bilinear, + mesh,black, + patch table=plotdata/patchexample_conn.dat] + file {plotdata/patchexample_verts.dat}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\noindent The approach to draw grids separately is realized by means of two |\addplot| statements; the first using |patch| as before, the second using |patch,mesh|. This configures \PGFPlots\ to visualize just the mesh. Make sure you provide `|mesh|' after `|patch|' since the latter activates filled |surf| visualization. The approach of meshes on top of patches implies to draw grid lines simply over any previous drawing operations. Thus, depth information is lost (as displayed in the first example above). Overlaying grid lines on top of the surface works in special cases (see bottom picture). An approach which always works is to provide the mesh at a fixed $z$ position as displayed in the following example: +% +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + title={Separate Grids (iii)}] + +\addplot3[patch,patch type=biquadratic,shader=interp, + patch refines=3] +coordinates { + (0,0,1) (6,1,1.6) (5,5,1.3) (-1,5,0) + (3,1,0) (6,3,0.4) (2,6,1.1) (0,3,0.9) + (3,3.75,0.5) +}; +\addplot3[patch,patch type=biquadratic, + mesh,black, + z filter/.code={\def\pgfmathresult{1.8}}, + patch refines=3] +coordinates { + (0,0,1) (6,1,1.6) (5,5,1.3) (-1,5,0) + (3,1,0) (6,3,0.4) (2,6,1.1) (0,3,0.9) + (3,3.75,0.5) +}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\noindent Here, the first |\addplot3| command is the same as above, just with |shader=interp|. The second reproduces the same geometry, but uses a |z filter| to fix the $z$ coordinate (in this case to $z=1.8$). This effectively overrules all $z$ coordinates. + + Thus, grid lines can be realized either by means of flat fill color with |shader=faceted| (efficient), by means of interpolated fill colors with |shader=faceted interp| (inefficient, see above) or, for special applications, using a separate |patch,mesh| plot which is drawn on top of the patches (efficient). In any case, the mesh visualization considers the |faceted color| which can depend on |mapped color|. + +\end{pgfplotslibrary} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.polar.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.polar.tex new file mode 100644 index 00000000000..cded9ba07af --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.polar.tex @@ -0,0 +1,158 @@ +\subsection{Polar Axes} +{ +\tikzset{external/figure name/.add={}{polar_}}% + +\begin{pgfplotslibrary}{polar} + A library to draw polar axes and plot types relying on polar coordinates, represented by angle (in degrees or, optionally, in radians) and radius. +\end{pgfplotslibrary} + +\subsubsection{Polar Axes} +\begin{environment}{{polaraxis}} + The |polar| library provides the |polaraxis| environment. + Inside of such an environment, all coordinates are expected to be given in polar representation of the form $(\meta{angle},\meta{radius})$, i.e.\ the $x$ coordinate is always the angle and the $y$ coordinate the radius: +\end{environment} +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis} + \addplot coordinates {(0,1) (90,1) + (180,1) (270,1)}; + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} + +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis} + \addplot+[domain=0:3] (360*x,x); % (angle,radius) + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} + +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis} + \addplot+[mark=none,domain=0:720,samples=600] + {sin(2*x)*cos(2*x)}; + % equivalent to (x,{sin(..)cos(..)}), i.e. + % the expression is the RADIUS + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} + +Polar axes support most of the \PGFPlots\ user interface, i.e.\ |legend entries|, any axis descriptions, |xtick|/|ytick| and so on: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis}[ + xtick={0,90,180,270}, + title=A polar axis] + + \addplot coordinates {(0,1) (45,1)}; + \addlegendentry{First} + + \addplot coordinates {(180,0.5) (0,0)}; + \addlegendentry{Second} + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} +\noindent Furthermore, you can use all of the supported input coordinate methods (like \verbpdfref{\addplot coordinates}, \verbpdfref{\addplot table}, \verbpdfref{\addplot expression}). The only difference is that polar axes interpret the (first two) input coordinates as polar coordinates of the form $(\meta{angle in degrees},\meta{radius})$. + +It is also possible to provide \verbpdfref{\addplot3}; in this case, the third coordinate will be ignored (although it can be used as color data using |point meta=z|). An example can be found below in Section~\ref{sec:polar:cart}. + + +\subsubsection{Using Radians instead of Degrees} +The initial configuration uses degrees for the angle ($x$ component of every input coordinate). \PGFPlots\ also supports to provide the angle in radians using the |data cs=polarrad| switch: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis}[title={Degrees and/or Radians}] + \addplot + coordinates {(0,1) (90,1) (180,1) (270,1)}; + \addlegendentry{Deg} + + \addplot+[data cs=polarrad] + coordinates {(0,1.5) (pi/2,1.5) + (pi,1.5) (pi*3/2,1.5)}; + \addlegendentry{Rad} + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} +The |data cs| key is described in all detail on page~\pageref{key:data:cs}; it tells \PGFPlots\ the coordinate system of input data. \PGFPlots\ will then take steps to automatically transform each coordinate into the required coordinate system (in our case, this is |data cs=polar|). + +\subsubsection{Mixing With Cartesian Coordinates} +\label{sec:polar:cart} +Similarly to the procedure described above, you can also provide Cartesian coordinates inside of a polar axis: simply tell \PGFPlots\ that it should automatically transform them to polar representation by means of |data cs=cart|: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis}[title=Cartesian Input] + \addplot+[data cs=cart] + coordinates {(1,0) (0,1) (-1,0) (0,-1)}; + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} +\noindent More details about the |data cs| key can be found on page~\pageref{key:data:cs}. + +This does also allow more involved visualization techniques which may operate on Cartesian coordinates. The following example uses \verbpdfref{\addplot3} to sample a function $f\colon \R^2 \to \R$, computes |contour| lines (with the help of |gnuplot|) and displays the result in a |polaraxis|: +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis} + \addplot3[contour gnuplot,domain=-3:3, + data cs=cart] + {exp(-x^2-y^2)}; + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} +\noindent What happens is that $z=\exp(-x^2-y^2)$ is sampled for $x,y \in [-3,3]$, then contour lines are computed on $(x,y,z)$, then the resulting triples $(x,y,z)$ are transformed to polar coordinates $(\alpha,r,z)$ (leaving $z$ intact). Finally, the $z$ coordinate is used as |point meta| to determine the color. + +Note that \verbpdfref{\addplot3} allows to process three--dimensional input types, but the result will always be two--dimensional (the $z$ coordinate is ignored for point placement in |polaraxis|). However, the $z$ coordinate can be used to determine point colors (using |point meta=z|). + +\subsubsection{Special Polar Plot Types} +\begin{plottype}{polar comb} + The |polar comb| plot handler is provided by \Tikz; it draws paths from the origin to the designated position and places |mark|s at the positions (similar to the |comb| plot handler). Since the paths always start at the origin, it is particularly suited for |polaraxis|: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis} + \addplot+[polar comb] + coordinates {(300,1) (20,0.3) (40,0.5) + (120,1) (200,0.4)}; + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} +\end{plottype} + +\subsubsection{Partial Polar Axes} +The |polar| library also supports partial axes. If you provide |xmin|/|xmax|, you can restrict the angles used for the axis: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis}[xmin=45,xmax=360] + \addplot coordinates {(0,1) (90,1) (180,1) (270,1)}; + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} + +Currently, the first angle must be lower than the second one. But you can employ the periodicity to get pies as follows: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis}[xmin=270,xmax=420] + \addplot coordinates {(0,1) (90,1) (180,1) (270,1)}; + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} +\noindent Similarly, an explicitly provided value for |ymin| allows to reduce the displayed range away from $0$: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis}[ymin=0.3] + \addplot coordinates {(0,1) (90,1) + (180,1) (270,1)}; + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} + +\noindent Modifying |xmin| and |xmax| manually can also be used to move the $y$ axis line (the line with |ytick| and |yticklabels|): +\begin{codeexample}[] +\begin{tikzpicture} + \begin{polaraxis}[xmin=45,xmax=405] + \addplot coordinates {(0,1) (90,1) (180,1) (270,1)}; + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} +} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.smithchart.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.smithchart.tex new file mode 100644 index 00000000000..40e536b8e0b --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.smithchart.tex @@ -0,0 +1,372 @@ +\subsection{Smith Charts} + +\begin{pgfplotslibrary}{smithchart} + A library to draw Smith Charts. + + A Smith Chart maps the complex half plane with positive real parts to the unit circle. The |smithchart| library allows \PGFPlots\ to visualize Smith Charts: it visualizes two--dimensional input coordinates $z \in \C $ of the form $z = x+ j y \in \C$ ($j$ being the imaginary unit, $j^2=-1$) with $x \ge 0$ using the map + \[ r\colon [0,\infty] \times [-\infty,\infty] \to \{ a+j b \;\vert\; a^2 + b^2 = 1 \}, \quad r(z) = \frac{z-1}{z+1} \] + using complex number division. The result is always in the unit circle. + + The main application for Smith Charts is in the area of electrical and electronics engineers specializing in radio frequency: to show the reflection coefficient $r(z)$ for normalised impedance $z$. It is beyond the scope of this manual to delve into the radio frequency techniques; for us, it is important to note that the |smithchart| library supports + \begin{itemize} + \item the data map $r(z)$ shown above, + \item an axis class which interprets $x$ as the real components and $y$ as the imaginary components, + \item a visualization of grid lines as arcs, + \item the possibility to stop grid lines to allow uniform spacing in Smith Charts, + \item a large set of the \PGFPlots\ axis fine tuning parameters, + \item input of already mapped coordinates $r(z)$ (i.e.\ Cartesian coordinates in the unit circle), + \item many of the \PGFPlots\ plot handlers. + \end{itemize} +\end{pgfplotslibrary} + +\subsubsection{Smith Chart Axes} + +\begin{environment}{{smithchart}\oarg{options}} + The |\begin{smithchart}| environment draws Smith Charts. It accepts the same \meta{options} as |\begin{axis}|. In fact, it is equivalent to |\begin{axis}[|\meta{options}|,axis type=smithchart]|. +\begin{codeexample}[] +\begin{tikzpicture} + \begin{smithchart}[title=Default Smith Chart] + \addplot coordinates {(0.5,0.2) (1,0.8) (2,2)}; + \end{smithchart} +\end{tikzpicture} +\end{codeexample} + The example above visualizes three data points using the initial configuration of Smith Charts; the data points are interpreted as complex numbers $z = x + j y$ and are mapped using $r(z)$. + +\end{environment} + +\subsubsection{Size Control} +A Smith Chart can be resized by providing either |width| or |height| as argument to the axis. If you provide both, the Chart is drawn as an ellipsis. + +The tick and grid positions for |smithchart| axes are realized by means of three manually tuned sets of grid lines: one for small-sized plots, one for medium-sized plots and one for huge plots. The actual parameters for |width| or |height| are considered to select one of the following sets: + +\begin{stylekey}{/pgfplots/few smithchart ticks}% + This produces the output of the example above -- it constitutes the initial configuration for Smith Chart which has a width of less than |14cm|. + + The |few smithchart ticks| style is defined by: +\begin{codeexample}[code only] +\pgfplotsset{ + few smithchart ticks/.style={ + default smithchart xtick/.style={ + xtick={0.2,0.5,1,2,5}, + }, + default smithchart ytick/.style={ + ytick={% + 0,% + 0.2, 0.5, 1, 2, 5,% + -0.2,-0.5,-1,-2,-5}, + }, + default smithchart xytick/.style={ + xgrid each nth passes y={2}, + ygrid each nth passes x={2}, + }, + }, +} +\end{codeexample} + \noindent Note that |few smithchart ticks| contains syntactical overhead to distinguish between ``default ticks'' and final tick positions: it does not assign |xtick| and |ytick| directly. Instead, it provides them as separate |default xtick style| arguments. The purpose of this distinction is to mark them as ``default'' arguments -- the underlying styles |smithchart/every default xtick| is used if and only if there is no |xtick| value given. + + In case you want to override this default, you can either + \begin{itemize} + \item copy--paste the definition above and adjust it or + \item omit all the |default smithchart xtick/.style| stuff and write |xtick=|\marg{your list} directly. + \end{itemize} + As mentioned, the only purpose of the |default smithchart xtick/.style| overhead is to distinguish between |\begin{smithchart}[xtick=|\marg{user defined}|]| and default arguments (see the documentation of |default smithchart xtick/.style| for more about this technical detail). + + + For fine tuning of the scaling decisions, see the |smith chart ticks by size| key. + +\end{stylekey} + +\begin{stylekey}{/pgfplots/many smithchart ticks}% + The |many smithchart ticks| style is used for every Smith Chart whose width exceeds |14cm| although it is less than |20cm|: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{smithchart}[ + title=Medium--Sized Smith Chart, + width=14cm] + \addplot coordinates {(0.5,0.2) (1,0.8) (2,2)}; + \end{smithchart} +\end{tikzpicture} +\end{codeexample} + + We see that |many smithchart ticks| has different placement and alignment options than |few smithchart ticks|: it uses sloped tick labels inside of the unit circle for the $y$ descriptions (imaginary axis). + + The initial configuration is realized by means of \emph{two} separate styles: one which defines only the tick positions (the \declareandlabel{many smithchart ticks*} style) and one which also changes placement and alignment options. The initial configuration can be changed individually (see the end of this section for examples). The initial configuration is: +\begin{codeexample}[code only] +\pgfplotsset{ + many smithchart ticks*/.style={ + default smithchart xtick/.style={ + xtick={ + 0.1,0.2,0.3,0.4,0.5,1,1.5,2,3,4,5,10,20% + }, + minor xtick={0.6,0.7,0.8,0.9,1.1,1.2,1.3,1.4,1.6,1.7,1.8,1.9, + 2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50}, + }, + default smithchart ytick/.style={ + ytick={% + 0,% + 0.1,0.2,...,1,1.5,2,3,4,5,10,20,% + -0.1,-0.2,...,-1,-1.5,-2,-3,-4,-5,-10,-20% + }, + minor ytick={% + 1.1,1.2,1.3,1.4,1.6,1.7,1.8,1.9,2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8, + 4.5,6,7,8,9,50,% + -1.1,-1.2,-1.3,-1.4,-1.6,-1.7,-1.8,-1.9,-2.2,-2.4,-2.6,-2.8, + -3.2,-3.4,-3.6,-3.8,-4.5,-6,-7,-8,-9,-50% + }, + }, + default smithchart xytick/.style={ + xgrid each nth passes y={1,2,4,5,10,20}, + ygrid each nth passes x={1,2,3,5,10:3,20:3}, + }, + }, + /pgfplots/many smithchart ticks/.style={ + many smithchart ticks*, + yticklabel in circle, + show origin=true, + }, +} +\end{codeexample} + \noindent See the documentation for |few smithchart ticks| for an explanation of the |default smithchart xtick/.style| overhead. +\end{stylekey} + +\begin{stylekey}{/pgfplots/dense smithchart ticks}% + The |dense smithchart ticks| style assigns the set of tick positions for every Smith Chart whose width is at least |20cm|: +\begin{codeexample}[] +\begin{tikzpicture}[scale=0.75] + \begin{smithchart}[ + title=Huge Smith Chart (rescaled), + width=20cm] + \addplot coordinates {(0.5,0.2) (1,0.8) (2,2)}; + \end{smithchart} +\end{tikzpicture} +\end{codeexample} + + \textbf{Attention:} This style might change in future versions! + + Similarly to |many smithchart ticks| (see above), the initial configuration is realized by means of \emph{two} separate styles: one which defines only the tick positions (the \declareandlabel{many smithchart ticks*} style) and one which also changes placement- and alignment options: +\begin{codeexample}[code only] +\pgfplotsset{ + dense smithchart ticks*/.style={ + default smithchart xtick/.style={ + xtick={ + 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.2,1.4,1.6,1.8,2,3,4,5,10,20% + }, + minor xtick={% + 0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.11,0.12,0.13,0.14,0.15,0.16,0.17, + 0.18,0.19,0.22,0.24,0.26,0.28,0.32,0.34,0.36,0.38,0.42,0.44,0.46,0.48,% + 0.52,% This is sub-optimal and will (hopefully) be improved in the future. + 0.55,0.65,0.75,0.85,0.95,% + %0.6,0.7,0.8,0.9,% + 1.1,1.3,1.5,1.7,1.9,% + 2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50}, + }, + default smithchart ytick/.style={ + ytick={% + 0,% + 0.1,0.2,...,1,1.2,1.4,1.6,1.8,2,3,4,5,10,20,% + -0.1,-0.2,...,-1,-1.2,-1.4,-1.6,-1.8,-2,-3,-4,-5,-10,-20% + }, + minor ytick={% + 0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.11,0.12,0.13,0.14,0.15,0.16,0.17, + 0.18,0.19,0.22,0.24,0.26,0.28,0.32,0.34,0.36,0.38,0.42,0.44,0.46,0.48,% + 0.55,0.65,0.75,0.85,0.95,% + 1.1,1.3,1.5,1.7,1.9,2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50,% + -0.01,-0.02,-0.03,-0.04,-0.05,-0.06,-0.07,-0.08,-0.09,-0.11,-0.12,-0.13,-0.14, + -0.15,-0.16,-0.17,-0.18,-0.19,-0.22,-0.24,-0.26,-0.28,-0.32,-0.34,-0.36,-0.38, + -0.42,-0.44,-0.46,-0.48,-0.55,-0.65,-0.75,-0.85,-0.95,% + -1.1,-1.3,-1.5,-1.7,-1.9,-2.2,-2.4,-2.6,-2.8,-3.2,-3.4,-3.6,-3.8,-4.5,-6,-7,-8, + -9,-50% + }, + }, + default smithchart xytick/.style={ + xgrid each nth passes y={0.2 if < 0.2001,0.5 if < 0.50001,1 if < 1.001,2,4,5,10,20}, + ygrid each nth passes x={0.2 if < 0.2001,0.52 if < 0.52001,1 if < 1.001,2,3,5,10:3,20:3}, + }, + }, + dense smithchart ticks/.style={ + yticklabel in circle, + dense smithchart ticks*, + show origin=true, + every major grid/.style={black!60}, + }, +} +\end{codeexample} + \noindent See the documentation for |few smithchart ticks| for an explanation of the |default smithchart xtick/.style| overhead. +\end{stylekey} + +\begin{pgfplotskeylist}{% + default smithchart xtick,% + default smithchart ytick,% + default smithchart xytick} + The |default smithchart xtick| style is installed if and only if you do not provide |xtick| manually. + + Similarly, the |default smithchart ytick| style is installed if and only if you do not provide |ytick| manually. + + Finally, the |default smithchart xytick| style is installed if and only if you provide neither |xtick| nor |ytick|. + + These styles are usually defined in |few smithchart ticks| and its variants, see above. +\end{pgfplotskeylist} + +\subsubsection{Working with Prepared Data} +\begin{pgfplotskey}{is smithchart cs=\mchoice{true,false} (initially false)} + Occasionally, you may already have input data transformed into unit--circle Cartesian coordinate $r(z) = (x,y)$. + + You can provide them to \PGFPlots\ with the |is smithchart cs| key: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{smithchart} + % smithchart_data.dat contains + % 0.78395 -0.40845 + % 0.78165 -0.41147 + % 0.77934 -0.41466 + % 0.77774 -0.41869 + % ... + \addplot[blue,is smithchart cs] + file {plotdata/smithchart_data.dat}; + \end{smithchart} +\end{tikzpicture} +\end{codeexample} + Using |is smithchart cs| tells \PGFPlots\ to skip the transformation $r(z)$. +\end{pgfplotskey} + +\subsubsection{Appearance Control and Styles} +\begin{pgfplotskey}{show origin=\mchoice{true,false} (initially false)} + Allows to place an extra description at the point $(0,0)$ to mark the origin. +\begin{codeexample}[] +\begin{tikzpicture} + \begin{smithchart}[show origin] + \end{smithchart} +\end{tikzpicture} +\end{codeexample} +\begin{pgfplotscodekey}{show origin code} + Allows to redefine the code to draw the origin marker. The initial configuration is +\begin{codeexample}[code only] +\pgfplotsset{ + show origin code/.code={% + \path[draw=black,fill=white] (0pt,0pt) circle (2.5pt); + \path[fill=black] (0pt,0pt) circle (0.5pt); + } +} +\end{codeexample} +\end{pgfplotscodekey} +\end{pgfplotskey} + +\begin{stylekey}{/pgfplots/yticklabel in circle} + This style draws Smith Chart tick labels for imaginary components (the |ytick| arguments) inside of the circle. + + It installs transformations to rotate and shift tick labels. See the |many smithchart ticks| style for an example. + + The initial configuration for this style is +\begin{codeexample}[code only] +\pgfplotsset{ + yticklabel in circle/.style={ + ytick align=inside, + yticklabel style={ + rotate=90, + sloped like y axis={% + execute for upside down={\tikzset{anchor=north east}}, + %allow upside down, + reset nontranslations=false}, + anchor=south west, + %font=\tiny, + } + } +} +\end{codeexample} +\end{stylekey} + +\begin{stylekey}{/pgfplots/every smithchart axis} + This style is installed for every Smith Chart. It is defined as +\begin{codeexample}[code only] +\pgfplotsset{ + every smithchart axis/.style={ + grid=both, + xmin=0, + scaled ticks=false, % never draw the \cdot 10^4 labels + major tick style={draw=black}, + xtick align=center, + ytick align=center, + }, +} +\end{codeexample} +\end{stylekey} + +\subsubsection{Controlling Arcs and Their Stop Points} +This section allows advanced control over Smith Chart arcs (grid lines). The two features |xgrid each nth passes y| and |xgrid stop at y| (and their counterparts for $y$) allow to draw only partial arcs in order to get a more uniform appearance. + +\begin{pgfplotskey}{xgrid each nth passes y=\marg{list of stop entries} (initially empty)} + This key constitutes the main idea to draw only partial arcs: you provide a couple of $y$ tick coordinates which constitute ``boundaries''. Then, only each (say) second $x$ grid line is allowed to pass these boundaries: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{smithchart}[ + xtick={0.2,0.5,1,2,5}, + ytick={ + 0, + 0.2, 0.5, 1, 2, 5, + -0.2,-0.5,-1,-2,-5}, + xgrid each nth passes y={1,2}, + ] + \end{smithchart} +\end{tikzpicture} +\end{codeexample} + The example overwrites the |default smithchart ticks| to define a new layout: now, every |ytick| uses the complete arc, but some of the grid lines for |xtick| stop at $y=1$ and, if they pass, they may stop at $y=2$. + + The argument \meta{list of stop entries} is a comma--separated list of entries. Each entry is, in the simplest case, a $y$ coordinate (it should be a coordinate which appears in the |ytick| list). This simplest case means ``only each second $x$ grid line may pass the grid line for this $y$''. The second syntax allows to provide a natural number, using \meta{y coord}|:|\meta{number}. This means to let only each \meta{number}'s $x$ grid line pass the designated $y$ grid line. The third syntax also allows to write |if < |\meta{x value}. It means the entry is considered only for $x$ grid lines which are less than \meta{x value}. To summarize: there are the three possible forms of entries + \begin{enumerate} + \item single $y$ coordinates, for example |xgrid each nth passes y={1,2}| or + \item the same as above, followed by an integer, for example |xgrid each nth passes y={1:3,2:2}| or + \item an additional restriction clause like |xgrid each nth passes y={0.2 if <0.3}|. + + In this case, the all $x$ grid lines which fulfill $x \le 0.3$ will be checked if they are allowed to pass $y=0.2$. All $x$ grid lines with $x > 0.3$ are not affected by the constraint. See the |dense smithchart ticks| style for an application example. + \end{enumerate} + + Note that |xgrid each nth passes y| always employs symmetry; you do not need to provide $y$ and $-y$ (if you want to, you may use the |xgrid stop at y| key to overrule the ``each nth''-strategy). + + + In order to check if a given |xtick| argument is the ``$n$th'' grid line, \PGFPlots\ collects all |xtick| and |minor xtick| arguments into \emph{one} large array and sorts it. Then, it uses the resulting sequence to assign the indices. Consequently, you can freely intermix minor and major ticks; it will still work. The only way to affect the counting is the |xgrid each nth passes y start| key, see below. +\end{pgfplotskey} + +\begin{pgfplotskey}{ygrid each nth passes x=\marg{list of stop entries} (initially empty)} + As you may already have guessed, this is the $y$ counterpart of |xgrid each nth passes y|. It restricts the arcs for $y$ grid lines by provided $x$ ticks: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{smithchart}[ + xtick={0.2,0.5,1,2,5}, + ytick={ + 0, + 0.2, 0.5, 1, 2, 5, + -0.2,-0.5,-1,-2,-5}, + ygrid each nth passes x={0.2,1:2}, + ] + \end{smithchart} +\end{tikzpicture} +\end{codeexample} + The syntax is exactly the same as explained for |xgrid each nth passes y|. The only difference is that the |if <| syntax uses absolute values $|y|$ (to maintain symmetry). +\end{pgfplotskey} + +Now, we know how to use |xgrid each nth passes y| and the corresponding |ygrid each nth passes x| \emph{separately}. Can we use both keys at the same time? Yes -- but it may happen that lines end in white space! \PGFPlots\ applies some logic to avoid arcs ending in white space by extending them to the next feasible stopping point. The result of mixing both of these keys is thus corrected automatically. + +\begin{pgfplotskeylist}{% + xgrid each nth passes y start=\marg{integer} (initially 0),% + ygrid each nth passes x start=\marg{integer} (initially 0)} + Allows to modify where the ``each $n$th'' counting starts. The argument can be considered as a shift. I consider this key to be more or less experimental -- in the hope it may be useful. Try it out. +\end{pgfplotskeylist} + +\begin{pgfplotskeylist}{% + xgrid stop at y=\marg{list} (initially empty), + ygrid stop at x=\marg{list} (initially empty)} + These keys allow to provide \emph{individual} stop points for explicitly chosen tick positions. These explicit stop points have higher precedence over the each nth features described above. + + The |ygrid stop at x| key accepts a comma--separated list of entries \meta{y coord}|:|\meta{x stop point}: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{smithchart}[ + ygrid stop at x={0.5:0.5,-0.2:0.2} + ] + \end{smithchart} +\end{tikzpicture} +\end{codeexample} + \noindent In this example, the $y=0.5$ arc stops at the $x=0.5$ arc whereas the $y=-0.2$ arc stops at $x=0.2$. + + The |ygrid stop at x| key allows unsymmetric layouts (different stop points for $y$ and $-y$). +\end{pgfplotskeylist} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.ternary.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.ternary.tex new file mode 100644 index 00000000000..1c03f0cb021 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.ternary.tex @@ -0,0 +1,548 @@ +\subsection{Ternary Diagrams} + +\begin{pgfplotslibrary}{ternary} + A library to draw ternary diagrams. + + A ternary diagram visualizes three--component systems such that the sum of them yields $100\%$. Ternary diagrams are triangular axes. +\end{pgfplotslibrary} + + +\subsubsection{Ternary Axis} +\begin{environment}{{ternaryaxis}\oarg{options}} + The axis environment for ternary axes. + + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis} + \addplot3 coordinates { + (0.81, 0.19, 0.00) + (0.76, 0.17, 0.07) + (0.66, 0.16, 0.16) + (0.76, 0.07, 0.17) + (0.81, 0.00, 0.19) + }; + + \addplot3 coordinates { + (0.85, 0.15, 0.00) + (0.82, 0.13, 0.05) + (0.73, 0.14, 0.13) + (0.82, 0.06, 0.13) + (0.84, 0.00, 0.16) + }; + \legend{$10$\textdegree, $20$\textdegree} +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} + + A |ternaryaxis| works with \emph{relative coordinates}: each data point consists of three components $x$, $y$, $z$. Their sum forms a compound entity which has $100\%$ (of whatever). In the standard configuration, we have $x,y,z \in [0,1]$. The unit interval is not necessary: you can as well choose \emph{absolute data ranges} $x \in [x_{\text{min}},x_{\text{max}}]$, $y \in [y_{\text{min}},y_{\text{max}}]$ and $z \in [z_{\text{min}},z_{\text{max}}]$. The important thing is that the relative values + \[ \tilde x := \frac{x-x_{\text{min}}}{x_{\text{max}} - x_{\text{min}}},\; + \tilde y := \frac{y-y_{\text{min}}}{y_{\text{max}} - y_{\text{min}}},\; + \tilde z := \frac{z-z_{\text{min}}}{z_{\text{max}} - z_{\text{min}}} \] + sum up to $100\%$, i.e.\ $\tilde x + \tilde y + \tilde z = 1$. Thus, \PGFPlots\ computes $\tilde x$, $\tilde y$ and $\tilde z$ and interpretes them as barycentric (triangular) coordinates. + + For this to work, it is \textbf{crucial to provide } |xmin|, |xmax|, |ymin|, |ymax| and |zmin|, |zmax| precisely! The initial configuration fixes them to the unit interval. + + What happens behind the scenes is that a data point $(x,y,z)$ is placed at $X,Y$ determined by + \[ + \begin{bmatrix} + X(x,y,z)\\ + Y(x,y,z) + \end{bmatrix} + = + \tilde x A + \tilde y B + \tilde z C + = + \begin{bmatrix} + \frac12 {\tilde x+2 \tilde z}\\ + \frac{\sqrt 3}{2} {\tilde x} + %\frac12 \frac{\tilde x+2 \tilde z}{\tilde x+\tilde y+\tilde z}\\ + %\frac{\sqrt 3}{2} \frac{\tilde x}{\tilde x+\tilde y+\tilde z} + \end{bmatrix} + \] + where $A=(\nicefrac12,\nicefrac{\sqrt3}{2})$ is top corner of the triangle, $B=(0,0)$ the lower left and $C=(1,0)$ the lower right one. The $\tilde y$ component is not really necessary due to the linear dependency $\tilde x+\tilde y+\tilde z=1$. + + The input coordinate $(100\%,0\%,0\%)$ is mapped to $A$, the input coordinate $(0\%,100\%,0\%)$ to $B$ and $(0\%,0\%,100\%)$ to $C$ (Acrobat Reader: click into the axis to verify it). + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[xlabel=A,ylabel=B,zlabel=C] + \addplot3 coordinates { + (0.81, 0.19, 0.00) + (0.76, 0.17, 0.07) + (0.66, 0.16, 0.16) + (0.76, 0.07, 0.17) + (0.81, 0.00, 0.19) + }; + + \addplot3 coordinates { + (0.85, 0.15, 0.00) + (0.82, 0.13, 0.05) + (0.73, 0.14, 0.13) + (0.82, 0.06, 0.13) + (0.84, 0.00, 0.16) + }; + + \node[pin=130:Deduced $z$,draw=black] at (axis cs:0.2,0.2) {}; + + \legend{$10$\textdegree, $20$\textdegree} +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} +\end{environment} + + A |ternaryaxis| can contain zero, one or more |\addplot3| commands, just as a usual |axis|. In case you provide only two--dimensional coordinates (for example using |\addplot| or |axis cs|), the third component is deduced automatically such that components sum to $100\%$. The |\addplot3| command can use any of the accepted input formats, for example using |coordinates|, |table|, |expression| or whatever -- but the input is always interpreted as barycentric coordinates (three components summing up to $100\%$). + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + title=Sloped labels and minor ticks, + xlabel=Water, + ylabel=D--Threonine, + zlabel=L--Threonine, + label style={sloped}, + minor tick num=2, +] + \addplot3 coordinates { + (0.82, 0.18, 0.00) + (0.75, 0.17, 0.08) + (0.77, 0.12, 0.11) + (0.75, 0.08, 0.17) + (0.81, 0.00, 0.19) + }; + \addplot3 coordinates { + (0.75, 0.25, 0.00) + (0.69, 0.25, 0.06) + (0.64, 0.24, 0.12) + (0.655, 0.23, 0.115) + (0.67, 0.17, 0.16) + (0.66, 0.12, 0.22) + (0.64, 0.11, 0.25) + (0.69, 0.05, 0.26) + (0.76, 0.01, 0.23) + }; +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + title=Sloped labels and minor grids, + xlabel=Water, + ylabel=D--Threonine, + zlabel=L--Threonine, + label style={sloped}, + minor tick num=2, + grid=both, +] + \addplot3 coordinates { + (0.82, 0.18, 0.00) + (0.75, 0.17, 0.08) + (0.77, 0.12, 0.11) + (0.75, 0.08, 0.17) + (0.81, 0.00, 0.19) + }; + \addplot3 coordinates { + (0.75, 0.25, 0.00) + (0.69, 0.25, 0.06) + (0.64, 0.24, 0.12) + (0.655, 0.23, 0.115) + (0.67, 0.17, 0.16) + (0.66, 0.12, 0.22) + (0.64, 0.11, 0.25) + (0.69, 0.05, 0.26) + (0.76, 0.01, 0.23) + }; +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} + +\noindent +A |ternaryaxis| supports (most of) the \PGFPlots\ axis interface, among them the |grid| option, the |xtick=|\marg{positions} way to provide ticks, including |extra x ticks| and its variants. Of course, it can also contain any of the |mark|, |color| and |cycle list| options of a normal axis. + +\noindent The following example is a (crude) copy of an example of + +\url{http://www.sv.vt.edu/classes/MSE2094_NoteBook/96ClassProj/experimental/ternary2.html} + +\noindent and uses |area style| to change |cycle list| and the legend appearance. + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + title=Want--be--Stainless Steel, + xlabel=Weight Percent Chromium, + ylabel=Weight Percent Iron, + zlabel=Weight Percent Nickel, + label style=sloped, + area style, +] + \addplot3 table { + A B C + 1 0 0 + 0.5 0.4 0.1 + 0.45 0.52 0.03 + 0.36 0.6 0.04 + 0.1 0.9 0 + }; + \addlegendentry{Cr} + + \addplot3 table { + A B C + 1 0 0 + 0.5 0.4 0.1 + 0.28 0.35 0.37 + 0.4 0 0.6 + }; + \addlegendentry{Cr+$\gamma$FeNi} + + \addplot3 table { + 0.4 0 0.6 + 0.28 0.35 0.37 + 0.25 0.6 0.15 + 0.1 0.9 0 + 0 1 0 + 0 0 1 + }; + \addlegendentry{$\gamma$FeNi} + + \addplot3 table { + 0.1 0.9 0 + 0.36 0.6 0.04 + 0.25 0.6 0.15 + }; + \addlegendentry{Cr+$\gamma$FeNi} + + \addplot3 table { + 0.5 0.4 0.1 + 0.45 0.52 0.03 + 0.36 0.6 0.04 + 0.25 0.6 0.15 + 0.28 0.35 0.37 + }; + \addlegendentry{$\sigma$+$\gamma$FeNi} + + \node[inner sep=0.5pt,circle,draw,fill=white,pin=-15:\footnotesize Stainless Steel] + at (axis cs:0.18,0.74,0.08) {}; + +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} + +Ternary plots can also use |contour prepared| to plot contour lines. +The following example is a (crude) copy of an example of + +\url{http://www.sv.vt.edu/classes/MSE2094_NoteBook/96ClassProj/experimental/ternary2.html}: + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + title=Want--be--Stainless Steel, + xlabel=Weight Percent Chromium, + ylabel=Weight Percent Iron, + zlabel=Weight Percent Nickel, + label style=sloped, +] + +% plotdata/pgfplotsternary.example1.dat: +% +% Chromium Iron Nickel Temperature +% 0.90 0.0 0.10 1700 +% 0.85 0.14 0.00 1700 +% +% 0.85 0.00 0.15 1600 +% 0.78 0.22 0.00 1600 +% 0.71 0.29 0.00 1600 +% .... +\addplot3[contour prepared={labels over line}, + point meta=\thisrow{Temperature}] + table[x=Chromium,y=Iron,z=Nickel] + {plotdata/pgfplotsternary.example1.dat}; +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} +\noindent \label{page:ternary:contour}The |contour prepared={labels over line}| installs the display style |contour/labels over line| and expects precomputed contour lines from the input stream. Here, the input stream is a table, consisting of the three relative components for Chromium, Iron and Nickel -- and the |point meta| is set to be the Temperature column. The |contour prepared| style uses the $(x,y,z)$ coordinate to plot the data point and the |point meta| to determine contour labels (the initial configuration of |contour prepared| is to use |point meta=z|). The output thus allows to use both barycentric coordinates (ternary components) \emph{and} contour labels. + +\begin{pgfplotskeylist}{% + ternary limits relative=\mchoice{true,false} (initially true), + ternary relative limits=\mchoice{true,false} (initially true)} + Allows to switch tick labels between relative numbers in the range $[0,100]$ or absolute numbers. + + The choice |ternary limits relative=true| accepts data in any input number range, for example $(x,y,z) \in [0,1]^3$, or $(x,y,z) \in [0,100]^3$ or in any absolute scala of the form $x_i \in [\underline x_i,\overline x_i]$ for $x_i \in \{x,y,z\}$ (remember that it is crucial to communicate these limits to \PGFPlots\ explicitly using |xmin|, |xmax|, |ymin|, |ymax| and |zmin|, |zmax| such that relative coordinates can be computed, see the description above for details). In every case, relative tick labels are drawn, i.e.\ tick labels in the range $[0,100]$. +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + ternary limits relative, + title={Data range $[0,1]$, limits relative}, + area style] +\addplot3 coordinates { + (0.2,0.8,0) + (0.31,0.4,0.29) + (0.34,0.2,0.46) + (0.4,0,0.6) + (1,0,0) +}; +\addplot3 coordinates { + (0.4,0,0.6) + (0.34,0.2,0.46) + (0.31,0.4,0.29) + (0.14,0.46,0.4) + (0,0.37,0.63) + (0,0,1) +}; +\node[fill=white] + at (axis cs:0.56,0.28,0.16) {$F 42$}; +\node[fill=white] + at (0.7,0.2) {$F 43$}; +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + xmax=500,ymin=1,ymax=2, + ternary limits relative, + title={Data range $x\in[0,500]$, + $y\in[1,2]$, $z\in[0,1]$ limits relative}, + area style] +\addplot3 coordinates { + (100,1.8,0) + (155,1.4,0.29) + (170,1.2,0.46) + (200,1,0.6) + (500,1,0) +}; +\addplot3 coordinates { + (200,1,0.6) + (170,1.2,0.46) + (155,1.4,0.29) + (70,1.46,0.4) + (0,1.37,0.63) + (0,1,1) +}; +\node[fill=white] + at (axis cs:280,1.28,0.16) {$F 42$}; +\node[fill=white] + at (0.7,0.2) {$F 43$}; +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} + + The choice |ternary limits relative=false| accepts the same data ranges, but it draws tick labels in the very same data ranges. +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + ternary limits relative=false, + xmax=500,ymin=1,ymax=2, + title={Data range $x\in[0,500]$, + $y\in[1,2]$, $z\in[0,1]$ limits absolute}, + footnotesize, % just for the sake of demonstration... + area style] +\addplot3 coordinates { + (100,1.8,0) + (155,1.4,0.29) + (170,1.2,0.46) + (200,1,0.6) + (500,1,0) +}; +\addplot3 coordinates { + (200,1,0.6) + (170,1.2,0.46) + (155,1.4,0.29) + (70,1.46,0.4) + (0,1.37,0.63) + (0,1,1) +}; +\node[fill=white] + at (axis cs:280,1.28,0.16) {$F 42$}; +\node[fill=white] + at (0.7,0.2) {$F 43$}; +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} +\end{pgfplotskeylist} + +\begin{coordinatesystem}{cartesian cs} + A coordinate system which allows Cartesian coordinates. The lower left point has coordinate $(0,0)$, the lower right point has $(1,0)$ and the upper point of the triangle is at $(\nicefrac12, \nicefrac{\sqrt3}{2})$. + + If you use the standard point syntax $(x,y)$ in path commands inside of the axis, you'll get Cartesian coordinates. If you want to use it for axis descriptions (like |xlabel|), you'll have to write |cartesian cs:0,0| explicitly (axis labels have the default coordinate system |axis description cs|). +\begin{codeexample}[] +\begin{tikzpicture} + \begin{ternaryaxis}[ + title=Cartesian Annotations, + clip=false] + + \addplot3 coordinates { + (0.1,0.5,0.4) + (0.2,0.5,0.3) + (0.3,0.6,0.1) + }; + + \node[fill=white,draw] at (0,0) {$y (0,0)$}; + \node[fill=white,draw] at (1,0) {$z (1,0)$}; + \node[fill=white,draw] at (0.5,{sqrt(3)/2}) + {$x (\frac12,\frac{\sqrt3}{2})$}; + + \draw[red,-stealth] (0.5,0) -- (0.5,0.7); + \end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} +\end{coordinatesystem} + +\begin{stylekey}{/pgfplots/every ternary axis} + A style which is installed at the beginning of every ternary axis. It is used to adjust some of the \PGFPlots\ keys to fit the triangular shape. + + The initial configuration is +\begin{codeexample}[code only] +\pgfplotsset{ + every ternary axis/.style={ + tick align=outside, + grid=major, + xticklabel style={anchor=west}, + every 3d description/.style={}, + every axis x label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel}, + every axis y label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel}, + every axis z label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel}, + every x tick scale label/.style= + {at={(xticklabel cs:0.95,5pt)},anchor=near xticklabel,inner sep=0pt}, + every y tick scale label/.style= + {at={(yticklabel cs:0.95,5pt)},anchor=near yticklabel,inner sep=0pt}, + every z tick scale label/.style= + {at={(yticklabel cs:0.95,5pt)},anchor=near yticklabel,inner sep=0pt}, + every axis title shift=15pt, + every axis legend/.style={ + cells={anchor=center}, + inner xsep=3pt,inner ysep=2pt,nodes={inner sep=2pt,text depth=0.15em}, + shape=rectangle, + fill=white, + draw=black, + at={(1.03,1.03)}, + anchor=north west, + }, + annot/point format 3d/.initial={(\%.2f, \%.2f, \%.2f)}, + }, +} +\end{codeexample} +\end{stylekey} + +\subsubsection{Tieline Plots} +\begin{plottype}{tieline=\marg{options with {\normalfont tieline/} prefix}} +\pgfkeys{/pdflinks/search key prefixes in/.add={/pgfplots/tieline/,}{}} + A plot handler for use in ternary diagrams which plots tie lines and binodal curves. + + On input, it accepts \emph{pairs} of coordinates, $A^{(i)}=(A_x^{(i)},A_y^{(i)},A_z^{(i)})$ and $B^{(i)}=(B_x^{(1)},B_y^{(2)},B_z^{(3)})$, for $i=1,\dotsc,N$ (i.e.\ it requires a total of six coordinates, perhaps plus additional color data). + + On output, it connects the pairs, i.e.\ for every fixed $i=1,\dotsc,N$, it connects $A^{(i)}$ --- $B^{(i)}$ (the so-called ``tie lines''). In addition, it also draws the binodal curve, which is made up by connecting all $A^{(i)}$ and then, in reverse ordering, all $B^{(i)}$: $A^{(1)}$ --- $ A^{(2)}$ --- $ \dotsb $ --- $ A^{(N)}$ --- $B^{(N)}$ --- $ B^{(N-1)}$ --- $ \dotsb $ --- $B^{(1)}$: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + xlabel=x (IPA), + ylabel=y (water), + zlabel=z (propene), + axis on top, +] +% plotdata/ternary_data.txt is a table of the form +%A_propene A_water A_IPA B_propene B_water B_IPA +% 0.0009 0.9990 0 0.9333 0.0667 0 +% 0.0009 0.9988 0.0002 0.9303 0.0665 0.0032 +% 0.0011 0.9975 0.0013 0.9135 0.0673 0.0191 +% 0.0013 0.9962 0.0024 0.8956 0.0693 0.0351 +%... + \addplot3[tieline,fill=blue!10] + table [x=A_IPA,y=A_water,z=A_propene] + {plotdata/ternary_data.txt}; +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} + + We see that each input line has six columns, and each six columns are taken into account (this is different from other plot handlers!). The six columns make up the three components of the $A$ and $B$ points, respectively. In the example above, we used explicit column names and provided $A_x$ using |x=A_IPA|, $A_y$ using |y=A_water| and $A_z$ using |z=A_propene|. Note that these keys are the common input method for |\addplot table|; they are nothing special (that means we could also use |x index| instead). The three columns for $B$ can be provided manually (see below), or deduced automatically: in our case, the value for $B_x$ has been found in the third column after |x=A_IPA| (which is |B_IPA|); the value for $B_y$ has been found in the third column after |y=A_water| and $B_z$ is made up from the third column after |z=A_propene|. In other words, the $B$ value is searched (by default) by adding $3$ to the column index of the respective $A$ coordinate. + + You do not need to provide \emph{any} column names; in this case, the first three columns make up $A$ (in the order of appearance) and the following three make up $B$. + + The only supported input type for |tieline| plots is table input. It is optimized to use |\addplot3 table| (as described above). To use the two--dimensional variant |\addplot table|, you need to tell \PGFPlots\ explicitly which columns make up $A_x,A_y,B_x,B_y$; the $z$ coordinates are deduced automatically such that the result sums to $100\%$. +\begin{pgfplotsxykeylist}{% + table/tie end \x=\marg{colname} (initially empty),% + table/tie end \x\space index=\marg{col index} (initially empty)} + These keys can be used to provide column names or column indices for $B_x$, $B_y$ and $B_z$, respectively. They can be provided like + + |\addplot3[tieline] table[tie end y=B_water] ...|. + + Note that the |tie end x| keys are \emph{only} available if the |tieline| option has been used before. + + The values for $A$ are provided with |table/x|, |table/x index| and its variants as for any other plot type. +\end{pgfplotsxykeylist} + + + The |tieline| plot handler accepts several options to customize the appearance. You can provide them as argument after |tieline|, using |tieline=|\marg{options}. In this case, the |tieline/| prefix can be omitted. The keys are described in the following: +\pgfkeys{/pgfmanual/gray key prefixes=/pgfplots/tieline} +\begin{pgfplotskey}{tieline/each nth tie=\marg{number} (initially empty)} + Allows to draw only each $n$th tie line, even though the binodal curve uses all provided coordinates: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + xlabel=x (IPA), + ylabel=y (water), + zlabel=z (propene), + axis on top, +] +% plotdata/ternary_data.txt is a table of the form +%A_propene A_water A_IPA B_propene B_water B_IPA +% 0.0009 0.9990 0 0.9333 0.0667 0 +% 0.0009 0.9988 0.0002 0.9303 0.0665 0.0032 +% 0.0011 0.9975 0.0013 0.9135 0.0673 0.0191 +% 0.0013 0.9962 0.0024 0.8956 0.0693 0.0351 +%... + \addplot3[ + tieline={each nth tie=5}, + fill=blue!10, + ] + table [x=A_IPA,y=A_water,z=A_propene] + {plotdata/ternary_data.txt}; +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} + + Note that plot |mark|s (if any) are drawn on every input position, use the |mark repeat| option to change that. +\end{pgfplotskey} + +\begin{pgfplotskey}{tieline/tieline style=\marg{options}} + Appends \meta{options} to the style \declareandlabel{tieline/every tieline}. + + Useful \meta{options} are, for example, other plot handlers to adjust the appearance of tie lines. Suppose that you have additional color data for every tie line (which might have been provided as further input column). In our case, we provide random color data using |point meta=rand|, and visualize the single tielines as with |contour prepared|: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{ternaryaxis}[ + xlabel=x (IPA), + ylabel=y (water), + zlabel=z (propene), + axis on top, +] +% plotdata/ternary_data.txt is a table of the form +%A_propene A_water A_IPA B_propene B_water B_IPA +% 0.0009 0.9990 0 0.9333 0.0667 0 +% 0.0009 0.9988 0.0002 0.9303 0.0665 0.0032 +% 0.0011 0.9975 0.0013 0.9135 0.0673 0.0191 +% 0.0013 0.9962 0.0024 0.8956 0.0693 0.0351 +%... + \addplot3[ + point meta=rand, + tieline={ + each nth tie=8, + tieline style={contour prepared} + }, + fill=blue!10, + ] + table [x=A_IPA,y=A_water,z=A_propene] + {plotdata/ternary_data.txt}; +\end{ternaryaxis} +\end{tikzpicture} +\end{codeexample} + \noindent The effect here is that contour labels and line colors are chosen for every tie line, where the actual color is determined using |point meta| and |colormap|. Other choices for plot handlers in |tieline style| might be the |mesh|. +\end{pgfplotskey} + +\begin{pgfplotskey}{tieline/curve style=\marg{options}} + Appends \meta{options} to the style \declareandlabel{tieline/every curve}. + + The |curve style| allows to customize the plot handler for the curve. A possible choice might be |curve style={smooth}| or a separate fill/draw color. +\end{pgfplotskey} +\end{plottype} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.tex index fb3692ea979..6e61876d0c9 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.tex @@ -2,221 +2,15 @@ This section describes some libraries which come with \PGFPlots, but they are more or less special and need to be activated separately. \pgfmanualpdflabel{\textbackslash usepgfplotslibrary}{} -\subsection{Dates as Input Coordinates} -\begin{pgfplotslibrary}{dateplot} - A library which allows to use dates like |2008-01-01| or dates with time like |2008-01-01 11:35| as input coordinates in plots. The library converts dates to numbers and tick labels will be pretty-printed dates (or times). - This library is documented in section~\ref{pgfplots:sec:symbolic:coords} on page~\pageref{pgfplots:sec:date:coords}. -\end{pgfplotslibrary} - -\subsection{Clickable Plots} -\begin{pgfplotslibrary}{clickable} - A library which generates small popups whenever one clicks into a plot. The popup displays the coordinate under the mouse pointer. Furthermore, the library allows to display slopes if one holds the mouse pressed and drags it to another point in the plot. - - - It is completely sufficient to write -\begin{codeexample}[code only] -\usepgfplotslibrary{clickable} -\end{codeexample} - \noindent in the document preamble. This will automatically prepare every plot. - - The library works with Acrobat Javascript and \pdf\ forms: every plot becomes a push--button. - - \includegraphics[height=6cm]{figures/pgfplotsclickable-fig1.png} - \rlap{\includegraphics[height=6cm]{figures/pgfplotsclickable-fig2.png}}\hfill - - \nobreak - These screen shots show the result of clicking into the axis range (left column) and of dragging from one point to another (right column). The second case shows the result of drag- and drop: it displays start- and end points and the equation for the line segment between between the first point of the drag- and drop and the second point where the mouse has been released. The line segment is - \[ l(x; x_0,y_0,x_1,y_1) = m \cdot x + n \] - where $m = (y_1-y_0) / (x_1-x_0)$ is the slope and $n$ the offset chosen such that $l(x_0;\dotsc) = y_0$. For logarithmic plots, logarithms will be applied before computing slopes. - - \noindent - \hbox to \linewidth{% - \hspace{-0.5cm}% - \begin{tikzpicture} - \node at (8cm,0cm) {\includegraphics[height=6cm]{figures/pgfplotsclickable-fig4.png}}; - \node at (0cm,0cm) {\includegraphics[height=6cm]{figures/pgfplotsclickable-fig3.png}}; - \end{tikzpicture}\hss}% - - \nobreak - These screen shots show the result of drag- and drop for \emph{logarithmic} axes: the end points show, again, the coordinates (without logs) and the form field in the middle shows the slope and offset of the linear equation in log coordinates. - - The log basis for any logarithmic axes is usually~$10$, but it respects the current setting of |log basis x| and |log basis y|. The applied log will always use the same logarithm which is also used for the axis descriptions (this is not necessarily the same as used by \PGFPlotstable!). - - This document has been produced with the |clickable| library, so it is possible to load it into Acrobat Reader and simply click into a plot. - - \expandafter\ifx\csname pgfplotsclickabledisabled\endcsname\relax - \else - \paragraph{Attention:} For this document, the |clickable| library has been deactivated. You may find a different version on \url{http://sourceforge.net/projects/pgfplots}. - \fi - - A click places an annotation at the coordinate under the mouse pointer, a snap--to--nearest feature is not available (yet?). - - \paragraph{Requirements:} - \begin{itemize} - \item The library relies on the \LaTeX\ packages |insdljs| (``Insert document level Javascript'') and |eforms| which are both part of the freely available |AcroTeX| education bundle~\cite{acrotex}\footnote{These packages rely on \LaTeX, so the library is only available for \LaTeX, not for plain \TeX\ or Con\TeX t.}. The |insdljs| package creates a temporary file with extension |.djs|. - - \item At the time of this writing, only Adobe Acrobat Reader interpretes Javascript and Forms properly. The library doesn't have any effect if the resulting document is used in other viewers (as far as I know). - - \end{itemize} - Note that although this library has been written for \PGFPlots, it can be used independently of an \PGFPlots\ environment. - - \paragraph{Compatibility issues:} - There a several restrictions when using this library. Most of them will vanish in future versions -- but up to now, I can't do magic. - \begin{itemize} - \item The library does not yet support rotated axes. Use |clickable=false| for those axes. - \item The library works only with |pdflatex|, |dvips| or |dvipdfm| are not supported\footnote{In fact, they should be. I don't really know why they don't $\hdots$ any hint is welcome.}. - - \item Up to now, it is \emph{not} possible to use this library together with the |external| library and other image externalization methods of section~\ref{sec:pgfplots:importexport}. - - To be more precise, you can (with two extra preamble lines, see below) get correctly annotated, exported \pdf\ documents, but the |\includegraphics| command does not import the dynamic features. - - In case you decide to use this work--around, you need to insert -\begin{codeexample}[code only] -% \maxdeadcycles=10000 % in case you get the error `Output loop---<N> consecutive dead cycles.' -\usepackage[pdftex]{eforms} -\end{codeexample} - \noindent \emph{before} loading \pgfname, \Tikz\ or \PGFPlots. The |\maxdeadcycles| appears to be necessary for large documents, try it out. - - As long as you are working on a draft version of your document, you might want to use -\begin{codeexample}[code only] -\pgfkeys{/pgf/images/include external/.code={\href{file:#1}{\pgfimage{#1}}} -\end{codeexample} - in your preamble. This will generate hyper links around the graphics files which link to the exported figures. Clicking on the hyper links opens the exported figure which, in turn, has been generated with the |clickable| library and allows dynamic features\footnote{This special treatment needs the external files in the same base directory as the main document, so this approach is most certainly \emph{not} suitable for a final document.}. - - - \item The library automatically calls |\begin{Form}| at |\begin{document}| and |\end{Form}| at the end of the document. This environment of |hyperref| is necessary for dynamic user interaction and should be kept in mind if the document contains other form elements. - \end{itemize} - - \paragraph{Acknowledgements:} - \begin{itemize} - \item I have used a javascript |sprintf| implementation of Kevin van Zonneveld~\cite{phptojs} (the javascript API has only a limited set of conversions). - \end{itemize} -\end{pgfplotslibrary} - -It is possible to customize |pgfplots.clickable| with several options. - -\begin{pgfplotskey}{clickable=\mchoice{true,false} (initially true)} - Allows to disable the library for single plots. -\end{pgfplotskey} - -\begin{pgfplotskey}{annot/js fillColor=\marg{javascript color} (initially ["RGB",1,1,.855])} - Sets the background (fill) color of the short popup annotations. - - Possible choices are |transparent|, gray, RGB or CMYK color specified as four--element--arrays of the form - |["RGB", |\meta{red}|,|\meta{green}|,|\meta{blue}|]|. Each color component is between $0$ and $1$. - - Again: this option is for Javascript. It is \emph{not} possible to use colors as in \pgfname. -\end{pgfplotskey} - -\begin{pgfplotskey}{annot/point format=\marg{sprintf-format} (initially {(\%.1f,\%.1f)})} - Allows to provide an |sprintf| format string which is used to fill the annotations with text. - The first argument to |sprintf| is the $x$-coordinate and the second argument is the $y$-coordinate. - - The |every semilogx axis|, |every semilogy axis| and |every loglog axis| styles have been updated to -\begin{codeexample}[code only] -\pgfplotsset{ - every semilogy axis/.append style={/pgfplots/annot/point format={(\%.1f,\%.1e)}}, - every semilogx axis/.append style={/pgfplots/annot/point format={(\%.1e,\%.1f)}}, - every loglog axis/.append style={/pgfplots/annot/point format={(\%.1e,\%.1e)}} -} -\end{codeexample} - \noindent such that every logarithmic coordinate is displayed in scientific format. -\end{pgfplotskey} - -\begin{pgfplotskey}{annot/slope format=\marg{sprintf-format} (initially \%.1f*x \%+.1f)} - Allows to provide an |sprintf| format string which is used to fill the slope--annotation with text. - The first argument is the slope and the second the line offset. -\end{pgfplotskey} - -\begin{pgfplotskey}{annot/printable=\mchoice{true,false} (initially false)} - Allows to configure whether the small annotations will be printed. Otherwise, they are only available on screen. -\end{pgfplotskey} - -\begin{pgfplotskey}{annot/font=\marg{javascript font name} (initially font.Times)} - Allows to choose a javascript font for the annotations. Possible choices are limited to what javascript accepts (which is \emph{not} the same as \LaTeX). The default fonts and its names are shown below. - - \begin{center} - \begin{tabular}{ll} - \toprule - Font Name & Name in Javascript\\ - \midrule - Times-Roman & font.Times\\ - Times-Bold & font.TimesB\\ - Times-Italic & font.TimesI\\ - Times-BoldItalic & font.TimesBI\\ - Helvetica & font.Helv\\ - Helvetica-Bold & font.HelvB\\ - Helvetica-Oblique & font.HelvI\\ - Helvetica-BoldOblique & font.HelvBI\\ - Courier & font.Cour\\ - Courier-Bold & font.CourB\\ - Courier-Oblique & font.CourI\\ - Courier-BoldOblique & font.CourBI\\ - Symbol & font.Symbol\\ - ZapfDingbats & font.ZapfD\\ - \bottomrule - \end{tabular} - \end{center} -\end{pgfplotskey} - -\begin{pgfplotskey}{annot/textSize=\marg{Size in Point} (initially 11)} - Sets the text size of annotations in points. -\end{pgfplotskey} - -\subsubsection{Using the Clickable Library in Other Contexts} -This library provides essentially one command, |\pgfplotsclickablecreate| which creates a clickable area of predefined size, combined with javascript interaction code. It can be used independently of \PGFPlots. - -\begin{command}{\pgfplotsclickablecreate\oarg{required key-value-options}} - Creates an area which is clickable. A click produces a popup which - contains information about the point under the cursor. - - The complete (!) context needs to be provided using key-value-pairs, either set before - calling this method of inside of \oarg{required key-value-options}. - - This command actually creates an AcroForm which invokes javascript - whenever it is clicked. A javascript Object is created which - represents the context (axis limits and options). This javascript - object is available at runtime. - - This method is public and it is \emph{not} restricted to \PGFPlots. - The \PGFPlots\ hook simply initialises the required key-value-pairs. - - This method does not draw anything. It initialises only a - clickable area and javascript code. - - The required key-value-pairs are documented below. - - \paragraph{Attention:} Complete key-value validation is \emph{not} performed here. It - can happen that invalid options will produce javascript bugs when - opened with Acrobat Reader. Use the javascript console to find them. -\end{command} - -\noindent All options described in the following are only interesting for users who intend to use this library without \PGFPlots. - -\begin{pgfplotskey}{annot/width=\marg{dimension} (initially -)} - This required key communicates the area's width to |\pgfplotsclickablecreate|. It must be a \TeX\ dimension like |5cm|. -\end{pgfplotskey} -\begin{pgfplotskey}{annot/height=\marg{dimension} (initially -)} - This required key communicates the area's height to |\pgfplotsclickablecreate|. It must be a \TeX\ dimension like |5cm|. -\end{pgfplotskey} -\begin{pgfplotskey}{annot/jsname=\marg{string} (initially -)} - This required key communicates a unique identifier to |\pgfplotsclickablecreate|. This identifier is used to identify the object in javascript, so there can't be more than one of them. If it is empty, a default identifier will be created. -\end{pgfplotskey} - -\begin{pgfplotskeylist}{annot/xmin=\marg{number},annot/xmax=\marg{number},annot/ymin=\marg{number},annot/ymax=\marg{number} (initially empty)} - These required keys communicate the axis limits to |\pgfplotsclickablecreate|. They should be set to numbers which can be assigned to a javascript floating point number (standard IEEE double precision). -\end{pgfplotskeylist} - -\input pgfplots.libs.units.tex +\input pgfplots.libs.clickable.tex +\input pgfplots.libs.colormaps.tex +\input pgfplots.libs.dateplot.tex +\input pgfplots.libs.external.tex \input pgfplots.libs.groupplot.tex +\input pgfplots.libs.patchplots.tex +\input pgfplots.libs.polar.tex +\input pgfplots.libs.smithchart.tex +\input pgfplots.libs.ternary.tex +\input pgfplots.libs.units.tex -\subsection{Image Externalization} -\begin{pgfplotslibrary}{external} - The |external| library offers a convenient method to export every single |tikzpicture| into a separate~|.pdf| (or~|.eps|). Later runs of \LaTeX\ will simply include these graphics, thereby reducing typesetting time considerably. - - This library is documented in more detail in section~\ref{sec:pgfplots:export} ``Export to {\pdf/\eps}''. - - - The |external| library has been written by Christian Feuers\"anger (author of \PGFPlots). It has been contributed to \Tikz\ as general purpose library, so the reference documentation along with all tweaks can be found in~\cite[Section ``Externalization Library'']{tikz}. The command |\usepgfplotslibrary{external}| is actually just a wrapper which loads |\usetikzlibrary{external}| or, if this library does not yet exist because the installed \pgfname\ has at most version $2.00$, it will load a copy which is shipped with \PGFPlots. -\end{pgfplotslibrary} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.units.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.units.tex index 7d217a22b3a..a1fb65fa6bc 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.units.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.libs.units.tex @@ -5,7 +5,7 @@ \begin{pgfplotslibrary}{units} A library which allows to use automatic typesetting of units in labels. The library utilizes different keys to typeset the final output in a consistent way. - Calling one of the commands automatically sets the key `|use units=true|' so one has not to worry of this. + Calling one of the commands automatically sets the key `|use units=true|' so one does not have to worry about this. \end{pgfplotslibrary} \PGFPlots\ has the capability of supporting units. This provides quick customization of the plot as well as the addition of units in labels. @@ -18,20 +18,20 @@ First the key which enables you to switch on/off the unit system. determine whether the unit library should be used in plots. \end{pgfplotskey} \begin{pgfplotsxykey}{\x\ unit=\marg{unit} (initially empty)} - These keys sets the unit in their respective axis. In SI units you could for instance set the |x unit| in Newton as |x unit=N|. + These keys set the unit in their respective axis. In SI units you could for instance set the |x unit| in Newton as |x unit=N|. \end{pgfplotsxykey} \begin{pgfplotsxykey}{\x\ unit prefix=\marg{prefix} (initially empty)} - These keys sets the prefix of the unit. If a value on the |y axis| is in kilo you would set the |y unit prefix=k|. Prefix will be typeset in front of the unit. + These keys set the prefix of the unit. If a value on the |y axis| is in kilo you would set the |y unit prefix=k|. Prefix will be typeset in front of the unit. This command will not intervene with the basis of the axis system. I.e. a prefix as just mentioned will not divide every |y axis| number by 1000. - In order to do this see key \meta{axis}| SI prefix|, see Section \ref{sec:SI:prefix}. + In order to do this, see key \meta{axis}| SI prefix|, see Section \ref{sec:SI:prefix}. Notice that if the \meta{axis}| unit| isn't set the entire unit will not be typeset. - \paragraph{Remarks:} Remember that all typesetting of labels occur within a \$\$ environment. Therefore one can use \textbackslash|frac| + \paragraph{Remarks:} Remember that all typesetting of labels occur within math mode (i.e.\ within \$\$ delimiters). Therefore one can use \textbackslash|frac| and other mathematics commands. \end{pgfplotsxykey} -Often one just have to utilize the above mentioned keys. It is the basis of the unit typesetting system provided by \PGFPlots. +Often one just has to utilize the above mentioned keys. It is the basis of the unit typesetting system provided by \PGFPlots. % \usepgfplotslibrary{units} \begin{codeexample}[] \begin{tikzpicture} @@ -51,7 +51,7 @@ Often one just have to utilize the above mentioned keys. It is the basis of the \end{tikzpicture} \end{codeexample} -Below is an example of what would be yielded according to the styles +Below is an example of what would be obtained according to the styles \begin{codeexample}[code only] % x label becomes ``Temperature [T]'', y label becomes ``Nothing'' \pgfplotsset{use units,x unit=T,xlabel=Temperature,ylabel=Nothing} @@ -64,7 +64,7 @@ typesetting of the labels should be done. For typesetting the units one can also change the appearance. For instance one might not like the square brackets which surround the unit. These can luckily be changed using the below keys. \begin{pgfplotskeylist}{unit marking pre=\marg{pre} (initially \textbackslash left[),unit marking post=\marg{post} (initially \textbackslash right]),unit markings=\mchoice{parenthesis,square brackets,slash space} (initially square brackets)} - These keys sets the surroundings of the unit. The initial yields $\left[\frac{1}{2}\right]$ such that you can typeset fractions in units. Be aware that + These keys set the surroundings of the unit. The initial yields $\left[\frac{1}{2}\right]$ such that you can typeset fractions in units. Be aware that you can only obtain large fractions if you use \textbackslash|dfrac|. These can easily be set using the option key |unit markings| where the options typesets as the following \begin{codeexample}[code only] \pgfplotsset{x unit=T,unit markings=parenthesis} % x unit becomes `` \left(T\right)'' @@ -78,7 +78,7 @@ luckily be changed using the below keys. One will typically typeset the unit with a specific font. To do so an option of changing the typesetting command is supplied. \begin{pgfplotscodetwokey}{unit code}%\textbackslash mathrm\{\})} - This can be utilized to great extend. As a default the typesetting of the units is as |\mathrm{|\meta{unit prefix}\meta{unit}|}|. But if one for instance + This can be utilized to great extent. By default, units are typeset as |\mathrm{|\meta{unit prefix}\meta{unit}|}|. But if one for instance wishes to utilize the package |siunitx|, which has great capabilities in typesetting both units, numbers and angles, one can just set the key as \begin{codeexample}[code only] \pgfplotsset{unit code/.code 2 args={\si{#1#2}}} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.makefile b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.makefile index 5d37416311e..54ecfb8bdf2 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.makefile +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.makefile @@ -11,147 +11,192 @@ include $(ALL_FIGURE_NAMES:%=%.dep) %.dep: touch $@ # will be filled later. -figures/expensiveexamplepgfplots-figure0.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure0" "pgfplots" +figures/expensiveexamplereference_addplot_0.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_addplot_0" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure1.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure1" "pgfplots" +figures/expensiveexamplereference_addplot_1.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_addplot_1" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure2.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure2" "pgfplots" +figures/expensiveexamplereference_addplot_2.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_addplot_2" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure3.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure3" "pgfplots" +figures/expensiveexamplereference_twodim_0.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_twodim_0" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure4.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure4" "pgfplots" +figures/expensiveexamplereference_twodim_1.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_twodim_1" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure5.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure5" "pgfplots" +figures/expensiveexamplereference_twodim_2.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_twodim_2" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure6.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure6" "pgfplots" +figures/expensiveexamplereference_twodim_3.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_twodim_3" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure7.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure7" "pgfplots" +figures/expensiveexamplereference_twodim_4.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_twodim_4" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure8.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure8" "pgfplots" +figures/expensiveexamplereference_threedim_0.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_0" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure9.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure9" "pgfplots" +figures/expensiveexamplereference_threedim_1.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_1" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure10.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure10" "pgfplots" +figures/expensiveexamplereference_threedim_2.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_2" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure11.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure11" "pgfplots" +figures/expensiveexamplereference_threedim_3.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_3" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure12.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure12" "pgfplots" +figures/expensiveexamplereference_threedim_4.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_4" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure13.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure13" "pgfplots" +figures/expensiveexamplereference_threedim_5.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_5" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure14.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure14" "pgfplots" +figures/expensiveexamplereference_threedim_6.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_6" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure15.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure15" "pgfplots" +figures/expensiveexamplereference_threedim_7.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_7" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure16.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure16" "pgfplots" +figures/expensiveexamplereference_threedim_8.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_8" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure17.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure17" "pgfplots" +figures/expensiveexamplereference_threedim_9.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_9" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure18.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure18" "pgfplots" +figures/expensiveexamplereference_threedim_10.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_10" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure19.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure19" "pgfplots" +figures/expensiveexamplereference_threedim_11.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_11" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure20.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure20" "pgfplots" +figures/expensiveexamplereference_threedim_12.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_12" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure21.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure21" "pgfplots" +figures/expensiveexamplereference_threedim_13.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_13" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure22.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure22" "pgfplots" +figures/expensiveexamplereference_threedim_14.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_14" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure23.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure23" "pgfplots" +figures/expensiveexamplereference_threedim_15.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_15" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure24.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure24" "pgfplots" +figures/expensiveexamplereference_threedim_16.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_16" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure25.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure25" "pgfplots" +figures/expensiveexamplereference_threedim_17.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_17" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure26.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure26" "pgfplots" +figures/expensiveexamplereference_threedim_18.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_18" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure27.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure27" "pgfplots" +figures/expensiveexamplereference_threedim_19.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_19" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure28.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure28" "pgfplots" +figures/expensiveexamplereference_threedim_20.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_20" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure29.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure29" "pgfplots" +figures/expensiveexamplereference_threedim_21.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_21" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure30.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure30" "pgfplots" +figures/expensiveexamplereference_threedim_22.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_22" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure31.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure31" "pgfplots" +figures/expensiveexamplereference_threedim_23.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_23" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure32.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure32" "pgfplots" +figures/expensiveexamplereference_threedim_24.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_24" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure33.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure33" "pgfplots" +figures/expensiveexamplereference_threedim_contour_0.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_contour_0" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure34.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure34" "pgfplots" +figures/expensiveexamplereference_threedim_contour_1.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_contour_1" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure35.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure35" "pgfplots" +figures/expensiveexamplereference_threedim_contour_2.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_contour_2" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure36.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure36" "pgfplots" +figures/expensiveexamplereference_threedim_contour_3.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_contour_3" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure37.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure37" "pgfplots" +figures/expensiveexamplereference_threedim_25.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_25" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure38.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure38" "pgfplots" +figures/expensiveexamplereference_threedim_26.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_26" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure39.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure39" "pgfplots" +figures/expensiveexamplereference_threedim_27.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_27" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure40.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure40" "pgfplots" +figures/expensiveexamplereference_threedim_28.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_28" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure41.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure41" "pgfplots" +figures/expensiveexamplereference_threedim_29.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_29" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure42.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure42" "pgfplots" +figures/expensiveexamplereference_threedim_30.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_30" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure43.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure43" "pgfplots" +figures/expensiveexamplereference_threedim_31.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedim_31" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure44.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure44" "pgfplots" +figures/expensiveexamplereference_0.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_0" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure45.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure45" "pgfplots" +figures/expensiveexamplereference_1.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_1" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure46.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure46" "pgfplots" +figures/expensiveexamplereference_2.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_2" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" -figures/expensiveexamplepgfplots-figure47.pdf: - pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepgfplots-figure47" "pgfplots" +figures/expensiveexamplereference_3.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_3" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_threedimaxis_0.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedimaxis_0" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_threedimaxis_1.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedimaxis_1" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_threedimaxis_2.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedimaxis_2" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_threedimaxis_3.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedimaxis_3" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_threedimaxis_4.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedimaxis_4" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_threedimaxis_5.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedimaxis_5" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_threedimaxis_6.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedimaxis_6" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_threedimaxis_7.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedimaxis_7" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_threedimaxis_8.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_threedimaxis_8" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_4.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_4" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplereference_5.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplereference_5" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplepolar_0.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplepolar_0" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplememspeed_0.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplememspeed_0" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplememspeed_1.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplememspeed_1" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" + +figures/expensiveexamplememspeed_2.pdf: + pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "figures/expensiveexamplememspeed_2" "\def\tikzexternalrealjob{pgfplots}\input{pgfplots}" diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.pdf b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.pdf Binary files differindex 62fc07cd275..5250a46b483 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.pdf +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.preamble.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.preamble.tex index f062f124be0..7204490b1e2 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.preamble.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.preamble.tex @@ -44,7 +44,7 @@ pdfborder=0 0 0, % PDF link-darstellung, falls colorlinks=false. 0 0 0: nix. 0 0 1: default. %plainpages=false, % Das ist notwendig, wenn die Seitenzahlen z.T. in Arabischen und z.T. in römischen Ziffern gemacht werden. pdftitle=Package PGFPLOTS manual, - pdfauthor=Christian Feuersänger, + pdfauthor=Dr. Christian Feuersänger, %pdfsubject=, pdfkeywords={pgfplots pgf tikz tex latex}, } @@ -78,6 +78,7 @@ } +\newcommand{\C}{\mathbb{C}} \newcommand{\R}{\mathbb{R}} \newcommand{\N}{\mathbb{N}} \newcommand{\Z}{\mathbb{Z}} @@ -88,6 +89,12 @@ \usepackage{textcomp} \usepackage{booktabs} +\IfFileExists{ocg.sty}{% + \usepackage{ocg}% +}{% + \usepackage{pgfplots_ocg_copy}% +} + \usepackage{calc} \usepackage[formats]{listings} %\usepackage{courier} % don't use it - the '^' character can't be copy-pasted in courier @@ -142,7 +149,7 @@ \graphicspath{{figures/}} -\def\preambleconfig{width=7cm,compat=1.3} +\def\preambleconfig{width=7cm,compat=1.4} \expandafter\pgfplotsset\expandafter{\preambleconfig} @@ -176,7 +183,10 @@ \pgfqkeys{/codeexample}{% every codeexample/.append style={ width=8cm, - /pgfplots/legend style={fill=graphicbackground} + /pgfplots/legend style={fill=graphicbackground}, + /pgfplots/contour/every contour label/.append style={ + every node/.append style={fill=graphicbackground} + }, }, tabsize=4, } @@ -212,7 +222,6 @@ \tikzset{prefix=gnuplot/pgfplots_} % prefix for 'plot function' \author{% - Christian Feuers\"anger\footnote{\url{http://wissrech.ins.uni-bonn.de/people/feuersaenger}}\\% - Institut f\"ur Numerische Simulation\\ - Universit\"at Bonn, Germany} + Dr.\ Christian Feuers\"anger\\ + {\footnotesize\texttt{ludewich@users.sourceforge.net}}}% diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.2dplots.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.2dplots.tex index 1eccd01e5c9..442fd0f6076 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.2dplots.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.2dplots.tex @@ -1,6 +1,8 @@ \subsection{Two Dimensional Plot Types} -\PGFPlots\ supports several two-dimensional line-plots like piecewise linear line plots, piecewise constant plots, smoothed plots, bar plots and comb plots. Most of them use the \PGF\ plot handler library directly, see \cite[section 18.8]{tikz}. +{ +\tikzset{external/figure name/.add={}{twodim_}}% +\PGFPlots\ supports several two-dimensional line plots like piecewise linear line plots, piecewise constant plots, smoothed plots, bar plots and comb plots. Most of them use the \PGF\ plot handler library directly, see \cite[section 18.8]{tikz}. Plot types are part of the plot style, so they are set with options. Most of the basic 2d plot types are part of \Tikz, see \cite[section 18.8]{tikz}, and are probably known to users of \Tikz. They are documented here as well. @@ -72,7 +74,7 @@ An alias for `|const plot|'. \end{plottype} \begin{plottype}{const plot mark right} - A variant which places marks on the right of each line segment, causing plots to be left-sided continuous at coordinates. + A variant which places marks on the right of each line segment, causing plots to be left-sided continuous at the given coordinates. \begin{codeexample}[] \begin{tikzpicture} \begin{axis} @@ -142,13 +144,48 @@ coordinates \end{codeexample} Here |xbar| yields |/pgfplots/xbar| because it is an argument to the axis, not to a single plot. - Besides line-, fill- and colorstyles, bars can be configured with |bar width| and |bar shift|, see below. + For bar plots, it is quite common to provide textual coordinates or even descriptive nodes near the bars. + This can be realized using the |symbolix y coords| and |nodes near coords| keys, respectively: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[ + xbar, xmin=0, + width=12cm, height=3.5cm, enlarge y limits=0.5, + xlabel={\#participants}, + symbolic y coords={no,yes}, + ytick=data, + nodes near coords, nodes near coords align={horizontal}, + ] + \addplot coordinates {(3,no) (7,yes)}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + The |symbolic y coords| defines a dictionary of accepted coordinates which are then expected in $y$ coordinates and the |nodes near coords| key displays values as extra nodes (see their reference documentations for details). The example employs |enlarge y limits| in order to get some more free space since the default spacing is not always appropriate for bar plots. + + Note that it might be quite important to include |xmin=0| explicitly as in the example above. Without it, the lower bound will be used: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[ + title=Uses lowest $x$ coords for xmin, + xbar, + width=12cm, height=3.5cm, enlarge y limits=0.5, + xlabel={\#participants}, + symbolic y coords={no,yes}, + ytick=data, + nodes near coords, nodes near coords align={horizontal}, + ] + \addplot coordinates {(1,no) (9,yes)}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + + Besides line, fill, and colorstyles, bars can be configured with |bar width| and |bar shift|, see below. \end{plottype} \begin{stylekey}{/pgfplots/xbar=\marg{shift for multiple plots} (default 2pt)} This style sets |/tikz/xbar| \emph{and} some commonly used options concerning horizontal bars for the complete axis. This is automatically done if you provide |xbar| as argument to an axis argument, see above. -The |xbar| style defines shifts if multiple plots are placed into one axis. It draws bars adjacent to each other, separated by \marg{shift for multiple plots}. Furthermore, it sets the style |bar cycle list| and sets tick and legend appearance options. +The |xbar| style defines shifts if multiple plots are placed into one axis. It draws bars adjacent to each other, separated by \meta{shift for multiple plots}. Furthermore, it sets the style |bar cycle list| and sets tick and legend appearance options. The style is defined as follows. \begin{codeexample}[code only] @@ -168,7 +205,7 @@ The style is defined as follows. }, } \end{codeexample} -The formular for |bar shift| assigns shifts dependent on the total number of plots and the current plot's number. It is designed to fill a total width of $n \cdot $|bar width|$ + (n-1) \cdot $\marg{shift for multiple plots}. The $0.5$ compensates for centering. +The formula for |bar shift| assigns shifts dependent on the total number of plots and the current plot's number. It is designed to fill a total width of $n \cdot $|bar width|$ + (n-1) \cdot $\meta{shift for multiple plots}. The $0.5$ compensates for centering. \end{stylekey} \begin{plottype}{ybar} @@ -183,7 +220,7 @@ The formular for |bar shift| assigns shifts dependent on the total number of plo \end{codeexample} The example above simply changes how input coordinates shall be visualized. As mentioned for |xbar|, one usually needs modified legends and shifts for multiple bars in the same axis. - There is a predefined style which installs these customizations when provided to the axis-environment: + There is a predefined style which installs these customizations when provided to the axis environment: \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[ @@ -216,7 +253,29 @@ The formular for |bar shift| assigns shifts dependent on the total number of plo \end{axis} \end{tikzpicture} \end{codeexample} -Here |ybar| yields |/pgfplots/ybar| because it is an argument to the axis, not to a single plot. The style affects the first three |\addplot| commands. Note that it shifts them horizontally around the plot coordinates. The fourth |\addplot| command is some kind of annotation which doesn't |update limits|. +Here, |ybar| yields |/pgfplots/ybar| because it is an argument to the axis, not to a single plot. The style affects the first three |\addplot| commands. Note that it shifts them horizontally around the plot coordinates. The fourth |\addplot| command is some kind of annotation which doesn't |update limits|. + + The |ybar| style can be combined with |symbolic x coords| in a similar way as described for |xbar|: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + ybar, + enlargelimits=0.15, + legend style={at={(0.5,-0.15)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={tool8,tool9,tool10}, + xtick=data, + nodes near coords, + nodes near coords align={vertical}, + ] +\addplot coordinates {(tool8,7) (tool9,9) (tool10,4)}; +\addplot coordinates {(tool8,4) (tool9,4) (tool10,4)}; +\addplot coordinates {(tool8,1) (tool9,1) (tool10,1)}; +\legend{used,understood,not understood} +\end{axis} +\end{tikzpicture} +\end{codeexample} As for |xbar|, the bar width and shift can be configured with |bar width| and |bar shift|. However, the bar shift is better provided as argument to |/pgfplots/ybar| since this style will overwrite the bar shift. Thus, prefer |/pgfplots/ybar=4pt| to set the bar shift. @@ -247,6 +306,28 @@ Here |ybar| yields |/pgfplots/ybar| because it is an argument to the axis, not t \end{axis} \end{tikzpicture} \end{codeexample} + + Any support style changes are possible, of course. A useful example for bar plots might be to use rotated tick labels: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[ + ybar, + enlargelimits=0.15, + legend style={at={(0.5,-0.2)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={excellent,good,neutral,% + not good,poor}, + xtick=data, + nodes near coords, + nodes near coords align={vertical}, + x tick label style={rotate=45,anchor=east}, + ] + \addplot coordinates {(excellent,0) (good,8) + (neutral,2) (not good,0) (poor,0)}; + \end{axis} +\end{tikzpicture} +\end{codeexample} \end{plottype} \begin{stylekey}{/pgfplots/ybar=\marg{shift for multiple plots} (default 2pt)} @@ -254,7 +335,7 @@ Here |ybar| yields |/pgfplots/ybar| because it is an argument to the axis, not t If you supply |ybar| to an axis environment, |/pgfplots/ybar| will be chosen instead of |/tikz/ybar|. - It changes the legend, draws ticks outside of the axis lines and draws multiple |\addplot| arguments adjacent to each other; block--centered at the $x$ coordinate and separated by \marg{shift for multiple plots}. It will also install the |bar shift| for |every node near coord|. Furthermore, it installs the style |bar cycle list|. It is defined similarly to |/pgfplots/xbar|. + It changes the legend, draws ticks outside of the axis lines and draws multiple |\addplot| arguments adjacent to each other; block--centered at the $x$ coordinate and separated by \meta{shift for multiple plots}. It will also install the |bar shift| for |every node near coord|. Furthermore, it installs the style |bar cycle list|. It is defined similarly to |/pgfplots/xbar|. \end{stylekey} \begin{pgfplotskey}{bar cycle list} @@ -378,9 +459,200 @@ Here |ybar| yields |/pgfplots/ybar| because it is an argument to the axis, not t \end{stylekey} \begin{pgfplotsxykey}{\x ticklabel interval boundaries} - These are style keys which set |x tick label as interval| (see page~\pageref{key:pgfplots:ticklabelasinterval} for details) and configure the tick appearance to be \marg{start} -- \marg{end} for each tick interval. + These are style keys which set |x tick label as interval| (see page~\pageref{key:pgfplots:ticklabelasinterval} for details) and configure the tick appearance to be \meta{start} -- \meta{end} for each tick interval. \end{pgfplotsxykey} +\subsubsection{Histograms} +\begin{plottype}[/pgfplots]{hist=\textcolor{black}{\normalfont\marg{options with {\normalfont\texttt{hist/}} prefix}}} + A histogram plot takes one-dimensional input data and counts the occurrence of values: it determines the data range $[\underline m,\overline m]$ and subdivides it into $N$ equally sized bins with $(N+1)$ end--points. Then, it counts the number of points falling into each bin. More precisely, it computes the $N+1$ points $\underline m =: x_0 < x_1 < \dotsb < x_N := \overline m$ using $x_i := \underline m + i \cdot (\overline m - \underline m)/N$. Then, it creates the $N+1$ coordinates $(x_i, y_i)$, $i=0,\dotsc,N-1$ by means of + \[ + y_i := + \begin{cases} + \text{bincount}\bigl([x_i,x_{i+1})\bigr)\Bigr) & i<N\\ + y_{N-1} & i = N, +\end{cases} + \] + i.e.\ the value of the last coordinate is replicated. + This set of $(N+1)$ interval boundaries is then visualized by an |ybar interval| plot handler. +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + ybar interval, + xticklabel= +\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick +] + \addplot+[hist={bins=3}] + table[row sep=\\,y index=0] { + data\\ + 1\\ 2\\ 1\\ 5\\ 4\\ 10\\ + 7\\ 10\\ 9\\ 8\\ 9\\ 9\\ + }; +\end{axis} +\end{tikzpicture} +\end{codeexample} + We see that |hist={bins=3}| takes a table with one column as input. The data values fall into the range $[1,10]$ which is partitioned into~$3$ intervals (of equal lengths). Finally, the number of points falling into each of the three bins is plotted. The |xticklabel| key shows the range (note that it works only in conjunction with |x tick label as interval| which has been enabled by |ybar interval| before). We see that there are $3$ elements in the range $[1,4)$, $2$~elements in the range $[4,7)$ and finally $7$ elements in the range $[7,10]$. + + The bins are half--open intervals, i.e.\ the end--point does not belong to the bin. Only the last bin contains its right end point. +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + ybar interval, + xtick=,% reset from ybar interval + xticklabel= + {$[\pgfmathprintnumber\tick,% + \pgfmathprintnumber\nexttick)$} +] +% a data file containing 8000 normally distributed +% random numbers of mean 0 and variance 1 +\addplot+[hist={data=x}] + file {plotdata/pgfplots.randn.dat}; + +\end{axis} +\end{tikzpicture} +\end{codeexample} + + The |hist| plot type can be combined with \verbpdfref{plot expression} as well: provide the usual \meta{expression} as you would for a line plot. Then, configure the value for |data=|\meta{expression} in dependence of |x|, |y|, or |z|: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + tiny, + height=4cm,width=12cm, + ybar interval, + ymin=0, + xmin=0,xmax=1, + axis on top, + extra x ticks={0,1}, + extra x tick style={ + grid=none, + x tick label as interval=false, + xticklabel=$\pgfmathprintnumber\tick$ + }, + xticklabel={$[\pgfmathprintnumber[fixed]\tick,\cdot)$} +] + \addplot+[samples=200,hist] {rnd}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The example uses the |rnd| method of \pgfname\ which defines |y| to contain uniform random numbers in the range $[0,1]$. Then, it configures |hist|. Note that |hist| has the default |data=y| such that it uses the |y| coordinate as input. Note furthermore that the |x| value is effectively ignored here. The options after |\begin{axis}[...]| are mainly to scale the graphics and to insert the right limits. The |extra x ticks| method is inserted to demonstrate how to add further tick marks without affecting the overall layout. Note that the |extra x tick style| sets |x tick label as interval=false| to disable the special tick handling which is active for the rest of the plot. + + The following keys configure |hist|. If they are provided inside of \meta{options}, the common key prefix |hist/| can be omitted. + + \begin{pgfplotskey}{hist/data=\marg{expression} (initially y)} + Tells |hist| how to get its data. The common idea is to provide a mathematical \meta{expression} which depends on data supplied by the |\addplot| statement. For example, if you have |\addplot expression|, the \meta{expression} may depend upon |x|, |y| or |z|. In case of an |\addplot table| input routine, the \meta{expression} can employ |\thisrow|\marg{colname} to access the currently active table row in the designated column. + + It is also possible to avoid invocations of the math parser. Use \declareandlabel{hist/data value}|=|\marg{value} instead to do so. Here, \meta{value} should be of a numeric constant. + + The initial configuration employs what would usually become the final |y| coordinate as input (to be more precise, the initial value is |data value=\pgfkeysvalueof{/data point/y}|). + \end{pgfplotskey} + + \begin{pgfplotskeylist}{% + hist/data min=\marg{min value} (initially /pgfplots/xmin),% + hist/data max=\marg{max value} (initially /pgfplots/xmax)}% + Allows to provide the min/max values (the $\underline m$ and $\overline m$) values manually. + + If empty, these v (walues will be deduced from the input data range. + + The resulting interval will be splitted into |hist/bins| intervals. + + The initial configuration uses any provided data limits, i.e.\ the (natural) choices |hist/data min=||xmin| and |hist/data max=||xmax|. + \end{pgfplotskeylist} + + \begin{pgfplotskey}{hist/bins=\marg{number of intervals} (initially 10)} + Specifies the number of intervals to use. + \end{pgfplotskey} + + \begin{pgfplotskey}{hist/intervals=\marg{true,false} (initially true)} + If |intervals=true| (the initial configuration), |hist| will generate $N+1$ coordinates, with + \[ \underline m = x_0 < x_1 < \dotsb < x_{N} = \overline m \] + where $[\underline m,\overline m]$ is the data range. In this case, the data points for $x_{N-1}$ and $x_N$ will get the same value, namely the number of elements in the last bin. This is (only) useful in conjunction with |const plot| or |ybar interval|. + + If |intervals=false|, the last data point will be omitted and exactly $N$ coordinates will be generated. In this case, the right end point is not returned explicitly. + \end{pgfplotskey} + + \begin{pgfplotskey}{hist/cumulative=\marg{true,false} (initially false)} + Allows to compute a cumulative histogram. + + A cumulative histogram uses the sum of all previous bins and the current one as final value. + + Here is the example from above, this time with |hist/cumulative|: + +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + ybar interval, + xtick=,% reset from ybar interval + xticklabel= + {$[\pgfmathprintnumber\tick, + \pgfmathprintnumber\nexttick)$} +] +% a data file containing 8000 normally distributed +% random numbers of mean 0 and variance 1 +\addplot+[hist={ + data=x, + cumulative}] + file {plotdata/pgfplots.randn.dat}; + +\end{axis} +\end{tikzpicture} +\end{codeexample} + + \end{pgfplotskey} + + \begin{stylekey}{/pgfplots/hist/handler (initially ybar interval)} + Allows to change the way the generated coordinates are visualized. The |hist/handler| key is a style, so use |hist/handler/.style={const plot}| to change it. + \end{stylekey} + + \begin{pgfplotscodekey}{hist/data filter} + Allows to define coordinate filters, similar to the coordinate filter key |x filter| described in Section~\ref{sec:filters}. The argument |#1| is the coordinate as it has been found after processing |hist/data|. The code is supposed to assign |\pgfmathresult| to contain the result. If |\pgfmathresult| is empty afterwards, it will be skipped. Otherwise, it is supposed to contain a number. + + This filter is applied \emph{before} the histogram is computed. Note that |x filter| and |y filter| are applied \emph{after} the histogram is computed. + + Note that predefined styles like |each nth point| can also be applied to |hist/data| if + \begin{enumerate} + \item an asterisk `|*|' is appended to the predefined style's name and + \item the first argument to the style is |hist/data|. + \end{enumerate} + For example, |each nth point*={hist/data}{2}| will skip each second input value of |hist/data| (try it out). + \end{pgfplotscodekey} + + \begin{pgfplotsxycodekeylist}{ + /pgfplots/hist/data coord trafo,% + /pgfplots/hist/data coord inv trafo}% + These keys work in the same way as for |x coord trafo| and |x coord inv trafo|. They are applied to the |hist/data| value before the histogram is evaluated and after the result value is assigned, respectively. + + Note that |hist| will apply the |hist/data coord inv trafo| before it visualizes its results. Consequently, it may be necessary to assign a similar transformation to |x coord trafo| as well. + + See the documentation of |x coord trafo| for more information about custom transformations. + \end{pgfplotsxycodekeylist} + + \begin{pgfplotskey}{hist/symbolic coords=\marg{list}} + A style which enables |symbolic x coords| for an axis containing |hist| plots: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + ybar interval, + hist/symbolic coords={A,B,C,D,E,F,G,H,I,J}, + xticklabel={[\tick--\nexttick[}, +] + \addplot+[hist={bins=3}] + table[row sep=\\,y index=0] { + data\\ + A\\ B\\ A\\ D\\ F\\ J\\ + G\\ J\\ I\\ H\\ I\\ I\\ + }; +\end{axis} +\end{tikzpicture} +\end{codeexample} + The style does two things: first, it defines |hist/data coord trafo| and |hist/data coord inv trafo|, then, it calls |symbolic x coords| with the same argument. + + \paragraph{Attention}: do not use |hist/data=x| or other symbolic values as input when you have |symbolic coords|. Rather than symbolic values, you need to provide \emph{expandable} values like |\pgfkeysvalueof{/data point/x}| (which has the same effect, but directly expands to the correct value). + + Please refer to the documentation of |symbolic x coords| for further details about symbolic coordinates. + \end{pgfplotskey} +\end{plottype} + \subsubsection{Comb Plots} Comb plots are very similar to bar plots except that they employ single horizontal/vertical lines instead of rectangles. @@ -407,6 +679,142 @@ Comb plots are very similar to bar plots except that they employ single horizont \end{codeexample} \end{plottype} +\subsubsection{Quiver Plots (Arrows)} +\label{sec:pgfplots:quiver2d} +\begin{plottype}[/pgfplots]{quiver=\textcolor{black}{\marg{{\normalfont options with `\texttt{quiver/}' prefix}}}} + A plot type which draws small arrows, starting at $(x,y)$, in direction of $(u,v)$. +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis} + \addplot[blue, + quiver={u=1,v=2*x}, + -stealth,samples=15] {x^2}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + + The base point $(x,y)$ is provided as before; in the example above, it is generated by |plot expression| and yields $(x,x^2)$. The vector direction $(u,v)$ needs to be given in addition. Our example with |quiver/u=1| and |quiver/v=2*x| results in $u=1$ and $v=2x$. Thus, we have defined and visualized a vector field for the derivative of $f(x) = x^2$. + + A common example is to visualize the gradient $(\partial_x f,\partial_y f)(x,y)$ of a two--dimensional function $f(x,y)$: +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[ + title={$x \exp(-x^2-y^2)$ and its gradient}, + domain=-2:2, + view={0}{90}, + axis background/.style={fill=white}, + ] + \addplot3[contour gnuplot={number=9, + labels=false},thick] + {exp(0-x^2-y^2)*x}; + \addplot3[blue, + quiver={ + u={exp(0-x^2-y^2)*(1-2*x^2)}, + v={exp(0-x^2-y^2)*(-2*x*y)}, + scale arrows=0.3, + }, + -stealth,samples=15] + {exp(0-x^2-y^2)*x}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The example visualizes $f(x,y) = x\exp(-x^2-y^2)$ using |contour gnuplot| as first step. The options |contour/number| and |contour/labels| provide fine-tuning for the contour and are not of interest here (so is the |axis background| which just improves visibility of contour lines). What we are interested in is the |quiver=| style: it defines |u| and |v| to some two--dimensional expressions. Furthermore, we used |quiver/scale arrows| to reduce the arrow size. The |-stealth| is a \Tikz\ style which configures outgoing arrow styles of type `|stealth|'. The |samples=15| key configures how we get our input data. In our case, we have input data $(x_i,y_j,f(x_i,y_j))$ with $15$ samples for each, $i$ and $j$. + + It is also possible to place quiver plots on a prescribed $z$ value: +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + domain=0:1, + xmax=1, + ymax=1, +] +\addplot3[surf] {x*y}; +\addplot3[blue,/pgfplots/quiver, + quiver/u=y, + quiver/v=x, + quiver/w=0, + quiver/scale arrows=0.1, + -stealth,samples=10] {1}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent Here, the quiver plots is placed on top of a |surf|. It visualizes the gradient (using a common scale factor of $1/10$ to reduce the arrow lengths). The |quiver/w=0| means that arrows have no $z$ difference, and the |{1}| argument indicates that all start at $(x_i,y_j,1)$. Here, the values $(x_i,y_j)$ are sampled in the |domain=0:1| argument (with |samples=10|), i.e.\ arrows start at $(x_i,y_j,1)$ and end at $(x_i+y_j/10, y_j+x_i/10, 1)$. + + So far, quiver plots do not assume a special sequence of input points. This has two consequences: first, you can plot any vector field by considering just $(x,y) + (u,v)$ (or $(x,y,z) + (u,v,w)$) -- the data doesn't necessarily need to be a two--dimensional function (as opposed to |surf| etc). On the other hand, you need to provide |quiver/scale arrows| manually since |quiver| doesn't know the mesh width in case you provide matrix data\footnote{Actually, I might add something like \texttt{quiver/scale arrows=auto} in the future, I don't know yet. Loops through input data are slow in \TeX, automatic mesh widths computation even more...}. + + Note that quiver plots are currently not available together with logarithmic axes. + + \begin{pgfplotskeylist}{% + quiver/u=\meta{expression} (initially 0), + quiver/v=\meta{expression} (initially 0), + quiver/w=\meta{expression} (initially 0)} + These keys define how the vector directions $(u,v)$ (or, for three dimensional plots, $(u,v,w)$) shall be set. + + The \meta{expression} can be a constant expression like |quiver/u=1| or |quiver/u=42*5|. It may also depend on the final base point values using the values |x|, |y| or |z| as in the example above. In this context, |x| yields the $x$ coordinate of the point where the vector starts, |y| the $y$ coordinate and so on. + + Another important application is to use \emph{table column references} like |quiver/u=\thisrow{col}| in conjunction with |\addplot table|: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[title=Quiver and plot table] + \addplot[blue, + quiver={u=\thisrow{u},v=\thisrow{v}}, + -stealth] + table + { + x y u v + 0 0 1 0 + 1 1 1 1 + 2 4 1 4 + 3 9 1 6 + 4 16 1 8 + }; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent Here, the \meta{expression} employs |\thisrow| which always refers to the actual row of |\addplot table|. + + Note that \meta{expression} should always be of numeric type (no symbolic input extensions are supported currently). + \end{pgfplotskeylist} + \begin{pgfplotskeylist}{% + quiver/u value=\marg{value} (initially 0), + quiver/v value=\marg{value} (initially 0), + quiver/w value=\marg{value} (initially 0)} + These keys have the \emph{same function} as |quiver/u| and its variants. However, they don't call the math parser, so only single values are allowed (including something like |\thisrow{columnname}|). + \end{pgfplotskeylist} + + \begin{pgfplotskeylist}{% + quiver/colored, + quiver/colored=\marg{color}} + Allows to define an individual color for each arrow. Omitting the argument `\meta{color}' is identical to |quiver/colored=mapped color| which uses the |point meta| to get colors for every arrow. + + If you just want to set the same color for every arrow, prefer using |\addplot[blue,quiver]| which is more efficient. + \end{pgfplotskeylist} + + \begin{pgfplotskey}{quiver/scale arrows=\marg{scale} (initially 1)} + Allows to rescale the arrows by a factor. This may be necessary if the arrow length is longer than the distance between adjacent base points $(x_i,y_i)$. There may come a feature to rescale them automatically. + \end{pgfplotskey} + + \begin{pgfplotskey}{quiver/update limits=\mchoice{true,false} (initially true)} + A boolean indicating whether points $(x,y) + (u,v)$ shall contribute to the axis limits. + \end{pgfplotskey} + + \begin{stylekey}{/pgfplots/quiver/every arrow (initially empty)} + Allows to provide individual arrow styles. + + The style can contain any \Tikz\ drawing option. It might depend upon |mapped color| (provided |point meta| has been set). + + Again, if you don't need individual arrow styles, prefer using a plot style (|cycle list| or argument to |\addplot|) which is more efficient. + \end{stylekey} + + \begin{pgfplotsxycodekeylist}{% + quiver/before arrow,% + quiver/after arrow}% + Advanced keys for more fine tuning of the display. They allow to install some \TeX\ code manually before or after the drawing operations for single arrows. Both are initially empty. + \end{pgfplotsxycodekeylist} +\end{plottype} + \subsubsection{Stacked Plots} \begin{pgfplotskey}{stack plots=\mchoice{x,y,false} (initially false)} Allows stacking of plots in either $x$ or $y$ direction. Stacking means to add either $x$- or $y$ coordinates of successive |\addplot| commands on top of each other. @@ -452,6 +860,32 @@ Comb plots are very similar to bar plots except that they employ single horizont \begin{codeexample}[] \begin{tikzpicture} +\begin{axis}[ + ybar stacked, + enlargelimits=0.15, + legend style={at={(0.5,-0.20)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={tool1, tool2, tool3, tool4, + tool5, tool6, tool7}, + xtick=data, + x tick label style={rotate=45,anchor=east}, + ] +\addplot+[ybar] plot coordinates {(tool1,0) (tool2,2) + (tool3,2) (tool4,3) (tool5,0) (tool6,2) (tool7,0)}; +\addplot+[ybar] plot coordinates {(tool1,0) (tool2,0) + (tool3,0) (tool4,3) (tool5,1) (tool6,1) (tool7,0)}; +\addplot+[ybar] plot coordinates {(tool1,6) (tool2,6) + (tool3,8) (tool4,2) (tool5,6) (tool6,5) (tool7,6)}; +\addplot+[ybar] plot coordinates {(tool1,4) (tool2,2) + (tool3,0) (tool4,2) (tool5,3) (tool6,2) (tool7,4)}; +\legend{never, rarely, sometimes, often} +\end{axis} +\end{tikzpicture} +\end{codeexample} + +\begin{codeexample}[] +\begin{tikzpicture} \begin{axis}[stack plots=x,/tikz/xbar] \addplot coordinates {(1,0) (2,1) (2,2) (3,3)}; @@ -485,7 +919,7 @@ The current implementation for |stack plots| does \emph{not} interpolate missing \begin{pgfplotskey}{reverse stacked plots=\mchoice{true,false} (initially true, default true)} Configures the sequence in which stacked plots are drawn. This is more or less a technical detail which should not be changed in any normal case. - The motivation is as follows: suppose multiple |\addplot| commands are stacked on top of each other and they are processed in the order of appearance. Than, the second plot could easily draw its lines (or fill area) on top of the first one - hiding its marker or line completely. Therefor, \PGFPlots\ reverses the sequence of drawing commands. + The motivation is as follows: suppose multiple |\addplot| commands are stacked on top of each other and they are processed in the order of appearance. Then, the second plot could easily draw its lines (or fill area) on top of the first one - hiding its marker or line completely. Therefor, \PGFPlots\ reverses the sequence of drawing commands. This has the side-effect that any normal \Tikz-paths inside of an axis will also be processed in reverse sequence. \end{pgfplotskey} @@ -667,11 +1101,11 @@ Draws a simple scatter plot: all markers have the same appearance. \end{axis} \end{tikzpicture} \end{codeexample} - The |only marks| visualization style simply draws marks at every coordinate. Marks can be set with |mark=|\meta{mark name} and marker options like size and color can be specified using the |mark options=|\marg{style options} key (or by modifying the |every mark| style). The available markers along with the accepted style options can be found in section~\ref{sec:markers} on page~\pageref{sec:markers}. + The |only marks| visualization style simply draws marks at every coordinate. Marks can be set with |mark=|\meta{mark name} and marker options like size and color can be specified using the |mark options=|\meta{style options} key (or by modifying the |every mark| style). The available markers along with the accepted style options can be found in Section~\ref{sec:markers} on page~\pageref{sec:markers}. \end{plottype} \label{pgfplots:scatter} -More sophisticated scatter plots change the marker appearance for each data point. An example is that marker colors depend on the magnitude of function values $f(x)$ or other provided coordinates. The term ``scatter plot'' will be used for this type of plots in the following sections. +More sophisticated scatter plots change the marker appearance for each data point. An example is that marker colors depend on the magnitude of function values $f(x)$ or other provided coordinates. The term ``scatter plot'' will be used for this type of plot in the following sections. Scatter plots require ``source'' coordinates. These source coordinates can be the $y$ coordinate, or explicitly provided additional values. @@ -705,12 +1139,12 @@ Scatter plots can be configured using a set of options. One of them is mandatory \begin{pgfplotskey}{scatter src=\mchoice{none,\meta{expression},x,y,z,f(x),explicit,explicit symbolic} (initially none)} \label{pgfplots:scatter:src} - This key is necessary for any scatter plot and it is set to |f(x)| as soon as |scatter| is activated and no different choice has been made. It needs to be provided as \marg{option} for |\addplot| to configure the value used to determine marker appearances. Actually, |scatter src| is nothing but an alias for |point meta|, so the main documentation for this key is on page~\pageref{pgfplots:pointmeta}. However, we summarize the choices here together with scatter plot examples. + This key is necessary for any scatter plot and it is set to |f(x)| as soon as |scatter| is activated and no different choice has been made. It needs to be provided as \meta{option} for |\addplot| to configure the value used to determine marker appearances. Actually, |scatter src| is nothing but an alias for |point meta|, so the main documentation for this key is on page~\pageref{pgfplots:pointmeta}. However, we summarize the choices here together with scatter plot examples. Usually, |scatter src| provides input data (numeric or string type) which is used to determine colors and other style options for markers. The default configuration expects numerical data which is mapped linearly into the current color map. - The value of |scatter src| determines how to get this data: the choices \declaretext{x}, \declaretext{y} and \declaretext{z} will use either the $x$, $y$ or $z$ coordinates to determine marker options. Any coordinate filters, logarithms or stacked-plot computations have already been applied to these values (use |rawx|, |rawy| and |rawz| for unprocessed values). The special choice |f(x)| is the same as |y| for two dimensional plots and the same as |z| for three dimensional plots. The choice \declaretext{explicit} expects the scatter source data as additional coordinate from the coordinate input streams (see section~\ref{pgfplots:providing:input} for how to provide input meta data or below for some small examples). They will be treated as numerical data. The choice \declaretext{explicit symbolic} also expects scatter source data as additional meta information for each input coordinate, but it treats them as strings, not as numerical data. Consequently, no arithmetics is performed. It is task of the scatter plot style to do something with it. See, for example, the |scatter/classes| style below. + The value of |scatter src| determines how to get this data: the choices \declaretext{x}, \declaretext{y} and \declaretext{z} will use either the $x$, $y$ or $z$ coordinates to determine marker options. Any coordinate filters, logarithms or stacked-plot computations have already been applied to these values (use |rawx|, |rawy| and |rawz| for unprocessed values). The special choice |f(x)| is the same as |y| for two dimensional plots and the same as |z| for three dimensional plots. The choice \declaretext{explicit} expects the scatter source data as additional coordinate from the coordinate input streams (see Section~\ref{pgfplots:providing:input} for how to provide input meta data or below for some small examples). They will be treated as numerical data. The choice \declaretext{explicit symbolic} also expects scatter source data as additional meta information for each input coordinate, but it treats them as strings, not as numerical data. Consequently, no arithmetics is performed. It is the task of the scatter plot style to do something with it. See, for example, the |scatter/classes| style below. Finally, it is possible to provide an arbitrary mathematical expression which involves zero, one or more of the values \declaretext{x} (the current $x$ coordinate), \declaretext{y} (the current $y$ coordinate) or \declaretext{z} (the current $z$ coordinate, if any). If data is read from tables, mathematical expressions might also involve |\thisrow|\marg{column name} or |\thisrowno|\marg{column index} to access any of the table cells in the current row. @@ -763,9 +1197,9 @@ Scatter plots can be configured using a set of options. One of them is mandatory \end{pgfplotskey} \begin{stylekey}{/pgfplots/scatter/use mapped color=\marg{options for each marker} (initially draw=mapped color!80!black,fill=mapped color)} - This style is installed by default. When active, it recomputes the color |mapped color| for every processed point coordinate by transforming the |scatter src| coordinates into the current color map linearly. Then, it evaluates the options provided as \marg{options for each marker} which are expected to depend on |mapped color|. + This style is installed by default. When active, it recomputes the color |mapped color| for every processed point coordinate by transforming the |scatter src| coordinates into the current color map linearly. Then, it evaluates the options provided as \meta{options for each marker} which are expected to depend on |mapped color|. - The user interface for color maps is described in section~\ref{pgfplots:colormap}. + The user interface for color maps is described in Section~\ref{pgfplots:colormap}. \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[title=Default arguments] @@ -805,7 +1239,7 @@ Scatter plots can be configured using a set of options. One of them is mandatory \begin{stylekey}{/pgfplots/scatter/classes=\marg{styles for each class name}} \label{pgfplots:scatterclasses} - A scatter plot style which visualizes points using several classes. The style assumes that every point coordinate has a class label attached, that means the choice |scatter src=explicit symbolic| is assumed\footnote{If \texttt{scatter src} is not \texttt{explicit symbolic}, we expect a numeric argument which is rounded to the nearest integer. The resulting integer is used a class label. If that fails, the numeric argument is truncated to the nearest integer. If that fails as well, the point has no label.}. A class label can be a number, but it can also be a symbolic constant. Given class labels for every point, \marg{styles for each class name} contains a comma-separated list which associates appearance options to each class label. + A scatter plot style which visualizes points using several classes. The style assumes that every point coordinate has a class label attached, that means the choice |scatter src=explicit symbolic| is assumed\footnote{If \texttt{scatter src} is not \texttt{explicit symbolic}, we expect a numeric argument which is rounded to the nearest integer. The resulting integer is used a class label. If that fails, the numeric argument is truncated to the nearest integer. If that fails as well, the point has no label.}. A class label can be a number, but it can also be a symbolic constant. Given class labels for every point, \meta{styles for each class name} contains a comma-separated list which associates appearance options to each class label. \begin{codeexample}[] \begin{tikzpicture} @@ -835,7 +1269,7 @@ Scatter plots can be configured using a set of options. One of them is mandatory \end{axis} \end{tikzpicture} \end{codeexample} -In this example, the coordinate |(0.1,0.15)| has the associated label `|a|' while |(0.45,0.27)| has the label `|c|' (see section~\ref{sec:addplot} for details about specifying point meta data). Now, The argument to |scatter/classes| contains styles for every label -- for label `|a|', square markers will be drawn in color blue. +In this example, the coordinate |(0.1,0.15)| has the associated label `|a|' while |(0.45,0.27)| has the label `|c|' (see Section~\ref{sec:addplot} for details about specifying point meta data). Now, the argument to |scatter/classes| contains styles for every label -- for label `|a|', square markers will be drawn in color blue. The generation of a legend works as for a normal plot -- but |scatter/classes| requires one legend entry for every provided class. It communicates the class labels to the legend automatically. It works as if there had been different |\addplot| commands, one for every class label. @@ -858,6 +1292,7 @@ It is also possible to provide |scatter/classes| as argument to a single plot, a % 0.76 0.5 b % 0.55 0.32 c \addplot[ + % clickable coords={\thisrow{label}}, scatter/classes={ a={mark=square*,blue},% b={mark=triangle*,red},% @@ -875,9 +1310,9 @@ It is also possible to provide |scatter/classes| as argument to a single plot, a \end{tikzpicture} \end{codeexample} -In general, the format of \marg{styles for each class name} is a comma separated list of \meta{label}|=|\marg{style options}. +In general, the format of \meta{styles for each class name} is a comma separated list of \meta{label}|=|\marg{style options}. -\paragraph{Attention:} The keys |every mark| and |mark options| have \emph{no effect} when used inside of \marg{styles for each class name}! So, instead of assigning |mark options|, you can simply provide the options directly. They apply only to markers anyway. +\paragraph{Attention:} The keys |every mark| and |mark options| have \emph{no effect} when used inside of \meta{styles for each class name}! So, instead of assigning |mark options|, you can simply provide the options directly. They apply only to markers anyway. \paragraph{Remark:} To use |\label| and |\ref| in conjunction with |scatter/classes|, you can provide the class labels as optional arguments to |\label| in square brackets: @@ -901,10 +1336,14 @@ In general, the format of \marg{styles for each class name} is a comma separated First class is \ref{label:for:first:class}, second is \ref{label:for:second:class}. \end{codeexample} +\paragraph{Remark:} It is possible to click into the plot to display labels with mouse popups, see the |clickable coords| key of the |clickable| library. + \paragraph{Remark:} The style |scatter/classes| \emph{re}defines |@pre marker code| and |@post marker code|. There is a starred variant \declareandlabel{scatter/classes*} which \emph{appends} the functionality while keeping the old marker code. \end{stylekey} -\begin{pgfplotskey}{nodes near coords=\marg{content} (default \textbackslash pgfmathprintnumber\textbackslash pgfplotspointmeta)} +\begin{pgfplotskeylist}{% + nodes near coords=\marg{content} (default \textbackslash pgfmathprintnumber\textbackslash pgfplotspointmeta), + nodes near coords*=\marg{content} (default \textbackslash pgfmathprintnumber\textbackslash pgfplotspointmeta)} A |scatter| plot style which places text nodes near every coordinate. \begin{codeexample}[] @@ -916,7 +1355,7 @@ First class is \ref{label:for:first:class}, second is \ref{label:for:second:clas \end{axis} \end{tikzpicture} \end{codeexample} - The \marg{content} is, if nothing else has been specified, the content of the ``point meta'', displayed using the default \meta{content}=|\pgfmathprintnumber{\pgfplotspointmeta}|. The macro |\pgfplotspointmeta| contains whatever has been selected by the |point meta| key, it defaults to the $y$ coordinate for two dimensional plots and the $z$ coordinate for three dimensional plots. + The \meta{content} is, if nothing else has been specified, the content of the ``point meta'', displayed using the default \meta{content}=|\pgfmathprintnumber{\pgfplotspointmeta}|. The macro |\pgfplotspointmeta| contains whatever has been selected by the |point meta| key, it defaults to the $y$ coordinate for two dimensional plots and the $z$ coordinate for three dimensional plots. Since |point meta=explicit symbolic| allows to treat string data, you can provide textual descriptions which will be shown inside of the generated nodes\footnote{In this case, the |\textbackslash pgfmathprintnumber| will be skipped automatically.}: @@ -937,6 +1376,33 @@ First class is \ref{label:for:first:class}, second is \ref{label:for:second:clas \end{codeexample} The square brackets are the way to provide explicit |point meta| for |plot coordinates|. Please refer to the documentation of |plot file| and |plot table| for how to get point meta from files. + The \meta{content} can also depend on something different than |\pgfplotspointmeta|. But since \meta{content} is evaluated during |\end{axis}|, \PGFPlots\ might not be aware of any special information inside of \meta{content} -- you'll need to communicate it to \PGFPlots\ with the |visualization depends on| key as follows: +\begin{codeexample}[width=3cm] +\begin{tikzpicture} + \begin{axis}[enlargelimits=0.2] + \addplot[ + scatter,mark=*,only marks, + % we use 'point meta' as color data... + point meta=\thisrow{color}, + % ... therefore, we can't use it as argument for nodes near coords ... + nodes near coords*={$(\pgfmathprintnumber[frac]\myvalue)$}, + % ... which requires to define a visualization dependency: + visualization depends on={\thisrow{myvalue} \as \myvalue}, + ] + table { + x y color myvalue + 0.5 0.2 1 0.25 + 0.2 0.1 2 1.5 + 0.7 0.6 3 0.75 + 0.35 0.4 4 0.125 + 0.65 0.1 5 2 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The example uses a |scatter| plot to get different colors, where the |scatter src| (or, equivalently, |point meta|) is already used to define the markers color. In addition to the colored |scatter| plot, we'd like to add |nodes near coords|, where the displayed nodes should contain |\thisrow{myvalue}|. To do so, we define |scatter,point meta=\thisrow{color}| (just as described in the previous sections). Furthermore, we use \declare{nodes near coords*} in order to \emph{combine} different |scatter| styles (see below for details). The value for |nodes near coords*| depends on |\thisrow{myvalue}|, but we can't use |\pgfplotspointmeta| (which is already occupied). Thus, we communicate the additional input data by means of |visualization depends on={\thisrow{myvalue} \as \myvalue}|. The statement defines a new macro, |\myvalue|, and assigns the value |\thisrow{myvalue}|. Furthermore, it configures \PGFPlots\ to remember this particular macro and its contents until |\end{axis}| (see the documentation for |visualization depends on| for details). + + The style |nodes near coords| might be useful for bar plots, see |ybar| for an example of |nodes near coords|. \paragraph{Remarks and Details:} @@ -947,10 +1413,10 @@ First class is \ref{label:for:first:class}, second is \ref{label:for:second:clas In order to use |nodes near coords| together with other |scatter| plot styles (like |scatter/use mapped color| or |scatter/classes|), you may append a star to each of these keys. The variant \declareandlabel{nodes near coords*} will \emph{append} code to |scatter/@pre marker code| without overwriting the previous value. \item Consider using |enlargelimits| together with |nodes near coords| if text is clipped away. - \item Currently |nodes near coords| does not work satisfactory for |ybar interval| or |xbar interval|, sorry. + \item Currently |nodes near coords| does not work satisfactorily for |ybar interval| or |xbar interval|, sorry. \end{itemize} -\end{pgfplotskey} +\end{pgfplotskeylist} \begin{stylekey}{/pgfplots/every node near coord} A style used for every node generated by |nodes near coords|. It is initially empty. @@ -959,13 +1425,13 @@ First class is \ref{label:for:first:class}, second is \ref{label:for:second:clas \begin{pgfplotskey}{nodes near coords align=\marg{alignment method} (initially auto)} Specifies how to align nodes generated by |nodes near coords|. - Possible choices for \marg{alignment} are + Possible choices for \meta{alignment method} are \begin{description} - \item[]\declare{auto} Uses |horizontal| if the $x$ coordinates are shown or |vertical| in all other cases. This checks the current value of |point meta|. + \item[]\declare{auto} uses |horizontal| if the $x$ coordinates are shown or |vertical| in all other cases. This checks the current value of |point meta|. \item[]\declare{horizontal} uses |left| if |\pgfplotspointmeta| $<0$ and |right| otherwise. \item[]\declare{vertical} uses |below| if |\pgfplotspointmeta| $<0$ and |above| otherwise. - \item[] Its also possible to provide any \Tikz\ alignment option such as |anchor=north east|, |below| or something like that. It is also allowed if multiple options are provided. + \item[] It is also possible to provide any \Tikz\ alignment option such as |anchor=north east|, |below| or something like that. It is also allowed to privde multiple options. \end{description} \end{pgfplotskey} @@ -981,7 +1447,7 @@ First class is \ref{label:for:first:class}, second is \ref{label:for:second:clas \begin{enumerate} \item The scatter source coordinates form a data stream whose data limits are computed additionally to the axis limits. This step is skipped for |symbolic| meta data. \item Before any markers are drawn, a linear coordinate transformation from these data limits to the interval $[0.0,1000.0]$ is initialised. -\item Every scatter source coordinate\footnote{During the evaluation, the public macros \texttt{\textbackslash pgfplotspointmeta} and \texttt{\textbackslash pgfplotspointmetarange} indicate the source coordinate and the source coordinate range in the format $a:b$ (for log--axis, they are given in fixed point representation and for linear axes in floating point).} will be transformed linearly and the result is available as macro |\pgfplotspointmetatransformed| $ \in [0.0,1000.0]$. +\item Every scatter source coordinate\footnote{During the evaluation, the public macros \texttt{\textbackslash pgfplotspointmeta} and \texttt{\textbackslash pgfplotspointmetarange} indicate the source coordinate and the source coordinate range in the format $a:b$ (for log--axis, they are given in fixed-point representation and for linear axes in floating point).} will be transformed linearly and the result is available as macro |\pgfplotspointmetatransformed| $ \in [0.0,1000.0]$. The decision is thus based on per thousands of the data range. The transformation is skipped for |symbolic| meta data (and the meta data is simply contained in the mentioned macro). \item The \pgfname\ coordinate system is translated such that |(0pt,0pt)| is the plot coordinate. @@ -1027,6 +1493,7 @@ Please note that |\ifdim| compares \TeX\ lengths, so the example employs the suf \end{pgfplotsxycodekeylist} \subsubsection{1D Colored Mesh Plots} +\label{sec:1d:mesh} \begin{plottype}[/pgfplots]{mesh} Uses the current color map to determine colors for each fixed line segment. Each line segment will get the same color. \begin{codeexample}[] @@ -1051,7 +1518,7 @@ Please note that |\ifdim| compares \TeX\ lengths, so the example employs the suf \end{axis} \end{tikzpicture} \end{codeexample} - This onedimensional |mesh| plot is actually a special case of the twodimensional mesh plots, so more detailed configuration, including how to change the color data, can be found in section~\ref{sec:2d:mesh}. + This one-dimensional |mesh| plot is actually a special case of the twodimensional mesh plots, so more detailed configuration, including how to change the color data, can be found in Section~\ref{sec:2d:mesh}. \end{plottype} @@ -1120,3 +1587,12 @@ Sometimes it is desirable to draw parts of a single plot separately, without con \end{codeexample} \end{pgfplotskey} +More about this coordinate filtering can be found in Section~\ref{sec:filters} ``Skipping Or Changing Coordinates -- Filters''. + +\subsubsection{Patch Plots} +Patch Plots visualize a sequence of one or more triangles (or other sorts of patches). These triangles can be drawn with a single color (|shader=flat| and |shader=faceted interp|) or with interpolated colors (|shader=interp|). + +There are both two- and three-dimensional patch plots, both with the same interface and the same keys. Therefore, the reference documentation for patch plots can be found in Section~\ref{sec:pgfplots:3d:patch} together with three--dimensional patch plots. + +\label{sec:pgfplots:2d:patch} +} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.3dconfiguration.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.3dconfiguration.tex index e11c922d100..5cac72c8414 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.3dconfiguration.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.3dconfiguration.tex @@ -1,6 +1,8 @@ \subsection{3D Axis Configuration} +{ +\tikzset{external/figure name/.add={}{threedimaxis_}}% This section described keys which are used to configure the appearance of three dimensional figures. Some of them apply for two--dimensional plots as special case as well, and they will also be discussed in the respective sections of this manual. \subsubsection{View Configuration} @@ -43,7 +45,7 @@ This section described keys which are used to configure the appearance of three The |view| is computed as follows. The view is defined by two rotations: the first rotation uses the \meta{azimuth} angle to rotate around the $z$ axis. Afterwards, the view is rotated \meta{elevation} degrees around the \emph{rotated} $x$ axis (more precisely, it is rotated $-$\meta{elevation} degrees). The resulting transformed $x$--$z$--plane is the viewport, i.e.\ the view direction is always the transformed positive $y$ axis. - The |view| argument is assignment compatible with matlab (tm), i.e.\ you can use + The |view| argument is compatible with the argument of the Matlab (tm) view command, i.e.\ you can use |[h,v] = view| @@ -150,13 +152,13 @@ This section described keys which are used to configure the appearance of three } \end{codeexample} - As the name suggests, |every 3d description| can only be used to set styles for axis labels, tick labels and titles. It has \emph{not} been designed to reset other styles, you will need to change these options either for each axis separately or by means of user defined styles. The reason for this limitation is: other options can (and, in many cases) need to be set before the axis is processed. However, the decision whether we have a two dimensional or a three dimensional axis has to be postponed until the processing is more or less complete -- so only some remaining keys can be set. + As the name suggests, |every 3d description| can only be used to set styles for axis labels, tick labels and titles. It has \emph{not} been designed to reset other styles, you will need to change these options either for each axis separately or by means of user defined styles. The reason for this limitation is: other options can (and, in many cases, needs to) be set before the axis is processed. However, the decision whether we have a two dimensional or a three dimensional axis has to be postponed until the processing is more or less complete -- so only some remaining keys can be set. \end{stylekey} \begin{stylekey}{/pgfplots/every 3d view \marg{h}\marg{v}} - A style which can be used for fine tuning of the output for specific views. + A style which can be used for fine-tuning of the output for specific views. - This style will be installed right after |every 3d description|, but before other axis description related keys are set (in other words: it has higher precedence than |every 3d description| but less precedence than keys provided to the axis directly). + This style will be installed right after |every 3d description|, but before other axis description related keys are set (in other words: it has higher precedence than |every 3d description|, but lower precedence than keys provided to the axis directly). One example is preconfigured for |view={0}{90}| (from top): \begin{codeexample}[code only] @@ -173,17 +175,17 @@ This section described keys which are used to configure the appearance of three \subsubsection{Appearance Of The 3D Box} -\begin{pgfplotskey}{plot box ratio=\marg{x stretch}\marg{y stretch}\marg{z stretch} (initially {1}{1}{1})} +\begin{pgfplotskey}{plot box ratio=\marg{\meta{x stretch} \meta{y stretch} \meta{z stretch}} (initially 1 1 1)} Allows to customize the aspect ratio between the three different axes in a three dimensional plot. - The |plot box ratio| is applied before any rotations and stretch--to--fill routines have been invoked. Thus, the initial setting |{1}{1}{1}| makes all axes equally long. + The |plot box ratio| is applied before any rotations and stretch--to--fill routines have been invoked. Thus, the initial setting\footnote{Note that you can also use the syntax \texttt{\{1\}\{1\}\{1\}} instead of space-separation.} |1 1 1| makes all axes equally long before the stretch--to--fill routine is applied. \pgfplotsexpensiveexample \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[ view/h=60, - plot box ratio={1}{1}{1}, + plot box ratio=1 1 1, colormap={violet}{[1cm] rgb255(0cm)=(25,25,122) color(1cm)=(white) rgb255(5cm)=(238,140,238)}, xlabel=$x$, @@ -204,7 +206,7 @@ This section described keys which are used to configure the appearance of three \begin{tikzpicture} \begin{axis}[ view/h=60, - plot box ratio={1}{2}{1}, + plot box ratio=1 2 1, colormap={violet}{[1cm] rgb255(0cm)=(25,25,122) color(1cm)=(white) rgb255(5cm)=(238,140,238)}, xlabel=$x$, @@ -264,7 +266,7 @@ This section described keys which are used to configure the appearance of three \end{tikzpicture} \end{codeexample} - Finally, the choice \declaretext{complete*} is the same as |complete|, but it also draws grid lines. + Finally, the choice \declaretext{complete*} is the same as |complete|, but it also draws grid lines in the foreground. \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[ @@ -300,7 +302,7 @@ This section described keys which are used to configure the appearance of three \subsubsection{Axis Line Variants} \label{sec:pgfplots:axislines:3d} -Three dimensional axes also benefit from the |axis lines=box| or |axis lines=center| styles discussed in section~\ref{sec:pgfplots:axislines}. The choice |axis lines=box| is standard, it draws a box (probably affected by the |3d box=complete| key). +Three dimensional axes also benefit from the |axis lines=box| or |axis lines=center| styles discussed in Section~\ref{sec:pgfplots:axislines}. The choice |axis lines=box| is standard, it draws a box (probably affected by the |3d box=complete| key). The choice |axis lines=center| draws all three axes such that they pass through the origin. It might be necessary to combine this key with |axis on top| as there is no depth information. \begin{codeexample}[] @@ -317,9 +319,9 @@ The choice |axis lines=center| draws all three axes such that they pass through \end{tikzpicture} \end{codeexample} -The remaining choices |axis lines*=left| and |axis lines*=right| select different sets of axes in a way such that tick labels and axis label won't disturb the plot's content. The `|*|' suppress the use of special styles which are mainly adequate for 2d axes, see the documentation of |axis lines|. Such a set of axes is always on the boundary of the two--dimensional projection. +The remaining choices |axis lines*=left| and |axis lines*=right| select different sets of axes in a way such that tick labels and axis label won't disturb the plot's content. The `|*|' suppresses the use of special styles which are mainly adequate for two-dimensional axes, see the documentation of |axis lines|. Such a set of axes is always on the boundary of the two-dimensional projection. -The choice |axis lines*=left| chooses a set of axes which are left (or bottom, respectively) whereas the choice |axis lines*=right| chooses a set of axes which are on the right (or top, respectively): +The choice |axis lines*=left| chooses a set of axes which are on the left (or bottom, respectively) whereas the choice |axis lines*=right| chooses a set of axes which are on the right (or top, respectively): \begin{codeexample}[] \begin{tikzpicture} @@ -345,5 +347,6 @@ The choice |axis lines*=left| chooses a set of axes which are left (or bottom, r \end{tikzpicture} \end{codeexample} -It is not (yet) possible to mix different styles like |axis x line=center,axis z line=top|. +It is not possible to mix different styles like |axis x line=center,axis z line=top|. +} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.3dplots.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.3dplots.tex index d518cddce4b..af882182fdc 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.3dplots.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.3dplots.tex @@ -1,4 +1,6 @@ \subsection{Three Dimensional Plot Types} +{ +\tikzset{external/figure name/.add={}{threedim_}}% \label{sec:3d} \PGFPlots\ provides three dimensional visualizations like scatter, line, mesh or surface plots. This section explains the methods to provide input coordinates and how to use the different plot types. @@ -6,23 +8,23 @@ \label{pgfplots:3d:preliminary} Before we delve into the capabilities of \PGFPlots\ for three dimensional visualization, let me start with some preliminary remarks. The reason to use \PGFPlots\ for three dimensional plots are similar to those of normal, two dimensional plots: the possibility to get consistent fonts and document consistent styles combined with high--quality output. -While this works very nice for (not too complex) two dimensional plots, it requires considerably more effort than non--graphical documents. This is even more so for three dimensional plots. In other words: \PGFPlots' three dimensional routines are slow. There are reasons for this and some of them may vanish in future versions. But one of these reasons is, that \TeX\ has never been designed for complex visualisation techniques. Consider the image externalization routines mentioned in section~\ref{sec:pgfplots:export}, in particular the |external| library to reduce typesetting time. Besides the speed limitations, three dimensional plots reach memory limits easily. Therefor, the plot complexity of three dimensional plots is limited to relatively coarse resolutions. Section~\ref{sec:pgfplots:export} also discusses methods to extend the initial \TeX\ memory limits. +While this works very nice for (not too complex) two dimensional plots, it requires considerably more effort than non--graphical documents. This is even more so for three dimensional plots. In other words: \PGFPlots' three dimensional routines are slow. There are reasons for this and some of them may vanish in future versions. But one of these reasons is that \TeX\ has never been designed for complex visualisation techniques. Consider the image externalization routines mentioned in Section~\ref{sec:pgfplots:export}, in particular the |external| library to reduce typesetting time. Besides the speed limitations, three dimensional plots reach memory limits easily. Therefore, the plot complexity of three dimensional plots is limited to relatively coarse resolutions. Section~\ref{sec:pgfplots:export} also discusses methods to extend the initial \TeX\ memory limits. Another issue which arises in three dimensional visualization is depth. \PGFPlots\ supports $z$ buffering techniques up to a certain extend. It works pretty well for single scatter plots (|z buffer=sort|), mesh or surface plots (|z buffer=auto|) or parametric mesh and surface plots (|z buffer=sort|). However, it can't combine different |\addplot| commands, those will be drawn in the order of appearance. You may encounter the limitations sometimes. Maybe it will be improved in future versions. -If you decide that you need high complexity, speed and 100\% reliable z buffers (depth information), you should consider using other visualization tools and return to \PGFPlots\ in several years. If you can wait for a complex picture and you don't even see the limitations arising from z buffering limitations, you should use \PGFPlots. Again, consider using the automatic picture externalization with the |external| library discussed in section~\ref{sec:pgfplots:export}. +If you decide that you need high complexity, speed and 100\% reliable z buffers (depth information), you should consider using other visualization tools and return to \PGFPlots\ in several years. If you can wait for a complex picture and you don't even see the limitations arising from z buffering limitations, you should use \PGFPlots. Again, consider using the automatic picture externalization with the |external| library discussed in Section~\ref{sec:pgfplots:export}. Enough for now, let's continue. \subsubsection{The \texttt{\textbackslash addplot3} Command: Three Dimensional Coordinate Input} \label{pgfplots:sec:threedim} \begin{addplot3generic} - The \verbpdfref{\addplot3} command is the main interface for any three dimensional plot. It works in the same way as its two dimensional variant |\addplot| which has been described in all detail in section~\ref{cmd:pgfplots:addplot} on page~\pageref{cmd:pgfplots:addplot}. + The \verbpdfref{\addplot3} command is the main interface for any three dimensional plot. It works in the same way as its two dimensional variant |\addplot| which has been described in all detail in Section~\ref{cmd:pgfplots:addplot} on page~\pageref{cmd:pgfplots:addplot}. The \verbpdfref{\addplot3} command accepts the same input methods as the |\addplot| variant, including expression plotting, coordinates, files and tables. However, a third coordinate is necessary for each of these methods which is usually straight--forward and is explained in all detail in the following. - Furthermore, \verbpdfref{\addplot3} has a way to decide whether a \emph{line} visualization or a \emph{mesh} visualization has to be done. The first one is map from one dimension into $\R^3$ and the latter one a map from two dimensions to $\R^3$. Here, the keys |mesh/rows| and |mesh/cols| are used to define mesh sizes (matrix sizes). Usually, you don't have to care about that because the coordinate input routines already allow either one--dimensional or two dimensional structure. + Furthermore, \verbpdfref{\addplot3} has a way to decide whether a \emph{line} visualization or a \emph{mesh} visualization has to be done. The first one is a map from one dimension into $\R^3$ and the latter one a map from two dimensions to $\R^3$. Here, the keys |mesh/rows| and |mesh/cols| are used to define mesh sizes (matrix sizes). Usually, you don't have to care about that because the coordinate input routines already allow either one- or two-dimensional structure. \end{addplot3generic} \begin{addplot3operation}[]{coordinates}{\marg{coordinate list}} @@ -91,7 +93,7 @@ Enough for now, let's continue. \end{addplot3operation} \begin{addplot3operation}[]{table}{\oarg{column selection}\marg{file}} - The \verbpdfref{\addplot3 table} input works in the same way as its two dimensional counterpart \verbpdfref{\addplot table}. It only expects a column for the $z$ coordinates. Furthermore, it interprets empty input lines as end--of--row (more generally, end--of--scanline) markers, just as for |plot file|. The remarks above about the |mesh/ordering| applies here as well. + The \verbpdfref{\addplot3 table} input works in the same way as its two dimensional counterpart \verbpdfref{\addplot table}. It only expects a column for the $z$ coordinates. Furthermore, it interprets empty input lines as end--of--row (more generally, end--of--scanline) markers, just as for |plot file|. The remark above about the |mesh/ordering| applies here as well. \end{addplot3operation} \begin{pgfplotskeylist}{mesh/rows=\marg{integer},mesh/cols=\marg{integer}} @@ -113,7 +115,7 @@ Enough for now, let's continue. \end{tikzpicture} \end{codeexample} - It is enough to supply one of |mesh/rows| or |mesh/cols| -- the missing values will be determined automatically. + It is enough to supply one of |mesh/rows| or |mesh/cols| -- the missing value will be determined automatically. If you provide one of |mesh/rows| or |mesh/cols|, any end--of--row marker seen inside of input files or coordinate streams will be ignored. @@ -165,9 +167,8 @@ Enough for now, let's continue. \end{axis} \end{tikzpicture} \end{codeexample} - Again, note the subtle difference to the common matrix indexing where a column has the second index fixed. \PGFPlots\ refers to the way one would write down a function on a sheet of paper (this is consistent with how Matlab (tm) displays discrete functions with matrizes). + Again, note the subtle difference to the common matrix indexing where a column has the second index fixed. \PGFPlots\ refers to the way one would write down a function on a sheet of paper (this is consistent with how Matlab (tm) displays discrete functions with matrices). - Please note that |shader=interp| relies on low level shadings which need to be given in row wise ordering, so a (potentially expensive) transposition of the data matrix will be performed in this case. If possible, supply your data in row wise ordering for |shader=interp|. \end{pgfplotskey} \begin{addplot3operation}[]{\marg{math expression}}{} @@ -177,7 +178,7 @@ Enough for now, let's continue. The method \verbpdfref{\addplot3} \marg{math expr} visualizes the function $f(x,y) = $\meta{math expr} where $ f \colon [x_1,x_2] \times [y_1,y_2] \to \R$. The interval $[x_1,x_2]$ is determined using the |domain| key, for example using |domain=0:1|. The interval $[y_1,y_2]$ is determined using the |y domain| key. If |y domain| is empty, $[y_1,y_2] = [x_1,x_2]$ will be assumed. If |y domain=0:0| (or any other interval of length zero), it is assumed that the plot does not depend on |y| (thus, it is a line plot). - The number of samples in $x$ direction is set using the |samples| key. The number of samples in $y$ direction is set using the |samples y| key. If |samples y| is not set, the same value as for $x$ is used. If |samples y|$\le 1$, it is assumed that the plot does not depend on |y| (meaning it is a line plot). + The number of samples in $x$ direction is set using the |samples| key. The number of samples in $y$ direction is set using the |samples y| key. If |samples y| is not set, the same value as for $x$ is used. If |samples y|$\,\le 1$, it is assumed that the plot does not depend on |y| (meaning it is a line plot). \pgfplotsexpensiveexample \begin{codeexample}[] @@ -204,7 +205,7 @@ Enough for now, let's continue. Expression plotting sets |mesh/rows| and |mesh/cols| automatically; these settings don't have any effect for expression plotting. \end{addplot3operation} -\begin{addplot3operation}[]{expression}{\marg{math expr}} +\begin{addplot3operation}[]{expression}{\marg{math expression}} The syntax \verbpdfref{\addplot3} \marg{math expression}|;| @@ -215,9 +216,9 @@ Enough for now, let's continue. \end{addplot3operation} \begin{addplot3operation}[]{(\meta{$x$ expression},\meta{$y$ expression},\meta{$z$ expression})}{} - A variant of \verbpdfref{\addplot3 expression} which allows to provide different coordinate expressions for the $x$, $y$ and $z$ coordinates. This can be used to generate parameterized plots. + A variant of \verbpdfref{\addplot3 expression} which allows to provide different coordinate expressions for the $x$, $y$ and $z$ coordinates. This can be used to generate parametrized plots. - Please note that |\addplot (x,y,x^2)| is equivalent to |\addplot expression {x^2}|. + Please note that |\addplot3 (x,y,x^2)| is equivalent to |\addplot3 expression {x^2}|. Note further that since the complete point expression is surrounded by round braces, round braces inside of \meta{$x$ expression}, \meta{$y$ expression} or \meta{$z$ expression} need to be treated specially. Surround the expressions (which contain round braces) with curly braces: @@ -236,7 +237,7 @@ Three dimensional line plots are generated if the input source has no matrix str \end{axis} \end{tikzpicture} \end{codeexample} -If there is no value for both, |mesh/rows| and |mesh/cols| or if one of them is |1|, \PGFPlots\ will draw a line plot. This is also the case if there is no end--of--scanline marker (empty line) in the input stream. +If there is no value for neither |mesh/rows| nor |mesh/cols| or if one of them is |1|, \PGFPlots\ will draw a line plot. This is also the case if there is no end--of--scanline marker (empty line) in the input stream. For \verbpdfref{\addplot3 expression}, this requires to set |samples y=0| to disable the generation of a mesh. \begin{codeexample}[] @@ -254,7 +255,7 @@ Three dimensional line plots will usually employ lines to connect points (i.e.\ \subsubsection{Scatter Plots} -Three dimensional scatter plots have the same interface as for two dimensional scatter plots, so all examples of section~\ref{sec:pgfplots:scatter:2d} can be used for the three dimensional case as well. +Three dimensional scatter plots have the same interface as for two dimensional scatter plots, so all examples of Section~\ref{sec:pgfplots:scatter:2d} can be used for the three dimensional case as well. The key features are to use |only marks| and/or |scatter| as plot styles. We provide some more examples which are specific for the three dimensional case. @@ -381,7 +382,7 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea \subsubsection{Mesh Plots} \label{sec:2d:mesh} \begin{plottype}[/pgfplots]{mesh} - A mesh plot uses different colors for each mesh segment. Each mesh segment gets the same color. The color is determined using a ``color coordinate'' which is also called ``meta data'' throughout this document. It is the same data which is used for surface and scatter plots as well, see section~\ref{pgfplots:pointmeta}. In the initial configuration, the ``color coordinate'' is the $z$ axis (or the $y$ axis for two dimensional plots). This color coordinate is mapped linearly into the current color map to determine the color for each mesh segment. Thus, if the smallest occurring color data is, say, $-1$ and the largest is $42$, points with color data $-1$ will get the color at the lower end of the color map and points with color data $42$ the color of the upper end of the color map. + A mesh plot uses different colors for each mesh segment. The color is determined using a ``color coordinate'' which is also called ``meta data'' throughout this document. It is the same data which is used for surface and scatter plots as well, see Section~\ref{pgfplots:pointmeta}. In the initial configuration, the ``color coordinate'' is the $z$ axis (or the $y$ axis for two dimensional plots). This color coordinate is mapped linearly into the current color map to determine the color for each mesh segment. Thus, if the smallest occurring color data is, say, $-1$ and the largest is $42$, points with color data $-1$ will get the color at the lower end of the color map and points with color data $42$ the color of the upper end of the color map. \pgfplotsexpensiveexample \begin{codeexample}[] @@ -392,7 +393,7 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea \end{tikzpicture} \end{codeexample} - A mesh plot can be combined with markers or with the |scatter| key which does also draw markers in different colors. + A mesh plot can be combined with markers or with the |scatter| key which also draws markers in different colors. \pgfplotsexpensiveexample \begin{codeexample}[] @@ -414,6 +415,22 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea \end{tikzpicture} \end{codeexample} + Occasionally, one may want to hide the background mesh segments. This can be realized using the |surf| plot handler (see below) and a specific fill color: +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[title=With background] + \addplot3[mesh,domain=-2:2] {exp(-x^2-y^2)}; + \end{axis} +\end{tikzpicture} +\begin{tikzpicture} + \begin{axis}[title=Without background] + \addplot3[surf,fill=white,domain=-2:2] {exp(-x^2-y^2)}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + The fill color needs to be provided explicitly. + \paragraph{Details:} \begin{itemize} \item @@ -444,7 +461,7 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea \end{pgfplotskey} \begin{pgfplotskey}{z buffer=\mchoice{default,none,auto,sort,reverse x seq,reverse y seq,reverse xy seq} (initially default)} - This key allows to choose between different $z$ buffering strategies. A $z$ buffer determines which parts of an image should be drawn in front of other parts. Since both, the graphics packages \PGF\ and the final document format |.pdf| are inherently two dimensional, this work has to be done in \TeX. Currently, several (fast) heuristics can be used which work reasonably well for simple mesh- and surface plots. Furthermore, there is a (time consuming) sorting method which does also work if the fast heuristics fails. + This key allows to choose between different $z$ buffering strategies. A $z$ buffer determines which parts of an image should be drawn in front of other parts. Since both, the graphics packages \PGF\ and the final document format |.pdf| are inherently two dimensional, this work has to be done in \TeX. Currently, several (fast) heuristics can be used which work reasonably well for simple mesh- and surface plots. Furthermore, there is a (time consuming) sorting method which also works if the fast heuristics fails. The $z$ buffering algorithms of \PGFPlots\ apply only to a single |\addplot| command. Different |\addplot| commands will be drawn on top of each other, in the order of appearance. @@ -452,11 +469,11 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea The choice \declaretext{none} disables $z$ buffering. This is also the case for two dimensional axes which don't need $z$ buffering. - The choice \declaretext{auto} is the initial value for any mesh- or surface plot: it uses a very fast heuristics to decide how to realize $z$ buffering for mesh and surface plots. The idea is to reverse either the sequence of all $x$ coordinates, or those of all $y$ coordinates, or both. For regular meshes, this suffices to provide $z$ buffering. In other words: the choice |auto| will use one of the three reverse strategies |reverse |*| seq| (or none at all). + The choice \declaretext{auto} is the initial value for any mesh or surface plot: it uses a very fast heuristics to decide how to realize $z$ buffering for mesh and surface plots. The idea is to reverse either the sequence of all $x$ coordinates, or those of all $y$ coordinates, or both. For regular meshes, this suffices to provide $z$ buffering. In other words: the choice |auto| will use one of the three reverse strategies |reverse |*| seq| (or none at all). The choice |auto|, applied to |patch| plots, uses |z buffer=sort| since |patch| plots have no matrix structure. - The choice \declaretext{sort} can be used for scatter, line, mesh and surface plots. It really sorts according to the depth of each point (or mesh segment)\footnote{The choice \texttt{sort} is \emph{not} available for surface plots with \texttt{shader=interp} because the low level format doesn't support sorting.}. Sorting in \TeX\ uses a slow algorithm and may require a lot of memory (although it has the expected runtime asymptotics $\mathcal O(N \log N)$). + The choice \declaretext{sort} can be used for scatter, line, mesh, surface and patch plots. It sorts according to the depth of each point (or mesh segment). Sorting in \TeX\ uses a slow algorithm and may require a lot of memory (although it has the expected runtime asymptotics $\mathcal O(N \log N)$). The depth of a mesh segment is just \emph{one} number, currently determined as \emph{mean} over the vertex depths. Since |z buffer=sort| is actually just a more intelligent way of drawing mesh segments on top of each other, it may still fail. Failure can occur if mesh segments are large and overlap at different parts of the segment (see Wikipedia ``Painter's algorithm''). If you experience problems of this sort, consider reducing the mesh width (the mesh element size) such that they can be sorted independently (for example automatically using |patch refines=2|, see the |patchplots| library). - The remaining choices apply only to mesh/surface plots and do nothing more then their name indicates: they reverse the coordinate sequences (using quasi linear runtime). They should only be used in conjunction by |z buffer=auto|. + The remaining choices apply only to mesh/surface plots (i.e.\ for matrix data) and do nothing more then their name indicates: they reverse the coordinate sequences of the input matrix (using quasi linear runtime). They should only be used in conjunction by |z buffer=auto|. \end{pgfplotskey} \subsubsection{Surface Plots} @@ -473,9 +490,9 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea \end{tikzpicture} \end{codeexample} - The simplest way to generate surface plots is to use the plot expression feature, but -- as discussed in section~\ref{pgfplots:sec:threedim} -- other input methods like \verbpdfref{\addplot3 table} or \verbpdfref{\addplot3 coordinates} are also possible. + The simplest way to generate surface plots is to use the plot expression feature, but -- as discussed in Section~\ref{pgfplots:sec:threedim} -- other input methods like \verbpdfref{\addplot3 table} or \verbpdfref{\addplot3 coordinates} are also possible. - The appearance can be configured using |colormap|s, the value of the |shader|, |faceted color| keys and the current |color| and/or |draw| / |fill| color. As for |mesh| plots, the special |color=mapped color| is installed for the faces. The stroking color for faceted plots can be set with |faceted color| (see below for details). + The appearance can be configured using |colormap|s, the value of the |shader|, |faceted color| keys and the current |color| and/or |draw|/|fill| color. As for |mesh| plots, the special |color=mapped color| is installed for the faces. The stroking color for faceted plots can be set with |faceted color| (see below for details). \pgfplotsexpensiveexample \begin{codeexample}[] @@ -543,10 +560,10 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea Surface plots use the |mesh legend| style to create legend images. \end{plottype} -\begin{pgfplotskey}{shader=\mchoice{flat,interp,faceted,flat corner,flat mean} (initially faceted)} +\begin{pgfplotskey}{shader=\mchoice{flat,interp,faceted,flat corner,flat mean,faceted interp} (initially faceted)} Configures the shader used for surface plots. The shader determines how the color data available at each single vertex is used to fill the surface patch. - The simplest choice is to use one fill color for each segment, the choice |flat|. + The simplest choice is to use one fill color for each segment, the choice \declareandlabel{flat}. \pgfplotsexpensiveexample \begin{codeexample}[] @@ -559,7 +576,7 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea \end{tikzpicture} \end{codeexample} - \noindent The |flat| shader provides full support of |z buffer|ing, that means it does also support the choice |z buffer=sort|. There are (currently) two possibilities to determine the single color for every segment: + \noindent There are (currently) two possibilities to determine the single color for every segment: \begin{description} \item[\declaretext{flat corner}] Uses the color data of one vertex to color the segment. It is not defined which vertex is used here\footnote{\PGFPlots\ just uses the last vertex encountered in its internal processings -- but after any $z$ buffer re-orderings.}. @@ -580,11 +597,12 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea \end{tikzpicture} \end{codeexample} - The |shader=interp| setting requires a special low--level shading implementation which is currently (only) available for the postscript driver \declaretext{pgfsys-dvips.def} and the |pdflatex| driver \declaretext{pgfsys-pdftex.def}. For other drivers, the choice |shader=interp| will result in a warning and is equivalent to |shader=flat mean|. + The |shader=interp| employs a low--level shading implementation which is currently (only) available for the postscript driver \declaretext{pgfsys-dvips.def} and the |pdflatex| driver \declaretext{pgfsys-pdftex.def}. For other drivers, the choice |shader=interp| will result in a warning and is equivalent to |shader=flat mean|. See also below for detail remarks. + Note that |shader=interp,patch type=bilinear| allows real bilinear interpolation, see the |patchplots| library. - Finally, the choice |shader=faceted| uses a constant fill color for every mesh segment (as for |flat|) and the value of the key |/pgfplots/faceted color| to draw the connecting mesh elements: + The choice |shader=|\declareandlabel{faceted} uses a constant fill color for every mesh segment (as for |flat|) and the value of the key |/pgfplots/faceted color| to draw the connecting mesh elements: \pgfplotsexpensiveexample \begin{codeexample}[] \begin{tikzpicture} @@ -596,9 +614,22 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea \end{tikzpicture} \end{codeexample} + The last choice is |shader=|\declareandlabel{faceted interp}. As the name suggests, it is a mixture of |interp| and |faceted| in the sense that each element is shaded using linear triangle interpolation (see also the |patchplots| library for bilinear interpolation) in the same way as for |interp|, but additionally, the edges are colored in |faceted color|: +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot3[surf,shader=faceted interp, + samples=10,domain=0:1] + {x^2*y}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent In principle, there is nothing wrong with the idea as such, and it looks quite good -- but it enlarges the resulting pdf document considerably and might take a long time to render. It works as follows: for every mesh element (either triangle for |patch| plots or rectangle for lattice plots), it creates a low level shading. It then fills the single mesh element with that shading, and strokes the edges with |faceted color|. The declaration of that many low level shadings is rather inefficient in terms of pdf objects (large output files) and might render slowly\footnote{My experience is as follows: Acrobat reader can efficiently render huge \texttt{interp} shadings. But it is very slow for \texttt{faceted interp} shadings. Linux viewers like xpdf, okular and evince take a very long time to render \texttt{interp} shadings, but are fast for \texttt{faceted interp} shadings.}. For orthogonal plots (like |view={0}{90}|), the effect of |faceted interp| can be gained with less cost if one uses two separate |\addplot| commands: one with |surf| and one with |mesh|. Handle this choice with care. \paragraph{Details:} \begin{itemize} + \item All shaders support |z buffer=sort| (starting with version 1.4) \item The choice |shader=faceted| is the same as |shader=flat| -- except that it uses a special draw color. So, |shader=faceted| has the same effect as @@ -606,16 +637,23 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea |shader=flat,draw=\pgfkeysvalueof{/pgfplots/faceted color}|. \item The |flat| shader uses the current |draw| and |fill| colors. They are set with |color=mapped color| and can be overruled with |draw=|\meta{draw color} and |fill=|\meta{fill color}. The |mapped color| always contains the color of the color map. - - \item The |interp| shader does not support mesh colors and it uses the current color map in any case (it simply ignores the values of |draw| and |fill|). \item You easily add |mark=|\meta{plot mark} to mesh and/or surface plots or even colored plot marks with |scatter|. The scatter plot feature will use the same color data as for the surface. But: Markers and surfaces do not share the same depth information. They are drawn on top of each other. - \item For surface plots with lots of points, |shader=interp| produces smaller |pdf| documents, requires less compilation time in \TeX\ and requires less time to display in Acrobat Reader. - - \item The postscript driver did not work when I tried to write hex encoded 32 bit binary coordinates into the shading. So, the postscript driver \emph{truncates} coordinates to 24 bit -- which might result in a loss of precision (the truncation is not very intelligent). See the |surf shading/precision| key for details. To improve compatibility, this 24 bit truncation algorithm is enabled by default. + + \item Remarks on |shader=interp|: + \begin{itemize} + \item It uses the current color map in any case, ignoring |draw| and |fill|. + \item For surface plots with lots of points, |shader=interp| produces smaller |pdf| documents, requires less compilation time in \TeX\ and requires less time to display in Acrobat Reader than |shader=flat|. + + \item So, the postscript driver \emph{truncates} coordinates to 24 bit -- which might result in a loss of precision (the truncation is not very intelligent). See the |surf shading/precision| key for details. To improve compatibility, this 24 bit truncation algorithm is enabled by default also for pdf documents. + \item + At the time of this writing, few viewers provide satisfying support for |shader=interp|. The Acrobat Reader has full and fast support for interpolated shadings. But some free Linux viewers like xpdf, + okular and evince need a long time and do not display the colors correctly\footnote{The author of this package has submitted bugfixes to xpdf/libpoppler, so this issue will hopefully be fixed with upcoming versions.} (evince even shows transparency). I hope this message will soon become outdated... if not, provide bug reports to the Linux community to communicate the need to improve support for Type 4 (|patch|) and Type 5 pdf (|surf|) and Type 7 (|patch| and elements of the |patchplots| library) shadings. + \item The |interp| shader yields the same outcome as |faceted interp,faceted color=none|, although |faceted interp| requires much more ressources. + \end{itemize} \end{itemize} \pgfplotsexpensiveexample @@ -645,18 +683,381 @@ The following example uses |mark=cube*| and |z buffer=sort| to place boxes at ea \begin{pgfplotskey}{faceted color=\marg{color name} (initially mapped color!80!black)} Defines the color to be used for meshes of faceted surface plots. + + Set |faceted color=none| to disable edge colors. \end{pgfplotskey} \begin{pgfplotskey}{surf shading/precision=\mchoice{pdf,postscript,ps} (initially postscript)} - A key to configure how the low level driver for |shader=interp| writes its data. The choice |pdf| uses 32 bit binary coordinates (which is lossless). The resulting |.pdf| files appear to be correct, but they can't be converted to postscript -- the converter software always complaints about an error. + A key to configure how the low level driver for |shader=interp| writes its data. The choice |pdf| uses 32~bit binary coordinates (which is lossless). The resulting |.pdf| files appear to be correct, but they can't be converted to postscript -- the converter software always complains about an error. + + The choice |postscript| (or, in short, |ps|) uses 24~bit truncated binary coordinates. This results in both, readable |.ps| and |.pdf| files. However, the truncation is lossy. + + If anyone has ideas how to fix this problem: let me know. As far as I know, Postscript should accept 32~bit coordinates, so it might be a mistake in the shading driver. +\end{pgfplotskey} + +\subsubsection{Contour Plots} +{ +\tikzset{external/figure name/.add={}{contour_}}% +\PGFPlots\ supports visualization of contour plots whose coordinates have been computed by \emph{external tools}. The |contour prepared| plot handler coming with \PGFPlots\ takes precomputed contour line coordinates and handles their visualization (|contour/draw color|, |contour/labels| etc.). The |contour gnuplot| style takes matrix input in the same format as for |mesh| or |surf| (that includes any of the \PGFPlots\ matrix input methods). It then writes the matrix data to a file and invokes |gnuplot| (or other, user customizable external programs) to compute contour coordinates. Finally, the computed contours are visualized with the |contour prepared| algorithm. Thus, external programs need to compute the contour coordinates and \PGFPlots\ visualizes the result. + +We discuss the high level interface to external programs first and continue with |contour prepared| later-on. + +\begin{plottype}[/pgfplots]{contour gnuplot=\textcolor{black}{\marg{{\normalfont options with `\texttt{contour/}' or `\texttt{contour external/}' prefix}}}} + This is a high level contour plot interface. It expects matrix data in the same way as two dimensional |surf| or |mesh| plots do. It then computes contours and visualizes them. +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[view={0}{90}] + \addplot3[contour gnuplot] + {x*y}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The example uses \verbpdfref{\addplot3} together with |expression| plotting, that means the input data is of the form $(x_i,y_i,f(x_i,y_i))$. The |view={0}{90}| flag means ``view from top'', otherwise the contour lines would have been drawn as $z$ value: +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot3[contour gnuplot] + {exp(0-x^2-y^2)}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + +As mentioned, you can use any of the \PGFPlots\ input methods as long as it yields matrix output. Thus, we can re-use our introductory example of matrix data, this time with inline data: +\pgfplotsexpensiveexample +\begin{codeexample}[]% +\begin{tikzpicture}% + \begin{axis}[view={0}{90}]% + \addplot3[contour gnuplot]% + coordinates { + (0,0,0) (1,0,0) (2,0,0) (3,0,0) + + (0,1,0) (1,1,0.6) (2,1,0.7) (3,1,0.5) + + (0,2,0) (1,2,0.7) (2,2,0.8) (3,2,0.5) + }; + \end{axis}% +\end{tikzpicture}% +\end{codeexample} + \noindent - The choice |postscript| (or, in short, |ps|) uses 24 bit truncated binary coordinates. This results in both, readable |.ps| and |.pdf| files. However, the truncation is lossy. + What happens behind the scenes is that \PGFPlots\ takes the input matrix and writes all encountered coordinates to a temporary file, including the end--of--scanline markers. Then, it generates a small |gnuplot| script and invokes |gnuplot| to compute the contour coordinates, writing everything into a temporary output file. Afterwards, it includes |gnuplot|'s output file just as if you'd write |\addplot3[contour prepared] file |\marg{temporaryfile}|;|. - If anyone has ideas how to fix this problem: let me know. As far as I know, postscript should accept 32 bit coordinates, so it might be a mistake in the shading driver. + All this invocation of |gnuplot|, including input/output file management is transparent to the user. It only requires two things: first of all, it requires matrix data as input\footnote{Note that \texttt{contour gnuplot} processes the input stream only once. Consequently, the temporary file will contain only information which was available before the first point has been seen. The example above works because it contains empty lines as end-of-scanline markers. If you do not provide such markers, you may need to provide two of the three options \texttt{mesh/rows}, \texttt{mesh/cols}, or \texttt{mesh/num points}.}. Second, it requires you to enable system calls. Consider the documentation for \verbpdfref{plot gnuplot} for how to enable system calls. + + There are several fine-tuning parameters of the input/output file management, and it is even possible to invoke different programs than |gnuplot| (even |matlab|). These details are discussed at the end of this section, see below at page~\pageref{key:pgfplots:contour:gnuplot}. +\end{plottype} + +\begin{pgfplotskey}{contour/number=\marg{integer} (initially 5)} + Configures the number of contour lines which should be produced by any external contouring algorithm. +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[ + title={$x \exp(-x^2-y^2)$}, + domain=-2:2,enlarge x limits, + view={0}{90}, + ] + \addplot3[contour gnuplot={number=14},thick] + {exp(0-x^2-y^2)*x}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + It is also possible to change the |/pgf/number format| settings, see the documentation for the |contour/every contour label| style below. + + + Note that |contour/number| has no effect on |contour prepared|. \end{pgfplotskey} +\begin{plottype}[/pgfplots]{contour prepared=\textcolor{black}{\marg{{\normalfont options with `\texttt{contour/}' prefix}}}} + A plot handler which expects already computed contours on input and visualizes them. It cannot compute contours on its own. + + \begin{pgfplotskey}{contour prepared format=\mchoice{standard,matlab} (initially standard)} + There are two accepted input formats. The first is a long sequence of coordinates of the form $(x,y,z)$ where all successive coordinates with the same $z$ value make up a contour level (this is only part of complete truth, see below). The end--of--scanline markers (empty lines in the input) mark an interruption in one contour level. + + For example, |contour prepared format=standard| could be\footnote{This is actually the output from our \texttt{\textbackslash addplot3[contour gnuplot] coordinates} example from above.} +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot[contour prepared] + table { + 2 2 0.8 + + 0.857143 2 0.6 + 1 1 0.6 + 2 0.857143 0.6 + 2.5 1 0.6 + 2.66667 2 0.6 + + 0.571429 2 0.4 + 0.666667 1 0.4 + 1 0.666667 0.4 + 2 0.571429 0.4 + 3 0.8 0.4 + + 0.285714 2 0.2 + 0.333333 1 0.2 + 1 0.333333 0.2 + 2 0.285714 0.2 + 3 0.4 0.2 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent Note that the empty lines are not necessary in this case: empty lines make only a difference if they occur within the same contour level (i.e. if the same $z$ value appears above and below of them). + + The choice |contour prepared format=matlab| expects two--dimensional input data where the contour level and the number of elements of the contour line are provided as $x$ and $y$ coordinates, respectively, of a leading point. Such a format is used by |matlab|'s contour algorithms, i.e.\ it resembles the output of the matlab commands |data=contour(...)| or |data=contourc(...)|. + +% I generates the following example with plotdata/pgfplotscontourmatlabexample.m + +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot[contour prepared, + contour prepared format=matlab] + table { +% (0.2,5) ==> contour `0.2' (x), 5 points follow (y): + 2.0000000e-01 5.0000000e+00 + 3.0000000e+00 4.0000000e-01 + 2.0000000e+00 2.8571429e-01 + 1.0000000e+00 3.3333333e-01 + 3.3333333e-01 1.0000000e+00 + 2.8571429e-01 2.0000000e+00 +% (0.4,5) ==> contour `0.4', consists of 5 points + 4.0000000e-01 5.0000000e+00 + 3.0000000e+00 8.0000000e-01 + 2.0000000e+00 5.7142857e-01 + 1.0000000e+00 6.6666667e-01 + 6.6666667e-01 1.0000000e+00 + 5.7142857e-01 2.0000000e+00 +% (0.6,6) ==> contour `0.6', has 6 points + 6.0000000e-01 6.0000000e+00 + 2.6666667e+00 2.0000000e+00 + 2.5000000e+00 1.0000000e+00 + 2.0000000e+00 8.5714286e-01 + 1.0000000e+00 1.0000000e+00 + 1.0000000e+00 1.0000000e+00 + 8.5714286e-01 2.0000000e+00 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + + In case you use matlab, you can generate such data with +\begin{verbatim} +[x,y]=meshgrid(linspace(0,1,15)); +data=contour(x,y,x.*y); +data=data'; +save 'exporteddata.dat' data -ASCII +\end{verbatim} + \end{pgfplotskey} + + As already mentioned in the beginning, the $z$ coordinate is not necessarily the coordinate used to delimit contour levels. In fact, the |point meta| data is acquired here, i.e.\ you are free to use whatever $z$ coordinate you want as long as you have a correct |point meta| value. The example from above could be modified as follows: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[ + title=Separating $z$ from Color Value, + xlabel=$x$, + ylabel=$y$, + ] + \addplot3[contour prepared, + point meta=\thisrow{level}] + table { + x y z level + 0.857143 2 0.4 0.6 + 1 1 0.6 0.6 + 2 0.857143 0.6 0.6 + 2.5 1 0.6 0.6 + 2.66667 2 0.4 0.6 + + 0.571429 2 0.2 0.4 + 0.666667 1 0.4 0.4 + 1 0.666667 0.4 0.4 + 2 0.571429 0.4 0.4 + 3 0.8 0.2 0.4 + + 0.285714 2 0 0.2 + 0.333333 1 0.2 0.2 + 1 0.333333 0.2 0.2 + 2 0.285714 0.2 0.2 + 3 0.4 0 0.2 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The example above uses different $z$ coordinates for each first and each last point on contour lines. The contour lines as such are defined by the |level| column since we wrote |point meta=\thisrow{level}|. Such a feature also allows |contour prepared| for nonstandard axes, compare the examples for the |ternary| lib on page~\pageref{page:ternary:contour}. + + \begin{pgfplotskey}{contour/draw color=\marg{color} (initially mapped color)} + Defines the draw color for every contour. Note that only |mapped color| actually depends on the contour level. + \end{pgfplotskey} + + \begin{pgfplotskey}{contour/labels=\marg{true,false} (initially true)} + Configures whether contour labels shall be drawn or not. + \end{pgfplotskey} + \begin{pgfplotskey}{contour/label distance=\marg{dimension} (initially 70pt)} + Configures the distance between adjacend contour labels within the same contour level. + \end{pgfplotskey} + + \begin{stylekey}{/pgfplots/contour/every contour label} + Allows to customize contour labels. The preferred way to change this style is the |contour label style=|\marg{options} method, see below. + + The initial value is +\begin{codeexample}[code only] +\pgfplotsset{ + contour/every contour label/.style={ + sloped, + transform shape, + inner sep=2pt, + every node/.style={mapped color!50!black,fill=white}, + /pgf/number format/relative={\pgfplotspointmetarangeexponent}, + } +} +\end{codeexample} + \noindent Note that |\pgfplotspointmetarangeexponent|$=e$ where $\pm m \cdot 10^e$ is the largest occuring label value (technically, it is the largest occurring value of |point meta|). + + The following example modifies the |/pgf/number format| styles for contour labels: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[ + title={$x \exp(-x^2-y^2)$}, + domain=-2:2,enlarge x limits, + view={0}{90}, + ] + \addplot3[ + contour gnuplot={ + scanline marks=required, + number=14, + contour label style={ + /pgf/number format/fixed, + /pgf/number format/precision=1, + }, + },thick + ] + {exp(0-x^2-y^2)*x}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \end{stylekey} + +\pgfplotsshortstylekey contour/contour label style=contour/every contour label\pgfeov + \begin{stylekey}{/pgfplots/contour/labels over line} + A style which changes |every contour label| such that labels are right over the lines, without fill color. + +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[view={0}{90}] + \addplot3[contour gnuplot={ + labels over line,number=9}] + {x*y}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \end{stylekey} + + \begin{stylekey}{/pgfplots/contour/handler} + Allows to modify the plot handler which connects the points of a single contour level. + + The initial value is +\begin{codeexample}[code only] +\pgfplotsset{contour/handler/.style={/tikz/sharp plot}} +\end{codeexample} + but a useful alternative might be the |smooth| handler. + \end{stylekey} + + \begin{pgfplotscodekey}{contour/label node code} + A lowlevel interface to modify how contour labels are placed. + + The initial value is +\begin{codeexample}[code only] +\pgfplotsset{ + contour/label node code/.code={\node {\pgfmathprintnumber{#1}};} +} +\end{codeexample} + \end{pgfplotscodekey} + +\end{plottype} + + +\begin{plottype}[/pgfplots]{contour external=\textcolor{black}{\marg{{\normalfont options with `\texttt{contour/}' or `\texttt{contour external/}' prefix}}}} + This handler constitutes a generic interface to external programs to compute contour lines. The |contour gnuplot| method is actually a special case of |contour external|. + + \begin{pgfplotskey}{contour external/file=\marg{base file name} (initially empty)} + The initial configuration is to automatically generate a unique file name. + \end{pgfplotskey} + + \begin{pgfplotskey}{contour external/scanline marks=\mchoice{false,if in input,required,true} (initially if in input)} + Controls how |contour external| writes end-of-scanline markers. + + The choice |false| writes no such markers at all. In this case, |script| should contain |mesh/rows| and/or |mesh/cols|. + + The choice |if in input| generates end-of-scanline markers if they appear in the provided input data (either as empty lines or if the user provided at least two of the three options |mesh/rows|, |mesh/cols|, or |mesh/num points| explicitly). + + The choice |required| works like |if in input|, but it will fail unless there really was such a marker. + + The choice |true| is an alias for |required|. + \end{pgfplotskey} + + \begin{pgfplotskey}{contour external/script=\marg{Code for external program} (initially empty)} + Provides template code to generate a script for the external program. Inside of \meta{Code for external program}, the placeholder |\infile| will expand to the temporary input file and |\outfile| to the temporary output file. The temporary |\infile| is a text file containing one point on each line, in the form |x y meta meta|, separated by tabstops. Whenever a scanline is complete, an empty line is issued (but only if these scanline markers are found in the input stream as well). The complete set of scanlines forms a matrix. There are no additional comments or extra characters in the file. The macro |\ordering| will expand to |0| if the matrix is stored in |mesh/ordering=x varies| and |\ordering| will be |1| for |mesh/ordering=y varies|. + + Inside of \meta{Code for external program}, you can also use |\pgfkeysvalueof{/pgfplots/mesh/rows}| and |\pgfkeysvalueof{/pgfplots/mesh/cols}|; they expand to the matrix' size. Similarly, |\pgfkeysvalueof{/pgfplots/mesh/num points}| expands to the total number of points. + \end{pgfplotskey} + + \begin{pgfplotskey}{contour external/script extension=\marg{extension} (initially script)} + The file name extension for the temporary script. + \end{pgfplotskey} + + \begin{pgfplotskey}{contour external/cmd=\marg{system call} (initially empty)} + A template to generate system calls for the external program. Inside of \meta{system call}, you may use |\script| as placeholder for the filename which contains the result of |contour external/script|. + \end{pgfplotskey} + + \begin{stylekey}{/pgfplots/contour gnuplot} + \label{key:pgfplots:contour:gnuplot} + The initial configuration is +\begin{codeexample}[code only] +\pgfplotsset{ + contour gnuplot/.style={ + contour external={ + script={ + unset surface; + set cntrparam levels \pgfkeysvalueof{/pgfplots/contour/number}; + set contour; + set table \"\outfile\"; + splot \"\infile\"; + }, + cmd={gnuplot \"\script\"}, + #1,% + }, + } +} +\end{codeexample} + Note that |contour gnuplot| requires explicit scanline markers in the input stream, and it assumes |mesh/ordering=x varies|. + \end{stylekey} + + Note that |contour external| lacks the intelligence to detect changes; it will always re-generate the output (unless the |-shell-escape| feature is not active). +\end{plottype} + +%-------------------------------------------------- +% \subsubsection{Filled Contours (Experimental)} +% Filled contour plots are \emph{not} ready yet. There is only limited experimental support up to now. Use at your own risk! +% +% \begin{pgfplotskey}{contour/data limits={$(\underline x,\underline y,\underline z,\underline m)$ $(\bar x,\bar y,\bar z,\bar m)$} (initially empty)} +% The data limits for $x$, $y$, $z$ and |point meta|, separated by comma. +% \end{pgfplotskey} +% +% \begin{pgfplotskey}{contour/filled=\mchoice{true,false} (initially false)} +% A boolean which configures the (highly experimental) feature to fill any |contour prepared| plot. +% \end{pgfplotskey} +% \begin{pgfplotskey}{contour/fill color=\marg{color} (initially mapped color)} +% Designates the fill color. Use something like |fill color=mapped color!80!black| if you want to distinguish between edges and filled area. +% \end{pgfplotskey} +%-------------------------------------------------- + +} + \subsubsection{Parameterized Plots} -Parameterized plots use the same plot types as documented in the preceding sections: both, mesh and surface plots are actually special parameterized plots where $x$ and $y$ are on cartesian grid points. +Parameterized plots use the same plot types as documented in the preceding sections: both |mesh| and |surf|ace plots are actually special parametrized plots where $x$ and $y$ are on cartesian grid points. Parameterized plots just need a special way to provide the coordinates: @@ -671,7 +1072,7 @@ Parameterized plots just need a special way to provide the coordinates: \end{axis} \end{tikzpicture} \end{codeexample} -\noindent The preceding example uses |samples y=0| to indicate that a line shall be samples instead of a matrix. The curly braces are necessary because \TeX\ can't nest round braces. The single expressions here are used to parameterize the helix. +\noindent The preceding example uses |samples y=0| to indicate that a line shall be sampled instead of a matrix. The curly braces are necessary because \TeX\ can't nest round braces. The single expressions here are used to parametrize the helix. Another example follows. Note that |z buffer=sort| is a necessary method here. @@ -706,7 +1107,7 @@ Another example follows. Note that |z buffer=sort| is a necessary method here. \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[view={60}{30}] - \addplot3[surf,shader=flat,z buffer=sort, + \addplot3[surf,shader=interp,z buffer=sort, samples=30,domain=-1:0,y domain=0:2*pi] ({sqrt(1-x^2) * cos(deg(y))}, {sqrt( 1-x^2 ) * sin(deg(y))}, @@ -715,6 +1116,364 @@ Another example follows. Note that |z buffer=sort| is a necessary method here. \end{tikzpicture} \end{codeexample} +\subsubsection{3D Quiver Plots (Arrows)} +Three dimensional |quiver| plots are possible with the same interface as their two-dimensional counterparts, simply provide the third coordinate using |quiver/w|. Please refer to Section~\ref{sec:pgfplots:quiver2d} for details and examples. + \subsubsection{About 3D Const Plots and 3D Bar Plots} There are currently \emph{no} equivalents of |const plot| and its variants or the bar plot types like |ybar| for three dimensional axes, sorry. +\subsubsection{Patch Plots} +\label{sec:pgfplots:3d:patch} +\begin{plottype}[/pgfplots]{patch} + Patch plots are similar to |mesh| and |surf| plots in that they describe a filled area by means of a geometry. + + However, |patch| plots are defined by \emph{explicitly} providing the elements of the geometry: they expect a sequence of triangles (or other |patch type|s) which make up the mesh. + + There are two dimensional and three dimensional patch plots, both with the same interfaces which are explained in the following sections. + + The standard input format (constituted by |mesh input=patches|) is to provide a sequence of coordinates (either two-- or three--dimensional) as usual. Each consecutive set of points makes up a patch element, which is often a triangle: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot[patch] + table { + x y + 0 0 + 1 1 + 2 0 +% empty lines do not hurt, they are ignored here: + + 1 1 + 2 0 + 3 1 + + 2 0 + 3 1 + 4 0 + + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent Patch plots use |point meta| to determine fill colors. In its initial configuration, |point meta| will be set to the $y$ coordinate (or the $z$ coordinate for three dimensional |patch| plots). Set |point meta| somehow to color the patches: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot[patch] + table[point meta=\thisrow{c}] { + x y c + 0 0 0.2 + 1 1 0 + 2 0 1 + + 1 1 0 + 2 0 1 + 3 1 0 + + 2 0 1 + 3 1 0 + 4 0 0.5 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + Patch plots make use of the |mesh| configuration, including the |shader|. Thus, the example above uses the initial |shader=faceted| (which uses the \emph{mean} color data to determine a triangle's color and a related stroke color). The |shader=interp| yields the following result\footnote{At the time of this writing, many free readers, especially those for Linux, have difficulties displaying the correct color maps and take a long time to render. Acrobat reader displays the shading according to the pdf standard. Bugfixes for xpdf/libpoppler are currently about to be tested.}: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot[patch,shader=interp] + table[point meta=\thisrow{c}] { + x y c + 0 0 0.2 + 1 1 0 + 2 0 1 + + 1 1 0 + 2 0 1 + 3 1 0 + + 2 0 1 + 3 1 0 + 4 0 0.5 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent For triangles, |shader=interp| results in linearly interpolated |point meta| values throughout each individual triangle, which are then mapped to the color map (a technique also known as Gouraud shading). + + The color data does not need to be continuous, it is associated to triangle vertices. Thus, changing some of the color values allows individually shaded regions: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot[patch,shader=interp] + table[point meta=\thisrow{c}] { + x y c + 0 0 0.2 + 1 1 0 + 2 0 1 + + 1 1 0 + 2 0 -1 + 3 1 0 + + 2 0 0.5 + 3 1 1 + 4 0 0.5 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + + Two dimensional |patch| plots simply draw triangles in their order of appearance. In three dimensions, single elements are sorted according to their view depth, with foreground elements drawn on top of background elements (``Painter's algorithm'', see |z buffer=sort|). + +\begin{pgfplotskeylist}{% + patch table=\marg{table file name or inline table} (initially empty),% + patch table with point meta=\marg{table file name or inline table} (initially empty),% + patch table with individual point meta=\marg{table file name or inline table} (initially empty)% +} + Allows to provide patch connectivity data stored in an input table. + + A non--empty argument for |patch table| enables patch input mode. Now, the standard input stream is a long list of vertices which are stored in an array using their |\coordindex| as key. Each row of \meta{table file name or inline table} makes up one patch, defined by indices into the vertex array: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot[patch,table/row sep=\\,patch table={% + 0 1 2\\ + 1 2 3\\ + 4 3 5\\ + }] + table[row sep=\\,point meta=\thisrow{c}] { + x y c \\ + 0 0 0.2\\% 0 + 1 1 0 \\% 1 + 2 0 1 \\% 2 + 3 1 0 \\% 3 + 2 0 0.5\\% 4 + 4 0 0.5\\% 5 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The example consists of \emph{two separate} tables. The |patch table| argument is a table, provided inline where rows are separated by |\\| (which is the purpose of the |row sep=\\| key as you guessed\footnote{Note that the choice \texttt{row sep=\textbackslash\textbackslash} is much more robust here: newlines would be converted to spaces by \TeX\ before \PGFPlots\ had a chance to see them.}). The |patch table| here declares three triangles: the triangle made up by vertex $\#0$, $\#1$ and $\#2$, the triangle made up by $\#1$, $\#2$ and $\#3$ and finally the one using the vertices $\#4$, $\#3$ and $\#5$. The vertices as such are provided using the standard input methods of \PGFPlots; in our case using a table as well. The standard input simply provides coordinates (and |point meta|) which are stored in the vertex array; you could also have used |plot coordinates| to provide them (or |plot expression|). + + The argument to |patch table| needs to be a table -- either a file name or an inline table as in the example above. The first $n$ columns of this table are assumed to contain indices into the vertex array (which is made up using all vertices of the standard input as explained in the previous paragraph). The entries in this table can be provided in floating point, just make sure they are not rounded. The variable $n$ is the number of vertices required to make up a single patch. For triangular patches, it is $n=3$, for |patch type=bilinear| it is $n=4$ and similar for other choices of |patch type|. + + The alternative \declaretext{patch table with point meta} is almost the same as |patch table| -- but it allows to provide (a single) |point meta| (color data) per patch instead of per vertex. Here, a further column of the argument table is interpreted as color data: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + % this uses per-patch color data: + \addplot[patch,table/row sep=\\, + patch table with point meta={% + 0 1 2 100\\ + 1 2 3 10\\ + 4 3 5 0\\ + }] + table[row sep=\\] { + x y \\ + 0 0 \\% 0 + 1 1 \\% 1 + 2 0 \\% 2 + 3 1 \\% 3 + 2 0 \\% 4 + 4 0 \\% 5 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The |patch table with point meta| always prefers |point meta| data from the provided table argument. However, it is still supported to write |point meta=\thisrow|\marg{colname} or similar constructs -- but now, \meta{colname} refers to the provided table argument. More precisely, |point meta| is evaluated in a context where the patch connectivity has been resolved and the |patch table with point meta| is loaded. + + The other alternative \declaretext{patch table with individual point meta} is very similar, but instead of a flat color per patch, it allows to write one color value for every patch: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + % this uses n per-patch color values: + \addplot[patch,shader=interp, + table/row sep=\\, + patch table with individual point meta={% + 0 1 2 100 100 100\\% V_0 V_1 V_2 C_0 C_1 C_2 + 1 2 3 10 0 50\\ + 4 3 5 0 0 100\\ + }] + table[row sep=\\] { + x y \\ + 0 0 \\% 0 + 1 1 \\% 1 + 2 0 \\% 2 + 3 1 \\% 3 + 2 0 \\% 4 + 4 0 \\% 5 + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent To find the |point meta| data for vertex $\#i, i=0,1,2$, \PGFPlots\ searches in column $i+n$ where $n$ is the number of vertices for |patch type| (in our case, $n=3$). + + Technical remark: The key |patch table with individual point meta| automatically installs |point meta=explicit| as well. It might be confusing to override the value of |point meta| here (although it is allowed). + + The |patch table| input type allows to reduce the size of geometries since vertices are stored just once. \PGFPlots\ unpacks them into memory into the redundant format in order to work with single patch elements\footnote{The reason for such an approach is that \TeX\ doesn't really know what an array is -- and according to my experience, arrays implemented by macros tend to blow up \TeX's memory limits even faster than the alternative.}. In case you experience \TeX\ memory problems with this connectivity input, consider using the redundant format. It uses other types of memory limits. + \index{Errors!Patch Input and Memory Problems} +\end{pgfplotskeylist} + + A more involved example is shown below; it uses |\addplot3[patch]| to visualize a three dimensional |patch| plot, provided by means of a long sequence of patches: +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[axis equal] +% FokkerDrI_layer_0.patches.dat contains: +% # each row is one vertex; three consecutive +% # vertices make one triangle (patch) +% 105.577 -19.7332 2.85249 +% 88.9233 -21.1254 13.0359 +% 89.2104 -22.1547 1.46467 +% # end of facet 0 +% 105.577 -19.7332 2.85249 +% 105.577 -17.2161 12.146 +% 88.9233 -21.1254 13.0359 +% # end of facet 1 +\addplot3[patch] + file + {plotdata/FokkerDrI_layer_0.patches.dat}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The ordering in which triangles are specified is irrelevant, three--dimensional patch plots use |z buffer=sort| to sort patches according to their depth (defined as mean depth over each vertex), where foreground patches are drawn on top of background patches. This so--called ``Painter's algorithm'' works well for most meshes. If it fails, consider using |patch refines=1| or |patch refines=2| to split larger elements into small ones automatically. + + + The drawing color associated to single vertices can be changed using the |point meta| key (which is the common method to configure color data in \PGFPlots). The initial configuration is |point meta=z| for three dimensional |patch| plots, i.e.\ to use the $z$ coordinate also as color data. Use |point meta=\thisrow|\marg{colname} in conjunction with |\addplot3[patch] table| to load a selected table column. + + Patch plots are (almost) the same as |mesh| or |surf| plots, they only have more freedom in their input format (and a more complicated geometry). Actually, ``|patch|'' is just a style for |surf,mesh input=patches|. In other words, |patch| \emph{is} the same as |surf|, it even shares the same internal implementation. Thus, most of the keys to configure |mesh| or |surf| plots apply to |patch| as well, especially |shader| and |z buffer|. As already mentioned, |\addplot3[patch]| automatically activates |z buffer=sort| to ensure a good drawing sequence. The |shader| can be used to modify the appearance: +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis} +% FokkerDrI_layer_0.facetIdx.dat contains: +% # each row makes up one facet; it +% # consists of 0-based indices into +% # the vertex array +% 0 1 2 % triangle of vertices #0,#1 and #2 +% 0 3 1 % triangle of vertices #0,#3 and #1 +% 3 4 1 +% 5 6 7 +% 6 8 7 +% 8 9 7 +% 8 10 9 +% ... +% while FokkerDrI_layer_0.vertices.dat contains +% 105.577 -19.7332 2.85249 % vertex #0 +% 88.9233 -21.1254 13.0359 % vertex #1 +% 89.2104 -22.1547 1.46467 % vertex #2 +% 105.577 -17.2161 12.146 +% 105.577 -10.6054 18.7567 +% 105.577 7.98161 18.7567 +% 105.577 14.5923 12.146 +% ... +\addplot3[patch,shader=interp, + patch table= + {plotdata/FokkerDrI_layer_0.facetIdx.dat}] + file + {plotdata/FokkerDrI_layer_0.vertices.dat}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + See the description of |shader=interp| for details and remarks. The example above makes use of the alternative syntax to provide a geometry: the |patch table| input. It allows to provide vertices separate from patch connectivity, where each patch is defined using three indices into the vertex array as discussed above. + +\pgfplotsexpensiveexample +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[view/h=70] +% FokkerDrI_layer_0.patches.dat contains: +% # each row is one vertex; three consecutive +% # vertices make one triangle (patch) +% 105.577 -19.7332 2.85249 +% 88.9233 -21.1254 13.0359 +% 89.2104 -22.1547 1.46467 +% # end of facet 0 +% 105.577 -19.7332 2.85249 +% 105.577 -17.2161 12.146 +% 88.9233 -21.1254 13.0359 +% # end of facet 1 +\addplot3[patch,mesh] + file + {plotdata/FokkerDrI_layer_0.patches.dat}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + +\begin{pgfplotskey}{mesh input=\mchoice{lattice,patches}} + This key controls how input coordinates are decoded to get patches. It is used only if |patch table| is empty (|patch table| has its own way to decode input coordinates). Usually, you won't need to bother with this key as it is set implicitly. + + The choice |mesh input=lattice| is the initial configuration for |mesh| and |surf| plots: it expects input in a compact matrix form as described at the beginning of this section starting with page~\pageref{sec:3d} and requires a |mesh/ordering| and perhaps end--of--scanline markers. It yields patches with exactly four corners and is compatible with |patch type=rectangle| and |patch type=bilinear| (the latter requiring to load the |patchplots| library). + + The choice |mesh input=patches| is implicitly set when you use the |patch| style (remember that |surf| is actually some sort of patch plot on its own). It expects the input format as described for |patch| plots, i.e.\ $n$ consecutive coordinates make up the vertices of a single patch where $n$ is the expected number of vertices for the configured |patch type|. + + Note that a non--empty |patch table| implies |mesh input=patches|. +\end{pgfplotskey} + +\begin{pgfplotskey}{patch type=\mchoice{default,rectangle,triangle,line} (initially default)} +\label{key:patch:type} + Defines the type of patch. + + The initial configuration |patch type=|\declaretext{default} checks the configuration of |mesh input|: for |mesh input=patches|, it uses |triangle|. For |mesh input=lattice|, it checks if there is just one row or just one col and uses |patch type=line| in such a case, otherwise it uses |patch type=rectangle|. + + The choice |patch type=|\declareandlabel{rectangle} expects $n=4$ vertices. The vertices can be either encoded as a matrix or, using |mesh input=patches|, in the sequence in which you would connect the vertices: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[nodes near coords={(\coordindex)}, + title=Rectangle from matrix input] + % note that surf implies 'patch type=rectangle' + \addplot[surf,mesh/rows=2,patch type=rectangle] + coordinates { + (0,0) (1,0) + (0,1) (1,1) + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[nodes near coords={(\coordindex)}, + title=Rectangle from patch input] + \addplot[patch,patch type=rectangle] + coordinates { + (0,0) (1,0) (1,1) (0,1) + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent As for all other |patch type| values, the vertices can be arbitrary two-- or three--dimensional points, there may be even two on top of each other (resulting in a triangle). When used together with |shader=interp|, |patch type=rectangle| is visualized using two Gouraud shaded triangles (see below for |triangle|). It is the \emph{most efficient} representation for interpolated shadings together with |mesh input=lattice| since the input lattice is written directly into the pdf. Use |patch type=rectangle| if you want rectangular elements and perhaps ``some sort'' of smooth shading. Use |patch type=bilinear| of the |patchplots| library in case you need real bilinear shading. + + The choice |patch type=|\declareandlabel{triangle} expects $n=3$ vertices which make up a triangle. The ordering of the vertices is irrelevant: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[nodes near coords={(\coordindex)}] + \addplot[patch,patch type=triangle] + coordinates { + (0,0) (1,0) (0,1) + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The use of |shader=interp| is realized by means of linear interpolation of the three color values (specified with the |point meta| key) between the corners; the resulting interpolated |point meta| values are then mapped into the actual |colormap|. This type of interpolation is called Gouraud shading. + + + The choice |patch type=|\declareandlabel{line} expects $n=2$ vertices which make up a line. It is used for one-dimensional |mesh| plots (see Section~\ref{sec:1d:mesh} for examples). + + There are more values for |patch type| like |bilinear|, |triangle quadr|, |biquadratic|, |coons| and |tensor bezier|. Please refer to the separate |patchplots| library in Section~\ref{sec:lib:patchplots}. +\end{pgfplotskey} + +\begin{stylekey}{/pgfplots/every patch} + This style will be installed as soon as the |patch| plot handler is activated. + + The initial configuration is +\begin{codeexample}[code only] +\pgfplotsset{ + every patch/.style={miter limit=1} +} +\end{codeexample} + \noindent which improves display of sharp triangle corners significantly (see the \Tikz\ manual for details about |miter limit| and line join parameters). +\end{stylekey} + + There is much more to say about patch plots, like |patch type| which allows triangles, bilinear elements, quadratic triangles, biquadratic quadrilaterals, coons patches; the |patch refines| key which allows automatic refinement, |patch to triangles| which triangulates higher order elements; how matrix data can be used for rectangular shapes and more. These details are subject of the |patchplots| library in Section~\ref{sec:lib:patchplots}. +\end{plottype} +} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.alignment.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.alignment.tex index 593f7961b80..1abde181669 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.alignment.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.alignment.tex @@ -8,7 +8,7 @@ Alignment works with two main methods: a coordinate where the axis shall be draw \begin{pgfplotskey}{at=\marg{coordinate expression}} Assigns a position for the complete axis image. This option works similarly to the |at|-option of |\node[at=|\marg{coordinate expression}|]|, see~\cite{tikz}. The common syntax is |at={|\parg{x,y}|}|. -The idea is to provide an \marg{coordinate expression} where the axis will be placed. The axis' anchor will be placed at \marg{coordinate expression}. +The idea is to provide an \meta{coordinate expression} where the axis will be placed. The axis' anchor will be placed at \meta{coordinate expression}. \end{pgfplotskey} \begin{pgfplotskey}{anchor=\marg{name} (initially south west)} @@ -45,8 +45,7 @@ There are four sets of anchors available: anchors positioned on the axis boundin \node[pin=#2:(s.#1),fill=black,circle,scale=0.3] at (test plot.#1) {}; }% \tikzstyle{every pin}=[opacity=0.5,fill=yellow,rectangle,rounded corners=3pt,font=\tiny]% -In more detail, we have -Anchors on the axis rectangle (the bounding box around the axis)\footnote{Versions prior to \PGFPlots\ v.1.3 did \emph{not} use the bounding box of the axis, they used axis coordinates to orient these anchors. This has been fixed. If you \emph{really} want to undo the bugfix, see \texttt{\protect\pgfmanualpdfref{compat/anchors}{compat/anchors}}.}, +In more detail, we have anchors on the axis rectangle (the bounding box around the axis)\footnote{Versions prior to \PGFPlots\ v.1.3 did \emph{not} use the bounding box of the axis, they used axis coordinates to orient these anchors. This has been fixed. If you \emph{really} want to undo the bugfix, see \texttt{\protect\pgfmanualpdfref{compat/anchors}{compat/anchors}}.}, \begin{center} \begin{tikzpicture} \plot @@ -83,19 +82,19 @@ There are anchors which have one coordinate on the outer bounding box, and one o {\pgfplotsset{every pin/.append style={pin distance=1cm}}% \showit{above north}{90} }% - \showit{above north east}{90} + \showit{above north east}{45} \showit{right of north east}{0} \showit{right of east}{0} \showit{right of south east}{0} - \showit{below south east}{-90} + \showit{below south east}{-45} {\pgfplotsset{every pin/.append style={pin distance=1cm}}% \showit{below south}{-90} }% - \showit{below south west}{-90} + \showit{below south west}{-135} \showit{left of south west}{180} \showit{left of west}{180} \showit{left of north west}{180} - \showit{above north west}{90} + \showit{above north west}{135} \end{tikzpicture} \end{center} And finally, we have origin anchors which are especially useful when axis lines pass through the origin, @@ -160,10 +159,10 @@ Aligning at ....... The default value is |anchor=south west|. You can use anchors in conjunction with the \Tikz\ |baseline| option and/or |\begin{pgfinterruptboundingbox}| to perform alignment. -\paragraph{Remarks:} Each of the anchors on the axis rectangle has an equivalent to a coordinate in the |axis description cs| described in section~\ref{pgfplots:sec:axis:description:cs}. That means the first set of anchors actually lives on the \emph{tight bounding box around the axis} (without any ticks or descriptions). The |south west| anchor will always be the lower left corner of this bounding box, even in case of a rotated or skewed coordinate system\footnote{Note that this is only true for versions since 1.3.}. Similar statements hold for the other anchors. +\paragraph{Remarks:} Each of the anchors on the axis rectangle has an equivalent to a coordinate in the |axis description cs| described in Section~\ref{pgfplots:sec:axis:description:cs}. That means the first set of anchors actually lives on the \emph{tight bounding box around the axis} (without any ticks or descriptions). The |south west| anchor will always be the lower left corner of this bounding box, even in case of a rotated or skewed coordinate system\footnote{Note that this is only true for versions since 1.3.}. Similar statements hold for the other anchors. } -\subsubsection{Vertical alignment with \texttt{baseline}} +\subsubsection{Vertical Alignment with \texttt{baseline}} \label{sec:align}% \begin{key}{/tikz/baseline} The |baseline| option should be provided as argument to a |tikzpicture|. It configures \Tikz\ to shift the picture position $y=0$ to the embedding text's baseline: @@ -205,8 +204,10 @@ The default axis anchor is |south west|, which means that the picture coordinate \end{axis} \end{tikzpicture} \end{codeexample} + + Note that it is also possible to write |baseline=5cm| in which case the image offset at $y=$|5cm| will be used as baseline. \end{key} -The |baseline| key is related to |\begin{minipage}|\oarg{align how} or |\begin{tabular}|\oarg{align how}: the \meta{align how} tells \LaTeX\ which part of the |minipage| or |tabular| shall be positioned on the baseline. Thus, |baseline| does the some for pictures (with more freedom for \meta{align how}). +The |baseline| key is related to |\begin{minipage}|\oarg{alignment} or |\begin{tabular}|\oarg{alignment}: the \meta{alignment} tells \LaTeX\ which part of the |minipage| or |tabular| shall be positioned on the baseline. Thus, |baseline| does the same for pictures (with more freedom for \meta{alignment}). \subsubsection{Horizontal Alignment} \label{sec:halign}% @@ -253,6 +254,7 @@ cycle list={ \end{tikzpicture} \end{codeexample} +Here, the second axis uses |at={(main plot.below south west)}| to be placed below the first one. Furthermore, it has |yshift=-0.1cm| in order to leave additional space, and it uses |anchor=north west| to place the upper left corner at the specified position. Instead of the |at={}| construction, we could also have used |yshift| with larger negative shift. \subsubsection{Alignment In Array Form (Subplots)} \label{sec:pgfplots:arrayform} @@ -266,7 +268,7 @@ Sometimes multiple alignment axes in array form are desired. \PGFPlots\ supports \item Simply place |\begin{tikzpicture}...\end{tikzpicture}| into a \LaTeX\ table. This is straight--forward; you would do the very same thing with |\includegraphics|. - In addition to |\includegraphics|, the |baseline| feature allows simple yet effective vertical alignment. At the time of this writing, the experimental \PGF\ version available from |texexample.net| also supports the |trim left| and |trim right| features which allow simple yet effective horizontal alignment (see below). + In addition to |\includegraphics|, the |baseline| feature allows simple yet effective vertical alignment. In addition, the |trim left| and |trim right| features allow simple yet effective horizontal alignment (see below). \item Use a \emph{single} picture which contains an array of axes, i.e.\ a pattern like @@ -282,14 +284,14 @@ The |groupplots| library is discussed in all detail in Section~\ref{sec:group:pl \paragraph{Array Alignment using \LaTeX\ Tables} The idea is simple: use a \LaTeX\ table and provide one |tikzpicture| for every cell. You are probably familiar with this sort of alignment, perhaps together with |\includegraphics|. It works in the very same way for \PGFPlots. The approach is the simplest one since it doesn't need special knowledge. Its disadvantage, however, is more difficulty to control positions \emph{inside} of the image (like differently sized axis descriptions). -Is is strongly recommended to employ the |baseline| option for each cell picture, which simplifies vertical alignment considerably. If you want a simple solution to place separate axes in array form, and you prefer to use one |tikzpicture| for every axis, the probably most simple and most effective way to realize horizontal alignment is the |trim left| and |trim right| feature. Unfortunately, it will only be available as part of the \emph{next} stable \PGF\ release (or available as part of the experimental \PGF\ version from |texample.net|). Since I am aware of many users who downloaded the experimental \PGF\ version, I document it here as well. +Is is strongly recommended to employ the |baseline| option for each cell picture, which simplifies vertical alignment considerably. If you want a simple solution to place separate axes in array form, and you prefer to use one |tikzpicture| for every axis, the probably most simple and most effective way to get horizontal alignment are the |trim left| and |trim right| features -- or styles based on them: -The |trim left| feature can be used to exclude axis descriptions on the left from the bounding box, and the |trim right| can exclude axis descriptions on the right from the bounding box. Thus, alignment is done using the vertical axis lines. Since both keys effectively modify the bounding box, they are documented in Section~\ref{sec:bb} ``Bounding Box Restrictions''. Here is just a small example for array alignment by means of |tabular|, |baseline| and the |trim| features: +The |trim axis left| feature can be used to exclude axis descriptions on the left from the bounding box, and the |trim axis right| can exclude axis descriptions on the right from the bounding box. Thus, alignment is done using the vertical axis lines. Since both keys effectively modify the bounding box, they are documented in Section~\ref{sec:bb} ``Bounding Box Restrictions''. Here is just a small example for array alignment by means of |tabular|, |baseline| and the |trim left|/|trim right| features: \begin{codeexample}[vbox] \pgfplotsset{ small, - title=Requires experimental PGF! + title=Trimmed bounding boxes } \begin{center} \begin{tabular}{rl} @@ -328,9 +330,7 @@ The |trim left| feature can be used to exclude axis descriptions on the left fro A strong advantage is that this type of alignment requires almost no changes to your pictures. Thus, you can copy--paste existing images (\TeX\ code) relatively simple. -Note that the approach is fully compatible with the image |external|ization library: each picture is exported separately, and the bounding box restrictions (and the |baseline| offset) are stored in separate |.dpth| files. The |trim left| / |trim right| approach for horizontal alignment is the \emph{only} supported way for reduced bounding boxes and image externalization. - -Unfortunately, |trim left| and |trim right| are not shipped with \PGFPlots\ and will be part of the next stable \Tikz\ release. +Note that the approach is fully compatible with the image |external|ization library: each picture is exported separately, and the bounding box restrictions (and the |baseline| offset) are stored in separate |.dpth| files. The |trim left|/|trim right| approach for horizontal alignment is the \emph{only} supported way for reduced bounding boxes and image externalization. \paragraph{Array Alignment using \Tikz\ Matrices} @@ -374,7 +374,7 @@ The complete documentation of a \Tikz\ matrix is beyond the scope of this manual \end{codeexample} \noindent in front of the matrix. This will use the same configuration for every sub-plot. -\paragraph{Attention:} Unfortunately, the array alignment with |\matrix| need special \emph{attention with legends}. A legend is also a |\matrix| and \Tikz\ matrizes can't be nested. You will need to use the |legend to name| feature (or to assemble a legend by means of |\label| and |\ref|) to overcome this weakness (see Section~\ref{pgfplots:legend:labelref} for details). +\paragraph{Attention:} Unfortunately, the array alignment with |\matrix| needs special \emph{attention with legends}. A legend is also a |\matrix| and \Tikz\ matrices can't be nested. You will need to use the |legend to name| feature (or to assemble a legend by means of |\label| and |\ref|) to overcome this weakness (see Section~\ref{pgfplots:legend:labelref} for details). \subsubsection{Miscellaneous for Alignment} @@ -391,15 +391,15 @@ The complete documentation of a \Tikz\ matrix is beyond the scope of this manual \subsubsection{Bounding box restrictions} \label{sec:bb} -Bounding box restrictions can be realized with several methods of \PGF: +Bounding box restrictions can be archieved with several methods of \PGF: \begin{enumerate} \item The |overlay| option, \item The |pgfinterruptboundingbox| environment, \item The |\pgfresetboundingbox| command, \item The |\useasboundingbox| path, - \item The |trim left| and |trim right| feature (which is the \emph{only} supported way of restricted bounding boxes and image externalization; at least for pdf output). + \item The |trim left| and |trim right| feature (which is the \emph{only} supported way of restricted bounding boxes and image externalization; at least for \textsc{pdf} output). \end{enumerate} -Note that image externalization (the |external| library) is more or less incompatible with methods (1.)--(4.). The problem is that |pdflatex| crops everything outside of the bounding box away. There are only two safe ways to ``restrict'' bounding boxes of external |.pdf| images: the first is the mentioned |trim left| / |trim right| feature and the second is to use negative |\hspace| or |\vspace| commands (or options to |\includegraphics|). Unfortunately, the |trim left| / |trim right| feature is currently unavailable, it needs a more recent \PGF\ version than the current stable release \PGF\ $2.00$ (I only mention the method here because many users downloaded a more recent \PGF\ from \url{http://www.texample.net/tikz/builds/}). +Note that image externalization (the |external| library) is more or less incompatible with methods (1.)--(4.). The problem is that |pdflatex| crops everything outside of the bounding box away. There are only two safe ways to ``restrict'' bounding boxes of external |.pdf| images: the first is the mentioned |trim left|/|trim right| feature and the second is to use negative |\hspace| or |\vspace| commands (or options to |\includegraphics|). \begin{key}{/tikz/overlay} \index{Bounding Box Control!Excluding Image Parts} @@ -524,8 +524,6 @@ The |pgfinterruptboundingbox| environment does not include its content into the /tikz/trim right=\marg{$x$ coordinate or point}} These two keys allow to reduce the size of the bounding box. - {\bfseries They are only available in the experimental version of \PGF, not in \PGF\ 2.00! You may need the \PGF\ version from |texexample.net|!} - The |trim left| key expects either a single $x$ coordinate like |1cm| or a point like |(current axis.west)|. If a point is provided, is uses only the $x$ coordinate of that point. Then, the left end of the bounding box is set to the resulting $x$ coordinate and everything left of it is outside of the bounding box. The |trim right| key has the same effect, only for the right end of the bounding box. diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.axis-addplot.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.axis-addplot.tex index 2f4884e4cff..7aa6b11237c 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.axis-addplot.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.axis-addplot.tex @@ -30,7 +30,7 @@ Use \end{codeexample} to install styles specifically for the case with |xmode=log|, |ymode=normal|. -The logarithmic scaling means to apply the natural logarithm (base $e$) to each $x$ coordinate. Furthermore, ticks will be typeset as $10^{\text{\meta{exponent}}}$, see section~\ref{sec:number:printing} for more details. +The logarithmic scaling means to apply the natural logarithm (base $e$) to each $x$ coordinate. Furthermore, ticks will be typeset as $10^{\text{\meta{exponent}}}$, see Section~\ref{sec:number:printing} for more details. \end{environment} \begin{environment}{{semilogyaxis}\oarg{options}} @@ -42,7 +42,7 @@ The same remarks as for |semilogxaxis| apply here as well. \end{environment} \begin{environment}{{loglogaxis}\oarg{options}} -The axis environment for logarithmic scaling of both, $x$~and~$y$ axes, +The axis environment for logarithmic scaling of both, $x$~and~$y$ axes. As for the other axis possibilities, there is a style `|every loglog axis|' which is installed at the environment's beginning. The same remarks as for |semilogxaxis| apply here as well. @@ -61,6 +61,8 @@ They are all equivalent to with properly set variables `|xmode|' and `|ymode|' (see below). \subsection{The \protect\texttt{\protect\textbackslash addplot} Command: Coordinate Input} +{ +\tikzset{external/figure name/.add={}{addplot_}}% \label{sec:addplot}% \begin{codeexample}[] \begin{tikzpicture} @@ -137,11 +139,11 @@ Inside of an axis environment, the |\addplot| command is the main user interface \begin{command}{\addplot\oarg{options} \meta{input data} \meta{trailing path commands};} \label{cmd:pgfplots:addplot} -This is the main plotting command, available within each axis environment. It can be used one or more times within an axis to add plots to the current axis. There is also an \verbpdfref{\addplot3} command which is described in section~\ref{sec:3d}. +This is the main plotting command, available within each axis environment. It can be used one or more times within an axis to add plots to the current axis. There is also an \verbpdfref{\addplot3} command which is described in Section~\ref{sec:3d}. It reads point coordinates from one of the available input sources specified by \meta{input data}, updates limits, remembers \meta{options} for use in a legend (if any) and applies any necessary coordinate transformations (or logarithms). -The \meta{options} can be omitted in which case the next entry from the |cycle list| will be inserted as \meta{options}. These keys characterize the plot's type like linear interpolation, smooth plot, constant interpolation, bar plot, mesh plots, surface plots or whatever and define colors, markers and line specifications\footnote{In version 1.2.2 and earlier, there was an explicit distinction between ``behaviour'' options like error bars, domain, number of samples etc.\ and ``style options'' like color, line width, markers etc. This distinction is obsolete now, simply collect everything into \meta{options}.}\index{Behavior Options}\index{Options!Distinction Behavior, Style Options}. Plot variants like error bars, the number of samples or a sample domain can also be configured in \meta{options}. +The \meta{options} can be omitted in which case the next entry from the |cycle list| will be inserted as \meta{options}. These keys characterize the plot's type like linear interpolation with |sharp plot|, |smooth| plot, constant interpolation with |const plot|, |bar| plot, |mesh| plots, |surf|ace plots or whatever and define |color|s, |mark|ers and line specifications\footnote{In version 1.2.2 and earlier, there was an explicit distinction between ``behaviour'' options like error bars, domain, number of samples etc.\ and ``style options'' like color, line width, markers etc. This distinction is obsolete now, simply collect everything into \meta{options}.}\index{Behavior Options}\index{Options!Distinction Behavior, Style Options}. Plot variants like error bars, the number of |samples| or a sample |domain| can also be configured in \meta{options}. The \meta{input data} is one of several coordinate input tools which are described in more detail below. Finally, if |\addplot| successfully processed all coordinates from \meta{input data}, it generates \Tikz\ paths to realize the drawing operations. Any \meta{trailing path commands} are appended to the final drawing command, allowing to continue the \Tikz\ path (from the last plot coordinate). @@ -158,7 +160,7 @@ Some more details: \end{codeexample} to modify options for the plot with number~$3$ only. The first plot in an axis has number~$0$. \item The \meta{options} are remembered for the legend. They are available as `\declareandlabel{current plot style}' as long as the path is not yet finished or in associated error bars. - \item See subsection~\ref{sec:markers} for a list of available markers and line styles. + \item See Subsection~\ref{sec:markers} for a list of available markers and line styles. \item For log plots, \PGFPlots\ will compute the natural logarithm $\log(\cdot)$ numerically using a floating point unit developed for this purpose\footnote{This floating point unit is available as \Tikz\ library as part of \Tikz.}. For example, the following numbers are valid input to |\addplot|. \begin{codeexample}[] \begin{tikzpicture} @@ -189,7 +191,7 @@ Some more details: \item Some of the coordinate input routines use the powerful |\pgfmathparse| feature of \pgfname\ to read their coordinates, among them |plot coordinates|, |plot expression| and |plot table|. This allows to use mathematical expressions as coordinates which will be evaluated using the floating point routines (this applies to logarithmic and linear scales). - \item If you did not specify axis limits manually, |\addplot| will compute them automatically. + \item \PGFPlots\ automatically computes missing axis limits. The automatic computation of axis limits works as follows: \begin{enumerate} \item Every coordinate will be checked. Care has been taken to avoid \TeX's limited numerical capabilities. @@ -216,6 +218,8 @@ Thus, you can combine |cycle list| and \meta{options}. \end{axis} \end{tikzpicture} \end{codeexample} + +The distinction is as follows: |\addplot ...| (without options) lets \PGFPlots\ select colors, markers and linestyles automatically (using |cycle list|). The variant |\addplot+|\oarg{option}| ...| will use the same automatically determined styles, but in addition it uses \meta{options}. Finally, |\addplot|\oarg{options} (without the |+|) uses only the manually provided \meta{options}. \end{addplot+} \subsubsection{Coordinate Lists} @@ -259,7 +263,7 @@ or (4000,7e-8) +- (0.1,0.01) }; \end{codeexample} -These error coordinates are only used in case of error bars, see section~\ref{sec:errorbars}. You will also need to configure whether these values denote absolute or relative errors. +These error coordinates are only used in case of error bars, see Section~\ref{sec:errorbars}. You will also need to configure whether these values denote absolute or relative errors. The coordinates as such can be numbers as |+5|, |-1.2345e3|, |35.0e2|, |0.00000123| or |1e2345e-8|. They are not limited to \TeX's precision. @@ -292,7 +296,7 @@ Please refer to the documentation of |point meta| on page~\pageref{pgfplots:poin \begin{codeexample}[code only] \addplot file {datafile.dat}; \end{codeexample} -where \marg{name} is a text file with at least two columns which will be used as $x$ and $y$ coordinates. Lines starting with `|%|' or `|#|' are ignored. Such files are often generated by \textsc{gnuplot}: +where \meta{name} is a text file with at least two columns which will be used as $x$ and $y$ coordinates. Lines starting with `|%|' or `|#|' are ignored. Such files are often generated by \textsc{gnuplot}: \begin{codeexample}[code only] #Curve 0, 20 points #x y type @@ -394,7 +398,7 @@ It is also possible to provide the data inline, i.e.\ directly as argument in cu \end{codeexample} \noindent Inline table may be convenient together with `|\\|' and |row sep=\\|, see below for more information. -Alternatively, you can load the table \emph{once} into an internal structure and use it \emph{multiple} times: +Alternatively, you can load the table \emph{once} into an internal structure and use it \emph{multiple} times\footnote{In earlier versions, there was an addition keyword `from' before the argument like \texttt{\textbackslash addplot table from \{\textbackslash loadedtable\}}. This keyword is still accepted, but no longer required.}: \begin{codeexample}[code only] \pgfplotstableread{datafile.dat}\loadedtable % use any custom name in place of `\loadedtable' ... @@ -422,7 +426,7 @@ Summary and remarks: \item Use |\addplot table[||x index||=|\marg{column index}|,||y index||=|\marg{column index}|]| to access column indices. Indexing starts with~$0$. You may also use an index for~$x$ and a column name for~$y$. \item Use |\addplot table[||x expr=\coordindex,y=|\marg{column name}|]| to plot the coordinate index versus some $y$ data. \item Use |\addplot table[||header||=false] |\marg{file name} if your input file has no column names. Otherwise, the first non-comment line is checked for column names: if all entries are numbers, they are treated as numerical data; if one of them is not a number, all are treated as column names. - \item It is possible to read error coordinates from tables as well. Simply add options `|x error|', `|y error|' or `|x error index|'/`|y error index|' to \marg{source columns}. See section~\ref{sec:errorbars} for details about error bars. + \item It is possible to read error coordinates from tables as well. Simply add options `|x error|', `|y error|' or `|x error index|'/`|y error index|' to \meta{source columns}. See Section~\ref{sec:errorbars} for details about error bars. \item It is possible to read per point meta data (usable in |scatter src|, see page~\pageref{pgfplots:scatter:src}) as has been discussed for |plot coordinates| and |plot file| above. The meta data column can be provided using the |meta| key (or the |meta index| key). \item Use |\addplot table[|\meta{source columns}|] |\marg{\textbackslash macro} to use a pre--read table. Tables can be read using \begin{codeexample}[code only] @@ -442,7 +446,7 @@ Summary and remarks: \declare{col sep}\pgfmanualpdflabel{/pgfplots/table/col sep}{}|=|\mchoice{space,tab,comma,colon,semicolon,braces,\&,ampersand} - option which is documented in all detail in the manual for \PGFPlotstable\ which is part of \PGFPlots. + option documented in all detail in the manual for \PGFPlotstable\ which is part of \PGFPlots. \item Any line starting with `\#' or `\%' is ignored. \item The first line will be checked if it contains numerical data. If there is a column in the first line which is \emph{no} number, the complete line is considered to be a header which contains column names. Otherwise it belongs to the numerical data and you need to access column indices instead of names. @@ -453,7 +457,7 @@ Summary and remarks: \index{Unbalanced Columns}% \index{table@\textcolor {gray}{\texttt {plot}}\texttt { table}!Unbalanced Columns}% \end{itemize} - \item It is also possible to use \textbf{mathematical expressions} together with `|plot table|'. This is documented in all detail in section~\ref{pgfplots:addplot:table:expr}, but the key idea is to use one of |x expr|, |y expr|, |z expr| or |meta expr| as in `|plot table[||x expr=\thisrow{maxlevel}+3,y=L2]|'. + \item It is also possible to use \textbf{mathematical expressions} together with `|plot table|'. This is documented in all detail in Section~\ref{pgfplots:addplot:table:expr}, but the key idea is to use one of |x expr|, |y expr|, |z expr| or |meta expr| as in `|plot table[||x expr=\thisrow{maxlevel}+3,y=L2]|'. \item The \PGFPlotstable\ package coming with \PGFPlots\ has a the feature ``Postprocessing Data in New Columns'' (see its manual). This allows to compute new columns based on existing data. One of these features is |create col/linear regression| (described in Section~\ref{sec:linefitting}). @@ -478,17 +482,17 @@ The following list of keys allow different methods to select input data or diffe \end{pgfplotskey} \begin{pgfplotsxykeylist}{table/\x=\marg{column name}, table/\x\ index=\marg{column index}} - These keys define the sources for |plot table|. If both, column names and column indices are given, column names are preferred. Column indexing starts with~$0$. The initial setting is to use |x index=0| and |y index=1|. + These keys define the sources for |plot table|. If both column names and column indices are given, column names are preferred. Column indexing starts with~$0$. The initial setting is to use |x index=0| and |y index=1|. Please note that column \emph{aliases} will be considered if unknown column names are used. Please refer to the manual of \PGFPlotstable\ which comes with this package. \end{pgfplotsxykeylist} \begin{pgfplotsxykeylist}{table/\x\ expr=\marg{expression},table/meta expr=\marg{expression}} - These keys allow to combine the mathematical expression parser with file input. They are listed here to complete the list of table keys, but they are described in all detail in section~\ref{pgfplots:addplot:table:expr}. + These keys allow to combine the mathematical expression parser with file input. They are listed here to complete the list of table keys, but they are described in all detail in Section~\ref{pgfplots:addplot:table:expr}. The key idea is to provide an \meta{expression} which depends on table data (possibly on all columns in one row). Only data within the same row can be used where columns are referenced with |\thisrow|\marg{column name} or |\thisrowno|\marg{column index}. - Please refer to section~\ref{pgfplots:addplot:table:expr} for details. + Please refer to Section~\ref{pgfplots:addplot:table:expr} for details. \end{pgfplotsxykeylist} @@ -500,7 +504,7 @@ The following list of keys allow different methods to select input data or diffe The |x error| method provides an input column name (or alias), the |x error index| method provides input column \emph{indices} and |x error expr| works just as |table/x expr|: it allows arbitrary mathematical expressions which may depend on any number of table columns using |\thisrow|\marg{col name}. - Please see section~\ref{sec:errorbars} for details about the usage of error bars. + Please see Section~\ref{sec:errorbars} for details about the usage of error bars. \end{pgfplotsxykeylist} \begin{pgfplotsxykeylist}{% table/meta=\marg{column name}, @@ -551,6 +555,20 @@ The following list of keys allow different methods to select input data or diffe This setting applies to |\addplot file| as well. \end{key} +\begin{key}{/pgfplots/table/comment chars=\marg{comma-separated-list} (initially empty)} + Allows to add one or more \emph{additional} comment characters. Each of these characters has a similar effect as the |#| character, i.e.\ all following characters of that particular input line are skipped. + + For example, |comment chars=!| uses `|!|' as additional comment character (which allows to parse Touchstone files). + + Please refer to the manual of \PGFPlotstable\ for details. +\end{key} + +\begin{key}{/pgfplots/table/skip first n=\marg{integer} (initially 0)} + Allows to skip the first \meta{integer} lines of an input file. The lines will not be processed. + + Please refer to the manual of \PGFPlotstable\ for details. +\end{key} + \subsubsection{Computing Coordinates with Mathematical Expressions} @@ -649,7 +667,7 @@ Please note that \PGF's math parser uses degrees for trigonometric functions: \end{addplotoperation} \begin{addplotoperation}[]{(\meta{$x$ expression},\meta{$y$ expression})}{} - A variant of \verbpdfref{\addplot expression} which allows to provide different coordinate expressions for the $x$ and $y$ coordinates. This can be used to generate parameterized plots. + A variant of \verbpdfref{\addplot expression} which allows to provide different coordinate expressions for the $x$ and $y$ coordinates. This can be used to generate parametrized plots. Please note that |\addplot (x,x^2)| is equivalent to |\addplot expression {x^2}|. @@ -690,7 +708,7 @@ Please note that \PGF's math parser uses degrees for trigonometric functions: \begin{pgfplotskey}{samples at=\marg{coordinate list}} Sets the $x$ coordinates for |plot expression| explicitly. This overrides |domain| and |samples|. - The \marg{coordinate list} is a |\foreach| expression, that means it can contain a simple list of coordinates (comma--separated) but also complex |...| expressions like\footnote{Unfortunately, the \texttt{...} is somewhat restrictive when it comes to extended accuracy. So, if you have particularly small or large numbers (or a small distance), you have to provide a comma--separated list (or use the \texttt{domain} key).} + The \meta{coordinate list} is a |\foreach| expression, that means it can contain a simple list of coordinates (comma--separated), but also complex |...| expressions like\footnote{Unfortunately, the \texttt{...} is somewhat restrictive when it comes to extended accuracy. So, if you have particularly small or large numbers (or a small distance), you have to provide a comma--separated list (or use the \texttt{domain} key).} \begin{codeexample}[code only] \pgfplotsset{samples at={5e-5,7e-5,10e-5,12e-5}} \pgfplotsset{samples at={-5,-4.5,...,5}} @@ -699,7 +717,7 @@ Please note that \PGF's math parser uses degrees for trigonometric functions: The same special treatment of |/tikz/samples at| and |/pgfplots/samples at| as for the |domain| key applies here. See above for details. - \paragraph{Attention:} |samples at| overrides |domain|, even if |domain| has been set \emph{after} |samples at|! Use |samples at={}| to clear \marg{coordinate list} and re-activate |domain|. + \paragraph{Attention:} |samples at| overrides |domain|, even if |domain| has been set \emph{after} |samples at|! Use |samples at={}| to clear \meta{coordinate list} and re-activate |domain|. \end{pgfplotskey} \begin{pgfplotskeylist}{% @@ -713,11 +731,11 @@ Please note that \PGF's math parser uses degrees for trigonometric functions: \end{pgfplotskeylist} \subsubsection{Mathematical Expressions And File Data} -\PGFPlots\ allows to combine `|plot table|' and `|plot expression|' to get both, file input and modifications by means of mathematical expressions. +\PGFPlots\ allows to combine `|plot table|' and `|plot expression|' to get both file input and modifications by means of mathematical expressions. \begin{addplotoperation}[]{table}{\oarg{column selection and expressions}\marg{file}} \label{pgfplots:addplot:table:expr} - Besides the already discussed possibility to provide a column selection by means of column names (|x||=|\meta{name} or |x index||=|\meta{index}, see section~\ref{pgfplots:addplot:table}), it is also possible to provide mathematical expressions as arguments. + Besides the already discussed possibility to provide a column selection by means of column names (|x||=|\meta{name} or |x index||=|\meta{index}, see Section~\ref{pgfplots:addplot:table}), it is also possible to provide mathematical expressions as arguments. Mathematical expressions are specified with |x expr||=|\meta{expression} inside of \meta{column selection and expressions}. They can depend on zero, one or more columns of the input file. A column is referenced using the special command `|\thisrow|\marg{column name}' within \meta{expression} (or |\thisrowno|\meta{column index}). @@ -741,14 +759,14 @@ Please note that \PGF's math parser uses degrees for trigonometric functions: Inside of \meta{expression}, the following macros can be used to access numerical data cells inside of the input file: \begin{command}{\thisrow\marg{column name}} - Yields the value of the column designated by \marg{column name}. There is no limit on the number of columns which can be part of a mathematical expression, but only values inside of the currently processed \emph{table row} can be used. + Yields the value of the column designated by \meta{column name}. There is no limit on the number of columns which can be part of a mathematical expression, but only values inside of the currently processed \emph{table row} can be used. - It is possible to provide column aliases for \marg{column name} as described in the manual of \PGFPlotstable. + It is possible to provide column aliases for \meta{column name} as described in the manual of \PGFPlotstable. The argument \meta{column name} has to denote either an existing column or one for which a column alias exists (see the manual of \PGFPlotstable). If it can't be resolved, the math parser yields an ``Unknown function'' error message. \end{command} \begin{command}{\thisrowno\marg{column index}} - Similar to |\thisrow|, this command yields the value of the column with index \marg{column index} (starting with $0$). + Similar to |\thisrow|, this command yields the value of the column with index \meta{column index} (starting with $0$). \end{command} \begin{command}{\coordindex} Yields the current index of the table row (starting with $0$). This does \emph{not} count header or comment lines. @@ -765,13 +783,13 @@ Please note that \PGF's math parser uses degrees for trigonometric functions: This allows to access the cell values identified by |x| or |x index| using the ``pointer'' |\columnx|. I am not sure if this yields any advantage, but it is possible nevertheless. If in doubt, prefer using |\thisrow|\marg{column name}. \end{enumerate} - \paragraph{Attention:} If your table has less rows than two, you may need to set |x index={},y index={}| explicitly. This is a consequence of the fact that column name/index access is still applied even if an expression is provided. + \paragraph{Attention:} If your table has less than two rows, you may need to set |x index={},y index={}| explicitly. This is a consequence of the fact that column name/index access is still applied even if an expression is provided. \end{addplotoperation} \subsubsection{Computing Coordinates with Mathematical Expressions (gnuplot)} \begin{addplotoperation}[]{gnuplot}{\oarg{further options}\marg{gnuplot code}} -In contrast to |plot expression|, the |plot gnuplot| command\footnote{Note that |plot gnuplot| is actually a re-implementation of the |plot function| method known from \PGF. It also invokes \PGF\ basic layer commands.} employs the external program |gnuplot| to compute coordinates. The resulting coordinates are written to a text file which will be plotted with |plot file|. \PGF\ checks whether coordinates need to be re-generated and calls |gnuplot| whenever necessary (this is usually the case if you change the number of samples, the argument to |plot gnuplot| or the plotted domain\footnote{Please note that \PGFPlots\ produces slightly different files than \Tikz\ when used with \texttt{plot gnuplot} (it configures high precision output). You should use different \texttt{id} for \PGFPlots\ and \Tikz\ to avoid conflicts in such a case.}). +In contrast to |plot expression|, the |plot gnuplot| command\footnote{Note that \texttt{plot gnuplot} is actually a re-implementation of the |plot function| method known from \PGF. It also invokes \PGF\ basic layer commands.} employs the external program |gnuplot| to compute coordinates. The resulting coordinates are written to a text file which will be plotted with |plot file|. \PGF\ checks whether coordinates need to be re-generated and calls |gnuplot| whenever necessary (this is usually the case if you change the number of samples, the argument to |plot gnuplot| or the plotted domain\footnote{Please note that \PGFPlots\ produces slightly different files than \Tikz\ when used with \texttt{plot gnuplot} (it configures high precision output). You should use different \texttt{id} for \PGFPlots\ and \Tikz\ to avoid conflicts in such a case.}). The differences between |plot expression| and |plot gnuplot| are: \begin{itemize} @@ -811,7 +829,7 @@ The \meta{options} determine the appearance of the plotted function; these param Some remarks: \begin{itemize} - \item The independent variable for one dimensional plots can be change with the |variable| option, just as for |plot expression|. Similarly, the second variable for two dimensional plots can be changed with |variable y|. + \item The independent variable for one-dimensional plots can be changed with the |variable| option, just as for |plot expression|. Similarly, the second variable for two dimensional plots can be changed with |variable y|. For |parametric| plots, the variable names need to be adjusted with |parametric/var 1d| and |parametric/var 2d| (since gnuplot uses |t| and |u,v| as initial values for |parametric| plots). \item @@ -915,10 +933,11 @@ The \meta{options} determine the appearance of the plotted function; these param \end{key} \subsubsection{Using External Graphics as Plot Sources} +{ +\pgfkeys{/pdflinks/search key prefixes in/.add={/pgfplots/plot graphics/,}{}} \begin{addplotoperation}[]{graphics}{\marg{file name}} -\pgfkeys{/pdflinks/search key prefixes in/.add={/pgfplots/plot graphics/,}{}} - This plot type allows to extend the plotting capabilities of \PGFPlots\ beyond its own limitations. The idea is to generate the graphics as such (for example, a contour plot, a complicated shaded surface\footnote{See also section~\ref{sec:pgfplots:surfplots} for an overview of \PGFPlots\ methods to draw shaded surfaces.} or a large point cluster) with an external program like Matlab (tm) or |gnuplot|. The graphics, however, should \emph{not} contain an axis or descriptions. Then, we use |\includegraphics| and an \PGFPlots\ axis which fits exactly on top of the imported graphics. + This plot type allows to extend the plotting capabilities of \PGFPlots\ beyond its own limitations. The idea is to generate the graphics as such (for example, a contour plot, a complicated shaded surface\footnote{See also Section~\ref{sec:pgfplots:surfplots} for an overview of \PGFPlots\ methods to draw shaded surfaces.} or a large point cluster) with an external program like Matlab (tm) or |gnuplot|. The graphics, however, should \emph{not} contain an axis or descriptions. Then, we use |\includegraphics| and a \PGFPlots\ axis which fits exactly on top of the imported graphics. Of course, one could do this manually by providing proper scales and such. The operation |plot graphics| is intended so simplify this process. However the \emph{main difficulty} is to get images with correct bounding box. Typically, you will have to adjust bounding boxes manually. @@ -946,7 +965,7 @@ print -dpng external1 \end{codeexample} \noindent to load the graphics\footnote{Please note that I don't have a Matlab license, so I used \texttt{gnuplot} to produce an equivalent replacement graphics.} just as if we would have drawn it with \PGFPlots. The |axis on top| simply tells \PGFPlots\ to draw the axis on top of any plots (see its description). -Please note that \PGFPlots\ offers support for smaller surface plots as well which might be an option -- unless the number of samples is too large. See section~\ref{sec:pgfplots:surfplots} for details. +Please note that \PGFPlots\ offers support for smaller surface plots as well which might be an option -- unless the number of samples is too large. See Section~\ref{sec:pgfplots:surfplots} for details. \noindent However, external programs have the following advantages here: they are faster, allow more complexity and provide real $z$ buffering which is currently only simulated by \PGFPlots. Thus, it may help to consider |plot graphics| for complicated surface plots. @@ -1034,6 +1053,7 @@ Using |gv|, I determined that the bounding box needs to be shifted |12| units to \end{axis} \end{tikzpicture} \end{codeexample} + \end{addplotoperation} \subsubsection*{Keys To Configure Plot Graphics} @@ -1042,9 +1062,35 @@ The following list of keys configure |\addplot graphics|. Note that the common p \begin{pgfplotsxykeylist}{ plot graphics/\x min=\marg{coordinate}, plot graphics/\x max=\marg{coordinate}} - These keys are required for |plot graphics| and provide information about the external data range. The graphics will be squeezed between these coordinates. The arguments are axis coordinates. + These keys are required for |plot graphics| and provide information about the external data range. The graphics will be squeezed between these coordinates. The arguments are axis coordinates; they are only useful if you provide each of them. + + Alternatively, you can also use the |plot graphics/points| feature to provide the external data range, see below. \end{pgfplotsxykeylist} +\begin{pgfplotskey}{plot graphics/points=\marg{list of coordinates} (initially empty)} + This key also allows to provide the external data range. It constitutes an alternative to |plot graphics/xmin| (and its variants): simply provide at least two coordinates in \meta{list of coordinates}. Their bounding box is used to determine the external data range, and the graphics is squeezed between these coordinates. + + The example from above can be written equivalently as +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[axis on top,title=Graphics Import] + \addplot graphics + % instead of the min/max things: + [points={(0,1) (1,0)}, + % trim=left bottom right top + includegraphics={trim=12 9 12 8,clip}] + {external2}; + \addplot coordinates {(0,0) (1,1)}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The \meta{list of coordinates} is a sequence of the form |(x,y)| for two--dimensional plots and \texttt{(x,y,z)} for three--dimensional ones, the ordering is irrelevant. The single elements are separated by white space. + + It is possible to mix |plot graphics/xmin| and variants with |plot graphics/points|. + + The |plot graphics/points| key has further functionality for inclusion of three--dimensional graphics which is discussed at the end of this section (on page~\pageref{sec:plotgraphics3d}). Here is a short reference on the accepted syntax for three--dimensional plot graphics: in addition to the |(x,y,z)| syntax, you can provide arguments of the form |(x,y,z) => (X,Y)|. Here, the first (three--dimensional) coordinate is a logical coordinate and the second (two--dimensional) coordinate denotes the coordinates of the very same point, but inside of the included image (relative to the lower left corner of the image). Applications and examples for this syntax can be found in the section for three--dimensional plot graphics (see page~\pageref{sec:plotgraphics3d}). +\end{pgfplotskey} + \begin{pgfplotskey}{plot graphics/includegraphics=\marg{options}} A list of options which will be passed as--is to |\includegraphics|. Interesting options include the \declareandlabel{trim}|=|\meta{left} \meta{bottom} \meta{right} \meta{top} key which reduces the bounding box and \pgfmanualpdflabel{/pgfplots/plot graphics/clip}{\declaretext{clip}} which discards everything outside of the bounding box. The scaling options won't have any effect, they will be overwritten by \PGFPlots. \end{pgfplotskey} @@ -1088,3 +1134,230 @@ The following list of keys configure |\addplot graphics|. Note that the common p |plot graphics/lowlevel draw/.code 2 args=|\marg{code which depends on \texttt{\#1} and \texttt{\#2}}. \end{pgfplotskey} +\subsubsection*{Support for External Three-Dimensional Graphics} +\label{sec:plotgraphics3d} +\PGFPlots\ offers several visualization techniques for three dimensional graphics. Nevertheless, complex visualizations or specialized applications are beyond the scope of \PGFPlots\ and you might want to use other tools to generate such figures. + +The |plot graphics| tool of \PGFPlots\ allows to include three--dimensional external graphics: it generates a three--dimensional axis on its own. The idea is to provide a graphics (without descriptions) and use \PGFPlots\ to overlay a three--dimensional axis automatically. This allows to maintain document consistency (making it unnecessary to use different programs within the same document). + +You are probably guessing how this is possible. Well, it needs more user input than two--dimensional external graphics. The cost to include external three dimensional images into \PGFPlots\ is essentially control of a graphics program like |gimp|: you need to identify the 3D coordinates of a couple of points in your image. \PGFPlots\ will then squeeze the graphics correctly, and it reconfigures the axis to ensure a correct display of the result. + +\paragraph{Warning:} The feature is only 95\% stable yet and may need some more testing. Use at your own risk. + +Let's start with two examples. Suppose you generate a surface plot with Matlab and want to include it in \PGFPlots. We have the matlab script +\begin{codeexample}[code only] +[x,y]=meshgrid(linspace(0,1,120)); +surf(x,y,sin(8*pi*x).* exp(-20*(y-0.5).^2) + exp(-(x-0.5).^2*30 - (y-0.25).^2 - (x-0.5).*(y-0.25))) +xlabel('x'), ylabel('y') +axis off +print -dpng plotgraphics3dsurf +\end{codeexample} +\noindent which generates the figure in question. + +After automatically computing a tight bounding box for |plotgraphics3dsurf.png| (I used |gimp|'s Image$\gg$Autocrop feature), and making the background color transparent (|gimp|: select the outer white space with the magic wand, then use\footnote{I have a german version, I am not sure if the translation is correct.} Layer$\gg$Transparency$\gg$Color to Transparency) we get: + +{\setlength{\fboxsep}{0pt}% +\centering +\fbox{\includegraphics[width=6cm]{plotdata/plotgraphics3dsurf.png}}% + +}% + +The key idea is now to identify several points in the image, and assign \emph{both} their logical three--dimensional coordinates \emph{and} the corresponding two--dimensional canvas coordinates in image coordinates. How? Well, the three--dimensional coordinates are known to Matlab, it can display them for you if you click somewhere into the image, compare Figure~\ref{fig:plotgraphics3d} (left). + +\begin{figure} +\noindent +\hbox to \linewidth{\hfill + \includegraphics{plotdata/plotgraphics3dsurfmatlab.png}% + \hfill + \begin{minipage}[b][4cm][c]{2.6cm}% + \includegraphics[width=\linewidth]{plotdata/plotgraphics_gimpmeasure.png}% + \end{minipage} + \hfill +}% + + +\caption{Using Matlab to extract image coordinates (left) and Gimp to measure distances (right).} +\label{fig:plotgraphics3d} +\end{figure} + +The two--dimensional canvas coordinates need work; they need to be provided relative to the \emph{lower left corner} of the image. I used |gimp| and activated ``Points'' as units (lower left corner). The lower left corner now displays the image coordinates in |pt| which is compatible with \PGFPlots. An alternative to pointing onto coordinates is a measurement tool; compare Figure~\ref{fig:plotgraphics3d} (right) for the ``Measure'' tool in |gimp| which allows to compute the length of a line (in our case, the length of the lower left corner to the point of interest). + +I selected four points in the graphics and noted their 2d image coordinates and their 3d logical coordinates as follows: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + grid=both,minor tick num=1, + xlabel=$x$,ylabel=$y$, + ] +\addplot3 graphics[ + points={% important + (0,1,0) => (0,207-112) + (1,0,0) => (446,207-133) + (0.5546,0.5042,1.825) => (236,207) + (0,0,0) => (194,207-202) + }] {plotdata/plotgraphics3dsurf.png}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +Here, the |points| key gets our collected coordinates as argument. It accepts a sequence of maps of the form \meta{3d logical coordinate} | => | \meta{2d canvas coordinate}. In our case, |(0,1,0)| has been found in the |.png| file at |(0,207-112)|. Note that I introduced the difference since |gimp| counts from the upper left, but \PGFPlots\ counts from the lower left. + +Once these four point coordinates are gathered, we find Matlab's surface plot in a \PGFPlots\ axis. You can modify any appearance options, including different axis limits or further |\addplot| commands: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + xmax=1.5,% extra limits + grid=both,minor tick num=1, + xlabel=$x$,ylabel=$y$, + ] +\addplot3[surf] % 'surf' is only used for the legend. + graphics[ + points={ + (0,1,0) => (0,207-112) + (1,0,0) => (446,207-133) + (0.5546,0.5042,1.825) => (236,207) + (0,0,0) => (194,207-202) + }] + {plotdata/plotgraphics3dsurf.png}; +\addlegendentry{Graphics} + +\addplot3+[only marks] coordinates { + (0,1,0) (1,0,0) + (0.5546,0.5042,1.825) (0,0,0) +}; +\addlegendentry{Scatter} +\end{axis} +\end{tikzpicture} +\end{codeexample} +\noindent \PGFPlots\ uses the four input points to compute appropriate |x|, |y| and |z| unit vectors (and the origin in graphics coordinates). These four vectors (with two components each) can be computed as a result of a linear system of size $8\times 8$, that is why you need to provide four input points (each has two coordinates). \PGFPlots\ computes the unit vectors of the imported graphics, and afterwards it rescales the result such that it fits into the specified |width| and |height|. This rescaling respects the |unit vector ratio| (more precisely, it uses |scale mode=scale uniformly| instead of |scale mode=stretch to fill|). Consequently, the freedom to change the view of a three--dimensional axis which contains a projected graphics is considerably smaller than before. Surprisingly, you can still change axis limits and |width| and |height| -- \PGFPlots\ will take care of a correct display of your imported graphics. + +Here is a further example. Suppose we are given the three--dimensional visualization + +{\setlength{\fboxsep}{0pt}% +\centering +\fbox{\includegraphics[width=6cm]{plotdata/risingdrop3d}}% + +}% + +It has been generated by matlab (I only added transparency to the background with |gimp|). Besides advanced visualization techniques, it uses |axis equal|, i.e.\ |unit vector ratio=1 1 1|. As before, we need to identify four points, each with its 3d logical coordinates (from matlab) and the associated 2d canvas coordinates relative to the lower left corner of the graphics (note that there is a lot of white space around the graphics). Here is the output of \PGFPlots\ when you import the resulting graphics: + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + grid=both,minor tick num=1, + xlabel=$x$,ylabel=$y$, + title={\centering + Geometry provided by Sven Gro\ss, Bonn\\ + \url{http://www.igpm.rwth-aachen.de/DROPS}\\}, + title style={text width=6cm,font=\tiny}, +] + \addplot3 graphics[ + points={ + (-0.002625,0.002625,0) => (140,234) + (0,0.00263,0.00263) => (230,364) + (0,-0.00263,-0.00263) => (366,81) + (0,-0.00263,0.00263) => (366,276) + (0.002625,0.002625,0.002625) + } + ] + {plotdata/risingdrop3d.png}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\noindent Note that I provided \emph{five} three--dimensional coordinates here, but the last entry has no |=>| mapping to two--dimensional canvas coordinates. Thus, it is only used to update the bounding box (see the reference manual for the |points| key for details). + +The example above is clipped because \PGFPlots\ could not rescale the graphics automatically. Changing the ratio between |width| and |height| improves the display: + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + height=8cm,width=7cm,% improve scaling manually + grid=both,minor tick num=1, + xlabel=$x$,ylabel=$y$, + title={\centering + Geometry provided by Sven Gro\ss, Bonn\\ + \url{http://www.igpm.rwth-aachen.de/DROPS}\\}, + title style={text width=6cm,font=\tiny}, +] + \addplot3 graphics[ + points={ + (-0.002625,0.002625,0) => (140,234) + (0,0.00263,0.00263) => (230,364) + (0,-0.00263,-0.00263) => (366,81) + (0,-0.00263,0.00263) => (366,276) + (0.002625,0.002625,0.002625) + } + ] + {plotdata/risingdrop3d.png}; +\end{axis} +\end{tikzpicture} +\end{codeexample} +\noindent What happens is that \PGFPlots\ \emph{only} rescales the $z$ axis. This has the effect that the axes are all scaled by a single scaling factor (using |scale mode=scale uniformly|), skewing is avoided. In this approach, you can only modify |width| and |height| to provide more freedom. + +We consider a third example which has been generated by the Matlab code +\begin{codeexample}[code only] +clear all +close all +seed = sum(clock) +rand('seed',seed); +X = rand(10,10,10); +data = smooth3(X,'box',5); +p1 = patch(isosurface(data,.5), ... + 'FaceColor','blue','EdgeColor','none'); +p2 = patch(isocaps(data,.5), ... + 'FaceColor','interp','EdgeColor','none'); +isonormals(data,p1) +daspect([1 2 2]) +view(3); axis vis3d tight +camlight; lighting phong +% print -dpng plotgraphics3withaxis +axis off +print -dpng plotgraphics3 +save plotgraphics3.seed seed -ASCII % to reproduce the result +\end{codeexample} +\noindent I only added background transparency with |gimp| and got the following graphics: + +{\setlength{\fboxsep}{0pt}% +\centering +\fbox{\includegraphics[width=6cm]{plotdata/plotgraphics3.png}}% + +}% + +We proceed as before and collect four points, each with 3d logical coordinates (by clicking into the matlab figure) and their associated 2d canvas (graphics) coordinates using the measure tool of gimp. The result is shown in the code example below. +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + grid=both,minor tick num=1, + xlabel=$x$,ylabel=$y$, + 3d box, +] + \addplot3 graphics[ + points={ + (1,1,1) => (205,48) + (10,1,10) => (503,324) + (1,1,4.044)=> (206,102) + (10,10,10) => (390,398) + } + ] + {plotdata/plotgraphics3.png}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + +\paragraph{Technical points:} the following issues might arise while working with \verbpdfref{\addplot3} |graphics|: +\begin{itemize} + \item It must be possible to deduce the origin and the three (two--dimensional) unit vectors from the four provide |points|; otherwise the algorithm will fail. + + The algorithm should detect any deficiancies. However, if you encounter strange ``Dimension too large'' messages here, you can try other arguments in |points|. Take a look into your log file, it will probably indicate the source of problems (or use the |debug| key). + + \item \PGFPlots\ uses the first two points to squeeze the graphics into the desired coordinates (which implies that they should not have the same canvas $X$ or $Y$ coordinates). It verifies that the remaining |points| arguments are projected correctly. + \item The resulting scaling by means of |scale mode=scale uniformly| will only rescale the $z$ axis. You may need to adjust |width| and |height| (both of them) if the result is unsatisfactory (see the example above). + \item There is a |debug| key to investigate what the algorithm is doing: +\begin{pgfplotskey}{plot graphics/debug=\marg{true,false} (initially false)} + If you provide |\addplot3 graphics[debug,points={...}]|, \PGFPlots\ will provide debug information onto your terminal and into the logfile. It will also generate extra files containing the determined unit vectors and the linear system used to derive them (one such file for every |\addplot3 graphics| statement, the filename will be the graphics file name and |.dat| appended). + + Without the |debug| key, only the log file will contain brief information what \PGFPlots\ is doing behind the scenes. +\end{pgfplotskey} +\end{itemize} +} + +}% diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.axisdescription.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.axisdescription.tex index f2b4ad810de..a97eb068e5e 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.axisdescription.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.axisdescription.tex @@ -7,14 +7,14 @@ This section describes how to \emph{modify} the placement of titles, labels, leg There are different methods to place axis descriptions. One of them is to provide coordinates relative to the axis' rectangle such that |(0,0)| is the lower left corner and |(1,1)| is the upper right corner -- this is very useful for figure titles or legends. Coordinates of this type, i.e.\ without unit like |(0,0)| or |(1.03,1)|, are called |axis description cs| (the |cs| stands for ``coordinate system''). One other method is of primary interest for axis labels -- they should be placed near the tick labels, but it a way that they don't overlap or obscure tick labels. Furthermore, axis labels shall be placed such that they are automatically moved if the axis is rotated (or tick labels are moved to the right side of the figure). There is a special coordinate system to realize these two demands, the |ticklabel cs|. -In the following, the two coordinate systems |axis description cs| and |ticklabel cs| are described in more details. It should be noted that |axis description cs| is used automatically, so it might never be necessary to use it explicitly. +In the following, the two coordinate systems |axis description cs| and |ticklabel cs| are described in more detail. It should be noted that |axis description cs| is used automatically, so it might never be necessary to use it explicitly. \begin{coordinatesystem}{axis description cs} \label{pgfplots:sec:axis:description:cs} A coordinate system which is used to place axis descriptions. Whenever the option `|at={(|\meta{x}|,|\meta{y}|)}|' occurs in |label style|, |legend style| or any other axis description, |(|\meta{x}|,|\meta{y}|)| is interpreted to be a coordinate in |axis description cs|. - The point $(0,0)$ is always the lower left corner of the tightest bounding box around the axis (without any descriptions or ticks) while the point $(1,1)$ is the upper right corner of this bounding box. + The point $(0,0)$ is always the lower left corner of the tightest bounding box around the axes (without any descriptions or ticks) while the point $(1,1)$ is the upper right corner of this bounding box. In most cases, it is \emph{not} necessary to explicitly write |axis description cs| as it is the default coordinate system for any axis description. An example for how coordinates are placed is shown below. @@ -60,7 +60,7 @@ Axis descriptions are \Tikz\ nodes, that means all placement and detail options \paragraph{Remarks:} \begin{itemize} - \item Each of the anchors described in section~\ref{pgfplots:sec:align} can be described by |axis description cs| as well. + \item Each of the anchors described in Section~\ref{pgfplots:sec:align} can be described by |axis description cs| as well. \item The |axis description cs| is independent of axis reversals or skewed axes. Only for the default configuration of boxed axes is it the same as |rel axis cs|, i.e.\ |(0,0)| is the same as the smallest axis coordinate and |(1,1)| is the largest one in case of standard boxed axes\footnote{This was different in versions before 1.3: earlier versions did not have the distinction between \texttt{axis description cs} and \texttt{rel axis cs}.}. @@ -163,7 +163,7 @@ Of course, it is relatively simple to get the same coordinates as in the two dim \end{tikzpicture} \end{codeexample} - The coordinate |ticklabel cs:0| is associated to the lower axis limit while |ticklabel cs:1| is near the upper axis limit. The value |0.5| is in the middle of the axis, any other values (including negative values or values beyond $1$) are linearly interpolated inbetween. + The coordinate |ticklabel cs:0| is associated with the lower axis limit while |ticklabel cs:1| is near the upper axis limit. The value |0.5| is in the middle of the axis, any other values (including negative values or values beyond $1$) are linearly interpolated inbetween. The |ticklabel cs| also accepts a second (optional) argument: a shift ``away'' from the tick labels. The shift points to a vector which is orthogonal to the associated axis, away from the tick labels. A shift of |0pt| is directly at the edge of the tick labels in direction of the normal vector, positive values move the position away and negative closer to the tick labels. \begin{codeexample}[width=4cm] @@ -194,18 +194,18 @@ Of course, it is relatively simple to get the same coordinates as in the two dim Whenever the |ticklabel cs| is used, the anchor should be set to |anchor=near ticklabel| (see below). - There is one speciality: if you reverse an axis (with |x dir=reverse|), points provided by |ticklabel cs| will be \emph{unaffected} by the axis reversal. This is intented to provide consistent placement even for reversed axes. Use |allow reversal of rel axis cs=false| to disable this feature. + There is one specialty: if you reverse an axis (with |x dir=reverse|), points provided by |ticklabel cs| will be \emph{unaffected} by the axis reversal. This is intented to provide consistent placement even for reversed axes. Use |allow reversal of rel axis cs=false| to disable this feature. \end{coordinatesystemlist} -Besides the mentioned positioning methods, there is also the predefined node |current axis|. The anchors of |current axis| can also be used to place descriptions: At the time when axis descriptions are drawn, all anchors which refer to the axis origin (that means the ``real'' point $(0,0)$) or any of the axis corners can be referenced using |current axis.|\meta{anchor name}. Please see section~\ref{pgfplots:sec:align}, Alignment, for further details. +Besides the mentioned positioning methods, there is also the predefined node |current axis|. The anchors of |current axis| can also be used to place descriptions: At the time when axis descriptions are drawn, all anchors which refer to the axis origin (that means the ``real'' point $(0,0)$) or any of the axis corners can be referenced using |current axis.|\meta{anchor name}. Please see Section~\ref{pgfplots:sec:align}, Alignment, for further details. \subsubsection{Alignment of Axis Descriptions} This section describes how to modify the default alignment of axis descriptions. It can be skipped at first reading. The two topics positioning and alignment always work together: \emph{positioning} means to select an appropriate coordinate and \emph{alignment} means to select an anchor inside of the description which will actually be moved to the desired position. -\Tikz\ uses many anchors to provide alignment; most of them are named like |north|, |north east| etc. These names hold for any axis description as well (as axis description are \Tikz\ nodes). Readers can learn details about this topic in the \Tikz\ manual~\cite{tikz} or some more advice in section~\ref{pgfplots:sec:align}. +\Tikz\ uses many anchors to provide alignment; most of them are named like |north|, |north east| etc. These names hold for any axis description as well (as axis descriptions are \Tikz\ nodes). Readers can learn details about this topic in the \Tikz\ manual~\cite{tikz} or some more advice in Section~\ref{pgfplots:sec:align}. When it comes to axis descriptions, \PGFPlots\ offers some specialized anchors and alignment methods which are described below. \begin{anchorlist}{near xticklabel,near yticklabel,near zticklabel,near ticklabel} @@ -255,12 +255,15 @@ When it comes to axis descriptions, \PGFPlots\ offers some specialized anchors a In more detail, the anchor is placed such that first, the node's center is on a line starting in the node's |at| position going in direction of the inwards normal vector of the axis line which contains the tick labels and second, the node does not intrude the axis. This normal vector is the same which is used for the shift argument in |ticklabel cs|: it is orthogonal to the tick label axis. Furthermore, |near ticklabel| inverts the transformation matrix before it computes this intersection point. - The |near ticklabel| anchor and its friends will be added temporarily to any shape used inside of an axis. This includes axis description, but it is not limited to them: it applies to every \Tikz\ |\node[anchor=near xticklabel] ...| setting. + The |near ticklabel| anchor and its friends will be added temporarily to any shape used inside of an axis. This includes axis descriptions, but it is not limited to them: it applies to every \Tikz\ |\node[anchor=near xticklabel] ...| setting. Note that it is not necessary at all to \emph{have} tick labels in an axis. The anchor will be placed such that it is near the axis on which tick labels \emph{would} be drawn. In fact, every tick label uses |anchor=near ticklabel| as initial configuration. \end{anchorlist} -\begin{pgfplotsxykeylist}{/tikz/sloped like \x\space axis} +\begin{pgfplotsxykeylist}{% + /tikz/sloped like \x\space axis,% + /tikz/sloped like \x\space axis=\marg{options} +} A key which replaces the rotational / scaling parts of the transformation matrix such that the node is sloped like the provided axis. For two dimensional plots, |sloped like y axis| is effectively the same as |rotate=90|. For a three dimensional axis, this will lead to a larger difference: \pgfplotsexpensiveexample \begin{codeexample}[] @@ -277,21 +280,37 @@ When it comes to axis descriptions, \PGFPlots\ offers some specialized anchors a \end{axis} \end{tikzpicture} \end{codeexample} - - Inside of axis labels, |sloped| is an alias |sloped like |\meta{char}| axis| with the correct \meta{char} chosen automatically. + + Inside of axis labels, |sloped| is an alias for |sloped like |\meta{char}| axis| with the correct \meta{char} chosen automatically. Please note that rotated text might not look very good (neither on screen nor printed). + + It is possible to customize |sloped like x axis| by means of the following keys, which need to be provided as \meta{options} (simply ignore the lengthy gray key prefixes): +\pgfkeys{ + /pgfmanual/gray key prefixes={/pgfplots/sloped/}, +} + \begin{key}{/pgfplots/sloped/allow upside down=\mchoice{true,false} (initially false)} + Use |sloped like x axis=allow upside down| to enable upside down labels. + \end{key} + \begin{key}{/pgfplots/sloped/execute for upside down=\mchoice{code} (initially empty)} + Use |sloped like x axis={execute for upside down=\tikzset{anchor=north}}| or something like that to handle upside down text nodes in a customized way (this is used by the |smithchart| library). + \end{key} + \begin{key}{/pgfplots/sloped/reset nontranslations=\mchoice{true,false} (initially true)} + Use |sloped like x axis={reset nontranslations=false}| to \emph{append} the transformations to the actual transformation matrix (instead of replacing it). + \end{key} \end{pgfplotsxykeylist} \subsubsection{Labels} \begin{pgfplotsxykey}{\x label=\marg{text}} -These options set axis labels to \marg{text} which is any \TeX\ text. Use curly braces to include special characters, for example ``|xlabel={, = characters}|'' if characters like `|=|' or `|,|' need to be included literally. + These options set axis labels to \meta{text} which is any \TeX\ text. + + To include special characters, you can use curly braces: ``|xlabel={, = characters}|''. This is necessary if characters like `|=|' or `|,|' need to be included literally. Use |xlabel/.add=|\marg{prefix}\marg{suffix} to modify an already assigned label. -Labels are \Tikz-Nodes which are placed with +Labels are \Tikz-nodes which are placed with \begin{codeexample}[code only] % for x: \node @@ -305,12 +324,22 @@ Labels are \Tikz-Nodes which are placed with \end{codeexample} so their position and appearance can be customized. -\paragraph{Upgrade notice:} Since version 1.3, label placement \emph{can} respect the size of adjacent tick labels. Use |\pgfplotsset{compat=1.3}| in the preamble to activate this feature. See |xlabel near ticks| for details. + For example, a multiline |xlabel| can be configured using + \index{xlabel!Multiline} + \index{xlabel!Line break} +\begin{codeexample}[code only] +\begin{axis}[xlabel style={align=right,text width=3cm},xlabel=A quite long label with a line break] +... +\end{axis} +\end{codeexample} + \noindent See \cite{tikz} to learn more about |align| and |text width|. + +\paragraph{Upgrade notice:} Since version 1.3, label placement \emph{can} respect the size of adjacent tick labels. Use |\pgfplotsset{compat=1.3}| (or newer) in the preamble to activate this feature. See |xlabel near ticks| for details. \begin{pgfplotsxykeylist}{\x label shift=\marg{dimension} (initially 0pt),label shift=\marg{dimension}} - Shifts labels in direction of the outer normal vector of the axis by an amount of \marg{dimension}. The |label shift| sets all three label shifts to the same value. + Shifts labels in direction of the outer normal vector of the axis by an amount of \meta{dimension}. The |label shift| sets all three label shifts to the same value. - \paragraph{Attention:} This does only work if |\pgfplotsset{compat=1.3}| has been called (More precisely: if |xlabel near ticks| is active for the respective axis). + \paragraph{Attention:} This does only work if |\pgfplotsset{compat=1.3}| (or newer) has been called (more precisely: if |xlabel near ticks| is active for the respective axis). \end{pgfplotsxykeylist} \begin{pgfplotsxykeylist}{\x label near ticks,compat=1.3} @@ -334,7 +363,7 @@ so their position and appearance can be customized. It is encouraged to write \begin{codeexample}[code only] -\pgfplotsset{compat=1.3} +\pgfplotsset{compat=1.3} % or newer \end{codeexample} \noindent in your preamble to install the styles document-wide -- it leads to the best output (it avoids unnecessary space). It is not activated initially for backwards compatibility with older versions which used fixed distances from the tick labels. \end{pgfplotsxykeylist} @@ -372,7 +401,7 @@ Whenever possible, consider using |/.append style| instead of overwriting the de \end{pgfplotsxykey} \begin{pgfplotskey}{title=\marg{text}} -Adds a caption to the plot. This will place a \Tikz-Node with +Adds a caption to the plot. This will place a \Tikz-node with \begin{codeexample}[code only] \node[every axis title] {text}; \end{codeexample} @@ -419,7 +448,7 @@ to the current axis. % \end{loglogaxis} % \end{tikzpicture} %-------------------------------------------------- -The title's appearance and/or placing can be reconfigured with +The title's appearance and/or placement can be reconfigured with \begin{codeexample}[code only] \pgfplotsset{title style={at={(0.75,1)}}} % or, equivalently, @@ -431,7 +460,7 @@ Use |title/.add=|\marg{prefix}\marg{suffix} to modify an already assigned title. \end{pgfplotskey} \begin{pgfplotscodekey}{extra description} -Allows to insert \marg{commands} after axis labels, titles and legends have been typeset. +Allows to insert \meta{commands} after axis labels, titles and legends have been typeset. As all other axis descriptions, the code can use $(0,0)$ to access the lower left corner and $(1,1)$ to access the upper right one. It won't be clipped. \begin{codeexample}[] @@ -502,7 +531,7 @@ Using |\addlegendentry| disables the key |legend entries|. The invocation |\addlegendentryexpanded{$x^\p$}| is equivalent to calling |\addlegendentry{$x^2$}| if |\p| expands to |2|. - The argument \meta{\TeX\ text} is expanded until nothing but un-expandable material remains (i.e.\ it uses the \TeX\ primitive |\edef|). Occasionally, \marg{\TeX\ text} contains parts which should be expanded (like |\p|) and other parts which should be left unexpanded (for example |\pgfmathprintnumber{\p}|). Then, use + The argument \meta{\TeX\ text} is expanded until nothing but un-expandable material remains (i.e.\ it uses the \TeX\ primitive |\edef|). Occasionally, \meta{\TeX\ text} contains parts which should be expanded (like |\p|) and other parts which should be left unexpanded (for example |\pgfmathprintnumber{\p}|). Then, use |\noexpand\pgfmathprintnumber{\p}| @@ -521,7 +550,7 @@ You can use |\legend|\marg{list} to assign a complete legend. \begin{codeexample}[code only] \legend{$d=2$,$d=3$,$d=4$,$d=5$,$d=6$} \end{codeexample} -The argument of |\legend| is list of entries, one for each plot. +The argument of |\legend| is a list of entries, one for each plot. Two different delimiters are supported: \begin{enumerate} @@ -541,7 +570,7 @@ Two different delimiters are supported: \end{codeexample} This syntax simplifies the use of `|,|' inside of legend entries, but it does not support the dots--notation. \end{enumerate} -The short marker/line combination shown in legends is acquired from the \marg{style options} argument of |\addplot|. +The short marker/line combination shown in legends is acquired from the \meta{style options} argument of |\addplot|. Using |\legend| overwrites any other existing legend entries. \end{command} @@ -568,16 +597,16 @@ Using |\legend| overwrites any other existing legend entries. \end{axis} \end{tikzpicture} \end{codeexample} - Please be careful with whitespaces in \marg{comma separated list}: they will contribute to legend entries. Consider using `|%|' at the end of each line in multiline arguments (the end of line character is also a whitespace in \TeX). + Please be careful with whitespaces in \meta{comma separated list}: they will contribute to legend entries. Consider using `|%|' at the end of each line in multiline arguments (the end of line character is also a whitespace in \TeX). Just as for |\addlegendentry|, it is possible to provide \oarg{options} to single descriptions. To do so, place the options in square brackets right before the text: \begin{codeexample}[] \begin{tikzpicture} - \begin{axis}[legend entries={$x$,[red]$x^2$,$x^3$}] +\begin{axis}[legend entries={$x$,[red]$x^2$,$x^3$}] \addplot {x}; \addplot {x^2}; \addplot {x^3}; - \end{axis} +\end{axis} \end{tikzpicture} \end{codeexample} If the square brackets contain a comma, you can enclose the complete entry in curly braces like |{[red,font=\Huge]Text}| (or you can use the `|\\|' delimiters). @@ -606,7 +635,7 @@ will draw it at the lower left corner of the axis while means the upper right corner. The `|anchor|' option determines which point \emph{of the legend} will be placed at $(0,0)$ or $(1,1)$. The legend is a \Tikz-matrix, so one can use any \Tikz\ option which affects -nodes and matrizes (see~\cite[section 13~and~14]{tikz}). The matrix is created by something like +nodes and matrices (see~\cite[section 13~and~14]{tikz}). The matrix is created by something like \begin{codeexample}[code only] \matrix[style=every axis legend] { draw plot specification 1 & \node{legend 1}\\ @@ -710,6 +739,28 @@ Whenever possible, consider using |/.append style| to keep the default styles ac \begin{codeexample}[code only] \pgfplotsset{every axis legend/.append style={...}} \end{codeexample} + +Note that in order to disable drawing of the legend box, you can use |draw=none| as style argument: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[tiny,title=With legend box] +\addplot[blue]{x}; +\addplot[red]{2*x}; +\legend{$x$,$2x$} +\end{axis} +\end{tikzpicture} +\end{codeexample} + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[tiny,title=Without legend box, + legend style={draw=none}] +\addplot[blue]{x}; +\addplot[red]{2*x}; +\legend{$x$,$2x$} +\end{axis} +\end{tikzpicture} +\end{codeexample} \end{stylekey} \pgfplotsshortstylekey legend style=every axis legend\pgfeov @@ -814,7 +865,7 @@ Whenever possible, consider using |/.append style| to keep the default styles ac \end{axis} \end{tikzpicture} \end{codeexample} - They are actually just styles for commonly used alignment choices: the choice |left| is equivalent to |legend style={cells={anchor=west}}|, the choice |right| is equivalent to |legend style={cells={anchor=east}}| and |center| to |legend style={cells={anchor=center}}|. Using different values allows more control over cell alignment. + They are actually just styles for commonly used alignment choices: the choice |left| is equivalent to |legend style={cells={anchor=west}}|; the second choice |right| is equivalent to |legend style={cells={anchor=east}}|, and |center| to |legend style={cells={anchor=center}}|. Using different values allows more control over cell alignment. \end{pgfplotskey} } @@ -840,7 +891,7 @@ Configures where the small line specifications will be drawn: left of the descri coordinates {(0.5,0.75) (1,1) (1.5,0.75)}; \addplot+[mark=none,smooth,domain=0:2] {-x*(x-2)}; - \addlegendentry{Parable} + \addlegendentry{Parabola} \end{axis} \end{tikzpicture} \end{codeexample} @@ -852,7 +903,7 @@ Configures where the small line specifications will be drawn: left of the descri \begin{pgfplotscodekey}{legend image code} \label{opt:legend:image:code} Allows to replace the default images which are drawn inside of legends. When this key is evaluated, the current plot specification has already been activated (using |\begin{scope}[current plot style]|)% -\footnote{This was different in versions before 1.3. The new scope features allows plot styles to change \texttt{legend image code}.}, so any drawing operations use the same styles as the |\addplot| command. +\footnote{This was different in versions before 1.3. The new scope features allow plot styles to change \texttt{legend image code}.}, so any drawing operations use the same styles as the |\addplot| command. The default is the style |line legend|. @@ -877,7 +928,7 @@ The default is the style |line legend|. } \end{codeexample} - The style |line legend| can also be used to use a different legend style for one particular plot (see the docs for |area legend| for an example). + The style |line legend| can also be used to apply a different legend style to one particular plot (see the documentation on |area legend| for an example). \end{stylekey} \begin{stylekey}{/pgfplots/empty legend} @@ -935,7 +986,7 @@ The default is the style |line legend|. \end{axis} \end{tikzpicture} \end{codeexample} -The initial values for these styles might be interesting if someone wants to modify them. Here are they: +The initial values for these styles might be interesting if someone wants to modify them. Here they are: \begin{codeexample}[code only] \pgfplotsset{ /pgfplots/xbar legend/.style={ @@ -1005,7 +1056,7 @@ The initial values for these styles might be interesting if someone wants to mod legend transposed=\mchoice{true,false} (initially false)} Allows to transpose the order in which the pairs (legend entry, plot style) are drawn. - Consider a set of $3$ experiments, each consisting of $2$ parameter. We might want to draw them together as in the following example: + Consider a set of $3$ experiments, each consisting of $2$ parameters. We might want to draw them together as in the following example: \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[ @@ -1087,7 +1138,7 @@ It appears the model \ref{pgfplots:label2} fits the data appropriately. Finally, \ref{pgfplots:label3} is only here to get three examples. \begin{commandlist}{\label\marg{label name},\label\oarg{reference}\marg{label name}} - When used after |\addplot|, this command creates a \LaTeX\ label named \marg{label name}\footnote{This feature is \emph{only} available in \LaTeX, sorry.}. If this label is cross-referenced with |\ref|\marg{label name} somewhere, the associated plot specification will be inserted. + When used after |\addplot|, this command creates a \LaTeX\ label named \meta{label name}\footnote{This feature is \emph{only} available in \LaTeX, sorry.}. If this label is cross-referenced with |\ref|\marg{label name} somewhere, the associated plot specification will be inserted. \begin{codeexample}[] Label3 = \ref{pgfplots:label3}; Label2 = \ref{pgfplots:label2} @@ -1103,7 +1154,7 @@ Label2 = \ref{pgfplots:label2} The second syntax, |\label|\oarg{reference}\marg{label name} allows to label particular pieces of an |\addplot| command. It is (currently) only interesting for |scatter/classes|: there, it allows to reference particular classes of the scatter plot. See page~\pageref{pgfplots:scatterclasses} for more details. - Note that |\label| information, even the small \Tikz\ pictures here, can be combined with the |external| library for image externalization, see section~\ref{sec:pgfplots:export} for details (in particular, the |external/mode| key). In other words, references remain valid even if the defining axis has been externalized. + Note that |\label| information, even the small \Tikz\ pictures here, can be combined with the |external| library for image externalization, see Section~\ref{sec:pgfplots:export} for details (in particular, the |external/mode| key). In other words, references remain valid even if the defining axis has been externalized. \end{commandlist} \begin{command}{\ref\marg{label name}} @@ -1132,7 +1183,7 @@ Label2 = \ref{pgfplots:label2} invoke after crossref tikzpicture=\marg{\TeX\ code}} Code which is invoked just before or just after every cross reference picture. This applies to legend images generated with |\ref|, |legend to name| and |colorbar to name| images. - The initial configuration checks if the |external| library is in effect. If so, it calls |\tikzappendtofigurename{_crossref}|. + The initial configuration checks if the |external| library is in effect. If so, it modifies the generated figure names by means of |\tikzappendtofigurename{_crossref}|. \index{crossref file suffix} \end{pgfplotskeylist} @@ -1204,9 +1255,9 @@ Thus, typing |\ref|\marg{name} somewhere outside of the axis, maybe even outside If you want the legend to be exported \emph{and} drawn inside of the current axis, consider using |extra description/.append code={\ref|\marg{name}|}|. - Note that |\ref| can be combined with the |external| library for image externalization. In other words, the legend will work even if the defining axis has been externalized, see section~\ref{sec:pgfplots:export} for details (in particular the |external/mode| key). + Note that |\ref| can be combined with the |external| library for image externalization. In other words, the legend will work even if the defining axis has been externalized, see Section~\ref{sec:pgfplots:export} for details (in particular the |external/mode| key). - Note furthermore that this |.aux| file related stuff is (currently) only supported for \LaTeX, sorry. + Note furthermore that this |.aux| file related stuff is (currently) only supported, if \PGFPlots\ is run by means of \LaTeX, sorry. \begin{command}{\pgfplotslegendfromname\marg{name}} This command poses an equivalent alternative for |\ref|\marg{name}: it has essentially the same effect, but it does not create links when used with the |hyperref| package\footnote{Since this manual uses colored links, the text in \texttt{\string\ref} would usually be blue. Using \texttt{\string\pgfplotslegendfromname} avoids link text colors in the legend (this has been applied to the manual styles here).}. \end{command} @@ -1214,8 +1265,8 @@ Thus, typing |\ref|\marg{name} somewhere outside of the axis, maybe even outside \begin{stylekey}{/pgfplots/every legend to name picture} A style which is installed when |\ref| is used outside of a picture: a new picture will be created with |\tikz[/pgfplots/every legend to name picture]|. - Thus, you can re-define this style to set alignment options (such as |baseline|). - For example, the initialisation + Thus, you can redefine this style to set alignment options (such as |baseline|). + For example, the initialization \begin{codeexample}[code only] \pgfplotsset{ legend style={matrix anchor=west,at={(0pt,0pt)}}, @@ -1223,7 +1274,7 @@ Thus, typing |\ref|\marg{name} somewhere outside of the axis, maybe even outside } ... \end{codeexample} - \noindent will cause the legend to be positioned such that its |west| anchor is at |y=0pt|. The |baseline| option will align this point of the legend with the text baseline (please refer to the documentation for |baseline| in section~\ref{pgfplots:sec:align} for details). + \noindent will cause the legend to be positioned such that its |west| anchor is at |y=0pt|. The |baseline| option will align this point of the legend with the text baseline (please refer to the documentation for |baseline| in Section~\ref{pgfplots:sec:align} for details). \end{stylekey} \end{pgfplotskey} @@ -1234,7 +1285,7 @@ Thus, typing |\ref|\marg{name} somewhere outside of the axis, maybe even outside Each |\addplot| command appends its plot style options to a list, and |\addlegendimage| adds \meta{options} to the very same list. - Thus, the effect is as if you had provided |\addplot|\oarg{options}, but |\addlegendimage| bypasses all the logic usually associated with a plot. In other words: except for the legend, the state of the axis remains as if the command would not have been drawn. Not even the current plot's index is advanced. + Thus, the effect is as if you had provided |\addplot|\oarg{options}, but |\addlegendimage| bypasses all the logic usually associated with a plot. In other words: except for the legend, the state of the axis remains as if the command would not have been issued. Not even the current plot's index is advanced. \begin{codeexample}[] \begin{tikzpicture} @@ -1270,7 +1321,7 @@ Occasionally, one may want multiple lines for legend entries. That is possible a \addplot {x^3}; \addlegendentry{$x^3$} \addlegendimage{empty legend} \addlegendentry[text width=25pt,text depth=] - {Neg Sign:} + {Neg. Sign:} \addplot {x^(-1)}; \addlegendentry{$x^{-1}$} \addplot {x^(-2)}; \addlegendentry{$x^{-2}$} \addplot {x^(-3)}; \addlegendentry{$x^{-3}$} @@ -1325,7 +1376,7 @@ Note that legend texts are realized using |\node|\oarg{options} \marg{text}|;|, These keys allow to choose the locations of the axis lines. The last one, |axis lines| sets the same value for every axis. Ticks and tick labels are placed according to the chosen value as well. -The choice |bottom| will draw the $x$ line at $y=y_\text{min}$, |middle| will draw the $x$~line at $y=0$, and |top| will draw it at $y=y_\text{max}$. Finally, |box| is a combination of options |top| and |bottom|. The $y$~variant works similarly. +The choice |bottom| will draw the $x$ line at $y=y_{\text{min}}$, |middle| will draw the $x$~line at $y=0$, and |top| will draw it at $y=y_{\text{max}}$. Finally, |box| is a combination of options |top| and |bottom|. The $y$~variant works similarly. The case |center| is a synonym for |middle|, both draw the line through the respective coordinate~$0$. If this coordinate is not part of the axis limit, the lower axis limit is chosen instead. @@ -1333,7 +1384,7 @@ The case |center| is a synonym for |middle|, both draw the line through the resp The starred versions $\dotsc$|line*| \emph{only} affect the axis lines, without correcting the positions of axis labels, tick lines or other keys which are (possibly) affected by a changed axis line. The non-starred versions are actually styles which set the starred key \emph{and} some other keys which also affect the figure layout: \begin{itemize} \item In case |axis x line=box|, the style |every boxed x axis| will be installed immediately. - \item In case |axis x line|$\neq$|box|, the style |every non boxed x axis| will be installed immediately. Furthermore, axis labels positions will be adjusted to fit the choosen value. + \item In case |axis x line|$\neq$|box|, the style |every non boxed x axis| will be installed immediately. Furthermore, axis labels positions will be adjusted to fit the chosen value. \end{itemize} The same holds true for the |y|-variants. The default styles are defined as \begin{codeexample}[code only] @@ -1422,7 +1473,7 @@ Feel free to overwrite these styles if the default doesn't fit your needs or tas In case |middle|, the style |every inner axis x line| allows to adjust the appearance. -Note that three dimensional axes only support to use the same value for every axis, i.e.\ three dimensional axes support only the |axis lines| key (or, preferably for 3D axes, the |axis lines*| key -- check what looks best). See section~\ref{sec:pgfplots:axislines:3d} for examples of three dimensional axis line variations. +Note that three dimensional axes only support to use the same value for every axis, i.e.\ three dimensional axes support only the |axis lines| key (or, preferably for 3D axes, the |axis lines*| key -- check what looks best). See Section~\ref{sec:pgfplots:axislines:3d} for examples of three dimensional axis line variations. \end{pgfplotskeylist} \begin{pgfplotsxykey}{every inner \x\ axis line} @@ -1467,6 +1518,40 @@ Note that three dimensional axes only support to use the same value for every ax \end{codeexample} \end{pgfplotsxykey} +\label{pgfplots:page:axislines} +\begin{pgfplotskey}{axis line style=\marg{key-value-list}} + A command which appends \meta{key-value-list} to \emph{all} axis line appearance styles. +\end{pgfplotskey} + +\begin{pgfplotskey}{inner axis line style=\marg{key-value-list}} + A command which appends \meta{key-value-list} to both, |every inner x axis line| and the $y$ variant. +\end{pgfplotskey} +\begin{pgfplotskey}{outer axis line style=\marg{key-value-list}} + A command which appends \meta{key-value-list} to both, |every outer x axis line| and the $y$ variant. +\end{pgfplotskey} +\begin{pgfplotsxykey}{\x\ axis line style=\marg{key-value-list}} + A command which appends \meta{key-value-list} to all axis lines styles for either $x$ or $y$ axis. +\end{pgfplotsxykey} + +\begin{pgfplotsxykey}{every boxed \x\ axis} + A style which will be installed as soon as |axis x line=box| (|y|) is set. + + The default is simply empty. +\end{pgfplotsxykey} +\begin{pgfplotsxykey}{every non boxed \x\ axis} + A style which will be installed as soon as |axis x line| (|y|) will be set to something different than |box|. + + The default is +\begin{codeexample}[code only] +\pgfplotsset{ + every non boxed x axis/.style={ + xtick align=center, + enlarge x limits=false, + x axis line style={-stealth}}} +\end{codeexample} + \noindent with similar values for the |y|-variant. Feel free to redefine this style to your needs and taste. +\end{pgfplotsxykey} + \begin{pgfplotskey}{separate axis lines=\marg{true,false} (default true)} Enables or disables separate path commands for every axis line. This option affects \emph{only} the case if axis lines are drawn as a \emph{box}. @@ -1513,40 +1598,6 @@ Note that three dimensional axes only support to use the same value for every ax \end{pgfplotskey} -\label{pgfplots:page:axislines} -\begin{pgfplotskey}{axis line style=\marg{key-value-list}} - A command which appends \marg{key-value-list} to \emph{all} axis line appearance styles. -\end{pgfplotskey} - -\begin{pgfplotskey}{inner axis line style=\marg{key-value-list}} - A command which appends \marg{key-value-list} to both, |every inner x axis line| and the $y$ variant. -\end{pgfplotskey} -\begin{pgfplotskey}{outer axis line style=\marg{key-value-list}} - A command which appends \marg{key-value-list} to both, |every outer x axis line| and the $y$ variant. -\end{pgfplotskey} -\begin{pgfplotsxykey}{\x\ axis line style=\marg{key-value-list}} - A command which appends \marg{key-value-list} to all axis lines styles for either $x$ or $y$ axis. -\end{pgfplotsxykey} - -\begin{pgfplotsxykey}{every boxed \x\ axis} - A style which will be installed as soon as |axis x line=box| (|y|) is set. - - The default is simply empty. -\end{pgfplotsxykey} -\begin{pgfplotsxykey}{every non boxed \x\ axis} - A style which will be installed as soon as |axis x line| (|y|) will be set to something different than |box|. - - The default is -\begin{codeexample}[code only] -\pgfplotsset{ - every non boxed x axis/.style={ - xtick align=center, - enlarge x limits=false, - x axis line style={-stealth}}} -\end{codeexample} - \noindent with similar values for the |y|-variant. Feel free to redefine this style to your needs / taste. -\end{pgfplotsxykey} - \subsubsection[Two Ordinates]{Two Ordinates ($y$ axis) or Multiple Axes} {% \pgfplotsset{every axis/.append style={width=4.5cm}}% @@ -1618,7 +1669,7 @@ It is also possible to use only the axis, without any plots: Insert a discontinuity decoration on the $x$ (or $y$, respectively) axis. This is to visualize that the $y$ axis does cross the $x$ axis at its $0$ value, because the minimum $x$ axis value is positive or the maximum value is negative. -The description applies |axis y discontinuity| as well, with interchanged meanings of $x$~and~$y$. +The description applies to |axis y discontinuity| and |axis z discontinuity| as well, simply substitute $x$ by $y$ or $z$, respectively. \begin{codeexample}[] \begin{tikzpicture} @@ -1715,7 +1766,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \subsubsection{Color Bars} \label{pgfplots:colorbar} -\PGFPlots\ supports mesh, surface and scatter plots which can use color maps. While color maps can be chosen as described in section~\ref{pgfplots:colormap}, they can be visualized using color bars. +\PGFPlots\ supports mesh, surface and scatter plots which can use color maps. While color maps can be chosen as described in Section~\ref{pgfplots:colormap}, they can be visualized using color bars. \begin{pgfplotskey}{colorbar=\mchoice{true,false} (initially false)} Activates or deactivates color bars. @@ -1765,7 +1816,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \end{pgfplotskey} \begin{stylekey}{/pgfplots/colorbar right} - A style which re-defines |every colorbar| and |colorbar shift| such that color bars are placed right of their parent axis. + A style which redefines |every colorbar| and |colorbar shift| such that color bars are placed right of their parent axis. This is the initial configuration. \begin{codeexample}[] @@ -1777,7 +1828,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \end{tikzpicture} \end{codeexample} - The style |colorbar right| is defined to be + The style |colorbar right| is defined as \begin{codeexample}[code only] \pgfplotsset{ colorbar right/.style={ @@ -1816,7 +1867,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. }, } \end{codeexample} - \paragraph{Attention:} |colorbar right| \emph{re}-defines |every colorbar|. That means any user customization must take place \emph{after} |colorbar right|: + \paragraph{Attention:} |colorbar right| \emph{re}defines |every colorbar|. That means any user customization must take place \emph{after} |colorbar right|: \begin{codeexample}[code only] % correct: \begin{axis}[colorbar right, colorbar style={<some customization>}] @@ -1836,7 +1887,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \end{tikzpicture} \end{codeexample} - The style |colorbar left| is defined to be + The style |colorbar left| is defined as \begin{codeexample}[code only] \pgfplotsset{ colorbar left/.style={ @@ -1850,7 +1901,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. } } \end{codeexample} - \paragraph{Attention:} |colorbar left| \emph{re}-defines |every colorbar|. That means any user customization must take place \emph{after} |colorbar left| (see also the documentation for |colorbar right|). + \paragraph{Attention:} |colorbar left| \emph{re}defines |every colorbar|. That means any user customization must take place \emph{after} |colorbar left| (see also the documentation for |colorbar right|). \end{stylekey} \begin{stylekey}{/pgfplots/colorbar horizontal} @@ -1865,7 +1916,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \end{tikzpicture} \end{codeexample} - This style is defined to be + This style is defined as \begin{codeexample}[code only] \pgfplotsset{ colorbar horizontal/.style={ @@ -1932,7 +1983,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. colorbar shift/.style={xshift=0.3cm} } \end{codeexample} - \noindent places the colorbar in a way that its top-left (north west) corner is aligned right of the top right corner (|right of north east|) of its parent axis. Combining this with the |colorbar shift| is actually the same as the initial setting. + \noindent places the colorbar in a way that its top left (north west) corner is aligned right of the top right corner (|right of north east|) of its parent axis. Combining this with the |colorbar shift| is actually the same as the initial setting. Since color bars depend on some of its parent's properties, these properties are available as values of the following keys: \begin{pgfplotskeylist}{point meta min,point meta max} @@ -1953,7 +2004,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. Using |colorbar source| automatically implies |point meta rel=per plot| for that specific plot. - If there are more than one |\addplot| commands with |colorbar source|, the last one is preferred. + If there are more than one |\addplot| commands with |colorbar source|, the last one is selected. \end{pgfplotskey} \begin{pgfplotskeylist}{parent axis width,parent axis height} The values of these keys contain the size of the parent axis. They can be used as |width| and/or |height| arguments for |every colorbar| with |\pgfkeysvalueof{/pgfplots/parent axis width}|. @@ -2034,7 +2085,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \end{tikzpicture} \end{codeexample} - For vertical color bars, this sets the height. + For horizontal color bars, this sets the height. \end{pgfplotskey} @@ -2049,13 +2100,13 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \end{stylekey} \begin{predefinednode}{current colorbar axis} - A predefined node for the color bar of an axis. After |\end{axis}|, this node can be used to align further graphical elements at the color bar. Note that |current axis| refers to the axis as such while |current colorbar axis| refers to the color bar (which is an axis itsself). + A predefined node for the color bar of an axis. After |\end{axis}|, this node can be used to align further graphical elements at the color bar. Note that |current axis| refers to the axis as such while |current colorbar axis| refers to the color bar (which is an axis itself). \end{predefinednode} \begin{pgfplotscodekey}{colorbar/draw} - This code key belongs to the low level interface of colorbars. It is invoked whenever a color bar needs to be drawn. Usually, it won't be necessary to use or modify this key explicitly. + This code key belongs to the low level interface of color bars. It is invoked whenever a color bar needs to be drawn. Usually, it won't be necessary to use or modify this key explicitly. - In the context when this key is invoked, the styles inherited from the parent axis are already set and the required variables (see the documentation of |every colorbar|) are initialised. + When this key is invoked, the styles inherited from the parent axis are already set and the required variables (see the documentation of |every colorbar|) are initialized. This code key can be replaced if one needs more than one color bar (or other wrinkles). @@ -2081,7 +2132,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \end{axis} \end{tikzpicture} \end{codeexample} - The style uses |\addplot3|\oarg{options} to draw the |colorbar|, with |domain| set to the color range. In other words: it uses |plot expression| and a surface plot to visualize the |colorbar|. Use |colorbar style={samples=10}| to change the number of samples. + The style uses |\addplot3|\oarg{options} to draw the |colorbar|, with |domain| set to the color range and the current value of the |samples| key to determine the number of samples. In other words: it uses |plot expression| and a surface plot to visualize the |colorbar|. Use |colorbar style={samples=10}| to change the number of samples. \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[colorbar sampled,colorbar style={samples=8}] @@ -2089,7 +2140,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \end{axis} \end{tikzpicture} \end{codeexample} - The \meta{options} can be used to change the |\addplot3| options used for the colorbar visualization. For example, |colorbar sampled={surf,shader=interp}| will use gouraud shading which has visually the same effect as the standard colorbar. + The \meta{options} can be used to change the |\addplot3| options used for the colorbar visualization. For example, |colorbar sampled={surf,shader=interp}| will use Gouraud shading which has visually the same effect as the standard color bar. \end{stylekey} \begin{stylekey}{/pgfplots/colorbar sampled line=\marg{optional options} (default scatter,only marks)} @@ -2103,7 +2154,7 @@ Axis scaling and clipping will be done as if you did not use |hide axis|. \end{codeexample} The initial configuration uses a |scatter| plot to visualize the |colorbar|, it can be changed by specifying \meta{options}. - Furthermore, the axis appearance is changed using |axis y line*=|\mchoice{left,right}, depending on the position of the color bar or (or |axis x line*=bottom| for |colorbar horizontal|). + Furthermore, the axis appearance is changed using |axis y line*=|\mchoice{left,right}, depending on the position of the color bar (or |axis x line*=bottom| for |colorbar horizontal|). Consider the |tick align=outside| feature if you prefer tick lines outside of the colorbar instead of inside. diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.closingplots.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.closingplots.tex index 9f11fc7760a..5481eb9d16e 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.closingplots.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.closingplots.tex @@ -33,3 +33,32 @@ \end{tikzpicture} \end{codeexample} \end{command} + +Note that |\closedcycle| has been designed for functions (i.e.\ for a plot where every $x$ has at most one $y$ value). For arbitrary curves, you can safely use the \tikzname\ path \declareandlabel{--cycle} instead which simply connects the last and the first path element: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot coordinates + {(0,1) (1,2) (0,3) (-1,2)}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot coordinates + {(0,1) (1,2) (0,3) (-1,2)} --cycle; + \end{axis} +\end{tikzpicture} +\end{codeexample} + +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot+[fill] coordinates + {(0,1) (1,2) (0,3) (-1,2)} --cycle; + \end{axis} +\end{tikzpicture} +\end{codeexample} +The |--cycle| is actually a path instruction of \cite{tikz}; it connects the first and the last coordinate of one path. Note that this is automatically done for |fill|ed paths. diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.coordfiltering.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.coordfiltering.tex index baceab56f8e..4aa02209c7a 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.coordfiltering.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.coordfiltering.tex @@ -1,11 +1,12 @@ \subsection{Skipping Or Changing Coordinates -- Filters} +\label{sec:filters} \begin{pgfplotsxycodekeylist}{\x\ filter,filter point} -The code keys |x filter| and |y filter| allow coordinate filtering which are based on a \emph{single} coordinate. A coordinate filter gets an input coordinate as |#1|, applies some operation and writes the result into the macro |\pgfmathresult|. If |\pgfmathresult| is empty afterwards, the coordinate is discarded. You can also set |\pgfmathresult| to |nan| or |inf| in which case the coordinate can be either discarded (if |unbounded coords=discard| is set) or the plot can be interrupted (the case |unbounded coords=jump|). +The code keys |x filter| and |y filter| allow coordinate filtering which are based on a \emph{single} coordinate. A coordinate filter gets an input coordinate as |#1| (on input, the same value is stored in |\pgfmathresult|), applies some operation and writes the result into the macro |\pgfmathresult|. If |\pgfmathresult| is empty afterwards, the coordinate is discarded. You can also set |\pgfmathresult| to |nan| or |inf| in which case the coordinate can be either discarded (if |unbounded coords=discard| is set) or the plot can be interrupted (the case |unbounded coords=jump|). -The |filter point/.code| filter allows filtering dependent on all components forming a complete point ($x$, $y$ and $z$); it is described below. +The |filter point/.code| filter allows filtering depending on all components forming a complete point ($x$, $y$ and $z$); it is described below. -It is allowed if filters do not change |\pgfmathresult|. In this case, the unfiltered coordinate will be used. +It is allowed that filters do not change |\pgfmathresult|. In this case, the unfiltered coordinate will be used. Coordinate filters are useful in automatic processing system, where \PGFPlots\ is used to display automatically generated plots. You may not want to filter your coordinates by hand, so these options provide a tool to do this automatically. @@ -51,8 +52,9 @@ There is also a style key which simplifies selection by index, see below. If key filters are invoked for |plot table|, access to the current row's data can be achieved using |\thisrow|\marg{column name} (and its variants). This includes all columns of the table. - The |filter point| key is more technical. It doesn't take an argument: its arguments are given in terms of the |pgfkeys| variables |/data point x|, |/data point y| and |/data point z|. It may change its coordinates using |\pgfkeyssetvalue{/data point x}|\marg{the new value}; access to variables can be get with |\pgfkeysvalueof{/data point/x}| or, if the argument shall be written into a macro, with |\pgfkeysgetvalue|. This filter is evaluated after the other ones. + The |filter point| key is more technical. It doesn't take an argument: its arguments are given in terms of the |pgfkeys| variables |/data point x|, |/data point y| and |/data point z|. It may change its coordinates using |\pgfkeyssetvalue{/data point x}|\marg{new value}; access to variables can be accessed with |\pgfkeysvalueof{/data point/x}| or, if the argument shall be written into a macro, with |\pgfkeysgetvalue|. This filter is evaluated after the other ones. + Note that you can provide different |x filter|/|y filter| arguments to each |\addplot| command. It seems there are only problems with the `|#1|' argument, and I haven't yet found out why. Please use |\pgfmathresult| in place of |#1| if you provide |\addplot[x filter/.code={...}]|. \end{pgfplotsxycodekeylist} \begin{stylekey}{/pgfplots/skip coords between index=\marg{begin}\marg{end}} @@ -68,11 +70,27 @@ There is also a style key which simplifies selection by index, see below. \end{axis} \end{tikzpicture} \end{codeexample} + + \paragraph{Technical note}: this style usually applies to $x$ coordinates (i.e.\ it counts $x$ coordinates). In case you want to apply it to something like |hist/data| or |quiver/u|, you can + \begin{enumerate} + \item append an asterisk `|*|' to the style's name and + \item provide the target coordinate's name as first argument. + \end{enumerate} + For example, |skip coords between index*={hist/data}{2}| applies to |hist/data|. \end{stylekey} \begin{pgfplotskey}{each nth point=\marg{integer}} A style which appends an |x filter| which discards all but each $n$th input coordinate. \index{Downsampling} + + Note that there is also a |mark repeat| style which applies the same operation to plot marks only. + + \paragraph{Technical note}: this style usually applies to $x$ coordinates (i.e.\ it counts $x$ coordinates). In case you want to apply it to something like |hist/data| or |quiver/u|, you can + \begin{enumerate} + \item append an asterisk `|*|' to the style's name and + \item provide the target coordinate's name as first argument. + \end{enumerate} + For example, |each nth point*={hist/data}{2}| applies to |hist/data|. \end{pgfplotskey} \begin{pgfplotsxykeylist}{ @@ -91,7 +109,7 @@ There is also a style key which simplifies selection by index, see below. \begin{axis}[ restrict y to domain=-10:10, samples=1000, - % some fine tuning for the display: + % some fine-tuning for the display: width=10cm, height=210pt, xmin=-4.7124, xmax=4.7124, xtick={-4.7124,-1.5708,...,10}, @@ -119,7 +137,24 @@ There is also a style key which simplifies selection by index, see below. In contrast to |restrict x to domain|, \meta{expression} can depend on anything which is valid during |\addplot|, in particular |\coordindex| or table columns (|\thisrow|\marg{column name} and friends). The expression doesn't need to depend on $x$ at all. \end{pgfplotskeylist} +\begin{pgfplotskey}{@restrict to domain=\marg{filter name}\marg{expression}\marg{\meta{min}:\meta{max}}\mchoice{0,1}} + A low--level (technical) key which allows to apply the |restrict * to ...| features also to something like |hist/data|. + + For example, + |@restrict to domain={hist/data}{}{0:1}{0}| applies the domain-restriction to the histogram-input |hist/data|. The final `|0|' means that it works as the key |restrict x to domain=0:1|, i.e.\ it skips everything which is outside of $[0,1]$. In a similar way, + |@restrict to domain={hist/data}{}{0:1}{1}| applies the functionality of |restrict x to domain*=0:1| to |hist/data|: it truncates values outside of $[0,1]$ to the domain's end-points. + + The \meta{filter name} is expected to be a coordinate name like |x|, |y|, |z| (or |hist/data|). + + The \meta{expression} configures an expression which will be used rather than the value of \meta{filter name}. It can be empty. + + The \meta{min}\texttt{:}\meta{max} are as described above. + + If the last argument is |1|, any coordinate outside of the allowed domain will take the domain boundary as value. If it is |0|, such a coordinate will get either |inf| or |-inf|. +\end{pgfplotskey} + \begin{pgfplotskey}{filter discard warning=\mchoice{true,false} (initially true)} Issues a notification in your logfile whenever coordinate filters discard coordinates. \end{pgfplotskey} +You can find somewhat more on coordinate filtering in Section~\ref{pgfplots:interrupt}: ``Interrupted Plots''. diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.errorbars.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.errorbars.tex index 84166213573..49c5e756043 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.errorbars.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.errorbars.tex @@ -109,7 +109,7 @@ Error marks are thus placed at $x \cdot (1 \pm \pgfplotserror x)$ for linear axe Configures the error bar algorithm to draw $x$-error bars at any input coordinate for which user-specified errors are available. Each error is interpreted as absolute error, see |x fixed| for details. -The different input formats of errors are described in section~\ref{sec:errorbar:input}. +The different input formats of errors are described in Section~\ref{sec:errorbar:input}. \end{pgfplotsxykey} \begin{pgfplotsxykey}{error bars/\x\ explicit relative} @@ -119,7 +119,7 @@ Configures the error bar algorithm to draw $x$-error bars at any input coordinat \begin{pgfplotskey}{error bars/error mark=\meta{marker}} -Sets an error marker for any error bar. \marg{marker} is expected to be a valid plot mark, see section~\ref{sec:markers}. +Sets an error marker for any error bar. \marg{marker} is expected to be a valid plot mark, see Section~\ref{sec:markers}. \end{pgfplotskey} \begin{pgfplotskey}{error bars/error mark options=\marg{key-value-list}} @@ -177,7 +177,7 @@ or \begin{codeexample}[code only] \addplot table[x error index=COLINDEX,y error index=COLINDEX] \end{codeexample} -These options are used as the `|x|' and `|x index|' options. +These options are used like the `|x|' and `|x index|' options. You can supply error coordinates even if they are not used at all; they will be ignored silently in this case. diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.gridoptions-axiscoordinates.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.gridoptions-axiscoordinates.tex index ff0a73d2dd9..23f04d5aacb 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.gridoptions-axiscoordinates.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.gridoptions-axiscoordinates.tex @@ -112,7 +112,7 @@ It can be used to draw any \Tikz-graphics at axis coordinates. It is used like \paragraph{Attention:} Whenever you draw additional graphics, consider using |axis cs|! It applies any logarithms, data scaling transformations or whatever \PGFPlots\ usually does! -There is also a low--level interface to access the transformations and coordinates, see section~\ref{sec:pgfplots:lowlevel} on page~\pageref{sec:pgfplots:lowlevel}. +There is also a low--level interface to access the transformations and coordinates, see Section~\ref{sec:pgfplots:lowlevel} on page~\pageref{sec:pgfplots:lowlevel}. \end{coordinatesystem} \begin{coordinatesystem}{rel axis cs} @@ -158,9 +158,9 @@ The ``relative axis coordinate system'', |rel axis cs|, uses the complete axis v \noindent where \meta{x}, \meta{y} and \meta{z} are coordinates or constant mathematical expressions. The second syntax is only available in three dimensional axes. - There is one speciality: if you reverse an axis (with |x dir=reverse|), points provided by |rel axis cs| will be \emph{unaffected} by the axis reversal. This is intended to provide consistent placement even for reversed axes. Use |allow reversal of rel axis cs=false| to disable this feature. + There is one specialty: if you reverse an axis (with |x dir=reverse|), points provided by |rel axis cs| will be \emph{unaffected} by the axis reversal. This is intended to provide consistent placement even for reversed axes. Use |allow reversal of rel axis cs=false| to disable this feature. -There is also a low--level interface to access the transformations and coordinates, see section~\ref{sec:pgfplots:lowlevel} on page~\pageref{sec:pgfplots:lowlevel}. +There is also a low--level interface to access the transformations and coordinates, see Section~\ref{sec:pgfplots:lowlevel} on page~\pageref{sec:pgfplots:lowlevel}. \end{coordinatesystem} \begin{predefinednode}{current plot begin} @@ -172,7 +172,7 @@ There is also a low--level interface to access the transformations and coordinat \end{predefinednode} \begin{pgfplotskey}{allow reversal of rel axis cs=\mchoice{true,false} (initially true)} - A fine tuning key which specifies how to deal with |x dir=reverse| and |rel axis cs| and |ticklabel cs|. + A fine-tuning key which specifies how to deal with |x dir=reverse| and |rel axis cs| and |ticklabel cs|. The initial configuration |true| means that points placed with |rel axis cs| and/or |ticklabel cs| will be at the same position inside of the axes even if its ordering has been reversed. The choice |false| will disable the special treatment of |x dir=reverse|. \end{pgfplotskey} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.linefitting.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.linefitting.tex index cd4cba421a5..1264ce8fc62 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.linefitting.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.linefitting.tex @@ -21,25 +21,25 @@ This section documents the attempts of \PGFPlots\ to fit lines to input coordina \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[legend pos=outer north east] - \addplot table[row sep=\\] {% plot X versus Y. This is original data. - X Y\\ - 1 1 \\ - 2 4\\ - 3 9\\ - 4 16\\ - 5 25\\ - 6 36\\ + \addplot table {% plot X versus Y. This is original data. + X Y + 1 1 + 2 4 + 3 9 + 4 16 + 5 25 + 6 36 }; - \addplot table[row sep=\\, + \addplot table[ y={create col/linear regression={y=Y}}] % compute a linear regression from the input table { - X Y\\ - 1 1 \\ - 2 4\\ - 3 9\\ - 4 16\\ - 5 25\\ - 6 36\\ + X Y + 1 1 + 2 4 + 3 9 + 4 16 + 5 25 + 6 36 }; %\xdef\slope{\pgfplotstableregressiona} %<-- might be handy occasionally \addlegendentry{$y(x)$} @@ -50,7 +50,7 @@ This section documents the attempts of \PGFPlots\ to fit lines to input coordina \end{tikzpicture} \end{codeexample} The example above has two plots: one showing the data and one containing the |linear regression| line. We use |y={create col/linear regression={}}| here, which means to create a new column\footnote{The \texttt{y=\{create col/} feature is available for any other \PGFPlotstable\ postprocessing style, see the \texttt{create on use} documentation in the \PGFPlotstable\ manual.} containing the regression values automatically. - As arguments, we need to provide the $y$ column name explicitly\footnote{In fact, \PGFPlots\ sees that there are only two columns and uses the second as default. But you need to provide it if there are at least 3 columns.}. The $x$ value is determined from context: |linear regression| is evaluated inside of |\addplot table|, so it uses the same $x$ as |\addplot table| (i.e.\ if you write |\addplot table[x=|\marg{col name}|]|, the regression will also use \marg{col name} as its |x| input). Furthermore, it shows the line parameters $a$ and $b$ in the legend. + As arguments, we need to provide the $y$ column name explicitly\footnote{In fact, \PGFPlots\ sees that there are only two columns and uses the second by default. But you need to provide it if there are at least 3 columns.}. The $x$ value is determined from context: |linear regression| is evaluated inside of |\addplot table|, so it uses the same $x$ as |\addplot table| (i.e.\ if you write |\addplot table[x=|\marg{col name}|]|, the regression will also use \meta{col name} as its |x| input). Furthermore, it shows the line parameters $a$ and $b$ in the legend. @@ -63,7 +63,7 @@ This section documents the attempts of \PGFPlots\ to fit lines to input coordina \begin{keylist}{% /pgfplots/table/create col/linear regression/x=\marg{column} (initially empty), /pgfplots/table/create col/linear regression/y=\marg{column} (initially empty)} - Provides the source of $x_i$ and $y_i$ data, respectively. The argument \meta{column} is usually a column name of the input table, yet it can also contains |[index]|\meta{integer} to designate column indizes (starting with $0$), |create on use| specifications or |alias|es (see the \PGFPlotstable\ manual for details on |create on use| and |alias|). + Provides the source of $x_i$ and $y_i$ data, respectively. The argument \meta{column} is usually a column name of the input table, yet it can also contain |[index]|\meta{integer} to designate column indices (starting with $0$), |create on use| specifications or |alias|es (see the \PGFPlotstable\ manual for details on |create on use| and |alias|). The initial configuration (an empty value) checks the context where the |linear regression| is evaluated. If it is evaluated inside of |\pgfplotstabletypeset|, it uses the first and second table columns. If it is evaluated inside of |\addplot table|, it uses the same $x$ input as the |\addplot table| statement. The |y| key needs to be provided explicitly (unless the table has only two columns). \end{keylist} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.markers-meta.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.markers-meta.tex index 7bd15bf2a25..a2cf31dec0e 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.markers-meta.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.markers-meta.tex @@ -9,8 +9,8 @@ This list is copied from~\cite[section~29]{tikz}: \begingroup \newenvironment{longdescription}[0]{% \begin{list}{}{% - \leftmargin=4.3cm - \setlength{\labelwidth}{4.3cm}% + \leftmargin=4.7cm + \setlength{\labelwidth}{4.7cm}% \renewcommand{\makelabel}[1]{\hfill\textbf{\texttt{##1}}}% }% }{% @@ -46,6 +46,7 @@ And with |\usetikzlibrary{plotmarks}|: \item[mark=o] \showit{mark=o} \item[mark=asterisk] \showit{mark=asterisk} \item[mark=star] \showit{mark=star} + \item[mark=10-pointed star] \showit{mark=10-pointed star} \item[mark=oplus] \showit{mark=oplus} \item[mark=oplus*] \showit{mark=oplus*} \item[mark=otimes] \showit{mark=otimes} @@ -56,6 +57,18 @@ And with |\usetikzlibrary{plotmarks}|: \item[mark=triangle*] \showit{mark=triangle*} \item[mark=diamond] \showit{mark=diamond} \item[mark=diamond*] \showit{mark=diamond*} + \item[mark=halfdiamond*] \showit{mark=halfdiamond*} + \item[mark=halfsquare*] \showit{mark=halfsquare*} + \item[mark=halfsquare right*] \showit{mark=halfsquare right*} + \item[mark=halfsquare left*] \showit{mark=halfsquare left*} + \item[mark=Mercedes star] \showit{mark=Mercedes star} + \item[mark=Mercedes star flipped] \showit{mark=Mercedes star flipped} + \item[mark=halfcircle] \showit{mark=halfcircle} + + One half is filled with white (more precisely, with |mark color|). + \item[mark=halfcircle*] \showit{mark=halfcircle*} + + One half is filled with white (more precisely, with |mark color|) and the other half is filled with the actual |fill| color. \item[mark=pentagon] \showit{mark=pentagon} \item[mark=pentagon*] \showit{mark=pentagon*} \item[mark=text] \showit{mark=text,every mark/.append style={scale=0.5}} @@ -63,7 +76,7 @@ And with |\usetikzlibrary{plotmarks}|: This marker is special as it can be configured freely. The character (or even text) used is configured by a set of variables, see below. \item[mark=cube] \showitpgfplots{mark=cube} - This marker is only available inside of a \PGFPlots\ axis, it draws a cube with axis parallel faces. Its sizes can be configured separately, see below. + This marker is only available inside of a \PGFPlots\ axis, it draws a cube with axis parallel faces. Its dimensions can be configured separately, see below. \item[mark=cube*] \showitpgfplots{mark=cube*} \item[User defined] It is possible to define new markers with |\pgfdeclareplotmark|, see below. @@ -78,10 +91,11 @@ All these options have been drawn with the additional options } ] \end{codeexample} -Please see section~\ref{sec:colors} for how to change draw- and fill colors. +Please see Section~\ref{sec:colors} for how to change |draw| and |fill| colors. +Note that each of the provided marks can be rotated freely by means of |mark options={rotate=90}| or |every mark/.append style={rotate=90}|. \begin{key}{/tikz/mark size=\marg{dimension}} - This \Tikz\ option allows to set marker sizes to \marg{dimension}. For circular markers, \marg{dimension} is the radius, for other plot marks it is about half the width and height. + This \Tikz\ option allows to set marker sizes to \meta{dimension}. For circular markers, \meta{dimension} is the radius, for other plot marks it is about half the width and height. \end{key} \begin{pgfplotsxykey}{cube/size \x=\marg{dimension} (initially |\textbackslash pgfplotmarksize|)} @@ -107,6 +121,24 @@ Please see section~\ref{sec:colors} for how to change draw- and fill colors. \end{axis} \end{tikzpicture} \end{codeexample} + +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[y=2cm] + \addplot+[ + mark=halfcircle*, + every mark/.append style={rotate=90}] + coordinates + {(-2,0) (-1,1) (0,0) (1,1) (2,0)}; + + \addplot+[ + mark=halfcircle*, + every mark/.append style={rotate=180}] + coordinates + {(-2,-0.1) (-1,0.9) (0,-0.1) (1,0.9) (2,-0.1)}; +\end{axis} +\end{tikzpicture} +\end{codeexample} \end{key} \begin{stylekey}{/pgfplots/no markers} @@ -115,6 +147,35 @@ Please see section~\ref{sec:colors} for how to change draw- and fill colors. If this style is provided as argument to a complete axis, it is appended to |every axis plot post| such that it disables markers even for |cycle list|s which contain markers. \end{stylekey} +\begin{key}{/tikz/mark repeat=\marg{integer} (initially empty)} + Allows to draw only each $n$th |mark| where $n$ is provided as \meta{integer}. +\end{key} +\begin{key}{/pgf/mark color=\marg{color} (initially empty)} + Defines the \emph{additional} fill color for the |halfcircle|, |halfcircle*|, |halfdiamond*| and |halfsquare*| markers. An empty value uses |white| (which is the initial configuration). The value |none| disables filling for this part. + + These markers have two distinct fill colors, one is determined by |fill| as for any other marker and the other one is |mark color|. +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[y=2cm] + \addplot[ + blue,mark color=blue!50!white, + mark=halfcircle*] + coordinates + {(-2,0) (-1,1) (0,0) (1,1) (2,0)}; + + \addplot[ + red,mark color=red!50!white, + mark=halfsquare*] + coordinates + {(-2,-0.1) (-1,0.9) (0,-0.1) (1,0.9) (2,-0.1)}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + + Note that this key requires \PGF\ 2.10 or later. +\end{key} + + \begin{key}{/tikz/mark options=\marg{options}} Resets |every mark| to \marg{options}. \end{key} @@ -127,14 +188,14 @@ Please see section~\ref{sec:colors} for how to change draw- and fill colors. With |/pgf/text mark=A|: \pgfkeys{/pgf/text mark=A}\showit{mark=text,every mark/.append style={scale=0.5}} - There is no limitation about the number of characters or whatever. In fact, any \TeX\ material can be inserted as \marg{text}, including images. + There is no limitation about the number of characters or whatever. In fact, any \TeX\ material can be inserted as \meta{text}, including images. \end{key} \begin{key}{/pgf/text mark style=\marg{options for \texttt{mark=text}}} Defines a set of options which control the appearance of |mark=text|. - If |/pgf/text mark as node=false| (the default), \marg{options} is provided as argument to |\pgftext| -- which provides only some basic keys like |left|, |right|, |top|, |bottom|, |base| and |rotate|. + If |/pgf/text mark as node=false| (the default), \meta{options} is provided as argument to |\pgftext| -- which provides only some basic keys like |left|, |right|, |top|, |bottom|, |base| and |rotate|. - If |/pgf/text mark as node=true|, \marg{options} is provided as argument to |\node|. This means you can provide a very powerful set of options including |anchor|, |scale|, |fill|, |draw|, |rounded corners| etc. + If |/pgf/text mark as node=true|, \meta{options} is provided as argument to |\node|. This means you can provide a very powerful set of options including |anchor|, |scale|, |fill|, |draw|, |rounded corners| etc. \end{key} \begin{key}{/pgf/text mark as node=\mchoice{true,false} (initially false)} Configures how |mark=text| will be drawn: either as |\node| or as |\pgftext|. @@ -143,7 +204,7 @@ Please see section~\ref{sec:colors} for how to change draw- and fill colors. \end{key} \begin{command}{\pgfdeclareplotmark\marg{plot mark name}\marg{code}} - Defines a new marker named \marg{plot mark name}. Whenever it is used, \marg{code} will be invoked. It is suppose to contain (preferrable \PGF\ basic level) drawing commands. During \marg{code}, the coordinate system's origin denotes the coordinate where the marker shall be placed. + Defines a new marker named \meta{plot mark name}. Whenever it is used, \meta{code} will be invoked. It is supposed to contain (preferrable \PGF\ basic level) drawing commands. During \meta{code}, the coordinate system's origin denotes the coordinate where the marker shall be placed. Please refer to~\cite{tikz} section ``Mark Plot Handler'' for more detailed information. \end{command} @@ -207,6 +268,32 @@ The following line styles are predefined in \Tikz. \begin{stylekey}{/tikz/loosely dashed} \showit{style=loosely dashed} \end{stylekey} + + +\begin{stylekey}{/tikz/dashdotted} + \showit{style=dashdotted} +\end{stylekey} + +\begin{stylekey}{/tikz/densely dashdotted} + \showit{style=densely dashdotted} +\end{stylekey} + +\begin{stylekey}{/tikz/loosely dashdotted} + \showit{style=loosely dashdotted} +\end{stylekey} + + +\begin{stylekey}{/tikz/dashdotdotted} + \showit{style=dashdotdotted} +\end{stylekey} + +\begin{stylekey}{/tikz/densely dashdotdotted} + \showit{style=densely dashdotdotted} +\end{stylekey} + +\begin{stylekey}{/tikz/loosely dashdotdotted} + \showit{style=loosely dashdotdotted} +\end{stylekey} \noindent since these styles apply to markers as well, you may want to consider using \begin{codeexample}[code only] \pgfplotsset{ @@ -218,6 +305,45 @@ The following line styles are predefined in \Tikz. Besides linestyles, \PGF\ also offers (a lot of) arrow heads. Please refer to~\cite{tikz} for details. \endgroup +\subsubsection{Edges and Their Parameters} +When \PGFPlots\ connects points, it relies on \PGF\ drawing parameters to create proper edges (and it only changes them in the |every patch| style). + +It might occasionally be necessary to change these parameters: + +\begin{keylist}{% + /tikz/line cap=\mchoice{round,rect,butt} (initially butt),% + /tikz/line join=\mchoice{round,bevel,miter} (initially miter),% + /tikz/miter limit=\meta{factor} (initially 10)}% + + These keys control how lines are joined at edges. Their description is beyond the scope of this manual, so interested readers should consult~\cite{tikz}. + + Here is just an example illustrating why it might be of interest to study these parameters: +% \usetikzlibrary{spy} +\begin{codeexample}[] +% requires \usetikzlibrary{spy} +\begin{tikzpicture}[spy using outlines= + {circle, magnification=6, connect spies}] +\begin{axis}[no markers,grid=major, + every axis plot post/.append style={thick}] +\addplot coordinates + {(0, 0.0) (0, 0.9) (1, 0.9) (2, 1) (3, 0.9) (80, 0)}; +\addplot +[line join=round] coordinates + {(0, 0.0) (0, 0.9) (2, 0.9) (3, 1) (4, 0.9) (80, 0)}; +\addplot +[line join=bevel] coordinates + {(0, 0.0) (0, 0.9) (3, 0.9) (4, 1) (5, 0.9) (80, 0)}; +\addplot +[miter limit=5] coordinates + {(0, 0.0) (0, 0.9) (4, 0.9) (5, 1) (6, 0.9) (80, 0)}; + + \coordinate (spypoint) at (axis cs:3,1); + \coordinate (magnifyglass) at (axis cs:60,0.7); +\end{axis} + +\spy [blue, size=2.5cm] on (spypoint) + in node[fill=white] at (magnifyglass); +\end{tikzpicture} +\end{codeexample} +\end{keylist} + \subsubsection{Font Size and Line Width} Often, one wants to change line width and font sizes for plots. This can be done using the following options of \Tikz. @@ -236,7 +362,7 @@ Often, one wants to change line width and font sizes for plots. This can be done } \end{codeexample} - See also the predefined styles |normalsize|, |small| and |footnotesize| in section~\ref{sec:scaling:styles}. + See also the predefined styles |normalsize|, |small| and |footnotesize| in Section~\ref{sec:scaling:styles}. \end{key} \begin{key}{/tikz/line width=\marg{dimension} (initially 0.4pt)} @@ -269,7 +395,7 @@ Often, one wants to change line width and font sizes for plots. This can be done These \Tikz\ styles provide different predefined line widths. \end{keylist} -This example shows the same plots as on page~\pageref{page:plotcoords:src} (using |\plotcoords| as place holder for the commands on page~\pageref{page:plotcoords:src}), with different line width and font size. +This example shows the same plots as on page~\pageref{page:plotcoords:src} (using |\plotcoords| as place holder for the commands on page~\pageref{page:plotcoords:src}), with different line widths and font sizes. \begin{codeexample}[] \pgfplotsset{every axis/.append style={ font=\large, @@ -356,13 +482,19 @@ Besides predefined colors, it is possible to \emph{mix} two (or more) colors. Fo A different type of color mixing is supported, which allows to take $100\%$ of \emph{each} component. For example, \showcolorandname{rgb,2:red,1;green,1} will add $1/2$ part \showcolorandname{red} and $1/2$ part \showcolorandname{green} and we reproduced the example from above. Using the denominator~$1$ instead of~$2$ leads to \showcolorandname{rgb,1:red,1;green,1} which uses $1$ part \showcolorandname{red} and $1$ part \showcolorandname{green}. Many programs allow to select pieces between $0,\dotsc,255$, so a denominator of $255$ is useful. Consequently, \showcolorandname{rgb,255:red,231;green,84;blue,121} uses $231/255$ red, $84/255$ green and $121/255$. This corresponds to the standard RGB color $(231,84,121)$. Other examples are \showcolorandname{rgb,255:red,32;green,127;blue,43}, \showcolorandname{rgb,255:red,178;green,127;blue,43}, \showcolorandname{rgb,255:red,169;green,178;blue,43}. -It is also possible to use RGB values, the HSV color model or the HTML color syntax directly. However, this requires some more programming. I suppose this is the fastest (and probably the most uncomfortable) method to use colors. For example, +It is also possible to use RGB values, the HSV color model, the CMY (or CMYK) models, or the HTML color syntax directly. However, this requires some more programming. I suppose this is the fastest (and probably the most uncomfortable) method to use colors. For example, \begin{codeexample}[] \definecolor{color1}{rgb}{1,1,0} \tikz \fill[color1] (0,0) rectangle (1em,0.6em); \end{codeexample} -\noindent creates the color with $100\%$ red, $100\%$ green and $0\%$ blue; +\noindent creates the color with $100\%$ \showcolorandname{red}, $100\%$ \showcolorandname{green} and $0\%$ \showcolorandname{blue}; +\begin{codeexample}[] +\definecolor{color1}{cmyk}{0.6,0.9,0.5,0.1} +\tikz \fill[color1] + (0,0) rectangle (1em,0.6em); +\end{codeexample} +\noindent creates the color with $60\%$ \showcolorandname{cyan}, $90\%$ \showcolorandname{magenta}, $50\%$ \showcolorandname{yellow} and $10\%$ \showcolorandname{black}; \begin{codeexample}[] \definecolor{color1}{HTML}{D0B22B} @@ -378,7 +510,7 @@ The |xcolor| package provides even more methods to combine colors, among them th /tikz/color=\marg{a color}, /tikz/draw=\marg{stroke color}, /tikz/fill=\marg{fill color}} - These keys are (generally) used to set colors. Use |color| to set the color for both, drawing and filling. Instead of |color=|\marg{color name} you can simply write \marg{color name}. The |draw| and |fill| keys only set colors for stroking and filling, respectively. + These keys are (generally) used to set colors. Use |color| to set the color for both drawing and filling. Instead of |color=|\marg{color name} you can simply write \meta{color name}. The |draw| and |fill| keys only set colors for stroking and filling, respectively. Use |draw=none| to disable drawing and |fill=none| to disable filling\footnote{Up to now, plot marks always have a stroke color (some also have a fill color). This restriction may be lifted in upcoming versions.}.% This does also work for markers. %-------------------------------------------------- @@ -399,23 +531,23 @@ The |xcolor| package provides even more methods to combine colors, among them th \subsubsection{Color Maps} \label{pgfplots:colormap} \begin{pgfplotskey}{colormap name=\marg{color map name} (initially hot)} - Changes the current color map to the already defined map named \marg{color map name}. The predefined color map is + Changes the current color map to the already defined map named \meta{color map name}. The predefined color map is \begin{tabular}{>{\ttfamily}ll} hot & \pgfplotsshowcolormap{hot}\\ \end{tabular} - Further color maps are described below. + The definition can be found in the documentation for |colormap/hot|. This, and further color maps, are described below. - Colormaps can be used, for example, in scatter plots (see section~\ref{pgfplots:scatter}). + Colormaps can be used, for example, in scatter plots (see Section~\ref{pgfplots:scatter}). You can use |colormap| to create new color maps (see below). \end{pgfplotskey} \begin{pgfplotskey}{colormap=\marg{name}\marg{color specification}} - Defines a new colormap named \marg{name} according to \marg{color specification} and activates it using |colormap name=|\marg{name}. + Defines a new colormap named \meta{name} according to \meta{color specification} and activates it using |colormap name=|\marg{name}. - The \marg{color specification} is a sequence of positions and associated colors where linear interpolation is applied in-between. The syntax is very similar as the one used for \PGF\ shadings described in~\cite[VIII -- Shadings]{tikz}: it is a semicolon--separated series of + The \meta{color specification} is a sequence of positions and associated colors where linear interpolation is applied in-between. The syntax is very similar as the one used for \PGF\ shadings described in~\cite[VIII -- Shadings]{tikz}: it is a semicolon--separated series of \meta{color type}|(|\meta{offset}|)=(|\meta{color value}|); |: @@ -425,7 +557,7 @@ rgb(0cm)=(1,0,0); rgb(1cm)=(0,1,0); rgb255(2cm)=(0,0,255); gray(3cm)=(0.3); col \end{codeexample} \pgfplotsshowcolormapexample{rgb(0cm)=(1,0,0); rgb(1cm)=(0,1,0); rgb255(2cm)=(0,0,255); gray(3cm)=(0.3); color(4cm)=(green)} - If the distance between successive colors is the same anyway, one can skip the \meta{offset}. The `|;|' separators are not necessary as well: + If the distance between successive colors is the same, the \meta{offset} can be omitted. The `|;|' separators are not necessary either: \begin{codeexample}[code only] % (simplified) possibility 2: skip `;' and length arguments: @@ -447,7 +579,19 @@ rgb=(1,0,0) rgb=(0,1,0) rgb255=(0,0,255) gray=(0.3) color=(green) \noindent The single colors can be separated by semicolons `|;|'. The (optional) length describes how much of the bar is occupied by the interval, it is interpreted relative to the complete length. If the length argument is missing, it is taken to be the last specified length plus the last length difference (the first color defaults to |1cm| in this case). -Each entry has the form \meta{color model}|(|\meta{length}|)=(|\meta{arguments}|)| where the \meta{length} argument is optional as discussed. The example above means that the left end of the color map shall have RGB components $1,0,0$, indicating $100\%$ red and $0\%$ green and blue. The next entity starts at |1cm| and describes a color with $100\%$ green. The |rgb255| also expects three RGB components, but in the range $[0,255]$. Finally, |gray| specifies a color in parenthesis with the same value for each, R G and B and |color| accesses predefined colors. +\paragraph{Summary of the expected input format:} +Each entry in \meta{color specification} has the form \meta{color model}|(|\meta{length}|)=(|\meta{arguments}|)|. Here, the \meta{length} argument is optional as discussed above. The entries can be separated by semicolons `|;|' or by white spaces. The leftmost entry \emph{must} have \meta{length}|=0pt|. As discussed, all entries will be placed on a uniform grid, i.e.\ the distance between adjacent \meta{length} arguments has to be the same (see the previous paragraph for automatic generation of intermediate points). +The complete length of a color map is irrelevant: it will be mapped linearly to an internal range anyway (for efficient interpolation). The only requirement is that the left end must be at |0|. + +Available choices for \meta{color model} are +\begin{description} +\item[rgb] which expects \meta{arguments} of the form |(|\meta{red}|,|\meta{green}|,|\meta{blue}|)| where each component is in the interval $[0,1]$, +\item[rgb255] which is similar to |rgb| except that each component is expected in the interval |[0,255]|, +\item[gray] in which case \meta{arguments} is a single number in the interval $[0,1]$, +\item[color] in which case \meta{arguments} contains a predefined (named) color like `|red|' or a color expression like `|red!50|', +\item[cmyk] which expects \meta{arguments} of the form |(|\meta{cyan}|,|\meta{magenta}|,|\meta{yellow}|,|\meta{black}|)| where each component is in the interval $[0,1]$, and +\item[cmyk255] which is the same as |cmyk| but expects components in the interval $[0,255]$. +\end{description} \begin{codeexample}[] \begin{tikzpicture} @@ -459,7 +603,19 @@ Each entry has the form \meta{color model}|(|\meta{length}|)=(|\meta{arguments}| \end{axis} \end{tikzpicture} \end{codeexample} -The complete length of a color map is irrelevant: it will be mapped linearly to an internal range anyway (for efficient interpolation). The only requirement is that the left end must be at |0|. + +\paragraph{The color space of a colormap.} There are two supported color spaces for a |colormap|: the RGB color space and the CMYK color space. Each access into a |colormap| requires linear interpolation which is performed in its color space. Color spaces make a difference: colors in different color spaces may be represented differently, depending on the output device. Many printers use CMYK for color printing, so providing CMYK colors might improve the printing quality on a color printer. The RGB color space is often used for display devices. The predefined |colormap|s in \PGFPlots\ all use RGB. + +Whenever a new |colormap| is created, \PGFPlots\ determines an associated color space. Then, each color in this specific |colormap| will be represented in its associated color space (converting colors automatically if necessary). Furthermore, every access into the |colormap| will be performed in its associated color space and every returned |mapped color| will be represented with respect to this color space. Furthermore, every shading generated by |shader=interp| will be represented with respect to the |colormap|'s associated color space. + +The color space is chosen as follows: in case |colormap default colorspace=auto| (the initial configuration), the color space depends on the \emph{first} encountered color in \meta{color specification}. For |rgb| or |gray| or |color|, the associated color space will be RGB (as it was in all earlier versions of \PGFPlots). For |cmyk|, the associated color space will be CMYK. If |colormap default colorspace| is either |rgb| or |cmyk|, this specific color space is used and every color is converted automatically. +\begin{pgfplotskey}{colormap default colorspace=\mchoice{auto,rgb,cmyk} (initially auto)} + Allows to set the color space of every \emph{newly created} |colormap|. The choices are explained in the previous paragraph. + + It is (not yet) possible to change the color space of an existing |colormap|; re-create it if conversion is required. + + The macro \declareandlabel{\pgfplotscolormapgetcolorspace}\marg{name} defines |\pgfplotsretval| to contain the color space of an existing |colormap name|, if you are in doubt. +\end{pgfplotskey} Available color maps are shown below. @@ -467,20 +623,68 @@ Available color maps are shown below. \begin{stylekey}{/pgfplots/colormap/hot} A style which installs the colormap - - |{color(0cm)=(blue); color(1cm)=(yellow); color(2cm)=(orange); color(3cm)=(red)}| +\begin{codeexample}[code only] +\pgfplotsset{ + colormap={hot}{color(0cm)=(blue); color(1cm)=(yellow); color(2cm)=(orange); color(3cm)=(red)} +} +\end{codeexample} \pgfplotsshowcolormap{hot} This is the preconfigured color map. \end{stylekey} -\begin{stylekey}{/pgfplots/colormap/bluered} - A style which installs the colormap +\begin{stylekey}{/pgfplots/colormap/hot2} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={hot2}{[1cm]rgb255(0cm)=(0,0,0) rgb255(3cm)=(255,0,0) + rgb255(6cm)=(255,255,0) rgb255(8cm)=(255,255,255)} +} +\end{codeexample} + + \pgfplotsshowcolormap{hot2} + + Note that this particular choice ships directly with \PGFPlots, you do not need to load the |colormaps| library for this value. + + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/jet} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + /pgfplots/colormap={jet}{rgb255(0cm)=(0,0,128) rgb255(1cm)=(0,0,255) + rgb255(3cm)=(0,255,255) rgb255(5cm)=(255,255,0) rgb255(7cm)=(255,0,0) rgb255(8cm)=(128,0,0)} +} +\end{codeexample} - \{|rgb255(0cm)=(0,0,180); rgb255(1cm)=(0,255,255); rgb255(2cm)=(100,255,0); | + \pgfplotsshowcolormap{jet} - |rgb255(3cm)=(255,255,0); rgb255(4cm)=(255,0,0); rgb255(5cm)=(128,0,0)|\}, + \matlabcolormaptext +\end{stylekey} + +\begin{stylekey}{/pgfplots/colormap/blackwhite} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + colormap={blackwhite}{gray(0cm)=(0); gray(1cm)=(1)} +} +\end{codeexample} + + \pgfplotsshowcolormap{blackwhite} +\end{stylekey} + + +\begin{stylekey}{/pgfplots/colormap/bluered} + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + colormap={bluered}{ + rgb255(0cm)=(0,0,180); rgb255(1cm)=(0,255,255); rgb255(2cm)=(100,255,0); + rgb255(3cm)=(255,255,0); rgb255(4cm)=(255,0,0); rgb255(5cm)=(128,0,0)} +} +\end{codeexample} \pgfplotsshowcolormap{bluered} @@ -499,45 +703,49 @@ Available color maps are shown below. \end{stylekey} \begin{stylekey}{/pgfplots/colormap/cool} - A style which installs the colormap - - |{rgb255(0cm)=(255,255,255); rgb255(1cm)=(0,128,255); rgb255(2cm)=(255,0,255)}| + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + colormap={cool}{rgb255(0cm)=(255,255,255); rgb255(1cm)=(0,128,255); rgb255(2cm)=(255,0,255)} +} +\end{codeexample} \pgfplotsshowcolormap{cool} \end{stylekey} \begin{stylekey}{/pgfplots/colormap/greenyellow} - A style which installs the colormap - - |{rgb255(0cm)=(0,128,0); rgb255(1cm)=(255,255,0)}| + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + colormap={greenyellow}{rgb255(0cm)=(0,128,0); rgb255(1cm)=(255,255,0)} +} +\end{codeexample} \pgfplotsshowcolormap{greenyellow} \end{stylekey} \begin{stylekey}{/pgfplots/colormap/redyellow} - A style which installs the colormap - - |{rgb255(0cm)=(255,0,0); rgb255(1cm)=(255,255,0)}| + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + colormap={redyellow}{rgb255(0cm)=(255,0,0); rgb255(1cm)=(255,255,0)} +} +\end{codeexample} \pgfplotsshowcolormap{redyellow} \end{stylekey} \begin{stylekey}{/pgfplots/colormap/violet} - A style which installs the colormap - - |{rgb255=(25,25,122) color=(white) rgb255=(238,140,238)}| + A style which is equivalent to +\begin{codeexample}[code only] +\pgfplotsset{ + colormap={violet}{rgb255=(25,25,122) color=(white) rgb255=(238,140,238)} +} +\end{codeexample} \pgfplotsshowcolormap{violet} \end{stylekey} -\begin{stylekey}{/pgfplots/colormap/blackwhite} - A style which installs the colormap - - |{gray(0cm)=(0); gray(1cm)=(1)}| - - \pgfplotsshowcolormap{blackwhite} -\end{stylekey} - \begin{command}{\pgfplotscolormaptoshadingspec\marg{colormap name}\marg{right end size}\marg{\textbackslash macro}} A command which converts a colormap into a \PGF\ shading's color specification. It can be used in commands like |\pgfdeclare*shading| (see the \PGF\ manual~\cite{tikz} for details). @@ -552,13 +760,18 @@ Available color maps are shown below. \pgfuseshading{tempshading}% \end{codeexample} The usage of the result \meta{\textbackslash macro} is a little bit low--level. + + \paragraph{Attention:} \PGF\ shadings are always represented with respect to the RGB color space. Consequently, even CMYK \meta{colormap name}s will result in an RGB shading specification when using this method\footnote{In case \PGF\ should someday support CMYK shadings and you still see this remark, you can define \texttt{\textbackslash def\textbackslash pgfplotscolormaptoshadingspectorgb\{0\}}.}. \end{command} + +Note that there \emph{more available choices} in the |colormaps| library which needs to be loaded by means of |\usepgfplotslibrary{colormaps}|. + \subsubsection{Cycle Lists -- Options Controlling Line Styles} \label{sec:cycle:list}% \begin{pgfplotskeylist}{cycle list=\marg{list},cycle list name=\marg{\textbackslash macro}} -Allows to specify a list of plot specifications which will be used for each \hbox{|\addplot|}-command without explicit plot specification. Thus, the currently active |cycle list| will be used if you write either |\addplot+|\oarg{keys}| ...;| or if you \emph{don't} use square brackets as in |\addplot|\oarg{explicit plot specification}| ...;|. +Allows to specify a list of plot specifications which will be used for each \hbox{|\addplot|} command without explicit plot specification. Thus, the currently active |cycle list| will be used if you write either |\addplot+|\oarg{keys}| ...;| or if you \emph{don't} use square brackets as in |\addplot|\oarg{explicit plot specification}| ...;|. The list element with index~$i$ will be chosen where~$i$ is the index of the current |\addplot| command (see also the |cycle list shift| key which allows to use $i+n$ instead). This indexing does also include plot commands which don't use the |cycle list|. @@ -641,6 +854,56 @@ There are several possibilities to change the currently active |cycle list|: \begin{axis}[ stack plots=y,stack dir=minus, cycle list name=mark list] +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + + The |mark list| always employs the current color, but it doesn't define one (the \verbpdfref{\addplot+} statement explicitly sets the current color to |blue|). + + The |mark list| is especially useful in conjunction with |cycle multi list| which allows to combine it with other lists (for example |linestyles| or a list of colors). + \item \declareandlabel{mark list*} A list containing only markers. In contrast to |mark list|, all these markers are filled. They are defined as (from top to bottom) +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + stack plots=y,stack dir=minus, + cycle list name=mark list*] +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\addplot+[blue] coordinates {(0,1) (0.5,1) (1,1)}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + Similar to |mark list|, the |mark list*| always employs the current color, but it doesn't define one (see above for the \verbpdfref{\addplot+}). + + \item \declareandlabel{color list} (from top to bottom) +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + stack plots=y,stack dir=minus, + cycle list name=color list] \addplot coordinates {(0,1) (0.5,1) (1,1)}; \addplot coordinates {(0,1) (0.5,1) (1,1)}; \addplot coordinates {(0,1) (0.5,1) (1,1)}; @@ -658,15 +921,14 @@ There are several possibilities to change the currently active |cycle list|: \end{tikzpicture} \end{codeexample} - The |mark list| always employs the current color, but it doesn't define one. - + The |cycle list name=color| choice also employs markers whereas |color list| uses \emph{only} colors. - \item \declareandlabel{color list} (from top to bottom) + \item \declareandlabel{linestyles} (from top to bottom) \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[ stack plots=y,stack dir=minus, - cycle list name=color list] + cycle list name=linestyles] \addplot coordinates {(0,1) (0.5,1) (1,1)}; \addplot coordinates {(0,1) (0.5,1) (1,1)}; \addplot coordinates {(0,1) (0.5,1) (1,1)}; @@ -683,15 +945,12 @@ There are several possibilities to change the currently active |cycle list|: \end{axis} \end{tikzpicture} \end{codeexample} - - The |cycle list name=color| choice also employs markers whereas |color list| uses \emph{only} colors. - - \item \declareandlabel{linestyles} (from top to bottom) + \item \declareandlabel{linestyles*} contains more dotted line styles than |linestyles| (from top to bottom) \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[ stack plots=y,stack dir=minus, - cycle list name=linestyles] + cycle list name=linestyles*] \addplot coordinates {(0,1) (0.5,1) (1,1)}; \addplot coordinates {(0,1) (0.5,1) (1,1)}; \addplot coordinates {(0,1) (0.5,1) (1,1)}; @@ -759,16 +1018,38 @@ The definitions of all predefined cycle lists follow (see the end of this paragr \begin{codeexample}[code only] % note that "." is the currently defined Tikz color. \pgfplotscreateplotcyclelist{mark list}{% - every mark/.append style={fill=.!80!black},mark=*\\% - every mark/.append style={fill=.!80!black},mark=square*\\% - every mark/.append style={fill=.!80!black},mark=triangle*\\% - mark=star\\% - every mark/.append style={fill=.!80!black},mark=diamond*\\% - every mark/.append style={fill=.!80!black},mark=otimes*\\% - mark=|\\% - every mark/.append style={fill=.!80!black},mark=pentagon*\\% - mark=text,text mark=p\\% - mark=text,text mark=a\\% + every mark/.append style={solid,fill=.!80!black},mark=*\\% + every mark/.append style={solid,fill=.!80!black},mark=square*\\% + every mark/.append style={solid,fill=.!80!black},mark=triangle*\\% + every mark/.append style={solid},mark=star\\% + every mark/.append style={solid,fill=.!80!black},mark=diamond*\\% + every mark/.append style={solid,fill=.!80!black!40},mark=otimes*\\% + every mark/.append style={solid},mark=|\\% + every mark/.append style={solid,fill=.!80!black},mark=pentagon*\\% + every mark/.append style={solid},mark=text,text mark=p\\% + every mark/.append style={solid},mark=text,text mark=a\\% +} +\end{codeexample} +\noindent This is not the complete truth: the actual implementation of |mark list| allows to customize the |fill| value: +\begin{pgfplotskey}{mark list fill=\marg{color} (initially .!80!black)} + Allows to customize the fill color for the |mark list| and |mark list*|. + + For example, if you have |black| as color, the alternative choice |mark list fill=.!50!white| will produce much better results. +\end{pgfplotskey} +\begin{codeexample}[code only] +% note that "." is the currently defined Tikz color. +\pgfplotscreateplotcyclelist{mark list*}{% + every mark/.append style={solid,fill=.!80!black},mark=*\\% + every mark/.append style={solid,fill=.!80!black},mark=square*\\% + every mark/.append style={solid,fill=.!80!black},mark=triangle*\\% + every mark/.append style={solid,fill=.!80!black},mark=halfsquare*\\% + every mark/.append style={solid,fill=.!80!black},mark=pentagon*\\% + every mark/.append style={solid,fill=.!80!black},mark=halfcircle*\\% + every mark/.append style={solid,fill=.!80!black,rotate=180},mark=halfdiamond*\\% + every mark/.append style={solid,fill=.!80!black!40},mark=otimes*\\% + every mark/.append style={solid,fill=.!80!black},mark=diamond*\\% + every mark/.append style={solid,fill=.!80!black},mark=halfsquare right*\\% + every mark/.append style={solid,fill=.!80!black},mark=halfsquare left*\\% } \end{codeexample} \begin{codeexample}[code only] @@ -777,6 +1058,7 @@ The definitions of all predefined cycle lists follow (see the end of this paragr \end{codeexample} \begin{codeexample}[code only] \pgfplotscreateplotcyclelist{linestyles}{solid,dashed,dotted} +\pgfplotscreateplotcyclelist{linestyles*}{solid,dashed,dotted,dashdotted,dashdotdotted} \end{codeexample} \item The second choice for cycle lists is to provide each entry directly as argument to |cycle list|, @@ -798,7 +1080,7 @@ The definitions of all predefined cycle lists follow (see the end of this paragr \end{codeexample} (This example list requires |\usetikzlibrary{plotmarks}|). - The input format is described below in more details. + The input format is described below in more detail. \item The last method is to combine 1. and 2.: Define named cycle lists in the preamble and use them with `|cycle list name|': \begin{command}{\pgfplotscreateplotcyclelist\marg{name}\marg{list}}% @@ -817,7 +1099,7 @@ The definitions of all predefined cycle lists follow (see the end of this paragr \end{codeexample} \end{enumerate} -\paragraph{The format of \marg{list}:} The argument \meta{list} is usually a comma separated list of lists of style keys like colors, line styles, marker types and marker styles. This ``comma list of comma lists'' structure requires to encapsulate the inner list using curly braces: +\paragraph{The format of \meta{list}:} The argument \meta{list} is usually a comma separated list of lists of style keys like colors, line styles, marker types and marker styles. This ``comma list of comma lists'' structure requires to encapsulate the inner list using curly braces: \begin{codeexample}[code only] \pgfplotscreateplotcyclelist{mylist}{% {blue,mark=*}, @@ -950,7 +1232,7 @@ In this case, the \emph{last} entry also needs a terminating `|\\|', but one can \end{pgfplotskey} \begin{pgfplotskey}{cycle list shift=\marg{integer} (initially empty)} - Allows to \emph{shift} the index into the |cycle list|. If \meta{integer} is $n$, the list element $i+n$ will be taken instead of the $i$'th one. Remember that $i$ is the index of the current |\addplot| command (starting with~$0$). + Allows to \emph{shift} the index into the |cycle list|. If \meta{integer} is $n$, the list element $i+n$ will be taken instead of the $i$th one. Remember that $i$ is the index of the current |\addplot| command (starting with~$0$). Since a |cycle list| is queried \emph{immediately} when |\addplot| (or |\addplot+|) is called, you can adjust the |cycle list shift| for selected plots: \begin{codeexample}[code only] @@ -1031,7 +1313,7 @@ A further common idea is the use of color maps: if the point meta data is in the \item[\declaretext{explicit}] This choice tells \PGFPlots\ to expect \emph{numerical} point meta data which is provided explicitly in the coordinate input streams. This data will be transformed linearly into the current color map as it has been motivated above. - How point meta data is provided for |plot coordinates|, |plot table| and the other input methods is described in all detail in section~\ref{pgfplots:providing:input} -- but we provide small examples here to summarize the possibilities: + How point meta data is provided for |plot coordinates|, |plot table| and the other input methods is described in all detail in Section~\ref{pgfplots:providing:input} -- but we provide small examples here to summarize the possibilities: \begin{codeexample}[code only] % for 'coordinates': % provide color data explicitly using [<data>] @@ -1100,7 +1382,7 @@ A further common idea is the use of color maps: if the point meta data is in the Currently, this choice can only be used for scatter plots. - \item[\normalfont\declare{\meta{expression}}] This choice allows to compute point meta data using a mathematical expression. The \meta{expression} may depend on |x|, |y|, |z| which yield the current $x$, $y$ or $z$ coordinate, respectively. The coordinates are completely processed (transformations, logs) as mentioned above for the choice |x|. Furthermore, the \meta{expression} may depend on commands which are valid during |\addplot| like |\plotnum| or |\coordindex| (see section~\ref{pgfplots:misc} for details). Computations are performed using the floating point unit of \PGF, and all supported arithmetical operations can be used. + \item[\normalfont\declare{\meta{expression}}] This choice allows to compute point meta data using a mathematical expression. The \meta{expression} may depend on |x|, |y|, |z| which yield the current $x$, $y$ or $z$ coordinate, respectively. The coordinates are completely processed (transformations, logs) as mentioned above for the choice |x|. Furthermore, the \meta{expression} may depend on commands which are valid during |\addplot| like |\plotnum| or |\coordindex| (see Section~\ref{pgfplots:misc} for details). Computations are performed using the floating point unit of \PGF, and all supported arithmetical operations can be used. In essence, the \meta{expression} may depend on everything which is known to all |\addplot| commands: the $x$, $y$ and (if any) $z$ coordinates. In addition, it may depend upon |rawx|, |rawy| or |rawz|. These three expressions yield the unprocessed $x$, $y$ or $z$ value as it has been found in the input stream (no logs, no user transformations)% \footnote{% @@ -1180,7 +1462,7 @@ A further common idea is the use of color maps: if the point meta data is in the \end{pgfplotskeylist} \begin{pgfplotskey}{colormap access=\mchoice{map,direct} (initially map)} - This key configures how point meta data is used to determine colors from a color map. The initial configuration |map| performs the linear mapping operation explained above. The choice |direct| does not perform any transformation; it takes the point meta as integer indizes into the current color map. + This key configures how point meta data is used to determine colors from a color map. The initial configuration |map| performs the linear mapping operation explained above. The choice |direct| does not perform any transformation; it takes the point meta as integer indices into the current color map. Consequently, there is no interpolation between colors in the color map, there will only be as many colors as the color map contains explicitly. diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.miscellaneous.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.miscellaneous.tex index f31ef4b925f..63ce93068d6 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.miscellaneous.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.miscellaneous.tex @@ -3,37 +3,80 @@ \subsection{Miscellaneous Options} \label{pgfplots:misc} -\begin{pgfplotskey}{disablelogfilter=\mchoice{true,false} (initally false, default true)} +\begin{pgfplotskey}{disablelogfilter=\mchoice{true,false} (initially false, default true)} Disables numerical evaluation of $\log(x)$ in \TeX. If you specify this option, any plot coordinates and tick positions must be provided as $\log(x)$ instead of $x$. This may be faster and -- possibly -- more accurate than the numerical log. The current implementation of $\log(x)$ normalizes~$x$ to $m\cdot 10^e$ and computes \[ \log(x) = \log(m) + e \log(10) \] -where $y = \log(m)$ is computed with a newton method applied to $\exp(y) - m$. The normalization involves string parsing without \TeX-registers. You can savely evaluate $\log(1\cdot 10^{-7})$ although \TeX-registers would produce an underflow for such small numbers. +where $y = \log(m)$ is computed with a Newton method applied to $\exp(y) - m$. The normalization involves string parsing without \TeX-registers. You can safely evaluate $\log(1\cdot 10^{-7})$ although \TeX-registers would produce an underflow for such small numbers. \end{pgfplotskey} \label{sec:disabledatascaling}% -\begin{pgfplotskey}{disabledatascaling=\mchoice{true,false} (initally false, default true)} +\begin{pgfplotskey}{disabledatascaling=\mchoice{true,false} (initially false, default true)} \index{Accuracy!Data Transformation}% \index{Errors!dimension too large}% Disables internal re-scaling of input data. Normally, every input data like plot coordinates, tick positions or whatever, are parsed without using \TeX's limited number precision. Then, a transformation like \[ T(x) = 10^{q-m} \cdot x - a \] is applied to every input coordinate/position where $m$ is ``the order of $x$'' base~$10$. Example: $x=1234 = 1.234\cdot 10^3$ has order~$m=4$ while $x=0.001234 = 1.234\cdot 10^{-3}$ has order $m=-2$. The parameter~$q$ is the order of the axis' width/height. -The \textbf{effect} of the transformation is that your plot coordinates can be of \emph{arbitrary magnitude} like $0.0000001$ and $0.0000004$. For these two coordinates, \PGFPlots\ will use 100pt and 400pt internally. The transformation is quit fast since it relies only on period shifts. This scaling allows precision beyond \TeX's capabilities. +The \textbf{effect} of the transformation is that your plot coordinates can be of \emph{arbitrary magnitude} like $0.0000001$ and $0.0000004$. For these two coordinates, \PGFPlots\ will use 100pt and 400pt internally. The transformation is quite fast since it relies only on period shifts. This scaling allows precision beyond \TeX's capabilities. %\footnote{Please note that while plot coordinates can be of quite large magnitude like $10^12$ or $10^{-9}$, \PGFPlots\ still uses \TeX-registers internally (the math parser of \PGF). If your axis interval is $[1234567.8, 1234567.9]$ or something like that, }. -The option ``|disabledatascaling|'' disables this data transformation. This has two consequences: first, coordinate expressions like \parg{{\normalfont\texttt{axis cs:}}x,y} have the same effect like \parg{x,y}, no re-scaling is applied. Second, coordinates are restricted to what \TeX\ can handle\footnote{Please note that the axis' scaling requires to compute $1/( x_\text{max} - x_{\text{min}} )$. The option \protect\pgfmanualpdfref{disabledatascaling}{\texttt{disabledatascaling}} may lead to overflow or underflow in this context, so use it with care! Normally, the data scale transformation avoids this problem.}. +The option ``|disabledatascaling|'' disables this data transformation. This has two consequences: first, coordinate expressions like \parg{{\normalfont\texttt{axis cs:}}x,y} have the same effect as \parg{x,y}, no re-scaling is applied. Second, coordinates are restricted to what \TeX\ can handle\footnote{Please note that the axis' scaling requires to compute $1/( x_\text{max} - x_{\text{min}} )$. The option \protect\pgfmanualpdfref{disabledatascaling}{\texttt{disabledatascaling}} may lead to overflow or underflow in this context, so use it with care! Normally, the data scale transformation avoids this problem.}. So far, the data scale transformation applies only to normal axis (logarithmic scales do not need it). \end{pgfplotskey} \begin{pgfplotskey}{execute at begin plot=\marg{commands}} -This axis option allows to invoke \marg{commands} at the beginning of each |\addplot| command. The argument \marg{commands} can be any \TeX\ content. +This axis option allows to invoke \meta{commands} at the beginning of each |\addplot| command. The argument \meta{commands} can be any \TeX\ content. You may use this in conjunction with |x filter=...| to reset any counters or whatever. An example would be to change every $4$th coordinate. \end{pgfplotskey} \begin{pgfplotskey}{execute at end plot=\marg{commands}} -This axis option allows to invoke \marg{commands} after each |\addplot| command. The argument \marg{commands} can be any \TeX\ content. +This axis option allows to invoke \meta{commands} after each |\addplot| command. The argument \meta{commands} can be any \TeX\ content. +\end{pgfplotskey} + +\begin{pgfplotskey}{execute at begin plot visualization=\marg{commands}} +Allows to add customized code which is executed at the beginning of each plot visualization. In contrast to |execute at begin plot|, this happens not immediately during |\addplot|, but late during the postprocessing of |\end{axis}| when actual drawing commands are generated. + +One possible application is shown below: suppose you want to use |\usepackage{ocg}| in order to switch layers dynamically, for example in a beamer package. This can be implemented as follows: +% \usepackage[pdftex]{ocg} +\begin{codeexample}[] +% requires \usepackage[pdftex]{ocg} +\begin{tikzpicture} +\begin{axis}[ + title=Dynamic PDF Layer Support (see Acrobat Layers), + view={110}{35}] +\addplot3+[ + execute at begin plot visualization=\begin{ocg}{First Layer}{FirstLayer}{0}, + execute at end plot visualization=\end{ocg}, +] + coordinates {(0,0,12) (0,1,2) (1,0,6) (0,0,12)}; + +\addplot3+[ + execute at begin plot visualization=\begin{ocg}{Second Layer}{SecondLayer}{0}, + execute at end plot visualization=\end{ocg}, +] + coordinates {(0,0,9) (0,1,8) (1,0,4) (0,0,9)}; + +\addplot3+[ + execute at begin plot visualization=\begin{ocg}{Third Layer}{ThirdLayer}{0}, + execute at end plot visualization=\end{ocg}, +] + coordinates {(0,0,1) (0,1,7) (1,0,3) (0,0,1)}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The |execute *| hooks insert the \textsc{ocg}-statements at the correct positions, and the single plot commands are added to different dynamic layers. Use the Acrobat Reader and its ``Layers'' Tab to switch each of them on or off. Note that it would not be enough to add the |\begin{ocg}...| statements right into the text since \PGFPlots\ postpones drawing commands until |\end{axis}| (splitting of survey and visualization phase). + + See \url{http://www.texample.net/weblog/2008/nov/02/creating-pdf-layers} for more details on \textsc{ocg} and how to obtain it. + + + Technical note: these hooks are also inserted for |\pgfplotsextra| commands. +\end{pgfplotskey} + +\begin{pgfplotskey}{execute at end plot visualization=\marg{commands}} +This is the counter--part of |execute at begin plot visualization|. \end{pgfplotskey} \begin{pgfplotskey}{forget plot=\marg{true,false} (initially false)} @@ -96,7 +139,7 @@ This axis option allows to invoke \marg{commands} after each |\addplot| command. \end{pgfplotskey} \begin{pgfplotscodekey}{before end axis} -Allows to insert \marg{commands} just before the axis is ended. This option takes effect inside of the clipped area. +Allows to insert \meta{commands} just before the axis is ended. This option takes effect inside of the clipped area. \begin{codeexample}[] \pgfplotsset{every axis/.append style={ before end axis/.code={ @@ -114,7 +157,7 @@ Allows to insert \marg{commands} just before the axis is ended. This option take \end{pgfplotscodekey} \begin{pgfplotscodekey}{after end axis} -Allows to insert \marg{commands} right after the end of the clipped drawing commands. While |befor end axis| has the same effect as if \marg{commands} had been placed inside of your axis, |after end axis| allows to access axis coordinates without being clipped. +Allows to insert \meta{commands} right after the end of the clipped drawing commands. While |before end axis| has the same effect as if \meta{commands} had been placed inside of your axis, |after end axis| allows to access axis coordinates without being clipped. \begin{codeexample}[] \pgfplotsset{every axis/.append style={ after end axis/.code={ @@ -164,6 +207,56 @@ Allows to insert \marg{commands} right after the end of the clipped drawing comm Please note that this feature does not affect plot marks. I think it looks unfamiliar if plot marks are crossed by axis descriptions. \end{pgfplotskey} + +\begin{pgfplotskeylist}{% + visualization depends on=\meta{\textbackslash macro} (initially empty),% + visualization depends on=\meta{expression}\texttt{\textbackslash as}\meta{\textbackslash macro} (initially empty), + visualization depends on=\texttt{value }\meta{content}\texttt{\textbackslash as}\meta{\textbackslash macro} (initially empty)} + Allows to communicate data to \PGFPlots\ which is essential to perform the visualization although \PGFPlots\ isn't aware of it. + + Suppose you want a scatter plot, which depends on the $(x,y)$ coordinates, the |point meta| data to draw individual colors and furthermore data which influences the |mark size|. Thus, you need a total of~$4$ coordinates for every data point, although \PGFPlots\ supports only $3$ in its initial configuration. + + Before we actually come to the main point of the problem, we'll talk about how to get a scatter plot which has individual colors \emph{and} individual sizes. It is not sufficient to set |mark size| alone, since |mark size| is evaluated only once, before markers are processed (the same holds for |every mark|). Thus, we can use |scatter| combined with + + |scatter/@pre marker code/.append style={/tikz/mark size=\perpointmarksize}|. + + \noindent The |@pre marker code| is installed for every marker of a scatter plot individually. Now, we come to the problem as such: where can we get the value for |mark size|, in our case called |\perpointmarksize|? + + A solution is |visualization depends on| (using the second input syntax at this point): +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis} + \addplot+[ + scatter, + scatter src=y, + samples=40, + visualization depends on= + {5*cos(deg(x)) \as \perpointmarksize}, + scatter/@pre marker code/.append style= + {/tikz/mark size=\perpointmarksize} + ] + {sin(deg(x))}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + + Here, we define |\perpointmarksize| as |5*cos(deg(x))|. The expression will be evaluated together with all other coordinates. Thus, everything which is available during the survey phase can be used here. This includes the final coordinates |x|, |y|, |z|; the constant |meta| expands to the current per point meta data. Furthermore, |\thisrow|\marg{colname} expands to the value of a table column. + + The command |visualization depends on| evaluates and remembers every value in internal data structures. The remembered value is then available as \meta{\textbackslash macro} during the visualization phase. In our example, the |@pre marker code| is evaluated during the visualization phase and applies |mark size=5*cos(deg(x))|. + + The first syntax, |visualization depends on=|\meta{\textbackslash macro}, tells \PGFPlots\ to use an already defined \meta{\textbackslash macro}. The second syntax with \meta{content}|\as|\meta{\textbackslash macro} provides also the value. + + There can be more than one |visualization depends on| phrase. + + In case the stored value is not of numerical type\footnote{Or if it is just a constant and you'd like to improve speed.}, you can use the prefix `|value|' before the argument, i.e. + + |visualization depends on=value |\meta{\textbackslash macro} or + + |visualization depends on=value |\meta{content}|\as |\meta{\textbackslash macro}. + + Such a value will be expanded and stored, but not parsed as number (at least not by \PGFPlots). +\end{pgfplotskeylist} + \begin{key}{/pgf/fpu=\marg{true,false} (initially true)} \index{Precision} This key activates or deactivates the floating point unit. If it is disabled (|false|), the core \PGF\ math engine written by Mark Wibrow and Till Tantau will be used for |plot expression|. diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.numberformatting.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.numberformatting.tex index fa2e79f6052..3504fcbdb18 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.numberformatting.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.numberformatting.tex @@ -1,16 +1,16 @@ \subsection{Number Formatting Options} \label{sec:number:printing}% -\PGFPlots\ typeset tick labels rounded to given precision and in configurable number formats. The command to do so is |\pgfmathprintnumber|; it uses the current set of number formatting options. +\PGFPlots\ typesets tick labels rounded to given precision and in configurable number formats. The command to do so is |\pgfmathprintnumber|; it uses the current set of number formatting options. These options are described in all detail in the manual for \PGFPlotstable, which comes with \PGFPlots. Please refer to that manual. \begin{command}{\pgfmathprintnumber\marg{x}} -Generates pretty-printed output for the (real) number \marg{x}. The input number \marg{x} is parsed using |\pgfmathfloatparsenumber| which allows arbitrary precision. +Generates pretty-printed output for the (real) number \meta{x}. The input number \meta{x} is parsed using |\pgfmathfloatparsenumber| which allows arbitrary precision. Numbers are typeset in math mode using the current set of number printing options, see below. Optional arguments can also be provided using |\pgfmathprintnumber[|\meta{options}|]|\marg{x}. -Please refer to the manual of \PGFPlotstable\ (shipped with this package) for details about the number options. +Please refer to the manual of \PGFPlotstable\ (shipped with this package) for details about options related to number-printing. \end{command} \label{sec:identify:minor:log}% diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.preliminaryoptions.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.preliminaryoptions.tex index 7dded72cd83..a1f759a732b 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.preliminaryoptions.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.preliminaryoptions.tex @@ -1,44 +1,86 @@ \subsection{About Options: Preliminaries} -\PGFPlots\ knowns a whole lot of key--value options which can be (re-)defined to activate desired features or modified to apply some fine tuning. +\PGFPlots\ knows a whole lot of key--value options which can be (re)defined to activate desired features or modified to apply some fine-tuning. + +A key usually has a value (like a number, a string, or perhaps some macro code). You can assign values to keys (``set keys'') in many places in a \LaTeX\ document. The value will remain effective until it is changed or until the current \TeX\ scope ends (which happens after a closing curly brace `|}|', after |\end|\marg{name} or, for example, after |\addplot|). \noindent Most keys can be used like \begin{codeexample}[code only] \begin{tikzpicture} -\begin{axis}[key=value,key2=value2] +\begin{axis}[key=value,key2=value2] % axis-wide keys ... \end{axis} \end{tikzpicture} \end{codeexample} -\noindent which changes them for the complete axis. A |key| in this context can be any option defined in this manual, no matter if it has the |/pgfplots/| or the |/tikz/| key prefix. Note that key prefixes can be omitted in almost all cases. +\noindent which changes them for the complete axis. A |key| in this context can be any option defined in this manual, no matter if it has the |/pgfplots/| or the |/tikz/| key prefix. Note that key prefixes can be omitted in almost all cases. + +A value can usually be provided without curly braces. For example, if the manual contains somethig like `|xmin=|\marg{$x$ coordinate}', you can safely skip the curly braces. The curly braces are mandatory if values contain something which would otherwise confuse the key setup (for example an equal sign `|=|' or a comma `|,|'). Some keys can be changed individually for each plot: \begin{codeexample}[code only] \begin{tikzpicture} \begin{axis} -\addplot[key=value,key2=value2] ... ; -\addplot+[key=value,key2=value2] ... ; % keeps the keys which would have been used by default +% keys valid for single plots: +\addplot ...; % uses the "cycle list" to determine keys +\addplot[key=value,key2=value2] ... ; % uses the provided keys (not the "cycle list") +\addplot+[key=value,key2=value2] ... ; % appends something to the "cycle list" \end{axis} \end{tikzpicture} \end{codeexample} -The basic engine to manage key--value pairs is |pgfkeys| which is part of \pgfname. This engine always has a key name and a key ``path'', which is somehow similar to file name and directory of files. The common ``directory'' (key path) of \PGFPlots\ is `|/pgfplots/|'. Although the key definitions below provide this full path, it is always (well, almost always) enough to skip this prefix -- \PGFPlots\ uses it automatically. The same holds for the prefixes `|/tikz/|' which are common for all \Tikz\ drawing options and `|/pgf/|' which are for the (more or less) low--level commands of \pgfname. All these prefixes can be omitted. +Besides these two possibilities, it is also possible to work with document-wide keys: +\begin{codeexample}[code only] +\section{My Section} +\pgfplotsset{ + key=value, + key2=value2, +} +This section has a common key configuration: +\begin{tikzpicture} + \begin{axis}% uses the key config from above + ... + \end{axis} +\end{tikzpicture} +\end{codeexample} +\noindent In the example above, the |\pgfplotsset| command changes keys. The changes are permanent and will be used until +\begin{itemize} + \item you redefine them or + \item the current environment (like |\end{figure}|) is ended or + \item \TeX\ encounters a closing brace `|}|'. +\end{itemize} +This includes document--wide preamble configurations like +\begin{codeexample}[code only] +\documentclass{article} -One important concept is the concept of styles. A style is a key which contains one or more other keys. It can be redefined or modified until it is actually used by the internal routines. Each single component of \Tikz\ and \PGFPlots\ can be configured with styles. +\usepackage{pgfplots} +\pgfplotsset{ + xticklabel={$\mathsf{\pgfmathprintnumber{\tick}}$}, + every axis/.append style={ + font=\sffamily, + }, +} +... +\end{codeexample} + +The basic engine to manage key--value pairs is |pgfkeys| which is part of \pgfname. This engine always has a key name and a key ``path'', which is somehow similar to file name and directory of files. The common ``directory'' (key path) of \PGFPlots\ is `|/pgfplots/|'. Although the key definitions below provide this full path, it is always (well, almost always) safe to skip this prefix -- \PGFPlots\ uses it automatically. The same holds for the prefixes `|/tikz/|' which are common for all \Tikz\ drawing options and `|/pgf/|' which are for the (more or less) low--level commands of \pgfname. All these prefixes can be omitted. + +One important concept is the concept of \emph{styles}. A style is a key which contains one or more other keys. It can be redefined or modified until it is actually used by the internal routines. Each single component of \Tikz\ and \PGFPlots\ can be configured with styles. For example, \begin{codeexample}[code only] -\pgfplotsset{every axis/.append style={line width=1pt}} +\pgfplotsset{legend style={line width=1pt}} \end{codeexample} \noindent -sets the line width for every axis to |1pt|. +sets the line width for every legend to |1pt| by appending `|line width=1pt|' to the existing style for legends. + +There are keys like |legend style|, |ticklabel style|, and |label style| which allow to modify the predefined styles (in this case the styles for legends, ticklabels and axis labels, respectively). They are, in general, equivalent to a \meta{style name}|/.append style={}| command (the only difference is that the |/.append style| thing is a little bit longer). There is also the possibility to define a new style (or to overwrite an already existing one) using |/.style={}|. -There are several other styles predefined to modify the appearance, see section~\ref{sec:styles}. +There are several other styles predefined to modify the appearance, see Section~\ref{sec:styles}. \begin{command}{\pgfplotsset\marg{key-value-list}} - Defines or sets all options in \marg{key-value-list}. The \meta{key-value-list} can contain any of the options in this manual which have the prefix |/pgfplots/| (you do not need to type the prefix). + Defines or sets all options in \meta{key-value-list}. The \meta{key-value-list} can contain any of the options in this manual which have the prefix |/pgfplots/| (however, you do not need to type that prefix). - It is a shortcut for |\pgfqkeys{/pgfplots}|\marg{key-value-list}, that means it inserts the prefix |/pgfplots| to any option which has no full path. + Inside of \meta{key-value-list}, the prefixes `|/pgfplots/|' which are commonly presented in this manual can be omitted (they are checked automatically). This command can be used to define default options for the complete document or a part of the document. For example, \begin{codeexample}[code only] @@ -62,7 +104,7 @@ There are several other styles predefined to modify the appearance, see section~ xlabel=$x$,ylabel=$f(x)$ } \end{codeexample} - can be used to set document--wise styles for line specifications, the legend's style and axis labels. + can be used to set document-wise styles for line specifications, the legends' style and axis labels. The settings remain in effect until the end of the current environment (like |\end{figure}|) or until you redefine them or until the next closing curly brace `|}|' (whatever comes first). You can also define new styles (collections of key--value--pairs) with |/.style| and |/.append style|. \begin{codeexample}[code only] @@ -71,11 +113,11 @@ There are several other styles predefined to modify the appearance, see section~ My Style 2/.style={xlabel=$X$, legend entries={4,5,6} } } \end{codeexample} - The |/.style| and |/.append style| key handlers are described in section~\ref{sec:styles} in more detail. + The |/.style| and |/.append style| key handlers are described in Section~\ref{sec:styles} in more detail. \end{command} \begin{handler}{{.code}=\marg{\TeX\ code}} - Occasionally, the \PGFPlots\ user interface offers to replace parts of its routines. This is accomplished using so called ``code keys''. What it means is to replace the original key and its behavior with new \marg{\TeX\ code}. Inside of \marg{\TeX\ code}, any command can be used. Furthermore, the |#1| pattern will be the argument provided to the key. + Occasionally, the \PGFPlots\ user interface offers to replace parts of its routines. This is accomplished using so called ``code keys''. What it means is to replace the original key and its behavior with new \meta{\TeX\ code}. Inside of \meta{\TeX\ code}, any command can be used. Furthermore, the |#1| pattern will be the argument provided to the key. \begin{codeexample}[] \pgfplotsset{ @@ -92,10 +134,10 @@ There are several other styles predefined to modify the appearance, see section~ \begin{handler}{{.cd}} Each key has a fully qualified name with a (long) prefix, like |/pgfplots/xmin|. However, if the ``current directory'' is |/pgfplots|, it suffices to write just |xmin|. The |/.cd| key handler changes the ``current directory'' in this way. - The prefixes |/tikz/| and |/pgfplots/| are checked automatically for any argument provided to |\begin{axis}|\oarg{options} or |\addplot|. So, you won't need to worry about them, just leave them away -- and look closer in case the package doesn't identify the option. + The prefixes |/tikz/| and |/pgfplots/| are checked automatically for any argument provided to |\begin{axis}|\oarg{options} or |\addplot|. So, you won't need to worry about them, just omit them -- and look closer in case the package doesn't identify the option. \end{handler} -\subsubsection{Pgfplots Options and \Tikz\ Options} +\subsubsection{\textsc{Pgfplots} and \Tikz\ Options} This section is more or less technical and can be skipped unless one really wants to know more about this topic. \Tikz\ options and \PGFPlots\ options can be mixed inside of the axis arguments and in any of the associated styles. For example, @@ -106,7 +148,7 @@ This section is more or less technical and can be skipped unless one really want \noindent assigns the `|legend columns|' option (a \PGFPlots\ option) and uses `|font|' for drawing the legend (a \Tikz\ option). The point is: |legend columns| needs to be known \emph{before} the legend is typeset whereas |font| needs to be active when the legend is typeset. \PGFPlots\ sorts out any key dependencies automatically: -The axis environments will process any known \PGFPlots\ options, and all `|every|'--styles will be parsed for \PGFPlots\ options. Every unknown option is supposed to be a \Tikz\ option and will be forward to the associated \Tikz\ drawing commands. For example, the `|font=\Large|' above will be used as argument to the legend matrix, and the `|font=\Large|' argument in +The axis environments will process any known \PGFPlots\ options, and all `|every|'--styles will be parsed for \PGFPlots\ options. Every unknown option is assumed to be a \Tikz\ option and will be forwarded to the associated \Tikz\ drawing commands. For example, the `|font=\Large|' above will be used as argument to the legend matrix, and the `|font=\Large|' argument in \begin{codeexample}[code only] \pgfplotsset{every axis label/.append style={ ylabel=Error,xlabel=Dof,font=\Large}} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.scaling.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.scaling.tex index 450843801d8..911090212c2 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.scaling.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.scaling.tex @@ -40,7 +40,7 @@ Sets the width of the final picture to \marg{dimen}. If no |height| is specified \end{pgfplotskey} \begin{pgfplotskey}{scale only axis=\mchoice{true,false} (initially false)} -If |scale only axis| is enabled, label, tick and legend dimensions won't influence the size of the axis rectangle, that means |width| and |height| apply only to the axis rectangle +If |scale only axis| is enabled, label, tick and legend dimensions won't influence the size of the axis rectangle, that means |width| and |height| apply only to the axis rectangle. If |scale only axis=false| (the default), \PGFPlots\ will try to produce the desired width \emph{including} labels, titles and ticks. \end{pgfplotskey} @@ -53,7 +53,7 @@ Sets the unit vectors for $x$ (or $y$). Every logical plot coordinate $(x,y)$ is The unit vectors $e_x$ and $e_y$ determine the paper position in the current (always two dimensional) image. The key |x=|\marg{dimen} simply sets $e_x = (\meta{dimen},0)^T $ while |y=|\marg{dimen} sets $e_y = (0,\meta{dimen})^T$. -Here, \marg{dimen} is any \TeX\ size like |1mm|, |2cm| or |5pt|. It is allowed to specify a negative \marg{dimen}. +Here, \marg{dimen} is any \TeX\ size like |1mm|, |2cm| or |5pt|. Note that you should not use negative values for \meta{dimen} (consider using |x dir| and its variants to reverse axis directions). \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[x=1cm,y=1cm] @@ -64,7 +64,7 @@ Here, \marg{dimen} is any \TeX\ size like |1mm|, |2cm| or |5pt|. It is allowed t \begin{codeexample}[] \begin{tikzpicture} -\begin{axis}[x=1cm,y=-0.5cm] +\begin{axis}[x=1cm,y=0.5cm,y dir=reverse] \addplot expression[domain=0:3] {2*x}; \end{axis} \end{tikzpicture} @@ -104,12 +104,49 @@ The second syntax, |x={(|\meta{x}|,|\meta{y}|)}| sets $e_x = (\meta{x},\meta{y}) \end{codeexample} won't have any effect because an axis rescales its coordinates (see the |width| option). +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + x={(1cm,-0.5cm)}, + y=1cm, + z=0cm, + axis on top, + scale mode=scale uniformly, + ] + \addplot3[surf,shader=interp] {x*y}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + +\paragraph{Explicit units for 3D axes:} As of version~1.5, it is also possible to supply unit vectors to three-dimensional axes. In this case, the following extra assumptions need to be satisfied: +\begin{enumerate} + \item If you want to control three-dimensional units, you need to provide \emph{all} of |x|, |y|, and |z| keys. For two--dimensional axes, it is also supported to supply just one of |x| or |y|. + \item Any provided three-dimensional unit vectors are assumed to form a \emph{right--handed coordinate system}. In other words: take your right hand, let the thumb point into the |x| direction, the index finger in |y| direction and the middle finger in |z| direction. If that is impossible, the \PGFPlots\ output will be wrong. The reason for this assumption is that \PGFPlots\ needs to compute the view direction out of the provided units (see below). + + Consider using |x dir=reverse| or its variants in case you want to reverse directions. + + \item For three-dimensional axes, \PGFPlots\ computes a view direction out of the provided unit vectors. The view direction is required to realize the |z buffer| feature (i.e.\ to decide about depths)\footnote{\PGFPlots\ provides a debug option called \texttt{view dir=\marg{x}\marg{y}\marg{z}} to override the view direction, should that ever be interesting.}. +\end{enumerate} +This feature is used to realize the \verbpdfref{\addplot3 graphics} feature, compare the examples in Section~\ref{sec:plotgraphics3d} on page~\pageref{sec:plotgraphics3d}. + \paragraph{Limitations:} Unfortunately, skewed axes are \textbf{not available for bar plots}. \index{Errors!Skewed axes and bar plots}% \index{Bar Plots!Skewed axes problems}% -Furthermore, support for custom vectors in 3D plots is currently \textbf{experimental} and may not work at all, sorry. \end{pgfplotsxykeylist} +\begin{pgfplotskey}{scale mode=\mchoice{auto,none,stretch to fill,scale uniformly} (initially auto)} + Specifies how |width|, |height|, and the three unit vector keys |x|, |y|, and |z| are combined to produce the final image. + + The initial choice \declaretext{auto} chooses one of the other possible choices depending on the actual context. More precisely, it is the same as |none| if at least one of |x|, |y|, or |z| is provided (meaning that these keys are the final unit size). If no unit is provided, it defaults to |stretch to fill|. + + The choice |none| does not apply any rescaling at all. Use this if prescribed lengths of |x|, |y| (and perhaps |z|) should be used. In other words: it ignores |width| and |height|. + + The choice |stretch to fill| takes |x|, |y|, and |z| as they have been found (either from user input or from some automatic processing) and rescales the axis with two \emph{separate} scales: one which results in the proper |width| and one which results in the proper |height|. As a consequence, the unit vectors are modified and distorted such that the final image fits into the prescribed dimensions. This is usually what one expects unless one provides unit directions explicitly. + + The choice |scale uniformly| is similar -- but it applies only \emph{one} scaling factor to fit into the prescribed dimensions. This scaling factor will be the same for both, |width| and |height|. Naturally, this will result in unsatisfactory results because either the final width or the final height will not be met. Therefore, this choice will enlarge or shrink limits to get the desired dimensions. Thus, the unit vectors have exactly the same size \emph{relations and angles} as they had before the scaling; only their magnitude is changed uniformly. But due to the given constraints, parts of the image may be empty or may no longer be visible. In case the outcome needs manual improvements, you can improve the visibility by modifying |width| and/or |height| (more freedom is not supported for this choice). Note that \PGFPlots\ implements this rescaling \textbf{if and only if} $e_{yx} = 0$ (for two--dimensional axes) or $e_{zx} = 0$ (for three-dimensional axes). In other words: for two--dimensional axes, the |y| vector has to be parallel to the canvas $y$ direction and for three-dimensional axes, the same holds for the |z| vector. The idea is to rescale only the vertical part of one unit vector and to change the limits of that respective axis simultaneously. The |scale uniformly| choice is used to realize the \verbpdfref{\addplot3 graphics} feature, see the documentation in Section~\ref{sec:plotgraphics3d} on page~\pageref{sec:plotgraphics3d} for its examples. + +\end{pgfplotskey} + \begin{pgfplotsxykey}{\x mode=\mchoice{normal,linear,log} (initially normal)} Allows to choose between linear (=normal) or logarithmic axis scaling or logplots for each $x,y,z$-combination. @@ -119,7 +156,7 @@ Furthermore, support for custom vectors in 3D plots is currently \textbf{experim {\def\pgfmanualpdflabel#1#2{} \begin{pgfplotsxykey}{\x\ dir=\mchoice{normal,reverse} (initially normal)} - Allows to revert axis directions such that values are given in decreasing order. + Allows to reverse axis directions such that values are given in decreasing order. This key is documented in all detail on page~\pageref{key:pgfplots:xydir}. \end{pgfplotsxykey} @@ -128,7 +165,7 @@ Furthermore, support for custom vectors in 3D plots is currently \textbf{experim \begin{pgfplotskey}{axis equal=\marg{true,false} (initially false)} Each unit vector is set to the same length while the axis dimensions stay constant. Afterwards, the size ratios for each unit in $x$ and $y$ will be the same. - Axis limits will be enlarge to compensate for the scaling effect. + Axis limits will be enlarged to compensate for the scaling effect. \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[axis equal=false,grid=major] @@ -156,6 +193,8 @@ Furthermore, support for custom vectors in 3D plots is currently \textbf{experim \end{loglogaxis} \end{tikzpicture} \end{codeexample} + + The configuration |axis equal=true| is actually just a style which sets |unit vector ratio=1 1 1,unit rescale keep size=true|. \end{pgfplotskey} \begin{pgfplotskey}{axis equal image=\marg{true,false} (initially false)} @@ -187,4 +226,114 @@ Furthermore, support for custom vectors in 3D plots is currently \textbf{experim \end{loglogaxis} \end{tikzpicture} \end{codeexample} + The configuration |axis equal image=true| is actually just a style which sets |unit vector ratio=1 1 1,unit rescale keep size=false|. +\end{pgfplotskey} + +\begin{pgfplotskey}{unit vector ratio=\marg{rx ry rz} (initially empty)} + Allows to provide custom unit vector ratios. + + The key allows to tell \PGFPlots\ that, for example, one unit in $x$ direction should be twice as long as one unit in $y$ direction: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[unit vector ratio=2 1,small] + \addplot coordinates {(0,0) (1,1)}; + \addplot table[row sep=\\,col sep=&] { + x & y \\ + 0 & 1 \\ + 1 & 0 \\ + }; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent Providing |unit vector ratio=2 1| means that $\frac{||e_x||}{||e_y||} = 2$ where each coordinate $(x,y)$ is placed at $x e_x + y e_y \in \R^2$ (see the documentation for |x| and |y| options). Note that |axis equal| is nothing but |unit vector ratio=1 1 1|. + + The arguments \meta{rx}, \meta{ry}, and \meta{rz} are ratios for $x$, $y$ and $z$ vectors, respectively. For two--dimensional axes, only \meta{rx} and \meta{ry} are considered; they are provided relative to the $y$ axis. In other words: the $x$ unit vector will be \meta{rx} $/$ \meta{ry} times longer than the $y$ unit vector. For three-dimensional axes, all three arguments can be provided; they are interpreted relative to the $z$ unit vector. Thus, a three dimensional axis with |unit vector ratio=1 2 4| will have an $x$ unit which is $\nicefrac 14$ the length of the $z$ unit, and a $y$ unit which is $\nicefrac24$ the length of the $z$ unit. + + Trailing values of |1| can be omitted, i.e.\ |unit vector ratio=2 1| is the same as |unit vector ratio=2|; and |unit vector ratio=3 2 1| is the same as |unit vector ratio=3 2|. + An empty value |unit vector ratio={}| disables unit vector rescaling. + + \begin{pgfplotskeylist}{% + unit vector ratio*=\marg{rx ry rz}, + unit rescale keep size=\marg{true,false} (initially true)} + In the default configuration, \PGFPlots\ maintains the original axis dimensions even though |unit vector ratio| involves different scalings. + + It does so by enlarging the limits. +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[footnotesize,xlabel=$x$,ylabel=$y$,unit vector ratio=] + \addplot3[surf,samples=10,domain=0:1] {(1-x)*y}; + \end{axis} +\end{tikzpicture} +\begin{tikzpicture} + \begin{axis}[footnotesize,xlabel=$x$,ylabel=$y$,unit vector ratio=1 1 1] + \addplot3[surf,samples=10,domain=0:1] {(1-x)*y}; + \end{axis} +\end{tikzpicture} +\begin{tikzpicture} + \begin{axis}[footnotesize,xlabel=$x$,ylabel=$y$,unit vector ratio=0.25 0.5] + \addplot3[surf,samples=10,domain=0:1] {(1-x)*y}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The example above has the same plot, with three different unit ratios. The first has no limitations (it is the default configuration). The second uses the same length for each unit vector and enlarges the limits in order to maintain the same dimensions. The third example has an $x$ unit which is $\nicefrac14$ the length of a $z$ unit, and an $y$~unit which is $\nicefrac12$ the length of a $z$~unit. + + The |unit rescale keep size=false| key, or, equivalently, |unit vector ratio*=...|, does not enlarge limits: +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[footnotesize,xlabel=$x$,ylabel=$y$,unit vector ratio=] + \addplot3[surf,samples=10,domain=0:1] {(1-x)*y}; + \end{axis} +\end{tikzpicture} +\begin{tikzpicture} + \begin{axis}[footnotesize,xlabel=$x$,ylabel=$y$, + unit rescale keep size=false, + unit vector ratio=1 1 1] + \addplot3[surf,samples=10,domain=0:1] {(1-x)*y}; + \end{axis} +\end{tikzpicture} +\begin{tikzpicture} + \begin{axis}[footnotesize,xlabel=$x$,ylabel=$y$, + unit vector ratio*=0.25 0.5, % the '*' implies 'unit rescale keep size=false' + ] + \addplot3[surf,samples=10,domain=0:1] {(1-x)*y}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + \end{pgfplotskeylist} +\end{pgfplotskey} + +\begin{pgfplotsxykeylist}{\x\ post scale=\marg{scale} (initially 1)} + Lets \PGFPlots\ compute the axis scaling based on |width|, |height|, |view|, |plot box ratio|, |axis equal| or explicit unit vectors with |x|, |y|, |z| and \emph{rescales} the resulting vector(s) according to \meta{scale}. +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[y post scale=1] + \addplot {x}; + \end{axis} +\end{tikzpicture} +\begin{tikzpicture} + \begin{axis}[y post scale=2] + \addplot {x}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + Thus, the axis becomes \emph{larger}. This overrules any previous scaling. + +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[z post scale=1] + \addplot3[surf] {x*y}; + \end{axis} +\end{tikzpicture} +\begin{tikzpicture} + \begin{axis}[z post scale=2] + \addplot3[surf] {x*y}; + \end{axis} +\end{tikzpicture} +\end{codeexample} +\end{pgfplotsxykeylist} + +\begin{pgfplotskey}{scale=\marg{uniform scale}} + A style which sets |x post scale|, |y post scale|, and |z post scale| to the same \meta{uniform scale} value. + + This is effectively the same as if you rescale the complete axis (without changing sizes of descriptions). \end{pgfplotskey} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.specifyrange.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.specifyrange.tex index fb074d59ca8..5dc32cc749d 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.specifyrange.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.specifyrange.tex @@ -2,17 +2,17 @@ \subsection{Specifying the Plotted Range} -\begin{pgfplotsxykeylist}{\x min=\marg{coord},\x max=\marg{coord}} -The options |xmin|, |xmax| and |ymin|, |ymax| allow to define the axis limits, i.e.\ the lower left and the upper right corner. Everything outside of the axis limits will be clipped away. +\begin{pgfplotsxykeylist}{\x min=\marg{coord},\x max=\marg{coord},min=\marg{coord},max=\marg{coord}} +These options allow to define the axis limits, i.e.\ the lower left and the upper right corner. Everything outside of the axis limits will be clipped away. -Each missing limit will be determined automatically. +Each of these keys is optional, and missing limits will be determined automatically from input data. Here, the |min| and |max| keys set limits for $x$, $y$ and $z$ to the same \meta{coord}. -If $x$-limits have been specified explicitly and $y$-limits are computed automatically, the automatic computation of $y$-limits will only considers points which fall into the specified $x$-range (and vice--versa). The same holds true if, for example, only |xmin| has been provided explicitly: in that case, |xmax| will be updated only for points for which $x \ge $|xmin| holds. This feature can be disabled using |clip limits=false|. +If $x$-limits have been specified explicitly and $y$-limits are computed automatically, the automatic computation of $y$-limits will only considers points which fall into the specified $x$-range (and vice--versa). The same holds true if, for example, only |xmin| has been provided explicitly: in that case, |xmax| will be updated only for points for which $x \ge \,$|xmin| holds. This feature can be disabled using |clip limits=false|. Axis limits can be increased automatically using the |enlargelimits| option. \begin{codeexample}[] \begin{tikzpicture} - \begin{axis} + \begin{axis}[title=Auto Limits] \addplot {x^2}; \end{axis} \end{tikzpicture} @@ -20,7 +20,7 @@ Axis limits can be increased automatically using the |enlargelimits| option. \begin{codeexample}[] \begin{tikzpicture} - \begin{axis}[xmin=0] + \begin{axis}[title={\texttt{xmin=0}},xmin=0] \addplot {x^2}; \end{axis} \end{tikzpicture} @@ -28,11 +28,38 @@ Axis limits can be increased automatically using the |enlargelimits| option. \begin{codeexample}[] \begin{tikzpicture} - \begin{axis}[ymax=10] + \begin{axis}[title={\texttt{ymax=10}},ymax=10] \addplot {x^2}; \end{axis} \end{tikzpicture} \end{codeexample} + + Note that even if you provide |ymax=10|, data points with $y>10$ will still be visualized -- producing a line which leaves the plotted range. + + See also the |restrict x to domain| and |restrict x to domain*| keys -- they allow to discard or clip input coordinates which are outside of some domain, respectively. + + + During the visualization phase, i.e.\ during |\end{axis}|, these keys will be set to the final axis limits. You can access the values by means of |\pgfkeysvalueof{/pgfplots/xmin}|, for example: +\begin{codeexample}[] +\begin{tikzpicture} +\begin{axis}[ + % Show (automatically) computed limits: + title={ + Axis limits are + $ + [\pgfmathprintnumber{\pgfkeysvalueof{/pgfplots/xmin}} + :\pgfmathprintnumber{\pgfkeysvalueof{/pgfplots/xmax}} + ] \times + [\pgfmathprintnumber{\pgfkeysvalueof{/pgfplots/ymin}} + :\pgfmathprintnumber{\pgfkeysvalueof{/pgfplots/ymax}} + ]$ }, +] + \addplot {x^2}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \label{page:access:limits} + This access is possible inside of any axis description (like |xlabel|, |title|, |legend entries| etc.) or any annotation (i.e. inside of |\node|, |\draw| or |\path| and coordinates in |(axis cs:|\meta{x}|,|\meta{y}|)|), but not inside of |\addplot| (limits may not be complete at this stage). \end{pgfplotsxykeylist} \begin{pgfplotsxykey}{\x mode=\mchoice{normal,linear,log} (initially normal)} @@ -44,7 +71,7 @@ Axis limits can be increased automatically using the |enlargelimits| option. \begin{pgfplotsxykey}{\x\ dir=\mchoice{normal,reverse} (initially normal)} \pgfkeys{/pdflinks/search key prefixes in/.add={/pgfplots/,}{}} - Allows to revert axis directions such that values are given in decreasing order. + Allows to reverse axis directions such that values are given in decreasing order. \label{key:pgfplots:xydir} \begin{codeexample}[] \begin{tikzpicture} @@ -66,7 +93,7 @@ Axis limits can be increased automatically using the |enlargelimits| option. \end{tikzpicture} \end{codeexample} - Note, that axis descriptions and relative positioning macros will stay at the same place as they would for non--reversed axes. + Note that axis descriptions and relative positioning macros will stay at the same place as they would for non--reversed axes. \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[ @@ -165,6 +192,15 @@ You can set |xmin|, |xmax| and |ymin|, |ymax| to the minimum/maximum values of y \end{pgfplotsxykeylist} +\begin{pgfplotsxykeylist}{% + log origin \x=\mchoice{0,infty} (initially infty),% + log origin=\mchoice{0,infty} (initially infty)}% + Allows to choose which coordinate is the logical ``origin'' of a logarithmic plot (either for a particular axis or for all of them). + + The choice |log origin=infty| is probably useful for stacked plots: it defines the ``origin'' in log--coordinates to be $-\infty$. To be compatibly with older versions, this is the default. + + The choice |log origin=0| defines the logarithmic origin to be the natural choice $\log(1)=0$. This is particularly useful for |ycomb| plots. +\end{pgfplotsxykeylist} \begin{pgfplotskey}{update limits=\mchoice{true,false} (initially true)} Can be used to interrupt updates of the data limits (for example, for single |\addplot| commands). @@ -174,7 +210,7 @@ You can set |xmin|, |xmax| and |ymin|, |ymax| to the minimum/maximum values of y \begin{environment}{{pgfplotsinterruptdatabb}} \index{Bounding Box Control!Disable \protect\emph{data} bounding box modifications} - Everything in \marg{environment contents} will not contribute to the data bounding box. + Everything in \meta{environment contents} will not contribute to the data bounding box. The same effect can be achieved with |update limits=false| inside curly braces. \end{environment} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.styleoptions.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.styleoptions.tex index 99dfc3a5137..9290451c7f5 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.styleoptions.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.styleoptions.tex @@ -5,15 +5,15 @@ \PGFPlots\ provides many styles to customize its appearance and behavior. They can be defined and changed in any place where keys are allowed. Furthermore, own styles are defined easily. \begin{handler}{{.style}=\marg{key-value-list}} - Defines or redefines a style \meta{key}. A style is a normal key which will set all options in \marg{key-value-list} when it is set. + Defines or redefines a style \meta{key}. A style is a normal key which will set all options in \meta{key-value-list} when it is set. - Use |\pgfplotsset{|\meta{key}|/.style={|\meta{key-value-list}|}}| to (re-) define a style \meta{key} in the namespace |/pgfplots|. + Use |\pgfplotsset{|\meta{key}|/.style={|\meta{key-value-list}|}}| to (re)define a style \meta{key} in the namespace |/pgfplots|. \end{handler} \begin{handler}{{.append style}=\marg{key-value-list}} - Appends \marg{key-value-list} to an already existing style \meta{key}. This is the preferred method to change the predefined styles: if you only append, you maintain compatibility with future versions. + Appends \meta{key-value-list} to an already existing style \meta{key}. This is the preferred method to change the predefined styles: if you only append, you maintain compatibility with future versions. - Use |\pgfplotsset{|\meta{key}|/.append style={|\meta{key-value-list}|}}| to append \marg{key-value-list} to the style \meta{key}. This will assume the prefix |/pgfplots|. + Use |\pgfplotsset{|\meta{key}|/.append style={|\meta{key-value-list}|}}| to append \meta{key-value-list} to the style \meta{key}. This will assume the prefix |/pgfplots|. \end{handler} \subsubsection*{Styles installed for linear/logarithmic axis} @@ -31,7 +31,7 @@ \end{stylekey} \begin{stylekey}{/pgfplots/every loglog axis (initially empty)} - Installed at the beginning of every double--logarithmic plot. + Installed at the beginning of every log--log plot. \end{stylekey} \begin{stylekey}{/pgfplots/every linear axis (initially empty)} @@ -83,7 +83,8 @@ \pgfplotsshortstylekey label style=every axis label\pgfeov \begin{xystylekey}{/pgfplots/every axis \x\ label} - Used only~$x$ or only for~$y$ labels, installed after `|every axis label|'. +Used only for $x$, $y$, or $z$ labels, respectively and installed after + `|every axis label|'. The initial settings are set by |xlabel absolute| and its variants (if the initial configuration |compat=pre 1.3| is active) or |xlabel near ticks| which provides the better spacing as it incorporates the tick label sizes to compute the position. @@ -158,11 +159,11 @@ which can be reset if needed. inner axis line style=\marg{key-value-list}, outer axis line style=\marg{key-value-list}, \x\ axis line style=\marg{key-value-list}} - These options modify selects parts of the axis line styles. They set |every inner x axis line| and |every outer x axis line| and the respective $y$ variants. + These options modify parts of the axis line styles. They append options to |every inner x axis line| and |every outer x axis line| and the respective $y$/$z$ variants. \end{pgfplotsxykeylist} \noindent -Please refer to section~\ref{pgfplots:page:axislines} on page~\pageref{pgfplots:page:axislines} for details about styles for axis lines. +Please refer to Section~\ref{pgfplots:page:axislines} on page~\pageref{pgfplots:page:axislines} for details about styles for axis lines. \begin{stylekey}{/pgfplots/every 3d box foreground} Installed for the parts drawn by |3d box=complete|. This affects axis lines, tick lines and grid lines drawn in the \emph{foreground}. The background drawing operations have already been done when this style is evaluated. @@ -202,19 +203,23 @@ Please refer to section~\ref{pgfplots:page:axislines} on page~\pageref{pgfplots: \pgfplotsshortxystylekeys tick label style,ticklabel style=every tick label\pgfeov \begin{xystylekey}{/pgfplots/every \x\ tick label (initially empty)} - Used for each $x$ (or $y$, respectively) tick label, installed after `|every tick label|'. + Used for each $x$ (or $y$ or $z$, respectively) tick label, installed after `|every tick label|'. \end{xystylekey} \pgfplotsshortxystylekeys \x\ tick label style,\x ticklabel style=every \x\ tick label\pgfeov \begin{xystylekey}{/pgfplots/every \x\ tick scale label} - Configures placement and display of the nodes containing the order of magnitude of tick labels, see section~\ref{sec:scaled:ticks} for more information about |scaled ticks|. + Configures placement and display of the nodes containing the order of magnitude of tick labels, see Section~\ref{sec:scaled:ticks} for more information about |scaled ticks|. The initial settings are \begin{codeexample}[code only] \pgfplotsset{ every x tick scale label/.style={at={(1,0)},yshift=-2em,left,inner sep=0pt}, - every y tick scale label/.style={at={(0,1)},above right,inner sep=0pt,yshift=0.3em}} + every y tick scale label/.style={at={(0,1)},above right,inner sep=0pt,yshift=0.3em}, + every z tick scale label/.style={ + at={(zticklabel cs:1.2,-\pgfplotsvalueoflargesttickdimen z -0.3em)}, + anchor=near zticklabel,inner sep=0pt}, + } \end{codeexample} \end{xystylekey} @@ -319,7 +324,7 @@ The initial setting is \pgfplotsshortstylekey error bars/error bar style=every error bar\pgfeov -\subsubsection{(Re-)Defining Own Styles} +\subsubsection{(Re)Defining Own Styles} \label{sec:styles:own}% Use |\pgfplotsset{|\meta{style name}|/.style=|\marg{key-value-list}|}| to create own styles. If \meta{style name} exists already, it will be replaced. Please note that it is \emph{not} possible to use the \Tikz-command |\tikzstyle|\marg{style name}|=[]| in this context\footnote{This was possible in a previous version and is still supported for backwards compatibility. But in some cases, it may not work as expected.}. diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.symbolic-transformations.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.symbolic-transformations.tex index 1b6bcb55191..1bfde0062d4 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.symbolic-transformations.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.symbolic-transformations.tex @@ -52,7 +52,7 @@ \subsubsection{String Symbols as Input Coordinates} It is possible to provide a string dictionary to \PGFPlots. An input coordinate can then use any symbol provided in that dictionary. \begin{pgfplotsxykeylist}{symbolic \x\space coords=\marg{dictionary}}% - A styles which sets |x coord trafo| and |x coord inv trafo| (or the respective |y| or |z| variants) such that any element in \marg{dictionary} is a valid input coordinate. The \marg{dictionary} can be a comma separated list or a list terminated with `|\\|'. In both case, white spaces are considered to be part of the names (use `|%|' at end of lines). + A style which sets |x coord trafo| and |x coord inv trafo| (or the respective |y| or |z| variants) such that any element in \meta{dictionary} is a valid input coordinate. The \meta{dictionary} can be a comma separated list or a list terminated with `|\\|'. In both cases, white space is considered to be part of the names (use `|%|' at end of lines). The dictionary will assign integer numbers to every element. These integers are used internally for arithmetics. Finally, the inverse transformation takes a fixed point number and maps it to the nearest integer, and that integer is mapped into the dictionary. \begin{codeexample}[] @@ -74,14 +74,16 @@ It is possible to provide a string dictionary to \PGFPlots. An input coordinate \subsubsection{Dates as Input Coordinates} \label{pgfplots:sec:date:coords} -The already mentioned application of using dates as input coordinates has been predefined, together with support for hours and minutes. It relies on the \pgfname\ calendar library which converts dates to numbers in the julian calendar. Then, one coordinate unit is one day. +The already mentioned application of using dates as input coordinates has been predefined, together with support for hours and minutes. It relies on the \pgfname\ calendar library which converts dates to numbers in the Julian calendar. Then, one coordinate unit is one day. \begin{pgfplotslibrary}{dateplot} Loads the coordinate transformation code. \end{pgfplotslibrary} -\begin{stylekey}{/pgfplots/date coordinates in=\mchoice{x,y}} - Installs |x coord trafo| and |x coord inv trafo| (or the respective $y$ variant) such that ISO dates of the form \meta{year}|-|\meta{month}|-|\meta{day} are accepted. For example, |2006-02-28| will be converted to an ``appropriate'' integer using the julian calender. Input coordinates may be of the form +\begin{stylekey}{/pgfplots/date coordinates in=\meta{coordinate}} + Installs |x coord trafo| and |x coord inv trafo| (or the respective variant for \meta{coordinate}) such that ISO dates of the form \meta{year}|-|\meta{month}|-|\meta{day} are accepted. Here, \meta{coordinate} is usually one of |x|, |y|, or |z|, but it can also contain stuff like |hist/data|. + + After installing this style, input values like |2006-02-28| will be converted to an ``appropriate'' integer using the Julian calender. Input coordinates may be of the form \meta{year}|-|\meta{month}|-|\meta{day} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tex index b12dd75e90f..7cdb4f99da7 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tex @@ -1,6 +1,8 @@ % main=manual.tex \section{The Reference} +{ +\tikzset{external/figure name/.add={}{reference_}}% \input pgfplots.reference.axis-addplot.tex \input pgfplots.reference.preliminaryoptions.tex @@ -20,5 +22,9 @@ \input pgfplots.reference.closingplots.tex \input pgfplots.reference.symbolic-transformations.tex \input pgfplots.reference.coordfiltering.tex +\input pgfplots.reference.transformations.tex \input pgfplots.reference.linefitting.tex \input pgfplots.reference.miscellaneous.tex +\input pgfplots.reference.tikzinteroperability.tex + +} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tickoptions.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tickoptions.tex index 228d9d8533a..a60d6774e55 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tickoptions.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tickoptions.tex @@ -4,18 +4,18 @@ \subsubsection{Tick Coordinates and Label Texts} \begin{pgfplotsxykey}{\x tick=\mchoice{\textbackslash empty,data,\normalfont\marg{coordinate list}} (initially \marg{})} -These options assign a list of \emph{Positions} where ticks shall be placed. The argument is either the empty string (which is the initial value), the command |\empty|, |data| or a list of coordinates. The initial configuration of an empty string means to generate these positions automatically. The choice |\empty| will result in no tick at all. The special value |data| will produce tick marks at every coordinate of the first plot. Otherwise, tick marks will be placed at every coordinate in \marg{coordinate list}. +These options assign a list of \emph{positions} where ticks shall be placed. The argument is either the empty string (which is the initial value), the command |\empty|, the special string `|data|' or a list of coordinates. The initial configuration of an empty string means to generate these positions automatically. The choice |\empty| will result in no tick at all. The special value `|data|' will produce tick marks at every coordinate of the first plot. Otherwise, tick marks will be placed at every coordinate in \meta{coordinate list}. -The \marg{coordinate list} will be used inside of a |\foreach \x in |\marg{coordinate list} statement. The format is as follows: +The \meta{coordinate list} will be used inside of a |\foreach \x in |\marg{coordinate list} statement. The format is as follows: \begin{itemize} \item |{0,1,2,5,8,1e1,1.5e1}| (a series of coordinates), \item |{0,...,5}| (the same as |{0,1,2,3,4,5}|), \item |{0,2,...,10}| (the same as |{0,2,4,6,8,10}|), \item |{9,...,3.5}| (the same as |{9, 8, 7, 6, 5, 4}|), \item See \cite[Section~34]{tikz} for a more detailed definition of the options. - \item Please be careful with white spaces inside of \marg{coordinate list} (at least around the dots). + \item Please be careful with white spaces inside of \meta{coordinate list} (at least around the dots). \end{itemize} -For logplots, \PGFPlots\ will apply $\log(\cdot)$ to each element in `\marg{coordinate list}'. +For logplots, \PGFPlots\ will apply $\log(\cdot)$ to each element in `\meta{coordinate list}' (similarly, any custom transformations are applied to the argument list). \begin{codeexample}[] \begin{tikzpicture} \begin{loglogaxis}[xtick={12,9897,1468864}] @@ -41,10 +41,10 @@ For logplots, \PGFPlots\ will apply $\log(\cdot)$ to each element in `\marg{coor \vspace*{0.3cm} \noindent -The default choice for tick \emph{positions} in normal plots is to place a tick at each coordinate~$i\cdot h$. The step size~$h$ depends on the axis scaling and the axis limits. It is chosen from a list a ``feasible'' step sizes such that neither too much nor too few ticks will be generated. The default for logplots is to place ticks at positions $10^i$ in the axis' range. The positions depend on the axis scaling and the dimensions of the picture. If log plots contain just one (or two) positions $10^i$ in their limits, ticks will be placed at positions $10^{i\cdot h}$ with ``feasible'' step sizes $h$ as in the case of linear axis. +The default choice for tick \emph{positions} in normal plots is to place a tick at each coordinate~$i\cdot h$. The step size~$h$ depends on the axis scaling and the axis limits. It is chosen from a list of ``feasible'' step sizes such that neither too much nor too few ticks will be generated. The default for logplots is to place ticks at positions $10^i$ in the axis' range. The positions depend on the axis scaling and the dimensions of the picture. If log plots contain just one (or two) positions $10^i$ in their limits, ticks will be placed at positions $10^{i\cdot h}$ with ``feasible'' step sizes $h$ as in the case of linear axis. \noindent -The tick \emph{appearance} can be (re-)configured with +The tick \emph{appearance} can be (re)configured with \begin{codeexample}[code only] \pgfplotsset{tick style={very thin,gray}}% modifies the style `every tick' \pgfplotsset{minor tick style={black}} % modifies the style `every minor tick' @@ -117,6 +117,23 @@ These style commands can be used at any time. The tick line width can be configu \end{pgfplotsxykeylist} +\begin{pgfplotsxykeylist}{minor \x tick=\marg{position list} (initially empty),minor tick=\marg{position list}} + Allows to provide a list of minor tick positions manually. The syntax is exactly the same as for |xtick| or |ytick|: simply provide a comma--separated list of tick positions. + + In contrast to |minor x tick num|, this key allows to provide \emph{non--uniform} minor tick positions. + +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis}[minor xtick={-3,1},grid=minor] + \addplot {x^3}; + \addplot {-20*x}; + \end{axis} +\end{tikzpicture} +\end{codeexample} + + This key has precedence over |minor x tick num| and its variants; if both of them are given, |minor xtick| is preferred and |minor x tick num| is ignored. +\end{pgfplotsxykeylist} + \begin{pgfplotsxykey}{extra \x\ ticks=\marg{coordinate list}} Adds \emph{additional} tick positions and tick labels to the $x$~or~$y$ axis. `Additional' tick positions do not affect the normal tick placement algorithms, they are drawn after the normal ticks. This has two benefits: first, you can add single, important tick positions without disabling the default tick label generation and second, you can draw tick labels `on top' of others, possibly using different style flags. @@ -221,11 +238,11 @@ Assigns a \emph{list} of tick \emph{labels} to each tick position. Tick \emph{po This is one of two options to assign tick labels directly. The other option is |xticklabel=|\marg{command} (or |yticklabel=|\marg{command}). The option `|xticklabel|' offers higher flexibility while `|xticklabels|' is easier to use. See also the variant |xticklabels from table|. -The argument \marg{label list} has the same format as for ticks, that means +The argument \meta{label list} has the same format as for ticks, that means \begin{codeexample}[code only] xticklabels={$\frac{1}{2}$,$e$} \end{codeexample} -Denotes the two--element--list $\{\frac 12, e\}$. The list indices match the indices of the tick positions. If you need commas inside of list elements, use +denotes the two--element--list $\{\frac 12, e\}$. The list indices match the indices of the tick positions. If you need commas inside of list elements, use \begin{codeexample}[code only] xticklabels={{0,5}, $e$}. \end{codeexample} @@ -275,6 +292,8 @@ coordinates { \end{codeexample} Note that it is also possible to terminate list entries with two backslashes, |\\|. In that case, the last entry needs to be terminated by |\\| as well (it is the same alternative syntax which is also accepted for |\legend| and |cycle list|). + + Please keep in mind that the arguments \emph{always} refer the a list of tick positions, although it does not alter or define the list of positions. Consequently, you should also provide the list of positions. Note that a list of positions might be longer than what is actually displayed (in case the axis limits clip some of the value away), but the index mapping into \meta{label list} still includes the clipped values. \end{pgfplotsxykey} @@ -283,11 +302,11 @@ These keys change the \TeX-command which creates the tick \emph{labels} assigned This is one of the two options to assign tick labels directly. The other option is `|xticklabels=|\marg{label list}' (or |yticklabels=|\marg{label list}). The option `|xticklabel|' offers higher flexibility while `|xticklabels|' is easier to use. -The argument \marg{command} can be any \TeX-text. The following commands are valid inside of \marg{command}: +The argument \meta{command} can be any \TeX-text. The following commands are valid inside of \meta{command}: \begin{description} \item[] \declareandlabel{\tick} The current element of option |xtick| (or |ytick|). \item[] \declareandlabel{\ticknum} The current tick number, starting with~0 (it is a macro containing a number). - \item[] \declareandlabel{\nexttick} This command is only valid in case if the |x tick label as interval| option is set (or the corresponding variable for~$y$). It will contain the position of the next tick position, that means the right boundary of the tick interval. + \item[] \declareandlabel{\nexttick} This command is only valid if the |x tick label as interval| option is set (or the corresponding variable for~$y$). It will contain the position of the next tick position, that means the right boundary of the tick interval. \end{description} The default argument is \begin{itemize} @@ -304,7 +323,7 @@ The default argument is } \end{codeexample} \end{itemize} -That means you can configure the appearance of linear axis with the number formatting options described in section~\ref{sec:number:printing} and logarithmic axis with |log number format code|, see below. +That means you can configure the appearance of linear axis with the number formatting options described in Section~\ref{sec:number:printing} and logarithmic axis with |log number format code|, see below. \begin{codeexample}[] \begin{tikzpicture} @@ -454,7 +473,7 @@ There is also the style ``|every tick|'' which applies to both, major and minor \end{pgfplotsxykeylist} \begin{pgfplotsxykeylist}{\x tickmin=\marg{coord}, \x tickmax=\marg{coord}} - These keys can be used to modify minimum/maximum values before ticks are drawn. Because this applies to axis discontinuities, it is described on page~\pageref{key:xytickminmax} under section~\ref{key:xytickminmax}, ``Axis Discontinuities"'. + These keys can be used to modify minimum/maximum values before ticks are drawn. Because this applies to axis discontinuities, it is described on page~\pageref{key:xytickminmax} in Section~\ref{key:xytickminmax}, ``Axis Discontinuities"'. \end{pgfplotsxykeylist} \subsubsection{Tick Alignment: Positions and Shifts} @@ -466,7 +485,7 @@ For $x$, the additional choices |bottom| and |top| can be used which are equival Changing |tick pos| will also affect the placement of tick labels. -Note that it can also affect |axis lines| key although not all combinations make sense. Make sure the settings are consistent. +Note that it can also affect the |axis lines| key, although not all combinations make sense. Make sure the settings are consistent. \end{pgfplotsxykeylist} \begin{pgfplotsxykeylist}{% @@ -535,7 +554,7 @@ These tick alignment options are set automatically by the |axis x line| and |axi \begin{pgfplotsxykeylist}{% \x ticklabel shift=\marg{dimension} (initially empty),% ticklabel shift=\marg{dimension} (initially empty)} - Shifts tick labels in direction of the outer unit normal of the axis by an amount of \marg{dimension}. The |ticklabel shift| sets the same value for all axes. + Shifts tick labels in direction of the outer unit normal of the axis by an amount of \meta{dimension}. The |ticklabel shift| sets the same value for all axes. This is usually unnecessary as the |anchor| of a tick label already yields enough spacing in most cases. \end{pgfplotsxykeylist} @@ -546,7 +565,7 @@ These tick alignment options are set automatically by the |axis x line| and |axi scaled ticks=\mchoice{true,false,base 10:{\normalfont\meta{e}},real:{\normalfont\meta{num}},manual:{\normalfont\marg{label}\marg{code}}} (initially true),% scaled \x\ ticks=\meta{one of the values} (initially true)% } -Allows to factor out common exponents in tick labels for \emph{linear axes}. For example, if you have tick labels $20000,40000$ and $60000$, you may want to save some space and write $2,4,6$ with a separate factor `$\cdot 10^4$'. Use `|scaled ticks=true|' to enable this feature. In case |true|, tick scaling will be triggered if the data range is either too large or too small (see below). +Allows to factor out common exponents in tick labels for \emph{linear axes}. For example, if you have tick labels $20000,40000$ and $60000$, you may want to save some space and write $2,4,6$ with a separate factor `$\cdot 10^4$'. Use `|scaled ticks=true|' to enable this feature. In case of |true|, tick scaling will be triggered if the data range is either too large or too small (see below). \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[scaled ticks=true] @@ -623,14 +642,13 @@ A further -- not very useful -- example is shown below. Every $x$ tick label has Unfortunately, \meta{num} can't be evaluated with \PGF's math parser (yet) to maintain the full data range accepted by \PGFPlots. - The last option, |scaled ticks=manual:|\marg{label}\marg{code} allows even more customization. It allows \emph{full control} over the displayed scaling label \emph{and} the scaling code: \marg{text} is used as-is inside of the tick scaling label while \marg{code} is supposed to be a one-argument-macro which scales each tick. Example: + The last option, |scaled ticks=manual:|\marg{label}\marg{code} allows even more customization. It allows \emph{full control} over the displayed scaling label \emph{and} the scaling code: \meta{label} is used as-is inside of the tick scaling label while \meta{code} is supposed to be a one-argument-macro which scales each tick. Example: \begin{codeexample}[] \begin{tikzpicture} \begin{axis}[ % warning: the '%' signs are necessary (?) scaled y ticks=manual:{$+65\,535$}{% - \pgfmathfloatcreate{1}{6.5535}{4}% - \pgfmathfloatsubtract{#1}{\pgfmathresult}% + \pgfmathparse{#1-65535}% }, yticklabel style={ /pgf/number format/fixed, @@ -648,11 +666,11 @@ A further -- not very useful -- example is shown below. Every $x$ tick label has \end{codeexample} \noindent The example uses |$+65\,535$| as tick scale label content. Furthermore, it defines the customized tick label formula $y - (+6.5535\cdot 10^4) = y - 65535$ to generate $y$ tick labels. -The \marg{text} can be arbitrary. It is completely in user control. The second argument, \marg{code} is supposed to be a one-argument-macro in which |#1| is the current tick position in floating point representation. The macro is expected to assign |\pgfmathresult| (also in floating point representation). The \PGF\ manual~\cite{tikz} contains detailed documentation about its math engine (including floating point\footnote{However, that particular stuff is newer than \PGF\ $2.00$. At the time of this writing, it is only available as (public) CVS version.}). +The \meta{label} can be arbitrary. It is completely in user control. The second argument, \meta{code} is supposed to be a one-argument-macro in which |#1| is the current tick position in floating point representation. The macro is expected to assign |\pgfmathresult| (as a number). The \PGF\ manual~\cite{tikz} contains detailed documentation about its math engine. This feature may also be used do transform coordinates in case they can't be processed with \PGFPlots: transform them and supply a proper tick scaling method such that tick labels represent the original range. -If \marg{text} is empty, the tick scale label won't be drawn (and no space will be occupied). +If \meta{label} is empty, the tick scale label won't be drawn (and no space will be occupied). Tick scaling does \emph{not} work for logarithmic axes. \end{pgfplotsxykeylist} @@ -711,30 +729,30 @@ If the code is empty, no tick scale label will be drawn (and no space is consume \end{codeexample} \end{pgfplotskey} -\begin{pgfplotskey}{scale ticks below=\marg{exponent}} -Allows fine tuning of the `|scaled ticks|' algorithm: if the axis limits are of magnitude $10^e$ and $e<$\marg{exponent}, the common prefactor~$10^e$ will be factored out. The default is \makeatletter -\pgfplots@scale@ticks@below@exponent -\makeatother. +\let\itsinitial=\pgfplots@scale@ticks@below@exponent +\makeatother +\begin{pgfplotskey}{scale ticks below=\marg{exponent} (initially \itsinitial)} +Allows fine tuning of the `|scaled ticks|' algorithm: if the axis limits are of magnitude $10^e$ and $e<$\meta{exponent}, the common prefactor~$10^e$ will be factored out. The default is \end{pgfplotskey} -\begin{pgfplotskey}{scale ticks above=\marg{exponent}} -Allows fine tuning of the '|scaled ticks|' algorithm: if the axis limits are of magnitude $10^e$ and $e>$\marg{exponent}, the common prefactor~$10^e$ will be factored out. The default is \makeatletter -\pgfplots@scale@ticks@above@exponent -\makeatother. +\let\itsinitial=\pgfplots@scale@ticks@above@exponent +\makeatother +\begin{pgfplotskey}{scale ticks above=\marg{exponent} (initially \itsinitial)} +Allows fine tuning of the '|scaled ticks|' algorithm: if the axis limits are of magnitude $10^e$ and $e>$\meta{exponent}, the common prefactor~$10^e$ will be factored out. \end{pgfplotskey} -\subsubsection{Tick Fine Tuning} +\subsubsection{Tick Fine-Tuning} The tick placement algorithm depends on a number of parameters which can be tuned to get better results. -\begin{pgfplotskey}{max space between ticks=\marg{number} (initially 35)} +\begin{pgfplotskey}{max space between ticks=\marg{number} (initially \axisdefaulttickwidth)} \label{maxspacebetweenticks} - Configures the maximum space between adjacent ticks in full points. The suffix ``|pt|'' has to be omitted and fractional numbers are not supported. The default is~\axisdefaulttickwidth. + Configures the maximum space between adjacent ticks in full points. The suffix ``|pt|'' has to be omitted and fractional numbers are not supported. \end{pgfplotskey} -\begin{pgfplotskey}{try min ticks=\marg{number} (initially 3)} - Configures a loose lower bound on the number of ticks. It should be considered as a suggestion, not a tight limit. The default is~\axisdefaulttryminticks. This number will increase the number of ticks if `|max space between ticks|' produces too few of them. +\begin{pgfplotskey}{try min ticks=\marg{number} (initially \axisdefaulttryminticks)} + Configures a loose lower bound on the number of ticks. It should be considered as a suggestion, not a tight limit. This number will increase the number of ticks if `|max space between ticks|' produces too few of them. The total number of ticks may still vary because not all fractional numbers in the axis' range are valid tick positions. \end{pgfplotskey} @@ -744,11 +762,11 @@ The tick placement algorithm depends on a number of parameters which can be tune \end{pgfplotskey} \begin{pgfplotskeylist}{tickwidth=\marg{dimension} (initially 0.15cm),major tick length=\marg{dimension} (initially 0.15cm)} - Sets the width of major tick lines. + Sets the length of major tick lines. \end{pgfplotskeylist} \begin{pgfplotskeylist}{subtickwidth=\marg{dimension} (initially 0.1cm),minor tick length=\marg{dimension} (initially 0.1cm)} - Sets the width of minor tick lines. + Sets the length of minor tick lines. \end{pgfplotskeylist} \begin{pgfplotsxykeylist}{\x tick placement tolerance (initially 0.05pt)} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tikzinteroperability.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tikzinteroperability.tex new file mode 100644 index 00000000000..22c2132ac45 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.tikzinteroperability.tex @@ -0,0 +1,121 @@ +\subsection{\tikzname\ Interoperability} +\label{pgfplots:tikz:interoperability} + +\PGFPlots\ is built on top of \Tikz/\pgfname, and it inherits most of power to visualize plots. However, their coordinate systems do not match up -- for good reason: \PGFPlots\ operates on logical (data) coordinates whereas \Tikz\ operates on image coordinates. + +Occasionally, one may want to synchronize both in order to generate a graphic -- and the question arises how to match the coordinates from \Tikz\ to \PGFPlots\ and vice--versa. This section explains how to match coordinates and it discusses the necessary restrictions. + +There are a couple of keys in \PGFPlots\ which control the mapping of coordinates. The purpose of these keys is to implement visualization techniques, but they do things different than \Tikz\ (and they should). To match coordinates with \Tikz, one needs the following aspects: +\begin{enumerate} + \item Restrict your visualization type: a logarithmic axis simply may not fit into \Tikz\ (to be more precise: it may fit, but a \Tikz\ unit will correspond to a log--unit in \PGFPlots). + + \item Configure matching unit vectors by means of the |x| and |y| keys. The default configuration of \Tikz\ is to use |x=1cm,y=1cm,z={(0,0)}|. Note that these settings are usually overridden by \PGFPlots\ in order to respect |width| and |height| (and |view| for three--dimensional axes). + \item Disable the data scaling by means of |disabledatascaling|: \PGFPlots\ will internally apply linear coordinate transformations in order to provide the data range required for floating point arithmetics (using approximately floating point precision). Disabling the data scaling means to restrict yourself to the (small) data range supported by \Tikz---but that's probably what you want in that case. + \item Define |anchor| and position of the |axis|, probably using |anchor=origin,at={(0,0)}|. The |at={(0,0)}| configures \PGFPlots\ to place the axis at the \Tikz\ position |(0,0)| whereas |anchor=origin| means that \PGFPlots\ will place its data origin $(0,0,0)$ at the place designated by |at| (see Section~\ref{pgfplots:sec:align} for details). + + \item Make sure that the \PGFPlots\ axis contains the data origin $(0,0,0)$ in the displayed data range (i.e.\ configure |xmin|, |xmax|, |ymin|, and |ymax| appropriately). + + Without this, the |anchor=origin| key required in the previous item will be truncated to the next coordinate which is part of the displayed range. +\end{enumerate} + +\noindent Here is a simple example, first with \Tikz: +\begin{codeexample}[] +\begin{tikzpicture} +\coordinate (Point) at (1,2); + +\draw [gray] (-1,-1) grid (3,3); +\draw [blue,fill] (Point) circle (2pt) + node [right] {(1,2)}; +\end{tikzpicture} +\end{codeexample} +\noindent it displays a grid with $x,y\in[-1,3]$ and shows a node inside of it. +Now, we apply the keys discussed above to match this setting in \PGFPlots: +\begin{codeexample}[] +\begin{tikzpicture} + \coordinate (Point) at (1,2); + +\begin{axis}[ + % tell pgfplots to "grab" the axis at its + % internal (0,0) coord: + anchor=origin, + % tell pgfplots to place its anchor at (0,0): + % (This is actually the default and can + % be omitted) + at={(0pt,0pt)}, + % tell pgfplots to use the "natural" dimensions: + disabledatascaling, + % tell pgfplots to use the same unit vectors + % as tikz: + x=1cm,y=1cm, + % + % this is just as usual in pgfplots. I guess + % it is only useful if (0,0) is part of the + % range... try it out. + xmin=-1,xmax=3, ymin=-1,ymax=3,grid=both] +% this uses the point defined OUTSIDE of the axis +\draw [blue,fill] (Point) circle (2pt) + node [right] {(1,2)}; + +% this uses a TIKZ coordinate (2,0) in the axis: +\draw [blue,fill] (2,0) circle (2pt) + node [right] {(2,0)}; + +% this here will always work inside of an axis: +\draw [blue,fill] (axis cs:-1,0) circle (2pt) + node [right] {(-1,0)}; +\end{axis} +\end{tikzpicture} +\end{codeexample} + \noindent The example demonstrates several things: first, it defines a coordinate in the enclosing |tikzpicture| and uses it inside of the |axis| (at the correct position). Second, it uses the standard \Tikz\ coordinate |(2,0)| inside of the |axis|, and it is placed at the expected position. Third, it uses the approach provided by \PGFPlots\ by using the |axis cs| to designate a coordinate (this last approach does also work without the coordinate matching). + +Here is an example which inserts a \PGFPlots\ graphics correctly into a |tikzpicture|: +% \usepgfplotslibrary{patchplots} +\begin{codeexample}[] +% requires \usepgfplotslibrary{patchplots} +\begin{tikzpicture} +\begin{axis}[ + % tell pgfplots to "grab" the axis at its internal (0,0) coord: + anchor=origin, + % tell pgfplots to place its anchor at (0,0): + % (This is actually the default and can be omitted) + at={(0pt,0pt)}, + % tell pgfplots to use the "natural" dimensions: + disabledatascaling, + % tell pgfplots to use the same unit vectors as tikz: + x=1cm,y=1cm, + % + hide axis, +] +\addplot[patch,patch type=coons, + shader=interp,point meta=explicit] +coordinates { + (0,0) [0] % first corner + (1,-1) [0] % bezier control point between (0) and (3) + (4,0.7) [0] % bezier control point between (0) and (3) + % + (3,2) [1] % second corner + (4,3.5) [1] % bezier control point between (3) and (6) + (7,2) [1] % bezier control point between (3) and (6) + % + (7,1) [2] % third corner + (6,0.6) [2] % bezier control point between (6) and (9) + (4.5,-0.5) [2] % bezier control point between (6) and (9) + % + (5,-2) [3] % fourth corner + (4,-2.5) [3] % bezier control point between (9) and (0) + (-1,-2) [3] % bezier control point between (9) and (0) +}; +\end{axis} + +% this requires pgf 2.10 +\begin{scope}[every node/.style={circle,inner sep=2pt,fill=black}] +\node[pin=140:first] at (0,0) {}; +\node[pin=second] at (3,2) {}; +\node[pin=45:third] at (7,1) {}; +\node[pin=0:fourth] at (5,-2) {}; +\end{scope} +\end{tikzpicture} +\end{codeexample} +\noindent The example employs one of the |patch| plots of the |patchplots| library. Since these graphical elements typically require depth information (|z buffer|ing) and color data (|point meta|), they are only available inside of \PGFPlots. However, the configuration above ensures that coordinates match one-to-one between \PGFPlots\ and \Tikz. The |hide axis| flag disables anything of \PGFPlots, so only the visualized |patch| plot remains\footnote{Note that the $(0,0,0)$ coordinate of \PGFPlots\ is part of the data range here.}. + + diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.transformations.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.transformations.tex new file mode 100644 index 00000000000..d2f967a451f --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.reference.transformations.tex @@ -0,0 +1,59 @@ +\subsection{Transforming Coordinate Systems} +\label{key:data:cs} +Usually, \PGFPlots\ works with cartesian coordinates. However, one may want to provide coordinates in a different coordinate system. + +In this case, the |data cs| key can be used to identify the input coordinate system: + +\begin{pgfplotskey}{data cs=\mchoice{cart,polar,polarrad} (initially cart)} + Defines the coordinate system (`cs') of the input coordinates. \PGFPlots\ will apply transformations if \meta{name} does not match the expected coordinate system. +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot+[data cs=polar,domain=0:360] (\x,1); + \end{axis} +\end{tikzpicture} +\end{codeexample} +\begin{codeexample}[] +\begin{tikzpicture} + \begin{axis} + \addplot+[data cs=polarrad,domain=0:2*pi] (\x,1); + \end{axis} +\end{tikzpicture} +\end{codeexample} + Every axis type has its own coordinate system. For example, a normal |axis| expects the |cart| coordinate system, whereas a |polaraxis| expects a |polar| coordinate system. If the argument to |data cs| does not match the expected coordinate system, \PGFPlots\ will transform it: +% \usepgfplotslibrary{polar} +\begin{codeexample}[] +% requires \usepgfplotslibrary{polar} +\begin{tikzpicture} + \begin{polaraxis} + \addplot coordinates {(90,1) (180,1)}; + \addplot+[data cs=cart] + coordinates {(1,0) (0.5,0.5)}; + \end{polaraxis} +\end{tikzpicture} +\end{codeexample} + + At the time of this writing, \PGFPlots\ supports the following values for \meta{name}: + + The |data cs=|\declareandlabel{cart} denotes the cartesian coordinate system. It is expected by the usual |axis| (or its logarithmic variants). It can have three components, $x$, $y$, and $z$. + + The |data cs=|\declareandlabel{polar} is the (two--dimensional) coordinate system with (angle, radius). The angle is a periodic number in the range $[0,360)$; the radius is any number. If a |polar| coordinate has a $z$ component, it is taken as-is (the transformations ignore it). + + The |data cs|=\declareandlabel{polarrad} is similar to |polar|, but it expects the angle in radians, i.e.\ in the periodic range $[0,2\pi)$. + + At the point of this writing, the |data cs| method will work for most plot handlers. But for complicated plot handlers, further logic may be needed which is not yet available (for example, the |quiver| plot handler might not be able to convert its direction vectors correctly)\footnote{In case you run into problems, consider writing a bug report or ask others in \TeX\ online discussion forums.}. +\end{pgfplotskey} + +\begin{command}{\pgfplotsaxistransformcs\marg{fromname}\marg{toname}} + Expects the current point in a set of keys, provided in the coordinate system \meta{fromname} and replaces them by the same coordinates represented in \meta{toname}. + + On input, the coordinates are stored in |/data point/x|, |/data point/y|, and |/data point/z| (the latter may be empty). The macro will test if there is a declared coordinate transformation from \meta{fromname} to \meta{toname} and invoke it. If there is none, it will attempt to convert to |cart| first and then from |cart| to \meta{toname}. If that does not exist either, the operation fails. +\end{command} + +\begin{command}{\pgfplotsdefinecstransform\marg{fromname}\marg{toname}\marg{code}} + Defines a new coordinate system transformation. The \meta{code} is expected to get input and write output as described for |\pgfplotsaxistransformcs|. + + Implementing a new coordinate system immediately raises the question in which math mode the operations shall be applied. \PGFPlots\ supports different so--called ``coordinate math systems'' for generic operations, and for each individual coordinate as well. These coordinate math systems can either use basic \PGF\ math arithmetics, the |fpu|, or perhaps there will come a Lua\TeX\ library. + + The documentation of this system is beyond the scope of this manual\footnote{Which is quite comprehensive even without API documentation, as you will certainly agree...}. Please consider reading the source-code comments and the source of existing transformations if you intend to write own transformations. +\end{command} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.resources.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.resources.tex index 54688463c10..86a1d0194f4 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.resources.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.resources.tex @@ -1,4 +1,6 @@ \section{Memory and Speed considerations} +{ +\tikzset{external/figure name/.add={}{memspeed_}}% \subsection{Memory Limits of \TeX} \label{sec:pgfplots:optimization} \PGFPlots\ can typeset plots with several thousand points if memory limits of \TeX\ are configured properly. Its runtime is roughly proportional to the number of input points\footnote{In fact, the runtime is pseudo--linear: starting with about $100{,}000$ points, it will become quadratic. This limitation applies to the path length of \PGF\ paths as well. Furthermore, the linear runtime is not possible yet for stacked plots.}. @@ -49,7 +51,7 @@ \end{tikzpicture} \end{codeexample} -\PGFPlots\ relies completely on \TeX\ to do all typesetting. It uses the front-end-layer and basic layer of \PGF\ to perform all drawing operations. For complicated plots, this may take some time, and you may want to read section~\ref{sec:pgfplots:importexport} for how to write single figures to external graphics files. Externalization is the best way to reduce typesetting time. +\PGFPlots\ relies completely on \TeX\ to do all typesetting. It uses the front-end-layer and basic layer of \PGF\ to perform all drawing operations. For complicated plots, this may take some time, and you may want to read Section~\ref{sec:pgfplots:importexport} for how to write single figures to external graphics files. Externalization is the best way to reduce typesetting time. However, for large scale plots with a lot of points, limitations of \TeX's capacities are reached easily. @@ -147,4 +149,5 @@ Unfortunately, \TeX\ does not allow arbitrary memory limits, there is an upper b \subsection{Reducing Typesetting Time} \PGFPlots\ does a lot of computations ranging from abstract coordinate computations to low level |.pdf| drawing commands (realized by \PGF). For complex plots, this may take a considerable time -- especially for 3D plots. -One possibility to reduce typesetting time is to tell \PGF\ to generate single, temporary |.pdf| (or |.eps|) documents for a subset (or all) graphics in one run and re-use these temporary images in successive runs. For \PGFPlots, this is the most effective way to reduce typesetting time. It can be accomplished using the |external| library described in section~\ref{sec:pgfplots:export}. +One possibility to reduce typesetting time is to tell \PGF\ to generate single, temporary |.pdf| (or |.eps|) documents for a subset (or all) graphics in one run and re-use these temporary images in successive runs. For \PGFPlots, this is the most effective way to reduce typesetting time. It can be accomplished using the |external| library described in Section~\ref{sec:pgfplots:export}. +} diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.tex index e32eac2e7af..4c79e5d593c 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots.tex @@ -22,6 +22,30 @@ \input{pgfplots.preamble.tex} %\RequirePackage[german,english,francais]{babel} +\def\matlabcolormaptext{This colormap is similar to one shipped with Matlab (tm) under a similar name.} + +\IfFileExists{tikzlibraryspy.code.tex}{% +\usetikzlibrary{spy} +}{% + \message{ERROR: tikz SPY library NOT available. The manual will only compile partially.^^J}% +}% + +\usepgfplotslibrary{% + ternary, + smithchart, + patchplots, + polar, + colormaps, +} +\pgfqkeys{/codeexample}{% + every codeexample/.append style={ + /pgfplots/every ternary axis/.append style={ + /pgfplots/legend style={fill=graphicbackground}, + } + }, + tabsize=4, +} + \pgfplotsmanualexternalexpensivetrue %\usetikzlibrary{external} @@ -29,8 +53,10 @@ \title{% Manual for Package \PGFPlots\\ - {\small Version \pgfplotsversion}\\ - {\small\href{http://sourceforge.net/projects/pgfplots}{http://sourceforge.net/projects/pgfplots}}} + {\small 2D/3D Plots in \LaTeX, Version \pgfplotsversion}\\ + {\small\href{http://sourceforge.net/projects/pgfplots}{http://sourceforge.net/projects/pgfplots}} + %\\{\small Attention: you are using an unstable development version.} +} %\includeonly{pgfplots.libs} @@ -71,7 +97,7 @@ }% \maketitle \begin{abstract}% -\PGFPlots\ draws high--quality function plots in normal or logarithmic scaling with a user-friendly interface directly in \TeX. The user supplies axis labels, legend entries and the plot coordinates for one or more plots and \PGFPlots\ applies axis scaling, computes any logarithms and axis ticks and draws the plots, supporting line plots, scatter plots, piecewise constant plots, bar plots, area plots, mesh-- and surface plots and some more. It is based on Till Tantau's package \PGF/\Tikz. +\PGFPlots\ draws high--quality function plots in normal or logarithmic scaling with a user-friendly interface directly in \TeX. The user supplies axis labels, legend entries and the plot coordinates for one or more plots and \PGFPlots\ applies axis scaling, computes any logarithms and axis ticks and draws the plots. It supports line plots, scatter plots, piecewise constant plots, bar plots, area plots, mesh-- and surface plots, patch plots, contour plots, quiver plots, histogram plots, polar axes, ternary diagrams, smith charts and some more. It is based on Till Tantau's package \PGF/\Tikz. \end{abstract} \tableofcontents \section{Introduction} @@ -80,15 +106,18 @@ This package provides tools to generate plots and labeled axes easily. It draws \item consistency of document and font type and font size, \item direct use of \TeX\ math mode in axis descriptions, \item consistency of data and figures (no third party tool necessary), - \item inter document consistency using preamble configurations and styles. + \item inter-document consistency using preamble configurations and styles. \end{itemize} Although not necessary, separate |.pdf| or |.eps| graphics can be generated using the |external| library developed as part of \Tikz. -\PGFPlots\ is build completely on \Tikz/\PGF. Knowledge of \Tikz\ will simplify the work with \PGFPlots, although it is not required. +You are invited to use \PGFPlots\ for visualization of medium sized data sets in two and three dimensions. + \section[About PGFPlots: Preliminaries]{About {\normalfont\PGFPlots}: Preliminaries} This section contains information about upgrades, the team, the installation (in case you need to do it manually) and troubleshooting. You may skip it completely except for the upgrade remarks. +\PGFPlots\ is built completely on \Tikz/\PGF. Knowledge of \Tikz\ will simplify the work with \PGFPlots, although it is not required. + However, note that this library requires at least \PGF\ version $2.00$. At the time of this writing, many \TeX-distributions still contain the older \PGF\ version $1.18$, so it may be necessary to install a recent \PGF\ prior to using \PGFPlots. \subsection{Components} @@ -103,6 +132,8 @@ This release provides a lot of improvements which can be found in all detail in \subsubsection{New Optional Features} \begin{enumerate} + \item \PGFPlots\ 1.4 has fixed several smaller bugs which might produce differences of about $1$--$2\text{pt}$ compared to earlier releases. If you experience problems, use |\pgfplotsset{compat=1.3}|. + \item \PGFPlots\ 1.3 comes with user interface improvements. The technical distinction between ``behavior options'' and ``style options'' of older versions is no longer necessary (although still fully supported). \item \PGFPlots\ 1.3 has a new feature which allows to \emph{move axis labels tight to tick labels} automatically. @@ -112,17 +143,17 @@ This release provides a lot of improvements which can be found in all detail in Use \begin{codeexample}[code only] \usepackage{pgfplots} -\pgfplotsset{compat=1.3} +\pgfplotsset{compat=1.4} \end{codeexample} in your preamble to benefit from the improved spacing\footnote{The |compat=1.3| setting is necessary for new features which move axis labels around like reversed axis. However, \PGFPlots\ will still work as it does in earlier versions, your documents will remain the same if you don't set it explicitly.}. Take a look at the next page for the precise definition of |compat|. - \item \PGFPlots\ 1.3 now supports reversed axes. It is no longer necessary to use work--arounds with negative units. + \item \PGFPlots\ 1.3 now supports reversed axes. It is no longer necessary to use workarounds with negative units. \pgfkeys{/pdflinks/search key prefixes in/.add={/pgfplots/,}{}} Take a look at the |x dir=reverse| key. - Existing work--arounds will still function properly. Use |\pgfplotsset{compat=1.3}| together with |x dir=reverse| to switch to the new version. + Existing workarounds will still function properly. Use |\pgfplotsset{compat=1.3}| together with |x dir=reverse| to switch to the new version. \end{enumerate} \subsubsection{Old Features Which May Need Attention} @@ -136,19 +167,23 @@ This release provides a lot of improvements which can be found in all detail in \item Starting with \PGFPlots\ $1.1$, |\tikzstyle| should \emph{no longer be used} to set \PGFPlots\ options. - Although |\tikzstyle| is still supported for some older \PGFPlots\ options, you should replace any occurance of |\tikzstyle| with |\pgfplotsset{|\meta{style name}|/.style={|\meta{key-value-list}|}}| or the associated |/.append style| variant. See section~\ref{sec:styles} for more detail. + Although |\tikzstyle| is still supported for some older \PGFPlots\ options, you should replace any occurance of |\tikzstyle| with |\pgfplotsset{|\meta{style name}|/.style={|\meta{key-value-list}|}}| or the associated |/.append style| variant. See Section~\ref{sec:styles} for more detail. \end{enumerate} I apologize for any inconvenience caused by these changes. -\begin{pgfplotskey}{compat=\mchoice{1.3,pre 1.3,default,newest} (initially default)} +\begin{pgfplotskey}{compat=\mchoice{1.5,1.4,1.3,pre 1.3,default,newest} (initially default)} The preamble configuration \begin{codeexample}[code only] \usepackage{pgfplots} -\pgfplotsset{compat=1.3} +\pgfplotsset{compat=1.4} \end{codeexample} allows to choose between backwards compatibility and most recent features. - \PGFPlots\ version 1.3 comes with new features which may lead to different spacings compared to earlier versions: + \PGFPlots\ version 1.5 with |compat=1.5| or |compat=newest| enables |log origin=0|. Older versions keep |log origin=infty|. + + \PGFPlots\ version 1.4 with |compat=1.4| or |compat=newest| fixes some small bugs related to axis scaling. This might lead to differences of $1$--$2\text{pt}$ compared to earlier versions. Use the choice |1.3| (or earlier) to disable these fixes. + + \PGFPlots\ version 1.3 with |compat=1.3| comes with new features which may lead to significiantly different spacings compared to earlier versions: \begin{enumerate} \item Version 1.3 comes with the |xlabel near ticks| feature which places (in this case $x$) axis labels ``near'' the tick labels, taking the size of tick labels into account. @@ -159,20 +194,30 @@ I apologize for any inconvenience caused by these changes. You are encouraged to use \begin{codeexample}[code only] \usepackage{pgfplots} -\pgfplotsset{compat=1.3} +\pgfplotsset{compat=1.4} \end{codeexample} in your preamble. \item Version 1.3 fixes a bug with |anchor=south west| which occurred mainly for reversed axes: the anchors where upside--down. This is fixed now. - If you have written some work--around and want to keep it going, use + If you have written some workaround and want to keep it going, use |\pgfplotsset{compat/anchors=pre 1.3}|\pgfmanualpdflabel{/pgfplots/compat/anchors}{} to disable the bug fix. \end{enumerate} + Occasionally, you might want to use different versions in the same document. Then, provide +\begin{codeexample}[code only] +\begin{figure} + \pgfplotsset{compat=1.4} + ... + \caption{...} +\end{figure} +\end{codeexample} + \noindent in order to restrict the compatibility setting to the actual context (in this case, the |figure| environment. + Use |\pgfplotsset{compat=default}| to restore the factory settings. The setting |\pgfplotsset{compat=newest}| will always use features of the most recent version. This might result in small changes in the document's appearance. @@ -184,9 +229,9 @@ I apologize for any inconvenience caused by these changes. If you are interested in writing something but don't know how, consider reading the auxiliary manual \href{file:TeX-programming-notes.pdf}{TeX-programming-notes.pdf} which comes with \PGFPlots. It is far from complete, but maybe it is a good starting point (at least for more literature). \subsection{Acknowledgements} -I thank God for all hours of enjoyed programming. I thank Pascal Wolkotte and Nick Papior Andersen for their programming efforts and contributions as part of the development team. I thank Stefan Tibus, who contributed the |plot shell| feature. I thank Tom Cashman for the contribution of the |reverse legend| feature. Special thanks go to Stefan Pinnow whose tests of \PGFPlots\ lead to numerous quality improvements. Furthermore, I thank Dr.~Schweitzer for many fruitful discussions and Dr.~Meine for his ideas and suggestions. Thanks as well to the many international contributors who provided feature requests or identified bugs or simply manual improvements! +I thank God for all hours of enjoyed programming. I thank Pascal Wolkotte and Nick Papior Andersen for their programming efforts and contributions as part of the development team. I thank Stefan Tibus, who contributed the |plot shell| feature. I thank Tom Cashman for the contribution of the |reverse legend| feature. Special thanks go to Stefan Pinnow whose tests of \PGFPlots\ lead to numerous quality improvements. Furthermore, I thank Dr.~Schweitzer for many fruitful discussions and Dr.~Meine for his ideas and suggestions. Special thanks go to Markus B\"ohning for proof-reading all the manuals of \PGF, \PGFPlots, and \PGFPlotstable. Thanks as well to the many international contributors who provided feature requests or identified bugs or simply improvements of the manual! -Last but not least, I thank Till Tantau and Mark Wibrow for their excellent graphics (and more) package \PGF\ and \Tikz\ which is the base of \PGFPlots. +Last but not least, I thank Till Tantau and Mark Wibrow for their excellent graphics (and more) package \PGF\ and \Tikz, which is the base of \PGFPlots. \include{pgfplots.install}% \include{pgfplots.intro}% diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.dat b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.dat index e69de29bb2d..a86e77241a2 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.dat +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.dat @@ -0,0 +1,649 @@ +-2.0e0 -2.0e0 -6.7090363e-4 -6.7090363e-4 +-1.833334e0 -2.0e0 -1.16502808e-3 -1.16502808e-3 +-1.6666681e0 -2.0e0 -1.8978853e-3 -1.8978853e-3 +-1.5000021e0 -2.0e0 -2.8955779e-3 -2.8955779e-3 +-1.3333362e0 -2.0e0 -4.1272417e-3 -4.1272417e-3 +-1.1666702e0 -2.0e0 -5.4781322e-3 -5.4781322e-3 +-1.0000043e0 -2.0e0 -6.7376651e-3 -6.7376651e-3 +-8.333383e-1 -2.0e0 -7.62133388e-3 -7.62133388e-3 +-6.666723e-1 -2.0e0 -7.8287411e-3 -7.8287411e-3 +-5.000063e-1 -2.0e0 -7.131948e-3 -7.131948e-3 +-3.333403e-1 -2.0e0 -5.4630302e-3 -5.4630302e-3 +-1.666743e-1 -2.0e0 -2.9689604e-3 -2.9689604e-3 +-8.3e-6 -2.0e0 -1.52013e-7 -1.52013e-7 +1.6665771e-1 -2.0e0 2.9687303e-3 2.9687303e-3 +3.3332372e-1 -2.0e0 5.462839e-3 5.462839e-3 +4.9998972e-1 -2.0e0 7.1317358e-3 7.1317358e-3 +6.6665572e-1 -2.0e0 7.82879e-3 7.82879e-3 +8.3332172e-1 -2.0e0 7.621431e-3 7.621431e-3 +9.9998772e-1 -2.0e0 6.73787398e-3 6.73787398e-3 +1.16665372e0 -2.0e0 5.4781958e-3 5.4781958e-3 +1.3333197e0 -2.0e0 4.1273749e-3 4.1273749e-3 +1.4999857e0 -2.0e0 2.89564e-3 2.89564e-3 +1.6666516e0 -2.0e0 1.8979985e-3 1.8979985e-3 +1.8333176e0 -2.0e0 1.16508511e-3 1.16508511e-3 +1.9999835e0 -2.0e0 6.7093796e-4 6.7093796e-4 + +-2.0e0 -1.833334e0 -1.27093903e-3 -1.27093903e-3 +-1.833334e0 -1.833334e0 -2.2069612e-3 -2.2069612e-3 +-1.6666681e0 -1.833334e0 -3.5953387e-3 -3.5953387e-3 +-1.5000021e0 -1.833334e0 -5.4852937e-3 -5.4852937e-3 +-1.3333362e0 -1.833334e0 -7.8186224e-3 -7.8186224e-3 +-1.1666702e0 -1.833334e0 -1.03776451e-2 -1.03776451e-2 +-1.0000043e0 -1.833334e0 -1.2763379e-2 -1.2763379e-2 +-8.333383e-1 -1.833334e0 -1.44374565e-2 -1.44374565e-2 +-6.666723e-1 -1.833334e0 -1.48305913e-2 -1.48305913e-2 +-5.000063e-1 -1.833334e0 -1.35105907e-2 -1.35105907e-2 +-3.333403e-1 -1.833334e0 -1.03491289e-2 -1.03491289e-2 +-1.666743e-1 -1.833334e0 -5.624341e-3 -5.624341e-3 +-8.3e-6 -1.833334e0 -2.87972234e-7 -2.87972234e-7 +1.6665771e-1 -1.833334e0 5.623912e-3 5.623912e-3 +3.3332372e-1 -1.833334e0 1.03487193e-2 1.03487193e-2 +4.9998972e-1 -1.833334e0 1.35103438e-2 1.35103438e-2 +6.6665572e-1 -1.833334e0 1.48306792e-2 1.48306792e-2 +8.3332172e-1 -1.833334e0 1.4437588e-2 1.4437588e-2 +9.9998772e-1 -1.833334e0 1.27638058e-2 1.27638058e-2 +1.16665372e0 -1.833334e0 1.03778163e-2 1.03778163e-2 +1.3333197e0 -1.833334e0 7.8188577e-3 7.8188577e-3 +1.4999857e0 -1.833334e0 5.4854645e-3 5.4854645e-3 +1.6666516e0 -1.833334e0 3.5955313e-3 3.5955313e-3 +1.8333176e0 -1.833334e0 2.2070557e-3 2.2070557e-3 +1.9999835e0 -1.833334e0 1.2710022e-3 1.2710022e-3 + +-2.0e0 -1.6666681e0 -2.2774597e-3 -2.2774597e-3 +-1.833334e0 -1.6666681e0 -3.95487e-3 -3.95487e-3 +-1.6666681e0 -1.6666681e0 -6.442861e-3 -6.442861e-3 +-1.5000021e0 -1.6666681e0 -9.8296196e-3 -9.8296196e-3 +-1.3333362e0 -1.6666681e0 -1.4010768e-2 -1.4010768e-2 +-1.1666702e0 -1.6666681e0 -1.8596317e-2 -1.8596317e-2 +-1.0000043e0 -1.6666681e0 -2.2872327e-2 -2.2872327e-2 +-8.333383e-1 -1.6666681e0 -2.58720038e-2 -2.58720038e-2 +-6.666723e-1 -1.6666681e0 -2.65764192e-2 -2.65764192e-2 +-5.000063e-1 -1.6666681e0 -2.421092e-2 -2.421092e-2 +-3.333403e-1 -1.6666681e0 -1.85456503e-2 -1.85456503e-2 +-1.666743e-1 -1.6666681e0 -1.00788742e-2 -1.00788742e-2 +-8.3e-6 -1.6666681e0 -5.16043787e-7 -5.16043787e-7 +1.6665771e-1 -1.6666681e0 1.0077983e-2 1.0077983e-2 +3.3332372e-1 -1.6666681e0 1.854502e-2 1.854502e-2 +4.9998972e-1 -1.6666681e0 2.42105644e-2 2.42105644e-2 +6.6665572e-1 -1.6666681e0 2.65764377e-2 2.65764377e-2 +8.3332172e-1 -1.6666681e0 2.58721867e-2 2.58721867e-2 +9.9998772e-1 -1.6666681e0 2.28729355e-2 2.28729355e-2 +1.16665372e0 -1.6666681e0 1.8596689e-2 1.8596689e-2 +1.3333197e0 -1.6666681e0 1.4011101e-2 1.4011101e-2 +1.4999857e0 -1.6666681e0 9.8300163e-3 9.8300163e-3 +1.6666516e0 -1.6666681e0 6.4432108e-3 6.4432108e-3 +1.8333176e0 -1.6666681e0 3.9550854e-3 3.9550854e-3 +1.9999835e0 -1.6666681e0 2.2775992e-3 2.2775992e-3 + +-2.0e0 -1.5000021e0 -3.8607666e-3 -3.8607666e-3 +-1.833334e0 -1.5000021e0 -6.7042448e-3 -6.7042448e-3 +-1.6666681e0 -1.5000021e0 -1.09218018e-2 -1.09218018e-2 +-1.5000021e0 -1.5000021e0 -1.6662477e-2 -1.6662477e-2 +-1.3333362e0 -1.5000021e0 -2.3750635e-2 -2.3750635e-2 +-1.1666702e0 -1.5000021e0 -3.1523808e-2 -3.1523808e-2 +-1.0000043e0 -1.5000021e0 -3.8772546e-2 -3.8772546e-2 +-8.333383e-1 -1.5000021e0 -4.38578749e-2 -4.38578749e-2 +-6.666723e-1 -1.5000021e0 -4.50516849e-2 -4.50516849e-2 +-5.000063e-1 -1.5000021e0 -4.104114e-2 -4.104114e-2 +-3.333403e-1 -1.5000021e0 -3.14381825e-2 -3.14381825e-2 +-1.666743e-1 -1.5000021e0 -1.7087451e-2 -1.7087451e-2 +-8.3e-6 -1.5000021e0 -8.7498662e-7 -8.7498662e-7 +1.6665771e-1 -1.5000021e0 1.7085747e-2 1.7085747e-2 +3.3332372e-1 -1.5000021e0 3.14366139e-2 3.14366139e-2 +4.9998972e-1 -1.5000021e0 4.10404968e-2 4.10404968e-2 +6.6665572e-1 -1.5000021e0 4.50521478e-2 4.50521478e-2 +8.3332172e-1 -1.5000021e0 4.38584364e-2 4.38584364e-2 +9.9998772e-1 -1.5000021e0 3.87729642e-2 3.87729642e-2 +1.16665372e0 -1.5000021e0 3.1525009e-2 3.1525009e-2 +1.3333197e0 -1.5000021e0 2.3751476e-2 2.3751476e-2 +1.4999857e0 -1.5000021e0 1.6663063e-2 1.6663063e-2 +1.6666516e0 -1.5000021e0 1.09224013e-2 1.09224013e-2 +1.8333176e0 -1.5000021e0 6.7045947e-3 6.7045947e-3 +1.9999835e0 -1.5000021e0 3.8609538e-3 3.8609538e-3 + +-2.0e0 -1.3333362e0 -6.1908508e-3 -6.1908508e-3 +-1.833334e0 -1.3333362e0 -1.07505913e-2 -1.07505913e-2 +-1.6666681e0 -1.3333362e0 -1.7513449e-2 -1.7513449e-2 +-1.5000021e0 -1.3333362e0 -2.671944e-2 -2.671944e-2 +-1.3333362e0 -1.3333362e0 -3.8085623e-2 -3.8085623e-2 +-1.1666702e0 -1.3333362e0 -5.0550986e-2 -5.0550986e-2 +-1.0000043e0 -1.3333362e0 -6.2173761e-2 -6.2173761e-2 +-8.333383e-1 -1.3333362e0 -7.03279123e-2 -7.03279123e-2 +-6.666723e-1 -1.3333362e0 -7.2213954e-2 -7.2213954e-2 +-5.000063e-1 -1.3333362e0 -6.5810835e-2 -6.5810835e-2 +-3.333403e-1 -1.3333362e0 -5.0411057e-2 -5.0411057e-2 +-1.666743e-1 -1.3333362e0 -2.739127e-2 -2.739127e-2 +-8.3e-6 -1.3333362e0 -1.40303258e-6 -1.40303258e-6 +1.6665771e-1 -1.3333362e0 2.7388538e-2 2.7388538e-2 +3.3332372e-1 -1.3333362e0 5.0408542e-2 5.0408542e-2 +4.9998972e-1 -1.3333362e0 6.5808667e-2 6.5808667e-2 +6.6665572e-1 -1.3333362e0 7.2212154e-2 7.2212154e-2 +8.3332172e-1 -1.3333362e0 7.03285686e-2 7.03285686e-2 +9.9998772e-1 -1.3333362e0 6.21755257e-2 6.21755257e-2 +1.16665372e0 -1.3333362e0 5.055147e-2 5.055147e-2 +1.3333197e0 -1.3333362e0 3.8086751e-2 3.8086751e-2 +1.4999857e0 -1.3333362e0 2.672045e-2 2.672045e-2 +1.6666516e0 -1.3333362e0 1.751439e-2 1.751439e-2 +1.8333176e0 -1.3333362e0 1.07511055e-2 1.07511055e-2 +1.9999835e0 -1.3333362e0 6.1911894e-3 6.1911894e-3 + +-2.0e0 -1.1666702e0 -9.3910553e-3 -9.3910553e-3 +-1.833334e0 -1.1666702e0 -1.63076874e-2 -1.63076874e-2 +-1.6666681e0 -1.1666702e0 -2.6566118e-2 -2.6566118e-2 +-1.5000021e0 -1.1666702e0 -4.0530528e-2 -4.0530528e-2 +-1.3333362e0 -1.1666702e0 -5.7772488e-2 -5.7772488e-2 +-1.1666702e0 -1.1666702e0 -7.6679817e-2 -7.6679817e-2 +-1.0000043e0 -1.1666702e0 -9.4311511e-2 -9.4311511e-2 +-8.333383e-1 -1.1666702e0 -1.06683987e-1 -1.06683987e-1 +-6.666723e-1 -1.1666702e0 -1.09560974e-1 -1.09560974e-1 +-5.000063e-1 -1.1666702e0 -9.982623e-2 -9.982623e-2 +-3.333403e-1 -1.1666702e0 -7.6484956e-2 -7.6484956e-2 +-1.666743e-1 -1.1666702e0 -4.1561922e-2 -4.1561922e-2 +-8.3e-6 -1.1666702e0 -2.12770454e-6 -2.12770454e-6 +1.6665771e-1 -1.1666702e0 4.1557774e-2 4.1557774e-2 +3.3332372e-1 -1.1666702e0 7.648114e-2 7.648114e-2 +4.9998972e-1 -1.1666702e0 9.982294e-2 9.982294e-2 +6.6665572e-1 -1.1666702e0 1.0955824e-1 1.0955824e-1 +8.3332172e-1 -1.1666702e0 1.06681857e-1 1.06681857e-1 +9.9998772e-1 -1.1666702e0 9.43127066e-2 9.43127066e-2 +1.16665372e0 -1.1666702e0 7.6682239e-2 7.6682239e-2 +1.3333197e0 -1.1666702e0 5.7774223e-2 5.7774223e-2 +1.4999857e0 -1.1666702e0 4.0532243e-2 4.0532243e-2 +1.6666516e0 -1.1666702e0 2.6567122e-2 2.6567122e-2 +1.8333176e0 -1.1666702e0 1.63085257e-2 1.63085257e-2 +1.9999835e0 -1.1666702e0 9.391544e-3 9.391544e-3 + +-2.0e0 -1.0000043e0 -1.34752686e-2 -1.34752686e-2 +-1.833334e0 -1.0000043e0 -2.3399434e-2 -2.3399434e-2 +-1.6666681e0 -1.0000043e0 -3.8120418e-2 -3.8120418e-2 +-1.5000021e0 -1.0000043e0 -5.8158612e-2 -5.8158612e-2 +-1.3333362e0 -1.0000043e0 -8.2898126e-2 -8.2898126e-2 +-1.1666702e0 -1.0000043e0 -1.1002993e-1 -1.1002993e-1 +-1.0000043e0 -1.0000043e0 -1.3533066e-1 -1.3533066e-1 +-8.333383e-1 -1.0000043e0 -1.53109258e-1 -1.53109258e-1 +-6.666723e-1 -1.0000043e0 -1.57241333e-1 -1.57241333e-1 +-5.000063e-1 -1.0000043e0 -1.4328182e-1 -1.4328182e-1 +-3.333403e-1 -1.0000043e0 -1.09728957e-1 -1.09728957e-1 +-1.666743e-1 -1.0000043e0 -5.9649405e-2 -5.9649405e-2 +-8.3e-6 -1.0000043e0 -3.05332121e-6 -3.05332121e-6 +1.6665771e-1 -1.0000043e0 5.9643452e-2 5.9643452e-2 +3.3332372e-1 -1.0000043e0 1.0975349e-1 1.0975349e-1 +4.9998972e-1 -1.0000043e0 1.432771e-1 1.432771e-1 +6.6665572e-1 -1.0000043e0 1.5723741e-1 1.5723741e-1 +8.3332172e-1 -1.0000043e0 1.53106201e-1 1.53106201e-1 +9.9998772e-1 -1.0000043e0 1.35328395e-1 1.35328395e-1 +1.16665372e0 -1.0000043e0 1.10033492e-1 1.10033492e-1 +1.3333197e0 -1.0000043e0 8.2902353e-2 8.2902353e-2 +1.4999857e0 -1.0000043e0 5.81607e-2 5.81607e-2 +1.6666516e0 -1.0000043e0 3.8122067e-2 3.8122067e-2 +1.8333176e0 -1.0000043e0 2.3400731e-2 2.3400731e-2 +1.9999835e0 -1.0000043e0 1.34762997e-2 1.34762997e-2 + +-2.0e0 -8.333383e-1 -1.82910919e-2 -1.82910919e-2 +-1.833334e0 -8.333383e-1 -3.1762231e-2 -3.1762231e-2 +-1.6666681e0 -8.333383e-1 -5.174376e-2 -5.174376e-2 +-1.5000021e0 -8.333383e-1 -7.8943782e-2 -7.8943782e-2 +-1.3333362e0 -8.333383e-1 -1.125242e-1 -1.125242e-1 +-1.1666702e0 -8.333383e-1 -1.4935713e-1 -1.4935713e-1 +-1.0000043e0 -8.333383e-1 -1.8373085e-1 -1.8373085e-1 +-8.333383e-1 -8.333383e-1 -2.0780128e-1 -2.0780128e-1 +-6.666723e-1 -8.333383e-1 -2.13455193e-1 -2.13455193e-1 +-5.000063e-1 -8.333383e-1 -1.94497443e-1 -1.94497443e-1 +-3.333403e-1 -8.333383e-1 -1.48969788e-1 -1.48969788e-1 +-1.666743e-1 -8.333383e-1 -8.0957074e-2 -8.0957074e-2 +-8.3e-6 -8.333383e-1 -4.14518611e-6 -4.14518611e-6 +1.6665771e-1 -8.333383e-1 8.0948994e-2 8.0948994e-2 +3.3332372e-1 -8.333383e-1 1.48962355e-1 1.48962355e-1 +4.9998972e-1 -8.333383e-1 1.94491032e-1 1.94491032e-1 +6.6665572e-1 -8.333383e-1 2.13449867e-1 2.13449867e-1 +8.3332172e-1 -8.333383e-1 2.07797133e-1 2.07797133e-1 +9.9998772e-1 -8.333383e-1 1.83727768e-1 1.83727768e-1 +1.16665372e0 -8.333383e-1 1.49355e-1 1.49355e-1 +1.3333197e0 -8.333383e-1 1.12528339e-1 1.12528339e-1 +1.4999857e0 -8.333383e-1 7.8946321e-2 7.8946321e-2 +1.6666516e0 -8.333383e-1 5.174619e-2 5.174619e-2 +1.8333176e0 -8.333383e-1 3.1763843e-2 3.1763843e-2 +1.9999835e0 -8.333383e-1 1.82923512e-2 1.82923512e-2 + +-2.0e0 -6.666723e-1 -2.3486023e-2 -2.3486023e-2 +-1.833334e0 -6.666723e-1 -4.07838e-2 -4.07838e-2 +-1.6666681e0 -6.666723e-1 -6.6440561e-2 -6.6440561e-2 +-1.5000021e0 -6.666723e-1 -1.01365527e-1 -1.01365527e-1 +-1.3333362e0 -6.666723e-1 -1.4442694e-1 -1.4442694e-1 +-1.1666702e0 -6.666723e-1 -1.9173065e-1 -1.9173065e-1 +-1.0000043e0 -6.666723e-1 -2.3586105e-1 -2.3586105e-1 +-8.333383e-1 -6.666723e-1 -2.66818306e-1 -2.66818306e-1 +-6.666723e-1 -6.666723e-1 -2.74135643e-1 -2.74135643e-1 +-5.000063e-1 -6.666723e-1 -2.4971313e-1 -2.4971313e-1 +-3.333403e-1 -6.666723e-1 -1.91284007e-1 -1.91284007e-1 +-1.666743e-1 -6.666723e-1 -1.03963123e-1 -1.03963123e-1 +-8.3e-6 -6.666723e-1 -5.322375e-6 -5.322375e-6 +1.6665771e-1 -6.666723e-1 1.0395275e-1 1.0395275e-1 +3.3332372e-1 -6.666723e-1 1.91274463e-1 1.91274463e-1 +4.9998972e-1 -6.666723e-1 2.497049e-1 2.497049e-1 +6.6665572e-1 -6.666723e-1 2.74128804e-1 2.74128804e-1 +8.3332172e-1 -6.666723e-1 2.6681298e-1 2.6681298e-1 +9.9998772e-1 -6.666723e-1 2.35857106e-1 2.35857106e-1 +1.16665372e0 -6.666723e-1 1.9172789e-1 1.9172789e-1 +1.3333197e0 -6.666723e-1 1.4442513e-1 1.4442513e-1 +1.4999857e0 -6.666723e-1 1.01369691e-1 1.01369691e-1 +1.6666516e0 -6.666723e-1 6.6443553e-2 6.6443553e-2 +1.8333176e0 -6.666723e-1 4.0785832e-2 4.0785832e-2 +1.9999835e0 -6.666723e-1 2.3487503e-2 2.3487503e-2 + +-2.0e0 -5.000063e-1 -2.8527435e-2 -2.8527435e-2 +-1.833334e0 -5.000063e-1 -4.953824e-2 -4.953824e-2 +-1.6666681e0 -5.000063e-1 -8.0702155e-2 -8.0702155e-2 +-1.5000021e0 -5.000063e-1 -1.23122005e-1 -1.23122005e-1 +-1.3333362e0 -5.000063e-1 -1.754937e-1 -1.754937e-1 +-1.1666702e0 -5.000063e-1 -2.3292566e-1 -2.3292566e-1 +-1.0000043e0 -5.000063e-1 -2.8656136e-1 -2.8656136e-1 +-8.333383e-1 -5.000063e-1 -3.24160289e-1 -3.24160289e-1 +-6.666723e-1 -5.000063e-1 -3.3294952e-1 -3.3294952e-1 +-5.000063e-1 -5.000063e-1 -3.03323802e-1 -3.03323802e-1 +-3.333403e-1 -5.000063e-1 -2.32361525e-1 -2.32361525e-1 +-1.666743e-1 -5.000063e-1 -1.26269144e-1 -1.26269144e-1 +-8.3e-6 -5.000063e-1 -6.46553358e-6 -6.46553358e-6 +1.6665771e-1 -5.000063e-1 1.26256543e-1 1.26256543e-1 +3.3332372e-1 -5.000063e-1 2.32349931e-1 2.32349931e-1 +4.9998972e-1 -5.000063e-1 3.03313805e-1 3.03313805e-1 +6.6665572e-1 -5.000063e-1 3.32941214e-1 3.32941214e-1 +8.3332172e-1 -5.000063e-1 3.2415382e-1 3.2415382e-1 +9.9998772e-1 -5.000063e-1 2.8655656e-1 2.8655656e-1 +1.16665372e0 -5.000063e-1 2.329223e-1 2.329223e-1 +1.3333197e0 -5.000063e-1 1.7549149e-1 1.7549149e-1 +1.4999857e0 -5.000063e-1 1.23127138e-1 1.23127138e-1 +1.6666516e0 -5.000063e-1 8.0705106e-2 8.0705106e-2 +1.8333176e0 -5.000063e-1 4.9540976e-2 4.9540976e-2 +1.9999835e0 -5.000063e-1 2.8529057e-2 2.8529057e-2 + +-2.0e0 -3.333403e-1 -3.2777496e-2 -3.2777496e-2 +-1.833334e0 -3.333403e-1 -5.691905e-2 -5.691905e-2 +-1.6666681e0 -3.333403e-1 -9.2726425e-2 -9.2726425e-2 +-1.5000021e0 -3.333403e-1 -1.41469008e-1 -1.41469008e-1 +-1.3333362e0 -3.333403e-1 -2.016404e-1 -2.016404e-1 +-1.1666702e0 -3.333403e-1 -2.6769257e-1 -2.6769257e-1 +-1.0000043e0 -3.333403e-1 -3.2918149e-1 -3.2918149e-1 +-8.333383e-1 -3.333403e-1 -3.72418913e-1 -3.72418913e-1 +-6.666723e-1 -3.333403e-1 -3.82563286e-1 -3.82563286e-1 +-5.000063e-1 -3.333403e-1 -3.48539363e-1 -3.48539363e-1 +-3.333403e-1 -3.333403e-1 -2.66968929e-1 -2.66968929e-1 +-1.666743e-1 -3.333403e-1 -1.45090024e-1 -1.45090024e-1 +-8.3e-6 -3.333403e-1 -7.4285e-6 -7.4285e-6 +1.6665771e-1 -3.333403e-1 1.45075545e-1 1.45075545e-1 +3.3332372e-1 -3.333403e-1 2.66955608e-1 2.66955608e-1 +4.9998972e-1 -3.333403e-1 3.48527876e-1 3.48527876e-1 +6.6665572e-1 -3.333403e-1 3.82553741e-1 3.82553741e-1 +8.3332172e-1 -3.333403e-1 3.7241148e-1 3.7241148e-1 +9.9998772e-1 -3.333403e-1 3.29265999e-1 3.29265999e-1 +1.16665372e0 -3.333403e-1 2.676887e-1 2.676887e-1 +1.3333197e0 -3.333403e-1 2.0163785e-1 2.0163785e-1 +1.4999857e0 -3.333403e-1 1.41473749e-1 1.41473749e-1 +1.6666516e0 -3.333403e-1 9.2730908e-2 9.2730908e-2 +1.8333176e0 -3.333403e-1 5.6922333e-2 5.6922333e-2 +1.9999835e0 -3.333403e-1 3.2779387e-2 3.2779387e-2 + +-2.0e0 -1.666743e-1 -3.5625885e-2 -3.5625885e-2 +-1.833334e0 -1.666743e-1 -6.1864935e-2 -6.1864935e-2 +-1.6666681e0 -1.666743e-1 -1.00784221e-1 -1.00784221e-1 +-1.5000021e0 -1.666743e-1 -1.5378014e-1 -1.5378014e-1 +-1.3333362e0 -1.666743e-1 -2.1912048e-1 -2.1912048e-1 +-1.1666702e0 -1.666743e-1 -2.9092093e-1 -2.9092093e-1 +-1.0000043e0 -1.666743e-1 -3.5788158e-1 -3.5788158e-1 +-8.333383e-1 -1.666743e-1 -4.04769139e-1 -4.04769139e-1 +-6.666723e-1 -1.666743e-1 -4.15836887e-1 -4.15836887e-1 +-5.000063e-1 -1.666743e-1 -3.78794717e-1 -3.78794717e-1 +-3.333403e-1 -1.666743e-1 -2.90172742e-1 -2.90172742e-1 +-1.666743e-1 -1.666743e-1 -1.57693932e-1 -1.57693932e-1 +-8.3e-6 -1.666743e-1 -8.0744058e-6 -8.0744058e-6 +1.6665771e-1 -1.666743e-1 1.57678195e-1 1.57678195e-1 +3.3332372e-1 -1.666743e-1 2.90158264e-1 2.90158264e-1 +4.9998972e-1 -1.666743e-1 3.78782233e-1 3.78782233e-1 +6.6665572e-1 -1.666743e-1 4.15826512e-1 4.15826512e-1 +8.3332172e-1 -1.666743e-1 4.04835954e-1 4.04835954e-1 +9.9998772e-1 -1.666743e-1 3.57875574e-1 3.57875574e-1 +1.16665372e0 -1.666743e-1 2.9091675e-1 2.9091675e-1 +1.3333197e0 -1.666743e-1 2.1911772e-1 2.1911772e-1 +1.4999857e0 -1.666743e-1 1.5377856e-1 1.5377856e-1 +1.6666516e0 -1.666743e-1 1.0078936e-1 1.0078936e-1 +1.8333176e0 -1.666743e-1 6.1867976e-2 6.1867976e-2 +1.9999835e0 -1.666743e-1 3.562873e-2 3.562873e-2 + +-2.0e0 -8.3e-6 -3.6629639e-2 -3.6629639e-2 +-1.833334e0 -8.3e-6 -6.3608359e-2 -6.3608359e-2 +-1.6666681e0 -8.3e-6 -1.03623376e-1 -1.03623376e-1 +-1.5000021e0 -8.3e-6 -1.5813026e-1 -1.5813026e-1 +-1.3333362e0 -8.3e-6 -2.2538718e-1 -2.2538718e-1 +-1.1666702e0 -8.3e-6 -2.9907584e-1 -2.9907584e-1 +-1.0000043e0 -8.3e-6 -3.678717e-1 -3.678717e-1 +-8.333383e-1 -8.3e-6 -4.16185834e-1 -4.16185834e-1 +-6.666723e-1 -8.3e-6 -4.27503653e-1 -4.27503653e-1 +-5.000063e-1 -8.3e-6 -3.89494847e-1 -3.89494847e-1 +-3.333403e-1 -8.3e-6 -2.98339569e-1 -2.98339569e-1 +-1.666743e-1 -8.3e-6 -1.62144133e-1 -1.62144133e-1 +-8.3e-6 -8.3e-6 -8.3e-6 -8.3e-6 +1.6665771e-1 -8.3e-6 1.62127954e-1 1.62127954e-1 +3.3332372e-1 -8.3e-6 2.98324684e-1 2.98324684e-1 +4.9998972e-1 -8.3e-6 3.8948201e-1 3.8948201e-1 +6.6665572e-1 -8.3e-6 4.27553004e-1 4.27553004e-1 +8.3332172e-1 -8.3e-6 4.16177527e-1 4.16177527e-1 +9.9998772e-1 -8.3e-6 3.6797555e-1 3.6797555e-1 +1.16665372e0 -8.3e-6 2.9907153e-1 2.9907153e-1 +1.3333197e0 -8.3e-6 2.2538434e-1 2.2538434e-1 +1.4999857e0 -8.3e-6 1.5812866e-1 1.5812866e-1 +1.6666516e0 -8.3e-6 1.03628537e-1 1.03628537e-1 +1.8333176e0 -8.3e-6 6.3611917e-2 6.3611917e-2 +1.9999835e0 -8.3e-6 3.6631467e-2 3.6631467e-2 + +-2.0e0 1.6665771e-1 -3.5626678e-2 -3.5626678e-2 +-1.833334e0 1.6665771e-1 -6.186639e-2 -6.186639e-2 +-1.6666681e0 1.6665771e-1 -1.00785365e-1 -1.00785365e-1 +-1.5000021e0 1.6665771e-1 -1.5378014e-1 -1.5378014e-1 +-1.3333362e0 1.6665771e-1 -2.1912048e-1 -2.1912048e-1 +-1.1666702e0 1.6665771e-1 -2.9092093e-1 -2.9092093e-1 +-1.0000043e0 1.6665771e-1 -3.5788158e-1 -3.5788158e-1 +-8.333383e-1 1.6665771e-1 -4.04769139e-1 -4.04769139e-1 +-6.666723e-1 1.6665771e-1 -4.15836887e-1 -4.15836887e-1 +-5.000063e-1 1.6665771e-1 -3.78794717e-1 -3.78794717e-1 +-3.333403e-1 1.6665771e-1 -2.90172742e-1 -2.90172742e-1 +-1.666743e-1 1.6665771e-1 -1.57693932e-1 -1.57693932e-1 +-8.3e-6 1.6665771e-1 -8.0744058e-6 -8.0744058e-6 +1.6665771e-1 1.6665771e-1 1.57678195e-1 1.57678195e-1 +3.3332372e-1 1.6665771e-1 2.90158264e-1 2.90158264e-1 +4.9998972e-1 1.6665771e-1 3.78782233e-1 3.78782233e-1 +6.6665572e-1 1.6665771e-1 4.15826512e-1 4.15826512e-1 +8.3332172e-1 1.6665771e-1 4.04835954e-1 4.04835954e-1 +9.9998772e-1 1.6665771e-1 3.57875574e-1 3.57875574e-1 +1.16665372e0 1.6665771e-1 2.9091675e-1 2.9091675e-1 +1.3333197e0 1.6665771e-1 2.1911772e-1 2.1911772e-1 +1.4999857e0 1.6665771e-1 1.5377856e-1 1.5377856e-1 +1.6666516e0 1.6665771e-1 1.00790352e-1 1.00790352e-1 +1.8333176e0 1.6665771e-1 6.1869516e-2 6.1869516e-2 +1.9999835e0 1.6665771e-1 3.562873e-2 3.562873e-2 + +-2.0e0 3.3332372e-1 -3.2777985e-2 -3.2777985e-2 +-1.833334e0 3.3332372e-1 -5.6919638e-2 -5.6919638e-2 +-1.6666681e0 3.3332372e-1 -9.27279e-2 -9.27279e-2 +-1.5000021e0 3.3332372e-1 -1.41469008e-1 -1.41469008e-1 +-1.3333362e0 3.3332372e-1 -2.016404e-1 -2.016404e-1 +-1.1666702e0 3.3332372e-1 -2.6769257e-1 -2.6769257e-1 +-1.0000043e0 3.3332372e-1 -3.2927151e-1 -3.2927151e-1 +-8.333383e-1 3.3332372e-1 -3.72418913e-1 -3.72418913e-1 +-6.666723e-1 3.3332372e-1 -3.82563286e-1 -3.82563286e-1 +-5.000063e-1 3.3332372e-1 -3.48539363e-1 -3.48539363e-1 +-3.333403e-1 3.3332372e-1 -2.66968929e-1 -2.66968929e-1 +-1.666743e-1 3.3332372e-1 -1.45090024e-1 -1.45090024e-1 +-8.3e-6 3.3332372e-1 -7.4285e-6 -7.4285e-6 +1.6665771e-1 3.3332372e-1 1.45075545e-1 1.45075545e-1 +3.3332372e-1 3.3332372e-1 2.66955608e-1 2.66955608e-1 +4.9998972e-1 3.3332372e-1 3.48527876e-1 3.48527876e-1 +6.6665572e-1 3.3332372e-1 3.82553741e-1 3.82553741e-1 +8.3332172e-1 3.3332372e-1 3.7241148e-1 3.7241148e-1 +9.9998772e-1 3.3332372e-1 3.29265999e-1 3.29265999e-1 +1.16665372e0 3.3332372e-1 2.676887e-1 2.676887e-1 +1.3333197e0 3.3332372e-1 2.0163785e-1 2.0163785e-1 +1.4999857e0 3.3332372e-1 1.41473749e-1 1.41473749e-1 +1.6666516e0 3.3332372e-1 9.2730908e-2 9.2730908e-2 +1.8333176e0 3.3332372e-1 5.6922585e-2 5.6922585e-2 +1.9999835e0 3.3332372e-1 3.27796e-2 3.27796e-2 + +-2.0e0 4.9998972e-1 -2.8527527e-2 -2.8527527e-2 +-1.833334e0 4.9998972e-1 -4.9538968e-2 -4.9538968e-2 +-1.6666681e0 4.9998972e-1 -8.070363e-2 -8.070363e-2 +-1.5000021e0 4.9998972e-1 -1.23124133e-1 -1.23124133e-1 +-1.3333362e0 4.9998972e-1 -1.754937e-1 -1.754937e-1 +-1.1666702e0 4.9998972e-1 -2.3292566e-1 -2.3292566e-1 +-1.0000043e0 4.9998972e-1 -2.8656136e-1 -2.8656136e-1 +-8.333383e-1 4.9998972e-1 -3.24160289e-1 -3.24160289e-1 +-6.666723e-1 4.9998972e-1 -3.3294952e-1 -3.3294952e-1 +-5.000063e-1 4.9998972e-1 -3.03323802e-1 -3.03323802e-1 +-3.333403e-1 4.9998972e-1 -2.32361525e-1 -2.32361525e-1 +-1.666743e-1 4.9998972e-1 -1.26269144e-1 -1.26269144e-1 +-8.3e-6 4.9998972e-1 -6.46553358e-6 -6.46553358e-6 +1.6665771e-1 4.9998972e-1 1.26256543e-1 1.26256543e-1 +3.3332372e-1 4.9998972e-1 2.32349931e-1 2.32349931e-1 +4.9998972e-1 4.9998972e-1 3.03313805e-1 3.03313805e-1 +6.6665572e-1 4.9998972e-1 3.32941214e-1 3.32941214e-1 +8.3332172e-1 4.9998972e-1 3.2415382e-1 3.2415382e-1 +9.9998772e-1 4.9998972e-1 2.8655656e-1 2.8655656e-1 +1.16665372e0 4.9998972e-1 2.329223e-1 2.329223e-1 +1.3333197e0 4.9998972e-1 1.7549149e-1 1.7549149e-1 +1.4999857e0 4.9998972e-1 1.23128328e-1 1.23128328e-1 +1.6666516e0 4.9998972e-1 8.0706326e-2 8.0706326e-2 +1.8333176e0 4.9998972e-1 4.9541591e-2 4.9541591e-2 +1.9999835e0 4.9998972e-1 2.852921e-2 2.852921e-2 + +-2.0e0 6.6665572e-1 -2.3486755e-2 -2.3486755e-2 +-1.833334e0 6.6665572e-1 -4.0785059e-2 -4.0785059e-2 +-1.6666681e0 6.6665572e-1 -6.6442265e-2 -6.6442265e-2 +-1.5000021e0 6.6665572e-1 -1.01369098e-1 -1.01369098e-1 +-1.3333362e0 6.6665572e-1 -1.4442694e-1 -1.4442694e-1 +-1.1666702e0 6.6665572e-1 -1.9173065e-1 -1.9173065e-1 +-1.0000043e0 6.6665572e-1 -2.3586105e-1 -2.3586105e-1 +-8.333383e-1 6.6665572e-1 -2.66818306e-1 -2.66818306e-1 +-6.666723e-1 6.6665572e-1 -2.74135643e-1 -2.74135643e-1 +-5.000063e-1 6.6665572e-1 -2.4971313e-1 -2.4971313e-1 +-3.333403e-1 6.6665572e-1 -1.91284007e-1 -1.91284007e-1 +-1.666743e-1 6.6665572e-1 -1.03963123e-1 -1.03963123e-1 +-8.3e-6 6.6665572e-1 -5.32312222e-6 -5.32312222e-6 +1.6665771e-1 6.6665572e-1 1.0395275e-1 1.0395275e-1 +3.3332372e-1 6.6665572e-1 1.91274463e-1 1.91274463e-1 +4.9998972e-1 6.6665572e-1 2.497049e-1 2.497049e-1 +6.6665572e-1 6.6665572e-1 2.74128804e-1 2.74128804e-1 +8.3332172e-1 6.6665572e-1 2.6681298e-1 2.6681298e-1 +9.9998772e-1 6.6665572e-1 2.35857106e-1 2.35857106e-1 +1.16665372e0 6.6665572e-1 1.9172789e-1 1.9172789e-1 +1.3333197e0 6.6665572e-1 1.4442513e-1 1.4442513e-1 +1.4999857e0 6.6665572e-1 1.01372598e-1 1.01372598e-1 +1.6666516e0 6.6665572e-1 6.6445894e-2 6.6445894e-2 +1.8333176e0 6.6665572e-1 4.0787175e-2 4.0787175e-2 +1.9999835e0 6.6665572e-1 2.3487991e-2 2.3487991e-2 + +-2.0e0 8.3332172e-1 -1.829169e-2 -1.829169e-2 +-1.833334e0 8.3332172e-1 -3.1763155e-2 -3.1763155e-2 +-1.6666681e0 8.3332172e-1 -5.174516e-2 -5.174516e-2 +-1.5000021e0 8.3332172e-1 -7.8946368e-2 -7.8946368e-2 +-1.3333362e0 8.3332172e-1 -1.12527496e-1 -1.12527496e-1 +-1.1666702e0 8.3332172e-1 -1.4935713e-1 -1.4935713e-1 +-1.0000043e0 8.3332172e-1 -1.8373085e-1 -1.8373085e-1 +-8.333383e-1 8.3332172e-1 -2.0780128e-1 -2.0780128e-1 +-6.666723e-1 8.3332172e-1 -2.13455193e-1 -2.13455193e-1 +-5.000063e-1 8.3332172e-1 -1.94497443e-1 -1.94497443e-1 +-3.333403e-1 8.3332172e-1 -1.48969788e-1 -1.48969788e-1 +-1.666743e-1 8.3332172e-1 -8.0972054e-2 -8.0972054e-2 +-8.3e-6 8.3332172e-1 -4.14518611e-6 -4.14518611e-6 +1.6665771e-1 8.3332172e-1 8.0963972e-2 8.0963972e-2 +3.3332372e-1 8.3332172e-1 1.48962355e-1 1.48962355e-1 +4.9998972e-1 8.3332172e-1 1.94491032e-1 1.94491032e-1 +6.6665572e-1 8.3332172e-1 2.13449867e-1 2.13449867e-1 +8.3332172e-1 8.3332172e-1 2.07797133e-1 2.07797133e-1 +9.9998772e-1 8.3332172e-1 1.83727768e-1 1.83727768e-1 +1.16665372e0 8.3332172e-1 1.49355e-1 1.49355e-1 +1.3333197e0 8.3332172e-1 1.12531715e-1 1.12531715e-1 +1.4999857e0 8.3332172e-1 7.8948656e-2 7.8948656e-2 +1.6666516e0 8.3332172e-1 5.1747792e-2 5.1747792e-2 +1.8333176e0 8.3332172e-1 3.1765158e-2 3.1765158e-2 +1.9999835e0 8.3332172e-1 1.82928883e-2 1.82928883e-2 + +-2.0e0 9.9998772e-1 -1.34759125e-2 -1.34759125e-2 +-1.833334e0 9.9998772e-1 -2.3400609e-2 -2.3400609e-2 +-1.6666681e0 9.9998772e-1 -3.812207e-2 -3.812207e-2 +-1.5000021e0 9.9998772e-1 -5.8160214e-2 -5.8160214e-2 +-1.3333362e0 9.9998772e-1 -8.290187e-2 -8.290187e-2 +-1.1666702e0 9.9998772e-1 -1.1003317e-1 -1.1003317e-1 +-1.0000043e0 9.9998772e-1 -1.3533066e-1 -1.3533066e-1 +-8.333383e-1 9.9998772e-1 -1.53109258e-1 -1.53109258e-1 +-6.666723e-1 9.9998772e-1 -1.57241333e-1 -1.57241333e-1 +-5.000063e-1 9.9998772e-1 -1.4328182e-1 -1.4328182e-1 +-3.333403e-1 9.9998772e-1 -1.09758966e-1 -1.09758966e-1 +-1.666743e-1 9.9998772e-1 -5.9649405e-2 -5.9649405e-2 +-8.3e-6 9.9998772e-1 -3.05423434e-6 -3.05423434e-6 +1.6665771e-1 9.9998772e-1 5.9643452e-2 5.9643452e-2 +3.3332372e-1 9.9998772e-1 1.0975349e-1 1.0975349e-1 +4.9998972e-1 9.9998772e-1 1.432771e-1 1.432771e-1 +6.6665572e-1 9.9998772e-1 1.5723741e-1 1.5723741e-1 +8.3332172e-1 9.9998772e-1 1.53106201e-1 1.53106201e-1 +9.9998772e-1 9.9998772e-1 1.35328395e-1 1.35328395e-1 +1.16665372e0 9.9998772e-1 1.10036998e-1 1.10036998e-1 +1.3333197e0 9.9998772e-1 8.290457e-2 8.290457e-2 +1.4999857e0 9.9998772e-1 5.816253e-2 5.816253e-2 +1.6666516e0 9.9998772e-1 3.812339e-2 3.812339e-2 +1.8333176e0 9.9998772e-1 2.3401906e-2 2.3401906e-2 +1.9999835e0 9.9998772e-1 1.34765988e-2 1.34765988e-2 + +-2.0e0 1.16665372e0 -9.3912994e-3 -9.3912994e-3 +-1.833334e0 1.16665372e0 -1.63081909e-2 -1.63081909e-2 +-1.6666681e0 1.16665372e0 -2.6567033e-2 -2.6567033e-2 +-1.5000021e0 1.16665372e0 -4.0532657e-2 -4.0532657e-2 +-1.3333362e0 1.16665372e0 -5.7773872e-2 -5.7773872e-2 +-1.1666702e0 1.16665372e0 -7.6683342e-2 -7.6683342e-2 +-1.0000043e0 1.16665372e0 -9.4315921e-2 -9.4315921e-2 +-8.333383e-1 1.16665372e0 -1.06683987e-1 -1.06683987e-1 +-6.666723e-1 1.16665372e0 -1.09560974e-1 -1.09560974e-1 +-5.000063e-1 1.16665372e0 -9.982623e-2 -9.982623e-2 +-3.333403e-1 1.16665372e0 -7.6484956e-2 -7.6484956e-2 +-1.666743e-1 1.16665372e0 -4.1561922e-2 -4.1561922e-2 +-8.3e-6 1.16665372e0 -2.12770454e-6 -2.12770454e-6 +1.6665771e-1 1.16665372e0 4.1557774e-2 4.1557774e-2 +3.3332372e-1 1.16665372e0 7.648114e-2 7.648114e-2 +4.9998972e-1 1.16665372e0 9.982294e-2 9.982294e-2 +6.6665572e-1 1.16665372e0 1.0955824e-1 1.0955824e-1 +8.3332172e-1 1.16665372e0 1.06681857e-1 1.06681857e-1 +9.9998772e-1 1.16665372e0 9.43173453e-2 9.43173453e-2 +1.16665372e0 1.16665372e0 7.6684445e-2 7.6684445e-2 +1.3333197e0 1.16665372e0 5.777581e-2 5.777581e-2 +1.4999857e0 1.16665372e0 4.0534006e-2 4.0534006e-2 +1.6666516e0 1.16665372e0 2.6568138e-2 2.6568138e-2 +1.8333176e0 1.16665372e0 1.63090096e-2 1.63090096e-2 +1.9999835e0 1.16665372e0 9.3919621e-3 9.3919621e-3 + +-2.0e0 1.3333197e0 -6.1911285e-3 -6.1911285e-3 +-1.833334e0 1.3333197e0 -1.07510501e-2 -1.07510501e-2 +-1.6666681e0 1.3333197e0 -1.7514084e-2 -1.7514084e-2 +-1.5000021e0 1.3333197e0 -2.6720721e-2 -2.6720721e-2 +-1.3333362e0 1.3333197e0 -3.808723e-2 -3.808723e-2 +-1.1666702e0 1.3333197e0 -5.055314e-2 -5.055314e-2 +-1.0000043e0 1.3333197e0 -6.2177713e-2 -6.2177713e-2 +-8.333383e-1 1.3333197e0 -7.03313837e-2 -7.03313837e-2 +-6.666723e-1 1.3333197e0 -7.2213954e-2 -7.2213954e-2 +-5.000063e-1 1.3333197e0 -6.5810835e-2 -6.5810835e-2 +-3.333403e-1 1.3333197e0 -5.0411057e-2 -5.0411057e-2 +-1.666743e-1 1.3333197e0 -2.739127e-2 -2.739127e-2 +-8.3e-6 1.3333197e0 -1.40303258e-6 -1.40303258e-6 +1.6665771e-1 1.3333197e0 2.7388538e-2 2.7388538e-2 +3.3332372e-1 1.3333197e0 5.0408542e-2 5.0408542e-2 +4.9998972e-1 1.3333197e0 6.5808667e-2 6.5808667e-2 +6.6665572e-1 1.3333197e0 7.2212154e-2 7.2212154e-2 +8.3332172e-1 1.3333197e0 7.03320908e-2 7.03320908e-2 +9.9998772e-1 1.3333197e0 6.21783333e-2 6.21783333e-2 +1.16665372e0 1.3333197e0 5.0553801e-2 5.0553801e-2 +1.3333197e0 1.3333197e0 3.8088785e-2 3.8088785e-2 +1.4999857e0 1.3333197e0 2.6721663e-2 2.6721663e-2 +1.6666516e0 1.3333197e0 1.7515129e-2 1.7515129e-2 +1.8333176e0 1.3333197e0 1.07516734e-2 1.07516734e-2 +1.9999835e0 1.3333197e0 6.19158e-3 6.19158e-3 + +-2.0e0 1.4999857e0 -3.8608887e-3 -3.8608887e-3 +-1.833334e0 1.4999857e0 -6.7045218e-3 -6.7045218e-3 +-1.6666681e0 1.4999857e0 -1.09223537e-2 -1.09223537e-2 +-1.5000021e0 1.4999857e0 -1.6663232e-2 -1.6663232e-2 +-1.3333362e0 1.4999857e0 -2.3751775e-2 -2.3751775e-2 +-1.1666702e0 1.4999857e0 -3.1525464e-2 -3.1525464e-2 +-1.0000043e0 1.4999857e0 -3.8774332e-2 -3.8774332e-2 +-8.333383e-1 1.4999857e0 -4.38597313e-2 -4.38597313e-2 +-6.666723e-1 1.4999857e0 -4.50539941e-2 -4.50539941e-2 +-5.000063e-1 1.4999857e0 -4.10432686e-2 -4.10432686e-2 +-3.333403e-1 1.4999857e0 -3.14395558e-2 -3.14395558e-2 +-1.666743e-1 1.4999857e0 -1.7087451e-2 -1.7087451e-2 +-8.3e-6 1.4999857e0 -8.7498662e-7 -8.7498662e-7 +1.6665771e-1 1.4999857e0 1.7085747e-2 1.7085747e-2 +3.3332372e-1 1.4999857e0 3.14379872e-2 3.14379872e-2 +4.9998972e-1 1.4999857e0 4.10423126e-2 4.10423126e-2 +6.6665572e-1 1.4999857e0 4.5054162e-2 4.5054162e-2 +8.3332172e-1 1.4999857e0 4.3860153e-2 4.3860153e-2 +9.9998772e-1 1.4999857e0 3.87749019e-2 3.87749019e-2 +1.16665372e0 1.4999857e0 3.1526381e-2 3.1526381e-2 +1.3333197e0 1.4999857e0 2.3752553e-2 2.3752553e-2 +1.4999857e0 1.4999857e0 1.6663795e-2 1.6663795e-2 +1.6666516e0 1.4999857e0 1.09229582e-2 1.09229582e-2 +1.8333176e0 1.4999857e0 6.7048604e-3 6.7048604e-3 +1.9999835e0 1.4999857e0 3.8611247e-3 3.8611247e-3 + +-2.0e0 1.6666516e0 -2.2776184e-3 -2.2776184e-3 +-1.833334e0 1.6666516e0 -3.9551218e-3 -3.9551218e-3 +-1.6666681e0 1.6666516e0 -6.4432756e-3 -6.4432756e-3 +-1.5000021e0 1.6666516e0 -9.8302582e-3 -9.8302582e-3 +-1.3333362e0 1.6666516e0 -1.4011664e-2 -1.4011664e-2 +-1.1666702e0 1.6666516e0 -1.8597206e-2 -1.8597206e-2 +-1.0000043e0 1.6666516e0 -2.2873547e-2 -2.2873547e-2 +-8.333383e-1 1.6666516e0 -2.58734787e-2 -2.58734787e-2 +-6.666723e-1 1.6666516e0 -2.6577884e-2 -2.6577884e-2 +-5.000063e-1 1.6666516e0 -2.42120491e-2 -2.42120491e-2 +-3.333403e-1 1.6666516e0 -1.85467337e-2 -1.85467337e-2 +-1.666743e-1 1.6666516e0 -1.00794896e-2 -1.00794896e-2 +-8.3e-6 1.6666516e0 -5.16074689e-7 -5.16074689e-7 +1.6665771e-1 1.6666516e0 1.0078583e-2 1.0078583e-2 +3.3332372e-1 1.6666516e0 1.85458083e-2 1.85458083e-2 +4.9998972e-1 1.6666516e0 2.42116173e-2 2.42116173e-2 +6.6665572e-1 1.6666516e0 2.65781569e-2 2.65781569e-2 +8.3332172e-1 1.6666516e0 2.58737634e-2 2.58737634e-2 +9.9998772e-1 1.6666516e0 2.28739578e-2 2.28739578e-2 +1.16665372e0 1.6666516e0 1.859765e-2 1.859765e-2 +1.3333197e0 1.6666516e0 1.4012077e-2 1.4012077e-2 +1.4999857e0 1.6666516e0 9.8306595e-3 9.8306595e-3 +1.6666516e0 1.6666516e0 6.4436023e-3 6.4436023e-3 +1.8333176e0 1.6666516e0 3.9553233e-3 3.9553233e-3 +1.9999835e0 1.6666516e0 2.2777274e-3 2.2777274e-3 + +-2.0e0 1.8333176e0 -1.27101288e-3 -1.27101288e-3 +-1.833334e0 1.8333176e0 -2.207076e-3 -2.207076e-3 +-1.6666681e0 1.8333176e0 -3.5955676e-3 -3.5955676e-3 +-1.5000021e0 1.8333176e0 -5.4856302e-3 -5.4856302e-3 +-1.3333362e0 1.8333176e0 -7.819068e-3 -7.819068e-3 +-1.1666702e0 1.8333176e0 -1.03782736e-2 -1.03782736e-2 +-1.0000043e0 1.8333176e0 -1.2764203e-2 -1.2764203e-2 +-8.333383e-1 1.8333176e0 -1.44383212e-2 -1.44383212e-2 +-6.666723e-1 1.8333176e0 -1.48314662e-2 -1.48314662e-2 +-5.000063e-1 1.8333176e0 -1.35114604e-2 -1.35114604e-2 +-3.333403e-1 1.8333176e0 -1.03498206e-2 -1.03498206e-2 +-1.666743e-1 1.8333176e0 -5.624669e-3 -5.624669e-3 +-8.3e-6 1.8333176e0 -2.87990977e-7 -2.87990977e-7 +1.6665771e-1 1.8333176e0 5.6242477e-3 5.6242477e-3 +3.3332372e-1 1.8333176e0 1.034935e-2 1.034935e-2 +4.9998972e-1 1.8333176e0 1.3511183e-2 1.3511183e-2 +6.6665572e-1 1.8333176e0 1.48315845e-2 1.48315845e-2 +8.3332172e-1 1.8333176e0 1.44386307e-2 1.44386307e-2 +9.9998772e-1 1.8333176e0 1.27646298e-2 1.27646298e-2 +1.16665372e0 1.8333176e0 1.03784323e-2 1.03784323e-2 +1.3333197e0 1.8333176e0 7.8193825e-3 7.8193825e-3 +1.4999857e0 1.8333176e0 5.4857918e-3 5.4857918e-3 +1.6666516e0 1.8333176e0 3.5957475e-3 3.5957475e-3 +1.8333176e0 1.8333176e0 2.20719e-3 2.20719e-3 +1.9999835e0 1.8333176e0 1.27108643e-3 1.27108643e-3 + +-2.0e0 1.9999835e0 -6.709436e-4 -6.709436e-4 +-1.833334e0 1.9999835e0 -1.16509578e-3 -1.16509578e-3 +-1.6666681e0 1.9999835e0 -1.8980176e-3 -1.8980176e-3 +-1.5000021e0 1.9999835e0 -2.8957426e-3 -2.8957426e-3 +-1.3333362e0 1.9999835e0 -4.1275021e-3 -4.1275021e-3 +-1.1666702e0 1.9999835e0 -5.4784633e-3 -5.4784633e-3 +-1.0000043e0 1.9999835e0 -6.7382373e-3 -6.7382373e-3 +-8.333383e-1 1.9999835e0 -7.62192262e-3 -7.62192262e-3 +-6.666723e-1 1.9999835e0 -7.8293007e-3 -7.8293007e-3 +-5.000063e-1 1.9999835e0 -7.1324133e-3 -7.1324133e-3 +-3.333403e-1 1.9999835e0 -5.4633913e-3 -5.4633913e-3 +-1.666743e-1 1.9999835e0 -2.9692224e-3 -2.9692224e-3 +-8.3e-6 1.9999835e0 -1.52021866e-7 -1.52021866e-7 +1.6665771e-1 1.9999835e0 2.9689261e-3 2.9689261e-3 +3.3332372e-1 1.9999835e0 5.4631543e-3 5.4631543e-3 +4.9998972e-1 1.9999835e0 7.1322165e-3 7.1322165e-3 +6.6665572e-1 1.9999835e0 7.829268e-3 7.829268e-3 +8.3332172e-1 1.9999835e0 7.6219943e-3 7.6219943e-3 +9.9998772e-1 1.9999835e0 6.73827376e-3 6.73827376e-3 +1.16665372e0 1.9999835e0 5.4786284e-3 5.4786284e-3 +1.3333197e0 1.9999835e0 4.1277106e-3 4.1277106e-3 +1.4999857e0 1.9999835e0 2.8958414e-3 2.8958414e-3 +1.6666516e0 1.9999835e0 1.8981053e-3 1.8981053e-3 +1.8333176e0 1.9999835e0 1.16516232e-3 1.16516232e-3 +1.9999835e0 1.9999835e0 6.7098526e-4 6.7098526e-4 diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.script b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.script index 093dcd3ba70..9d7e5a5e7ae 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.script +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.script @@ -1 +1 @@ -unset surface; set cntrparam levels 5; set contour; set table "pgfplots_contourtmp0.table"; splot "pgfplots_contourtmp0.dat"; +unset surface; set cntrparam levels 14; set contour; set table "pgfplots_contourtmp0.table"; splot "pgfplots_contourtmp0.dat"; diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.table b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.table index e69de29bb2d..e1dfa45dc9e 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.table +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp0.table @@ -0,0 +1,298 @@ + +#Surface 0 of 1 surfaces + +# Contour 0, label: 0.4 + 0.666656 0.245934 0.4 + 0.595451 0.166658 0.4 + 0.546035 -8.3e-06 0.4 + 0.595451 -0.166674 0.4 + 0.666656 -0.245951 0.4 + 0.833322 -0.191532 0.4 + 0.850485 -0.166674 0.4 + 0.889258 -8.3e-06 0.4 + 0.850485 0.166658 0.4 + 0.833322 0.191515 0.4 + 0.666656 0.245934 0.4 + + +# Contour 1, label: 0.3 + 0.49999 0.510292 0.3 + 0.492207 0.49999 0.3 + 0.400839 0.333324 0.3 + 0.351832 0.166658 0.3 + 0.336387 -8.3e-06 0.3 + 0.351832 -0.166674 0.3 + 0.400839 -0.33334 0.3 + 0.492207 -0.500006 0.3 + 0.49999 -0.510309 0.3 + 0.666656 -0.593357 0.3 + 0.833322 -0.570211 0.3 + 0.940394 -0.500006 0.3 + 0.999988 -0.447546 0.3 + 1.0792 -0.33334 0.3 + 1.14404 -0.166674 0.3 + 1.16441 -8.3e-06 0.3 + 1.14404 0.166658 0.3 + 1.0792 0.333324 0.3 + 0.999988 0.447529 0.3 + 0.940394 0.49999 0.3 + 0.833322 0.570195 0.3 + 0.666656 0.59334 0.3 + 0.49999 0.510292 0.3 + + +# Contour 2, label: 0.2 + 0.666656 0.8732 0.2 + 0.548419 0.833322 0.2 + 0.49999 0.816693 0.2 + 0.358212 0.666656 0.2 + 0.333324 0.631251 0.2 + 0.282504 0.49999 0.2 + 0.241765 0.333324 0.2 + 0.2199 0.166658 0.2 + 0.213002 -8.3e-06 0.2 + 0.2199 -0.166674 0.2 + 0.241765 -0.33334 0.2 + 0.282504 -0.500006 0.2 + 0.333324 -0.631268 0.2 + 0.358212 -0.666672 0.2 + 0.49999 -0.816709 0.2 + 0.548419 -0.833338 0.2 + 0.666656 -0.873216 0.2 + 0.833322 -0.857099 0.2 + 0.887312 -0.833338 0.2 + 0.999988 -0.781313 0.2 + 1.13541 -0.666672 0.2 + 1.16665 -0.633205 0.2 + 1.2622 -0.500006 0.2 + 1.33332 -0.343781 0.2 + 1.33786 -0.33334 0.2 + 1.38208 -0.166674 0.2 + 1.39622 -8.3e-06 0.2 + 1.38208 0.166658 0.2 + 1.33786 0.333324 0.2 + 1.33332 0.343764 0.2 + 1.2622 0.49999 0.2 + 1.16665 0.633188 0.2 + 1.13541 0.666656 0.2 + 0.999988 0.781297 0.2 + 0.887312 0.833322 0.2 + 0.833322 0.857083 0.2 + 0.666656 0.8732 0.2 + + +# Contour 3, label: 0.1 + 0.666656 1.20931 0.1 + 0.503021 1.16665 0.1 + 0.49999 1.16597 0.1 + 0.333324 1.04884 0.1 + 0.300884 0.999988 0.1 + 0.213316 0.833322 0.1 + 0.166658 0.695313 0.1 + 0.160321 0.666656 0.1 + 0.131999 0.49999 0.1 + 0.114877 0.333324 0.1 + 0.105695 0.166658 0.1 + 0.102794 -8.3e-06 0.1 + 0.105695 -0.166674 0.1 + 0.114877 -0.33334 0.1 + 0.131999 -0.500006 0.1 + 0.160321 -0.666672 0.1 + 0.166658 -0.695311 0.1 + 0.213342 -0.833338 0.1 + 0.300884 -1 0.1 + 0.333324 -1.04886 0.1 + 0.49999 -1.16599 0.1 + 0.503021 -1.16667 0.1 + 0.666656 -1.20933 0.1 + 0.833322 -1.1973 0.1 + 0.923355 -1.16667 0.1 + 0.999988 -1.14356 0.1 + 1.16665 -1.05014 0.1 + 1.22829 -1 0.1 + 1.33332 -0.903819 0.1 + 1.3955 -0.833338 0.1 + 1.49999 -0.676853 0.1 + 1.50652 -0.666672 0.1 + 1.59085 -0.500006 0.1 + 1.6418 -0.33334 0.1 + 1.66665 -0.183 0.1 + 1.67003 -0.166674 0.1 + 1.68176 -8.3e-06 0.1 + 1.67004 0.166658 0.1 + 1.66665 0.183002 0.1 + 1.6418 0.333324 0.1 + 1.59085 0.49999 0.1 + 1.50654 0.666656 0.1 + 1.49999 0.676858 0.1 + 1.39551 0.833322 0.1 + 1.33332 0.903818 0.1 + 1.22831 0.999988 0.1 + 1.16665 1.05014 0.1 + 0.999988 1.14356 0.1 + 0.923389 1.16665 0.1 + 0.833322 1.19729 0.1 + 0.666656 1.20931 0.1 + + +# Contour 4, label: -2.78e-17 + 2.33584e-07 1.99998 -2.77556e-17 + 2.33737e-07 1.83332 -2.77556e-17 + 2.3371e-07 1.66665 -2.77556e-17 + 2.34778e-07 1.49999 -2.77556e-17 + 2.37362e-07 1.33332 -2.77556e-17 + 2.32648e-07 1.16665 -2.77556e-17 + 2.34231e-07 0.999988 -2.77556e-17 + 2.32514e-07 0.833322 -2.77556e-17 + 2.34051e-07 0.666656 -2.77556e-17 + 2.34445e-07 0.49999 -2.77556e-17 + 2.33589e-07 0.333324 -2.77556e-17 + 2.34218e-07 0.166658 -2.77556e-17 + 2.31885e-07 -8.3e-06 -2.77556e-17 + 2.34218e-07 -0.166674 -2.77556e-17 + 2.33589e-07 -0.33334 -2.77556e-17 + 2.34445e-07 -0.500006 -2.77556e-17 + 2.32854e-07 -0.666672 -2.77556e-17 + 2.34093e-07 -0.833338 -2.77556e-17 + 2.31679e-07 -1 -2.77556e-17 + 2.32648e-07 -1.16667 -2.77556e-17 + 2.37362e-07 -1.33334 -2.77556e-17 + 2.34778e-07 -1.5 -2.77556e-17 + 2.33707e-07 -1.66667 -2.77556e-17 + 2.33691e-07 -1.83333 -2.77556e-17 + 2.33649e-07 -2 -2.77556e-17 + + +# Contour 5, label: -0.1 +-0.833338 1.1973 -0.1 +-0.923408 1.16665 -0.1 +-1 1.14356 -0.1 +-1.16667 1.05013 -0.1 +-1.2283 0.999988 -0.1 +-1.33334 0.903798 -0.1 +-1.39551 0.833322 -0.1 +-1.5 0.676832 -0.1 +-1.50654 0.666656 -0.1 +-1.59085 0.49999 -0.1 +-1.6418 0.333324 -0.1 +-1.66667 0.182903 -0.1 +-1.67003 0.166658 -0.1 +-1.68176 -8.3e-06 -0.1 +-1.67003 -0.166674 -0.1 +-1.66667 -0.182895 -0.1 +-1.6418 -0.33334 -0.1 +-1.59085 -0.500006 -0.1 +-1.50652 -0.666672 -0.1 +-1.5 -0.676823 -0.1 +-1.3955 -0.833338 -0.1 +-1.33334 -0.903795 -0.1 +-1.22828 -1 -0.1 +-1.16667 -1.05013 -0.1 +-1 -1.14356 -0.1 +-0.923376 -1.16667 -0.1 +-0.833338 -1.19731 -0.1 +-0.666672 -1.20934 -0.1 +-0.502981 -1.16667 -0.1 +-0.500006 -1.166 -0.1 +-0.33334 -1.04878 -0.1 +-0.300962 -1 -0.1 +-0.213339 -0.833338 -0.1 +-0.166674 -0.695383 -0.1 +-0.160321 -0.666672 -0.1 +-0.131999 -0.500006 -0.1 +-0.114876 -0.33334 -0.1 +-0.105695 -0.166674 -0.1 +-0.102794 -8.3e-06 -0.1 +-0.105695 0.166658 -0.1 +-0.114876 0.333324 -0.1 +-0.131999 0.49999 -0.1 +-0.160321 0.666656 -0.1 +-0.166674 0.695385 -0.1 +-0.213313 0.833322 -0.1 +-0.300882 0.999988 -0.1 +-0.33334 1.04887 -0.1 +-0.500006 1.16599 -0.1 +-0.502981 1.16665 -0.1 +-0.666672 1.20932 -0.1 +-0.833338 1.1973 -0.1 + + +# Contour 6, label: -0.2 +-0.833338 0.857095 -0.2 +-0.887355 0.833322 -0.2 +-1 0.781307 -0.2 +-1.13544 0.666656 -0.2 +-1.16667 0.6332 -0.2 +-1.26222 0.49999 -0.2 +-1.33334 0.34378 -0.2 +-1.33788 0.333324 -0.2 +-1.38211 0.166658 -0.2 +-1.39625 -8.3e-06 -0.2 +-1.38211 -0.166674 -0.2 +-1.33788 -0.33334 -0.2 +-1.33334 -0.343797 -0.2 +-1.26222 -0.500006 -0.2 +-1.16667 -0.633216 -0.2 +-1.13544 -0.666672 -0.2 +-1 -0.781324 -0.2 +-0.887355 -0.833338 -0.2 +-0.833338 -0.857112 -0.2 +-0.666672 -0.873231 -0.2 +-0.548382 -0.833338 -0.2 +-0.500006 -0.816729 -0.2 +-0.358202 -0.666672 -0.2 +-0.33334 -0.631308 -0.2 +-0.282502 -0.500006 -0.2 +-0.241762 -0.33334 -0.2 +-0.219898 -0.166674 -0.2 +-0.213 -8.3e-06 -0.2 +-0.219898 0.166658 -0.2 +-0.241762 0.333324 -0.2 +-0.282502 0.49999 -0.2 +-0.33334 0.631292 -0.2 +-0.358202 0.666656 -0.2 +-0.500006 0.816713 -0.2 +-0.548382 0.833322 -0.2 +-0.666672 0.873214 -0.2 +-0.833338 0.857095 -0.2 + + +# Contour 7, label: -0.3 +-0.833338 0.570212 -0.3 +-0.940434 0.49999 -0.3 +-1 0.447549 -0.3 +-1.07923 0.333324 -0.3 +-1.14407 0.166658 -0.3 +-1.16443 -8.3e-06 -0.3 +-1.14407 -0.166674 -0.3 +-1.0791 -0.33334 -0.3 +-1 -0.447455 -0.3 +-0.940434 -0.500006 -0.3 +-0.833338 -0.570229 -0.3 +-0.666672 -0.593378 -0.3 +-0.500006 -0.510339 -0.3 +-0.4922 -0.500006 -0.3 +-0.40083 -0.33334 -0.3 +-0.351822 -0.166674 -0.3 +-0.336376 -8.3e-06 -0.3 +-0.351822 0.166658 -0.3 +-0.40083 0.333324 -0.3 +-0.4922 0.49999 -0.3 +-0.500006 0.510323 -0.3 +-0.666672 0.593362 -0.3 +-0.833338 0.570212 -0.3 + + +# Contour 8, label: -0.4 +-0.833338 0.191228 -0.4 +-0.850291 0.166658 -0.4 +-0.889173 -8.3e-06 -0.4 +-0.850291 -0.166674 -0.4 +-0.833338 -0.191245 -0.4 +-0.666672 -0.246001 -0.4 +-0.595416 -0.166674 -0.4 +-0.546071 -8.3e-06 -0.4 +-0.595416 0.166658 -0.4 +-0.666672 0.245984 -0.4 +-0.833338 0.191228 -0.4 + diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp1.dat b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp1.dat new file mode 100644 index 00000000000..b238104550d --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp1.dat @@ -0,0 +1,649 @@ +-5.0e0 -5.0e0 2.5e1 2.5e1 +-4.58334e0 -5.0e0 2.29167023e1 2.29167023e1 +-4.16668e0 -5.0e0 2.08333969e1 2.08333969e1 +-3.75002e0 -5.0e0 1.87500992e1 1.87500992e1 +-3.33336e0 -5.0e0 1.66668015e1 1.66668015e1 +-2.9167e0 -5.0e0 1.45835037e1 1.45835037e1 +-2.50004e0 -5.0e0 1.25001984e1 1.25001984e1 +-2.08338e0 -5.0e0 1.04169006e1 1.04169006e1 +-1.66672e0 -5.0e0 8.3336029e0 8.3336029e0 +-1.25006e0 -5.0e0 6.2502975e0 6.2502975e0 +-8.334e-1 -5.0e0 4.16699982e0 4.16699982e0 +-4.1673999e-1 -5.0e0 2.0836998e0 2.0836998e0 +-7.999e-5 -5.0e0 3.99950027e-4 3.99950027e-4 +4.1658002e-1 -5.0e0 -2.08290024e0 -2.08290024e0 +8.3324002e-1 -5.0e0 -4.16620026e0 -4.16620026e0 +1.24990002e0 -5.0e0 -6.2494965e0 -6.2494965e0 +1.66656e0 -5.0e0 -8.3328018e0 -8.3328018e0 +2.08322e0 -5.0e0 -1.04160995e1 -1.04160995e1 +2.49988e0 -5.0e0 -1.24993973e1 -1.24993973e1 +2.91654e0 -5.0e0 -1.45827026e1 -1.45827026e1 +3.3332e0 -5.0e0 -1.66660004e1 -1.66660004e1 +3.7498601e0 -5.0e0 -1.87492981e1 -1.87492981e1 +4.1665201e0 -5.0e0 -2.08326035e1 -2.08326035e1 +4.5831801e0 -5.0e0 -2.29159012e1 -2.29159012e1 +4.9998401e0 -5.0e0 -2.49991989e1 -2.49991989e1 + +-5.0e0 -4.58334e0 2.29167023e1 2.29167023e1 +-4.58334e0 -4.58334e0 2.10070096e1 2.10070096e1 +-4.16668e0 -4.58334e0 1.909731e1 1.909731e1 +-3.75002e0 -4.58334e0 1.71876175e1 1.71876175e1 +-3.33336e0 -4.58334e0 1.5277925e1 1.5277925e1 +-2.9167e0 -4.58334e0 1.33682324e1 1.33682324e1 +-2.50004e0 -4.58334e0 1.14585329e1 1.14585329e1 +-2.08338e0 -4.58334e0 9.5488403e0 9.5488403e0 +-1.66672e0 -4.58334e0 7.6391478e0 7.6391478e0 +-1.25006e0 -4.58334e0 5.7294482e0 5.7294482e0 +-8.334e-1 -4.58334e0 3.81975575e0 3.81975575e0 +-4.1673999e-1 -4.58334e0 1.91006111e0 1.91006111e0 +-7.999e-5 -4.58334e0 3.66621428e-4 3.66621428e-4 +4.1658002e-1 -4.58334e0 -1.90932817e0 -1.90932817e0 +8.3324002e-1 -4.58334e0 -3.81902283e0 -3.81902283e0 +1.24990002e0 -4.58334e0 -5.7287138e0 -5.7287138e0 +1.66656e0 -4.58334e0 -7.6384134e0 -7.6384134e0 +2.08322e0 -4.58334e0 -9.5481061e0 -9.5481061e0 +2.49988e0 -4.58334e0 -1.14577986e1 -1.14577986e1 +2.91654e0 -4.58334e0 -1.33674982e1 -1.33674982e1 +3.3332e0 -4.58334e0 -1.52771907e1 -1.52771907e1 +3.7498601e0 -4.58334e0 -1.71868832e1 -1.71868832e1 +4.1665201e0 -4.58334e0 -1.90965828e1 -1.90965828e1 +4.5831801e0 -4.58334e0 -2.10062753e1 -2.10062753e1 +4.9998401e0 -4.58334e0 -2.29159679e1 -2.29159679e1 + +-5.0e0 -4.16668e0 2.08333969e1 2.08333969e1 +-4.58334e0 -4.16668e0 1.909731e1 1.909731e1 +-4.16668e0 -4.16668e0 1.7361217e1 1.7361217e1 +-3.75002e0 -4.16668e0 1.56251303e1 1.56251303e1 +-3.33336e0 -4.16668e0 1.38890436e1 1.38890436e1 +-2.9167e0 -4.16668e0 1.21529568e1 1.21529568e1 +-2.50004e0 -4.16668e0 1.04168637e1 1.04168637e1 +-2.08338e0 -4.16668e0 8.680777e0 8.680777e0 +-1.66672e0 -4.16668e0 6.9446902e0 6.9446902e0 +-1.25006e0 -4.16668e0 5.2085971e0 5.2085971e0 +-8.334e-1 -4.16668e0 3.47251044e0 3.47251044e0 +-4.1673999e-1 -4.16668e0 1.73642178e0 1.73642178e0 +-7.999e-5 -4.16668e0 3.33292706e-4 3.33292706e-4 +4.1658002e-1 -4.16668e0 -1.7357555e0 -1.7357555e0 +8.3324002e-1 -4.16668e0 -3.47184413e0 -3.47184413e0 +1.24990002e0 -4.16668e0 -5.2079295e0 -5.2079295e0 +1.66656e0 -4.16668e0 -6.9440227e0 -6.9440227e0 +2.08322e0 -4.16668e0 -8.6801094e0 -8.6801094e0 +2.49988e0 -4.16668e0 -1.04161961e1 -1.04161961e1 +2.91654e0 -4.16668e0 -1.21522893e1 -1.21522893e1 +3.3332e0 -4.16668e0 -1.3888376e1 -1.3888376e1 +3.7498601e0 -4.16668e0 -1.56244627e1 -1.56244627e1 +4.1665201e0 -4.16668e0 -1.73605557e1 -1.73605557e1 +4.5831801e0 -4.16668e0 -1.90966425e1 -1.90966425e1 +4.9998401e0 -4.16668e0 -2.08327292e1 -2.08327292e1 + +-5.0e0 -3.75002e0 1.87500992e1 1.87500992e1 +-4.58334e0 -3.75002e0 1.71876175e1 1.71876175e1 +-4.16668e0 -3.75002e0 1.56251303e1 1.56251303e1 +-3.75002e0 -3.75002e0 1.40626488e1 1.40626488e1 +-3.33336e0 -3.75002e0 1.25001671e1 1.25001671e1 +-2.9167e0 -3.75002e0 1.09376855e1 1.09376855e1 +-2.50004e0 -3.75002e0 9.3751984e0 9.3751984e0 +-2.08338e0 -3.75002e0 7.8127167e0 7.8127167e0 +-1.66672e0 -3.75002e0 6.2502351e0 6.2502351e0 +-1.25006e0 -3.75002e0 4.687748e0 4.687748e0 +-8.334e-1 -3.75002e0 3.12526639e0 3.12526639e0 +-4.1673999e-1 -3.75002e0 1.56278311e0 1.56278311e0 +-7.999e-5 -3.75002e0 2.99964107e-4 2.99964107e-4 +4.1658002e-1 -3.75002e0 -1.56218344e0 -1.56218344e0 +8.3324002e-1 -3.75002e0 -3.12466672e0 -3.12466672e0 +1.24990002e0 -3.75002e0 -4.687147e0 -4.687147e0 +1.66656e0 -3.75002e0 -6.2496344e0 -6.2496344e0 +2.08322e0 -3.75002e0 -7.812116e0 -7.812116e0 +2.49988e0 -3.75002e0 -9.3745975e0 -9.3745975e0 +2.91654e0 -3.75002e0 -1.09370848e1 -1.09370848e1 +3.3332e0 -3.75002e0 -1.24995663e1 -1.24995663e1 +3.7498601e0 -3.75002e0 -1.40620479e1 -1.40620479e1 +4.1665201e0 -3.75002e0 -1.56245352e1 -1.56245352e1 +4.5831801e0 -3.75002e0 -1.71870168e1 -1.71870168e1 +4.9998401e0 -3.75002e0 -1.87494983e1 -1.87494983e1 + +-5.0e0 -3.33336e0 1.66668015e1 1.66668015e1 +-4.58334e0 -3.33336e0 1.5277925e1 1.5277925e1 +-4.16668e0 -3.33336e0 1.38890436e1 1.38890436e1 +-3.75002e0 -3.33336e0 1.25001671e1 1.25001671e1 +-3.33336e0 -3.33336e0 1.11112907e1 1.11112907e1 +-2.9167e0 -3.33336e0 9.7224144e0 9.7224144e0 +-2.50004e0 -3.33336e0 8.3335329e0 8.3335329e0 +-2.08338e0 -3.33336e0 6.9446565e0 6.9446565e0 +-1.66672e0 -3.33336e0 5.5557802e0 5.5557802e0 +-1.25006e0 -3.33336e0 4.1668987e0 4.1668987e0 +-8.334e-1 -3.33336e0 2.77802234e0 2.77802234e0 +-4.1673999e-1 -3.33336e0 1.38914442e0 1.38914442e0 +-7.999e-5 -3.33336e0 2.66635507e-4 2.66635507e-4 +4.1658002e-1 -3.33336e0 -1.38861137e0 -1.38861137e0 +8.3324002e-1 -3.33336e0 -2.77748929e0 -2.77748929e0 +1.24990002e0 -3.33336e0 -4.1663646e0 -4.1663646e0 +1.66656e0 -3.33336e0 -5.5552461e0 -5.5552461e0 +2.08322e0 -3.33336e0 -6.9441225e0 -6.9441225e0 +2.49988e0 -3.33336e0 -8.3329988e0 -8.3329988e0 +2.91654e0 -3.33336e0 -9.7218803e0 -9.7218803e0 +3.3332e0 -3.33336e0 -1.11107567e1 -1.11107567e1 +3.7498601e0 -3.33336e0 -1.2499633e1 -1.2499633e1 +4.1665201e0 -3.33336e0 -1.38885146e1 -1.38885146e1 +4.5831801e0 -3.33336e0 -1.52773909e1 -1.52773909e1 +4.9998401e0 -3.33336e0 -1.66662672e1 -1.66662672e1 + +-5.0e0 -2.9167e0 1.45835037e1 1.45835037e1 +-4.58334e0 -2.9167e0 1.33682324e1 1.33682324e1 +-4.16668e0 -2.9167e0 1.21529568e1 1.21529568e1 +-3.75002e0 -2.9167e0 1.09376855e1 1.09376855e1 +-3.33336e0 -2.9167e0 9.7224144e0 9.7224144e0 +-2.9167e0 -2.9167e0 8.5071431e0 8.5071431e0 +-2.50004e0 -2.9167e0 7.2918675e0 7.2918675e0 +-2.08338e0 -2.9167e0 6.0765962e0 6.0765962e0 +-1.66672e0 -2.9167e0 4.861325e0 4.861325e0 +-1.25006e0 -2.9167e0 3.6460495e0 3.6460495e0 +-8.334e-1 -2.9167e0 2.43077829e0 2.43077829e0 +-4.1673999e-1 -2.9167e0 1.21550574e0 1.21550574e0 +-7.999e-5 -2.9167e0 2.33306908e-4 2.33306908e-4 +4.1658002e-1 -2.9167e0 -1.21503932e0 -1.21503932e0 +8.3324002e-1 -2.9167e0 -2.43031187e0 -2.43031187e0 +1.24990002e0 -2.9167e0 -3.6455821e0 -3.6455821e0 +1.66656e0 -2.9167e0 -4.8608578e0 -4.8608578e0 +2.08322e0 -2.9167e0 -6.076129e0 -6.076129e0 +2.49988e0 -2.9167e0 -7.2914001e0 -7.2914001e0 +2.91654e0 -2.9167e0 -8.5066759e0 -8.5066759e0 +3.3332e0 -2.9167e0 -9.721947e0 -9.721947e0 +3.7498601e0 -2.9167e0 -1.09372183e1 -1.09372183e1 +4.1665201e0 -2.9167e0 -1.21524939e1 -1.21524939e1 +4.5831801e0 -2.9167e0 -1.33677652e1 -1.33677652e1 +4.9998401e0 -2.9167e0 -1.45830363e1 -1.45830363e1 + +-5.0e0 -2.50004e0 1.25001984e1 1.25001984e1 +-4.58334e0 -2.50004e0 1.14585329e1 1.14585329e1 +-4.16668e0 -2.50004e0 1.04168637e1 1.04168637e1 +-3.75002e0 -2.50004e0 9.3751984e0 9.3751984e0 +-3.33336e0 -2.50004e0 8.3335329e0 8.3335329e0 +-2.9167e0 -2.50004e0 7.2918675e0 7.2918675e0 +-2.50004e0 -2.50004e0 6.2501984e0 6.2501984e0 +-2.08338e0 -2.50004e0 5.2085329e0 5.2085329e0 +-1.66672e0 -2.50004e0 4.1668675e0 4.1668675e0 +-1.25006e0 -2.50004e0 3.1251984e0 3.1251984e0 +-8.334e-1 -2.50004e0 2.08353296e0 2.08353296e0 +-4.1673999e-1 -2.50004e0 1.04186642e0 1.04186642e0 +-7.999e-5 -2.50004e0 1.99978186e-4 1.99978186e-4 +4.1658002e-1 -2.50004e0 -1.04146664e0 -1.04146664e0 +8.3324002e-1 -2.50004e0 -2.08313318e0 -2.08313318e0 +1.24990002e0 -2.50004e0 -3.1247977e0 -3.1247977e0 +1.66656e0 -2.50004e0 -4.166467e0 -4.166467e0 +2.08322e0 -2.50004e0 -5.2081323e0 -5.2081323e0 +2.49988e0 -2.50004e0 -6.2497977e0 -6.2497977e0 +2.91654e0 -2.50004e0 -7.291467e0 -7.291467e0 +3.3332e0 -2.50004e0 -8.3331323e0 -8.3331323e0 +3.7498601e0 -2.50004e0 -9.3747977e0 -9.3747977e0 +4.1665201e0 -2.50004e0 -1.0416467e1 -1.0416467e1 +4.5831801e0 -2.50004e0 -1.14581323e1 -1.14581323e1 +4.9998401e0 -2.50004e0 -1.24997977e1 -1.24997977e1 + +-5.0e0 -2.08338e0 1.04169006e1 1.04169006e1 +-4.58334e0 -2.08338e0 9.5488403e0 9.5488403e0 +-4.16668e0 -2.08338e0 8.680777e0 8.680777e0 +-3.75002e0 -2.08338e0 7.8127167e0 7.8127167e0 +-3.33336e0 -2.08338e0 6.9446565e0 6.9446565e0 +-2.9167e0 -2.08338e0 6.0765962e0 6.0765962e0 +-2.50004e0 -2.08338e0 5.2085329e0 5.2085329e0 +-2.08338e0 -2.08338e0 4.3404727e0 4.3404727e0 +-1.66672e0 -2.08338e0 3.4724124e0 3.4724124e0 +-1.25006e0 -2.08338e0 2.604349e0 2.604349e0 +-8.334e-1 -2.08338e0 1.73628891e0 1.73628891e0 +-4.1673999e-1 -2.08338e0 8.6822774e-1 8.6822774e-1 +-7.999e-5 -2.08338e0 1.66649586e-4 1.66649586e-4 +4.1658002e-1 -2.08338e0 -8.6789459e-1 -8.6789459e-1 +8.3324002e-1 -2.08338e0 -1.73595575e0 -1.73595575e0 +1.24990002e0 -2.08338e0 -2.6040152e0 -2.6040152e0 +1.66656e0 -2.08338e0 -3.4720787e0 -3.4720787e0 +2.08322e0 -2.08338e0 -4.3401389e0 -4.3401389e0 +2.49988e0 -2.08338e0 -5.2081992e0 -5.2081992e0 +2.91654e0 -2.08338e0 -6.0762625e0 -6.0762625e0 +3.3332e0 -2.08338e0 -6.9443227e0 -6.9443227e0 +3.7498601e0 -2.08338e0 -7.812383e0 -7.812383e0 +4.1665201e0 -2.08338e0 -8.6804463e0 -8.6804463e0 +4.5831801e0 -2.08338e0 -9.5485066e0 -9.5485066e0 +4.9998401e0 -2.08338e0 -1.04165668e1 -1.04165668e1 + +-5.0e0 -1.66672e0 8.3336029e0 8.3336029e0 +-4.58334e0 -1.66672e0 7.6391478e0 7.6391478e0 +-4.16668e0 -1.66672e0 6.9446902e0 6.9446902e0 +-3.75002e0 -1.66672e0 6.2502351e0 6.2502351e0 +-3.33336e0 -1.66672e0 5.5557802e0 5.5557802e0 +-2.9167e0 -1.66672e0 4.861325e0 4.861325e0 +-2.50004e0 -1.66672e0 4.1668675e0 4.1668675e0 +-2.08338e0 -1.66672e0 3.4724124e0 3.4724124e0 +-1.66672e0 -1.66672e0 2.7779575e0 2.7779575e0 +-1.25006e0 -1.66672e0 2.0834999e0 2.0834999e0 +-8.334e-1 -1.66672e0 1.38904486e0 1.38904486e0 +-4.1673999e-1 -1.66672e0 6.9458907e-1 6.9458907e-1 +-7.999e-5 -1.66672e0 1.33320987e-4 1.33320987e-4 +4.1658002e-1 -1.66672e0 -6.9432253e-1 -6.9432253e-1 +8.3324002e-1 -1.66672e0 -1.38877834e0 -1.38877834e0 +1.24990002e0 -1.66672e0 -2.0832327e0 -2.0832327e0 +1.66656e0 -1.66672e0 -2.7776904e0 -2.7776904e0 +2.08322e0 -1.66672e0 -3.4721454e0 -3.4721454e0 +2.49988e0 -1.66672e0 -4.1666005e0 -4.1666005e0 +2.91654e0 -1.66672e0 -4.861058e0 -4.861058e0 +3.3332e0 -1.66672e0 -5.5555132e0 -5.5555132e0 +3.7498601e0 -1.66672e0 -6.2499681e0 -6.2499681e0 +4.1665201e0 -1.66672e0 -6.9444257e0 -6.9444257e0 +4.5831801e0 -1.66672e0 -7.6388808e0 -7.6388808e0 +4.9998401e0 -1.66672e0 -8.3333357e0 -8.3333357e0 + +-5.0e0 -1.25006e0 6.2502975e0 6.2502975e0 +-4.58334e0 -1.25006e0 5.7294482e0 5.7294482e0 +-4.16668e0 -1.25006e0 5.2085971e0 5.2085971e0 +-3.75002e0 -1.25006e0 4.687748e0 4.687748e0 +-3.33336e0 -1.25006e0 4.1668987e0 4.1668987e0 +-2.9167e0 -1.25006e0 3.6460495e0 3.6460495e0 +-2.50004e0 -1.25006e0 3.1251984e0 3.1251984e0 +-2.08338e0 -1.25006e0 2.604349e0 2.604349e0 +-1.66672e0 -1.25006e0 2.0834999e0 2.0834999e0 +-1.25006e0 -1.25006e0 1.5626488e0 1.5626488e0 +-8.334e-1 -1.25006e0 1.04179955e0 1.04179955e0 +-4.1673999e-1 -1.25006e0 5.2094974e-1 5.2094974e-1 +-7.999e-5 -1.25006e0 9.9992267e-5 9.9992267e-5 +4.1658002e-1 -1.25006e0 -5.2074985e-1 -5.2074985e-1 +8.3324002e-1 -1.25006e0 -1.04159964e0 -1.04159964e0 +1.24990002e0 -1.25006e0 -1.5624484e0 -1.5624484e0 +1.66656e0 -1.25006e0 -2.0832996e0 -2.0832996e0 +2.08322e0 -1.25006e0 -2.6041487e0 -2.6041487e0 +2.49988e0 -1.25006e0 -3.124998e0 -3.124998e0 +2.91654e0 -1.25006e0 -3.6458492e0 -3.6458492e0 +3.3332e0 -1.25006e0 -4.1666983e0 -4.1666983e0 +3.7498601e0 -1.25006e0 -4.6875476e0 -4.6875476e0 +4.1665201e0 -1.25006e0 -5.2083987e0 -5.2083987e0 +4.5831801e0 -1.25006e0 -5.7292479e0 -5.7292479e0 +4.9998401e0 -1.25006e0 -6.2500972e0 -6.2500972e0 + +-5.0e0 -8.334e-1 4.16699982e0 4.16699982e0 +-4.58334e0 -8.334e-1 3.81975575e0 3.81975575e0 +-4.16668e0 -8.334e-1 3.47251044e0 3.47251044e0 +-3.75002e0 -8.334e-1 3.12526639e0 3.12526639e0 +-3.33336e0 -8.334e-1 2.77802234e0 2.77802234e0 +-2.9167e0 -8.334e-1 2.43077829e0 2.43077829e0 +-2.50004e0 -8.334e-1 2.08353296e0 2.08353296e0 +-2.08338e0 -8.334e-1 1.73628891e0 1.73628891e0 +-1.66672e0 -8.334e-1 1.38904486e0 1.38904486e0 +-1.25006e0 -8.334e-1 1.04179955e0 1.04179955e0 +-8.334e-1 -8.334e-1 6.94555498e-1 6.94555498e-1 +-4.1673999e-1 -8.334e-1 3.47311066e-1 3.47311066e-1 +-7.999e-5 -8.334e-1 6.66636676e-5 6.66636676e-5 +4.1658002e-1 -8.334e-1 -3.47177795e-1 -3.47177795e-1 +8.3324002e-1 -8.334e-1 -6.94422227e-1 -6.94422227e-1 +1.24990002e0 -8.334e-1 -1.04166602e0 -1.04166602e0 +1.66656e0 -8.334e-1 -1.38891133e0 -1.38891133e0 +2.08322e0 -8.334e-1 -1.7361554e0 -1.7361554e0 +2.49988e0 -8.334e-1 -2.08339944e0 -2.08339944e0 +2.91654e0 -8.334e-1 -2.43064476e0 -2.43064476e0 +3.3332e0 -8.334e-1 -2.77788881e0 -2.77788881e0 +3.7498601e0 -8.334e-1 -3.12513286e0 -3.12513286e0 +4.1665201e0 -8.334e-1 -3.47237819e0 -3.47237819e0 +4.5831801e0 -8.334e-1 -3.81962224e0 -3.81962224e0 +4.9998401e0 -8.334e-1 -4.16686629e0 -4.16686629e0 + +-5.0e0 -4.1673999e-1 2.0836998e0 2.0836998e0 +-4.58334e0 -4.1673999e-1 1.91006111e0 1.91006111e0 +-4.16668e0 -4.1673999e-1 1.73642178e0 1.73642178e0 +-3.75002e0 -4.1673999e-1 1.56278311e0 1.56278311e0 +-3.33336e0 -4.1673999e-1 1.38914442e0 1.38914442e0 +-2.9167e0 -4.1673999e-1 1.21550574e0 1.21550574e0 +-2.50004e0 -4.1673999e-1 1.04186642e0 1.04186642e0 +-2.08338e0 -4.1673999e-1 8.6822774e-1 8.6822774e-1 +-1.66672e0 -4.1673999e-1 6.9458907e-1 6.9458907e-1 +-1.25006e0 -4.1673999e-1 5.2094974e-1 5.2094974e-1 +-8.334e-1 -4.1673999e-1 3.47311066e-1 3.47311066e-1 +-4.1673999e-1 -4.1673999e-1 1.73672194e-1 1.73672194e-1 +-7.999e-5 -4.1673999e-1 3.33350316e-5 3.33350316e-5 +4.1658002e-1 -4.1673999e-1 -1.73605551e-1 -1.73605551e-1 +8.3324002e-1 -4.1673999e-1 -3.47244424e-1 -3.47244424e-1 +1.24990002e0 -4.1673999e-1 -5.2088298e-1 -5.2088298e-1 +1.66656e0 -4.1673999e-1 -6.945223e-1 -6.945223e-1 +2.08322e0 -4.1673999e-1 -8.6816098e-1 -8.6816098e-1 +2.49988e0 -4.1673999e-1 -1.04179965e0 -1.04179965e0 +2.91654e0 -4.1673999e-1 -1.21543898e0 -1.21543898e0 +3.3332e0 -4.1673999e-1 -1.38907765e0 -1.38907765e0 +3.7498601e0 -4.1673999e-1 -1.56271634e0 -1.56271634e0 +4.1665201e0 -4.1673999e-1 -1.73635565e0 -1.73635565e0 +4.5831801e0 -4.1673999e-1 -1.90999434e0 -1.90999434e0 +4.9998401e0 -4.1673999e-1 -2.08363303e0 -2.08363303e0 + +-5.0e0 -7.999e-5 3.99950027e-4 3.99950027e-4 +-4.58334e0 -7.999e-5 3.66621428e-4 3.66621428e-4 +-4.16668e0 -7.999e-5 3.33292706e-4 3.33292706e-4 +-3.75002e0 -7.999e-5 2.99964107e-4 2.99964107e-4 +-3.33336e0 -7.999e-5 2.66635507e-4 2.66635507e-4 +-2.9167e0 -7.999e-5 2.33306908e-4 2.33306908e-4 +-2.50004e0 -7.999e-5 1.99978186e-4 1.99978186e-4 +-2.08338e0 -7.999e-5 1.66649586e-4 1.66649586e-4 +-1.66672e0 -7.999e-5 1.33320987e-4 1.33320987e-4 +-1.25006e0 -7.999e-5 9.9992267e-5 9.9992267e-5 +-8.334e-1 -7.999e-5 6.66636676e-5 6.66636676e-5 +-4.1673999e-1 -7.999e-5 3.33350316e-5 3.33350316e-5 +-7.999e-5 -7.999e-5 6.39840097e-9 6.39840097e-9 +4.1658002e-1 -7.999e-5 -3.33222403e-5 -3.33222403e-5 +8.3324002e-1 -7.999e-5 -6.66508762e-5 -6.66508762e-5 +1.24990002e0 -7.999e-5 -9.9979451e-5 -9.9979451e-5 +1.66656e0 -7.999e-5 -1.33308173e-4 -1.33308173e-4 +2.08322e0 -7.999e-5 -1.6663677e-4 -1.6663677e-4 +2.49988e0 -7.999e-5 -1.9996537e-4 -1.9996537e-4 +2.91654e0 -7.999e-5 -2.33294092e-4 -2.33294092e-4 +3.3332e0 -7.999e-5 -2.66622691e-4 -2.66622691e-4 +3.7498601e0 -7.999e-5 -2.99951291e-4 -2.99951291e-4 +4.1665201e0 -7.999e-5 -3.33280013e-4 -3.33280013e-4 +4.5831801e0 -7.999e-5 -3.66608612e-4 -3.66608612e-4 +4.9998401e0 -7.999e-5 -3.99937212e-4 -3.99937212e-4 + +-5.0e0 4.1658002e-1 -2.08290024e0 -2.08290024e0 +-4.58334e0 4.1658002e-1 -1.90932817e0 -1.90932817e0 +-4.16668e0 4.1658002e-1 -1.7357555e0 -1.7357555e0 +-3.75002e0 4.1658002e-1 -1.56218344e0 -1.56218344e0 +-3.33336e0 4.1658002e-1 -1.38861137e0 -1.38861137e0 +-2.9167e0 4.1658002e-1 -1.21503932e0 -1.21503932e0 +-2.50004e0 4.1658002e-1 -1.04146664e0 -1.04146664e0 +-2.08338e0 4.1658002e-1 -8.6789459e-1 -8.6789459e-1 +-1.66672e0 4.1658002e-1 -6.9432253e-1 -6.9432253e-1 +-1.25006e0 4.1658002e-1 -5.2074985e-1 -5.2074985e-1 +-8.334e-1 4.1658002e-1 -3.47177795e-1 -3.47177795e-1 +-4.1673999e-1 4.1658002e-1 -1.73605551e-1 -1.73605551e-1 +-7.999e-5 4.1658002e-1 -3.33222403e-5 -3.33222403e-5 +4.1658002e-1 4.1658002e-1 1.73538936e-1 1.73538936e-1 +8.3324002e-1 4.1658002e-1 3.4711118e-1 3.4711118e-1 +1.24990002e0 4.1658002e-1 5.206831e-1 5.206831e-1 +1.66656e0 4.1658002e-1 6.9425578e-1 6.9425578e-1 +2.08322e0 4.1658002e-1 8.6782784e-1 8.6782784e-1 +2.49988e0 4.1658002e-1 1.0413999e0 1.0413999e0 +2.91654e0 4.1658002e-1 1.21497258e0 1.21497258e0 +3.3332e0 4.1658002e-1 1.38854463e0 1.38854463e0 +3.7498601e0 4.1658002e-1 1.56211668e0 1.56211668e0 +4.1665201e0 4.1658002e-1 1.73568938e0 1.73568938e0 +4.5831801e0 4.1658002e-1 1.90926143e0 1.90926143e0 +4.9998401e0 4.1658002e-1 2.08283348e0 2.08283348e0 + +-5.0e0 8.3324002e-1 -4.16620026e0 -4.16620026e0 +-4.58334e0 8.3324002e-1 -3.81902283e0 -3.81902283e0 +-4.16668e0 8.3324002e-1 -3.47184413e0 -3.47184413e0 +-3.75002e0 8.3324002e-1 -3.12466672e0 -3.12466672e0 +-3.33336e0 8.3324002e-1 -2.77748929e0 -2.77748929e0 +-2.9167e0 8.3324002e-1 -2.43031187e0 -2.43031187e0 +-2.50004e0 8.3324002e-1 -2.08313318e0 -2.08313318e0 +-2.08338e0 8.3324002e-1 -1.73595575e0 -1.73595575e0 +-1.66672e0 8.3324002e-1 -1.38877834e0 -1.38877834e0 +-1.25006e0 8.3324002e-1 -1.04159964e0 -1.04159964e0 +-8.334e-1 8.3324002e-1 -6.94422227e-1 -6.94422227e-1 +-4.1673999e-1 8.3324002e-1 -3.47244424e-1 -3.47244424e-1 +-7.999e-5 8.3324002e-1 -6.66508762e-5 -6.66508762e-5 +4.1658002e-1 8.3324002e-1 3.4711118e-1 3.4711118e-1 +8.3324002e-1 8.3324002e-1 6.94288982e-1 6.94288982e-1 +1.24990002e0 8.3324002e-1 1.04146614e0 1.04146614e0 +1.66656e0 8.3324002e-1 1.38864484e0 1.38864484e0 +2.08322e0 8.3324002e-1 1.73582225e0 1.73582225e0 +2.49988e0 8.3324002e-1 2.08299968e0 2.08299968e0 +2.91654e0 8.3324002e-1 2.43017838e0 2.43017838e0 +3.3332e0 8.3324002e-1 2.77735579e0 2.77735579e0 +3.7498601e0 8.3324002e-1 3.12453322e0 3.12453322e0 +4.1665201e0 8.3324002e-1 3.47171191e0 3.47171191e0 +4.5831801e0 8.3324002e-1 3.81888933e0 3.81888933e0 +4.9998401e0 8.3324002e-1 4.16606674e0 4.16606674e0 + +-5.0e0 1.24990002e0 -6.2494965e0 -6.2494965e0 +-4.58334e0 1.24990002e0 -5.7287138e0 -5.7287138e0 +-4.16668e0 1.24990002e0 -5.2079295e0 -5.2079295e0 +-3.75002e0 1.24990002e0 -4.687147e0 -4.687147e0 +-3.33336e0 1.24990002e0 -4.1663646e0 -4.1663646e0 +-2.9167e0 1.24990002e0 -3.6455821e0 -3.6455821e0 +-2.50004e0 1.24990002e0 -3.1247977e0 -3.1247977e0 +-2.08338e0 1.24990002e0 -2.6040152e0 -2.6040152e0 +-1.66672e0 1.24990002e0 -2.0832327e0 -2.0832327e0 +-1.25006e0 1.24990002e0 -1.5624484e0 -1.5624484e0 +-8.334e-1 1.24990002e0 -1.04166602e0 -1.04166602e0 +-4.1673999e-1 1.24990002e0 -5.2088298e-1 -5.2088298e-1 +-7.999e-5 1.24990002e0 -9.9979451e-5 -9.9979451e-5 +4.1658002e-1 1.24990002e0 5.206831e-1 5.206831e-1 +8.3324002e-1 1.24990002e0 1.04146614e0 1.04146614e0 +1.24990002e0 1.24990002e0 1.5622482e0 1.5622482e0 +1.66656e0 1.24990002e0 2.0830325e0 2.0830325e0 +2.08322e0 1.24990002e0 2.603815e0 2.603815e0 +2.49988e0 1.24990002e0 3.1245975e0 3.1245975e0 +2.91654e0 1.24990002e0 3.645382e0 3.645382e0 +3.3332e0 1.24990002e0 4.1661644e0 4.1661644e0 +3.7498601e0 1.24990002e0 4.6869469e0 4.6869469e0 +4.1665201e0 1.24990002e0 5.2077312e0 5.2077312e0 +4.5831801e0 1.24990002e0 5.7285136e0 5.7285136e0 +4.9998401e0 1.24990002e0 6.2492961e0 6.2492961e0 + +-5.0e0 1.66656e0 -8.3328018e0 -8.3328018e0 +-4.58334e0 1.66656e0 -7.6384134e0 -7.6384134e0 +-4.16668e0 1.66656e0 -6.9440227e0 -6.9440227e0 +-3.75002e0 1.66656e0 -6.2496344e0 -6.2496344e0 +-3.33336e0 1.66656e0 -5.5552461e0 -5.5552461e0 +-2.9167e0 1.66656e0 -4.8608578e0 -4.8608578e0 +-2.50004e0 1.66656e0 -4.166467e0 -4.166467e0 +-2.08338e0 1.66656e0 -3.4720787e0 -3.4720787e0 +-1.66672e0 1.66656e0 -2.7776904e0 -2.7776904e0 +-1.25006e0 1.66656e0 -2.0832996e0 -2.0832996e0 +-8.334e-1 1.66656e0 -1.38891133e0 -1.38891133e0 +-4.1673999e-1 1.66656e0 -6.945223e-1 -6.945223e-1 +-7.999e-5 1.66656e0 -1.33308173e-4 -1.33308173e-4 +4.1658002e-1 1.66656e0 6.9425578e-1 6.9425578e-1 +8.3324002e-1 1.66656e0 1.38864484e0 1.38864484e0 +1.24990002e0 1.66656e0 2.0830325e0 2.0830325e0 +1.66656e0 1.66656e0 2.7774234e0 2.7774234e0 +2.08322e0 1.66656e0 3.4718117e0 3.4718117e0 +2.49988e0 1.66656e0 4.1662e0 4.1662e0 +2.91654e0 1.66656e0 4.8605908e0 4.8605908e0 +3.3332e0 1.66656e0 5.5549791e0 5.5549791e0 +3.7498601e0 1.66656e0 6.2493674e0 6.2493674e0 +4.1665201e0 1.66656e0 6.9437581e0 6.9437581e0 +4.5831801e0 1.66656e0 7.6381465e0 7.6381465e0 +4.9998401e0 1.66656e0 8.3325348e0 8.3325348e0 + +-5.0e0 2.08322e0 -1.04160995e1 -1.04160995e1 +-4.58334e0 2.08322e0 -9.5481061e0 -9.5481061e0 +-4.16668e0 2.08322e0 -8.6801094e0 -8.6801094e0 +-3.75002e0 2.08322e0 -7.812116e0 -7.812116e0 +-3.33336e0 2.08322e0 -6.9441225e0 -6.9441225e0 +-2.9167e0 2.08322e0 -6.076129e0 -6.076129e0 +-2.50004e0 2.08322e0 -5.2081323e0 -5.2081323e0 +-2.08338e0 2.08322e0 -4.3401389e0 -4.3401389e0 +-1.66672e0 2.08322e0 -3.4721454e0 -3.4721454e0 +-1.25006e0 2.08322e0 -2.6041487e0 -2.6041487e0 +-8.334e-1 2.08322e0 -1.7361554e0 -1.7361554e0 +-4.1673999e-1 2.08322e0 -8.6816098e-1 -8.6816098e-1 +-7.999e-5 2.08322e0 -1.6663677e-4 -1.6663677e-4 +4.1658002e-1 2.08322e0 8.6782784e-1 8.6782784e-1 +8.3324002e-1 2.08322e0 1.73582225e0 1.73582225e0 +1.24990002e0 2.08322e0 2.603815e0 2.603815e0 +1.66656e0 2.08322e0 3.4718117e0 3.4718117e0 +2.08322e0 2.08322e0 4.3398051e0 4.3398051e0 +2.49988e0 2.08322e0 5.2077986e0 5.2077986e0 +2.91654e0 2.08322e0 6.0757953e0 6.0757953e0 +3.3332e0 2.08322e0 6.9437886e0 6.9437886e0 +3.7498601e0 2.08322e0 7.811782e0 7.811782e0 +4.1665201e0 2.08322e0 8.6797787e0 8.6797787e0 +4.5831801e0 2.08322e0 9.5477722e0 9.5477722e0 +4.9998401e0 2.08322e0 1.04157657e1 1.04157657e1 + +-5.0e0 2.49988e0 -1.24993973e1 -1.24993973e1 +-4.58334e0 2.49988e0 -1.14577986e1 -1.14577986e1 +-4.16668e0 2.49988e0 -1.04161961e1 -1.04161961e1 +-3.75002e0 2.49988e0 -9.3745975e0 -9.3745975e0 +-3.33336e0 2.49988e0 -8.3329988e0 -8.3329988e0 +-2.9167e0 2.49988e0 -7.2914001e0 -7.2914001e0 +-2.50004e0 2.49988e0 -6.2497977e0 -6.2497977e0 +-2.08338e0 2.49988e0 -5.2081992e0 -5.2081992e0 +-1.66672e0 2.49988e0 -4.1666005e0 -4.1666005e0 +-1.25006e0 2.49988e0 -3.124998e0 -3.124998e0 +-8.334e-1 2.49988e0 -2.08339944e0 -2.08339944e0 +-4.1673999e-1 2.49988e0 -1.04179965e0 -1.04179965e0 +-7.999e-5 2.49988e0 -1.9996537e-4 -1.9996537e-4 +4.1658002e-1 2.49988e0 1.0413999e0 1.0413999e0 +8.3324002e-1 2.49988e0 2.08299968e0 2.08299968e0 +1.24990002e0 2.49988e0 3.1245975e0 3.1245975e0 +1.66656e0 2.49988e0 4.1662e0 4.1662e0 +2.08322e0 2.49988e0 5.2077986e0 5.2077986e0 +2.49988e0 2.49988e0 6.2493973e0 6.2493973e0 +2.91654e0 2.49988e0 7.2909996e0 7.2909996e0 +3.3332e0 2.49988e0 8.3325983e0 8.3325983e0 +3.7498601e0 2.49988e0 9.374197e0 9.374197e0 +4.1665201e0 2.49988e0 1.04157994e1 1.04157994e1 +4.5831801e0 2.49988e0 1.1457398e1 1.1457398e1 +4.9998401e0 2.49988e0 1.24989967e1 1.24989967e1 + +-5.0e0 2.91654e0 -1.45827026e1 -1.45827026e1 +-4.58334e0 2.91654e0 -1.33674982e1 -1.33674982e1 +-4.16668e0 2.91654e0 -1.21522893e1 -1.21522893e1 +-3.75002e0 2.91654e0 -1.09370848e1 -1.09370848e1 +-3.33336e0 2.91654e0 -9.7218803e0 -9.7218803e0 +-2.9167e0 2.91654e0 -8.5066759e0 -8.5066759e0 +-2.50004e0 2.91654e0 -7.291467e0 -7.291467e0 +-2.08338e0 2.91654e0 -6.0762625e0 -6.0762625e0 +-1.66672e0 2.91654e0 -4.861058e0 -4.861058e0 +-1.25006e0 2.91654e0 -3.6458492e0 -3.6458492e0 +-8.334e-1 2.91654e0 -2.43064476e0 -2.43064476e0 +-4.1673999e-1 2.91654e0 -1.21543898e0 -1.21543898e0 +-7.999e-5 2.91654e0 -2.33294092e-4 -2.33294092e-4 +4.1658002e-1 2.91654e0 1.21497258e0 1.21497258e0 +8.3324002e-1 2.91654e0 2.43017838e0 2.43017838e0 +1.24990002e0 2.91654e0 3.645382e0 3.645382e0 +1.66656e0 2.91654e0 4.8605908e0 4.8605908e0 +2.08322e0 2.91654e0 6.0757953e0 6.0757953e0 +2.49988e0 2.91654e0 7.2909996e0 7.2909996e0 +2.91654e0 2.91654e0 8.5062085e0 8.5062085e0 +3.3332e0 2.91654e0 9.721413e0 9.721413e0 +3.7498601e0 2.91654e0 1.09366174e1 1.09366174e1 +4.1665201e0 2.91654e0 1.21518263e1 1.21518263e1 +4.5831801e0 2.91654e0 1.33670308e1 1.33670308e1 +4.9998401e0 2.91654e0 1.45822353e1 1.45822353e1 + +-5.0e0 3.3332e0 -1.66660004e1 -1.66660004e1 +-4.58334e0 3.3332e0 -1.52771907e1 -1.52771907e1 +-4.16668e0 3.3332e0 -1.3888376e1 -1.3888376e1 +-3.75002e0 3.3332e0 -1.24995663e1 -1.24995663e1 +-3.33336e0 3.3332e0 -1.11107567e1 -1.11107567e1 +-2.9167e0 3.3332e0 -9.721947e0 -9.721947e0 +-2.50004e0 3.3332e0 -8.3331323e0 -8.3331323e0 +-2.08338e0 3.3332e0 -6.9443227e0 -6.9443227e0 +-1.66672e0 3.3332e0 -5.5555132e0 -5.5555132e0 +-1.25006e0 3.3332e0 -4.1666983e0 -4.1666983e0 +-8.334e-1 3.3332e0 -2.77788881e0 -2.77788881e0 +-4.1673999e-1 3.3332e0 -1.38907765e0 -1.38907765e0 +-7.999e-5 3.3332e0 -2.66622691e-4 -2.66622691e-4 +4.1658002e-1 3.3332e0 1.38854463e0 1.38854463e0 +8.3324002e-1 3.3332e0 2.77735579e0 2.77735579e0 +1.24990002e0 3.3332e0 4.1661644e0 4.1661644e0 +1.66656e0 3.3332e0 5.5549791e0 5.5549791e0 +2.08322e0 3.3332e0 6.9437886e0 6.9437886e0 +2.49988e0 3.3332e0 8.3325983e0 8.3325983e0 +2.91654e0 3.3332e0 9.721413e0 9.721413e0 +3.3332e0 3.3332e0 1.11102226e1 1.11102226e1 +3.7498601e0 3.3332e0 1.24990323e1 1.24990323e1 +4.1665201e0 3.3332e0 1.3887847e1 1.3887847e1 +4.5831801e0 3.3332e0 1.52766566e1 1.52766566e1 +4.9998401e0 3.3332e0 1.66654663e1 1.66654663e1 + +-5.0e0 3.7498601e0 -1.87492981e1 -1.87492981e1 +-4.58334e0 3.7498601e0 -1.71868832e1 -1.71868832e1 +-4.16668e0 3.7498601e0 -1.56244627e1 -1.56244627e1 +-3.75002e0 3.7498601e0 -1.40620479e1 -1.40620479e1 +-3.33336e0 3.7498601e0 -1.2499633e1 -1.2499633e1 +-2.9167e0 3.7498601e0 -1.09372183e1 -1.09372183e1 +-2.50004e0 3.7498601e0 -9.3747977e0 -9.3747977e0 +-2.08338e0 3.7498601e0 -7.812383e0 -7.812383e0 +-1.66672e0 3.7498601e0 -6.2499681e0 -6.2499681e0 +-1.25006e0 3.7498601e0 -4.6875476e0 -4.6875476e0 +-8.334e-1 3.7498601e0 -3.12513286e0 -3.12513286e0 +-4.1673999e-1 3.7498601e0 -1.56271634e0 -1.56271634e0 +-7.999e-5 3.7498601e0 -2.99951291e-4 -2.99951291e-4 +4.1658002e-1 3.7498601e0 1.56211668e0 1.56211668e0 +8.3324002e-1 3.7498601e0 3.12453322e0 3.12453322e0 +1.24990002e0 3.7498601e0 4.6869469e0 4.6869469e0 +1.66656e0 3.7498601e0 6.2493674e0 6.2493674e0 +2.08322e0 3.7498601e0 7.811782e0 7.811782e0 +2.49988e0 3.7498601e0 9.374197e0 9.374197e0 +2.91654e0 3.7498601e0 1.09366174e1 1.09366174e1 +3.3332e0 3.7498601e0 1.24990323e1 1.24990323e1 +3.7498601e0 3.7498601e0 1.40614471e1 1.40614471e1 +4.1665201e0 3.7498601e0 1.56238676e1 1.56238676e1 +4.5831801e0 3.7498601e0 1.71862823e1 1.71862823e1 +4.9998401e0 3.7498601e0 1.87486972e1 1.87486972e1 + +-5.0e0 4.1665201e0 -2.08326035e1 -2.08326035e1 +-4.58334e0 4.1665201e0 -1.90965828e1 -1.90965828e1 +-4.16668e0 4.1665201e0 -1.73605557e1 -1.73605557e1 +-3.75002e0 4.1665201e0 -1.56245352e1 -1.56245352e1 +-3.33336e0 4.1665201e0 -1.38885146e1 -1.38885146e1 +-2.9167e0 4.1665201e0 -1.21524939e1 -1.21524939e1 +-2.50004e0 4.1665201e0 -1.0416467e1 -1.0416467e1 +-2.08338e0 4.1665201e0 -8.6804463e0 -8.6804463e0 +-1.66672e0 4.1665201e0 -6.9444257e0 -6.9444257e0 +-1.25006e0 4.1665201e0 -5.2083987e0 -5.2083987e0 +-8.334e-1 4.1665201e0 -3.47237819e0 -3.47237819e0 +-4.1673999e-1 4.1665201e0 -1.73635565e0 -1.73635565e0 +-7.999e-5 4.1665201e0 -3.33280013e-4 -3.33280013e-4 +4.1658002e-1 4.1665201e0 1.73568938e0 1.73568938e0 +8.3324002e-1 4.1665201e0 3.47171191e0 3.47171191e0 +1.24990002e0 4.1665201e0 5.2077312e0 5.2077312e0 +1.66656e0 4.1665201e0 6.9437581e0 6.9437581e0 +2.08322e0 4.1665201e0 8.6797787e0 8.6797787e0 +2.49988e0 4.1665201e0 1.04157994e1 1.04157994e1 +2.91654e0 4.1665201e0 1.21518263e1 1.21518263e1 +3.3332e0 4.1665201e0 1.3887847e1 1.3887847e1 +3.7498601e0 4.1665201e0 1.56238676e1 1.56238676e1 +4.1665201e0 4.1665201e0 1.73598946e1 1.73598946e1 +4.5831801e0 4.1665201e0 1.90959152e1 1.90959152e1 +4.9998401e0 4.1665201e0 2.08319359e1 2.08319359e1 + +-5.0e0 4.5831801e0 -2.29159012e1 -2.29159012e1 +-4.58334e0 4.5831801e0 -2.10062753e1 -2.10062753e1 +-4.16668e0 4.5831801e0 -1.90966425e1 -1.90966425e1 +-3.75002e0 4.5831801e0 -1.71870168e1 -1.71870168e1 +-3.33336e0 4.5831801e0 -1.52773909e1 -1.52773909e1 +-2.9167e0 4.5831801e0 -1.33677652e1 -1.33677652e1 +-2.50004e0 4.5831801e0 -1.14581323e1 -1.14581323e1 +-2.08338e0 4.5831801e0 -9.5485066e0 -9.5485066e0 +-1.66672e0 4.5831801e0 -7.6388808e0 -7.6388808e0 +-1.25006e0 4.5831801e0 -5.7292479e0 -5.7292479e0 +-8.334e-1 4.5831801e0 -3.81962224e0 -3.81962224e0 +-4.1673999e-1 4.5831801e0 -1.90999434e0 -1.90999434e0 +-7.999e-5 4.5831801e0 -3.66608612e-4 -3.66608612e-4 +4.1658002e-1 4.5831801e0 1.90926143e0 1.90926143e0 +8.3324002e-1 4.5831801e0 3.81888933e0 3.81888933e0 +1.24990002e0 4.5831801e0 5.7285136e0 5.7285136e0 +1.66656e0 4.5831801e0 7.6381465e0 7.6381465e0 +2.08322e0 4.5831801e0 9.5477722e0 9.5477722e0 +2.49988e0 4.5831801e0 1.1457398e1 1.1457398e1 +2.91654e0 4.5831801e0 1.33670308e1 1.33670308e1 +3.3332e0 4.5831801e0 1.52766566e1 1.52766566e1 +3.7498601e0 4.5831801e0 1.71862823e1 1.71862823e1 +4.1665201e0 4.5831801e0 1.90959152e1 1.90959152e1 +4.5831801e0 4.5831801e0 2.10055411e1 2.10055411e1 +4.9998401e0 4.5831801e0 2.29151668e1 2.29151668e1 + +-5.0e0 4.9998401e0 -2.49991989e1 -2.49991989e1 +-4.58334e0 4.9998401e0 -2.29159679e1 -2.29159679e1 +-4.16668e0 4.9998401e0 -2.08327292e1 -2.08327292e1 +-3.75002e0 4.9998401e0 -1.87494983e1 -1.87494983e1 +-3.33336e0 4.9998401e0 -1.66662672e1 -1.66662672e1 +-2.9167e0 4.9998401e0 -1.45830363e1 -1.45830363e1 +-2.50004e0 4.9998401e0 -1.24997977e1 -1.24997977e1 +-2.08338e0 4.9998401e0 -1.04165668e1 -1.04165668e1 +-1.66672e0 4.9998401e0 -8.3333357e0 -8.3333357e0 +-1.25006e0 4.9998401e0 -6.2500972e0 -6.2500972e0 +-8.334e-1 4.9998401e0 -4.16686629e0 -4.16686629e0 +-4.1673999e-1 4.9998401e0 -2.08363303e0 -2.08363303e0 +-7.999e-5 4.9998401e0 -3.99937212e-4 -3.99937212e-4 +4.1658002e-1 4.9998401e0 2.08283348e0 2.08283348e0 +8.3324002e-1 4.9998401e0 4.16606674e0 4.16606674e0 +1.24990002e0 4.9998401e0 6.2492961e0 6.2492961e0 +1.66656e0 4.9998401e0 8.3325348e0 8.3325348e0 +2.08322e0 4.9998401e0 1.04157657e1 1.04157657e1 +2.49988e0 4.9998401e0 1.24989967e1 1.24989967e1 +2.91654e0 4.9998401e0 1.45822353e1 1.45822353e1 +3.3332e0 4.9998401e0 1.66654663e1 1.66654663e1 +3.7498601e0 4.9998401e0 1.87486972e1 1.87486972e1 +4.1665201e0 4.9998401e0 2.08319359e1 2.08319359e1 +4.5831801e0 4.9998401e0 2.29151668e1 2.29151668e1 +4.9998401e0 4.9998401e0 2.49983978e1 2.49983978e1 diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp1.script b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp1.script new file mode 100644 index 00000000000..0f7668e203e --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp1.script @@ -0,0 +1 @@ +unset surface; set cntrparam levels 9; set contour; set table "pgfplots_contourtmp1.table"; splot "pgfplots_contourtmp1.dat"; diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp1.table b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp1.table new file mode 100644 index 00000000000..88fa8530634 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_contourtmp1.table @@ -0,0 +1,300 @@ + +#Surface 0 of 1 surfaces + +# Contour 0, label: 25 +-5 -5 25 + + +# Contour 1, label: 20 +-5 -4 20 +-4.79999 -4.16668 20 +-4.58334 -4.36363 20 +-4.36363 -4.58334 20 +-4.16668 -4.79999 20 +-4 -5 20 + + 4.00013 4.99984 20 + 4.16652 4.80017 20 + 4.36378 4.58318 20 + 4.58318 4.36378 20 + 4.80017 4.16652 20 + 4.99984 4.00013 20 + + +# Contour 2, label: 15 +-5 -3 15 +-4.58334 -3.27272 15 +-4.49996 -3.33336 15 +-4.16668 -3.59999 15 +-3.99998 -3.75002 15 +-3.75002 -3.99998 15 +-3.59999 -4.16668 15 +-3.33336 -4.49996 15 +-3.27272 -4.58334 15 +-3 -5 15 + + 3.0001 4.99984 15 + 3.27284 4.58318 15 + 3.3332 4.50018 15 + 3.60013 4.16652 15 + 3.74986 4.00015 15 + 4.00015 3.74986 15 + 4.16652 3.60013 15 + 4.50018 3.3332 15 + 4.58318 3.27284 15 + 4.99984 3.0001 15 + + +# Contour 3, label: 10 +-5 -2 10 +-4.79989 -2.08338 10 +-4.58334 -2.18181 10 +-4.16668 -2.39999 10 +-3.99994 -2.50004 10 +-3.75002 -2.66665 10 +-3.42853 -2.9167 10 +-3.33336 -2.99998 10 +-2.99998 -3.33336 10 +-2.9167 -3.42853 10 +-2.66665 -3.75002 10 +-2.50004 -3.99994 10 +-2.39999 -4.16668 10 +-2.18181 -4.58334 10 +-2.08338 -4.79989 10 +-2 -5 10 + + 2.00006 4.99984 10 + 2.08322 4.80026 10 + 2.18189 4.58318 10 + 2.40008 4.16652 10 + 2.49988 4.00019 10 + 2.66677 3.74986 10 + 2.91654 3.42872 10 + 3.00012 3.3332 10 + 3.3332 3.00012 10 + 3.42872 2.91654 10 + 3.74986 2.66677 10 + 4.00019 2.49988 10 + 4.16652 2.40008 10 + 4.58318 2.18189 10 + 4.80026 2.08322 10 + 4.99984 2.00006 10 + + +# Contour 4, label: 5 +-5 -1 5 +-4.58334 -1.09091 5 +-4.16668 -1.2 5 +-3.99981 -1.25006 5 +-3.75002 -1.33333 5 +-3.33336 -1.49999 5 +-2.9999 -1.66672 5 +-2.9167 -1.71427 5 +-2.50004 -1.99997 5 +-2.39995 -2.08338 5 +-2.08338 -2.39995 5 +-1.99997 -2.50004 5 +-1.71427 -2.9167 5 +-1.66672 -2.9999 5 +-1.49999 -3.33336 5 +-1.33333 -3.75002 5 +-1.25006 -3.99981 5 +-1.2 -4.16668 5 +-1.09091 -4.58334 5 +-1 -5 5 + + 1.00003 4.99984 5 + 1.09095 4.58318 5 + 1.20004 4.16652 5 + 1.2499 4.00032 5 + 1.33338 3.74986 5 + 1.50006 3.3332 5 + 1.66656 3.00019 5 + 1.71436 2.91654 5 + 2.0001 2.49988 5 + 2.08322 2.40013 5 + 2.40013 2.08322 5 + 2.49988 2.0001 5 + 2.91654 1.71436 5 + 3.00019 1.66656 5 + 3.3332 1.50006 5 + 3.74986 1.33338 5 + 4.00032 1.2499 5 + 4.16652 1.20004 5 + 4.58318 1.09095 5 + 4.99984 1.00003 5 + + +# Contour 5, label: 0 + 4.99984 8.20078e-13 0 + 4.58318 5.9355e-13 0 + 4.16652 5.61585e-13 0 + 3.74986 1.00525e-12 0 + 3.3332 7.16829e-13 0 + 2.91654 6.88796e-13 0 + 2.49988 -1.60418e-13 0 + 2.08322 6.64799e-14 0 + 1.66656 2.20668e-12 0 + 1.2499 1.01423e-12 0 + 0.83324 1.50393e-13 0 + 0.41658 2.30328e-13 0 + 7.36189e-14 -7.999e-05 0 + 6.11261e-13 -0.41674 0 + 4.60861e-13 -0.8334 0 + 1.63589e-13 -1.25006 0 + 3.68893e-13 -1.66672 0 +-4.4378e-13 -2.08338 0 + 1.8225e-13 -2.50004 0 + 9.82478e-13 -2.9167 0 + 9.73786e-13 -3.33336 0 + 2.09757e-13 -3.75002 0 +-1.80674e-13 -4.16668 0 + 7.80422e-13 -4.58334 0 + 2.35494e-14 -5 0 + + 8.20121e-13 4.99984 0 + 5.93536e-13 4.58318 0 + 5.61594e-13 4.16652 0 + 1.00524e-12 3.74986 0 + 7.16824e-13 3.3332 0 + 6.88807e-13 2.91654 0 +-1.60419e-13 2.49988 0 + 6.65159e-14 2.08322 0 + 2.20669e-12 1.66656 0 + 1.01418e-12 1.2499 0 + 1.50394e-13 0.83324 0 + 2.30329e-13 0.41658 0 +-7.999e-05 7.36499e-14 0 +-0.41674 6.11267e-13 0 +-0.8334 4.6088e-13 0 +-1.25006 1.63577e-13 0 +-1.66672 3.68918e-13 0 +-2.08338 -4.43798e-13 0 +-2.50004 1.82265e-13 0 +-2.9167 9.82492e-13 0 +-3.33336 9.73795e-13 0 +-3.75002 2.09789e-13 0 +-4.16668 -1.8068e-13 0 +-4.58334 7.80434e-13 0 +-5 2.35519e-14 0 + + +# Contour 6, label: -5 + 4.99984 -1.00003 -5 + 4.58318 -1.09095 -5 + 4.16652 -1.20004 -5 + 3.99981 -1.25006 -5 + 3.74986 -1.33338 -5 + 3.3332 -1.50006 -5 + 2.9999 -1.66672 -5 + 2.91654 -1.71436 -5 + 2.49988 -2.0001 -5 + 2.39995 -2.08338 -5 + 2.08322 -2.40013 -5 + 1.99997 -2.50004 -5 + 1.71427 -2.9167 -5 + 1.66656 -3.00019 -5 + 1.49999 -3.33336 -5 + 1.33333 -3.75002 -5 + 1.2499 -4.00032 -5 + 1.2 -4.16668 -5 + 1.09091 -4.58334 -5 + 1 -5 -5 + +-1.00003 4.99984 -5 +-1.09095 4.58318 -5 +-1.20004 4.16652 -5 +-1.25006 3.99981 -5 +-1.33338 3.74986 -5 +-1.50006 3.3332 -5 +-1.66672 2.9999 -5 +-1.71436 2.91654 -5 +-2.0001 2.49988 -5 +-2.08338 2.39995 -5 +-2.40013 2.08322 -5 +-2.50004 1.99997 -5 +-2.9167 1.71427 -5 +-3.00019 1.66656 -5 +-3.33336 1.49999 -5 +-3.75002 1.33333 -5 +-4.00032 1.2499 -5 +-4.16668 1.2 -5 +-4.58334 1.09091 -5 +-5 1 -5 + + +# Contour 7, label: -10 + 4.99984 -2.00006 -10 + 4.79989 -2.08338 -10 + 4.58318 -2.18189 -10 + 4.16652 -2.40008 -10 + 3.99994 -2.50004 -10 + 3.74986 -2.66677 -10 + 3.42853 -2.9167 -10 + 3.3332 -3.00012 -10 + 2.99998 -3.33336 -10 + 2.91654 -3.42872 -10 + 2.66665 -3.75002 -10 + 2.49988 -4.00019 -10 + 2.39999 -4.16668 -10 + 2.18181 -4.58334 -10 + 2.08322 -4.80026 -10 + 2 -5 -10 + +-2.00006 4.99984 -10 +-2.08338 4.79989 -10 +-2.18189 4.58318 -10 +-2.40008 4.16652 -10 +-2.50004 3.99994 -10 +-2.66677 3.74986 -10 +-2.9167 3.42853 -10 +-3.00012 3.3332 -10 +-3.33336 2.99998 -10 +-3.42872 2.91654 -10 +-3.75002 2.66665 -10 +-4.00019 2.49988 -10 +-4.16668 2.39999 -10 +-4.58334 2.18181 -10 +-4.80026 2.08322 -10 +-5 2 -10 + + +# Contour 8, label: -15 + 4.99984 -3.0001 -15 + 4.58318 -3.27284 -15 + 4.49996 -3.33336 -15 + 4.16652 -3.60013 -15 + 3.99998 -3.75002 -15 + 3.74986 -4.00015 -15 + 3.59999 -4.16668 -15 + 3.3332 -4.50018 -15 + 3.27272 -4.58334 -15 + 3 -5 -15 + +-3.0001 4.99984 -15 +-3.27284 4.58318 -15 +-3.33336 4.49996 -15 +-3.60013 4.16652 -15 +-3.75002 3.99998 -15 +-4.00015 3.74986 -15 +-4.16668 3.59999 -15 +-4.50018 3.3332 -15 +-4.58334 3.27272 -15 +-5 3 -15 + + +# Contour 9, label: -20 + 4.99984 -4.00013 -20 + 4.79999 -4.16668 -20 + 4.58318 -4.36378 -20 + 4.36363 -4.58334 -20 + 4.16652 -4.80017 -20 + 4 -5 -20 + +-4.00013 4.99984 -20 +-4.16668 4.79999 -20 +-4.36378 4.58318 -20 +-4.58334 4.36363 -20 +-4.80017 4.16652 -20 +-5 4 -20 + diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplots_ocg_copy.sty b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_ocg_copy.sty new file mode 100644 index 00000000000..84cefdddb45 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplots_ocg_copy.sty @@ -0,0 +1,125 @@ +%% Copyright (C) 2007 by Michael Ritzert <michael.ritz...@gmail.com> + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{pgfplots_ocg_copy}[2007/10/14] + +\RequirePackage{ifpdf} +\ifpdf +\else + \PackageWarningNoLine{ocg}{% + Loading aborted, because pdfTeX is not running in PDF mode% + }% + \expandafter\endinput +\fi + +\DeclareOption*{}\ProcessOptions*\relax %allow anything as option for the moment + +%testing for correct pdfTeX version +%TODO: find out minimum required version! +\ifnum\pdftexversion<120 + \PackageError{ocg}{% + pdfeTeX, version >= 1.20, required% + }{% + Install a newer version!% + }% +\fi + +% Next OCG id -- TODO: autogenerate. but keep possibility to reopen an OCG. +\newcount\@ocg@num\@ocg@num=0 + +\gdef\@ocg@layersnames{} + +% called from the aux file +\def\@ocg@makeknown#1#2#3{% #1: OCG name, #2: OC id, #3: on/off + \@ifundefined{OCG#2}{% + \message{OCG#2} + \expandafter\gdef\csname OCG#2\endcsname{#1}% + \immediate\pdfobj{<< /Type /OCG /Name (#1) >>}% new ocg + \xdef\@ocg@curocg{\the\pdflastobj\space 0 R}% reference to id + \xdef\@ocg@ocgs{\@ocg@ocgs\space\@ocg@curocg}% list of all OCGs in "first defined" order + \ifnum#3=1 %on + \xdef\@ocg@ocgson{\@ocg@ocgson\space\@ocg@curocg}% list of all default-on OCGs + \else% + \xdef\@ocg@ocgsoff{\@ocg@ocgsoff\space\@ocg@curocg}% list of all default-off OCGs + \fi% + \xdef\@ocg@layersnames{% + \@ocg@layersnames\space/OC#2\space\@ocg@curocg% name-to-id mapping + }% + }{% + \message{OCG#2 reopened} + % layer reopened + } +} + +\AtBeginDocument{% + % the auxfile has been read if available. register the OCGs in the page resources. + \@ocg@addresource + \let\@ocg@makeknown\@gobble +} + +% set page resources to include the layers defined in the aux file +\def\@ocg@addresource{% + \immediate\pdfobj{<<\@ocg@layersnames\space>>}% + \xdef\@ocg@namesobj{\the\pdflastobj\space 0 R}% + % append to pageresources + \begingroup + \edef\x{\endgroup + \pdfpageresources{% + \the\pdfpageresources + /Properties \@ocg@namesobj% + }% + }% + \x +} + +\newcount\@ocg@@ocgs +\pdfobj reserveobjnum +\@ocg@@ocgs=\pdflastobj + +\newcount\@ocg@@layersconfig +\pdfobj reserveobjnum +\@ocg@@layersconfig=\pdflastobj + +\pdfcatalog{% + /OCProperties << + /OCGs \the\@ocg@@ocgs\space0 R\space + /D \the\@ocg@@layersconfig\space0 R\space + >>% +} +\def\@ocg@ocgs{} +\def\@ocg@ocgson{} +\def\@ocg@ocgsoff{} +\AtEndDocument{% + \immediate\pdfobj useobjnum \@ocg@@ocgs {% + [\@ocg@ocgs\space]% + }% + \immediate\pdfobj useobjnum \@ocg@@layersconfig {% + << + /Order [\@ocg@ocgs\space] + /ON [\@ocg@ocgson\space] + /OFF [\@ocg@ocgsoff\space] + >>% + }% +}% + +% schedule a OCG for creation on the next pdflatex run (via the auxfile) +\def\@ocg@newocg#1#2#3{% #1:name, #2:num, #3:on + \if@filesw% + \immediate\write\@auxout{% + \string\@ocg@makeknown{#1}{#2}{#3}% + }% + \fi% +} + +% TODO: Are nested OCGs allowed? +\newenvironment{ocg}[3]{% + \@ocg@newocg{#1}{#2}{#3}% + \gdef\@ocg@curnum{#2}% + \pdfliteral{/OC /OC\@ocg@curnum\space BDC}% + \message{/OC\@ocg@curnum} +}{% + \pdfliteral{EMC}% + %\unskip% + %\endgroup% +} + diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplotsexample.pdf b/Master/texmf-dist/doc/latex/pgfplots/pgfplotsexample.pdf Binary files differindex b1b36a8f11b..e592d8a615c 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplotsexample.pdf +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplotsexample.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.pdf b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.pdf Binary files differindex c5a2649be5f..6246b142872 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.pdf +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex index 1db93c31c52..1af5eb8b231 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstable.tex @@ -1,4 +1,4 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%[basicstyle=\footnotesize\ttfamily]%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Package pgfplots.sty documentation. % @@ -87,7 +87,9 @@ \section{Introduction} \PGFPlotstable\ is a lightweight sub-package of \PGFPlots\ which employs its table input methods and the number formatting techniques to convert tab-separated tables into tabulars. -Its input is a text file containing space separated rows, possibly starting with column names. Its output is a \LaTeX\ tabular\footnote{Please see the remarks in section~\ref{sec:pgfplotstable:context} for plain \TeX\ and Con\TeX t.} which contains selected columns of the text table, rounded to the desired precision, printed in the desired number format (fixed point, integer, scientific etc.). +Its input is a text file containing space-separated rows, possibly starting with column names. Its output is a \LaTeX\ tabular\footnote{Please see the remarks in Section~\ref{sec:pgfplotstable:context} for plain \TeX\ and Con\TeX t.} which contains selected columns of the text table, rounded to the desired precision, printed in the desired number format (fixed point, integer, scientific etc.). The output is \LaTeX\ code, and that code is finally typeset by \LaTeX. + +In other words, \PGFPlotstable\ is nothing but a more-or-less smart code generator which spits out something like |\begin{tabular}....\end{tabular}|. Use it if you'd like to customize row- or column--dependent styles or if you have numerical data for which you want to have automatically formatted content. It is used with % NO GALLERY @@ -115,7 +117,7 @@ It is used with \end{enumerate} Both ways are shown in the examples below. - Knowledge of |pgfkeys| is useful for a deeper insight into this package, as |/.style|, |/.append style| etc. are specific to |pgfkeys|. Please refer to the \PGF\ manual,~\cite[section pgfkeys]{tikz} if you want a deeper insight into |pgfkeys|. Otherwise, simply skip over to the examples provided in this document. + Knowledge of |pgfkeys| is useful for a deeper insight into this package, as |/.style|, |/.append style| etc.\ are specific to |pgfkeys|. Please refer to the \PGF\ manual,~\cite[Section pgfkeys]{tikz} or the shorter introduction~\cite{keyvalintro} to learn more about |pgfkeys|. Otherwise, simply skip over to the examples provided in this document. You will find key prefixes |/pgfplots/table/| and |/pgf/number format/|. These prefixes can be skipped if they are used in \PGFPlotstable; they belong to the ``default key path'' of |pgfkeys|. \end{command} @@ -142,19 +144,12 @@ level dof error1 error2 info grad(log(dof),log(error2)) \end{codeexample} Lines starting with `|%|' or `|#|' are considered to be comment lines and are ignored. -There is future support for a second header line which must start with `|$flags |' (the space is obligatory, even if the column separator is \emph{not} space!). Currently, such a line is ignored. It may be used to provide number formatting options like precision and number format. +There is future support for a second header line which must start with `|$flags |' (the space is mandatory, even if the column separator is \emph{not} space!). Currently, such a line is ignored. It may be used to provide number formatting options like precision and number format. \begin{command}{\pgfplotstabletypeset\oarg{optional arguments}\marg{file name {\normalfont or} \textbackslash macro {\normalfont or} inline table}} Loads (or acquires) a table and typesets it using the current configuration of number formats and table options. - In case the first argument is a file name, the table will be loaded from disk. If it is an already loaded table (see |\pgfplotstableread| or |\pgfplotstablenew|), it will be used. Otherwise, if it is inline table data, this data will be parsed just as if it would have been found in a file (see |\pgfplotstableread|). -{ - % allow to typeset the example. I couldn't get the \catcodes - % correctly... - \pgfplotstableset{ - /codeexample/newline=\noexpand\\, - row sep=\\, - }% + In case the first argument is a file name, the table will be loaded from disk. If it is an already loaded table (see |\pgfplotstableread| or |\pgfplotstablenew|), it will be used. Otherwise, if it is inline table data, this data will be parsed just as if it was found in a file (see |\pgfplotstableread|). \begin{codeexample}[] \pgfplotstabletypeset[sci zerofill]{ a b @@ -164,7 +159,6 @@ There is future support for a second header line which must start with `|$flags 9000 1000000 } \end{codeexample} -}% \begin{codeexample}[] @@ -210,7 +204,7 @@ There is future support for a second header line which must start with `|$flags \end{codeexample} \noindent All of these options are explained in all detail in the following sections. -You may also use a similar input format as for tabular environment: +You may also use an input format similar to the tabular environment: \begin{codeexample}[width=8cm] \pgfplotstabletypeset [col sep=&,row sep=\\,sci zerofill] @@ -234,21 +228,21 @@ Technical note: every opened file will be protocolled into your log file. \end{command} \begin{command}{\pgfplotstabletypesetfile\oarg{optional arguments}\marg{file name}} - Loads the table \marg{file name} and typesets it. As of \PGFPlotstable\ 1.2, this command is an alias to |\pgfplotstabletypeset|, that means the first argument can be either a file name or an already loaded table. + Loads the table \meta{file name} and typesets it. As of \PGFPlotstable\ 1.2, this command is an alias to |\pgfplotstabletypeset|, that means the first argument can be either a file name or an already loaded table. \end{command} \begin{commandlist}{% \pgfplotstableread\marg{file name}\marg{\textbackslash macro}, \pgfplotstableread\marg{inline table}\marg{\textbackslash macro}} - Loads a table into the \TeX-macro \meta{\textbackslash macro}. This macro will store the table as internal structure and can be used several times. + Loads a table into the \TeX-macro \meta{\textbackslash macro}. This macro will store the table as internal structure and can be used multiple times. \begin{codeexample}[] \pgfplotstableread{pgfplotstable.example1.dat}\loadedtable \pgfplotstabletypeset[columns={dof,error1}]\loadedtable \hspace{2cm} \pgfplotstabletypeset[columns={dof,error2}]\loadedtable \end{codeexample} - The first argument can be either a \meta{file name} as in the example here. It is also possible to provide the table data directly: + The first argument can be a \meta{file name} as in the example here. It is also possible to provide the table data directly: \begin{codeexample}[code only] % Alternative: inline table data: \pgfplotstableread{ @@ -271,19 +265,19 @@ level dof error1 error2 info grad(log(dof),log(error2)) quot(err \end{codeexample} It is checked automatically whether the first argument contains inline data or a file name. - The check whether the first argument is inline data or a file name works as follows: if |format=auto|, the first argument is considered to be a file name unless it contains the |row sep| character (see |row sep|). If |format=inline|, it is always considered to be inline data. If |format=file|, it is a file name. + This check whether the first argument is inline data or a file name works as follows: if |format=auto|, the first argument is considered to be a file name unless it contains the |row sep| character (see |row sep|). If |format=inline|, it is always considered to be inline data. If |format=file|, it is a file name. \paragraph{Special cases and more details:} \begin{itemize} \item The inline data format is ``fragile''. If you experience problems, terminate your tables with `|\\|' combined with |row sep=\\| (the docs for |row sep| contain alternative ways and more explanation). - \item There are variants of this command which do not really built up a struct but which report every line to a ``listener''. There is also a struct which avoids protection by \TeX\ scopes. In case you need such things, consider reading the source code comments. + \item There are variants of this command which do not really build up a struct, but which report every line to a ``listener''. There is also a struct which avoids protection by \TeX\ scopes. In case you need such things, consider reading the source code comments. \item Technical note: every opened file will be protocolled into your log file. \item Note: avoid using `|\table|' as name, it conflicts with |\begin{table}| of \LaTeX. \end{itemize} \end{commandlist} \begin{key}{/pgfplots/table/col sep=\mchoice{space,tab,comma,semicolon,colon,braces,\&,ampersand} (initially space)} - Specifies the column separation character for table reading. The initial choice, |space| means ``at least one white space''. White spaces are tab stops or spaces (newlines always delimit lines). + Specifies the column separation character for table reading. The initial choice, |space|, means ``at least one white space''. White spaces are tab stops or spaces (newlines characters always delimit lines). For example, the file |pgfplotstable.example1.csv| uses commas as separation characters. \begin{codeexample}[code only] @@ -309,19 +303,19 @@ level,dof,error1,error2,info,{grad(log(dof),log(error2))},quot(error1) Please note that if cell entries (for example column names) contain the separation character, you need to enclose the column entry in \emph{braces}: |{grad(log(dof),log(error2)}|. If you want to use unmatched braces, you need to write a backslash before the brace. For example the name `|column{withbrace|' needs to be written as `|column\{withbrace|'. - For |col sep|$\neq$|space|, spaces will be considered to be part of the argument (there is no trimming). However, (as usual in \TeX), multiple successive spaces and tabs are summarized into white space. Of course, if |col sep=tab|, tabs are the column separators and will be treated specially. + For |col sep|$\neq$|space|, spaces will be considered to be part of the argument (there is no trimming). However, (as usual in \TeX), multiple successive spaces and tabs are replace by a single white space. Of course, if |col sep=tab|, tabs are the column separators and will be treated specially. Furthermore, if you need empty cells in case |col sep=space|, you have to provide |{}| to delimit such a cell since |col sep=space| uses \emph{at least} one white space (consuming all following ones). - The value |col sep=braces| is special since it actually uses two separation characters. Every single cell entry is delimited by an opening and a closing brace, \marg{entry}, for this choice. Furthermore, any white spaces (spaces and tabs) between cell entries are \emph{skipped} in case |braces| until the next \marg{entry} is found. + The value |col sep=braces| is special since it actually uses two separation characters. Every single cell entry is delimited by an opening and a closing brace, \meta{entry}, for this choice. Furthermore, any white space (spaces and tabs) between cell entries are \emph{skipped} in case |braces| until the next \meta{entry} is found. - A further speciality of |col sep=braces| is that it has support for \emph{multi-line} cells: everything within balanced braces is considered to be part of a cell. This includes newlines\footnote{This treatment of newlines within balanced braces actually applies to every other column separator as well (it is a \TeX\ readline feature). In other words: you \emph{can} have multi line cells for every column separator if you enclose them in balanced curly braces. However, \texttt{col sep=braces} has the special treatment that end-of-line counts as white space character; for every other \texttt{col sep} value, this white space is suppressed to remove spurious spaces.}. + A further specialty of |col sep=braces| is that it has support for \emph{multi-line} cells: everything within balanced braces is considered to be part of a cell. This includes newlines\footnote{This treatment of newlines within balanced braces actually applies to every other column separator as well (it is a \TeX\ readline feature). In other words: you \emph{can} have multi-line cells for every column separator if you enclose them in balanced curly braces. However, \texttt{col sep=braces} has the special treatment that end-of-line counts as white space character; for every other \texttt{col sep} value, this white space is suppressed to remove spurious spaces.}. The |col sep=&| case (probably together with |row sep=\\|) allows to read tables as you'd usually type them in \LaTeX. This will automatically enable |trim cells|. \end{key} \begin{key}{/pgfplots/table/trim cells=\mchoice{true,false} (initially false)} - If enabled, leading and trailing white spaces will be removed while tables are read. + If enabled, leading and trailing white space will be removed while tables are read. This might be necessary if you have |col sep|$\neq$|space| but your cells contain spaces. It will be activated automatically for |col sep=&|. \end{key} @@ -361,7 +355,7 @@ level,dof,error1,error2,info,{grad(log(dof),log(error2))},quot(error1) \end{enumerate} The same applies if you experience problems with inline data and special |col sep| choices (like |col sep=tab|). - The reasons for such problems is that \TeX\ scans the macro bodies and replaces newlines by white spaces. It does other substitutions of this sort as well, and these substitutions can't be undone (maybe not even found). + The reasons for such problems is that \TeX\ scans the macro bodies and replaces newlines by white space. It does other substitutions of this sort as well, and these substitutions can't be undone (maybe not even found). \end{pgfplotskey} \begin{key}{/pgfplots/table/ignore chars=\marg{comma-separated-list} (initially empty)} @@ -377,7 +371,7 @@ level,dof,error1,error2,info,{grad(log(dof),log(error2))},quot(error1) {pgfplotstable.example5.dat} \end{codeexample} - The \meta{comma-separated-list} should contain exactly one character in each list element, and the single characters should be separated by commas. Some special characters like commas, white spaces, hashes, percents or backslashes need to be escaped by prefixing them with a backslash. + The \meta{comma-separated-list} should contain exactly one character in each list element, and the single characters should be separated by commas. Some special characters like commas, white space, hashes, percents or backslashes need to be escaped by prefixing them with a backslash. Besides normal characters, it is also supported to eliminate any binary code from your input files. For example, suppose you have binary characters of code |0x01| (hex notation) in your files. Then, use \begin{codeexample}[code only] @@ -389,20 +383,50 @@ level,dof,error1,error2,info,{grad(log(dof),log(error2))},quot(error1) This setting applies to |\addplot table| and |\addplot file| for \PGFPlots\ as well. - Note that |ignore chars| is ``fragile'' when it is applied to |format=inline| or |format=auto|. Consider |format=file| if you experience problems\footnote{See also |row\ sep| for more information about dealing with fragile inline tables formats.}. + Note that |ignore chars| is ``fragile'' when it is applied to |format=inline| or |format=auto|. Consider |format=file| if you experience problems\footnote{See also |row\ sep| for more information about dealing with fragile inline table formats.}. \end{key} \begin{key}{/pgfplots/table/white space chars=\marg{comma-separated-list} (initially empty)} - Allows to define a list of single characters which are actually treated like white spaces (in addition to tabs and spaces). It might be useful in order to get more than one column separator character. + Allows to define a list of single characters which are actually treated like white space (in addition to tabs and spaces). It might be useful in order to get more than one column separator character. The |white space chars| list is used in exactly the same way as |ignore chars|, and the same remarks as above apply as well. \end{key} +\begin{key}{/pgfplots/table/comment chars=\marg{comma-separated-list} (initially empty)} + Allows to add one or more \emph{additional} comment characters. Each of these characters has a similar effect as the |#| character, i.e.\ all following characters of that particular input line are skipped. +\begin{codeexample}[] +\pgfplotstabletypeset[comment chars=!]{ +! Some comments +1 0 +2 -10 +! another comment line +3 0 +} +\end{codeexample} + The example above uses `|!|' as additional comment character (which allows to parse Touchstone files). +\end{key} + +\begin{key}{/pgfplots/table/skip first n=\marg{integer} (initially 0)} + Allows to skip the first \meta{integer} lines of an input file. The lines will not be processed. +\begin{codeexample}[] +\pgfplotstabletypeset[skip first n=4]{%<- this '%' is important. Otherwise, the + %newline here would delimit an (empty) row. + XYZ Format, + Version 1.234 + Date 2010-09-01 + @author Mustermann + A B C + 1 2 3 + 4 5 6 +} +\end{codeexample} +\end{key} + \subsection{Selecting Columns and their Appearance Styles} \begin{key}{/pgfplots/table/columns=\marg{comma-separated-list}} - Selects particular columns the table. If this option is empty (has not been provided), all available columns will be selected. + Selects particular columns of the table. If this option is empty (has not been provided), all available columns will be selected. - Inside of \marg{comma-separated-list}, column names as they appear in the table's header are expected. If there is no header, simply use column indices. If there are column names, the special syntax |[index]|\meta{integer} can be used to select columns by index. The first column has index~$0$. + Inside of \meta{comma-separated-list}, column names as they appear in the table's header are expected. If there is no header, simply use column indices. If there are column names, the special syntax |[index]|\meta{integer} can be used to select columns by index. The first column has index~$0$. \begin{codeexample}[] \pgfplotstabletypeset[columns={dof,level,[index]4}]{pgfplotstable.example1.dat} \end{codeexample} @@ -416,17 +440,16 @@ level,dof,error1,error2,info,{grad(log(dof),log(error2))},quot(error1) % in preamble: \pgfplotstableset{ alias/newname/.initial=b, -}% -% +} + % in document: \pgfplotstabletypeset[ - row sep=\\, columns={a,newname},% access to `newname' is the same as to `b' ]{ - a b\\ - 1 2\\ - 3 4\\ - 5 6\\ + a b + 1 2 + 3 4 + 5 6 }% \end{codeexample} You can use |columns/|\meta{col name}|/.style| to assign styles for the alias, not for the original column name. @@ -435,11 +458,11 @@ level,dof,error1,error2,info,{grad(log(dof),log(error2))},quot(error1) In case \meta{col name} contains characters which are required for key settings, you need to use braces around it: ``|alias/{name=wi/th,special}/.initial={othername}|''. - This key is used whenever columns are queries, it applies also to the |\addplot table| statement of \PGFPlots. + This key is used whenever columns are queried, it applies also to the |\addplot table| statement of \PGFPlots. \end{pgfplotstablealiaskey} \begin{pgfplotstablecolumnkey} - Sets all options in \marg{key-value-list} exclusively for \marg{column name}. + Sets all options in \meta{key-value-list} exclusively for \meta{column name}. \begin{codeexample}[] \pgfplotstabletypeset[ @@ -476,11 +499,11 @@ level,dof,error1,error2,info,{grad(log(dof),log(error2))},quot(error1) ] {pgfplotstable.example1.dat} \end{codeexample} - If your tables don't have column names, you can simply use integer indices instead of \marg{column name} to refer to columns. If you have column names, you can't set column styles using indices. + If your tables don't have column names, you can simply use integer indices instead of \meta{column name} to refer to columns. If you have column names, you can't set column styles using indices. \end{pgfplotstablecolumnkey} \begin{pgfplotstabledisplaycolumnkey} - Applies all options in \marg{key-value-list} exclusively to the column which will appear at position \meta{index} in the output table. + Applies all options in \meta{key-value-list} exclusively to the column which will appear at position \meta{index} in the output table. In contrast to the |table/columns/|\meta{name} styles, this option refers to the output table instead of the input table. Since the output table has no unique column name, you can only access columns by index. @@ -531,7 +554,9 @@ level,dof,error1,error2,info,{grad(log(dof),log(error2))},quot(error1) \end{codekey} \begin{stylekey}{/pgfplots/table/multicolumn names=\marg{tabular column type} (initially c)} - A style which typesets each column name using a |\multicolumn{1}|\marg{tabular column type}\marg{the column name} statement. + A style which typesets each column name in the current context using a |\multicolumn{1}|\marg{tabular column type}\marg{the column name} statement. + + Here,\meta{the column name} is set with |column name| as usual. \end{stylekey} \begin{stylekey}{/pgfplots/table/dec sep align=\marg{header column type} (initially c)} @@ -650,7 +675,7 @@ level,dof,error1,error2,info,{grad(log(dof),log(error2))},quot(error1) {pgfplotstable.example1.dat} \end{codeexample} - The |sort| mechanism is applied before the actual typesetting routine starts, i.e.\ it has the same effect as if you'd call |\pgfplotstablesort| manually before typesetting the table (however, the |sort| key has the advantage of respective the |include outfiles| caching mechanism). Any |create on use| specifications are resolved before calling the |sort key|. + The |sort| mechanism is applied before the actual typesetting routine starts, i.e.\ it has the same effect as if you'd call |\pgfplotstablesort| manually before typesetting the table (however, the |sort| key has the advantage of respecting the |include outfiles| caching mechanism). Any |create on use| specifications are resolved before calling the |sort key|. %The |sort| key applies also to |\addplot table[sort,read completely]|. @@ -725,14 +750,14 @@ A style which is installed for every column with odd column index (starting with \end{stylekey} \begin{command}{\pgfplotstablecol} - During the evaluation of row or column options, this command expands to the current columns' index. + During the evaluation of row or column options, this command expands to the current column's index. \end{command} \begin{command}{\pgfplotstablecolname} - During the evaluation of column options, this command expands to the current column's name. It is valid while |\pgfplotstabletypeset| processes the column styles (including the preprocessing step explained in section~\ref{sec:pgfplotstable:preproc}), prepares the output cell content and checks row predicates. + During the evaluation of column options, this command expands to the current column's name. It is valid while |\pgfplotstabletypeset| processes the column styles (including the preprocessing step explained in Section~\ref{sec:pgfplotstable:preproc}), prepares the output cell content and checks row predicates. \end{command} \label{pgfplotstable:page:tablerow} \begin{command}{\pgfplotstablerow} - During the evaluation of row or column options, this command expands to the current rows' index. + During the evaluation of row or column options, this command expands to the current row's index. \end{command} \begin{command}{\pgfplotstablecols} During the evaluation of row or column options, this command expands to the total number of columns in the output table. @@ -758,6 +783,97 @@ The following styles allow to configure the final table code \emph{after any cel \begin{key}{/pgfplots/table/before row=\marg{\TeX\ code}} Contains \TeX\ code which will be installed before the first cell in a row. + + Keep in mind that \PGFPlotstable\ does no magic -- it is simply a code generator which produces |tabular| environments. Consequently, you can add any \TeX\ code which you would normally write into your |tabular| environment here. + + An example could be a multicolumn heading for which \PGFPlotstable\ has no own solution: +\begin{codeexample}[] +% \usepackage{booktabs} +\pgfplotstabletypeset[ + column type=l, + every head row/.style={ + before row={% + \toprule + & \multicolumn{2}{c}{Singular} & \multicolumn{2}{c}{Plural}\\ + }, + after row=\midrule, + }, + every last row/.style={ + after row=\bottomrule}, + columns/person/.style ={column name=}, + columns/singGaeilge/.style ={column name=Gaeilge}, + columns/pluralGaeilge/.style={column name=Gaeilge}, + columns/singEnglish/.style ={column name=English}, + columns/pluralEnglish/.style={column name=English}, + col sep=&,row sep=\\, + string type, +]{ +person & singEnglish & singGaeilge & pluralEnglish & pluralGaeilge\\ +1st & at me & agam & at us & againn\\ +2st & at you & agat & at you & agaibh\\ +3st & at him & aige & at them & acu\\ + & at her & aici & &\\ +} +\end{codeexample} + \noindent The example declares a lot of options and is finally followed by a short inline table. The |every head row| style configures |\multicolumn| headings by means of verbatim |tabular| code, together with |booktabs| rules. It might be helpful to consider the |debug| or |outfile| keys during experiments. The |columns/...| styles are necessary to change the column headings. + + + Sometimes, one wants to combine |\multicolumn| and |\rowcolor|. From what I know about \LaTeX, this is a little bit complicated: it requires the use of |\columncolor| inside of the |\multicolumn|. As in the example above, it is necessary to modify the code generated by \PGFPlotstable\ a little bit. Keep in mind that \PGFPlotstable\ is just a code generator for |tabular| environments -- modify whatever you want. The following example demonstrates the combination of |\multicolumn| and |\rowcolor|. It has been taken out of an -- admittedly advanced -- application: +\begin{codeexample}[] +\newcolumntype{C}{>{\centering\arraybackslash}p{6mm}}% a centered fixed-width-column +\pgfplotstabletypeset[ + col sep=&, + row sep=\\, + every head row/.style={ + % as in the previous example, this patches the first row: + before row={ + \hline + \rowcolor{lightgray} + \multicolumn{3}{|>{\columncolor{lightgray}}c|}{Quantenzahlen} & Term--\\ + \rowcolor{lightgray} + }, + after row=\hline, + }, + every last row/.style={ + after row=\hline}, + % define column-specific styles: + columns/n/.style={column type=|C,column name=$n$}, + columns/l/.style={column type=|C,column name=$\ell$}, + columns/lambda/.style={column type=|C,column name=$\lambda$}, + columns/text/.style={column type=|c|,column name=bezeichnung, + string type % <-it contains formatted data + }, +] +{ +n & l & lambda & text\\ +1 & 0 & 0 & $1 s\sigma$ \\ +2 & 0 & 0 & $2 s\sigma$ \\ +2 & 1 & 0 & $2 p\sigma$ \\ +2 & 1 & 1 & $2 p \pi $\\ +3 & 2 & 0 & $3 d\sigma$ \\ +3 & 2 & 2 & $3 d\delta$ \\ +} +\end{codeexample} + + Up to the number formatting (which actually invokes |\pgfmathprintnumber|), the code above is equivalent to the listing +\begin{codeexample}[code only] +\newcolumntype{C}{>{\centering\arraybackslash}p{6mm}}% a centered fixed-width-column +\begin{tabular}{|C|C|C|c|} +\hline +\rowcolor{lightgray} \multicolumn{3}{|>{\columncolor{lightgray}}c|}{Quantenzahlen} & Term--\\ +\rowcolor{lightgray} $n$ & $\ell$ & $\lambda$ & bezeichnung\\ +\hline +$1$ & $0$ & $0$ & $1 s\sigma$ \\ +$2$ & $0$ & $0$ & $2 s\sigma$ \\ +$2$ & $1$ & $0$ & $2 p\sigma$ \\ +$2$ & $1$ & $1$ & $2 p \pi$ \\ +$3$ & $2$ & $0$ & $3 d\sigma$ \\ +$3$ & $2$ & $2$ & $3 d\delta$ \\ +\hline +\end{tabular} +\end{codeexample} + + Clearly, the overhead introduced by defining a lot of styles is only worth the effort if you require number printing, automated processing, or have a huge bulk of similar tables. \end{key} \begin{key}{/pgfplots/table/after row=\marg{\TeX\ code}} @@ -837,13 +953,120 @@ The following styles allow to configure the final table code \emph{after any cel \end{stylekey} \begin{stylekey}{/pgfplots/table/every last row} - A style which is installed for each last \emph{data} row. + A style which is installed for each last row. \end{stylekey} \begin{stylekey}{/pgfplots/table/every row no \meta{index}} A style which is installed for the row with index \meta{index}. \end{stylekey} +\begin{keylist}{% + /pgfplots/table/every nth row=\marg{integer}\marg{options}, + /pgfplots/table/every nth row=\marg{integer\oarg{shift}}\marg{options}} + % + This allows to install \meta{options} for every $n$th row with $n=$\meta{integer}. +\begin{codeexample}[] +\pgfplotstabletypeset[ + every nth row={3}{before row=\midrule}, + every head row/.style={ + before row=\toprule,after row=\midrule}, + every last row/.style={ + after row=\bottomrule}, +]{ + a b + 0 0 + 1 1 + 2 2 + 3 3 + 4 4 + 5 5 + 6 6 + 7 7 + 8 8 +} +\end{codeexample} + Only data rows are considered for |every nth row|; it will never apply to column names and data rows are numbered like $i=0,1,2,\dotsc$ (the example above applies it to the rows with $a = 3,6$). Since the case $i=0$ can be handled by |every first row|, it is not considered for |every nth row|. + + The second syntax allows to provide an additional \meta{shift}: +\begin{codeexample}[] +\pgfplotstabletypeset[ + every nth row={3[+1]}{before row=\midrule}, +]{ + a b + 0 0 + 1 1 + 2 2 + 3 3 + 4 4 + 5 5 + 6 6 + 7 7 + 8 8 + 9 9 + 10 10 +} +\end{codeexample} + \noindent Here, the style is applied to rows $i=1,4,7,10$ (mathematically, it is applied if $(i \text{ mod } n) = $\meta{shift}). The \meta{shift} can be negative. + + You can define many |every nth row| styles, they are processed in the order of occurance (consider using |before row/.add=|\marg{before existing}\marg{after existing} to modify an existing value). + + Note that |every nth row/.style 2 args=...| is the same as |every nth row=...|. +\end{keylist} + +\subsection{Configuring Single--Cell Appearance: Styles} +Besides the possibilities to change column styles and row styles, there are also a couple of styles to change single cells. +\begin{stylekey}{/pgfplots/table/every row \meta{rowindex} column \meta{colindex}} + A style which applies to at most one cell: the one with row index \meta{rowindex} and column index \meta{colindex}. Each of these indices starts with~$0$. + + The style is evaluated in the same context as the |preproc cell content|, |assign cell content|, and |postproc cell content| keys and it is a legitimate possibility to modify any of these parameters. It is also possible to replace the initial cell value by assigning something to |@cell content|. + + For example, consider this unmodified table: +\begin{codeexample}[] +\pgfplotstabletypeset[ + col sep=&,row sep=\\]{ + colA & colB & colC \\ + 11 & 12 & 13 \\ + 21 & 22 & 23 \\ +} +\end{codeexample} + + Now, we change the number format of one of its cells, and at the same time we change the formatting of another (single) cell: +\begin{codeexample}[] +\pgfplotstabletypeset[ + every row 1 column 2/.style={/pgf/number format/sci}, + every row 0 column 0/.style={postproc cell content/.style={@cell content=\textbf{##1}}}, + col sep=&,row sep=\\]{ + colA & colB & colC \\ + 11 & 12 & 13 \\ + 21 & 22 & 23 \\ +} +\end{codeexample} + Note that this style is (only) applied to input row/column values. +\end{stylekey} + +\begin{stylekey}{/pgfplots/table/every row no \meta{rowindex} column no \meta{colindex}} + This is actually the same -- |row no| and |row| are both supported, the same for |column| and |column no|. +\end{stylekey} + +\begin{stylekey}{/pgfplots/table/every row \meta{rowindex} column \meta{colname}} + A similar style as above, but it allows column \emph{names} rather than column indices. Column names need to be provided in the same way as for other column--specific styles (including the extra curly braces in case \meta{colname} contains special characters). + + Our example from above can thus become: +\begin{codeexample}[] +\pgfplotstabletypeset[ + every row 1 column colB/.style={string replace*={2}{4}}, + every row 0 column colA/.style={preproc/expr={##1*8}}, + col sep=&,row sep=\\]{ + colA & colB & colC \\ + 11 & 12 & 13 \\ + 21 & 22 & 23 \\ +} +\end{codeexample} + The example employs the |string replace*| preprocessor style and the |preproc/expr| style. All preprocessor or postprocessor styles can be used. + + Please refer to Section~\ref{sec:data:processing} for predefined choices. +\end{stylekey} + \subsection{Customizing and Getting the Tabular Code} The following keys allow changes of alignment (|begin table|) and |font| and they allow to write the generated code to |outfile|s (see also |write to macro|). Furthermore, the generated code can be fine--tuned to provide other sorts of table output, beyond \LaTeX. \begin{stylekey}{/pgfplots/table/every table=\marg{file name}} @@ -876,7 +1099,7 @@ The following keys allow changes of alignment (|begin table|) and |font| and the prepends the empty string |{}| and appends the prefix |[t]|. Thus, `|\begin{tabular}|' becomes `|\begin{tabular}[t]|'. \end{key} \begin{key}{/pgfplots/table/end table=\marg{code} (initially \textbackslash end\{tabular\})} - Contains \marg{code} which is generated as table end. + Contains \meta{code} which is generated as table end. \end{key} \begin{codekey}{/pgfplots/table/typeset cell} @@ -897,7 +1120,7 @@ The following keys allow changes of alignment (|begin table|) and |font| and the \begin{key}{/pgfplots/table/outfile=\marg{file name} (initially empty)} \label{page:outfile} - Writes the generated tabular code into \marg{file name}. It can then be used with |\input|\marg{file name}, \PGFPlotstable\ is no longer required since it contains a completely normal |tabular|. + Writes the generated tabular code into \meta{file name}. It can then be used with |\input|\marg{file name}, \PGFPlotstable\ is no longer required since it contains a completely normal |tabular|. \pgfplotstableset{begin table=\begin{tabular}} \begin{codeexample}[] \pgfplotstabletypeset[ @@ -926,17 +1149,17 @@ The command |\pgfutilensuremath| checks whether math mode is active and switches \noindent which will generate an |outfile| name for every table. \end{key} \begin{key}{/pgfplots/table/force remake=\marg{boolean} (initially false)} - If enabled, the effect of |include outfiles| is disabled. As all key settings only last until the next brace (or |\end|\meta{}), this key can be used to re-generate some output files while others are still included. + If enabled, the effect of |include outfiles| is disabled. As all key settings only last until the next brace (or |\end|\meta{}), this key can be used to regenerate some output files while others are still included. \end{key} \begin{key}{/pgfplots/table/write to macro=\marg{\textbackslash macroname}} - If the value of |write to macro| is not empty, the completely generated (tabular) code will be written into the macro \marg{\textbackslash macroname}. + If the value of |write to macro| is not empty, the completely generated (tabular) code will be written into the macro \meta{\textbackslash macroname}. See the |typeset=false| key in case you need \emph{only} the resulting macro. \end{key} \begin{key}{/pgfplots/table/skip coltypes=\mchoice{true,false} (initially false)} - Allows to skip the \marg{coltypes} in |\begin{tabular}|\marg{coltypes}. This allows simplifications for other table types which don't have \LaTeX's table format. + Allows to skip the \meta{coltypes} in |\begin{tabular}|\marg{coltypes}. This allows simplifications for other table types which don't have \LaTeX's table format. \end{key} \begin{key}{/pgfplots/table/typeset=\mchoice{true,false} (initially true)} @@ -944,14 +1167,14 @@ The command |\pgfutilensuremath| checks whether math mode is active and switches \end{key} \begin{key}{/pgfplots/table/debug=\marg{boolean} (initially false)} - If enabled, will write every final tabular code to your log file. + If enabled, it will write every final tabular code to your log file. \end{key} \begin{key}{/pgfplots/table/TeX comment=\marg{comment sign} (initially \%)} - The comment sign which is inserted into outfiles to suppress trailing white spaces. + The comment sign which is inserted into outfiles to suppress trailing white space. \end{key} -\noindent As last example, we use \PGFPlotstable\ to write an |.html| file (including number formatting and rounding!): +\noindent As a last example, we use \PGFPlotstable\ to write an |.html| file (including number formatting and rounding!): % \usepackage{listings} \begin{codeexample}[width=8cm] \pgfplotstabletypeset[ @@ -972,10 +1195,10 @@ The command |\pgfutilensuremath| checks whether math mode is active and switches \end{codeexample} \subsection{Defining Column Types for \texttt{tabular}} -Besides input of text files, it is sometimes desireable to define column types for existing \texttt{tabular} environments. +Besides input of text files, it is sometimes desirable to define column types for existing \texttt{tabular} environments. \begin{command}{\newcolumntype\marg{letter}\oarg{number of arguments}$>$\marg{before column}\meta{column type}$<$\marg{after column}} -The command |\newcolumntype| is part of the |array| package and it defines a new column type \marg{letter} for use in \LaTeX\ tabular environments. +The command |\newcolumntype| is part of the |array| package and it defines a new column type \meta{letter} for use in \LaTeX\ tabular environments. \begin{codeexample}[code only] \usepackage{array} \end{codeexample} @@ -988,7 +1211,7 @@ c & d \\ \end{tabular} \end{codeexample} -Now, the environment |pgfplotstablecoltype| can be used in \marg{before column} and \marg{after column} to define numerical columns: +Now, the environment |pgfplotstablecoltype| can be used in \meta{before column} and \meta{after column} to define numerical columns: % \usepackage{array} \begin{codeexample}[] % requires \usepackage{array} @@ -1033,15 +1256,17 @@ Now, the environment |pgfplotstablecoltype| can be used in \marg{before column} \subsection{Number Formatting Options} \label{sec:number:printing}% -The following extract of \cite{tikz} explains how to configure number formats. The common option prefix |/pgf/number format| can be omitted; it will be recognised automatically. +The following extract of \cite{tikz} explains how to configure number formats. The common option prefix |/pgf/number format| can be omitted; it will be recognized automatically. + +All these number formatting options can also be applied to \PGFPlots. \begin{command}{\pgfmathprintnumber\marg{x}} -Generates pretty-printed output for the (real) number \marg{x}. The input number \marg{x} is parsed using |\pgfmathfloatparsenumber| which allows arbitrary precision. +Generates pretty-printed output for the (real) number \meta{x}. The input number \meta{x} is parsed using |\pgfmathfloatparsenumber| which allows arbitrary precision. Numbers are typeset in math mode using the current set of number printing options, see below. Optional arguments can also be provided using |\pgfmathprintnumber[|\meta{options}|]|\marg{x}. \end{command} \begin{command}{\pgfmathprintnumberto\marg{x}\marg{\textbackslash macro}} - Returns the resulting number into \marg{\textbackslash macro} instead of typesetting it directly. + Returns the resulting number into \meta{\textbackslash macro} instead of typesetting it directly. \end{command} \begin{key}{/pgf/number format/fixed} @@ -1056,7 +1281,7 @@ Configures |\pgfmathprintnumber| to round the number to a fixed number of digits \pgfmathprintnumber{123456.12345} \end{codeexample} -See section~\ref{sec:number:styles} for how to change the appearance. +See Section~\ref{sec:number:styles} for how to change the appearance. \end{key} \begin{key}{/pgf/number format/fixed zerofill=\marg{boolean} (default true)} @@ -1070,7 +1295,7 @@ Enables or disables zero filling for any number drawn in fixed point format. \pgfmathprintnumber{24415.98123}\hspace{1em} \pgfmathprintnumber{123456.12345} \end{codeexample} -This key affects numbers drawn with |fixed| or |std| styles (the latter only if no scientific format is choosen). +This key affects numbers drawn with |fixed| or |std| styles (the latter only if no scientific format is chosen). \begin{codeexample}[] \pgfkeys{/pgf/number format/.cd,std,fixed zerofill,precision=2} \pgfmathprintnumber{4.568}\hspace{1em} @@ -1079,11 +1304,11 @@ This key affects numbers drawn with |fixed| or |std| styles (the latter only if \pgfmathprintnumber{123456.12345} \end{codeexample} -See section~\ref{sec:number:styles} for how to change the appearance. +See Section~\ref{sec:number:styles} for how to change the appearance. \end{key} \begin{key}{/pgf/number format/sci} -Configures |\pgfmathprintnumber| to display numbers in scientific format, that means sign, mantisse and exponent (basis~$10$). The mantisse is rounded to the desired |precision| (or |sci precision|, see below). +Configures |\pgfmathprintnumber| to display numbers in scientific format, that means sign, mantissa and exponent (base~$10$). The mantissa is rounded to the desired |precision| (or |sci precision|, see below). \begin{codeexample}[] \pgfkeys{/pgf/number format/.cd,sci,precision=2} @@ -1094,7 +1319,7 @@ Configures |\pgfmathprintnumber| to display numbers in scientific format, that m \pgfmathprintnumber{123456.12345} \end{codeexample} -See section~\ref{sec:number:styles} for how to change the exponential display style. +See Section~\ref{sec:number:styles} for how to change the exponential display style. \end{key} \begin{key}{/pgf/number format/sci zerofill=\marg{boolean} (default true)} @@ -1110,11 +1335,11 @@ Enables or disables zero filling for any number drawn in scientific format. \end{codeexample} As with |fixed zerofill|, this option does only affect numbers drawn in |sci| format (or |std| if the scientific format is chosen). -See section~\ref{sec:number:styles} for how to change the exponential display style. +See Section~\ref{sec:number:styles} for how to change the exponential display style. \end{key} \begin{stylekey}{/pgf/number format/zerofill=\marg{boolean} (default true)} - Sets both, |fixed zerofill| and |sci zerofill| at once. + Sets both |fixed zerofill| and |sci zerofill| at once. \end{stylekey} \begin{keylist}{/pgf/number format/std,% @@ -1134,6 +1359,52 @@ The parameters can be customized using the optional integer argument(s): if $\te \end{keylist} +\begin{keylist}{/pgf/number format/relative=\meta{exponent base 10}} + Configures |\pgfmathprintnumber| to format numbers relative to an order of magnitude, $10^r$, where $r$ is an integer number. + + The motivation is to provide a unified format for a \emph{sequence} of numbers: +\begin{codeexample}[] +\pgfkeys{/pgf/number format/relative={1}} +\pgfmathprintnumber{6.42e-16}\hspace{1em} +\pgfmathprintnumber{1.2}\hspace{1em} +\pgfmathprintnumber{6}\hspace{1em} +\pgfmathprintnumber{20.6}\hspace{1em} +\pgfmathprintnumber{87} +\end{codeexample} + \noindent With any other style, the |6.42e-16| would have been formatted as an isolated number. Here, it is rounded to |0| because when viewed relative to $10^3$, it has no significant digits. + +\begin{codeexample}[] +\pgfkeys{/pgf/number format/relative={2}} +\pgfmathprintnumber{123.345}\hspace{1em} +\pgfmathprintnumber{0.0012}\hspace{1em} +\pgfmathprintnumber{0.0014}\hspace{1em} +\end{codeexample} + Here, it applies the initial |precision=2| to |123.345| -- relative to $100$. Two significant digits of |123.345| relative to $100$ are |123|. Similarly, the other two numbers are |0| compared to $100$ using the given |precision|. + + +\begin{codeexample}[] +\pgfkeys{/pgf/number format/relative={-3}} +\pgfmathprintnumber{123.345}\hspace{1em} +\pgfmathprintnumber{0.0012}\hspace{1em} +\pgfmathprintnumber{0.0014}\hspace{1em} +\end{codeexample} + + + When applied to a number $x = \pm m \cdot 10^e$, the |relative=|$r$ method actually rounds $x / 10^r$ to the desired precision. More precisely: if $e-r>0$, it only rounds the mantissa of $x/10^r$ to the desired precision, otherwise it rounds the complete number to the desired precision. Afterwards, it disables rounding, multiplies the intermediate result by $10^r$, and evaluates the style |every relative| to actually format the result. +\end{keylist} +\begin{stylekey}{/pgf/number format/every relative} + A style which configures how the |relative| method finally displays its results. + + The initial configuration is +\begin{codeexample}[code only] +\pgfkeys{/pgf/number format/every relative/.style=std} +\end{codeexample} + + Note that rounding is turned off when the resulting style is being evaluated (since |relative| already rounded the number). + + Although supported, I discourage from using |fixed zerofill| or |sci zerofill| in this context -- it may lead to a suggestion of higher precision than is actually used (because |fixed zerofill| might simply add |.00| although there was a different information before |relative| rounded the result). +\end{stylekey} + \begin{key}{/pgf/number format/int detect} Configures |\pgfmathprintnumber| to detect integers automatically. If the input number is an integer, no period is displayed at all. If not, the scientific format is chosen. @@ -1219,7 +1490,7 @@ Displays numbers as fractionals. \end{codeexample} \end{key} \begin{key}{/pgf/number format/frac shift=\marg{integer} (initially 4)} - In case you experience problems because of stability problems, try experimenting with a different |frac shift|. + In case you experience stability problems, try experimenting with a different |frac shift|. Higher shift values $k$ yield higher sensitivity to inaccurate data or inaccurate arithmetics. Technically, the following happens. If $r < 1$ is the fractional part of the mantissa, then a scale $i = 1/r \cdot 10^k$ is computed where $k$ is the shift; fractional parts of $i$ are neglected. The value $1/r$ is computed internally, its error is amplified. @@ -1229,7 +1500,7 @@ Displays numbers as fractionals. \end{key} \begin{key}{/pgf/number format/precision=\marg{number}} -Sets the desired rounding precision for any display operation. For scientific format, this affects the mantisse. +Sets the desired rounding precision for any display operation. For scientific format, this affects the mantissa. \end{key} \begin{key}{/pgf/number format/sci precision=\meta{number or empty} (initially empty)} Sets the desired rounding precision only for |sci| styles. @@ -1243,7 +1514,7 @@ Sets the desired rounding precision for any display operation. For scientific fo You can change the way how numbers are displayed. For example, if you use the `\texttt{fixed}' style, the input number is rounded to the desired precision and the current fixed point display style is used to typeset the number. The same is applied to any other format: first, rounding routines are used to get the correct digits, afterwards a display style generates proper \TeX-code. \begin{key}{/pgf/number format/set decimal separator=\marg{text}} -Assigns \marg{text} as decimal separator for any fixed point numbers (including the mantisse in sci format). +Assigns \meta{text} as decimal separator for any fixed point number (including the mantissa in sci format). \end{key} \begin{key}{/pgf/number format/dec sep=\marg{text}} Just another name for |set decimal separator|. @@ -1251,7 +1522,7 @@ Assigns \marg{text} as decimal separator for any fixed point numbers (including \begin{key}{/pgf/number format/set thousands separator=\marg{text}} -Assigns \marg{text} as thousands separator for any fixed point numbers (including the mantisse in sci format). +Assigns \meta{text} as thousands separator for any fixed point number (including the mantissa in sci format). \begin{codeexample}[] \pgfkeys{/pgf/number format/.cd, @@ -1300,6 +1571,31 @@ The last example employs commas and disables the default comma-spacing. Just another name for |set thousands separator|. \end{key} +\begin{key}{/pgf/number format/1000 sep in fractionals=\marg{boolean} (initially false)} + Configures whether the fractional part should also be grouped into groups of three digits. + + The value |true| will activate the |1000 sep| for both integer and fractional parts. The value |false| + will activate |1000 sep| only for the integer part. +\begin{codeexample}[] +\pgfkeys{/pgf/number format/.cd, + fixed, + precision=999, + set thousands separator={\,}, + 1000 sep in fractionals, + } +\pgfmathprintnumber{1234.1234567} +\end{codeexample} +\begin{codeexample}[] +\pgfkeys{/pgf/number format/.cd, + fixed,fixed zerofill, + precision=9, + set thousands separator={\,}, + 1000 sep in fractionals, + } +\pgfmathprintnumber{1234.1234567} +\end{codeexample} +\end{key} + \begin{key}{/pgf/number format/min exponent for 1000 sep=\marg{number} (initially 0)} Defines the smalles exponent in scientific notation which is required to draw thousand separators. The exponent is the number of digits minus one, so $\meta{number}=4$ will use thousand separators starting with $1e4 = 10000$. \begin{codeexample}[] @@ -1391,7 +1687,7 @@ A predefined style which installs commas `\texttt{,}' as decimal separators and \end{key} \begin{stylekey}{/pgf/number format/print sign=\marg{boolean}} - A style which is simply an alias for |showpos=|\marg{boolean}. + A style which is simply an alias for |showpos=|\meta{boolean}. \end{stylekey} \begin{key}{/pgf/number format/sci 10e} @@ -1426,7 +1722,7 @@ The same with an uppercase `\texttt{E}'. \end{key} \begin{key}{/pgf/number format/sci subscript} -Typesets the exponent as subscript for any number displayed in scientific format. This style requires very few space. +Typesets the exponent as subscript for any number displayed in scientific format. This style requires very little space. \begin{codeexample}[] \pgfkeys{/pgf/number format/.cd,sci,sci subscript} @@ -1435,7 +1731,7 @@ Typesets the exponent as subscript for any number displayed in scientific format \end{key} \begin{key}{/pgf/number format/sci superscript} -Typesets the exponent as superscript for any number displayed in scientific format. This style requires very few space. +Typesets the exponent as superscript for any number displayed in scientific format. This style requires very little space. \begin{codeexample}[] \pgfkeys{/pgf/number format/.cd,sci,sci superscript} @@ -1444,10 +1740,10 @@ Typesets the exponent as superscript for any number displayed in scientific form \end{key} \begin{key}{/pgf/number format/sci generic=\marg{keys}} -Allows to define an own number style for the scientific format. Here, \meta{keys} can be one of the following choices (omit the long key prefix): +Allows to define a custom number style for the scientific format. Here, \meta{keys} can be one of the following choices (omit the long key prefix): -\begin{key}{/pgf/number format/sci generic/mantisse sep=\marg{text} (initially empty)} - Provides the separator between a mantisse and the exponent. It might be |\cdot|, for example, +\begin{key}{/pgf/number format/sci generic/mantissa sep=\marg{text} (initially empty)} + Provides the separator between the mantissa and the exponent. It might be |\cdot|, for example, \end{key} \begin{key}{/pgf/number format/sci generic/exponent=\marg{text} (initially empty)} Provides text to format the exponent. The actual exponent is available as argument |#1| (see below). @@ -1457,23 +1753,23 @@ Allows to define an own number style for the scientific format. Here, \meta{keys \pgfkeys{ /pgf/number format/.cd, sci, - sci generic={mantisse sep=\times,exponent={10^{#1}}}} + sci generic={mantissa sep=\times,exponent={10^{#1}}}} \pgfmathprintnumber{12.345}; \pgfmathprintnumber{0.00012345} \end{codeexample} - The \meta{keys} can depend on three parameters, namely on |#1| which is the exponent, |#2| containing the flags entity of the floating point number and |#3| is the (unprocessed and unformatted) mantisse. + The \meta{keys} can depend on three parameters, namely on |#1| which is the exponent, |#2| containing the flags entity of the floating point number and |#3| is the (unprocessed and unformatted) mantissa. - Note that |sci generic| is \emph{not} suitable to modify the appearance of fixed point numbers, nor can it be used to format the mantisse (which is typeset like fixed point numbers). Use |dec sep|, |1000 sep| and |print sign| to customize the mantisse. + Note that |sci generic| is \emph{not} suitable to modify the appearance of fixed point numbers, nor can it be used to format the mantissa (which is typeset like fixed point numbers). Use |dec sep|, |1000 sep| and |print sign| to customize the mantissa. \end{key} \begin{key}{/pgf/number format/@dec sep mark=\marg{text}} - Will be placed right before the place where a decimal separator belongs to. However, \marg{text} will be inserted even if there is no decimal separator. It is intented as place-holder for auxiliary routines to find alignment positions. + Will be placed right before the place where a decimal separator belongs to. However, \meta{text} will be inserted even if there is no decimal separator. It is intended as place-holder for auxiliary routines to find alignment positions. This key should never be used to change the decimal separator! Use |dec sep| instead. \end{key} \begin{key}{/pgf/number format/@sci exponent mark=\marg{text}} - Will be placed right before exponents in scientific notation. It is intented as place-holder for auxiliary routines to find alignment positions. + Will be placed right before exponents in scientific notation. It is intended as place-holder for auxiliary routines to find alignment positions. This key should never be used to change the exponent! \end{key} @@ -1499,13 +1795,14 @@ Allows to define an own number style for the scientific format. Here, \meta{keys \end{codeexample} The style resets |1000 sep|, |dec sep|, |print sign|, |skip 0.| and sets |assume math mode|. Furthermore, it installs a |sci generic| format for verbatim output of scientific numbers. - However, it will still respect |precision|, |fixed zerofill|, |sci zerofill| and the overall styles |fixed|, |sci|, |int detect| (and their variants). It might be useful if you intent to write output files. + However, it will still respect |precision|, |fixed zerofill|, |sci zerofill| and the overall styles |fixed|, |sci|, |int detect| (and their variants). It might be useful if you intend to write output files. \end{stylekey} \section{From Input Data To Output Tables: Data Processing} +\label{sec:data:processing} The conversion from an unprocessed input table to a final typesetted |tabular| code uses four stages for every cell, \begin{enumerate} \item Loading the table, @@ -1513,10 +1810,10 @@ The conversion from an unprocessed input table to a final typesetted |tabular| c \item Typesetting, \item Postprocessing. \end{enumerate} -The main idea is to select one typesetting algorithm (for example ``format my numbers with the configured number style''). This algorithm usually doesn't need to be changed. Fine tuning can then be done using zero, one or more preprocessors and postprocessors. Preprocessing can mean to select only particular rows or to apply some sort of operation before the typesetting algorithm sees the content. Postprocessing means to apply fine-tuning to the resulting \TeX\ output -- for example to deal with empty cells or to insert unit suffixes or modify fonts for single cells. +The main idea is to select one typesetting algorithm (for example ``format my numbers with the configured number style''). This algorithm usually doesn't need to be changed. Fine-tuning can then be done using zero, one or more preprocessors and postprocessors. Preprocessing can mean to select only particular rows or to apply some sort of operation before the typesetting algorithm sees the content. Postprocessing means to apply fine-tuning to the resulting \TeX\ output -- for example to deal with empty cells or to insert unit suffixes or modify fonts for single cells. \subsection{Loading the table} -This first step to typeset a table involves the obvious input operations. Furthermore, the ``new column creation'' operations explained in section~\ref{pgfplotstable:createcol} are processed at this time. The table data is read (or acquired) as already explained earlier in this manual. Then, if columns are missing, column alias and |create on use| specifications will be processed as part of the loading procedure. See section~\ref{pgfplotstable:createcol} for details about column creation. +This first step to typeset a table involves the obvious input operations. Furthermore, the ``new column creation'' operations explained in Section~\ref{pgfplotstable:createcol} are processed at this time. The table data is read (or acquired) as already explained earlier in this manual. Then, if columns are missing, column alias and |create on use| specifications will be processed as part of the loading procedure. See Section~\ref{pgfplotstable:createcol} for details about column creation. \subsection{Typesetting Cell Content} Typesetting cells means to take their value and ``do something''. In many cases, this involves number formatting routines. For example, the ``raw'' input data |12.56| might become |1.26| |\cdot| |10^1|. The result of this stage is no longer useful for content-based computations. The typesetting step follows the preprocessing step. @@ -1525,6 +1822,10 @@ Typesetting cells means to take their value and ``do something''. In many cases, Allows to redefine the algorithm which assigns cell contents. The argument |#1| is the (unformatted) contents of the input table. The resulting output needs to be written to |/pgfplots/table/@cell content|. +\pgfplotstableset{ + %debug=true, + begin table=\begin{tabular},% eliminate the '[b]' from the preamble here +} % \usepackage{booktabs} % \usepackage{multirow} \begin{codeexample}[] @@ -1547,6 +1848,7 @@ Typesetting cells means to take their value and ``do something''. In many cases, every head row/.style={before row=\toprule,after row=\midrule}, every last row/.style={after row=\bottomrule}, row sep=\\,col sep=&, + outfile=pgfplotstable.multirow.out,% write it to file ]{% here: inline data in tabular format: Z & a & b \\ data & 1 & 2 \\ @@ -1554,6 +1856,8 @@ Typesetting cells means to take their value and ``do something''. In many cases, & 5 & 6 \\ & 7 & 8 \\ } +% ... and show the generated file: +\lstinputlisting[basicstyle=\footnotesize\ttfamily]{pgfplotstable.multirow.out} \end{codeexample} \index{multirow}% \noindent The example above uses |\usepackage{multirow}| to format column |Z|. More precisely, it uses |\multirow{4}{*}{data}| for row \#0 of column |Z| and the empty string for any other row in column |Z|. @@ -1566,7 +1870,7 @@ Typesetting cells means to take their value and ``do something''. In many cases, \end{codekey} \begin{stylekey}{/pgfplots/table/numeric type} - A style which (re)-defines |assign cell content| back to its original value which assumes numerical data. + A style which (re)defines |assign cell content| back to its original value which assumes numerical data. It invokes |\pgfmathprintnumberto| and writes the result into |@cell content|. \end{stylekey} @@ -1586,7 +1890,7 @@ Typesetting cells means to take their value and ``do something''. In many cases, \end{stylekey} \begin{stylekey}{/pgfplots/table/date type=\marg{date format}}% (initially \year-\month-\day)} - A style which expects ISO dates of the form |YYYY-MM-DD| in each cell and produces pretty-printed strings on output. The output format is given as \marg{date format}. Inside of \marg{date format}, several macros which are explained below can be used. + A style which expects ISO dates of the form |YYYY-MM-DD| in each cell and produces pretty-printed strings on output. The output format is given as \meta{date format}. Inside of \meta{date format}, several macros which are explained below can be used. % \usepackage{pgfcalendar} \begin{codeexample}[] % Requires @@ -1619,41 +1923,41 @@ Typesetting cells means to take their value and ``do something''. In many cases, \end{codeexample} \begin{command}{\year} - Inside of \marg{date format}, this macro expands to the year as number (like |2008|). + Inside of \meta{date format}, this macro expands to the year as a number (like |2008|). \end{command} \begin{command}{\month} - Inside of \marg{date format}, this macro expands to the month as number, starting with~$1$ (like |1|). + Inside of \meta{date format}, this macro expands to the month as a number, starting with~$1$ (like |1|). \end{command} \begin{command}{\monthname} - Inside of \marg{date format}, this macro expands to the month's name as set in the current language (like |January|). + Inside of \meta{date format}, this macro expands to the month's name as set in the current language (like |January|). See below for how to change the language. \end{command} \begin{command}{\monthshortname} - Inside of \marg{date format}, this macro expands to the month's short name as set in the current language (like |Jan|). + Inside of \meta{date format}, this macro expands to the month's short name as set in the current language (like |Jan|). See below for how to change the language. \end{command} \begin{command}{\day} - Inside of \marg{date format}, this macro expands to the day as number (like |31|). + Inside of \meta{date format}, this macro expands to the day as number (like |31|). \end{command} \begin{command}{\weekday} - Inside of \marg{date format}, this macro expands to the weekday number ($0$ for Monday, $1$ for Tuesday etc.). + Inside of \meta{date format}, this macro expands to the weekday number ($0$ for Monday, $1$ for Tuesday etc.). \end{command} \begin{command}{\weekdayname} - Inside of \marg{date format}, this macro expands to the weekday's name in the current language (like |Wednesday|). + Inside of \meta{date format}, this macro expands to the weekday's name in the current language (like |Wednesday|). See below for how to change the language. \end{command} \begin{command}{\weekdayshortname} - Inside of \marg{date format}, this macro expands to the weekday's short name in the current language (like |Wed|). + Inside of \meta{date format}, this macro expands to the weekday's short name in the current language (like |Wed|). See below for how to change the language. \end{command} \subsubsection*{Changing the language for dates} -The date feature is implemented using the \PGF\ calendar module. This module employs the package |translator| (if it is loaded). I don't have more detail yet, sorry. Please refer to \cite{tikz} for more details. +The date feature is implemented using the \PGF\ calendar module. This module employs the package |translator| (if it is loaded). I don't have more details yet, sorry. Please refer to \cite{tikz} for more details. \end{stylekey} \subsection{Preprocessing Cell Content} \label{sec:pgfplotstable:preproc} -The preprocessing step allows to change cell contents \emph{before} any typesetting routine (like number formatting) has been applied. Thus, if tables contain numerical data, it is possible to apply math operations at this stage. Furthermore, cells can be erased depending on their numerical value. The preprocess step follows the data acquisition step (``loading step''). This means in particular that you can create (or copy) columns and apply operations on them. +The preprocessing step allows to change cell contents \emph{before} any typesetting routine (like number formatting) has been applied. Thus, if tables contain numerical data, it is possible to apply math operations at this stage. Furthermore, cells can be erased depending on their numerical value. The preprocessing step follows after the data acquisition step (``loading step''). This means in particular that you can create (or copy) columns and apply operations on them. \begin{codekey}{/pgfplots/table/preproc cell content} Allows to \emph{modify} the contents of cells \emph{before} |assign cell content| is called. @@ -1667,8 +1971,8 @@ The preprocessing step allows to change cell contents \emph{before} any typesett In case you don't want (or need) stackable preprocessors, you can also use `|#1|' to get the raw input datum as it is found in the file. Furthermore, the key |@unprocessed cell content| will also contain the raw input datum. \end{codekey} -\begin{stylekey}{/pgfplots/table/string replace=\marg{pattern}\marg{replacement}} - Appends code to the current |preproc cell content| value which replaces every occurence of \marg{pattern} with \marg{replacement}. No expansion is performed during this step; \marg{pattern} must match literally. +\begin{stylekey}{/pgfplots/table/string replace=\marg{cell match}\marg{cell replacement}} + Appends code to the current |preproc cell content| value which replaces any cell with exact match \meta{cell match} by \meta{cell replacement}. No expansion is performed during this step; \meta{cell match} must match literally. \begin{codeexample}[] \pgfplotstabletypeset[columns={level,dof}] {pgfplotstable.example1.dat} @@ -1676,10 +1980,25 @@ The preprocessing step allows to change cell contents \emph{before} any typesett \pgfplotstabletypeset[ columns={level,dof}, - columns/level/.style={string replace={A}{B}}, % does nothing because there is no 'A' - columns/dof/.style={string replace={256}{-42}}] % replace '256' with '-42' + columns/level/.style={string replace={A}{B}}, % does nothing because there is no cell 'A' + columns/dof/.style={string replace={256}{-42}}] % replace cell '256' with '-42' {pgfplotstable.example1.dat} \end{codeexample} + + See the |string replace*| method for sub--string replacement. +\end{stylekey} + +\begin{stylekey}{/pgfplots/table/string replace*=\marg{pattern}\marg{replacement}} + Appends code to the current |preproc cell content| value which replaces every occurence of \meta{pattern} with \meta{replacement}. No expansion is performed during this step; \meta{pattern} must match literally. +\begin{codeexample}[] +\pgfplotstabletypeset[ + string replace*={2}{6}, + col sep=&,row sep=\\]{ + colA & colB & colC \\ + 11 & 12 & 13 \\ + 21 & 22 & 23 \\ +} +\end{codeexample} \end{stylekey} \begin{stylekey}{/pgfplots/table/clear infinite} @@ -1687,9 +2006,9 @@ The preprocessing step allows to change cell contents \emph{before} any typesett \end{stylekey} \begin{stylekey}{/pgfplots/table/preproc/expr=\marg{math expression}} - Appends code to the current |preproc cell content| value which evaluates \marg{math expression} for every cell. Arithmetics are carried out in floating point. + Appends code to the current |preproc cell content| value which evaluates \meta{math expression} for every cell. Arithmetics are carried out in floating point. - Inside of \marg{math expression}, use one of the following expressions to get the current cell's value. + Inside of \meta{math expression}, use one of the following expressions to get the current cell's value. \begin{itemize} \item The string `|##1|' expands to the cell's content as it has been found in the input file, ignoring preceeding preprocessors. @@ -1720,16 +2039,16 @@ The preprocessing step allows to change cell contents \emph{before} any typesett Note that there is also an |create col/expr| which is more powerful than |preproc/expr|. \end{stylekey} -\begin{stylekey}{/pgfplots/table/multiply with=\marg{real number}} - Appends code to the current |preproc cell content| value which multiplies every cell with \marg{real number}. Arithmetics are carried out in floating point. +\begin{stylekey}{/pgfplots/table/multiply by=\marg{real number}} + Appends code to the current |preproc cell content| value which multiplies every cell by \meta{real number}. Arithmetics are carried out in floating point. \end{stylekey} \begin{stylekey}{/pgfplots/table/divide by=\marg{real number}} - Appends code to the current |preproc cell content| value which divides every cell by \marg{real number}. Arithmetics are carried out in floating point. + Appends code to the current |preproc cell content| value which divides every cell by \meta{real number}. Arithmetics are carried out in floating point. \end{stylekey} \begin{stylekey}{/pgfplots/table/sqrt} - Appends code to the current |preproc cell content| value which applies $\sqrt{x}$ to every non-empty cell. Arithmetics are carried out in floating point. + Appends code to the current |preproc cell content| value which takes the square root $\sqrt{\cdot}$ of every non-empty cell. Arithmetics are carried out in floating point. The following example copies the column |error1| and applies |sqrt| to the copy. \begin{codeexample}[] @@ -1742,11 +2061,11 @@ The preprocessing step allows to change cell contents \emph{before} any typesett } \pgfplotstabletypeset{pgfplotstable.example1.dat} \end{codeexample} - Please take a look at section~\ref{pgfplotstable:createcol} for details about |create on use|. + Please take a look at Section~\ref{pgfplotstable:createcol} for details about |create on use|. \end{stylekey} \begin{stylekey}{/pgfplots/table/multiply -1} - Appends code to current |preproc cell content| value which multiplies every cell with $-1$. This style does the same job as |multiply with=-1|, it is just faster because only the sign changes. + Appends code to current |preproc cell content| value which multiplies every cell by $-1$. This style does the same job as |multiply by=-1|, it is just faster because only the sign changes. \begin{codeexample}[] \pgfplotstableset{ columns={dof,error2,slopes2}, @@ -1766,7 +2085,7 @@ The preprocessing step allows to change cell contents \emph{before} any typesett A boolean predicate which allows to select particular rows of the input table, based on the current row's index. The argument |#1| contains the current row's index (starting with~$0$, not counting comment lines or column names). The return value is assigned to the \TeX-if \declareandlabel{\ifpgfplotstableuserow}. If the boolean is not changed, the return value is true. -\begin{codeexample}[narrow] +\begin{codeexample}[newline=] % requires \usepackage{booktabs} \pgfplotstabletypeset[ every head row/.style={ @@ -1782,7 +2101,7 @@ The preprocessing step allows to change cell contents \emph{before} any typesett ] {pgfplotstable.example1.dat} \end{codeexample} - Please note that |row predicate| is applied \emph{before} any other option which affects row (or column) appearance. It is evaluated before |assign cell content|. One of the consequences ist that even/odd row styles refer to those rows for which the predicate returns |true|. In fact, you can use |row predicate| to truncate the complete table before it has actually been processed. + Please note that |row predicate| is applied \emph{before} any other option which affects row (or column) appearance. It is evaluated before |assign cell content|. One of the consequences is that even/odd row styles refer to those rows for which the predicate returns |true|. In fact, you can use |row predicate| to truncate the complete table before it has actually been processed. During |row predicate|, the macro |\pgfplotstablerows| contains the total number of \emph{input} rows. @@ -1790,7 +2109,7 @@ The preprocessing step allows to change cell contents \emph{before} any typesett \end{codekey} \begin{stylekey}{/pgfplots/table/skip rows between index=\marg{begin}\marg{end}} - A style which appends an |row predicate| which discards selected rows. The selection is done by index where indexing starts with~$0$. Every row with index $\meta{begin} \le i < \meta{end}$ will be skipped. + A style which appends a |row predicate| which discards selected rows. The selection is done by index where indexing starts with~$0$. Every row with index $\meta{begin} \le i < \meta{end}$ will be skipped. \begin{codeexample}[narrow] % requires \usepackage{booktabs} \pgfplotstabletypeset[ @@ -1806,7 +2125,7 @@ The preprocessing step allows to change cell contents \emph{before} any typesett \end{stylekey} \begin{stylekey}{/pgfplots/table/select equal part entry of=\marg{part no}\marg{part count}} - A style which overwrites |row predicate| with a subset selection predicate. The idea is to split the current column into \marg{part count} equally sized parts and select only \marg{part no}. + A style which overwrites |row predicate| with a subset selection predicate. The idea is to split the current column into \meta{part count} equally sized parts and select only \meta{part no}. This can be used to simulate multicolumn tables. \begin{codeexample}[] @@ -1828,22 +2147,22 @@ The preprocessing step allows to change cell contents \emph{before} any typesett \end{codeexample} The example above shows the original file as-is on the left side. The right side shows columns A,B,A,B~-- but only half of the elements are shown, selected by indices \#0 or \#1 of \#2. The parts are equally large, up to a remainder. - If the available number of rows is not dividable by \marg{part count}, the remaining entries are distributed equally among the first parts. + If the available number of rows is not divisible by \meta{part count}, the remaining entries are distributed equally among the first parts. \end{stylekey} \begin{stylekey}{/pgfplots/table/unique=\marg{column name}} - A style which appends a |row predicate| which suppresses successive occurances of the same elements in \marg{column name}. - For example, if \marg{column name} contains |1,1,3,5,5,6,5,0|, the application of |unique| results in |1,3,5,6,5,0| (the last |5| is kept -- it is not directly preceeded by another |5|). + A style which appends a |row predicate| which suppresses successive occurances of the same elements in \meta{column name}. + For example, if \meta{column name} contains |1,1,3,5,5,6,5,0|, the application of |unique| results in |1,3,5,6,5,0| (the last |5| is kept -- it is not directly preceded by another |5|). - The algorithm uses string token comparison to find multiple occurances\footnote{To be more precise, the comparison is done using \texttt{\textbackslash ifx}, i.e. cell contents won't be expanded. Only the tokens as they are seen in the input table will be used.}. + The algorithm uses string token comparison to find multiple occurance\footnote{To be more precise, the comparison is done using \texttt{\textbackslash ifx}, i.e. cell contents won't be expanded. Only the tokens as they are seen in the input table will be used.}. - The argument \marg{column name} can be a column name, index, alias, or |create on use| specification (the latter one must not depend on other |create on use| statements). It is not necessary to provide a \marg{column name} which is part of the output. + The argument \meta{column name} can be a column name, index, alias, or |create on use| specification (the latter one must not depend on other |create on use| statements). It is not necessary to provide a \meta{column name} which is part of the output. However, it \emph{is} necessary that the |unique| predicate can be evaluated for all columns, starting with the first one. That means it is an error to provide |unique| somewhere deep in column--specific styles. \end{stylekey} \subsection{Postprocessing Cell Content} -The postprocessing step is applied after the typesetting stage, that means it can't access the original input data. However, it can apply final formatting instructions which are not content based. +The postprocessing step is applied after the typesetting stage, that means it can't access the original input data. However, it can apply final formatting instructions which are not content-based. \begin{codekey}{/pgfplots/table/postproc cell content} Allows to \emph{modify} assigned cell content \emph{after} it has been assigned, possibly content-dependent. Ideas could be to draw negative numbers in red, typeset single entries in bold face or insert replacement text. @@ -1867,11 +2186,12 @@ The postprocessing step is applied after the typesetting stage, that means it ca }] {pgfplotstable.example1.dat} \end{codeexample} - The code above modifies |@cell content| in two steps. The net effect is to prepend ``|$\bf |'' and to append ``|$ \EUR|''. It should be noted that |pgfkeys| handles |/.style| and |/.code| in (quasi) the same way -- both are simple code keys and can be used as such. You can combine both with |/.append style| and |/.append code|. Please refer to~\cite[section about pgfkeys]{tikz} for details. + The code above modifies |@cell content| in two steps. The net effect is to prepend ``|$\bf |'' and to append ``|$ \EUR|''. It should be noted that |pgfkeys| handles |/.style| and |/.code| in (basically) the same way -- both are simple code keys and can be used as such. You can combine both with |/.append style| and |/.append code|. Please refer to~\cite[section about pgfkeys]{tikz} for details. As in |assign cell content|, the code can evaluate helper macros like |\pgfplotstablerow| to change only particular entries. Furthermore, the postprocessor may depend on the unprocessed cell input (as it has been found in the input file or produced by the loading procedure) and/or the preprocessed cell value. These values are available as \begin{itemize} \item the key \declareandlabel{@unprocessed cell content} which stores the raw input, + \item the key \declareandlabel{@cell content after rowcol styles} which stores the value of |@cell content| after evaluating cell--specific styles, \item the key \declareandlabel{@preprocessed cell content} which stores the result of the preprocessor, \item the key \declareandlabel{@cell content} which contains the result of the typesetting routine, \item the shorthand `|#1|' which is also the unprocessed input argument as it has been found in the input table. @@ -1882,7 +2202,7 @@ The postprocessing step is applied after the typesetting stage, that means it ca at any time. - This allows complete context based formatting options. Please remember that empty strings may appear due to column balancing -- introduce special treatment if necessary. + This allows complete context-based formatting options. Please remember that empty strings may appear due to column balancing -- introduce special treatment if necessary. There is one special case which occurs if |@cell content| itsself contains the cell separation character `|&|'. In this case, |postproc cell content| is invoked \emph{separately} for each part before and after the ampersand and the ampersand is inserted afterwards. This allows compatibility with special styles which create artificial columns in the output (which is allowed, see |dec sep align|). To allow separate treatment of each part, you can use the macro \declareandlabel{\pgfplotstablepartno}. It is defined only during the evaluation of |postproc cell content| and it evaluates to the current part index (starting with~$0$). If there is no ampersand in your text, the value will always be~$0$. @@ -1910,19 +2230,19 @@ Since this may be useful in a more general context, it is available as |empty ce \end{codekey} \begin{stylekey}{/pgfplots/table/empty cells with=\marg{replacement}} - Appends code to |postproc cell content| which replaces any empty cell with \marg{replacement}. + Appends code to |postproc cell content| which replaces any empty cell with \meta{replacement}. If |dec sep align| is active, the replacement will be inserted only for the part before the decimal separator. \end{stylekey} \begin{stylekey}{/pgfplots/table/set content=\marg{content}} - A style which redefines |postproc cell content| to always return the value \marg{content}. + A style which redefines |postproc cell content| to always return the value \meta{content}. \end{stylekey} \begin{stylekey}{/pgfplots/table/fonts by sign=\marg{\TeX\ code for positive}\marg{\TeX\ code for negative}} Appends code to |postproc cell content| which allows to set fonts for positive and negative numbers. - The arguments \meta{\TeX\ code for positive} and \meta{\TeX\ code for negative} are inserted right before the typesetted cell content. It is permissable to use both ways to change \LaTeX\ fonts: the |\textbf|\marg{argument} or the |{\bfseries |\marg{argument}|}| way. + The arguments \meta{\TeX\ code for positive} and \meta{\TeX\ code for negative} are inserted right before the typesetted cell content. It is permissible to use both ways to change \LaTeX\ fonts: the |\textbf|\marg{argument} or the |{\bfseries |\marg{argument}|}| way. % \usepackage{pgfcalendar} \begin{codeexample}[] @@ -1969,9 +2289,9 @@ It is possible to create new tables from scratch or to change tables after they Furthermore, there must be |create on use| statements (see the next subsection) for every column which shall be generated\footnote{Currently, you need to provide at least one column: the implementation gets confused for completely empty tables. If you do not provide any column name, a dummy column will be created.}. Columns are generated - independently, in the order of appearance in |columns|. As soon as a column is complete, it can be accessed using any of the basic level access mechanisms. Thus, you can built columns which depend on each other. + independently, in the order of appearance in |columns|. As soon as a column is complete, it can be accessed using any of the basic level access mechanisms. Thus, you can build columns which depend on each other. - The table will contain exactly \marg{row count} rows. If \marg{row count} is an |\pgfplotstablegetrowsof| statement, that statement will be executed and the resulting number of rows be used. Otherwise, \marg{row count} will be evaluated as number. + The table will contain exactly \meta{row count} rows. If \meta{row count} is an |\pgfplotstablegetrowsof| statement, that statement will be executed and the resulting number of rows be used. Otherwise, \meta{row count} will be evaluated as number. \begin{codeexample}[] % this key setting could be provided in the document's preamble: \pgfplotstableset{ @@ -1998,18 +2318,18 @@ It is possible to create new tables from scratch or to change tables after they \begin{command}{\pgfplotstablevertcat\marg{\textbackslash table1}\marg{\textbackslash table2 or filename}} \label{table:vertcat} - Appends the contents of \marg{\textbackslash table2} to \marg{\textbackslash table1} (``vertical cat''). To be more precise, only columns which exist already in \marg{\textbackslash table1} will be appended and every column which exists in \marg{\textbackslash table1} must exist in \marg{\textbackslash table2} (or there must be |alias| or |create on use| specifications to generate them). + Appends the contents of \meta{\textbackslash table2} to \meta{\textbackslash table1} (``vertical concatenation''). To be more precise, only columns which exist already in \meta{\textbackslash table1} will be appended and every column which exists in \meta{\textbackslash table1} must exist in \meta{\textbackslash table2} (or there must be |alias| or |create on use| specifications to generate them). If the second argument is a file name, that file will be loaded from disk. - If \marg{\textbackslash table1} does not exist, \marg{\textbackslash table2} will be copied to \marg{\textbackslash table1}. + If \meta{\textbackslash table1} does not exist, \meta{\textbackslash table2} will be copied to \meta{\textbackslash table1}. \begin{codeexample}[code only] \pgfplotstablevertcat{\output}{datafile1} % loads `datafile1' -> `\output' \pgfplotstablevertcat{\output}{datafile2} % appends rows of datafile2 \pgfplotstablevertcat{\output}{datafile3} % appends rows of datafile3 \end{codeexample} - \paragraph{Remark:} The output table \marg{\textbackslash table1} will be defined in the current \TeX\ scope and it will be erased afterwards. + \paragraph{Remark:} The output table \meta{\textbackslash table1} will be defined in the current \TeX\ scope and it will be erased afterwards. The current \TeX\ scope is delimited by an extra set of curly braces. However, every \LaTeX\ environment and, unfortunately, the \Tikz\ |\foreach| statement as well, introduce \TeX\ scopes. \PGFPlots\ has some some loop statements which do not introduce extra scopes. For example, @@ -2027,18 +2347,18 @@ It is possible to create new tables from scratch or to change tables after they \subsection{Creating New Columns From Existing Ones} \begin{command}{\pgfplotstablecreatecol\oarg{options}\marg{new col name}\marg{\textbackslash table}} -Creates a new column named \marg{new col name} and appends it to an already existing table \marg{\textbackslash table}. +Creates a new column named \meta{new col name} and appends it to an already existing table \meta{\textbackslash table}. End users probably don't need to use |\pgfplotstablecreatecol| directly at all -- there is the high--level framework |create on use| which invokes it internally and can be used with simple key--value assignments (see below). However, this documentation explains how to use values of existing columns to fill new cells. This command offers a flexible framework to generate new columns. It has been designed to create new columns using the already existing values -- for example using logical or numerical methods to combine existing values. It provides fast access to a row's value, the previous row's value and the next row's value. -The following documentation is for all who want to \emph{write} specialised columns. It is not particularly difficult; it is just technical and it requires some knowledge of |pgfkeys|. If you don't like it, you can resort to predefined column generation styles - and enable those styles in \marg{options}. +The following documentation is for everyone who wants to \emph{write} specialized columns. It is not particularly difficult; it is just technical and it requires some knowledge of |pgfkeys|. If you don't like it, you can resort to predefined column generation styles -- and enable those styles in \meta{options}. The column entries will be created using the command key \pgfmanualpdflabel{/pgfplots/table/create col/assign}{\declaretext{create col/assign}}. It will be invoked for every row of the table. It is supposed to assign contents to \pgfmanualpdflabel{/pgfplots/table/create col/next content}{\declaretext{create col/next content}}. During the evaluation, the macro |\thisrow|\marg{col name} -expands to the current row's value of the column identified by \marg{col name}. +expands to the current row's value of the column identified by \meta{col name}. Furthermore, |\nextrow|\marg{col name} expands to the \emph{next} row's value of the designated column and |\prevrow|\marg{col name} expands to the value of the \emph{previous} row. @@ -2052,7 +2372,7 @@ The following macros are useful during cell assignments: \begin{enumerate} \item \declareandlabel{\prevrow}\marg{col name} / \declareandlabel{\getprevrow}\marg{col name}\marg{\textbackslash macro} - These two routines return the value stored in the \emph{previous} row of the designated column \marg{col name}. The |get| routine stores it into \meta{\textbackslash macro}. + These two routines return the value stored in the \emph{previous} row of the designated column \meta{col name}. The |get| routine stores it into \meta{\textbackslash macro}. The argument \meta{col name} has to denote either an existing column name or one for which an |alias/|\meta{col name} exists. @@ -2070,11 +2390,11 @@ The following macros are useful during cell assignments: \item |\pgfplotstablerow| and |\pgfplotstablerows| which contain the current row's index and the total number of rows, respectively. See page~\pageref{pgfplotstable:page:tablerow} for details. \item \declareandlabel{\pgfmathaccuma} and \declareandlabel{\pgfmathaccumb} can be used to transport intermediate results. - Both maintain their value from one column assignment to the next. All other local variables will be deleted after leaving the assignment routines. The initial value is the empty string for both of them unless they are already initialised by column creation styles. + Both maintain their value from one column assignment to the next. All other local variables will be deleted after leaving the assignment routines. The initial value is the empty string for both of them unless they are already initialized by column creation styles. \item \declareandlabel{\pgfplotstablename} a macro containing the name of the currently processed table (i.e.\ it contains the second argument of |\pgfplotstablecreatecol|). \item commands which are valid throughout every part of this package, for example |\pgfplotstablerow| to get the current row index or |\pgfplotstablerows| to get the total number of rows. \end{enumerate} -The \marg{col name} is expected to be a \emph{physical} column name, no alias or column index is allowed (unless column indices and column names are the same). +The \meta{col name} is expected to be a \emph{physical} column name, no alias or column index is allowed (unless column indices and column names are the same). The following example takes our well-known input table and creates a copy of the |level| column. Furthermore, it produces a lot of output to show the available macros. Finally, it uses |\pgfkeyslet| to assign the contents of the resulting |\entry| to |next content|. \begin{codeexample}[] @@ -2096,7 +2416,7 @@ The following example takes our well-known input table and creates a copy of the ]\loadedtable \end{codeexample} -There is one more speciality: you can use |columns=|\marg{column list} to reduce the runtime complexity of this command. This works only if the |columns| key is provided directly into \marg{options}. In this case |\thisrow| and its variants are only defined for those columns listed in the |columns| value. +There is one more specialty: you can use |columns=|\marg{column list} to reduce the runtime complexity of this command. This works only if the |columns| key is provided directly into \meta{options}. In this case |\thisrow| and its variants are only defined for those columns listed in the |columns| value. \paragraph{Limitations.} Currently, you can only access three values of one column at a time: the current row, the previous row and the next row. Access to arbitrary indices is not (yet) supported. @@ -2120,7 +2440,7 @@ The default implementation of |assign| is to produce empty strings. The default columns/quot1/.style={dec sep align}] {pgfplotstable.example1.dat} \end{codeexample} - The example above queries |quot1| which does not yet exist in the input file. Therefor, it is checked whether a |create on use| style for |quot1| exists. This is the case, so it is used to create the missing column. The |create col/quotient| key is discussed below; it computes quotients of successive rows in column |error1|. + The example above queries |quot1| which does not yet exist in the input file. Therefore, it is checked whether a |create on use| style for |quot1| exists. This is the case, so it is used to create the missing column. The |create col/quotient| key is discussed below; it computes quotients of successive rows in column |error1|. A |create on use| specification is translated into @@ -2130,7 +2450,7 @@ The default implementation of |assign| is to produce empty strings. The default |\pgfplotstablecreatecol[|create on use/\meta{col name}|]|\marg{col name}\marg{the table}. - This feature allows some lazyness, because you can omit the lengthy table modifications. However, lazyness may cost something: in the example above, the generated column will be \emph{lost} after returning from |\pgfplotstabletypeset|. + This feature allows some laziness, because you can omit the lengthy table modifications. However, laziness may cost something: in the example above, the generated column will be \emph{lost} after returning from |\pgfplotstabletypeset|. The |create on use| has higher priority than |alias|. @@ -2146,7 +2466,7 @@ The following keys can be used in both |\pgfplotstablecreatecol| and the easier \subsubsection{Acquiring Data Somewhere} \begin{stylekey}{/pgfplots/table/create col/set=\marg{value}} - A style for use in column creation context which creates a new column and writes \marg{value} into each new cell. The value is written as string (verbatim). + A style for use in column creation context which creates a new column and writes \meta{value} into each new cell. The value is written as string (verbatim). \begin{codeexample}[] \pgfplotstableset{ create on use/my new col/.style={create col/set={--empty--}}, @@ -2160,9 +2480,9 @@ The following keys can be used in both |\pgfplotstablecreatecol| and the easier \end{stylekey} \begin{stylekey}{/pgfplots/table/create col/set list=\marg{comma-separated-list}} - A style for use in column creation context which creates a new column consisting of the entries in \marg{comma-separated-list}. The value is written as string (verbatim). + A style for use in column creation context which creates a new column consisting of the entries in \meta{comma-separated-list}. The value is written as string (verbatim). - The \marg{comma-separated-list} is processed via \Tikz's |\foreach| command, that means you can use |...| expressions to provide number (or character) ranges. + The \meta{comma-separated-list} is processed via \Tikz's |\foreach| command, that means you can use |...| expressions to provide number (or character) ranges. \begin{codeexample}[] \pgfplotstableset{ create on use/my new col/.style={ @@ -2178,7 +2498,7 @@ The following keys can be used in both |\pgfplotstablecreatecol| and the easier \end{stylekey} \begin{stylekey}{/pgfplots/table/create col/copy=\marg{column name}} - A style for use in column creation context which simply copies the existing column \marg{column name}. + A style for use in column creation context which simply copies the existing column \meta{column name}. \begin{codeexample}[] \pgfplotstableset{ create on use/new/.style={create col/copy={level}} @@ -2192,7 +2512,7 @@ The following keys can be used in both |\pgfplotstablecreatecol| and the easier \end{stylekey} \begin{stylekey}{/pgfplots/table/create col/copy column from table=\marg{file name or \textbackslash macro}\marg{column name}} - A style for use in column creation context which creates a new column consisting of the entries in \marg{column name} of the provided table. The argument may be either a file name or an already loaded table (i.e. a \meta{\textbackslash macro} as returned by |\pgfplotstableread|). + A style for use in column creation context which creates a new column consisting of the entries in \meta{column name} of the provided table. The argument may be either a file name or an already loaded table (i.e. a \meta{\textbackslash macro} as returned by |\pgfplotstableread|). You can use this style, possibly combined with |\pgfplotstablenew|, to merge one common sort of column from different tables into one large table. @@ -2214,11 +2534,11 @@ The following keys can be used in both |\pgfplotstablecreatecol| and the easier \begin{codeexample}[code only] \pgfkeys{/pgf/fpu=true} \end{codeexample} - \noindent in order to activate the extended precision. The standard math parser is limited to fixed point numbers in the range $\pm 16384.00000$. + \noindent in order to activate the extended precision. The standard math parser is limited to fixed point numbers in the range of $\pm 16384.00000$. \end{key} \begin{stylekey}{/pgfplots/table/create col/expr=\marg{math expression}} - A style for use in |\pgfplotstablecreatecol| which uses \marg{math expression} to assign contents for the new column. + A style for use in |\pgfplotstablecreatecol| which uses \meta{math expression} to assign contents for the new column. \begin{codeexample}[] \pgfplotstableset{ @@ -2235,18 +2555,18 @@ The following keys can be used in both |\pgfplotstablecreatecol| and the easier Please see |\pgfplotstablecreatecol| for more information. - \paragraph{Accumulated columns:} The |expr| style initialises |\pgfmathaccuma| to |0| before its first column. Whenever it computes a new column value, it redefines |\pgfmathaccuma| to be the result. That means you can use |\pgfmathaccuma| inside of \marg{math expression} to accumulate columns. See |create col/expr accum| for more details. + \paragraph{Accumulated columns:} The |expr| style initializes |\pgfmathaccuma| to |0| before its first column. Whenever it computes a new column value, it redefines |\pgfmathaccuma| to be the result. That means you can use |\pgfmathaccuma| inside of \meta{math expression} to accumulate columns. See |create col/expr accum| for more details. \paragraph{About the precision and number range:}\index{Precision}\index{Floating Point Unit} Starting with version 1.2, |expr| uses a floating point unit. The FPU provides the full data range of scientific computing with a relative precision between $10^{-4}$ and $10^{-6}$. The |/pgf/fpu| key provides some more details. \paragraph{Accepted operations:} The math parser of \PGF, combined with the FPU, provides the following function and operators: - |+|, |-|, |*|, |/|, |abs|, |round|, |floor|, |mod|, |<|, |>|, |max|, |min|, |sin|, |cos|, |tan|, |deg| (conversion from radians to degrees), |rad| (conversion from degrees to radians), |atan|, |asin|, |acos|, |cot|, |sec|, |cosec|, |exp|, |ln|, |sqrt|, the constanst |pi| and |e|, |^| (power operation), |factorial|\footnote{Starting with \PGF\ versions newer than $2.00$, you can use the postfix operator \texttt{!} instead of \texttt{factorial}.}, |rand| (random between $-1$ and $1$), |rnd| (random between $0$ and $1$), number format conversions |hex|, |Hex|, |oct|, |bin| and some more. The math parser has been written by Mark Wibrow and Till Tantau~\cite{tikz}, the FPU routines have been developed as part of \PGFPlots. The documentation for both parts can be found in~\cite{tikz}. \textbf{Attention:} Trigonometric functions work with degrees, not with radians! + |+|, |-|, |*|, |/|, |abs|, |round|, |floor|, |mod|, |<|, |>|, |max|, |min|, |sin|, |cos|, |tan|, |deg| (conversion from radians to degrees), |rad| (conversion from degrees to radians), |atan|, |asin|, |acos|, |cot|, |sec|, |cosec|, |exp|, |ln|, |sqrt|, the constanst |pi| and |e|, |^| (power operation), |factorial|\footnote{Starting with \PGF\ versions newer than $2.00$, you can use the postfix operator \texttt{!} instead of \texttt{factorial}.}, |rand| (random between $-1$ and $1$ following a uniform distribution), |rnd| (random between $0$ and $1$ following a uniform distribution), number format conversions |hex|, |Hex|, |oct|, |bin| and some more. The math parser has been written by Mark Wibrow and Till Tantau~\cite{tikz}, the FPU routines have been developed as part of \PGFPlots. The documentation for both parts can be found in~\cite{tikz}. \textbf{Attention:} Trigonometric functions work with degrees, not with radians! \end{stylekey} \begin{stylekey}{/pgfplots/table/create col/expr accum=\marg{math expression}\marg{accum initial}} - A variant of |create col/expr| which also allows to define the initial value of |\pgfmathaccuma|. The case \marg{accum initial}=|0| is \emph{equivalent} to |expr=|\marg{math expression}. + A variant of |create col/expr| which also allows to define the initial value of |\pgfmathaccuma|. The case \meta{accum initial}=|0| is \emph{equivalent} to |expr=|\marg{math expression}. \begin{codeexample}[] \pgfplotstableset{ @@ -2263,11 +2583,11 @@ The following keys can be used in both |\pgfplotstablecreatecol| and the easier columns/new2/.style={column name=$\prod$level} ]{pgfplotstable.example1.dat} \end{codeexample} -The example creates two columns: the |new| column is just the sum of each value in the \meta{level} column (it employs the default |\pgfmathaccuma=0|). The |new2| column initialises |\pgfmathaccuma=100| and then successively subtracts the value of \meta{level}. +The example creates two columns: the |new| column is just the sum of each value in the \meta{level} column (it employs the default |\pgfmathaccuma=0|). The |new2| column initializes |\pgfmathaccuma=100| and then successively subtracts the value of \meta{level}. \end{stylekey} \begin{stylekey}{/pgfplots/table/create col/quotient=\marg{column name}} - A style for use in |\pgfplotstablecreatecol| which computes the quotient $c_i := m_{i-1} / m_i$ for every entry $i = 1,\dotsc, (n-1)$ in the column identified with \marg{column name}. The first value $c_0$ is kept empty. + A style for use in |\pgfplotstablecreatecol| which computes the quotient $c_i := m_{i-1} / m_i$ for every entry $i = 1,\dotsc, (n-1)$ in the column identified with \meta{column name}. The first value $c_0$ is kept empty. \begin{codeexample}[] % requires \usepackage{array} @@ -2285,7 +2605,7 @@ The example creates two columns: the |new| column is just the sum of each value \pgfplotstabletypeset{pgfplotstable.example1.dat} \end{codeexample} - This style employs methods of the floating point unit, that means it works with a relative precision of about $10^{-7}$ ($7$ significant digits in the mantisse). + This style employs methods of the floating point unit, that means it works with a relative precision of about $10^{-7}$ ($7$ significant digits in the mantissa). \end{stylekey} \begin{stylekey}{/pgfplots/table/create col/iquotient=\marg{column name}} @@ -2293,7 +2613,7 @@ The example creates two columns: the |new| column is just the sum of each value \end{stylekey} \begin{stylekey}{/pgfplots/table/create col/dyadic refinement rate=\marg{column name}} - A style for use in |\pgfplotstablecreatecol| which computes the convergence rate $\alpha$ of the data in column \marg{column name}. The contents of \marg{column name} is assumed to be something like $e_i(h_i) = O(h_i^\alpha)$. Assuming a dyadic refinement relation from one row to the next, $h_i = h_{i-1}/2$, we have $h_{i-1}^\alpha / (h_{i-1}/2)^\alpha = 2^\alpha$, so we get $\alpha$ using + A style for use in |\pgfplotstablecreatecol| which computes the convergence rate $\alpha$ of the data in column \meta{column name}. The contents of \meta{column name} is assumed to be something like $e_i(h_i) = O(h_i^\alpha)$. Assuming a dyadic refinement relation from one row to the next, $h_i = h_{i-1}/2$, we have $h_{i-1}^\alpha / (h_{i-1}/2)^\alpha = 2^\alpha$, so we get $\alpha$ using \[ c_i := \log_2\left( \frac{e_{i-1}}{e_i} \right). \] The first value $c_0$ is kept empty. @@ -2309,7 +2629,7 @@ The example creates two columns: the |new| column is just the sum of each value columns/rate2/.style={dec sep align}] {pgfplotstable.example1.dat} \end{codeexample} - This style employs methods of the floating point unit, that means it works with a relative precision of about $10^{-6}$ ($6$ significant digits in the mantisse). + This style employs methods of the floating point unit, that means it works with a relative precision of about $10^{-6}$ ($6$ significant digits in the mantissa). \end{stylekey} \begin{stylekey}{/pgfplots/table/create col/idyadic refinement rate=\marg{column name}} @@ -2321,9 +2641,9 @@ The example creates two columns: the |new| column is just the sum of each value /pgfplots/table/create col/gradient loglog=\marg{col x}\marg{col y}, /pgfplots/table/create col/gradient semilogx=\marg{col x}\marg{col y}, /pgfplots/table/create col/gradient semilogy=\marg{col x}\marg{col y}} - A style for |\pgfplotstablecreatecol| which computes piecewise gradients $(y_{i+1} - y_i) / (x_{i+1} - x_i )$ for each row. The $y$ values are taken out of column \marg{col y} and the $x$ values are taken from \marg{col y}. + A style for |\pgfplotstablecreatecol| which computes piecewise gradients $(y_{i+1} - y_i) / (x_{i+1} - x_i )$ for each row. The $y$ values are taken out of column \meta{col y} and the $x$ values are taken from \meta{col y}. - The logarithmic variants apply the natural logarithm, $\log(\cdot)$, to its argument before starting to compute differences. More precisely, the |loglog| variant applies the logarithm to both, $x$ and $y$, the |semilogx| variant applies the logarithm only to~$x$ and the |semilogy| variant applies the logarithm only to~$y$. + The logarithmic variants apply the natural logarithm, $\log(\cdot)$, to its argument before starting to compute differences. More precisely, the |loglog| variant applies the logarithm to both $x$ and $y$, the |semilogx| variant applies the logarithm only to~$x$ and the |semilogy| variant applies the logarithm only to~$y$. \begin{codeexample}[] % requires \usepackage{array} @@ -2353,7 +2673,7 @@ The example creates two columns: the |new| column is just the sum of each value } \pgfplotstabletypeset{pgfplotstable.example1.dat} \end{codeexample} - This style employs methods of the floating point unit, that means it works with a relative precision of about $10^{-6}$ ($6$ significant digits in the mantisse). + This style employs methods of the floating point unit, that means it works with a relative precision of about $10^{-6}$ ($6$ significant digits in the mantissa). \end{keylist} \begin{stylekey}{/pgfplots/table/create col/linear regression=\marg{key-value-config}}% @@ -2361,14 +2681,14 @@ The example creates two columns: the |new| column is just the sum of each value \begin{codeexample}[pre={\vbox\bgroup\hsize=3cm},post=\egroup] % load table from somewhere: -\pgfplotstableread[row sep=\\]{ - x y\\ - 1 1 \\ - 2 4\\ - 3 9\\ - 4 16\\ - 5 25\\ - 6 36\\ +\pgfplotstableread{ + x y + 1 1 + 2 4 + 3 9 + 4 16 + 5 25 + 6 36 }\loadedtbl % create the `regression' column: @@ -2388,7 +2708,7 @@ The slope is `\slope'. \end{stylekey} \begin{stylekey}{/pgfplots/table/create col/function graph cut y=\marg{cut value}\marg{common options}\marg{one key-value set for each plot}} - A specialized style for use in |create on use| statements which computes cuts of (one or more) discrete plots $y(x_1), \dotsc, y(x_N)$ with a fixed \marg{cut value}. The $x_i$ are written into the table's cells. + A specialized style for use in |create on use| statements which computes cuts of (one or more) discrete plots $y(x_1), \dotsc, y(x_N)$ with a fixed \meta{cut value}. The $x_i$ are written into the table's cells. In a cost--accuracy plot, this feature allows to extract the cost for fixed accuracy. The dual feature with |cut x| allows to compute the accuracy for fixed cost. @@ -2419,9 +2739,9 @@ The slope is `\slope'. \end{tikzpicture} \end{codeexample} In the example above, we are searching for $x_1$ and $x_2$ such that $f_1(x_1) = \pgfmathprintnumber{2.5e-4}$ and $f_2(x_2) =\pgfmathprintnumber{2.5e-4}$. On the left is the automatically computed result. On the right is a problem illustration with proper annotation using \PGFPlots\ to visualize the results. - The \marg{cut value} is set to |2.5e-4|. The \marg{common options} contain the problem setup; in our case logarithmic scales and column names. The third argument is a comma-separated-list. Each element $i$ is a set of keys describing how to get $f_i(\cdot)$. + The \meta{cut value} is set to |2.5e-4|. The \meta{common options} contain the problem setup; in our case logarithmic scales and column names. The third argument is a comma-separated-list. Each element $i$ is a set of keys describing how to get $f_i(\cdot)$. - During both, \marg{common options} and \marg{one key-value set for each plot}, the following keys can be used: + During both \meta{common options} and \meta{one key-value set for each plot}, the following keys can be used: \begin{itemize} \item \declareandlabel{table}|=|\marg{table file or \textbackslash macro}: either a file name or an already loaded table where to get the data points, \item \declareandlabel{x}|=|\marg{col name}: the column name of the $x$ axis, @@ -2444,13 +2764,13 @@ The slope is `\slope'. % Show the data: \pgfplotstabletypeset{\loadedtable} \end{codeexample} - \PGFPlotstable\ will call |\foreach |\meta{\textbackslash foreach loop head} and it will expand \marg{file name pattern} for every iteration. For every iteration, a simpler list entry of the form + \PGFPlotstable\ will call |\foreach |\meta{\textbackslash foreach loop head} and it will expand \meta{file name pattern} for every iteration. For every iteration, a simpler list entry of the form |table=|\marg{expanded pattern}|,x=|\marg{value of x}|,y=|\marg{value of y} will be generated. - It is also possible to provide |foreach=| inside of \marg{one key-value set for each plot}. The |foreach| key takes precedence over |table|. Details about the accepted syntax of |\foreach| can be found in the \pgfname\ manual. + It is also possible to provide |foreach=| inside of \meta{one key-value set for each plot}. The |foreach| key takes precedence over |table|. Details about the accepted syntax of |\foreach| can be found in the \pgfname\ manual. \end{itemize} The keys \declareandlabel{xmode} and \declareandlabel{ymode} can take either |log| or |linear|. All mentioned keys have the common key path @@ -2463,7 +2783,7 @@ The slope is `\slope'. \section{Miscellaneous} \subsection{Writing (Modified) Tables To Disk} \begin{key}{/pgfplots/table/outfile=\marg{file name} (initially empty)} - Writes the completely processed table as \TeX\ file to \marg{file name}. This key is described in all detail on page~\pageref{page:outfile}. + Writes the completely processed table as \TeX\ file to \meta{file name}. This key is described in all detail on page~\pageref{page:outfile}. \end{key} \begin{command}{\pgfplotstablesave\oarg{options}\marg{\textbackslash macro or input file name}\marg{output file name}} @@ -2475,7 +2795,7 @@ The slope is `\slope'. |\pgfplotstablesave| uses the keys |reset styles| and |disable rowcol styles| to clear any typesetting related options. - Furthermore, it sets |string type| to allow verbatim output. You may want to use |numeric as string type| instead in case you only have numerical data -- this will display integers resulting from arithmetics not in scientific notation\footnote{Note however, that |string type| doesn't round or truncate integers as well, even though they are displayed as floats.}. + Furthermore, it sets |string type| to allow verbatim output. You may want to use |numeric as string type| instead in case you only have numerical data -- this will display integers resulting from arithmetics not in scientific notation\footnote{Note however, that \texttt{string type} does not round or truncate integers either, even though they are displayed as floats.}. \begin{codeexample}[] \pgfplotstablesave[ create on use/postproc1/.style={create col/dyadic refinement rate=error1}, @@ -2525,15 +2845,15 @@ Empty cells will be filled with |{}| if |col sep=space|. Use the |empty cells wi \subsection{A summary of how to define and use styles and keys} This section summarizes features of |pgfkeys|. The complete documentation can be found in the \pgfname\ manual,~\cite{tikz}. \begin{handler}{{.style}=\marg{key-value-list}} - Defines or redefines a style \meta{key}. A style is a normal key which will set all options in \marg{key-value-list} when it is set. + Defines or redefines a style \meta{key}. A style is a normal key which will set all options in \meta{key-value-list} when it is set. - Use |\pgfplotstableset{|\meta{key}|/.style={|\meta{key-value-list}|}}| to (re-) define a style \meta{key} in the namespace |/pgfplots/table|. + Use |\pgfplotstableset{|\meta{key}|/.style={|\meta{key-value-list}|}}| to (re)define a style \meta{key} in the namespace |/pgfplots/table|. \end{handler} \begin{handler}{{.append style}=\marg{key-value-list}} - Appends \marg{key-value-list} to an already existing style \meta{key}. This is the preferred method to change the predefined styles: if you only append, you maintain compatibility with future versions. + Appends \meta{key-value-list} to an already existing style \meta{key}. This is the preferred method to change the predefined styles: if you only append, you maintain compatibility with future versions. - Use |\pgfplotstableset{|\meta{key}|/.append style={|\meta{key-value-list}|}}| to append \marg{key-value-list} to the style \meta{key}. This will assume the prefix |/pgfplots/table|. + Use |\pgfplotstableset{|\meta{key}|/.append style={|\meta{key-value-list}|}}| to append \meta{key-value-list} to the style \meta{key}. This will assume the prefix |/pgfplots/table|. \end{handler} \begin{handler}{{.initial}=\marg{value}} @@ -2554,7 +2874,7 @@ This section summarizes features of |pgfkeys|. The complete documentation can be \end{handler} \begin{handler}{{.code}=\marg{\TeX\ code}} - Occasionally, the \PGFPlots\ user interface offers to replace parts of its routines. This is accomplished using so called ``code keys''. What it means is to replace the original key and its behavior with new \marg{\TeX\ code}. Inside of \marg{\TeX\ code}, any command can be used. Furthermore, the |#1| pattern will be the argument provided to the key. + Occasionally, the \PGFPlots\ user interface offers to replace parts of its routines. This is accomplished using so called ``code keys''. What it means is to replace the original key and its behavior with new \meta{\TeX\ code}. Inside of \meta{\TeX\ code}, any command can be used. Furthermore, the |#1| pattern will be the argument provided to the key. \begin{codeexample}[] \pgfplotsset{ @@ -2565,7 +2885,7 @@ This section summarizes features of |pgfkeys|. The complete documentation can be \end{handler} \begin{handler}{{.append code}=\marg{\TeX\ code}} - Appends \marg{\TeX\ code} to an already existing |/.code| key named \meta{key}. + Appends \meta{\TeX\ code} to an already existing |/.code| key named \meta{key}. \end{handler} @@ -2576,17 +2896,17 @@ This section summarizes features of |pgfkeys|. The complete documentation can be \subsection{Plain \TeX\ and Con\TeX t support} \label{sec:pgfplotstable:context} -The table code generator is initialised to produce \LaTeX\ |tabular| environments. However, it only relies on~`|&|' being the column separator and~`|\\|' the row terminator. The |column type| feature is more or less specific to |tabular|, but you can disable it completely. Replace |begin table| and |end table| with appropriate \TeX- or Con\TeX t commands to change it. If you have useful default styles (or bug reports), let me know. +The table code generator is initialized to produce \LaTeX\ |tabular| environments. However, it only relies on~`|&|' being the column separator and~`|\\|' the row terminator. The |column type| feature is more or less specific to |tabular|, but you can disable it completely. Replace |begin table| and |end table| with appropriate \TeX- or Con\TeX t commands to change it. If you have useful default styles (or bug reports), let me know. \subsection{Basic Level Table Access and Modification} \PGFPlotstable\ provides several methods to access and manipulate tables at an elementary level. -Please keep in mind that \PGFPlotstable\ has been written as tool for table visualization. As such, it has been optimized for the case of relatively few rows (although it may have a lot of columns). The runtime for table creation and modification is currently $O(N^2)$ where $N$ is the number of rows\footnote{The runtime for \texttt{plot table} is linear in the number of rows using a special routine.}. This is completely acceptable for tables with few rows because \TeX\ can handle those structures relatively fast. Keep your tables small! \PGFPlotstable\ is \emph{not} a tool for large-scale matrix operations. +Please keep in mind that \PGFPlotstable\ has been written as a tool for table visualization. As such, it has been optimized for the case of relatively few rows (although it may have a lot of columns). The runtime for table creation and modification is currently $O(N^2)$ where $N$ is the number of rows\footnote{The runtime for \texttt{plot table} is linear in the number of rows using a special routine.}. This is completely acceptable for tables with few rows because \TeX\ can process those structures relatively fast. Keep your tables small! \PGFPlotstable\ is \emph{not} a tool for large-scale matrix operations. Tables are always stored as a sequence of column vectors. Therefore, iteration over all values in one column is simple whereas iteration over all values in one row is complicated and expensive. \begin{command}{\pgfplotstableforeachcolumn\meta{table}\textbackslash as\marg{\textbackslash macro}\marg{code}} - Iterates over every column name of \meta{table}. The \meta{\textbackslash macro} will be set to the currently visited column name. Then, \marg{code} will be executed. During \marg{code}, |\pgfplotstablecol| denotes the current column index (starting with 0). + Iterates over every column name of \meta{table}. The \meta{\textbackslash macro} will be set to the currently visited column name. Then, \meta{code} will be executed. During \meta{code}, |\pgfplotstablecol| denotes the current column index (starting with 0). \begin{codeexample}[] \begin{minipage}{0.8\linewidth} \pgfplotstableread{pgfplotstable.example1.dat}\loadedtable @@ -2596,13 +2916,13 @@ Tables are always stored as a sequence of column vectors. Therefore, iteration o \end{minipage} \end{codeexample} - This routine does not introduce \TeX\ groups, variables inside of \marg{code} are not scoped. + This routine does not introduce \TeX\ groups, variables inside of \meta{code} are not scoped. \end{command} \begin{command}{\pgfplotstableforeachcolumnelement\meta{column name}\textbackslash of\meta{table}\textbackslash as\meta{\textbackslash cellcontent}\marg{code}} Reports every table cell $t_{ij}$ for a fixed column $j$ in read-only mode. - For every cell in the column named \meta{column name}, \marg{code} will be executed. During this invocation, the macro \meta{\textbackslash cellcontent} will contain the cell's content and |\pgfplotstablerow| will contain the current row's index. + For every cell in the column named \meta{column name}, \meta{code} will be executed. During this invocation, the macro \meta{\textbackslash cellcontent} will contain the cell's content and |\pgfplotstablerow| will contain the current row's index. \begin{codeexample}[] \begin{minipage}{0.8\linewidth} \pgfplotstableread{pgfplotstable.example1.dat}\loadedtable @@ -2611,14 +2931,14 @@ Tables are always stored as a sequence of column vectors. Therefore, iteration o } \end{minipage} \end{codeexample} - The argument \meta{column name} can also be a column index. In that case, it should contain |[index]|\meta{integer}, for example |[index]4|. Furthermore, column aliases and column which should be generated on-the-fly (see |create on use|) can be used for \meta{column name}. + The argument \meta{column name} can also be a column index. In that case, it should contain |[index]|\meta{integer}, for example |[index]4|. Furthermore, column aliases and columns which should be generated on-the-fly (see |create on use|) can be used for \meta{column name}. - This routine does not introduce \TeX\ groups, variables inside of \marg{code} are not scoped. + This routine does not introduce \TeX\ groups, variables inside of \meta{code} are not scoped. \end{command} \begin{command}{\pgfplotstablemodifyeachcolumnelement\meta{column name}\textbackslash of\meta{table}\textbackslash as\meta{\textbackslash cellcontent}\marg{code}} A routine which is similar to |\pgfplotstableforeachcolumnelement|, - but any changes of \meta{\textbackslash cellcontent} which might occur during \marg{code} will be written back into the respective cell. + but any changes of \meta{\textbackslash cellcontent} which might occur during \meta{code} will be written back into the respective cell. \begin{codeexample}[] \pgfplotstableread{pgfplotstable.example1.dat}\loadedtable @@ -2628,11 +2948,11 @@ Tables are always stored as a sequence of column vectors. Therefore, iteration o \pgfplotstabletypeset[columns=error1,string type]{\loadedtable} \end{codeexample} - If \marg{column name} is a column alias or has been created on-the-fly, a new column named \meta{column name} will be created. + If \meta{column name} is a column alias or has been created on-the-fly, a new column named \meta{column name} will be created. \end{command} \begin{command}{\pgfplotstablegetelem\marg{row}\marg{col}\textbackslash of\meta{table}} - Selects a single table element at row \marg{row} and column \marg{col}. The second argument has the same format as that described in the last paragraph: it should be a column name or a column index (in which case it needs to be written as |[index]|\meta{number}). + Selects a single table element at row \meta{row} and column \meta{col}. The second argument has the same format as that described in the last paragraph: it should be a column name or a column index (in which case it needs to be written as |[index]|\meta{number}). The return value will be written to |\pgfplotsretval|. \begin{codeexample}[] @@ -2659,16 +2979,16 @@ The value (2,0) is `\pgfplotsretval'. \end{command} \begin{command}{\pgfplotstablenew\oarg{options}\marg{row count}\marg{\textbackslash table}} - See section~\ref{pgfplotstable:createcol} for details about this command. + See Section~\ref{pgfplotstable:createcol} for details about this command. \end{command} \begin{command}{\pgfplotstablecreatecol\oarg{options}\marg{row count}\marg{\textbackslash table}} - See section~\ref{pgfplotstable:createcol} for details about this command. + See Section~\ref{pgfplotstable:createcol} for details about this command. \end{command} \begin{commandlist}{% \pgfplotstabletranspose\oarg{options}\marg{\textbackslash outtable}\marg{\textbackslash table or filename},% \pgfplotstabletranspose*\oarg{options}\marg{\textbackslash outtable}\marg{\textbackslash table or filename}}% - Defines \meta{\textbackslash outtable} to be the transposed of \marg{\textbackslash table of filename}. The input argument can be either a file name or an already loaded table. + Defines \meta{\textbackslash outtable} to be the transposed of \meta{\textbackslash table of filename}. The input argument can be either a file name or an already loaded table. The version with `|*|' is only interesting in conjunction with the |columns| option, see below. @@ -2685,14 +3005,14 @@ The value (2,0) is `\pgfplotsretval'. \begin{pgfplotskey}{table/colnames from=\marg{colname} (initially empty)} Inside of |\pgfplotstabletranspose|, this key handles how to define output column names. - If \marg{colname} \emph{is} empty (the initial value), the output column names will simply be the old row indices, starting with~$0$. + If \meta{colname} \emph{is} empty (the initial value), the output column names will simply be the old row indices, starting with~$0$. - If \marg{colname} is not empty, it denotes an input column name whose cell values will make up the output column names: + If \meta{colname} is not empty, it denotes an input column name whose cell values will make up the output column names: \begin{codeexample}[] \pgfplotstabletranspose[colnames from=c]\loadedtable{pgfplotstable.example3.dat} \pgfplotstabletypeset[string type]\loadedtable \end{codeexample} - The argument \meta{colname} won't appear as cell contents. It is an error if the the cells in \meta{colname} don't yield unique column names. + The argument \meta{colname} won't appear as cell contents. It is an error if the cells in \meta{colname} don't yield unique column names. \end{pgfplotskey} \begin{pgfplotskey}{table/input colnames to=\marg{name} (initially colnames)} @@ -2731,18 +3051,18 @@ The value (2,0) is `\pgfplotsretval'. Use the high level |sort| key to enable sorting automatically during |\pgfplotstabletypeset|. \begin{codeexample}[] -\pgfplotstablesort[row sep=\\]\result{% - a b c \\ - 19 2 [a]\\ - -6 -14 [b]\\ - 4 -14 [c]\\ - -11 -9 [d]\\ - 11 14 [e]\\ - -9 -9 [f]\\ - 1 13 [g]\\ - 8 -10 [h]\\ - 16 18 [i]\\ - 19 -6 [j]\\ +\pgfplotstablesort\result{% + a b c + 19 2 [a] + -6 -14 [b] + 4 -14 [c] + -11 -9 [d] + 11 14 [e] + -9 -9 [f] + 1 13 [g] + 8 -10 [h] + 16 18 [i] + 19 -6 [j] } \pgfplotstabletypeset[columns/c/.style={string type}]{\result}% \end{codeexample} @@ -2768,28 +3088,28 @@ The value (2,0) is `\pgfplotsretval'. date >, string <, string >} - These styles constitute the predefined comparison functions. The |fixed <|, |int <| and |float <| routines operate on numerical data where |int <| expects positive or negative integers and the other two expect real numbers. The |fixed <| has considerably smaller number range but is slightly faster than |float <|. + These styles constitute the predefined comparison functions. The |fixed <|, |int <| and |float <| routines operate on numerical data where |int <| expects positive or negative integers and the other two expect real numbers. The |fixed <| has a considerably smaller number range, but is slightly faster than |float <|. The |date <| compares dates of the form |YYYY-MM-DD|. The |string <| uses lexicographical string comparison based on the ASCII character codes of the sort keys. The |string <| routine also evaluates ASCII codes of control sequences or active characters\footnote{As long as they haven't been consumed by \TeX's preprocessing.}. \begin{codeexample}[] -\pgfplotstablesort[row sep=\\,sort cmp=string <]\result{% - Header:\\% the column name - the\\ - quick\\ - brown\\ - fox\\ - jumps\\ - over\\ - the\\ - lazy\\ - dog\\ +\pgfplotstablesort[sort cmp=string <]\result{% 'Header' is the column name: + Header + the + quick + brown + fox + jumps + over + the + lazy + dog } \pgfplotstabletypeset[string type]{\result}% \end{codeexample} \end{pgfplotskeylist} \begin{codeargskey}{/pgfplots/iflessthan}{#1#2#3#4} Allows to define custom comparison functions (a strict ordering). It compares |#1 < #2| and invokes |#3| in case the comparison is true and |#4| if not. - The comparison will be evaluated in local scopes (local variables are freed afterwise). + The comparison will be evaluated in local scopes (local variables are freed afterwards). \end{codeargskey} \end{key} \end{command} @@ -2812,7 +3132,7 @@ The value (2,0) is `\pgfplotsretval'. The following \PGFPlots\ looping macros are an alternative. \begin{command}{\pgfplotsforeachungrouped \meta{variable} |in| \meta{list} \marg{command}} - A specialised variant of |\foreach| which can do two things: it does not introduce extra groups while executing \meta{command} and it allows to invoke the math parser for (simple!) \meta{$x_0$}|,|\meta{$x_1$}|,...,|\meta{$x_n$} expressions. + A specialized variant of |\foreach| which can do two things: it does not introduce extra groups while executing \meta{command} and it allows to invoke the math parser for (simple!) \meta{$x_0$}|,|\meta{$x_1$}|,...,|\meta{$x_n$} expressions. \begin{codeexample}[] \def\allcollected{} @@ -2835,13 +3155,13 @@ All collected = \allcollected. \end{command} \begin{command}{\pgfplotsinvokeforeach\marg{list} \marg{command}} - A variant of |\pgfplotsforeachungrouped| (and such also of |\foreach|) which replaces any occurence of |#1| inside of \meta{command} once for every element in \meta{list}. Thus, it actually assumes that \marg{command} is like a |\newcommand| body. + A variant of |\pgfplotsforeachungrouped| (and such also of |\foreach|) which replaces any occurence of |#1| inside of \meta{command} once for every element in \meta{list}. Thus, it actually assumes that \meta{command} is like a |\newcommand| body. - In other words, \marg{command} is invoked for every element of \marg{list}. The actual element of \marg{list} is available as |#1|. + In other words, \meta{command} is invoked for every element of \meta{list}. The actual element of \meta{list} is available as |#1|. As |\pgfplotsforeachungrouped|, this command does \emph{not} introduce extra scopes (i.e.\ it is ungrouped as well). - The difference to |\foreach \x in |\meta{list}\marg{command} is subtle: the |\x| would \emph{not} be expanded wheres |#1| is. + The difference to |\foreach \x in |\meta{list}\marg{command} is subtle: the |\x| would \emph{not} be expanded whereas |#1| is. \begin{codeexample}[] \pgfkeys{ otherstyle a/.code={[a]}, @@ -2852,7 +3172,7 @@ All collected = \allcollected. {\pgfkeys{key #1/.style={otherstyle #1}}} Invoke them: \pgfkeys{key a} \pgfkeys{key b} \pgfkeys{key c} \pgfkeys{key d} \end{codeexample} -The counter example would use a macro (here |\x|) as loop argument: +The counterexample would use a macro (here |\x|) as loop argument: \begin{codeexample}[] \pgfkeys{ otherstyle a/.code={[a]}, @@ -2864,10 +3184,11 @@ The counter example would use a macro (here |\x|) as loop argument: Invoke them: \pgfkeys{key a} \pgfkeys{key b} \pgfkeys{key c} \pgfkeys{key d} \end{codeexample} - \paragraph{Restrictions:} you can't nest this command yet (since it does not introduce protection by scopes). + \paragraph{Restrictions:} You cannot nest this command yet (since it does not introduce protection by scopes). \end{command} \printindex \bibliographystyle{abbrv} %gerapali} %gerabbrv} %gerunsrt.bst} %gerabbrv}% gerplain} \bibliography{pgfplots} \end{document} +% vi: spell spelllang=en diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstodo.pdf b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstodo.pdf Binary files differindex 95b5d72bc56..d05525c74a2 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstodo.pdf +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstodo.pdf diff --git a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstodo.tex b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstodo.tex index 8711ef082e8..69467841566 100644 --- a/Master/texmf-dist/doc/latex/pgfplots/pgfplotstodo.tex +++ b/Master/texmf-dist/doc/latex/pgfplots/pgfplotstodo.tex @@ -23,7 +23,7 @@ \emergencystretch=15pt \author{Christian Feuers\"anger} -\title{Todolist for PGFPlots} +\title{Todolist for PGFPlots\\\texttt{\small\pgfplotscommandtostring\pgfplotsrevision\temp\temp}} \begin{document} \maketitle @@ -32,53 +32,80 @@ last test verifications: -\begin{tabular}{llll} - & pgf CVS & pgf 2.00 &pgf 2.00+compat=default\\ -pgfplotstests & for 1.4 & for 1.4 &2009-12-30 \\ -manual & for 1.4 & for 1.4 & \\ -pgfplotstable.pdf & for 1.4 & for 1.4\\ -example latex & for 1.4 & 2009-12-30 \\ -example context & for 1.4 & 2009-12-30 \\ -example plain tex & for 1.4 & 2009-12-30 \\ +\begin{tabular}{lllll} + & pgf CVS & pgf 2.10 & pgf 2.00 &pgf 2.00+compat=default\\ +pgfplotstests & for 1.5 & for 1.5 & for 1.4 &2009-12-30 \\ +manual & for 1.5 & for 1.5 & for 1.5 & \\ +pgfplotstable.pdf & for 1.5 & for 1.5 & for 1.5\\ +example latex & for 1.5 & for 1.5 & 2009-12-30 \\ +example context & for 1.5 & for 1.5 & 2009-12-30 \\ +example plain tex & for 1.5 & for 1.5 & 2009-12-30 \\ tests context & for 1.4 &\\ \end{tabular} -\section{Components planned for version 1.5} +\section{Future work} \begin{itemize} -\item hist 98\% (complete UI?) -\item quiver 95\% (test, shall I create an UI for autoscaling of arrows?) +\item docs: replace `\verb|row sep=\\|' by newlines, it should work now!\ok +\item docs: search for FIXME +\item hist 98\% \ok +\item quiver 95\% \ok \item contours 95\% ready. - add "labels=if less than X" + add "labels=if less than X" ? + + contour gnuplot currently works if and only if the mesh contains end-of-scanline markers and is in ordering x varies (everything gnuplot-specific) + + documentation is incomplete \ok \item[perhaps] contour filled 10\% ready +\item plot graphics 3D: + \begin{itemize} + \item Documentation \ok + \item datascaling + \end{itemize} \item patch plots lib: 95\% \begin{itemize} \item implement displacement input \item bug for quad rectangle in middle point - \item perhaps 1d quadratic/cubic patches (simple)? + \item \ok perhaps 1d quadratic/cubic patches (simple)? + \item \ok color data per patch, also for connectivity data + \item document 'shader=flat' in patchplot lib + \item document miter limit and line join options. miter limit=1 is good, use it\ok + + $\rightarrow$ perhaps \verb|miter limit=1| as initial config for \verb|patch| plots?\ok \end{itemize} -\item polar axes: 70\% ready +\item polar axes: 90\% ready \begin{itemize} - \item undocumented - \item missing feature: input of cartesian coords - \item special cases (?) + \item Documentation \ok + \item missing feature: input of cartesian coords \ok + \item special cases \ok (?) + \item tests \end{itemize} -\item ternary: 80\% ready +\item ternary: 95\% ready \begin{itemize} \item but there are still quite a lot of feature request concerning them - \item konnodalplots (? implement in new branch to check difficulty) + \item konnodalplots 90\% ready \end{itemize} -\item smith charts: 0\% ready, but implementation should be simple with what I have +\item smith charts: 90\% ready now - $\rightarrow$ implement in new branch + \begin{itemize} + \item the huge smith chart is sub-optimal + \item perhaps enough for the first stable? +\end{itemize} \item internal coordmath framework: 80\% ready, but not used everywhere and undocumented \item layer graphics support for axes 0\% (should be easy, implement in new branch) + \begin{itemize} + \item new key \verb|/pgfplots/on layer| and \verb|/pgfplots/use layers=<sequence>| (or empty value) + \item give the key a family such that it won't be extracted from styles + \item the \verb|use layers| activates that stuff. Perhaps it can be set automatically somehow? + Perhaps with advanced key filtering? Or I provide an error message if \verb|on layer| is used although \verb|use layers| is off. + \item provide a set of positions where the \verb|on layer| key is checked + \end{itemize} \item view configuration: \begin{itemize} - \item document gnuplot import/export + \item \ok document gnuplot import/export \item view matrix input? \end{itemize} \item check 'empty lines' feature -> should have compat mode @@ -91,21 +118,243 @@ tests context & for 1.4 &\\ \end{itemize} \end{itemize} + +\section{Documentation todo} \begin{bugtracker} -\begin{bug} -Test fuer bugtracker: + +\begin{doctodo} + bei dem Bsp-Tex zu pgfplotstable scheint eine Zeile im Tex-File zu fehlen: +\verb|\usepackage{pgfplotstable}| + +Außerdem wäre es zum Einstieg für das aus der Datei lesen schön, wenn es +zu den Daten auch ein kurzes Beispiel-File für einen Plot gäbe. +\end{doctodo} + +\begin{doctodo}[+] +document the possibiliy of skewed 3d axes by means of manually provided unit vectors +\end{doctodo} + + +\begin{doctodo}[+] + the \verb|\addplot table from| is still supported -- document a footnote about the ``from'' keyword. +\begin{verbatim} + \begin{tikzpicture} + \begin{axis} + % All these things are valid: + \pgfplotstableread{data-set-two.txt}\datatable + \addplot table[y = c] {\datatable} ; + \addplot table[y = d] \datatable ; + \addplot table[y = a] from \datatable ; + \addplot table[y = b] from {\datatable} ; + \end{axis} + \end{tikzpicture} +\end{verbatim} +\end{doctodo} + +\begin{doctodo}[+] + contour: documentation is missing in large parts. + + mentioning of point meta is missing . +\end{doctodo} + +\begin{doctodo} + document the new 'data cs' feature +\end{doctodo} + +\begin{doctodo}[+] + Document how to make mesh plots with (white) filled cells (see matlabs mesh function). + + Should be the same as surf with faceted color=white. +\end{doctodo} + +\begin{doctodo}[+] + Document \verb|scale mode| and other plot graphics related fine tunings +\end{doctodo} + +\begin{doctodo}[+] + improve docs for \verb|\pgfplotsforeachungrouped|: + +\begin{verbatim} + \pgfplotsforeachungrouped \i/\j in { + 1 / a, + 2 / b, + 3 / c + }{ + \edef\temp{\noexpand\node at (axis cs: \i,0.5) {\j};} + % \show\temp % zum verstaendnis, was als resultat dann in \temp steht + \temp + } +\end{verbatim} + +\begin{verbatim} + \pgfplotsforeachungrouped \i/\j in { + 1 / a, + 2 / b, + 3 / c + }{ + I = \i, J = \j; + } +\end{verbatim} +\end{doctodo} + +\begin{doctodo}[open] + mention \verb|xtick=data| in docs for \verb|symbolic x coords| +\end{doctodo} + +\begin{doctodo}[+] + provide more examples and more detailed docs for \verb|xbar| and \verb|ybar| plot handlers + + docs: Wie gehabt, die +Groesse, Aufloesung und die Zuordnung der Axen etwas detailierter zu +beschreiben waere so mein Tip + + Example files: \begin{minimal} -\documentclass{article} +\documentclass[a4paper]{report} +\usepackage{pgfplots} +\pgfplotsset{compat=1.3} \begin{document} -Hallo Welt +\begin{tikzpicture} + \begin{axis}[ + xbar, + width=12cm, + height=3.5cm, + enlarge y limits=0.5, + xlabel={\#participants}, + xmin=0, + symbolic y coords={no,yes}, + ytick=data, + nodes near coords, + nodes near coords align={horizontal}, + ] + \addplot coordinates {(3,no) (7,yes)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + xbar, + width=12cm, + height=3.5cm, + enlarge y limits=0.5, + xlabel={\#participants}, + symbolic y coords={no,yes}, + ytick=data, + nodes near coords, + nodes near coords align={horizontal}, + ] + \addplot coordinates {(1,no) (9,yes)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + xbar, + width=12cm, + height=3.5cm, + enlarge y limits=0.5, + xlabel={\#participants}, + xmin=0, + symbolic y coords={set A,set B}, + ytick=data, + nodes near coords, + nodes near coords align={horizontal}, + ] + \addplot coordinates {(6,set A) (4,set B)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar, + enlargelimits=0.15, + xlabel={\# of bananas}, + ylabel={\#participants}, + ytick={0,1,2,3}, + ymin=0, + symbolic x coords={1,2,3,4,5,more}, + nodes near coords, + ] + \addplot coordinates {(1,1) (2,1) (3,3) (4,2) (5,1) (more,2)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar stacked, + enlargelimits=0.15, + legend style={at={(0.5,-0.20)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={tool1, tool2, tool3, tool4, tool5, tool6, tool7}, + xtick=data, + x tick label style={rotate=45,anchor=east}, + ] + \addplot+[ybar] plot coordinates {(tool1,0) (tool2,2) (tool3,2) (tool4,3) (tool5,0) (tool6,2) (tool7,0)}; % never + \addplot+[ybar] plot coordinates {(tool1,0) (tool2,0) (tool3,0) (tool4,3) (tool5,1) (tool6,1) (tool7,0)}; % rarely + \addplot+[ybar] plot coordinates {(tool1,6) (tool2,6) (tool3,8) (tool4,2) (tool5,6) (tool6,5) (tool7,6)}; % sometimes + \addplot+[ybar] plot coordinates {(tool1,4) (tool2,2) (tool3,0) (tool4,2) (tool5,3) (tool6,2) (tool7,4)}; % often + \legend{never, rarely, sometimes, often} + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar, + enlargelimits=0.15, + legend style={at={(0.5,-0.15)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={tool8,tool9,tool10}, + xtick=data, + nodes near coords, + nodes near coords align={vertical}, + ] + \addplot coordinates {(tool8,7) (tool9,9) (tool10,4)}; + \addplot coordinates {(tool8,4) (tool9,4) (tool10,4)}; + \addplot coordinates {(tool8,1) (tool9,1) (tool10,1)}; + \legend{used,understood,not understood} + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar, + enlargelimits=0.15, + legend style={at={(0.5,-0.2)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={excellent,good,neutral,not good,poor}, + xtick=data, + nodes near coords, + nodes near coords align={vertical}, + x tick label style={rotate=45,anchor=east}, + ] + \addplot coordinates {(excellent,0) (good,8) (neutral,2) (not good,0) (poor,0)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[ + ybar, + enlargelimits=0.15, + legend style={at={(0.5,-0.2)}, + anchor=north,legend columns=-1}, + ylabel={\#participants}, + symbolic x coords={excellent,good,neutral,not good,poor}, + xtick=data, + nodes near coords, + nodes near coords align={vertical}, + x tick label style={rotate=45,anchor=east}, + ] + \addplot coordinates { (excellent,0) (good,7) (neutral,3) (not good,0) (poor,0)}; + \end{axis} +\end{tikzpicture} \end{document} \end{minimal} -\end{bug} -\end{bugtracker} +\end{doctodo} -\section{Documentation todo} -\begin{bugtracker} \begin{doctodo}[-] release notes: mention improvements of 'shader=interp' @@ -128,7 +377,7 @@ Hallo Welt document 'shader=faceted interp' \end{doctodo} -\begin{doctodo}[-] +\begin{doctodo}[+] document 'mesh/type' \end{doctodo} @@ -148,7 +397,7 @@ Hallo Welt contour external: Do not forget the \verb|\", \'| etc special handling . \end{doctodo} -\begin{doctodo}[-] +\begin{doctodo}[+] contour: document 'labels over line' style \end{doctodo} @@ -156,7 +405,7 @@ Hallo Welt contour: a change label dist \end{doctodo} -\begin{doctodo}[-] +\begin{doctodo}[+] contour: document the special handling of "point meta". \end{doctodo} @@ -181,7 +430,7 @@ Hallo Welt document /pgfplots/empty line \end{doctodo} -\begin{doctodo}[-] +\begin{doctodo}[+] document 'clickable coords' and 'clickable coords code' features \end{doctodo} @@ -189,15 +438,12 @@ Hallo Welt document 'execute at begin axis' and its new variants \end{doctodo} - There's a tiny typo in pgfplots manual: - \verb| \addplot table[x index=0,y index=0,header=false]| - on page 18. The second index should be 1, not 1. \begin{doctodo}[-] document how to plot against the coordindex \end{doctodo} -\begin{doctodo}[-] +\begin{doctodo}[+] document the new 'getcolumnbyname={create col/....}' feature \end{doctodo} @@ -215,7 +461,7 @@ Hallo Welt example \end{doctodo} -\begin{doctodo}[-] +\begin{doctodo}[+] colorbar styles are not consistent between docs and code \end{doctodo} @@ -237,9 +483,159 @@ Hallo Welt \end{bugtracker} -\section{Bugs in PGF/TikZ} +\section{Bugs/Features in PGF/TikZ} \begin{bugtracker} +\begin{pgfbug} + number printer: apply + \verb|set thousands separator={\cdot}| also to fractional parts: +\begin{minimal} +\documentclass{article} + \usepackage{pgf} + \pgfset{/pgf/number format/.cd, + set thousands separator={{{\cdot}}}, + precision=5, + } +\begin{document} + \pgfmathprintnumber{12345.54321} \par + $12 \cdot 2345.543 \cdot 21$ expected \par +\end{document} +\end{minimal} +\end{pgfbug} + +\begin{pgfbug} + When reading the manual v2.0 I found a typo 5.1 "Styling the +nodes". +Just after the first block of code, there is a sentence saying +"... can achieve them. Once way is to use ..." which should +be "One way is to use ..." + +\end{pgfbug} + +\begin{pgfbug} + Beamer + pgf: the default template introduces a white line on top. Interestingly, it happens only for PGF CVS + beamer, but it appears to be dependent on third-party tools as well (see mail conversation with Stefan Tibus) +\end{pgfbug} + +\begin{pgfbug} +When using externalize function together with a transform canvas, the result is somehow croped. See this example, compare output with deativated and activated externalize. +\begin{verbatim} + +\documentclass{article} +\usepackage{tikz} +\usetikzlibrary{external} +\tikzexternalize % activate! +\begin{document} +\begin{tikzpicture}[transform canvas={scale=0.7}] +\node {root} +child {node {left}} +child {node {right} +child {node {child}} +child {node {child}} +}; +\end{tikzpicture} +A simple image is \tikz \fill (1,0) circle(5pt);. +\end{document} +\end{verbatim} +\end{pgfbug} + +\begin{pgfbug}[open] + pgf users Vol 50 issue 6: +\begin{verbatim} + Hi, + +Thanks for TikZ. I'm trying to use the externalization library with +the class file gOMS2e.cls, which is provided for the journal +Optimization Methods and Software. The class file and related +files/documentation can be found here: +http://www.tandf.co.uk/journals/authors/gomslatex.zip + +My problem is that the externalized figures are shifted up and to the +left significantly, cutting them off. This problem does not occur +when not using externalization. +This seems to be related to the problem discussed here: +http://sourceforge.net/tracker/index.php?func=detail&aid=3037831&group_id=142562&atid=752792 +and may also be related to this one: +http://sourceforge.net/mailarchive/forum.php?thread_name=4C0F342B.5040008%40ins.uni-bonn.de&forum_name=pgf-users + +In the other cases, the solution was to use \tikzifexternalizing for +whatever conflicts with the externalization, but it seems that I can't +do this when my class file is the offending bit. Is this true? I +would really like to be able to use the correct \documentclass to +generate the figures so that the size/fonts/etc. are consistent +throughout the resulting document. + +A minimal test example is included at the end of this message. It +appears that the image is shifted ~1.25cm to the left and ~0.8cm up. +The problem goes away when using \documentclass{article}. +I'm using the CVS version of pgf, and I get the same result when I +produce postscript figures by using latex and setting + \tikzset{external/system call={ + latex \tikzexternalcheckshellescape -halt-on-error +-interaction=batchmode -jobname "\image" "\texsource"; + dvips -o "\image".ps "\image".dvi}} + +%---------------------------------------------------------------------------------- +\documentclass[printer]{gOMS2e} +\usepackage{tikz} +\usetikzlibrary{external} +\tikzexternalize +\begin{document} +\begin{center} + \begin{tikzpicture} + \draw[step=.5cm] (-3,-3) grid (3,3); + \draw[blue,line width=2mm] (-0.5,-3) -- (-0.5,1.2) -- (3,1.2); + \end{tikzpicture} +\end{center} +\end{document} +%---------------------------------------------------------------------------------- + +Any help would be appreciated; I'm afraid it's over my head at this point. +Thanks! +\end{verbatim} + +\end{pgfbug} + +\begin{pgfbug}[open] + \verb|\pgfmathdivide@{-0.8}{1.00002}\pgfmathresult| yields + + \makeatletter + \pgfmathdivide@{-0.8}{1.00002}\pgfmathresult + + instead of -0.8 +\end{pgfbug} + +\begin{pgfbug} +\begin{verbatim} +\documentclass{article} +\usepackage{german} +\usepackage[utf8]{inputenc} % erlaubt direkte Nutzung von Umlauten + +\usepackage{pgfplots} % fuer plots + +\usepackage{pgfplotstable} % fuer numeriktabellen +\usepackage{array,colortbl,booktabs} +\usetikzlibrary{external} +\tikzexternalize[force remake] + +% DOESN'T WORK. Needs to disable externailization +\usepackage{vmargin} +\setpapersize{A4} +\setmarginsrb{2.5cm}{1cm}{2cm}{2cm}{8mm}{15mm}{5mm}{15mm} + +\begin{document} +\begin{tikzpicture} +%\tracingmacros=2 \tracingcommands=2 + \begin{axis} + \addplot {x}; + \end{axis} +\end{tikzpicture} +\end{document} +\end{verbatim} +\end{pgfbug} +\begin{pgfbug}[+] + Implement support for space trimming and empty entries in \verb|\usetikzlibrary| and its variants +\end{pgfbug} + \begin{pgfbug}[-] external bug: \begin{verbatim} @@ -372,10 +768,518 @@ Hallo Welt \end{bugtracker} +% BUGS \section{Bugs in PGFPlots} \begin{bugtracker} -\begin{bug}[-] + +\begin{bug} +the below example of a latex file gives the following error upon the 2nd run of latex. The first run works fine. This happens both when running dvilualatex and just latex, both from TexLive 2011. + +The error: + +\begin{verbatim} +... +(/usr/local/texlive/2011/texmf-dist/tex/generic/tex4ht/color.4ht) +(/usr/local/texlive/2011/texmf-dist/tex/generic/tex4ht/html4.4ht) +(/usr/local/texlive/2011/texmf-dist/tex/generic/tex4ht/html4-math.4ht)) +(./epub.aux) +! Missing \endcsname inserted. +<to be read again> + \protect +l.30 \ref{govconsumptionlegend} + +? +\end{verbatim} + + +\begin{verbatim} +\makeatletter + +\def\HCode{\futurelet\HCode\HChar}\def\HChar{\ifx"\HCode\def\HCode"##1"{\Link##1}\expandafter\HCode\else\expandafter\Link\fi}\def\Link#1.a.b.c.{\g@addto@macro\@documentclasshook{\RequirePackage[#1,html]{tex4ht}}\let\HCode\documentstyle\def\documentstyle{\let\documentstyle\HCode\expandafter\def\csname tex4ht\endcsname{#1,html}\def\HCode####1{\documentstyle[tex4ht,}\@ifnextchar[{\HCode}{\documentstyle[tex4ht]}}} + +\makeatother + +\HCode "xhtml,png,charset=utf-8".a.b.c. + + +\documentclass[11pt,a4paper]{book} + +\def\pgfsysdriver{pgfsys-tex4ht.def} +\usepackage{pgfplots} + +\pgfplotsset{width=\textwidth,compat=1.3,every axis/.append style={font=\footnotesize},cycle list name=black white} + +\begin{document} +\begin{tikzpicture} + +\begin{axis}[ylabel=\%,x tick label style={ /pgf/number format/1000 sep=},ymin=0,xmin=1950,xmax=2009,legend to name=govconsumptionlegend,title=Government Consumption Share of PPP Converted GDP Per Capita at 2005 constant prices] +\addplot[smooth,solid] coordinates { +(1950,12.98732304) (1951,11.18937899) (1952,10.63447043) (1953,11.25741618) (1954,11.35201741) (1955,10.98310036) (1956,11.27808626) (1957,11.06275337) (1958,11.21626046) (1959,11.18458192) (1960,11.02716074) (1961,10.97486816) (1962,10.19712891) (1963,8.50170024) (1964,8.220444391) (1965,8.181873469) (1966,7.859215042) (1967,8.269806768) (1968,8.023789126) (1969,7.867343418) (1970,8.469691612) (1971,8.352726749) (1972,9.263915297) (1973,7.560088984) (1974,7.436700475) (1975,9.207375031) (1976,9.725811776) (1977,9.495010597) (1978,13.74144043) (1979,22.99348928) (1980,23.05639171) (1981,24.02424559) (1982,28.25010594) (1983,35.38307779) (1984,40.11885923) (1985,43.3304334) (1986,44.7847218) (1987,46.7237337) (1988,35.62924609) (1989,30.65659214) (1990,39.89428582) (1991,27.48910619) (1992,24.75024034) (1993,24.68286164) (1994,23.26013887) (1995,23.69594547) (1996,22.53334681) (1997,21.35901868) (1998,21.53873871) (1999,22.22968487) (2000,21.95238646) (2001,21.3231532) (2002,21.29835897) (2003,21.6183452) (2004,21.30177929) (2005,21.51748623) (2006,20.88675316) (2007,20.32549306) (2008,21.13794484) (2009,21.75075984) +}; +\addlegendentry{Country 1} +\addplot[smooth,dotted] coordinates { +(1950,8.90574995) (1951,9.181850378) (1952,9.4040808) (1953,9.790597533) (1954,9.766571438) (1955,9.721345475) (1956,9.898347958) (1957,9.986947451) (1958,10.13725015) (1959,10.11995062) (1960,9.9669931) (1961,9.781482565) (1962,9.968596797) (1963,10.33417822) (1964,10.07453069) (1965,10.17668623) (1966,10.4859246) (1967,10.6188237) (1968,10.93369976) (1969,11.01396095) (1970,11.25808879) (1971,11.43128231) (1972,11.45138898) (1973,11.36045323) (1974,11.33276575) (1975,11.50069671) (1976,11.72466305) (1977,12.25394557) (1978,12.52158998) (1979,12.61603185) (1980,12.68712893) (1981,13.01282874) (1982,12.97669774) (1983,12.92432378) (1984,12.72145426) (1985,12.63447969) (1986,12.49591698) (1987,12.22704263) (1988,12.05291461) (1989,12.07675903) (1990,12.25254614) (1991,12.74485006) (1992,13.14305947) (1993,13.41082617) (1994,12.89670369) (1995,12.41585298) (1996,12.34588672) (1997,12.01926401) (1998,12.00221677) (1999,11.69852271) (2000,11.11468531) (2001,11.08248726) (2002,11.05693806) (2003,10.89817902) (2004,10.44900187) (2005,10.05582475) (2006,9.829361577) (2007,9.567882534) (2008,9.714898563) (2009,10.42225882) +}; +\addlegendentry{Country 2} +\end{axis}\end{tikzpicture} + +\ref{govconsumptionlegend} + +\end{document} +\end{verbatim} +\end{bug} + +\begin{bug}[+] + the table package does not support non-ASCII column names. If there are non-ASCII column names, it might fail to produce a readable error message. +\end{bug} + +\begin{bug} + \#3213889 hyperref boxes are in wrong position for vertical labels + + see \url{http://tex.stackexchange.com/questions/13364/how-to-make-pgfplots-vertical-labels-have-proper-hyperref-erence-box +} for problem description and potential fixes + +\end{bug} + +\begin{bug} +CRASH: +\begin{minimal} +\begin{tikzpicture} + \begin{axis}[ + scale mode=scale uniformly, + x={(1pt,0pt)}, + y={(-0.5pt,0.5pt)}, + z={(0pt,1pt)}, + ] + + % addplot3 works (with 3d coords): + \addplot coordinates { + (0,0) (1,0) (0,1) + }; + + \end{axis} +\end{tikzpicture} +\end{minimal} +\end{bug} + +\begin{bug} + Using $0$ in pgfplots coordinate systems does not necessarily mean ``no offset''. This is misleading. Bug sourceforge \#3168030: +\begin{minimal} +\documentclass[a4paper]{article} +\usepackage{german} +\usepackage[utf8]{inputenc} + +\usepackage{pgfplots} + +\usepackage{pgfplotstable} +\usepackage{booktabs} +\usepackage{array} +\usepackage{colortbl} + +\begin{document} + +\begin{tikzpicture} + \begin{axis}[enlarge x limits=false, extra description/.code={\draw[very thick] (axis cs:2.5,0) -- ++(rel axis cs:0,1.1) node[above,align=center,font=\small]{important};} ] + \addplot coordinates{ + (0,1) + (1,2) + (2,3) + (3,4) + (4,5)}; + \end{axis} +\end{tikzpicture} + +\begin{tikzpicture} + \begin{axis}[enlarge x limits=true, extra description/.code={\draw[very thick] (axis cs:2.5,0) -- ++(rel axis cs:0,1.1) node[above,align=center,font=\small]{important};} ] + \addplot coordinates{ + (0,1) + (1,2) + (2,3) + (3,4) + (4,5)}; + \end{axis} +\end{tikzpicture} +\end{document} + + +\end{document} + +\end{minimal} +\end{bug} +\begin{bug} + The clipping of tick lines uses the middle of axis lines; it does not incorporate the line width of the axis lines. +\begin{minimal} +\documentclass{article} +\usepackage{pgfplots} +\pgfplotsset{compat=1.3, + every axis/.append style={semithick}, + every tick/.append style={semithick,color=black}, + tick align=outside + } +\begin{document} + \thispagestyle{empty} + \begin{figure}[p] + \centering + \begin{tikzpicture} + \begin{axis}[xmin=0, + xmax=30, + ymin=0, + ymax=1.2 + ] + \end{axis} + \end{tikzpicture} + \end{figure} +\end{document} + +\end{minimal} +\end{bug} + +\begin{bug} +can someone confirm the following behavior. The y label of a plot gets +truncated in some circumstances if the external library is used. This +happens for me if no title is specified for a plot. Consider the +following example: + +\begin{minimal} +\documentclass[11pt,a4paper]{article} + +\usepackage{tikz} +\usepackage{pgfplots} + +\pgfplotsset{compat=1.3} +\usepgfplotslibrary{external} +\tikzexternalize[force remake] + +\begin{document} +\begin{tikzpicture} +\begin{axis}[y tick scale label style={inner sep=1pt}] +\addplot {x * 10^8}; +\end{axis} +\end{tikzpicture} +\end{document} + +\end{minimal} +\end{bug} +\begin{bug} + Decorations in plots appear to be problematic: +\begin{minimal} +\documentclass{scrartcl} + +\usepackage{pgfplots} +\usetikzlibrary{decorations} + +\begin{document} +\begin{tikzpicture} + +\begin{axis} + +\addplot+[postaction={draw, decorate, decoration=border}] coordinates {(0,0) (5,0.5)}; %funktioniert nicht + +\end{axis} + +\draw [postaction={draw, decorate, decoration=border}] (0,-3cm) -- ++(5cm,0.5cm); %funktioniert + +\end{tikzpicture} +\end{document} +\end{minimal} + +\end{bug} + +\begin{bug} + Markers in legends are not (always?) filled properly +\begin{minimal} +\documentclass{article} + \usepackage{pgfplots} + \usepackage{pgfplotstable} +\begin{document} + + \begin{tikzpicture} + \begin{axis} + \addplot [mark=*,only marks] coordinates { (-1,1) (1,-1) }; + \legend{measured data} + \end{axis} + \end{tikzpicture} +\end{document} +\end{minimal} +\end{bug} + +\begin{bug} + polar lib: the clipping of markers doesn't work correctly for partial polar axes. +\end{bug} + +\begin{bug} + The legend has the \verb|text depth=0.15em| initial configuration, which is extremely bad for legend entries with huge depth (large fractionals or formulas?) +\end{bug} + +\begin{bug} + \url{http://groups.google.at/group/comp.text.tex/msg/adcb1d071c2cba40} + + If I use a yshift in a scope to draw two graphs superimposed, the x +label in the second plot (the one in the yshift scope) is not +positioned correctly. I need to manually add another yshift, with the +same value in the opposite direction, to get the label at the correct +place. This happens if the \verb|axis x line = middle| option is used. +Without that option, the x label is positioned correctly. Example +follows: +\begin{minimal} +\documentclass{article} + +\usepackage{pgfplots} + +\pgfplotsset{compat=1.3} + +\begin{document} + + \begin{tikzpicture} + \begin{axis}[width=10cm,height=3cm,xlabel={$x$}] + \addplot coordinates { + (0,1) (1,-1) (2,1) + }; + \end{axis} + \begin{scope}[yshift=-3cm] + \begin{axis}[width=10cm,height=3cm,xlabel={$x$}, + axis x line = middle] + \addplot coordinates { + (0,1) (1,-1) (2,1) + }; + \end{axis} + \end{scope} + \end{tikzpicture} +\end{document} +\end{minimal} + +Using \verb|xlabel style = {yshift=3cm}| in the second plot will correctly +position the x label (to its default position). + +Gab +\end{bug} + +\begin{bug}[prio=2,closed] + One cannot load the clickable lib before pgfplots: +see also \url{https://sourceforge.net/tracker/?func=detail&atid=1060656&aid=3033981&group_id=224188} +\end{bug} + +\begin{bug}[closed] + the unit vector ratio impl does not work as intended: the manual example +\begin{minimal} +\documentclass{article} + +\usepackage{pgfplots} +\begin{document} +\begin{tikzpicture} +\begin{axis}[axis equal] +% FokkerDrI_layer_0.patches.dat contains: +% # each row is one vertex; three consecutive +% # vertices make one triangle (patch) +% 105.577 -19.7332 2.85249 +% 88.9233 -21.1254 13.0359 +% 89.2104 -22.1547 1.46467 +% # end of facet 0 +% 105.577 -19.7332 2.85249 +% 105.577 -17.2161 12.146 +% 88.9233 -21.1254 13.0359 +% # end of facet 1 +\addplot3[patch] + file + {plotdata/FokkerDrI_layer_0.patches.dat}; +\end{axis} +\end{tikzpicture} +\end{document} +\end{minimal} + fails and resorts to guesses! +\end{bug} + +\begin{bug} + \verb|\addplot table[blue]| ignores the color options! +\end{bug} + +\begin{bug} + providing \verb|ymin=0| for a logarithmic axes has no effect; and there is no sanity checking +\end{bug} + +\begin{bug}[prio=1] + The \verb|mark list| produces a lot of + +\begin{verbatim} +\XC@edef #1#2->\begingroup \ifnum \catcode `\!=13 \edef !{\string !}\fi \ifnum \catcode `\:=13 \edef :{\string :}\fi \ifnum \catcode `\-=13 \edef -{\string -}\fi \ifnum \catcode `\+=13 \edef +{\string +}\fi \ifnum \catcode `\;=13 \edef ;{\string ;}\fi \ifnum \catcode `\"=13 \edef "{\string "}\fi \ifnum \catcode `\>=13 \edef >{\string >}\fi \edef #1{#2}\@onelevel@sanitize #1\aftergroupdef #1#1 +[........] +{\if} + +\@@tmp ->.!80!black +{true} +{the character !} +Missing character: There is no ! in font nullfont! +{the character 8} +Missing character: There is no 8 in font nullfont! +{the character 0} +Missing character: There is no 0 in font nullfont! +{the character !} +Missing character: There is no ! in font nullfont! +{the character b} +Missing character: There is no b in font nullfont! +{the character l} +Missing character: There is no l in font nullfont! +{the character a} +Missing character: There is no a in font nullfont! +{the character c} +Missing character: There is no c in font nullfont! +{the character k} +Missing character: There is no k in font nullfont! +{\def} +{\else} +\end{verbatim} + bugs. Probably fixed with more recent version of xcolor? +\end{bug} + +\begin{bug}[closed] + It is not possible to provide \verb|#| comments in inline tables. +\begin{verbatim} +\pgfplotstabletypeset[ +]{ +# GHz dB +1 0 +2 -10 +3 0 +} +\end{verbatim} + The problem occurs since the \verb|#| has special handling and many internal checks fail. I started to implement special handling, but that might require vast changes. + + One solution is to use +\begin{verbatim} +\toks0={#1} +\edef\macro{\the\toks0} +\end{verbatim} + instead of +\begin{verbatim} +\def\macro{#1} +\end{verbatim} + anywhere in the code -- the \verb|\def| introduces special checks for the \verb|#| whereas the \verb|\toks| does not. +\end{bug} + +\begin{bug}[prio=2] + It is not possible to use \verb|\addplot ... node[pos=0.5] {a};| in pgfplots. + + Reason: the timer information is tikz high level, but pgfplots uses the PGF basic layer. +\end{bug} + + +\begin{bug}[closed] + Groupplots + named nodes doesn't yield the correct output. Perhaps scoping difficulties? Or problems adjusting the stored coords? +\begin{minimal} +\documentclass[10pt]{article} + +\usepackage{pgfplots} +\usepgfplotslibrary{groupplots} + +\begin{document} + +\begin{tikzpicture}% +%\begin{axis}[% +\begin{groupplot}[% + group style={group size=1 by 1},% +]% + \nextgroupplot; + \node[name=a] at (axis cs:0.1,-1) {N}; + \addplot coordinates{(0,1) (1,2)}; +\end{groupplot} +%\end{axis} + +\draw (a) circle (5pt); +\end{tikzpicture}% +\end{document} +\end{minimal} +\end{bug} + +\begin{bug} + providing \verb|\legend{}| without any \verb|\addplot| commands causes a problem +\end{bug} + +\begin{bug}[prio=3] + It is not (properly) possible to provide \verb|surf| to \verb|\addplot|. +\begin{verbatim} +\begin{tikzpicture} +\begin{axis}[] + \addplot[surf,domain=0:720,samples y=25] {cos(x)*sin(y)};% +\end{axis} +\end{tikzpicture} +! Package pgfplots Error: Sorry, you can't use 'y' in this context. PGFPlots expected to sample a line, not a mesh. Please use the [mesh] option combined with [samples y>0] and [domain y!=0:0] to indicate a twodimensional input domain. +\end{verbatim} + + OK, I've been working on it: + \begin{itemize} + \item it is now possible to use \verb|\addplot[surf]| and it works. + \item it is \emph{not} yet possible to \emph{sample} matrices with \verb|\addplot[surf]|. + + I added the \verb|sample dim| key. But it does not work yet... the plot expression implementation needs to be refactored. + \end{itemize} +\end{bug} + +\begin{bug}[closed] + Verify that the list termination (either with \verb|\\| or with \verb|,|) works correctly +\end{bug} + +\begin{bug}[closed] + ternary lib: \verb|\addplot| doesn't work correctly, only \verb|\addplot3| +\end{bug} + +\begin{bug}[open] + after using a preset key (milli) with x SI prefix, Next, I want to switch to the normal mode, so I write simply: x SI prefix=none, unfortunately the 'none' value is undefined and the compilation can not proceed +\end{bug} + +\begin{bug}[closed] +I'm trying to create an extra y tick on a plot, but I want the tick and +label to be on the right side of the plot. I want all the other y ticks +and labels are all on the left side of the plot. + +It's almost working properly, but it won't put the extra label on the +right side of the plot where I want it. The tick is appearing on the +right side, but the label is staying on the left side with all the other +labels. I was using version 1.2.2 before and this was working fine, but +I just upgraded to version 1.4 because I wanted to use a new feature +that wasn't present in 1.2.2. Is it possible this was broken somewhere +along the way? + +\begin{minimal} +\documentclass{article} +\usepackage{pgfplots} +\begin{document} +\begin{tikzpicture} +\begin{axis}[ + small, + width=12cm, + height=1.8in, + ymin=0, + ymax=10, + xmin=0, + xmax=2, + ybar, + ymajorgrids=true, + yminorgrids=false, + minor y tick num=0, + ytick pos=left, + xtick pos=left, + ytick align=center, + yticklabel={$\pgfmathprintnumber{\tick}\%$}, + xtick align=outside, + x tick style={}, + xticklabel style={rotate=45,anchor=east,font=\scriptsize\sffamily}, + extra y tick style={tick pos=right, ticklabel pos=right, grid +style={thick,color=black}}, + extra y ticks={6.25}, + extra y tick labels={Extra Label}, +] + +%\addplot plot[error bars/.cd,y dir=plus,y explicit,x dir=none] table +%[x=Index,y expr=100*\thisrow{AvgLocked},y error=Diff]{locked_tabbed.dat}; + +\end{axis} +\end{tikzpicture} +\end{document} +\end{minimal} +\end{bug} + +\begin{bug}[-,prio=3] the axis line combination styles can't be adjusted for 3D because they are evaluated too early. \end{bug} @@ -389,7 +1293,7 @@ Hallo Welt check y tick scale label for 2nd y axis \end{bug} -\begin{bug}[-] +\begin{bug}[closed] foreach variants in pgfplots accept only one parameter \begin{verbatim} % \foreach \x/\y in {1/a, 2/b, 3/c} @@ -407,11 +1311,6 @@ Hallo Welt \end{bug} \begin{bug}[-] - the 'xtick' syntax accepts only numbers, not even constant expressions are - possible (and 'pi' is even more complicated). -\end{bug} - -\begin{bug}[-] document INS 671 does not compile with pgfplots 1.4 and pgf 2.00 \end{bug} @@ -429,12 +1328,14 @@ Hallo Welt view normal vector does not correctly respect plot box ratio and x dir \end{bug} -\begin{bug}[-] +\begin{bug}[closed] plot box ratio has a strange input format (compare with unit vector ratio). \end{bug} \begin{bug}[-] clickable and Windows Acrobat Reader 9 has been reported to fail + + it this still active? \end{bug} \begin{bug}[-] @@ -443,7 +1344,7 @@ Here is an example which clarify this issue : \verb|\addplot+[mark=none,variable={\t}, samples at = {\foreach \x in {0,10,...,180,200,...340} {\x, }360}] ({sin(t*2)}, {cos(t)}); | \end{bug} -\begin{bug}[-] +\begin{bug}[-,prio=2] potential incompatibility: clickable and external. The clickable lib writes into pgfplots.djs which might cause multithreaded problems. \end{bug} @@ -453,7 +1354,7 @@ Here is an example which clarify this issue : \end{bug} -\begin{bug}[-] +\begin{bug}[+] 'clip=false' does not disable marker clipping! \end{bug} @@ -462,7 +1363,7 @@ Here is an example which clarify this issue : multiple ordinates: grid lines are drawn on top of function plots; that's bad. Check: I think you have to change the process line previousely invoked, and make the axes generation at the end : -1. generating adequate grid -$\leadsto$ 2. plotting functions -$\leadsto$ 3. creating axes, tick nodes... +1. generating adequate grid $\leadsto$ 2. plotting functions $\leadsto$ 3. creating axes, tick nodes... You can take a minute look at figure 1 @ "The addplot Command: Coordinate Input" section 4.2 p 19. and you can remark that colour filling overlaps x- and y-axis ! So I suggest that you use "excute at end picture=<axis generation code>" tikz option or similar to avoid this issue. \end{bug} @@ -505,7 +1406,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha \end{bug} -\begin{bug}[-] +\begin{bug}[-,closed] incompatibility pdfpages (most recent version), MikTeX and tikz external lib (something with shipout routine) \end{bug} @@ -526,7 +1427,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha \end{bug} -\begin{bug}[-] +\begin{bug}[-,closed] mesh/patch plots: - jump thing + z buffer=sort probably doesn't work \end{bug} @@ -550,7 +1451,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha the table/meta=2 default is wrong. \end{bug} -\begin{bug}[-] +\begin{bug}[-,prio=2] OK : 'every node near coord/.append style={scale=0.7}' NOT OK: 'every node near coord/.append style={scale=0.7},ybar' -$\leadsto$ sequence of shift and scale matters ... @@ -563,7 +1464,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha Perhaps that can be checked? \end{bug} -\begin{bug}[-] +\begin{bug}[-,prio=2] view={0}{90} and enlargelimits=auto is not always satisfactory: it disables enlarged limits, but for contours, I'd like to have it. What is to do? @@ -621,7 +1522,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha \end{bug} -\begin{bug}[-] +\begin{bug}[-,closed] the autodetection of the '\verb|\\|' list format is buggy: it should return true if and only if the last element is '\verb|\\|', not if '\verb|\\|' occurs inside of the argument. @@ -634,9 +1535,11 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha <list>). \end{bug} -\begin{bug}[-] +\begin{bug}[-,closed] '\verb|\addplot[only marks]|' does not assign a plot mark; one needs 'mark=*' explicitly. that's confusing... + + see also \url{https://sourceforge.net/tracker/?func=detail&atid=1060656&aid=3045389&group_id=224188} \end{bug} \begin{bug}[-] @@ -646,7 +1549,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha height! \end{bug} -\begin{bug}[-] +\begin{bug}[-,prio=1] the '/pgfplots/table/.search also' is overwritten during \verb|\addplot table| with /.search also={/pgfplots}. That's not so good. \end{bug} @@ -672,10 +1575,6 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha \end{bug} \begin{bug}[-] - the FPU has somewhere spaces; at least it treats them differently from pgfmathparse. -\end{bug} - -\begin{bug}[-] I have seen that 'plot table' with very large files can produce pool size problems -- even if the coordinates are all filtered away. In other words: the code can't simply read a file and throw its contents away. The problem appears to be some math parsing using the table/x expr and friends. @@ -687,7 +1586,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha axis lines and 3D: some tick lines are not drawn, see manual examples \end{bug} -\begin{bug}[-] +\begin{bug}[-,closed] check for placement of tick scale label for compat=newest $\leadsto$ I improved them for 2d and 3d $\leadsto$ needs some further checks, I guess @@ -702,7 +1601,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha one can't provide 'scale' as argument to a (3d) axis \end{bug} -\begin{bug}[-] +\begin{bug}[closed] getthisrow still has to be fixed \end{bug} @@ -734,13 +1633,6 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha \end{bug} \begin{bug}[-] - the compatibility things should be enabled automatically for some parts: - - 3D - - color bars - - reversed axes -\end{bug} - -\begin{bug}[-] plot coordinates doesn't check too well if 1. addplot3 is used but only two coords are given 2. addplot is given but three coordinates are provided (also for plot expression) @@ -765,7 +1657,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha \end{bug} -\begin{bug}[-] +\begin{bug}[closed] check whether /pgfplots/ keys are processed properly in legends. This is certainly not the case for the \verb|\label/\ref| legend! $\leadsto$ which ones are the problem? @@ -793,7 +1685,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha BUG: in empty axes, '\verb|xtick=\empty|' is ignored. \end{bug} -\begin{bug}[-] +\begin{bug}[closed] finish impl of ticklabel pos. I should use the same thing for tickpos as well. And: the default arg processing which uses ticklabel pos = tickpos needs to be @@ -823,7 +1715,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha need to be updated. \end{bug} -\begin{bug}[-] +\begin{bug}[closed] the \verb|\thisrow| commands in the table package does not (always) respect aliases! \end{bug} @@ -864,19 +1756,14 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha \end{bug} -\begin{bug}[-] +\begin{bug}[closed] the arguments to \verb|plot file[#1] and plot table[#1]| are not consistent with rest. They need to be treated as behavior options (maybe in a different key path). \end{bug} -\begin{bug}[-] - check behavior options provided to table[] and file[] and so - is that - correct? -\end{bug} - -\begin{bug}[-] +\begin{bug}[closed] verify that 'draw=none' works! Is something broken here? $\leadsto$ write tests! + it appears to be desired that (at least some) markers invoke @@ -901,7 +1788,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha My implementation works only if either ALL are box or ALL are 'middle'. \end{bug} -\begin{bug}[-] +\begin{bug}[closed] 3D case : grid lines work correctly, but they are not satisfactory. I'd like grid lines in the background only. \end{bug} @@ -964,8 +1851,90 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha \end{bugtracker} +% FEATURES \section{Feature Proposals PGFPlots} \begin{bugtracker} +\begin{feature} + Cases-statement in math parser +\end{feature} + +\begin{feature} + provide a way to provide more customization to stacked plots as in + + \verb|http://tex.stackexchange.com/questions/13627/pgfplots-multiple-shifted-stacked-plots-in-one-diagram| +\end{feature} + +\begin{feature} + the \verb|empty line| feature should produce a log notice when it finds an empty line in compat mode. +\end{feature} + +\begin{feature} + smith charts: provide the same as now, but mirrored (concentric from left end rather then right end) +\end{feature} + +\begin{feature} + Support something like '\verb|\addplot table[x symbolic expr={\thisrow{year}-\thisrow{month}-\thisrow{day}}]|'. +\end{feature} + +\begin{feature} + What about a `draft' mode which does nothing but typeset an empty axis without descriptions? +\end{feature} + +\begin{feature} + Provide features of an axis \emph{outside} of the axis environment. For a start, this could use the \texttt{axis cs} (or an alias to it). + + Details and examples: + + \url{https://sourceforge.net/tracker/?func=detail&atid=1060659&aid=3086794&group_id=224188} +\end{feature} + +\begin{feature} + add 'force 2d axis' key (or similar) +\end{feature} + +\begin{feature} + could you extend the /tikz/prefix key so it also works as a prefix for imported files/tables? +So far one has to type for example + \verb| \addplot table {plots/data/test.txt};| + +If there would be a search path like \verb|\graphicspath| for graphics it would be really nice. + + See also \url{https://sourceforge.net/tracker/?func=detail&atid=1060659&aid=3020246&group_id=224188} +\end{feature} + +\begin{feature} + Support standard filters for \verb|hist| and its variants. + + Improve filtering for \verb|hist| and similar plot handlers. + + I already added the \verb|hist/data filter| and \verb|pre filter| keys (undocumented!). Use them. +\end{feature} + +\begin{feature}[-] + the 'xtick' syntax accepts only numbers, not even constant expressions are + possible (and 'pi' is even more complicated). +\end{feature} + + +\begin{feature} + Table Package: support context--based \verb|row predicate|s (some kind of WHERE clauses) +\end{feature} + +\begin{feature} + Is it possible to have bar plots which do not start from the x or y axis?. For example a bar plot from (0,2) to (0,3). +\end{feature} + +\begin{feature} + support the \verb|/data point/x| method for all key filters and in all contexts (i.e. in the same context where \verb|\thisrow| is accepted) +\end{feature} + +\begin{feature} + Support selection of individual 3D axis lines which shall be drawn (or ``floor'') +\end{feature} + +\begin{feature} + Support custom unit vectors for 3D axes +\end{feature} \begin{feature}[-] bar plots: provide constant zero level? @@ -1074,15 +2043,17 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha which includes the keys of the outer axis!? \end{feature} -\begin{feature}[-] +\begin{feature}[closed] support for "spy"glass into particular parts of an axis + + appears to work correctly!? \end{feature} \begin{feature}[-] groupplots: group-wide axis labels \end{feature} -\begin{feature}[-] +\begin{feature}[closed] It would be really great to have the possibility to attach a style to every nth row of a data table. For example, I would like to have a \verb|\midrule| not after every line or after odd/even lines but after every fifth (or whatever) line. \end{feature} @@ -1156,7 +2127,7 @@ and you can remark that colour filling overlaps x- and y-axis ! So I suggest tha \end{feature} -\begin{feature}[-] +\begin{feature}[+] Konnodalplots fuer Ternary Axes given: pairs of points $(A_i,B_i)$ with $A_i,B_i \in R^3$ for the connodals @@ -1232,12 +2203,22 @@ Das Plotten sollte dann out-of-the-box m\"oglich sein. time (unless the axis is hidden) \end{feature} -\begin{feature}[-] +\begin{feature}[closed] output cs: - - implement automatic limit computation + \begin{itemize} + \item + implement automatic limit computation $\leadsto$ I prepared something like that; use it. I guess I'll need to convert the streamed data to the accepted format of the axis, at least in order to update limits. + \item IDEA: + \begin{itemize} + \item + provide the ``data cs'' as option (not ``output cs'') + \item convert to the required axis cs automatically before limits are checked + \item keep the converted coordinate system + \end{itemize} +\end{itemize} \end{feature} \begin{feature}[-] @@ -1362,11 +2343,13 @@ Das Plotten sollte dann out-of-the-box m\"oglich sein. \end{itemize} TODO: \begin{itemize} + \item rethink data scaling transformation. Should it be done as ``coord math''? + \item handling of depth searching needs to be implemented with ``default'' coordmath \item the log routines -$\leadsto$ also use it for table package. BUGGY! compare examples in manual. Minor log ticks don't work at all, default log tick labels are simply wrong. \item disablelogfilter case - \item error bars work with both, float and log + \item \ok error bars work with both, float and log \item plothandlers.code.tex \item prepare@ZERO@coords \end{itemize} @@ -1507,6 +2490,24 @@ Das Plotten sollte dann out-of-the-box m\"oglich sein. \url{http://www.siart.de/lehre/smithdgr.pdf} \end{feature} +\begin{feature} + smith charts + + \url{http://www.siart.de/lehre/tutorien.xhtml#smishort} + \url{http://www.siart.de/lehre/smithdgr.pdf} + + \url{www.amanogawa.com/archive/docs/G-tutorial.pdf} + + \url{http://www.mathworks.com/access/helpdesk/help/toolbox/rf/f2-999699.html} + + ok, basic things work todo still: + \begin{itemize} + \item UI for default tick positions + \item \verb|dense smithchart ticks| is not perfect + \item there are problems with limits beyond +-16000 + \end{itemize} +\end{feature} + \begin{feature}[-] ternary diagrams todo: \begin{itemize} diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/FokkerDrI_layer_0.facetIdx.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/FokkerDrI_layer_0.facetIdx.dat new file mode 100644 index 00000000000..1f96a36da96 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/FokkerDrI_layer_0.facetIdx.dat @@ -0,0 +1,484 @@ +# Copyright 2010 by Christian Feuersaenger. +# This model has been designed by Christian Feuersaenger. +# It can be re-distributed freely under the terms of the GNU General Public License. +# each row makes up one facet; it consists of 0-based indices into the vertex array +0 1 2 +0 3 1 +3 4 1 +5 6 7 +6 8 7 +8 9 7 +8 10 9 +10 11 9 +10 12 11 +12 13 11 +12 14 13 +14 15 13 +14 16 15 +16 17 15 +16 18 17 +18 2 17 +18 0 2 +2 1 19 +1 20 19 +1 4 20 +5 21 22 +5 7 21 +7 23 21 +7 9 23 +9 11 23 +11 24 23 +11 13 24 +13 25 24 +13 15 25 +15 26 25 +15 17 26 +17 19 26 +17 2 19 +21 27 28 +21 29 27 +21 23 29 +23 30 29 +23 31 30 +23 24 31 +24 32 31 +24 25 32 +25 33 32 +25 26 33 +26 34 33 +26 19 34 +28 27 35 +27 29 35 +29 36 35 +29 30 36 +30 31 36 +31 37 36 +31 32 37 +32 38 37 +32 33 38 +33 34 38 +39 40 41 +41 42 39 +43 44 45 +45 46 43 +39 42 44 +44 43 39 +42 41 45 +45 44 42 +41 40 46 +46 45 41 +40 39 43 +43 46 40 +47 48 49 +49 50 47 +51 52 53 +53 54 51 +47 50 52 +52 51 47 +50 49 53 +53 52 50 +49 48 54 +54 53 49 +48 47 51 +51 54 48 +55 56 57 +57 58 55 +59 60 61 +61 62 59 +55 58 60 +60 59 55 +58 57 61 +61 60 58 +57 56 62 +62 61 57 +56 55 59 +59 62 56 +63 64 65 +63 66 64 +66 67 64 +66 68 67 +66 69 68 +69 70 68 +65 64 71 +64 67 71 +67 68 71 +65 71 72 +71 68 73 +72 74 75 +72 71 74 +71 76 74 +71 77 76 +71 73 77 +73 78 77 +74 76 79 +76 80 79 +76 77 80 +77 81 80 +77 78 81 +75 82 83 +75 74 82 +74 79 82 +79 84 82 +79 80 84 +80 85 84 +80 81 85 +69 63 70 +66 63 69 +84 85 83 +82 84 83 +86 87 88 +88 87 89 +87 90 89 +87 91 90 +91 92 90 +91 93 92 +93 94 92 +93 95 94 +90 92 96 +92 94 96 +88 97 98 +88 89 97 +89 99 97 +89 90 99 +90 96 99 +96 94 100 +93 86 95 +91 86 93 +86 91 87 +96 100 98 +99 96 98 +98 97 99 +101 102 103 +101 104 102 +104 105 106 +104 107 105 +101 108 109 +101 103 108 +103 102 108 +102 110 108 +102 104 110 +104 106 110 +111 112 108 +113 108 110 +114 115 116 +115 114 117 +118 119 120 +121 116 119 +116 122 119 +116 115 122 +115 123 122 +124 119 122 +125 126 127 +126 125 128 +129 126 128 +127 126 129 +130 127 131 +132 127 130 +125 127 128 +133 134 130 +135 136 137 +135 138 139 +135 137 138 +137 140 138 +137 136 140 +136 141 140 +136 142 143 +139 138 140 +144 145 146 +147 144 148 +145 144 147 +149 150 151 +146 152 149 +148 146 149 +144 146 148 +153 148 149 +154 155 156 +154 157 155 +157 158 159 +157 160 158 +161 162 158 +154 156 162 +156 163 162 +156 155 163 +155 159 163 +155 157 159 +159 158 162 +159 162 163 +164 165 166 +167 165 164 +168 167 169 +165 167 168 +170 165 168 +166 165 170 +171 172 173 +174 175 171 +169 176 171 +167 177 169 +168 169 170 +170 169 171 +178 179 180 +181 179 178 +182 181 183 +179 181 182 +184 179 182 +180 179 184 +178 180 184 +185 178 184 +181 178 185 +183 181 185 +182 183 184 +184 183 185 +186 187 188 +186 189 187 +186 190 189 +186 191 190 +186 192 191 +186 193 192 +193 194 195 +193 186 194 +186 196 194 +186 188 196 +188 197 196 +188 187 197 +187 198 197 +187 189 198 +189 199 198 +189 190 199 +190 200 199 +190 191 200 +191 201 200 +191 192 201 +192 195 201 +192 193 195 +195 194 196 +195 196 197 +195 197 198 +195 198 199 +195 199 200 +195 200 201 +202 203 204 +202 205 203 +202 206 205 +202 207 206 +202 208 207 +202 209 208 +209 210 211 +209 202 210 +202 212 210 +202 204 212 +204 213 212 +204 203 213 +203 214 213 +203 205 214 +205 215 214 +205 206 215 +206 216 215 +206 207 216 +207 217 216 +207 208 217 +208 211 217 +208 209 211 +211 210 212 +211 212 213 +211 213 214 +211 214 215 +211 215 216 +211 216 217 +218 219 220 +218 221 219 +218 222 221 +218 223 222 +223 218 224 +218 220 224 +220 219 224 +219 221 224 +221 222 224 +222 223 224 +225 226 227 +225 228 226 +228 229 226 +228 230 229 +230 231 229 +230 232 231 +232 233 231 +232 234 233 +227 235 236 +227 226 235 +226 237 235 +226 229 237 +229 238 237 +229 231 238 +231 239 238 +231 233 239 +236 240 241 +236 235 240 +235 242 240 +235 237 242 +237 243 242 +237 238 243 +238 244 243 +238 239 244 +241 245 246 +241 240 245 +240 247 245 +240 242 247 +242 248 247 +242 243 248 +243 249 248 +243 244 249 +232 250 234 +230 250 232 +250 228 225 +250 230 228 +248 249 251 +247 248 251 +251 246 245 +251 245 247 +234 252 233 +234 250 252 +250 227 252 +250 225 227 +233 253 239 +233 252 253 +252 236 253 +252 227 236 +239 254 244 +239 253 254 +253 241 254 +253 236 241 +244 251 249 +244 254 251 +254 246 251 +254 241 246 +63 65 70 +70 65 68 +68 72 73 +68 65 72 +73 72 75 +73 75 78 +81 83 85 +81 78 83 +78 75 83 +86 88 95 +95 88 94 +94 98 100 +94 88 98 +3 0 255 +255 256 3 +4 3 256 +256 257 4 +6 5 258 +258 259 6 +8 6 259 +259 260 8 +10 8 260 +260 261 10 +12 10 261 +261 262 12 +14 12 262 +262 263 14 +16 14 263 +263 264 16 +18 16 264 +264 265 18 +0 18 265 +265 255 0 +266 4 257 +257 267 266 +5 266 267 +267 258 5 +268 269 270 +268 270 271 +269 272 273 +269 273 270 +272 274 275 +272 275 273 +274 276 277 +274 277 275 +276 278 279 +276 279 277 +278 280 281 +278 281 279 +37 268 271 +37 271 36 +282 269 268 +282 272 269 +282 274 272 +282 276 274 +282 278 276 +282 280 278 +283 271 270 +283 270 273 +283 273 275 +283 275 277 +283 277 279 +283 279 281 +268 37 38 +38 282 268 +22 284 285 +22 285 286 +286 285 281 +285 283 281 +286 281 280 +286 280 20 +20 280 287 +287 280 282 +20 287 288 +19 20 288 +19 288 34 +288 38 34 +36 271 35 +35 271 283 +21 284 22 +21 28 284 +284 28 35 +289 290 291 +292 293 294 +295 296 297 +298 299 300 +301 302 303 +304 305 306 +307 308 309 +310 311 312 +313 314 315 +316 317 318 +319 320 321 +322 321 323 +320 324 325 +320 325 321 +324 326 327 +324 327 325 +326 328 329 +326 329 327 +328 330 331 +328 332 329 +333 334 335 +336 335 337 +334 338 339 +334 339 335 +338 340 341 +338 341 339 +340 342 343 +340 343 341 +342 344 345 +342 346 343 +338 342 340 +338 347 342 +334 348 338 +328 320 349 +326 320 328 +326 324 320 +339 341 343 +339 343 350 +335 339 351 +352 335 353 +329 354 321 +327 329 321 +327 321 325 +355 321 356 +357 334 358 +359 360 320 +361 362 363 +364 365 366 +367 368 369 +370 371 372 diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/FokkerDrI_layer_0.patches.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/FokkerDrI_layer_0.patches.dat new file mode 100644 index 00000000000..3ee4d718f64 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/FokkerDrI_layer_0.patches.dat @@ -0,0 +1,1925 @@ +# Copyright 2010 by Christian Feuersaenger. +# This model has been designed by Christian Feuersaenger. +# It can be re-distributed freely under the terms of the GNU General Public License. +# +# each row is one vertex; three (or four) consecutive vertices make one facet (patch) +105.577 -19.7332 2.85249 +88.9233 -21.1254 13.0359 +89.2104 -22.1547 1.46467 +# end of facet 0 +105.577 -19.7332 2.85249 +105.577 -17.2161 12.146 +88.9233 -21.1254 13.0359 +# end of facet 1 +105.577 -17.2161 12.146 +105.577 -10.6054 18.7567 +88.9233 -21.1254 13.0359 +# end of facet 2 +105.577 7.98161 18.7567 +105.577 14.5923 12.146 +88.7667 18.1841 13.2767 +# end of facet 3 +105.577 14.5923 12.146 +105.577 17.1094 2.85249 +88.7667 18.1841 13.2767 +# end of facet 4 +105.577 17.1094 2.85249 +89.0774 19.2677 -9.74034 +88.7667 18.1841 13.2767 +# end of facet 5 +105.577 17.1094 2.85249 +105.577 14.5923 -6.44101 +89.0774 19.2677 -9.74034 +# end of facet 6 +105.577 14.5923 -6.44101 +66.9375 10.305 -17.775 +89.0774 19.2677 -9.74034 +# end of facet 7 +105.577 14.5923 -6.44101 +105.379 7.9816 -13.4545 +66.9375 10.305 -17.775 +# end of facet 8 +105.379 7.9816 -13.4545 +66.9375 -1.31189 -20.9214 +66.9375 10.305 -17.775 +# end of facet 9 +105.379 7.9816 -13.4545 +105.379 -1.3119 -15.9716 +66.9375 -1.31189 -20.9214 +# end of facet 10 +105.379 -1.3119 -15.9716 +66.9375 -12.9288 -17.775 +66.9375 -1.31189 -20.9214 +# end of facet 11 +105.379 -1.3119 -15.9716 +105.379 -10.6054 -13.4545 +66.9375 -12.9288 -17.775 +# end of facet 12 +105.379 -10.6054 -13.4545 +88.9233 -23.1503 -10.1095 +66.9375 -12.9288 -17.775 +# end of facet 13 +105.379 -10.6054 -13.4545 +105.577 -17.2161 -6.44101 +88.9233 -23.1503 -10.1095 +# end of facet 14 +105.577 -17.2161 -6.44101 +89.2104 -22.1547 1.46467 +88.9233 -23.1503 -10.1095 +# end of facet 15 +105.577 -17.2161 -6.44101 +105.577 -19.7332 2.85249 +89.2104 -22.1547 1.46467 +# end of facet 16 +89.2104 -22.1547 1.46467 +88.9233 -21.1254 13.0359 +-22.861 -14.3947 14.6493 +# end of facet 17 +88.9233 -21.1254 13.0359 +-22.7789 -9.61456 18.7078 +-22.861 -14.3947 14.6493 +# end of facet 18 +88.9233 -21.1254 13.0359 +105.577 -10.6054 18.7567 +-22.7789 -9.61456 18.7078 +# end of facet 19 +105.577 7.98161 18.7567 +-22.9299 10.6068 14.378 +-22.7789 6.99085 18.7078 +# end of facet 20 +105.577 7.98161 18.7567 +88.7667 18.1841 13.2767 +-22.9299 10.6068 14.378 +# end of facet 21 +88.7667 18.1841 13.2767 +-23.2405 11.6505 -8.68062 +-22.9299 10.6068 14.378 +# end of facet 22 +88.7667 18.1841 13.2767 +89.0774 19.2677 -9.74034 +-23.2405 11.6505 -8.68062 +# end of facet 23 +89.0774 19.2677 -9.74034 +66.9375 10.305 -17.775 +-23.2405 11.6505 -8.68062 +# end of facet 24 +66.9375 10.305 -17.775 +-22.7788 -1.31186 -11.9582 +-23.2405 11.6505 -8.68062 +# end of facet 25 +66.9375 10.305 -17.775 +66.9375 -1.31189 -20.9214 +-22.7788 -1.31186 -11.9582 +# end of facet 26 +66.9375 -1.31189 -20.9214 +-22.7788 -9.61456 -9.70948 +-22.7788 -1.31186 -11.9582 +# end of facet 27 +66.9375 -1.31189 -20.9214 +66.9375 -12.9288 -17.775 +-22.7788 -9.61456 -9.70948 +# end of facet 28 +66.9375 -12.9288 -17.775 +-22.861 -15.8419 -1.89289 +-22.7788 -9.61456 -9.70948 +# end of facet 29 +66.9375 -12.9288 -17.775 +88.9233 -23.1503 -10.1095 +-22.861 -15.8419 -1.89289 +# end of facet 30 +88.9233 -23.1503 -10.1095 +-22.861 -14.3947 14.6493 +-22.861 -15.8419 -1.89289 +# end of facet 31 +88.9233 -23.1503 -10.1095 +89.2104 -22.1547 1.46467 +-22.861 -14.3947 14.6493 +# end of facet 32 +-22.9299 10.6068 14.378 +-70.4901 7.53121 10.8835 +-70.4901 6.3229 15.3448 +# end of facet 33 +-22.9299 10.6068 14.378 +-70.4901 6.32289 6.42225 +-70.4901 7.53121 10.8835 +# end of facet 34 +-22.9299 10.6068 14.378 +-23.2405 11.6505 -8.68062 +-70.4901 6.32289 6.42225 +# end of facet 35 +-23.2405 11.6505 -8.68062 +-70.4901 3.14946 3.24881 +-70.4901 6.32289 6.42225 +# end of facet 36 +-23.2405 11.6505 -8.68062 +-70.4901 -1.31184 2.0405 +-70.4901 3.14946 3.24881 +# end of facet 37 +-23.2405 11.6505 -8.68062 +-22.7788 -1.31186 -11.9582 +-70.4901 -1.31184 2.0405 +# end of facet 38 +-22.7788 -1.31186 -11.9582 +-70.4901 -5.77314 3.24882 +-70.4901 -1.31184 2.0405 +# end of facet 39 +-22.7788 -1.31186 -11.9582 +-22.7788 -9.61456 -9.70948 +-70.4901 -5.77314 3.24882 +# end of facet 40 +-22.7788 -9.61456 -9.70948 +-70.4901 -8.94657 6.42225 +-70.4901 -5.77314 3.24882 +# end of facet 41 +-22.7788 -9.61456 -9.70948 +-22.861 -15.8419 -1.89289 +-70.4901 -8.94657 6.42225 +# end of facet 42 +-22.861 -15.8419 -1.89289 +-70.4901 -10.1549 10.8835 +-70.4901 -8.94657 6.42225 +# end of facet 43 +-22.861 -15.8419 -1.89289 +-22.861 -14.3947 14.6493 +-70.4901 -10.1549 10.8835 +# end of facet 44 +-70.4901 6.3229 15.3448 +-70.4901 7.53121 10.8835 +-100.182 0.268416 17.3186 +# end of facet 45 +-70.4901 7.53121 10.8835 +-70.4901 6.32289 6.42225 +-100.182 0.268416 17.3186 +# end of facet 46 +-70.4901 6.32289 6.42225 +-98.2006 -0.821234 8.92293 +-100.182 0.268416 17.3186 +# end of facet 47 +-70.4901 6.32289 6.42225 +-70.4901 3.14946 3.24881 +-98.2006 -0.821234 8.92293 +# end of facet 48 +-70.4901 3.14946 3.24881 +-70.4901 -1.31184 2.0405 +-98.2006 -0.821234 8.92293 +# end of facet 49 +-70.4901 -1.31184 2.0405 +-98.2006 -3.20579 9.04793 +-98.2006 -0.821234 8.92293 +# end of facet 50 +-70.4901 -1.31184 2.0405 +-70.4901 -5.77314 3.24882 +-98.2006 -3.20579 9.04793 +# end of facet 51 +-70.4901 -5.77314 3.24882 +-100.182 -4.44158 17.2855 +-98.2006 -3.20579 9.04793 +# end of facet 52 +-70.4901 -5.77314 3.24882 +-70.4901 -8.94657 6.42225 +-100.182 -4.44158 17.2855 +# end of facet 53 +-70.4901 -8.94657 6.42225 +-70.4901 -10.1549 10.8835 +-100.182 -4.44158 17.2855 +# end of facet 54 +64.9266 101.895 -13.4854 +56.7796 101.895 -13.3984 +56.7796 103.126 -13.3984 +# end of facet 55 +56.7796 103.126 -13.3984 +64.9266 103.126 -13.4854 +64.9266 101.895 -13.4854 +# end of facet 56 +81.545 101.895 47.5631 +81.545 103.126 47.5632 +73.398 103.126 47.6501 +# end of facet 57 +73.398 103.126 47.6501 +73.398 101.895 47.6501 +81.545 101.895 47.5631 +# end of facet 58 +64.9266 101.895 -13.4854 +64.9266 103.126 -13.4854 +81.545 103.126 47.5632 +# end of facet 59 +81.545 103.126 47.5632 +81.545 101.895 47.5631 +64.9266 101.895 -13.4854 +# end of facet 60 +64.9266 103.126 -13.4854 +56.7796 103.126 -13.3984 +73.398 103.126 47.6501 +# end of facet 61 +73.398 103.126 47.6501 +81.545 103.126 47.5632 +64.9266 103.126 -13.4854 +# end of facet 62 +56.7796 103.126 -13.3984 +56.7796 101.895 -13.3984 +73.398 101.895 47.6501 +# end of facet 63 +73.398 101.895 47.6501 +73.398 103.126 47.6501 +56.7796 103.126 -13.3984 +# end of facet 64 +56.7796 101.895 -13.3984 +64.9266 101.895 -13.4854 +81.545 101.895 47.5631 +# end of facet 65 +81.545 101.895 47.5631 +73.398 101.895 47.6501 +56.7796 101.895 -13.3984 +# end of facet 66 +64.9266 -106.068 -13.4854 +56.7796 -106.068 -13.3984 +56.7796 -104.837 -13.3984 +# end of facet 67 +56.7796 -104.837 -13.3984 +64.9266 -104.837 -13.4854 +64.9266 -106.068 -13.4854 +# end of facet 68 +81.545 -106.068 47.5632 +81.545 -104.837 47.5632 +73.398 -104.837 47.6501 +# end of facet 69 +73.398 -104.837 47.6501 +73.398 -106.068 47.6501 +81.545 -106.068 47.5632 +# end of facet 70 +64.9266 -106.068 -13.4854 +64.9266 -104.837 -13.4854 +81.545 -104.837 47.5632 +# end of facet 71 +81.545 -104.837 47.5632 +81.545 -106.068 47.5632 +64.9266 -106.068 -13.4854 +# end of facet 72 +64.9266 -104.837 -13.4854 +56.7796 -104.837 -13.3984 +73.398 -104.837 47.6501 +# end of facet 73 +73.398 -104.837 47.6501 +81.545 -104.837 47.5632 +64.9266 -104.837 -13.4854 +# end of facet 74 +56.7796 -104.837 -13.3984 +56.7796 -106.068 -13.3984 +73.398 -106.068 47.6501 +# end of facet 75 +73.398 -106.068 47.6501 +73.398 -104.837 47.6501 +56.7796 -104.837 -13.3984 +# end of facet 76 +56.7796 -106.068 -13.3984 +64.9266 -106.068 -13.4854 +81.545 -106.068 47.5632 +# end of facet 77 +81.545 -106.068 47.5632 +73.398 -106.068 47.6501 +56.7796 -106.068 -13.3984 +# end of facet 78 +83.0408 23.6123 -47.9599 +82.5803 23.6123 -46.1334 +96.5106 23.6123 -44.4157 +# end of facet 79 +96.5106 23.6123 -44.4157 +96.9711 23.6123 -46.2422 +83.0408 23.6123 -47.9599 +# end of facet 80 +83.0408 -28.2785 -47.9599 +96.9711 -28.2785 -46.2422 +96.5106 -28.2785 -44.4157 +# end of facet 81 +96.5106 -28.2785 -44.4157 +82.5803 -28.2785 -46.1334 +83.0408 -28.2785 -47.9599 +# end of facet 82 +83.0408 23.6123 -47.9599 +96.9711 23.6123 -46.2422 +96.9711 -28.2785 -46.2422 +# end of facet 83 +96.9711 -28.2785 -46.2422 +83.0408 -28.2785 -47.9599 +83.0408 23.6123 -47.9599 +# end of facet 84 +96.9711 23.6123 -46.2422 +96.5106 23.6123 -44.4157 +96.5106 -28.2785 -44.4157 +# end of facet 85 +96.5106 -28.2785 -44.4157 +96.9711 -28.2785 -46.2422 +96.9711 23.6123 -46.2422 +# end of facet 86 +96.5106 23.6123 -44.4157 +82.5803 23.6123 -46.1334 +82.5803 -28.2785 -46.1334 +# end of facet 87 +82.5803 -28.2785 -46.1334 +96.5106 -28.2785 -44.4157 +96.5106 23.6123 -44.4157 +# end of facet 88 +82.5803 23.6123 -46.1334 +83.0408 23.6123 -47.9599 +83.0408 -28.2785 -47.9599 +# end of facet 89 +83.0408 -28.2785 -47.9599 +82.5803 -28.2785 -46.1334 +82.5803 23.6123 -46.1334 +# end of facet 90 +89.2387 116.86 17.7318 +79.5202 21.4201 19.9444 +85.8409 11.7784 17.9716 +# end of facet 91 +89.2387 116.86 17.7318 +79.1292 116.86 20.1416 +79.5202 21.4201 19.9444 +# end of facet 92 +79.1292 116.86 20.1416 +63.6638 21.4202 20.2775 +79.5202 21.4201 19.9444 +# end of facet 93 +79.1292 116.86 20.1416 +38.0938 21.4202 16.1842 +63.6638 21.4202 20.2775 +# end of facet 94 +79.1292 116.86 20.1416 +43.6792 116.86 18.5918 +38.0938 21.4202 16.1842 +# end of facet 95 +43.6792 116.86 18.5918 +33.0999 116.86 15.9636 +38.0938 21.4202 16.1842 +# end of facet 96 +85.8409 11.7784 17.9716 +79.5202 21.4201 19.9444 +81.8661 -2.43971 18.761 +# end of facet 97 +79.5202 21.4201 19.9444 +63.6638 21.4202 20.2775 +81.8661 -2.43971 18.761 +# end of facet 98 +63.6638 21.4202 20.2775 +38.0938 21.4202 16.1842 +81.8661 -2.43971 18.761 +# end of facet 99 +85.8409 11.7784 17.9716 +81.8661 -2.43971 18.761 +84.8989 -2.43972 18.0381 +# end of facet 100 +81.8661 -2.43971 18.761 +38.0938 21.4202 16.1842 +68.0573 -2.43971 17.5077 +# end of facet 101 +84.8989 -2.43972 18.0381 +79.5202 -26.2996 19.9444 +88.6187 -26.2996 17.7756 +# end of facet 102 +84.8989 -2.43972 18.0381 +81.8661 -2.43971 18.761 +79.5202 -26.2996 19.9444 +# end of facet 103 +81.8661 -2.43971 18.761 +72.9517 -18.524 19.2669 +79.5202 -26.2996 19.9444 +# end of facet 104 +81.8661 -2.43971 18.761 +64.5964 -18.524 18.3673 +72.9517 -18.524 19.2669 +# end of facet 105 +81.8661 -2.43971 18.761 +68.0573 -2.43971 17.5077 +64.5964 -18.524 18.3673 +# end of facet 106 +68.0573 -2.43971 17.5077 +59.6393 -18.524 17.1358 +64.5964 -18.524 18.3673 +# end of facet 107 +79.5202 -26.2996 19.9444 +72.9517 -18.524 19.2669 +63.6638 -26.2995 20.2775 +# end of facet 108 +72.9517 -18.524 19.2669 +47.6152 -26.2995 18.5496 +63.6638 -26.2995 20.2775 +# end of facet 109 +72.9517 -18.524 19.2669 +64.5964 -18.524 18.3673 +47.6152 -26.2995 18.5496 +# end of facet 110 +64.5964 -18.524 18.3673 +38.0938 -26.2995 16.1842 +47.6152 -26.2995 18.5496 +# end of facet 111 +64.5964 -18.524 18.3673 +59.6393 -18.524 17.1358 +38.0938 -26.2995 16.1842 +# end of facet 112 +88.6187 -26.2996 17.7756 +79.1292 -121.739 20.1416 +89.2387 -121.739 17.7318 +# end of facet 113 +88.6187 -26.2996 17.7756 +79.5202 -26.2996 19.9444 +79.1292 -121.739 20.1416 +# end of facet 114 +79.5202 -26.2996 19.9444 +63.6638 -26.2995 20.2775 +79.1292 -121.739 20.1416 +# end of facet 115 +63.6638 -26.2995 20.2775 +43.6792 -121.739 18.5918 +79.1292 -121.739 20.1416 +# end of facet 116 +63.6638 -26.2995 20.2775 +47.6152 -26.2995 18.5496 +43.6792 -121.739 18.5918 +# end of facet 117 +47.6152 -26.2995 18.5496 +33.0999 -121.739 15.9637 +43.6792 -121.739 18.5918 +# end of facet 118 +47.6152 -26.2995 18.5496 +38.0938 -26.2995 16.1842 +33.0999 -121.739 15.9637 +# end of facet 119 +43.6792 116.86 18.5918 +89.2387 116.86 17.7318 +33.0999 116.86 15.9636 +# end of facet 120 +79.1292 116.86 20.1416 +89.2387 116.86 17.7318 +43.6792 116.86 18.5918 +# end of facet 121 +43.6792 -121.739 18.5918 +33.0999 -121.739 15.9637 +89.2387 -121.739 17.7318 +# end of facet 122 +79.1292 -121.739 20.1416 +43.6792 -121.739 18.5918 +89.2387 -121.739 17.7318 +# end of facet 123 +95.489 123.481 47.0575 +85.3795 123.481 49.4673 +94.001 -1.78316 47.1625 +# end of facet 124 +94.001 -1.78316 47.1625 +85.3795 123.481 49.4673 +86.3178 -1.78315 48.994 +# end of facet 125 +85.3795 123.481 49.4673 +72.9279 -1.78315 49.2752 +86.3178 -1.78315 48.994 +# end of facet 126 +85.3795 123.481 49.4673 +67.7613 123.481 49.8374 +72.9279 -1.78315 49.2752 +# end of facet 127 +67.7613 123.481 49.8374 +59.3758 -1.78314 47.8161 +72.9279 -1.78315 49.2752 +# end of facet 128 +67.7613 123.481 49.8374 +49.9295 123.481 47.9175 +59.3758 -1.78314 47.8161 +# end of facet 129 +49.9295 123.481 47.9175 +51.3356 -1.78314 45.8187 +59.3758 -1.78314 47.8161 +# end of facet 130 +49.9295 123.481 47.9175 +39.3502 123.481 45.2893 +51.3356 -1.78314 45.8187 +# end of facet 131 +72.9279 -1.78315 49.2752 +59.3758 -1.78314 47.8161 +49.9294 -127.047 47.9175 +# end of facet 132 +59.3758 -1.78314 47.8161 +51.3356 -1.78314 45.8187 +49.9294 -127.047 47.9175 +# end of facet 133 +94.001 -1.78316 47.1625 +85.3794 -127.047 49.4673 +95.4889 -127.047 47.0575 +# end of facet 134 +94.001 -1.78316 47.1625 +86.3178 -1.78315 48.994 +85.3794 -127.047 49.4673 +# end of facet 135 +86.3178 -1.78315 48.994 +67.7612 -127.047 49.8374 +85.3794 -127.047 49.4673 +# end of facet 136 +86.3178 -1.78315 48.994 +72.9279 -1.78315 49.2752 +67.7612 -127.047 49.8374 +# end of facet 137 +72.9279 -1.78315 49.2752 +49.9294 -127.047 47.9175 +67.7612 -127.047 49.8374 +# end of facet 138 +49.9294 -127.047 47.9175 +51.3356 -1.78314 45.8187 +39.3501 -127.047 45.2894 +# end of facet 139 +49.9295 123.481 47.9175 +95.489 123.481 47.0575 +39.3502 123.481 45.2893 +# end of facet 140 +67.7613 123.481 49.8374 +95.489 123.481 47.0575 +49.9295 123.481 47.9175 +# end of facet 141 +95.489 123.481 47.0575 +67.7613 123.481 49.8374 +85.3795 123.481 49.4673 +# end of facet 142 +49.9294 -127.047 47.9175 +39.3501 -127.047 45.2894 +95.4889 -127.047 47.0575 +# end of facet 143 +67.7612 -127.047 49.8374 +49.9294 -127.047 47.9175 +95.4889 -127.047 47.0575 +# end of facet 144 +95.4889 -127.047 47.0575 +85.3794 -127.047 49.4673 +67.7612 -127.047 49.8374 +# end of facet 145 +88.4822 21.1915 -42.0975 +89.6693 20.2752 -42.6022 +88.746 20.2752 -42.3027 +# end of facet 146 +88.4822 21.1915 -42.0975 +89.6094 21.4746 -42.4261 +89.6693 20.2752 -42.6022 +# end of facet 147 +89.6094 21.4746 -42.4261 +94.6737 11.4306 -7.26788 +95.434 11.9076 -7.44053 +# end of facet 148 +89.6094 21.4746 -42.4261 +88.4822 21.1915 -42.0975 +94.6737 11.4306 -7.26788 +# end of facet 149 +88.4822 21.1915 -42.0975 +95.3991 10.6588 -7.62287 +94.6737 11.4306 -7.26788 +# end of facet 150 +88.4822 21.1915 -42.0975 +88.746 20.2752 -42.3027 +95.3991 10.6588 -7.62287 +# end of facet 151 +88.746 20.2752 -42.3027 +89.6693 20.2752 -42.6022 +95.3991 10.6588 -7.62287 +# end of facet 152 +89.6693 20.2752 -42.6022 +96.1676 11.4306 -7.75246 +95.3991 10.6588 -7.62287 +# end of facet 153 +89.6693 20.2752 -42.6022 +89.6094 21.4746 -42.4261 +96.1676 11.4306 -7.75246 +# end of facet 154 +89.6094 21.4746 -42.4261 +95.434 11.9076 -7.44053 +96.1676 11.4306 -7.75246 +# end of facet 155 +95.434 11.9076 -7.44053 +94.6737 11.4306 -7.26788 +95.3991 10.6588 -7.62287 +# end of facet 156 +95.434 11.9076 -7.44053 +95.3991 10.6588 -7.62287 +96.1676 11.4306 -7.75246 +# end of facet 157 +59.959 -15.1784 16.1966 +61.0137 -14.4528 16.1701 +61.0145 -15.5992 15.7485 +# end of facet 158 +61.0137 -14.4528 16.1701 +59.959 -15.1784 16.1966 +68.3942 -25.2312 45.671 +# end of facet 159 +59.959 -15.1784 16.1966 +68.6866 -26.3729 45.1701 +68.3942 -25.2312 45.671 +# end of facet 160 +59.959 -15.1784 16.1966 +61.0145 -15.5992 15.7485 +68.6866 -26.3729 45.1701 +# end of facet 161 +61.0145 -15.5992 15.7485 +69.5185 -25.4836 45.2657 +68.6866 -26.3729 45.1701 +# end of facet 162 +61.0145 -15.5992 15.7485 +61.0137 -14.4528 16.1701 +69.5185 -25.4836 45.2657 +# end of facet 163 +61.0137 -14.4528 16.1701 +68.3942 -25.2312 45.671 +69.5185 -25.4836 45.2657 +# end of facet 164 +68.3942 -25.2312 45.671 +68.6866 -26.3729 45.1701 +69.5185 -25.4836 45.2657 +# end of facet 165 +60.7806 9.38285 16.3554 +60.1064 10.373 16.2606 +61.3419 10.353 15.9245 +# end of facet 166 +60.1064 10.373 16.2606 +60.7806 9.38285 16.3554 +68.4341 20.4332 45.7041 +# end of facet 167 +68.7498 21.5746 45.2925 +60.1064 10.373 16.2606 +68.4341 20.4332 45.7041 +# end of facet 168 +61.3419 10.353 15.9245 +60.1064 10.373 16.2606 +68.7498 21.5746 45.2925 +# end of facet 169 +69.5639 20.6855 45.3199 +61.3419 10.353 15.9245 +68.7498 21.5746 45.2925 +# end of facet 170 +68.4341 20.4332 45.7041 +61.3419 10.353 15.9245 +69.5639 20.6855 45.3199 +# end of facet 171 +60.7806 9.38285 16.3554 +61.3419 10.353 15.9245 +68.4341 20.4332 45.7041 +# end of facet 172 +68.7498 21.5746 45.2925 +68.4341 20.4332 45.7041 +69.5639 20.6855 45.3199 +# end of facet 173 +101.572 -12.7402 12.1812 +102.803 -13.41 11.8998 +102.069 -13.8532 11.3485 +# end of facet 174 +101.572 -12.7402 12.1812 +79.9604 -27.1891 46.2867 +79.4632 -26.0761 47.1195 +# end of facet 175 +101.572 -12.7402 12.1812 +102.069 -13.8532 11.3485 +79.9604 -27.1891 46.2867 +# end of facet 176 +102.069 -13.8532 11.3485 +80.6943 -26.7459 46.8381 +79.9604 -27.1891 46.2867 +# end of facet 177 +102.069 -13.8532 11.3485 +102.803 -13.41 11.8998 +80.6943 -26.7459 46.8381 +# end of facet 178 +102.803 -13.41 11.8998 +79.4632 -26.0761 47.1195 +80.6943 -26.7459 46.8381 +# end of facet 179 +102.803 -13.41 11.8998 +101.572 -12.7402 12.1812 +79.4632 -26.0761 47.1195 +# end of facet 180 +79.4632 -26.0761 47.1195 +79.9604 -27.1891 46.2867 +80.6943 -26.7459 46.8381 +# end of facet 181 +102.456 8.04328 12.6832 +101.832 8.63141 12.1866 +102.959 8.9089 12.224 +# end of facet 182 +79.0482 21.6335 47.0951 +102.456 8.04328 12.6832 +79.9626 21.3704 47.4388 +# end of facet 183 +101.832 8.63141 12.1866 +102.456 8.04328 12.6832 +79.0482 21.6335 47.0951 +# end of facet 184 +80.0469 22.2598 46.8844 +101.832 8.63141 12.1866 +79.0482 21.6335 47.0951 +# end of facet 185 +102.959 8.9089 12.224 +101.832 8.63141 12.1866 +80.0469 22.2598 46.8844 +# end of facet 186 +79.9626 21.3704 47.4388 +102.959 8.9089 12.224 +80.0469 22.2598 46.8844 +# end of facet 187 +102.456 8.04328 12.6832 +102.959 8.9089 12.224 +79.9626 21.3704 47.4388 +# end of facet 188 +79.0482 21.6335 47.0951 +79.9626 21.3704 47.4388 +80.0469 22.2598 46.8844 +# end of facet 189 +87.2627 21.1915 -43.9267 +88.6181 21.1915 -43.5533 +88.0183 20.2752 -43.8504 +# end of facet 190 +87.2627 21.1915 -43.9267 +87.8923 21.7577 -43.6717 +88.6181 21.1915 -43.5533 +# end of facet 191 +87.8923 21.7577 -43.6717 +67.5028 13.0543 -13.7479 +68.1323 13.5885 -13.4929 +# end of facet 192 +87.8923 21.7577 -43.6717 +87.2627 21.1915 -43.9267 +67.5028 13.0543 -13.7479 +# end of facet 193 +87.2627 21.1915 -43.9267 +68.2584 12.1899 -13.6717 +67.5028 13.0543 -13.7479 +# end of facet 194 +87.2627 21.1915 -43.9267 +88.0183 20.2752 -43.8504 +68.2584 12.1899 -13.6717 +# end of facet 195 +88.0183 20.2752 -43.8504 +68.8581 13.0543 -13.3745 +68.2584 12.1899 -13.6717 +# end of facet 196 +88.0183 20.2752 -43.8504 +88.6181 21.1915 -43.5533 +68.8581 13.0543 -13.3745 +# end of facet 197 +88.6181 21.1915 -43.5533 +68.1323 13.5885 -13.4929 +68.8581 13.0543 -13.3745 +# end of facet 198 +88.6181 21.1915 -43.5533 +87.8923 21.7577 -43.6717 +68.1323 13.5885 -13.4929 +# end of facet 199 +68.1323 13.5885 -13.4929 +67.5028 13.0543 -13.7479 +68.2584 12.1899 -13.6717 +# end of facet 200 +68.1323 13.5885 -13.4929 +68.2584 12.1899 -13.6717 +68.8581 13.0543 -13.3745 +# end of facet 201 +89.9762 -25.3854 -43.1132 +88.6141 -24.9272 -42.7312 +89.6693 -24.4691 -43.1333 +# end of facet 202 +89.2426 -25.9516 -42.8012 +88.6141 -24.9272 -42.7312 +89.9762 -25.3854 -43.1132 +# end of facet 203 +94.6737 -15.6302 -7.79901 +89.2426 -25.9516 -42.8012 +95.434 -16.1072 -7.97165 +# end of facet 204 +88.6141 -24.9272 -42.7312 +89.2426 -25.9516 -42.8012 +94.6737 -15.6302 -7.79901 +# end of facet 205 +95.3991 -14.8585 -8.154 +88.6141 -24.9272 -42.7312 +94.6737 -15.6302 -7.79901 +# end of facet 206 +89.6693 -24.4691 -43.1333 +88.6141 -24.9272 -42.7312 +95.3991 -14.8585 -8.154 +# end of facet 207 +96.1676 -15.6302 -8.28359 +89.6693 -24.4691 -43.1333 +95.3991 -14.8585 -8.154 +# end of facet 208 +89.9762 -25.3854 -43.1132 +89.6693 -24.4691 -43.1333 +96.1676 -15.6302 -8.28359 +# end of facet 209 +95.434 -16.1072 -7.97165 +89.9762 -25.3854 -43.1132 +96.1676 -15.6302 -8.28359 +# end of facet 210 +89.2426 -25.9516 -42.8012 +89.9762 -25.3854 -43.1132 +95.434 -16.1072 -7.97165 +# end of facet 211 +94.6737 -15.6302 -7.79901 +95.434 -16.1072 -7.97165 +95.3991 -14.8585 -8.154 +# end of facet 212 +95.3991 -14.8585 -8.154 +95.434 -16.1072 -7.97165 +96.1676 -15.6302 -8.28359 +# end of facet 213 +88.4372 -24.4691 -44.2662 +87.2627 -25.3854 -44.4578 +87.5995 -24.4691 -44.497 +# end of facet 214 +88.2552 -25.6685 -44.1436 +87.2627 -25.3854 -44.4578 +88.4372 -24.4691 -44.2662 +# end of facet 215 +67.5028 -17.2539 -14.2791 +88.2552 -25.6685 -44.1436 +68.1323 -17.7881 -14.0241 +# end of facet 216 +87.2627 -25.3854 -44.4578 +88.2552 -25.6685 -44.1436 +67.5028 -17.2539 -14.2791 +# end of facet 217 +68.2584 -16.3895 -14.2028 +87.2627 -25.3854 -44.4578 +67.5028 -17.2539 -14.2791 +# end of facet 218 +87.5995 -24.4691 -44.497 +87.2627 -25.3854 -44.4578 +68.2584 -16.3895 -14.2028 +# end of facet 219 +88.4372 -24.4691 -44.2662 +87.5995 -24.4691 -44.497 +68.2584 -16.3895 -14.2028 +# end of facet 220 +68.8581 -17.2539 -13.9056 +88.4372 -24.4691 -44.2662 +68.2584 -16.3895 -14.2028 +# end of facet 221 +88.2552 -25.6685 -44.1436 +88.4372 -24.4691 -44.2662 +68.8581 -17.2539 -13.9056 +# end of facet 222 +68.1323 -17.7881 -14.0241 +88.2552 -25.6685 -44.1436 +68.8581 -17.2539 -13.9056 +# end of facet 223 +67.5028 -17.2539 -14.2791 +68.1323 -17.7881 -14.0241 +68.2584 -16.3895 -14.2028 +# end of facet 224 +68.2584 -16.3895 -14.2028 +68.1323 -17.7881 -14.0241 +68.8581 -17.2539 -13.9056 +# end of facet 225 +97.3206 25.2367 -38.1479 +82.6101 25.2367 -38.148 +89.9653 25.2367 -35.1013 +# end of facet 226 +97.3206 25.2367 -38.1479 +79.5634 25.2367 -45.5032 +82.6101 25.2367 -38.148 +# end of facet 227 +97.3206 25.2367 -38.1479 +82.6101 25.2367 -52.8585 +79.5634 25.2367 -45.5032 +# end of facet 228 +97.3206 25.2367 -38.1479 +89.9653 25.2367 -55.9052 +82.6101 25.2367 -52.8585 +# end of facet 229 +97.3206 25.2367 -38.1479 +97.3206 25.2367 -52.8585 +89.9653 25.2367 -55.9052 +# end of facet 230 +97.3206 25.2367 -38.1479 +100.367 25.2367 -45.5032 +97.3206 25.2367 -52.8585 +# end of facet 231 +100.367 25.2367 -45.5032 +97.3206 23.5724 -38.1479 +100.367 23.5724 -45.5032 +# end of facet 232 +100.367 25.2367 -45.5032 +97.3206 25.2367 -38.1479 +97.3206 23.5724 -38.1479 +# end of facet 233 +97.3206 25.2367 -38.1479 +89.9653 23.5724 -35.1013 +97.3206 23.5724 -38.1479 +# end of facet 234 +97.3206 25.2367 -38.1479 +89.9653 25.2367 -35.1013 +89.9653 23.5724 -35.1013 +# end of facet 235 +89.9653 25.2367 -35.1013 +82.6101 23.5724 -38.148 +89.9653 23.5724 -35.1013 +# end of facet 236 +89.9653 25.2367 -35.1013 +82.6101 25.2367 -38.148 +82.6101 23.5724 -38.148 +# end of facet 237 +82.6101 25.2367 -38.148 +79.5634 23.5724 -45.5032 +82.6101 23.5724 -38.148 +# end of facet 238 +82.6101 25.2367 -38.148 +79.5634 25.2367 -45.5032 +79.5634 23.5724 -45.5032 +# end of facet 239 +79.5634 25.2367 -45.5032 +82.6101 23.5724 -52.8585 +79.5634 23.5724 -45.5032 +# end of facet 240 +79.5634 25.2367 -45.5032 +82.6101 25.2367 -52.8585 +82.6101 23.5724 -52.8585 +# end of facet 241 +82.6101 25.2367 -52.8585 +89.9653 23.5724 -55.9052 +82.6101 23.5724 -52.8585 +# end of facet 242 +82.6101 25.2367 -52.8585 +89.9653 25.2367 -55.9052 +89.9653 23.5724 -55.9052 +# end of facet 243 +89.9653 25.2367 -55.9052 +97.3206 23.5724 -52.8585 +89.9653 23.5724 -55.9052 +# end of facet 244 +89.9653 25.2367 -55.9052 +97.3206 25.2367 -52.8585 +97.3206 23.5724 -52.8585 +# end of facet 245 +97.3206 25.2367 -52.8585 +100.367 23.5724 -45.5032 +97.3206 23.5724 -52.8585 +# end of facet 246 +97.3206 25.2367 -52.8585 +100.367 25.2367 -45.5032 +100.367 23.5724 -45.5032 +# end of facet 247 +100.367 23.5724 -45.5032 +97.3206 23.5724 -38.1479 +89.9653 23.5724 -35.1013 +# end of facet 248 +100.367 23.5724 -45.5032 +89.9653 23.5724 -35.1013 +82.6101 23.5724 -38.148 +# end of facet 249 +100.367 23.5724 -45.5032 +82.6101 23.5724 -38.148 +79.5634 23.5724 -45.5032 +# end of facet 250 +100.367 23.5724 -45.5032 +79.5634 23.5724 -45.5032 +82.6101 23.5724 -52.8585 +# end of facet 251 +100.367 23.5724 -45.5032 +82.6101 23.5724 -52.8585 +89.9653 23.5724 -55.9052 +# end of facet 252 +100.367 23.5724 -45.5032 +89.9653 23.5724 -55.9052 +97.3206 23.5724 -52.8585 +# end of facet 253 +97.3206 -28.5743 -39.316 +82.61 -28.5743 -39.316 +89.9653 -28.5743 -36.2693 +# end of facet 254 +97.3206 -28.5743 -39.316 +79.5634 -28.5743 -46.6712 +82.61 -28.5743 -39.316 +# end of facet 255 +97.3206 -28.5743 -39.316 +82.6101 -28.5743 -54.0265 +79.5634 -28.5743 -46.6712 +# end of facet 256 +97.3206 -28.5743 -39.316 +89.9653 -28.5743 -57.0732 +82.6101 -28.5743 -54.0265 +# end of facet 257 +97.3206 -28.5743 -39.316 +97.3206 -28.5743 -54.0265 +89.9653 -28.5743 -57.0732 +# end of facet 258 +97.3206 -28.5743 -39.316 +100.367 -28.5743 -46.6712 +97.3206 -28.5743 -54.0265 +# end of facet 259 +100.367 -28.5743 -46.6712 +97.3206 -30.2386 -39.316 +100.367 -30.2386 -46.6712 +# end of facet 260 +100.367 -28.5743 -46.6712 +97.3206 -28.5743 -39.316 +97.3206 -30.2386 -39.316 +# end of facet 261 +97.3206 -28.5743 -39.316 +89.9653 -30.2386 -36.2693 +97.3206 -30.2386 -39.316 +# end of facet 262 +97.3206 -28.5743 -39.316 +89.9653 -28.5743 -36.2693 +89.9653 -30.2386 -36.2693 +# end of facet 263 +89.9653 -28.5743 -36.2693 +82.61 -30.2386 -39.316 +89.9653 -30.2386 -36.2693 +# end of facet 264 +89.9653 -28.5743 -36.2693 +82.61 -28.5743 -39.316 +82.61 -30.2386 -39.316 +# end of facet 265 +82.61 -28.5743 -39.316 +79.5634 -30.2386 -46.6712 +82.61 -30.2386 -39.316 +# end of facet 266 +82.61 -28.5743 -39.316 +79.5634 -28.5743 -46.6712 +79.5634 -30.2386 -46.6712 +# end of facet 267 +79.5634 -28.5743 -46.6712 +82.6101 -30.2386 -54.0265 +79.5634 -30.2386 -46.6712 +# end of facet 268 +79.5634 -28.5743 -46.6712 +82.6101 -28.5743 -54.0265 +82.6101 -30.2386 -54.0265 +# end of facet 269 +82.6101 -28.5743 -54.0265 +89.9653 -30.2386 -57.0732 +82.6101 -30.2386 -54.0265 +# end of facet 270 +82.6101 -28.5743 -54.0265 +89.9653 -28.5743 -57.0732 +89.9653 -30.2386 -57.0732 +# end of facet 271 +89.9653 -28.5743 -57.0732 +97.3206 -30.2386 -54.0265 +89.9653 -30.2386 -57.0732 +# end of facet 272 +89.9653 -28.5743 -57.0732 +97.3206 -28.5743 -54.0265 +97.3206 -30.2386 -54.0265 +# end of facet 273 +97.3206 -28.5743 -54.0265 +100.367 -30.2386 -46.6712 +97.3206 -30.2386 -54.0265 +# end of facet 274 +97.3206 -28.5743 -54.0265 +100.367 -28.5743 -46.6712 +100.367 -30.2386 -46.6712 +# end of facet 275 +100.367 -30.2386 -46.6712 +97.3206 -30.2386 -39.316 +89.9653 -30.2386 -36.2693 +# end of facet 276 +100.367 -30.2386 -46.6712 +89.9653 -30.2386 -36.2693 +82.61 -30.2386 -39.316 +# end of facet 277 +100.367 -30.2386 -46.6712 +82.61 -30.2386 -39.316 +79.5634 -30.2386 -46.6712 +# end of facet 278 +100.367 -30.2386 -46.6712 +79.5634 -30.2386 -46.6712 +82.6101 -30.2386 -54.0265 +# end of facet 279 +100.367 -30.2386 -46.6712 +82.6101 -30.2386 -54.0265 +89.9653 -30.2386 -57.0732 +# end of facet 280 +100.367 -30.2386 -46.6712 +89.9653 -30.2386 -57.0732 +97.3206 -30.2386 -54.0265 +# end of facet 281 +-75.7342 -0.679209 3.34353 +-76.9148 -3.17567 4.17024 +-75.7342 -2.34352 3.34353 +# end of facet 282 +-75.7342 -0.679209 3.34353 +-78.0955 -2.34352 4.99696 +-76.9148 -3.17567 4.17024 +# end of facet 283 +-75.7342 -0.679209 3.34353 +-78.0955 -0.679208 4.99696 +-78.0955 -2.34352 4.99696 +# end of facet 284 +-75.7342 -0.679209 3.34353 +-76.9148 0.152946 4.17024 +-78.0955 -0.679208 4.99696 +# end of facet 285 +-76.9148 0.152946 4.17024 +-75.7342 -0.679209 3.34353 +-85.4028 -1.51136 -7.95186 +# end of facet 286 +-75.7342 -0.679209 3.34353 +-75.7342 -2.34352 3.34353 +-85.4028 -1.51136 -7.95186 +# end of facet 287 +-75.7342 -2.34352 3.34353 +-76.9148 -3.17567 4.17024 +-85.4028 -1.51136 -7.95186 +# end of facet 288 +-76.9148 -3.17567 4.17024 +-78.0955 -2.34352 4.99696 +-85.4028 -1.51136 -7.95186 +# end of facet 289 +-78.0955 -2.34352 4.99696 +-78.0955 -0.679208 4.99696 +-85.4028 -1.51136 -7.95186 +# end of facet 290 +-78.0955 -0.679208 4.99696 +-76.9148 0.152946 4.17024 +-85.4028 -1.51136 -7.95186 +# end of facet 291 +78.7598 111.695 -15.5999 +69.2883 20.1226 -12.3523 +78.1422 20.1225 -15.5459 +# end of facet 292 +78.7598 111.695 -15.5999 +68.8988 111.695 -12.3182 +69.2883 20.1226 -12.3523 +# end of facet 293 +68.8988 111.695 -12.3182 +53.5245 20.1226 -10.6016 +69.2883 20.1226 -12.3523 +# end of facet 294 +68.8988 111.695 -12.3182 +51.3799 111.695 -10.414 +53.5245 20.1226 -10.6016 +# end of facet 295 +51.3799 111.695 -10.414 +37.3696 20.1226 -11.1154 +53.5245 20.1226 -10.6016 +# end of facet 296 +51.3799 111.695 -10.414 +33.4486 111.695 -10.7724 +37.3696 20.1226 -11.1154 +# end of facet 297 +33.4486 111.695 -10.7724 +27.6554 20.1226 -12.9038 +37.3696 20.1226 -11.1154 +# end of facet 298 +33.4486 111.695 -10.7724 +22.6806 111.695 -12.4685 +27.6554 20.1226 -12.9038 +# end of facet 299 +78.1422 20.1225 -15.5459 +72.0147 -2.77057 -12.5908 +73.8189 -2.77057 -15.1677 +# end of facet 300 +78.1422 20.1225 -15.5459 +69.2883 20.1226 -12.3523 +72.0147 -2.77057 -12.5908 +# end of facet 301 +69.2883 20.1226 -12.3523 +68.5368 -2.77056 -11.915 +72.0147 -2.77057 -12.5908 +# end of facet 302 +69.2883 20.1226 -12.3523 +53.5245 20.1226 -10.6016 +68.5368 -2.77056 -11.915 +# end of facet 303 +53.5245 20.1226 -10.6016 +64.8166 -2.77056 -13.5167 +68.5368 -2.77056 -11.915 +# end of facet 304 +53.5245 20.1226 -10.6016 +37.3696 20.1226 -11.1154 +64.8166 -2.77056 -13.5167 +# end of facet 305 +37.3696 20.1226 -11.1154 +62.4798 -2.77056 -15.9505 +64.8166 -2.77056 -13.5167 +# end of facet 306 +37.3696 20.1226 -11.1154 +27.6554 20.1226 -12.9038 +62.4798 -2.77056 -15.9505 +# end of facet 307 +73.8189 -2.77057 -15.1677 +69.2888 -25.6637 -12.3523 +78.1414 -25.6637 -15.5458 +# end of facet 308 +73.8189 -2.77057 -15.1677 +72.0147 -2.77057 -12.5908 +69.2888 -25.6637 -12.3523 +# end of facet 309 +72.0147 -2.77057 -12.5908 +53.5272 -25.6637 -10.6018 +69.2888 -25.6637 -12.3523 +# end of facet 310 +72.0147 -2.77057 -12.5908 +68.5368 -2.77056 -11.915 +53.5272 -25.6637 -10.6018 +# end of facet 311 +68.5368 -2.77056 -11.915 +37.3746 -25.6637 -11.1159 +53.5272 -25.6637 -10.6018 +# end of facet 312 +68.5368 -2.77056 -11.915 +64.8166 -2.77056 -13.5167 +37.3746 -25.6637 -11.1159 +# end of facet 313 +64.8166 -2.77056 -13.5167 +27.6618 -25.6637 -12.9043 +37.3746 -25.6637 -11.1159 +# end of facet 314 +64.8166 -2.77056 -13.5167 +62.4798 -2.77056 -15.9505 +27.6618 -25.6637 -12.9043 +# end of facet 315 +78.1414 -25.6637 -15.5458 +68.8988 -117.236 -12.3182 +78.7598 -117.236 -15.5999 +# end of facet 316 +78.1414 -25.6637 -15.5458 +69.2888 -25.6637 -12.3523 +68.8988 -117.236 -12.3182 +# end of facet 317 +69.2888 -25.6637 -12.3523 +51.3799 -117.236 -10.414 +68.8988 -117.236 -12.3182 +# end of facet 318 +69.2888 -25.6637 -12.3523 +53.5272 -25.6637 -10.6018 +51.3799 -117.236 -10.414 +# end of facet 319 +53.5272 -25.6637 -10.6018 +33.4486 -117.236 -10.7724 +51.3799 -117.236 -10.414 +# end of facet 320 +53.5272 -25.6637 -10.6018 +37.3746 -25.6637 -11.1159 +33.4486 -117.236 -10.7724 +# end of facet 321 +37.3746 -25.6637 -11.1159 +22.6805 -117.236 -12.4685 +33.4486 -117.236 -10.7724 +# end of facet 322 +37.3746 -25.6637 -11.1159 +27.6618 -25.6637 -12.9043 +22.6805 -117.236 -12.4685 +# end of facet 323 +33.4486 111.695 -10.7724 +50.7202 111.695 -14.0342 +22.6806 111.695 -12.4685 +# end of facet 324 +51.3799 111.695 -10.414 +50.7202 111.695 -14.0342 +33.4486 111.695 -10.7724 +# end of facet 325 +50.7202 111.695 -14.0342 +68.8988 111.695 -12.3182 +78.7598 111.695 -15.5999 +# end of facet 326 +50.7202 111.695 -14.0342 +51.3799 111.695 -10.414 +68.8988 111.695 -12.3182 +# end of facet 327 +33.4486 -117.236 -10.7724 +22.6805 -117.236 -12.4685 +50.7202 -117.236 -14.0342 +# end of facet 328 +51.3799 -117.236 -10.414 +33.4486 -117.236 -10.7724 +50.7202 -117.236 -14.0342 +# end of facet 329 +50.7202 -117.236 -14.0342 +78.7598 -117.236 -15.5999 +68.8988 -117.236 -12.3182 +# end of facet 330 +50.7202 -117.236 -14.0342 +68.8988 -117.236 -12.3182 +51.3799 -117.236 -10.414 +# end of facet 331 +22.6806 111.695 -12.4685 +52.8988 20.1226 -14.2248 +27.6554 20.1226 -12.9038 +# end of facet 332 +22.6806 111.695 -12.4685 +50.7202 111.695 -14.0342 +52.8988 20.1226 -14.2248 +# end of facet 333 +50.7202 111.695 -14.0342 +78.1422 20.1225 -15.5459 +52.8988 20.1226 -14.2248 +# end of facet 334 +50.7202 111.695 -14.0342 +78.7598 111.695 -15.5999 +78.1422 20.1225 -15.5459 +# end of facet 335 +27.6554 20.1226 -12.9038 +68.1493 -2.77057 -15.5591 +62.4798 -2.77056 -15.9505 +# end of facet 336 +27.6554 20.1226 -12.9038 +52.8988 20.1226 -14.2248 +68.1493 -2.77057 -15.5591 +# end of facet 337 +52.8988 20.1226 -14.2248 +73.8189 -2.77057 -15.1677 +68.1493 -2.77057 -15.5591 +# end of facet 338 +52.8988 20.1226 -14.2248 +78.1422 20.1225 -15.5459 +73.8189 -2.77057 -15.1677 +# end of facet 339 +62.4798 -2.77056 -15.9505 +52.9016 -25.6637 -14.2251 +27.6618 -25.6637 -12.9043 +# end of facet 340 +62.4798 -2.77056 -15.9505 +68.1493 -2.77057 -15.5591 +52.9016 -25.6637 -14.2251 +# end of facet 341 +68.1493 -2.77057 -15.5591 +78.1414 -25.6637 -15.5458 +52.9016 -25.6637 -14.2251 +# end of facet 342 +68.1493 -2.77057 -15.5591 +73.8189 -2.77057 -15.1677 +78.1414 -25.6637 -15.5458 +# end of facet 343 +27.6618 -25.6637 -12.9043 +50.7202 -117.236 -14.0342 +22.6805 -117.236 -12.4685 +# end of facet 344 +27.6618 -25.6637 -12.9043 +52.9016 -25.6637 -14.2251 +50.7202 -117.236 -14.0342 +# end of facet 345 +52.9016 -25.6637 -14.2251 +78.7598 -117.236 -15.5999 +50.7202 -117.236 -14.0342 +# end of facet 346 +52.9016 -25.6637 -14.2251 +78.1414 -25.6637 -15.5458 +78.7598 -117.236 -15.5999 +# end of facet 347 +89.2387 116.86 17.7318 +85.8409 11.7784 17.9716 +33.0999 116.86 15.9636 +# end of facet 348 +33.0999 116.86 15.9636 +85.8409 11.7784 17.9716 +38.0938 21.4202 16.1842 +# end of facet 349 +38.0938 21.4202 16.1842 +84.8989 -2.43972 18.0381 +68.0573 -2.43971 17.5077 +# end of facet 350 +38.0938 21.4202 16.1842 +85.8409 11.7784 17.9716 +84.8989 -2.43972 18.0381 +# end of facet 351 +68.0573 -2.43971 17.5077 +84.8989 -2.43972 18.0381 +88.6187 -26.2996 17.7756 +# end of facet 352 +68.0573 -2.43971 17.5077 +88.6187 -26.2996 17.7756 +59.6393 -18.524 17.1358 +# end of facet 353 +38.0938 -26.2995 16.1842 +89.2387 -121.739 17.7318 +33.0999 -121.739 15.9637 +# end of facet 354 +38.0938 -26.2995 16.1842 +59.6393 -18.524 17.1358 +89.2387 -121.739 17.7318 +# end of facet 355 +59.6393 -18.524 17.1358 +88.6187 -26.2996 17.7756 +89.2387 -121.739 17.7318 +# end of facet 356 +95.489 123.481 47.0575 +94.001 -1.78316 47.1625 +39.3502 123.481 45.2893 +# end of facet 357 +39.3502 123.481 45.2893 +94.001 -1.78316 47.1625 +51.3356 -1.78314 45.8187 +# end of facet 358 +51.3356 -1.78314 45.8187 +95.4889 -127.047 47.0575 +39.3501 -127.047 45.2894 +# end of facet 359 +51.3356 -1.78314 45.8187 +94.001 -1.78316 47.1625 +95.4889 -127.047 47.0575 +# end of facet 360 +105.577 -17.2161 12.146 +105.577 -19.7332 2.85249 +110.497 -16.1678 3.80829 +# end of facet 361 +110.497 -16.1678 3.80829 +110.497 -14.1379 11.3031 +105.577 -17.2161 12.146 +# end of facet 362 +105.577 -10.6054 18.7567 +105.577 -17.2161 12.146 +110.497 -14.1379 11.3031 +# end of facet 363 +110.497 -14.1379 11.3031 +110.497 -8.80665 16.6343 +105.577 -10.6054 18.7567 +# end of facet 364 +105.577 14.5923 12.146 +105.577 7.98161 18.7567 +110.497 6.18287 16.6343 +# end of facet 365 +110.497 6.18287 16.6343 +110.497 11.5141 11.303 +105.577 14.5923 12.146 +# end of facet 366 +105.577 17.1094 2.85249 +105.577 14.5923 12.146 +110.497 11.5141 11.303 +# end of facet 367 +110.497 11.5141 11.303 +110.497 13.544 3.80829 +105.577 17.1094 2.85249 +# end of facet 368 +105.577 14.5923 -6.44101 +105.577 17.1094 2.85249 +110.497 13.544 3.80829 +# end of facet 369 +110.497 13.544 3.80829 +110.497 11.5141 -3.68647 +105.577 14.5923 -6.44101 +# end of facet 370 +105.379 7.9816 -13.4545 +105.577 14.5923 -6.44101 +110.497 11.5141 -3.68647 +# end of facet 371 +110.497 11.5141 -3.68647 +110.497 6.18286 -9.01768 +105.379 7.9816 -13.4545 +# end of facet 372 +105.379 -1.3119 -15.9716 +105.379 7.9816 -13.4545 +110.497 6.18286 -9.01768 +# end of facet 373 +110.497 6.18286 -9.01768 +110.497 -1.3119 -11.0476 +105.379 -1.3119 -15.9716 +# end of facet 374 +105.379 -10.6054 -13.4545 +105.379 -1.3119 -15.9716 +110.497 -1.3119 -11.0476 +# end of facet 375 +110.497 -1.3119 -11.0476 +110.497 -8.80666 -9.01767 +105.379 -10.6054 -13.4545 +# end of facet 376 +105.577 -17.2161 -6.44101 +105.379 -10.6054 -13.4545 +110.497 -8.80666 -9.01767 +# end of facet 377 +110.497 -8.80666 -9.01767 +110.497 -14.1379 -3.68646 +105.577 -17.2161 -6.44101 +# end of facet 378 +105.577 -19.7332 2.85249 +105.577 -17.2161 -6.44101 +110.497 -14.1379 -3.68646 +# end of facet 379 +110.497 -14.1379 -3.68646 +110.497 -16.1678 3.80829 +105.577 -19.7332 2.85249 +# end of facet 380 +105.577 -1.3119 21.2738 +105.577 -10.6054 18.7567 +110.497 -8.80665 16.6343 +# end of facet 381 +110.497 -8.80665 16.6343 +110.497 -1.31189 18.6642 +105.577 -1.3119 21.2738 +# end of facet 382 +105.577 7.98161 18.7567 +105.577 -1.3119 21.2738 +110.497 -1.31189 18.6642 +# end of facet 383 +110.497 -1.31189 18.6642 +110.497 6.18287 16.6343 +105.577 7.98161 18.7567 +# end of facet 384 +-112.099 -3.25368 12.7942 +-121.136 -3.25368 20.8233 +-121.136 -1.25368 20.8233 +# end of facet 385 +-112.099 -3.25368 12.7942 +-121.136 -1.25368 20.8233 +-112.099 -1.25368 12.7942 +# end of facet 386 +-121.136 -3.25368 20.8233 +-119.432 -3.25368 34.4135 +-119.432 -1.25368 34.4135 +# end of facet 387 +-121.136 -3.25368 20.8233 +-119.432 -1.25368 34.4135 +-121.136 -1.25368 20.8233 +# end of facet 388 +-119.432 -3.25368 34.4135 +-105.521 -3.25368 43.5446 +-105.521 -1.25368 43.5446 +# end of facet 389 +-119.432 -3.25368 34.4135 +-105.521 -1.25368 43.5446 +-119.432 -1.25368 34.4135 +# end of facet 390 +-105.521 -3.25368 43.5446 +-88.4319 -3.25367 40.0181 +-88.4319 -1.25367 40.0181 +# end of facet 391 +-105.521 -3.25368 43.5446 +-88.4319 -1.25367 40.0181 +-105.521 -1.25368 43.5446 +# end of facet 392 +-88.4319 -3.25367 40.0181 +-86.2759 -3.25367 26.1028 +-86.2759 -1.25367 26.1028 +# end of facet 393 +-88.4319 -3.25367 40.0181 +-86.2759 -1.25367 26.1028 +-88.4319 -1.25367 40.0181 +# end of facet 394 +-86.2759 -3.25367 26.1028 +-91.4362 -3.25367 18.9357 +-91.4362 -1.25367 18.9357 +# end of facet 395 +-86.2759 -3.25367 26.1028 +-91.4362 -1.25367 18.9357 +-86.2759 -1.25367 26.1028 +# end of facet 396 +-98.2006 -3.20579 9.04793 +-112.099 -3.25368 12.7942 +-112.099 -1.25368 12.7942 +# end of facet 397 +-98.2006 -3.20579 9.04793 +-112.099 -1.25368 12.7942 +-98.2006 -0.821234 8.92293 +# end of facet 398 +-99.8226 -4.08427 18.8028 +-121.136 -3.25368 20.8233 +-112.099 -3.25368 12.7942 +# end of facet 399 +-99.8226 -4.08427 18.8028 +-119.432 -3.25368 34.4135 +-121.136 -3.25368 20.8233 +# end of facet 400 +-99.8226 -4.08427 18.8028 +-105.521 -3.25368 43.5446 +-119.432 -3.25368 34.4135 +# end of facet 401 +-99.8226 -4.08427 18.8028 +-88.4319 -3.25367 40.0181 +-105.521 -3.25368 43.5446 +# end of facet 402 +-99.8226 -4.08427 18.8028 +-86.2759 -3.25367 26.1028 +-88.4319 -3.25367 40.0181 +# end of facet 403 +-99.8226 -4.08427 18.8028 +-91.4362 -3.25367 18.9357 +-86.2759 -3.25367 26.1028 +# end of facet 404 +-99.8226 -0.360618 18.8028 +-112.099 -1.25368 12.7942 +-121.136 -1.25368 20.8233 +# end of facet 405 +-99.8226 -0.360618 18.8028 +-121.136 -1.25368 20.8233 +-119.432 -1.25368 34.4135 +# end of facet 406 +-99.8226 -0.360618 18.8028 +-119.432 -1.25368 34.4135 +-105.521 -1.25368 43.5446 +# end of facet 407 +-99.8226 -0.360618 18.8028 +-105.521 -1.25368 43.5446 +-88.4319 -1.25367 40.0181 +# end of facet 408 +-99.8226 -0.360618 18.8028 +-88.4319 -1.25367 40.0181 +-86.2759 -1.25367 26.1028 +# end of facet 409 +-99.8226 -0.360618 18.8028 +-86.2759 -1.25367 26.1028 +-91.4362 -1.25367 18.9357 +# end of facet 410 +-112.099 -3.25368 12.7942 +-98.2006 -3.20579 9.04793 +-100.182 -4.44158 17.2855 +# end of facet 411 +-100.182 -4.44158 17.2855 +-99.8226 -4.08427 18.8028 +-112.099 -3.25368 12.7942 +# end of facet 412 +-22.7789 6.99085 18.7078 +-49.5939 7.10967 17.4339 +-49.5939 7.10967 19.4339 +# end of facet 413 +-22.7789 6.99085 18.7078 +-49.5939 7.10967 19.4339 +-22.7789 -1.31185 20.9565 +# end of facet 414 +-22.7789 -1.31185 20.9565 +-49.5939 7.10967 19.4339 +-91.4362 -1.25367 18.9357 +# end of facet 415 +-49.5939 7.10967 19.4339 +-99.8226 -0.360618 18.8028 +-91.4362 -1.25367 18.9357 +# end of facet 416 +-22.7789 -1.31185 20.9565 +-91.4362 -1.25367 18.9357 +-91.4362 -3.25367 18.9357 +# end of facet 417 +-22.7789 -1.31185 20.9565 +-91.4362 -3.25367 18.9357 +-22.7789 -9.61456 18.7078 +# end of facet 418 +-22.7789 -9.61456 18.7078 +-91.4362 -3.25367 18.9357 +-49.5939 -11.4921 19.4339 +# end of facet 419 +-49.5939 -11.4921 19.4339 +-91.4362 -3.25367 18.9357 +-99.8226 -4.08427 18.8028 +# end of facet 420 +-22.7789 -9.61456 18.7078 +-49.5939 -11.4921 19.4339 +-49.5939 -11.4921 17.4339 +# end of facet 421 +-22.861 -14.3947 14.6493 +-22.7789 -9.61456 18.7078 +-49.5939 -11.4921 17.4339 +# end of facet 422 +-22.861 -14.3947 14.6493 +-49.5939 -11.4921 17.4339 +-70.4901 -10.1549 10.8835 +# end of facet 423 +-49.5939 -11.4921 17.4339 +-100.182 -4.44158 17.2855 +-70.4901 -10.1549 10.8835 +# end of facet 424 +-98.2006 -0.821234 8.92293 +-112.099 -1.25368 12.7942 +-100.182 0.268416 17.3186 +# end of facet 425 +-100.182 0.268416 17.3186 +-112.099 -1.25368 12.7942 +-99.8226 -0.360618 18.8028 +# end of facet 426 +-22.9299 10.6068 14.378 +-49.5939 7.10967 17.4339 +-22.7789 6.99085 18.7078 +# end of facet 427 +-22.9299 10.6068 14.378 +-70.4901 6.3229 15.3448 +-49.5939 7.10967 17.4339 +# end of facet 428 +-49.5939 7.10967 17.4339 +-70.4901 6.3229 15.3448 +-100.182 0.268416 17.3186 +# end of facet 429 +110.497 11.5141 11.303 +110.497 11.5141 -3.68647 +110.497 13.544 3.80829 +# end of facet 430 +110.497 6.18287 16.6343 +110.497 11.5141 -3.68647 +110.497 11.5141 11.303 +# end of facet 431 +110.497 -1.31189 18.6642 +110.497 11.5141 -3.68647 +110.497 6.18287 16.6343 +# end of facet 432 +110.497 -8.80665 16.6343 +110.497 11.5141 -3.68647 +110.497 -1.31189 18.6642 +# end of facet 433 +110.497 -14.1379 11.3031 +110.497 11.5141 -3.68647 +110.497 -8.80665 16.6343 +# end of facet 434 +110.497 -16.1678 3.80829 +110.497 11.5141 -3.68647 +110.497 -14.1379 11.3031 +# end of facet 435 +110.497 -14.1379 -3.68646 +110.497 11.5141 -3.68647 +110.497 -16.1678 3.80829 +# end of facet 436 +110.497 -8.80666 -9.01767 +110.497 11.5141 -3.68647 +110.497 -14.1379 -3.68646 +# end of facet 437 +110.497 -1.3119 -11.0476 +110.497 11.5141 -3.68647 +110.497 -8.80666 -9.01767 +# end of facet 438 +110.497 6.18286 -9.01768 +110.497 11.5141 -3.68647 +110.497 -1.3119 -11.0476 +# end of facet 439 +-49.5939 7.10967 17.4339 +-98.6241 48.9647 17.4339 +-98.6241 48.9647 19.4339 +# end of facet 440 +-49.5939 7.10967 17.4339 +-98.6241 48.9647 19.4339 +-49.5939 7.10967 19.4339 +# end of facet 441 +-98.6241 48.9647 17.4339 +-109.387 48.3668 17.4339 +-109.387 48.3668 19.4339 +# end of facet 442 +-98.6241 48.9647 17.4339 +-109.387 48.3668 19.4339 +-98.6241 48.9647 19.4339 +# end of facet 443 +-109.387 48.3668 17.4339 +-112.974 41.1917 17.4339 +-112.974 41.1917 19.4339 +# end of facet 444 +-109.387 48.3668 17.4339 +-112.974 41.1917 19.4339 +-109.387 48.3668 19.4339 +# end of facet 445 +-112.974 41.1917 17.4339 +-112.974 10.0993 17.4339 +-112.974 10.0993 19.4339 +# end of facet 446 +-112.974 41.1917 17.4339 +-112.974 10.0993 19.4339 +-112.974 41.1917 19.4339 +# end of facet 447 +-112.974 10.0993 17.4339 +-100.182 0.268416 17.3186 +-99.8226 -0.360618 18.8028 +# end of facet 448 +-112.974 10.0993 17.4339 +-99.8226 -0.360618 18.8028 +-112.974 10.0993 19.4339 +# end of facet 449 +-100.182 -4.44158 17.2855 +-112.974 -14.4817 17.4339 +-112.974 -14.4817 19.4339 +# end of facet 450 +-100.182 -4.44158 17.2855 +-112.974 -14.4817 19.4339 +-99.8226 -4.08427 18.8028 +# end of facet 451 +-112.974 -14.4817 17.4339 +-112.974 -45.5741 17.4339 +-112.974 -45.5741 19.4339 +# end of facet 452 +-112.974 -14.4817 17.4339 +-112.974 -45.5741 19.4339 +-112.974 -14.4817 19.4339 +# end of facet 453 +-112.974 -45.5741 17.4339 +-109.387 -52.7492 17.4339 +-109.387 -52.7492 19.4339 +# end of facet 454 +-112.974 -45.5741 17.4339 +-109.387 -52.7492 19.4339 +-112.974 -45.5741 19.4339 +# end of facet 455 +-109.387 -52.7492 17.4339 +-98.6241 -53.3472 17.4339 +-98.6241 -53.3472 19.4339 +# end of facet 456 +-109.387 -52.7492 17.4339 +-98.6241 -53.3472 19.4339 +-109.387 -52.7492 19.4339 +# end of facet 457 +-98.6241 -53.3472 17.4339 +-49.5939 -11.4921 17.4339 +-49.5939 -11.4921 19.4339 +# end of facet 458 +-98.6241 -53.3472 17.4339 +-49.5939 -11.4921 19.4339 +-98.6241 -53.3472 19.4339 +# end of facet 459 +-112.974 -45.5741 17.4339 +-98.6241 -53.3472 17.4339 +-109.387 -52.7492 17.4339 +# end of facet 460 +-112.974 -45.5741 17.4339 +-49.5939 -11.4921 17.4339 +-98.6241 -53.3472 17.4339 +# end of facet 461 +-112.974 -14.4817 17.4339 +-49.5939 -11.4921 17.4339 +-112.974 -45.5741 17.4339 +# end of facet 462 +-112.974 10.0993 17.4339 +-98.6241 48.9647 17.4339 +-100.182 0.268416 17.3186 +# end of facet 463 +-112.974 41.1917 17.4339 +-98.6241 48.9647 17.4339 +-112.974 10.0993 17.4339 +# end of facet 464 +-112.974 41.1917 17.4339 +-109.387 48.3668 17.4339 +-98.6241 48.9647 17.4339 +# end of facet 465 +-112.974 -45.5741 19.4339 +-109.387 -52.7492 19.4339 +-98.6241 -53.3472 19.4339 +# end of facet 466 +-112.974 -45.5741 19.4339 +-98.6241 -53.3472 19.4339 +-49.5939 -11.4921 19.4339 +# end of facet 467 +-112.974 -14.4817 19.4339 +-112.974 -45.5741 19.4339 +-49.5939 -11.4921 19.4339 +# end of facet 468 +-99.8226 -4.08427 18.8028 +-112.974 -14.4817 19.4339 +-49.5939 -11.4921 19.4339 +# end of facet 469 +-112.974 10.0993 19.4339 +-99.8226 -0.360618 18.8028 +-98.6241 48.9647 19.4339 +# end of facet 470 +-112.974 41.1917 19.4339 +-112.974 10.0993 19.4339 +-98.6241 48.9647 19.4339 +# end of facet 471 +-112.974 41.1917 19.4339 +-98.6241 48.9647 19.4339 +-109.387 48.3668 19.4339 +# end of facet 472 +-49.5939 7.10967 19.4339 +-98.6241 48.9647 19.4339 +-99.8226 -0.360618 18.8028 +# end of facet 473 +-49.5939 -11.4921 17.4339 +-112.974 -14.4817 17.4339 +-100.182 -4.44158 17.2855 +# end of facet 474 +-49.5939 7.10967 17.4339 +-100.182 0.268416 17.3186 +-98.6241 48.9647 17.4339 +# end of facet 475 +105.577 -10.6054 18.7567 +-22.7789 -1.31185 20.9565 +-22.7789 -9.61456 18.7078 +# end of facet 476 +105.577 -10.6054 18.7567 +105.577 -1.3119 21.2738 +-22.7789 -1.31185 20.9565 +# end of facet 477 +105.577 -1.3119 21.2738 +-22.7789 6.99085 18.7078 +-22.7789 -1.31185 20.9565 +# end of facet 478 +105.577 -1.3119 21.2738 +105.577 7.98161 18.7567 +-22.7789 6.99085 18.7078 +# end of facet 479 diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/FokkerDrI_layer_0.vertices.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/FokkerDrI_layer_0.vertices.dat new file mode 100644 index 00000000000..1188519396a --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/FokkerDrI_layer_0.vertices.dat @@ -0,0 +1,376 @@ +# Copyright 2010 by Christian Feuersaenger. +# This model has been designed by Christian Feuersaenger. +# It can be re-distributed freely under the terms of the GNU General Public License. +105.577 -19.7332 2.85249 +88.9233 -21.1254 13.0359 +89.2104 -22.1547 1.46467 +105.577 -17.2161 12.146 +105.577 -10.6054 18.7567 +105.577 7.98161 18.7567 +105.577 14.5923 12.146 +88.7667 18.1841 13.2767 +105.577 17.1094 2.85249 +89.0774 19.2677 -9.74034 +105.577 14.5923 -6.44101 +66.9375 10.305 -17.775 +105.379 7.9816 -13.4545 +66.9375 -1.31189 -20.9214 +105.379 -1.3119 -15.9716 +66.9375 -12.9288 -17.775 +105.379 -10.6054 -13.4545 +88.9233 -23.1503 -10.1095 +105.577 -17.2161 -6.44101 +-22.861 -14.3947 14.6493 +-22.7789 -9.61456 18.7078 +-22.9299 10.6068 14.378 +-22.7789 6.99085 18.7078 +-23.2405 11.6505 -8.68062 +-22.7788 -1.31186 -11.9582 +-22.7788 -9.61456 -9.70948 +-22.861 -15.8419 -1.89289 +-70.4901 7.53121 10.8835 +-70.4901 6.3229 15.3448 +-70.4901 6.32289 6.42225 +-70.4901 3.14946 3.24881 +-70.4901 -1.31184 2.0405 +-70.4901 -5.77314 3.24882 +-70.4901 -8.94657 6.42225 +-70.4901 -10.1549 10.8835 +-100.182 0.268416 17.3186 +-98.2006 -0.821234 8.92293 +-98.2006 -3.20579 9.04793 +-100.182 -4.44158 17.2855 +64.9266 101.895 -13.4854 +56.7796 101.895 -13.3984 +56.7796 103.126 -13.3984 +64.9266 103.126 -13.4854 +81.545 101.895 47.5631 +81.545 103.126 47.5632 +73.398 103.126 47.6501 +73.398 101.895 47.6501 +64.9266 -106.068 -13.4854 +56.7796 -106.068 -13.3984 +56.7796 -104.837 -13.3984 +64.9266 -104.837 -13.4854 +81.545 -106.068 47.5632 +81.545 -104.837 47.5632 +73.398 -104.837 47.6501 +73.398 -106.068 47.6501 +83.0408 23.6123 -47.9599 +82.5803 23.6123 -46.1334 +96.5106 23.6123 -44.4157 +96.9711 23.6123 -46.2422 +83.0408 -28.2785 -47.9599 +96.9711 -28.2785 -46.2422 +96.5106 -28.2785 -44.4157 +82.5803 -28.2785 -46.1334 +89.2387 116.86 17.7318 +79.5202 21.4201 19.9444 +85.8409 11.7784 17.9716 +79.1292 116.86 20.1416 +63.6638 21.4202 20.2775 +38.0938 21.4202 16.1842 +43.6792 116.86 18.5918 +33.0999 116.86 15.9636 +81.8661 -2.43971 18.761 +84.8989 -2.43972 18.0381 +68.0573 -2.43971 17.5077 +79.5202 -26.2996 19.9444 +88.6187 -26.2996 17.7756 +72.9517 -18.524 19.2669 +64.5964 -18.524 18.3673 +59.6393 -18.524 17.1358 +63.6638 -26.2995 20.2775 +47.6152 -26.2995 18.5496 +38.0938 -26.2995 16.1842 +79.1292 -121.739 20.1416 +89.2387 -121.739 17.7318 +43.6792 -121.739 18.5918 +33.0999 -121.739 15.9637 +95.489 123.481 47.0575 +85.3795 123.481 49.4673 +94.001 -1.78316 47.1625 +86.3178 -1.78315 48.994 +72.9279 -1.78315 49.2752 +67.7613 123.481 49.8374 +59.3758 -1.78314 47.8161 +49.9295 123.481 47.9175 +51.3356 -1.78314 45.8187 +39.3502 123.481 45.2893 +49.9294 -127.047 47.9175 +85.3794 -127.047 49.4673 +95.4889 -127.047 47.0575 +67.7612 -127.047 49.8374 +39.3501 -127.047 45.2894 +88.4822 21.1915 -42.0975 +89.6693 20.2752 -42.6022 +88.746 20.2752 -42.3027 +89.6094 21.4746 -42.4261 +94.6737 11.4306 -7.26788 +95.434 11.9076 -7.44053 +88.4822 21.1915 -42.0975 +95.3991 10.6588 -7.62287 +94.6737 11.4306 -7.26788 +96.1676 11.4306 -7.75246 +95.434 11.9076 -7.44053 +94.6737 11.4306 -7.26788 +95.434 11.9076 -7.44053 +59.959 -15.1784 16.1966 +61.0137 -14.4528 16.1701 +61.0145 -15.5992 15.7485 +68.3942 -25.2312 45.671 +59.959 -15.1784 16.1966 +68.6866 -26.3729 45.1701 +68.3942 -25.2312 45.671 +59.959 -15.1784 16.1966 +69.5185 -25.4836 45.2657 +68.3942 -25.2312 45.671 +68.3942 -25.2312 45.671 +60.7806 9.38285 16.3554 +60.1064 10.373 16.2606 +61.3419 10.353 15.9245 +68.4341 20.4332 45.7041 +68.7498 21.5746 45.2925 +69.5639 20.6855 45.3199 +68.7498 21.5746 45.2925 +68.4341 20.4332 45.7041 +68.7498 21.5746 45.2925 +68.4341 20.4332 45.7041 +101.572 -12.7402 12.1812 +102.803 -13.41 11.8998 +102.069 -13.8532 11.3485 +79.9604 -27.1891 46.2867 +79.4632 -26.0761 47.1195 +80.6943 -26.7459 46.8381 +79.4632 -26.0761 47.1195 +101.572 -12.7402 12.1812 +79.4632 -26.0761 47.1195 +102.456 8.04328 12.6832 +101.832 8.63141 12.1866 +102.959 8.9089 12.224 +79.0482 21.6335 47.0951 +79.9626 21.3704 47.4388 +80.0469 22.2598 46.8844 +101.832 8.63141 12.1866 +79.0482 21.6335 47.0951 +101.832 8.63141 12.1866 +79.0482 21.6335 47.0951 +87.2627 21.1915 -43.9267 +88.6181 21.1915 -43.5533 +88.0183 20.2752 -43.8504 +87.8923 21.7577 -43.6717 +67.5028 13.0543 -13.7479 +68.1323 13.5885 -13.4929 +87.2627 21.1915 -43.9267 +87.2627 21.1915 -43.9267 +68.2584 12.1899 -13.6717 +68.8581 13.0543 -13.3745 +89.9762 -25.3854 -43.1132 +88.6141 -24.9272 -42.7312 +89.6693 -24.4691 -43.1333 +89.2426 -25.9516 -42.8012 +94.6737 -15.6302 -7.79901 +95.434 -16.1072 -7.97165 +95.3991 -14.8585 -8.154 +96.1676 -15.6302 -8.28359 +89.6693 -24.4691 -43.1333 +95.3991 -14.8585 -8.154 +89.9762 -25.3854 -43.1132 +89.6693 -24.4691 -43.1333 +89.9762 -25.3854 -43.1132 +89.9762 -25.3854 -43.1132 +88.4372 -24.4691 -44.2662 +87.2627 -25.3854 -44.4578 +87.5995 -24.4691 -44.497 +88.2552 -25.6685 -44.1436 +67.5028 -17.2539 -14.2791 +68.1323 -17.7881 -14.0241 +68.2584 -16.3895 -14.2028 +68.8581 -17.2539 -13.9056 +97.3206 25.2367 -38.1479 +82.6101 25.2367 -38.148 +89.9653 25.2367 -35.1013 +79.5634 25.2367 -45.5032 +82.6101 25.2367 -52.8585 +89.9653 25.2367 -55.9052 +97.3206 25.2367 -52.8585 +100.367 25.2367 -45.5032 +97.3206 23.5724 -38.1479 +100.367 23.5724 -45.5032 +89.9653 23.5724 -35.1013 +82.6101 23.5724 -38.148 +79.5634 23.5724 -45.5032 +82.6101 23.5724 -52.8585 +89.9653 23.5724 -55.9052 +97.3206 23.5724 -52.8585 +97.3206 -28.5743 -39.316 +82.61 -28.5743 -39.316 +89.9653 -28.5743 -36.2693 +79.5634 -28.5743 -46.6712 +82.6101 -28.5743 -54.0265 +89.9653 -28.5743 -57.0732 +97.3206 -28.5743 -54.0265 +100.367 -28.5743 -46.6712 +97.3206 -30.2386 -39.316 +100.367 -30.2386 -46.6712 +89.9653 -30.2386 -36.2693 +82.61 -30.2386 -39.316 +79.5634 -30.2386 -46.6712 +82.6101 -30.2386 -54.0265 +89.9653 -30.2386 -57.0732 +97.3206 -30.2386 -54.0265 +-75.7342 -0.679209 3.34353 +-76.9148 -3.17567 4.17024 +-75.7342 -2.34352 3.34353 +-78.0955 -2.34352 4.99696 +-78.0955 -0.679208 4.99696 +-76.9148 0.152946 4.17024 +-85.4028 -1.51136 -7.95186 +78.7598 111.695 -15.5999 +69.2883 20.1226 -12.3523 +78.1422 20.1225 -15.5459 +68.8988 111.695 -12.3182 +53.5245 20.1226 -10.6016 +51.3799 111.695 -10.414 +37.3696 20.1226 -11.1154 +33.4486 111.695 -10.7724 +27.6554 20.1226 -12.9038 +22.6806 111.695 -12.4685 +72.0147 -2.77057 -12.5908 +73.8189 -2.77057 -15.1677 +68.5368 -2.77056 -11.915 +64.8166 -2.77056 -13.5167 +62.4798 -2.77056 -15.9505 +69.2888 -25.6637 -12.3523 +78.1414 -25.6637 -15.5458 +53.5272 -25.6637 -10.6018 +37.3746 -25.6637 -11.1159 +27.6618 -25.6637 -12.9043 +68.8988 -117.236 -12.3182 +78.7598 -117.236 -15.5999 +51.3799 -117.236 -10.414 +33.4486 -117.236 -10.7724 +22.6805 -117.236 -12.4685 +50.7202 111.695 -14.0342 +50.7202 -117.236 -14.0342 +52.8988 20.1226 -14.2248 +68.1493 -2.77057 -15.5591 +52.9016 -25.6637 -14.2251 +110.497 -16.1678 3.80829 +110.497 -14.1379 11.3031 +110.497 -8.80665 16.6343 +110.497 6.18287 16.6343 +110.497 11.5141 11.303 +110.497 13.544 3.80829 +110.497 11.5141 -3.68647 +110.497 6.18286 -9.01768 +110.497 -1.3119 -11.0476 +110.497 -8.80666 -9.01767 +110.497 -14.1379 -3.68646 +105.577 -1.3119 21.2738 +110.497 -1.31189 18.6642 +-112.099 -3.25368 12.7942 +-121.136 -3.25368 20.8233 +-121.136 -1.25368 20.8233 +-112.099 -1.25368 12.7942 +-119.432 -3.25368 34.4135 +-119.432 -1.25368 34.4135 +-105.521 -3.25368 43.5446 +-105.521 -1.25368 43.5446 +-88.4319 -3.25367 40.0181 +-88.4319 -1.25367 40.0181 +-86.2759 -3.25367 26.1028 +-86.2759 -1.25367 26.1028 +-91.4362 -3.25367 18.9357 +-91.4362 -1.25367 18.9357 +-99.8226 -4.08427 18.8028 +-99.8226 -0.360618 18.8028 +-49.5939 7.10967 17.4339 +-49.5939 7.10967 19.4339 +-22.7789 -1.31185 20.9565 +-49.5939 -11.4921 19.4339 +-49.5939 -11.4921 17.4339 +110.497 11.5141 11.303 +110.497 11.5141 -3.68647 +110.497 13.544 3.80829 +110.497 6.18287 16.6343 +110.497 11.5141 -3.68647 +110.497 11.5141 11.303 +110.497 -1.31189 18.6642 +110.497 11.5141 -3.68647 +110.497 6.18287 16.6343 +110.497 -8.80665 16.6343 +110.497 11.5141 -3.68647 +110.497 -1.31189 18.6642 +110.497 -14.1379 11.3031 +110.497 11.5141 -3.68647 +110.497 -8.80665 16.6343 +110.497 -16.1678 3.80829 +110.497 11.5141 -3.68647 +110.497 -14.1379 11.3031 +110.497 -14.1379 -3.68646 +110.497 11.5141 -3.68647 +110.497 -16.1678 3.80829 +110.497 -8.80666 -9.01767 +110.497 11.5141 -3.68647 +110.497 -14.1379 -3.68646 +110.497 -1.3119 -11.0476 +110.497 11.5141 -3.68647 +110.497 -8.80666 -9.01767 +110.497 6.18286 -9.01768 +110.497 11.5141 -3.68647 +110.497 -1.3119 -11.0476 +-49.5939 7.10967 17.4339 +-98.6241 48.9647 17.4339 +-98.6241 48.9647 19.4339 +-49.5939 7.10967 17.4339 +-49.5939 7.10967 19.4339 +-109.387 48.3668 17.4339 +-109.387 48.3668 19.4339 +-112.974 41.1917 17.4339 +-112.974 41.1917 19.4339 +-112.974 10.0993 17.4339 +-112.974 10.0993 19.4339 +-100.182 0.268416 17.3186 +-99.8226 -0.360618 18.8028 +-99.8226 -0.360618 18.8028 +-100.182 -4.44158 17.2855 +-112.974 -14.4817 17.4339 +-112.974 -14.4817 19.4339 +-100.182 -4.44158 17.2855 +-99.8226 -4.08427 18.8028 +-112.974 -45.5741 17.4339 +-112.974 -45.5741 19.4339 +-109.387 -52.7492 17.4339 +-109.387 -52.7492 19.4339 +-98.6241 -53.3472 17.4339 +-98.6241 -53.3472 19.4339 +-49.5939 -11.4921 17.4339 +-49.5939 -11.4921 19.4339 +-49.5939 -11.4921 19.4339 +-49.5939 -11.4921 17.4339 +-49.5939 -11.4921 17.4339 +-100.182 0.268416 17.3186 +-49.5939 -11.4921 19.4339 +-49.5939 -11.4921 19.4339 +-99.8226 -4.08427 18.8028 +-49.5939 -11.4921 19.4339 +-99.8226 -0.360618 18.8028 +-49.5939 7.10967 19.4339 +-99.8226 -0.360618 18.8028 +-49.5939 -11.4921 17.4339 +-100.182 -4.44158 17.2855 +-49.5939 7.10967 17.4339 +-100.182 0.268416 17.3186 +105.577 -10.6054 18.7567 +-22.7789 -1.31185 20.9565 +-22.7789 -9.61456 18.7078 +105.577 -10.6054 18.7567 +105.577 -1.3119 21.2738 +-22.7789 -1.31185 20.9565 +105.577 -1.3119 21.2738 +-22.7789 6.99085 18.7078 +-22.7789 -1.31185 20.9565 +105.577 -1.3119 21.2738 +105.577 7.98161 18.7567 +-22.7789 6.99085 18.7078 diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/patchexample_conn.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/patchexample_conn.dat new file mode 100644 index 00000000000..7afda782f53 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/patchexample_conn.dat @@ -0,0 +1,78 @@ + 0.0000000e+00 1.0000000e+00 1.0000000e+01 9.0000000e+00 + 1.0000000e+00 2.0000000e+00 1.1000000e+01 1.0000000e+01 + 2.0000000e+00 3.0000000e+00 1.2000000e+01 1.1000000e+01 + 3.0000000e+00 4.0000000e+00 1.3000000e+01 1.2000000e+01 + 4.0000000e+00 5.0000000e+00 1.4000000e+01 1.3000000e+01 + 5.0000000e+00 6.0000000e+00 1.5000000e+01 1.4000000e+01 + 6.0000000e+00 7.0000000e+00 1.6000000e+01 1.5000000e+01 + 7.0000000e+00 8.0000000e+00 1.7000000e+01 1.6000000e+01 + 9.0000000e+00 1.0000000e+01 1.9000000e+01 1.8000000e+01 + 1.0000000e+01 1.1000000e+01 2.0000000e+01 1.9000000e+01 + 1.1000000e+01 1.2000000e+01 2.1000000e+01 2.0000000e+01 + 1.2000000e+01 1.3000000e+01 2.2000000e+01 2.1000000e+01 + 1.3000000e+01 1.4000000e+01 2.3000000e+01 2.2000000e+01 + 1.4000000e+01 1.5000000e+01 2.4000000e+01 2.3000000e+01 + 1.5000000e+01 1.6000000e+01 2.5000000e+01 2.4000000e+01 + 1.6000000e+01 1.7000000e+01 2.6000000e+01 2.5000000e+01 + 1.8000000e+01 1.9000000e+01 2.8000000e+01 2.7000000e+01 + 1.9000000e+01 2.0000000e+01 2.9000000e+01 2.8000000e+01 + 2.0000000e+01 2.1000000e+01 3.0000000e+01 2.9000000e+01 + 2.1000000e+01 2.2000000e+01 3.1000000e+01 3.0000000e+01 + 2.2000000e+01 2.3000000e+01 3.2000000e+01 3.1000000e+01 + 2.3000000e+01 2.4000000e+01 3.3000000e+01 3.2000000e+01 + 2.4000000e+01 2.5000000e+01 3.4000000e+01 3.3000000e+01 + 2.5000000e+01 2.6000000e+01 3.5000000e+01 3.4000000e+01 + 2.7000000e+01 2.8000000e+01 3.7000000e+01 3.6000000e+01 + 2.8000000e+01 2.9000000e+01 3.8000000e+01 3.7000000e+01 + 2.9000000e+01 3.0000000e+01 3.9000000e+01 3.8000000e+01 + 9.7000000e+01 9.6000000e+01 4.0000000e+01 9.4000000e+01 + 9.6000000e+01 9.9000000e+01 9.8000000e+01 4.0000000e+01 + 3.2000000e+01 3.3000000e+01 4.2000000e+01 4.1000000e+01 + 3.3000000e+01 3.4000000e+01 4.3000000e+01 4.2000000e+01 + 3.4000000e+01 3.5000000e+01 4.4000000e+01 4.3000000e+01 + 3.6000000e+01 3.7000000e+01 4.6000000e+01 4.5000000e+01 + 3.7000000e+01 3.8000000e+01 4.7000000e+01 4.6000000e+01 + 3.8000000e+01 3.9000000e+01 4.8000000e+01 4.7000000e+01 + 9.4000000e+01 4.0000000e+01 9.3000000e+01 9.5000000e+01 + 4.5000000e+01 4.6000000e+01 5.1000000e+01 5.0000000e+01 + 4.6000000e+01 4.7000000e+01 5.2000000e+01 5.1000000e+01 + 4.7000000e+01 4.8000000e+01 5.3000000e+01 5.2000000e+01 + 4.8000000e+01 4.9000000e+01 5.4000000e+01 5.3000000e+01 + 5.0000000e+01 5.1000000e+01 5.6000000e+01 5.5000000e+01 + 5.1000000e+01 5.2000000e+01 5.7000000e+01 5.6000000e+01 + 5.2000000e+01 5.3000000e+01 5.8000000e+01 5.7000000e+01 + 5.3000000e+01 5.4000000e+01 5.9000000e+01 5.8000000e+01 + 5.5000000e+01 5.6000000e+01 6.1000000e+01 6.0000000e+01 + 5.6000000e+01 5.7000000e+01 6.2000000e+01 6.1000000e+01 + 5.7000000e+01 5.8000000e+01 6.3000000e+01 6.2000000e+01 + 5.8000000e+01 5.9000000e+01 6.4000000e+01 6.3000000e+01 + 6.7000000e+01 6.5000000e+01 4.9000000e+01 4.8000000e+01 + 3.9000000e+01 6.6000000e+01 6.7000000e+01 4.8000000e+01 + 3.0000000e+01 6.9000000e+01 6.6000000e+01 3.9000000e+01 + 3.0000000e+01 3.1000000e+01 6.8000000e+01 6.9000000e+01 + 3.1000000e+01 3.2000000e+01 7.1000000e+01 6.8000000e+01 + 7.1000000e+01 3.2000000e+01 4.1000000e+01 7.0000000e+01 + 7.4000000e+01 7.2000000e+01 6.5000000e+01 6.7000000e+01 + 6.6000000e+01 7.3000000e+01 7.4000000e+01 6.7000000e+01 + 6.9000000e+01 7.6000000e+01 7.3000000e+01 6.6000000e+01 + 6.9000000e+01 6.8000000e+01 7.5000000e+01 7.6000000e+01 + 6.8000000e+01 7.1000000e+01 7.8000000e+01 7.5000000e+01 + 7.8000000e+01 7.1000000e+01 7.0000000e+01 7.7000000e+01 + 8.1000000e+01 7.9000000e+01 7.2000000e+01 7.4000000e+01 + 7.3000000e+01 8.0000000e+01 8.1000000e+01 7.4000000e+01 + 7.6000000e+01 8.3000000e+01 8.0000000e+01 7.3000000e+01 + 7.6000000e+01 7.5000000e+01 8.2000000e+01 8.3000000e+01 + 7.5000000e+01 7.8000000e+01 8.5000000e+01 8.2000000e+01 + 8.5000000e+01 7.8000000e+01 7.7000000e+01 8.4000000e+01 + 8.8000000e+01 8.6000000e+01 7.9000000e+01 8.1000000e+01 + 8.0000000e+01 8.7000000e+01 8.8000000e+01 8.1000000e+01 + 8.3000000e+01 9.0000000e+01 8.7000000e+01 8.0000000e+01 + 8.3000000e+01 8.2000000e+01 8.9000000e+01 9.0000000e+01 + 8.2000000e+01 8.5000000e+01 9.2000000e+01 8.9000000e+01 + 9.2000000e+01 8.5000000e+01 8.4000000e+01 9.1000000e+01 + 9.5000000e+01 9.3000000e+01 8.6000000e+01 8.8000000e+01 + 8.7000000e+01 9.4000000e+01 9.5000000e+01 8.8000000e+01 + 9.0000000e+01 9.7000000e+01 9.4000000e+01 8.7000000e+01 + 9.0000000e+01 8.9000000e+01 9.6000000e+01 9.7000000e+01 + 8.9000000e+01 9.2000000e+01 9.9000000e+01 9.6000000e+01 + 9.9000000e+01 9.2000000e+01 9.1000000e+01 9.8000000e+01 diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/patchexample_verts.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/patchexample_verts.dat new file mode 100644 index 00000000000..256972b4d36 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/patchexample_verts.dat @@ -0,0 +1,100 @@ + -1.0000000e+00 -1.0000000e+00 1.2602023e+00 + -7.5000000e-01 -1.0000000e+00 1.1554742e+00 + -5.0000000e-01 -1.0000000e+00 1.0527900e+00 + -2.5000000e-01 -1.0000000e+00 9.5514456e-01 + 0.0000000e+00 -1.0000000e+00 8.6623956e-01 + 2.5000000e-01 -1.0000000e+00 7.8917006e-01 + 5.0000000e-01 -1.0000000e+00 7.2499613e-01 + 7.5000000e-01 -1.0000000e+00 6.7266524e-01 + 1.0000000e+00 -1.0000000e+00 6.3010115e-01 + -1.0000000e+00 -7.5000000e-01 1.1554742e+00 + -7.5000000e-01 -7.5000000e-01 1.0403008e+00 + -5.0000000e-01 -7.5000000e-01 9.2531905e-01 + -2.5000000e-01 -7.5000000e-01 8.1472136e-01 + 0.0000000e+00 -7.5000000e-01 7.1511809e-01 + 2.5000000e-01 -7.5000000e-01 6.3266849e-01 + 5.0000000e-01 -7.5000000e-01 5.6872280e-01 + 7.5000000e-01 -7.5000000e-01 5.2015038e-01 + 1.0000000e+00 -7.5000000e-01 4.8280899e-01 + -1.0000000e+00 -5.0000000e-01 1.0527900e+00 + -7.5000000e-01 -5.0000000e-01 9.2531905e-01 + -5.0000000e-01 -5.0000000e-01 7.9397024e-01 + -2.5000000e-01 -5.0000000e-01 6.6333042e-01 + 0.0000000e+00 -5.0000000e-01 5.4581548e-01 + 2.5000000e-01 -5.0000000e-01 4.5681145e-01 + 5.0000000e-01 -5.0000000e-01 3.9698512e-01 + 7.5000000e-01 -5.0000000e-01 3.5659624e-01 + 1.0000000e+00 -5.0000000e-01 3.2779383e-01 + -1.0000000e+00 -2.5000000e-01 9.5514456e-01 + -7.5000000e-01 -2.5000000e-01 8.1472136e-01 + -5.0000000e-01 -2.5000000e-01 6.6333042e-01 + -2.5000000e-01 -2.5000000e-01 5.0033365e-01 + 0.0000000e+00 -2.5000000e-01 3.4402115e-01 + 2.5000000e-01 -2.5000000e-01 2.5016682e-01 + 5.0000000e-01 -2.5000000e-01 2.0651897e-01 + 7.5000000e-01 -2.5000000e-01 1.8205287e-01 + 1.0000000e+00 -2.5000000e-01 1.6597450e-01 + -1.0000000e+00 0.0000000e+00 8.6623956e-01 + -7.5000000e-01 0.0000000e+00 7.1511809e-01 + -5.0000000e-01 0.0000000e+00 5.4581548e-01 + -2.5000000e-01 0.0000000e+00 3.4402115e-01 + 0.0000000e+00 0.0000000e+00 0.0000000e+00 + 2.5000000e-01 0.0000000e+00 0.0000000e+00 + 5.0000000e-01 0.0000000e+00 0.0000000e+00 + 7.5000000e-01 0.0000000e+00 0.0000000e+00 + 1.0000000e+00 0.0000000e+00 0.0000000e+00 + -1.0000000e+00 2.5000000e-01 7.8917006e-01 + -7.5000000e-01 2.5000000e-01 6.3266849e-01 + -5.0000000e-01 2.5000000e-01 4.5681145e-01 + -2.5000000e-01 2.5000000e-01 2.5016682e-01 + 0.0000000e+00 2.5000000e-01 0.0000000e+00 + -1.0000000e+00 5.0000000e-01 7.2499613e-01 + -7.5000000e-01 5.0000000e-01 5.6872280e-01 + -5.0000000e-01 5.0000000e-01 3.9698512e-01 + -2.5000000e-01 5.0000000e-01 2.0651897e-01 + 0.0000000e+00 5.0000000e-01 0.0000000e+00 + -1.0000000e+00 7.5000000e-01 6.7266524e-01 + -7.5000000e-01 7.5000000e-01 5.2015038e-01 + -5.0000000e-01 7.5000000e-01 3.5659624e-01 + -2.5000000e-01 7.5000000e-01 1.8205287e-01 + 0.0000000e+00 7.5000000e-01 0.0000000e+00 + -1.0000000e+00 1.0000000e+00 6.3010115e-01 + -7.5000000e-01 1.0000000e+00 4.8280899e-01 + -5.0000000e-01 1.0000000e+00 3.2779383e-01 + -2.5000000e-01 1.0000000e+00 1.6597450e-01 + 0.0000000e+00 1.0000000e+00 0.0000000e+00 + 0.0000000e+00 1.2500000e-01 0.0000000e+00 + -1.2500000e-01 0.0000000e+00 2.1700489e-01 + -1.2500000e-01 1.2500000e-01 1.5772555e-01 + 0.0000000e+00 -1.2500000e-01 2.1700489e-01 + -1.2500000e-01 -1.2500000e-01 3.1545110e-01 + 1.2500000e-01 0.0000000e+00 0.0000000e+00 + 1.2500000e-01 -1.2500000e-01 1.5772555e-01 + 0.0000000e+00 6.2500000e-02 0.0000000e+00 + -6.2500000e-02 0.0000000e+00 1.3717048e-01 + -6.2500000e-02 6.2500000e-02 9.9564334e-02 + 0.0000000e+00 -6.2500000e-02 1.3717048e-01 + -6.2500000e-02 -6.2500000e-02 1.9912867e-01 + 6.2500000e-02 0.0000000e+00 0.0000000e+00 + 6.2500000e-02 -6.2500000e-02 9.9564334e-02 + 0.0000000e+00 3.1250000e-02 0.0000000e+00 + -3.1250000e-02 0.0000000e+00 8.7210232e-02 + -3.1250000e-02 3.1250000e-02 6.3038898e-02 + 0.0000000e+00 -3.1250000e-02 8.7210232e-02 + -3.1250000e-02 -3.1250000e-02 1.2607780e-01 + 3.1250000e-02 0.0000000e+00 0.0000000e+00 + 3.1250000e-02 -3.1250000e-02 6.3038898e-02 + 0.0000000e+00 1.5625000e-02 0.0000000e+00 + -1.5625000e-02 0.0000000e+00 5.5920820e-02 + -1.5625000e-02 1.5625000e-02 4.0114592e-02 + 0.0000000e+00 -1.5625000e-02 5.5920820e-02 + -1.5625000e-02 -1.5625000e-02 8.0229184e-02 + 1.5625000e-02 0.0000000e+00 0.0000000e+00 + 1.5625000e-02 -1.5625000e-02 4.0114592e-02 + 0.0000000e+00 7.8125000e-03 0.0000000e+00 + -7.8125000e-03 0.0000000e+00 3.0174658e-02 + -7.8125000e-03 7.8125000e-03 2.3236785e-02 + 0.0000000e+00 -7.8125000e-03 3.0174658e-02 + -7.8125000e-03 -7.8125000e-03 4.6473569e-02 + 7.8125000e-03 0.0000000e+00 0.0000000e+00 + 7.8125000e-03 -7.8125000e-03 2.3236785e-02 diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplots.randn.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplots.randn.dat new file mode 100644 index 00000000000..bb677cb5792 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplots.randn.dat @@ -0,0 +1,8000 @@ + 1.8131109e+00 + 8.6034974e-01 + 5.6782430e-01 + 6.6418148e-03 + -5.9978685e-01 + 1.1752312e+00 + 1.1312559e+00 + -1.7619150e+00 + -1.1518360e+00 + -3.6829301e-01 + 1.4841380e+00 + 3.9109658e-01 + 1.3076529e+00 + -5.7717857e-01 + 4.7710030e-01 + -6.2152389e-01 + -1.8751440e+00 + 3.0778620e-01 + 3.9045500e-02 + -7.6170509e-01 + -5.4991477e-01 + -7.7944067e-01 + 5.2046311e-01 + -1.0408009e+00 + 5.9186483e-01 + -2.9160874e-01 + -2.3618022e-01 + -8.7677902e-01 + -8.3681634e-01 + -6.7294580e-01 + -9.1969507e-01 + -7.0642195e-01 + -6.4205245e-01 + -1.5197377e+00 + -1.7453939e+00 + -3.1289066e+00 + 5.4568792e-01 + -9.7472775e-01 + 2.2101019e-01 + -3.9422123e-01 + 8.3784105e-01 + 3.7940423e-01 + 1.4795982e+00 + 2.3817494e-01 + 5.3898284e-01 + -3.7873039e-01 + -9.1467687e-01 + -1.7242253e+00 + -1.3712544e+00 + 1.7607432e+00 + -1.2982462e+00 + 5.1202225e-01 + 6.8258041e-02 + 6.8942432e-01 + -2.2378079e-01 + -2.7373002e-01 + 6.3005265e-01 + -3.1673214e-01 + 2.4165246e-01 + 1.4168692e+00 + 6.1909004e-01 + -5.9475015e-01 + -2.7620865e-01 + 1.4166002e+00 + -1.7844352e+00 + 3.1826201e-01 + 1.5467781e+00 + 1.1384619e-02 + 1.9877916e-01 + 9.6611400e-01 + 2.3076969e+00 + 9.5516798e-01 + -5.6577982e-01 + 5.6436342e-03 + -6.8594158e-01 + 1.0842070e-02 + -2.4390503e+00 + -1.0062516e+00 + 5.5980285e-01 + 4.7802911e-01 + -1.3308975e+00 + 5.1211791e-01 + 2.0078336e-01 + 1.0449706e+00 + 1.9995425e-01 + -9.4259353e-01 + -8.9673814e-01 + -1.2373993e+00 + 2.3858725e-01 + 8.4565885e-01 + -4.2538975e-01 + -3.2359806e-01 + -5.4866386e-01 + -2.2004495e+00 + -1.2631374e+00 + -4.1637822e-01 + 3.2685759e-01 + -8.4407028e-01 + -1.2142334e+00 + -1.1061819e+00 + 7.9669503e-01 + 2.7735263e-01 + 1.4355200e-01 + 7.8040129e-01 + 8.5744142e-01 + -6.2563809e-01 + -1.7228873e+00 + -1.4578423e+00 + 9.0082452e-01 + 4.7081287e-01 + -1.3936057e+00 + -4.1466899e-01 + -6.4050459e-02 + 1.1802218e-01 + -6.1153603e-02 + -8.3102332e-01 + 1.1035289e+00 + -4.9987718e-01 + -9.4944304e-01 + -1.9612624e+00 + -1.2756559e+00 + 2.7565515e+00 + -5.9723826e-01 + 1.4835404e+00 + -5.2071683e-01 + 1.0219885e+00 + -5.9433792e-01 + -7.1101539e-01 + 3.5456938e-01 + 1.5955629e-01 + 6.9437041e-01 + -5.0459752e-01 + 5.5838287e-01 + -6.9979882e-01 + 8.2463134e-01 + 6.6336128e-01 + 2.9680808e-01 + -1.0571600e+00 + -1.6500431e+00 + -6.0023298e-01 + 1.2418564e-01 + -1.5367966e+00 + 5.1327011e-01 + 1.6125850e+00 + -4.7037837e-01 + -1.4514822e-01 + -1.0290437e+00 + -5.8524695e-02 + -8.8189689e-01 + 1.0338046e+00 + 7.7009274e-01 + 2.3303240e-01 + -2.8218495e-01 + 1.6306199e+00 + -2.1579907e+00 + 3.5223267e-01 + 6.7157231e-01 + 4.5498983e-02 + 1.3225128e+00 + -7.8295236e-01 + 6.0761075e-02 + 1.3649457e+00 + -8.9554055e-01 + 1.2600922e+00 + -1.7669321e+00 + -2.2884447e-01 + 1.4281999e+00 + 5.5063630e-01 + -5.2008735e-03 + 2.5776911e-01 + -9.0644807e-01 + -1.4966502e+00 + -2.0867826e+00 + 6.0513657e-01 + -1.9212975e+00 + 3.9432867e-01 + -1.8109912e+00 + 5.0256570e-01 + 2.7512628e-01 + 1.6586622e-01 + -3.8138182e-01 + 1.2564276e+00 + 8.4388128e-01 + -1.2358973e+00 + -5.2102611e-01 + 4.1518539e-01 + -3.7914643e-01 + 1.0746583e+00 + -1.2592638e+00 + 5.2450293e-01 + 7.2448932e-01 + 3.4523529e-01 + 2.4724422e-01 + -1.3566897e+00 + 1.6639127e+00 + -1.3997829e-01 + -1.2661521e+00 + -9.8969417e-01 + -1.4457122e+00 + -9.3484120e-01 + 6.1114082e-01 + -3.3026248e-01 + 1.9053470e-01 + 8.0824223e-01 + -6.6719912e-01 + 7.5730235e-01 + -1.8580498e-01 + -2.9645369e-01 + 3.3022331e-01 + -1.7392974e-01 + -5.7896964e-01 + 1.7002121e+00 + 4.8453723e-02 + 2.1769252e-02 + -4.0405297e-01 + -1.4692437e+00 + 1.2515896e+00 + -9.6266425e-01 + 1.1356527e-01 + 5.6524802e-02 + 1.1478562e+00 + -2.5307599e-01 + -8.1837056e-01 + -5.6551239e-01 + 1.3718862e-01 + -1.9066178e-01 + -1.4715734e+00 + 1.0339483e+00 + -4.7896615e-01 + 2.5221935e+00 + -1.4944487e-02 + -2.5444899e-01 + 8.5698977e-02 + 2.2127396e-01 + 5.4758699e-01 + 2.6268559e+00 + -1.9429783e+00 + -1.0122603e+00 + -6.8403572e-01 + 3.0799787e-01 + -3.7565020e-01 + 5.6241654e-01 + -1.3904374e+00 + 1.1548905e+00 + 2.6491874e-01 + 3.2984233e-01 + -1.2299690e+00 + -5.9541687e-01 + 1.6420461e-01 + -7.6547830e-01 + 8.1568023e-01 + -6.3537136e-01 + -7.8864638e-01 + 4.6723595e-01 + -8.9565512e-01 + 9.6975745e-01 + -1.5138388e+00 + -7.3265909e-01 + 2.0343945e+00 + -8.4930888e-01 + -4.6652765e-01 + 2.7780499e-01 + 3.5613229e-01 + 2.9285681e+00 + 1.3997402e+00 + -5.0699893e-01 + 6.6435301e-01 + 1.4213738e+00 + -4.9257299e-02 + -2.4280166e+00 + -3.0705840e-01 + -1.2990818e+00 + 5.8473359e-01 + -1.0841184e-01 + 1.0490084e+00 + -1.0146973e+00 + 1.1534637e+00 + -1.1621779e+00 + 1.5129957e+00 + 1.7966752e-01 + 1.1931219e+00 + -1.4272535e+00 + 8.6346468e-01 + -5.9426704e-01 + -1.5386655e+00 + 1.2619765e+00 + 4.1079930e-01 + -1.5799744e-01 + 2.2819211e-01 + -4.8414912e-01 + -1.3616149e+00 + -2.1118812e+00 + -1.7163412e+00 + -4.6950197e-01 + 6.7212878e-01 + -1.0497435e-01 + 1.3431012e-01 + -4.5454315e-01 + 3.1267132e-01 + 8.1416798e-01 + -7.4520487e-01 + -1.2674218e+00 + 5.4361738e-01 + -6.4421625e-01 + -2.2143082e+00 + 2.4642270e-01 + 5.9808226e-01 + 7.0321540e-01 + 3.7072847e-01 + -7.9307834e-02 + 1.2338864e-01 + 1.9353863e+00 + 4.6264285e-02 + -3.5153998e-01 + 1.3918372e+00 + 1.1571960e+00 + 1.7080865e+00 + 9.6541904e-01 + 5.5859940e-01 + 1.3901898e+00 + -1.6579560e-01 + -2.9064307e-01 + -8.0560577e-01 + 1.7342099e+00 + 2.3485243e+00 + 1.0172502e+00 + -5.8959324e-01 + -1.2031464e+00 + -9.0177154e-01 + 5.7302051e-02 + -1.2863099e+00 + -1.5509782e+00 + -1.5075646e+00 + 4.4980456e-01 + -2.0399855e+00 + 4.9192442e-01 + 4.2321468e-01 + -1.0559489e+00 + -9.4600641e-01 + -5.7888600e-01 + -6.3767155e-01 + 8.4699539e-01 + -1.4347381e-01 + -8.5153341e-01 + 5.0432183e-01 + 9.8011101e-01 + -1.7257926e+00 + 1.2039562e+00 + -1.0297842e+00 + -1.9448327e+00 + 7.4849979e-02 + 1.1309381e+00 + 1.2238874e+00 + -3.9313817e-01 + 6.8963370e-01 + -1.2402696e-01 + -1.9195556e-01 + 1.1504595e+00 + 2.3870605e-01 + 9.6168173e-01 + 4.8983090e-01 + -6.4479880e-01 + 5.5090904e-01 + -1.5430391e-01 + -1.2251125e+00 + 2.0443711e-01 + -7.4153075e-03 + -5.2419626e-01 + 1.1822930e-01 + -8.4747903e-01 + 1.9025861e+00 + -1.5953283e+00 + -1.5403550e+00 + 1.0512559e+00 + -7.6744015e-01 + -6.3953560e-01 + -6.3804745e-01 + 8.9713151e-01 + 1.1864785e-01 + 4.9702741e-01 + -1.8600193e+00 + -1.7819828e+00 + 2.1871407e-01 + -1.8804619e+00 + 1.9003336e+00 + 3.2030963e-01 + 1.3065309e+00 + -1.7723135e+00 + 5.3215471e-01 + 4.9022701e-01 + 1.1451258e+00 + -3.4801717e-01 + -1.3681396e+00 + -7.1793993e-01 + -5.2624953e-01 + -3.2370950e-01 + -2.1315445e-01 + 2.5403678e-01 + 2.1026313e+00 + -8.3639877e-01 + -6.6768292e-01 + 1.7536140e+00 + 2.4670447e+00 + -7.3287131e-01 + -1.9140240e+00 + 4.9581827e-01 + -7.0424459e-01 + -7.7287240e-02 + -9.9864274e-02 + 3.2242762e-01 + -1.3083936e+00 + 2.3714292e-01 + -4.1741835e-01 + -1.4898256e+00 + -1.4191505e-01 + -1.0459845e+00 + 2.8641122e+00 + 5.0205399e-02 + -9.8581135e-02 + -2.3011711e-01 + -1.1775066e-01 + 1.2170988e+00 + -1.3866008e+00 + -7.6783115e-01 + 1.0130339e+00 + 4.7008516e-01 + -1.9306268e-01 + 1.3534811e+00 + -9.9898139e-02 + 9.4912281e-01 + -3.1515186e-03 + 1.7900620e+00 + 8.2889387e-01 + 6.5164077e-01 + -8.5585968e-01 + -4.4038291e-01 + 3.8479045e-01 + 2.8909837e-01 + -1.4265673e+00 + 2.7681038e-01 + 3.5363946e-01 + -1.7664098e+00 + -1.1512485e+00 + 1.4613313e+00 + -5.4420634e-01 + -1.1314973e+00 + -3.6034830e-01 + 1.2483529e+00 + 4.2880960e-01 + -2.2504046e+00 + -5.5121045e-01 + -1.5911805e+00 + -6.1115339e-01 + -1.9000130e+00 + 6.6874778e-01 + 1.0281039e+00 + 8.4533554e-01 + 9.9973006e-01 + 1.2443971e+00 + -8.1468368e-01 + -5.0899779e-01 + -1.3859971e+00 + -1.9661457e+00 + -9.3537226e-01 + -1.3130896e+00 + 5.3437606e-02 + -3.7490691e-01 + 4.3609881e-01 + -9.3372725e-01 + 3.3980087e-01 + 1.9537791e-01 + -1.6397968e+00 + -1.9589565e+00 + -2.3336633e+00 + -6.5502942e-01 + 8.3718951e-02 + 5.1140892e-01 + -9.9466885e-01 + -4.2481972e-01 + -2.2708686e+00 + 1.7823742e+00 + -7.8720641e-01 + 3.7491674e-01 + -1.6031381e+00 + -4.9254880e-01 + 9.5967300e-01 + -1.2118548e+00 + 4.9875465e-01 + -1.1811631e+00 + 6.4724696e-01 + 4.9358888e-01 + -1.2356200e-01 + 1.7940977e+00 + -1.6068180e+00 + 5.3606240e-01 + 1.7807164e+00 + 3.1076900e-01 + 7.0805627e-01 + -1.8574124e-01 + 8.8158431e-01 + -1.7964424e+00 + -1.1316857e+00 + -1.0900869e+00 + -1.1452749e+00 + 2.3933881e+00 + 1.7304931e+00 + -6.1965774e-01 + 4.4178393e-01 + -1.6537216e+00 + -7.0596551e-01 + -2.9230837e-01 + 3.0543324e-01 + 1.2038973e+00 + 6.1718556e-01 + -1.9790523e-02 + 1.2424651e+00 + -1.8405786e-01 + 6.5495031e-01 + 2.0342548e+00 + -1.1700072e+00 + -2.8067481e-01 + -9.7948786e-01 + -1.5686424e+00 + 9.9012364e-01 + -4.6148404e-01 + -1.7016872e+00 + -1.0240731e+00 + 9.8550280e-01 + 6.4679300e-01 + 1.1264980e-01 + -1.5851579e+00 + -5.2040889e-01 + -9.6231119e-01 + 1.3387294e+00 + -6.6243226e-01 + 8.5116836e-01 + 1.6954385e+00 + 1.3372514e+00 + 6.2179489e-01 + -1.2895916e+00 + 2.3240700e+00 + -1.3215878e+00 + -6.8622949e-01 + -1.6345304e-02 + 7.4667412e-01 + 2.7343955e-01 + -8.0306733e-01 + -9.9466518e-01 + -1.5017913e+00 + -3.8123493e-01 + -2.8794079e-01 + -1.4042619e-01 + -3.8112653e-01 + 5.0336896e-01 + -1.4050088e-01 + -5.8665004e-01 + -2.7689291e-01 + 1.6396135e+00 + 6.5049249e-02 + 1.0613182e+00 + -3.8020843e-01 + -7.0132693e-01 + 1.3932220e+00 + 6.1194361e-01 + -6.0335855e-01 + 1.3758287e+00 + -2.3637127e-01 + -6.6369241e-02 + -5.0406835e-02 + -1.5513381e-01 + 2.8353999e-01 + -1.4307896e+00 + 5.4909288e-01 + -2.4568648e+00 + -1.7073240e-02 + -1.1238351e+00 + 4.5715691e-01 + -1.0099989e+00 + 8.6800270e-01 + -7.0261876e-01 + -9.4272645e-01 + 2.7236494e-01 + -3.6431860e-01 + -5.2640196e-01 + -5.5485253e-01 + 8.4721691e-01 + -4.9266562e-01 + -1.1312990e-01 + -5.9593996e-01 + -1.7656645e-01 + -7.8824480e-01 + 5.1581047e-01 + 2.6463552e-01 + 8.4728859e-01 + 2.5337552e-01 + 3.2694822e-01 + 1.9068723e-01 + 1.5473872e+00 + -1.2695317e-01 + -3.5968215e-01 + 2.7996914e-01 + -4.0051885e-01 + -1.3241154e+00 + -5.9530472e-01 + -5.5749908e-01 + 4.6938409e-01 + 5.3232207e-01 + -2.0823411e-01 + 2.3293791e-01 + -8.9096264e-01 + -9.8140197e-02 + -3.0549564e-01 + 6.9248553e-01 + 8.6393472e-01 + -5.4893769e-01 + -1.9301256e+00 + 6.0741833e-02 + 1.1689084e+00 + 1.1144616e+00 + 6.2718792e-01 + 9.9231266e-01 + -9.3122271e-01 + -1.2568685e+00 + 4.5919769e-01 + -1.5412064e-01 + -1.1858048e+00 + 7.0585600e-01 + 1.3802430e+00 + 2.6077082e-01 + 2.8013234e-01 + 1.2415289e-01 + -7.0751034e-01 + 2.0443369e-02 + 8.5536367e-01 + -1.1427611e+00 + 9.5370027e-01 + 1.2561324e+00 + -8.6296889e-02 + -1.1490025e-01 + 1.3708861e+00 + 4.7385569e-01 + 4.4453399e-01 + -1.4975211e-01 + -8.1615670e-01 + -4.5133047e-01 + 4.1761967e-01 + -9.1763630e-01 + -3.0747452e-02 + -7.3604392e-01 + -1.3409510e+00 + 1.6300044e+00 + 8.6952814e-01 + -2.0624950e-01 + 1.1472364e+00 + 8.3074768e-02 + 4.7219578e-01 + 4.2932426e-01 + 3.0212540e-01 + 1.3141540e-02 + -1.0974198e-02 + -7.2333655e-01 + 1.1783873e+00 + -2.9806254e-01 + -4.1782485e-02 + -1.0733828e+00 + 3.1311688e-02 + 1.5002243e+00 + -1.1125328e+00 + 7.2117651e-01 + -1.4647068e+00 + 5.3605230e-01 + 1.5380488e+00 + 1.2407643e-01 + -1.1551033e+00 + 1.7188754e+00 + -1.0500336e+00 + -6.7297077e-01 + 4.3811040e-01 + 3.7505749e-01 + -7.6740934e-02 + 2.5308989e-01 + 4.3742274e-01 + -1.6887391e-01 + 2.6569502e-01 + -3.7049845e-01 + -5.2017039e-01 + -5.1095300e-01 + 7.8948194e-02 + -1.0099985e+00 + -6.9852853e-01 + -1.2050401e-01 + 3.5762583e-01 + -2.0454975e-01 + -2.4529559e-03 + -6.2979748e-01 + -1.5214020e+00 + -6.0375258e-01 + -5.9243052e-01 + 1.4303241e+00 + 1.0243146e+00 + 5.0968011e-01 + 1.2227753e+00 + 8.2023348e-02 + -5.6890340e-01 + 8.5832024e-01 + -6.7835737e-01 + -7.8068493e-01 + 5.4239017e-01 + -5.8168995e-01 + -1.0421209e+00 + -7.8698941e-01 + -6.3732904e-01 + -1.3713367e+00 + -7.4221742e-01 + 5.2699943e-01 + 2.1649665e+00 + -5.8727510e-01 + 5.9861484e-01 + 1.7800634e+00 + -1.5834288e-02 + -3.7948237e-01 + 2.0994588e-01 + 2.0786815e-01 + -8.2260349e-01 + 1.1369530e-01 + -5.9269196e-01 + -1.0972065e+00 + 1.1850935e-01 + 8.9908608e-01 + 5.9775608e-01 + 1.7466997e-03 + 7.0274849e-01 + 1.0791580e+00 + -1.4079630e-01 + -3.2780288e-01 + 7.1165389e-01 + -8.3729049e-03 + 1.8686515e+00 + -1.2959564e+00 + -1.4934481e+00 + -1.0627823e+00 + 1.3878448e-01 + -5.8095028e-02 + -2.3808178e-01 + 9.3604198e-01 + -1.5247665e-01 + 5.1616698e-01 + 1.6274558e+00 + 1.1581468e+00 + -4.8767856e-01 + 2.2198251e+00 + 9.7198482e-01 + 2.3162883e-01 + -1.0647814e+00 + 1.7028911e+00 + -1.1159709e-01 + -1.1385477e-01 + 2.9379267e-02 + 2.2602757e-01 + 2.2128011e+00 + 1.3525386e+00 + -8.0341196e-02 + 1.5894504e+00 + -3.5170236e-01 + -1.0667438e+00 + -4.5563589e-01 + -6.0705960e-01 + -1.2468333e-01 + -6.8685707e-02 + 8.2619328e-01 + -7.0499327e-01 + 1.0002216e+00 + -3.0637383e-01 + 5.1181871e-01 + 1.8386823e+00 + 1.3594850e-01 + 5.0154132e-01 + -6.9389297e-01 + 2.3200096e-01 + -7.8867015e-01 + -1.7164260e-01 + -7.0763115e-01 + 9.0403143e-02 + -8.8092806e-01 + 8.5711513e-01 + 2.6380177e-01 + -1.2827662e+00 + -1.9594462e+00 + -1.5048389e+00 + -9.3375384e-01 + -1.1119801e-02 + 3.8332915e-01 + -1.2099717e+00 + -1.7928063e+00 + -4.9830025e-01 + -1.7091896e+00 + -2.3967008e-01 + -1.1564442e+00 + 4.4469860e-01 + -6.3905005e-01 + 6.6403744e-02 + -9.6495365e-01 + 1.7349648e+00 + 8.5890270e-02 + -2.7690334e-01 + -1.3265413e+00 + 3.4015664e-01 + -1.0944615e+00 + -1.1677082e+00 + -7.0733827e-01 + -6.6523728e-01 + -6.2212878e-01 + 1.6606016e+00 + 6.4814349e-01 + 1.3562458e+00 + -2.6790406e+00 + -2.7661296e-01 + -1.4984182e-01 + -3.2285546e-01 + 1.6485588e+00 + -5.1739009e-01 + -8.1027853e-01 + 3.1797668e-01 + -1.2450729e+00 + 1.6272633e+00 + 1.0098708e+00 + 2.3306845e+00 + 5.5426899e-01 + 2.0457133e-01 + 1.2386037e+00 + 1.3526061e-01 + -1.9459705e-02 + -9.4395749e-01 + -7.7419537e-01 + -3.7042612e-02 + 6.6191942e-01 + 9.7841341e-01 + -6.5495872e-01 + -4.7261012e-01 + -8.8411085e-01 + -1.2485150e+00 + 2.9240127e-01 + -2.9845464e-01 + 1.3359849e+00 + -4.3119087e-01 + 8.7400293e-01 + -5.1167026e-01 + 4.5161408e-01 + 1.2304531e+00 + -1.8563994e-01 + 2.1771771e-01 + -2.6331913e+00 + -4.7142759e-01 + 1.9991102e-01 + 1.1032658e-01 + 1.6622123e+00 + 3.4057783e-01 + -1.6443345e-03 + 5.2209911e-01 + -1.2926694e+00 + -4.6784705e-01 + 4.9658223e-01 + -2.3293108e-01 + -2.3937901e+00 + 7.2308294e-01 + -1.3684184e+00 + -1.2627121e+00 + 4.2563482e-01 + -2.4297861e-01 + -7.7938048e-01 + -1.5796326e+00 + -6.2230983e-01 + -2.1872694e+00 + 3.5474182e-01 + -7.5327183e-02 + -1.3056852e+00 + -1.9739404e-01 + 2.9370510e+00 + 2.2323417e-01 + 3.9845786e-01 + 1.6101998e+00 + 3.8616127e-01 + 9.7077968e-03 + 7.2500492e-02 + 3.1919403e-01 + 1.0708616e+00 + 3.0083218e-01 + 1.1721887e+00 + -1.0941482e-01 + 8.2724212e-01 + -5.1982789e-01 + 8.5302652e-01 + -1.1751201e+00 + -4.5440037e-01 + -5.0610878e-01 + 1.8036927e+00 + -1.0127482e+00 + -1.2402892e+00 + 2.6656499e-01 + -1.2077523e+00 + -1.0500724e+00 + 4.6866581e-01 + 2.8290001e-01 + 1.3411972e+00 + 3.8059744e-01 + 1.4354306e+00 + 7.9958787e-01 + 1.6285605e+00 + 1.2910684e-01 + -2.0847639e+00 + -6.4711448e-01 + -2.5173221e-01 + 1.9021643e-01 + -4.6754234e-01 + 5.3073959e-01 + 2.4465581e-01 + 1.9464285e+00 + -1.2770542e+00 + 7.4575091e-03 + -3.6345547e-01 + 1.2668360e+00 + 5.3803734e-01 + 8.0682463e-01 + -1.1147142e-01 + 9.1289221e-01 + 1.5246317e+00 + -6.9236506e-01 + -9.0247494e-01 + 7.0393836e-02 + -6.8846682e-01 + 1.2309017e+00 + -2.7455894e-01 + -1.1035993e+00 + 8.1195670e-02 + -7.8574974e-01 + -1.4635514e+00 + 3.9684510e-01 + -5.6428699e-01 + 3.7816162e-01 + 1.1704917e+00 + -4.5811759e-02 + -6.3506098e-01 + 3.3138333e-01 + 8.8218779e-01 + 4.1854444e-01 + -4.0548415e-02 + -7.0143575e-02 + -1.0146524e+00 + -1.3374673e-01 + -4.0800443e-02 + 6.0276839e-01 + 7.8226053e-01 + 2.1463862e-01 + -8.0977924e-01 + -1.3852612e+00 + 9.0874136e-02 + -2.1402203e-01 + 1.5086823e-01 + -2.3554182e+00 + 6.2013811e-01 + 3.1062177e-01 + -9.0780399e-02 + -3.9692323e-01 + 5.9467671e-01 + 2.2019319e-01 + -7.1650512e-01 + 1.1741962e-02 + -9.5500420e-01 + -7.7834275e-01 + 1.5287605e+00 + -1.8683469e+00 + -1.2209546e+00 + 2.6501575e+00 + 9.4925165e-02 + 3.9623363e-01 + 1.3575368e+00 + -1.9411465e+00 + 1.7605881e+00 + 1.0602403e+00 + -1.0467912e+00 + -2.7202596e-01 + 4.3686658e-01 + -8.6578650e-01 + -6.4002050e-01 + -5.1927525e-01 + -1.4848230e-01 + -6.5086429e-01 + 5.9967324e-01 + 9.4093931e-02 + 1.3812352e+00 + -7.5482787e-01 + 9.6751740e-01 + 5.3895668e-01 + 6.4308992e-01 + -9.1186433e-02 + -8.2689537e-02 + -1.3351127e+00 + 1.1732801e+00 + -1.9013959e-01 + 3.9566889e-01 + 7.4471539e-01 + -2.5063304e-01 + 1.6538002e-01 + -4.3529821e-01 + 1.1708190e+00 + -9.0918069e-01 + 1.3014492e+00 + 1.0413715e+00 + 1.4752261e+00 + 2.8668724e-01 + 1.4461692e+00 + -6.0003240e-02 + -1.5847041e-01 + -4.2483704e-01 + 4.5472119e-01 + -4.1482567e-01 + -5.8554341e-02 + -2.5315762e-01 + -2.1319690e-01 + -2.1270963e+00 + -2.3553297e-01 + -1.7081996e+00 + 3.2226271e-01 + 7.3986653e-01 + -6.9740504e-01 + 6.9170422e-01 + 4.2789486e-01 + 1.2390014e-02 + 1.7559262e+00 + 7.7168162e-01 + -3.1125212e-02 + 7.0126826e-01 + 6.4984283e-01 + 1.6843285e+00 + -1.3898055e+00 + 7.2903728e-01 + 2.0377785e-01 + -9.0413535e-01 + -1.6584335e+00 + -8.9092365e-01 + -9.5775895e-02 + 4.0850471e-01 + 6.7385837e-01 + -3.1734505e-01 + -2.3122193e-01 + 6.7517222e-01 + 8.3125144e-01 + 1.2021898e+00 + -1.8980952e+00 + -1.2074504e+00 + 2.8613237e-01 + 1.0512521e+00 + -8.9574841e-01 + -2.9006101e-01 + -4.5589562e-01 + -6.7304457e-02 + -4.5279377e-01 + 7.5751174e-01 + -1.5502071e+00 + 2.0212646e+00 + -1.3637132e+00 + 1.0087750e+00 + 1.1574297e+00 + -1.6656810e-01 + 1.7993541e-01 + -4.4885170e-01 + 7.8508403e-01 + 3.2049180e-01 + 2.3095884e-01 + 8.5975245e-01 + -8.4905081e-02 + 1.2014928e+00 + -2.3327476e-02 + 6.9358460e-01 + 7.6698939e-02 + 5.1502677e-01 + 1.8114279e-01 + 5.8881674e-01 + -4.1960390e-01 + 1.1983079e+00 + -3.3766671e-01 + 3.6771544e-01 + -1.1358049e+00 + 1.3806298e+00 + 8.4611034e-01 + -2.9986269e-01 + -8.8634452e-01 + -3.7772479e-01 + 3.8201005e-01 + 4.2905146e-01 + 6.7512767e-01 + -5.5145162e-01 + 4.1637548e-02 + -1.6763333e-01 + -6.1590559e-01 + 8.3675515e-01 + 3.6015916e-01 + -3.3964667e-01 + -3.9886361e-01 + -2.8131096e-02 + -6.9522128e-01 + -8.9398166e-01 + -7.0230905e-02 + -3.9428809e-01 + -2.9155440e-01 + 4.4733790e-01 + 1.7541826e+00 + -8.1575548e-01 + 1.8713291e+00 + 1.3456013e-01 + -6.7643469e-01 + 6.4947003e-01 + 3.9216233e-01 + -5.4153115e-01 + 1.2658078e-01 + -1.4336001e+00 + -2.5611089e+00 + 3.0415053e-01 + -1.0832502e+00 + 6.3479977e-01 + 6.0291497e-01 + 1.0182165e+00 + 6.4605620e-01 + 7.7143489e-01 + -2.7783099e-01 + 2.2407515e+00 + 2.6779433e-01 + 3.9958605e-01 + 1.3194741e+00 + -1.0433818e+00 + 3.0315313e+00 + -1.2161032e+00 + 1.4269681e+00 + 1.3354914e+00 + -6.6763802e-01 + -1.9715165e+00 + -9.1385614e-01 + 1.6003596e-01 + 4.6475967e-01 + 3.1580283e-01 + -4.7079315e-01 + -5.8318962e-02 + 1.7899310e+00 + 4.2951897e-01 + -2.1090906e-01 + 1.8798701e-02 + 9.5701152e-01 + -3.1752496e-01 + 8.3674117e-01 + -8.0308843e-01 + -7.1092806e-01 + -8.0069163e-01 + -1.8162807e+00 + 1.4290484e+00 + 1.2392940e+00 + -6.8490460e-01 + 5.2727557e-01 + 1.3546954e+00 + -8.5518435e-01 + -9.7828387e-01 + -4.1436646e-01 + 9.7628182e-01 + 2.8622747e-01 + -1.6005127e-01 + 1.1014412e+00 + -1.0965292e+00 + -1.0486153e+00 + 1.8838725e-02 + 3.7281870e-01 + 3.1378154e-01 + -9.4409020e-01 + -4.0912037e-01 + -2.5443654e-01 + 1.8957986e-01 + 1.5220577e-01 + 2.1972716e-01 + -7.4604332e-01 + 5.6204145e-01 + 1.0497123e+00 + -1.9879488e-01 + -3.4434921e-01 + 5.0484765e-01 + -8.2697996e-01 + 1.7385509e+00 + -7.8758676e-01 + 2.2350341e-02 + -7.8340976e-01 + -4.4915062e-01 + -1.5595775e-01 + 1.0223227e+00 + -4.1010966e-01 + -3.2149294e-02 + -1.6094871e-01 + 1.2000197e+00 + -2.0105631e+00 + 5.6477182e-01 + 7.7795248e-02 + -1.4579154e+00 + 2.8887725e-02 + -7.3353302e-02 + -2.7221874e-02 + 6.1653779e-01 + 1.4976636e-02 + 6.9066821e-01 + 1.7190576e+00 + 6.9547881e-01 + -1.2086645e-01 + -7.0777206e-01 + 1.8418172e+00 + -3.8175008e-01 + 1.0490052e+00 + 8.5534754e-01 + 6.7597531e-01 + 3.8989603e-01 + -5.6865950e-01 + 7.6934464e-01 + -1.1494592e-01 + 1.9708784e-02 + -3.2418122e-02 + -4.5264740e-01 + -1.1910569e+00 + -4.1852351e-01 + 1.2377089e+00 + 2.0042501e+00 + -3.9977841e-02 + 6.3314161e-01 + 4.3326610e-01 + -1.6542528e+00 + 1.8818423e-01 + -9.1184828e-01 + -1.5916118e+00 + -7.0118428e-01 + 1.6813131e+00 + 9.1218758e-02 + -1.0743835e+00 + 7.1616931e-01 + 4.9169516e-01 + -3.0946618e-01 + 5.5933786e-01 + -2.8433799e-01 + -1.2745815e+00 + -1.2578854e+00 + -1.3660001e-01 + -9.5835819e-01 + -5.2417428e-01 + 5.3022838e-02 + 1.4480248e-01 + -1.5655095e+00 + 3.1320069e-01 + -9.3093264e-02 + 6.4421238e-01 + 8.5533651e-01 + -1.3167763e+00 + 6.3482154e-01 + 1.5759195e-01 + 1.3010794e+00 + 1.8840050e-01 + -7.3876764e-01 + -2.0463498e+00 + -1.0189711e+00 + -1.2079340e+00 + 1.5468560e-01 + -1.3467138e+00 + -1.3989315e+00 + 1.4187812e-01 + 1.9060325e+00 + -8.6765970e-01 + -1.5963433e+00 + -2.3201873e+00 + -8.8567397e-01 + 5.4115243e-01 + -1.7310223e-01 + 2.1727141e-02 + 6.7808684e-01 + 1.4642251e+00 + -1.9276421e+00 + -4.3089202e-01 + -7.3049957e-01 + -6.7985540e-01 + -2.5737196e+00 + -1.3059648e+00 + 1.2011562e+00 + 6.8702345e-01 + 9.1124143e-02 + 7.1341600e-01 + -1.3725326e+00 + -1.5595069e-01 + -3.7259415e-01 + 7.4935932e-01 + 1.4814144e+00 + -8.7394613e-01 + 1.0854286e+00 + 5.6386748e-02 + 1.2791548e+00 + 9.8537545e-01 + -9.3272141e-01 + 1.9150605e+00 + -1.4391630e+00 + 2.1487519e-01 + 1.5818893e+00 + -1.5049583e+00 + -3.3421168e-01 + -3.8716317e-01 + 1.5992957e-01 + 5.8325031e-01 + -2.8463598e-01 + 4.3855560e-01 + 2.1750469e+00 + 1.5544788e+00 + 1.7305722e+00 + 5.4711887e-01 + -6.8993161e-01 + 3.7106724e-01 + 6.7908344e-01 + 1.0338490e+00 + 7.5787882e-01 + -6.0122905e-01 + -1.2914374e+00 + -1.3609700e+00 + -5.4779242e-01 + 5.0671582e-01 + 1.5476258e+00 + -9.4605613e-02 + 9.2339103e-01 + -1.2250955e+00 + 1.3386060e+00 + 7.6962742e-02 + 1.2429715e+00 + 6.3708561e-01 + -6.4590336e-01 + -9.7365999e-01 + -2.3080093e+00 + -1.1480599e-01 + -1.4919324e-01 + -3.9517991e-01 + 9.1461163e-01 + -1.2175311e-02 + 6.8899261e-01 + 7.6093555e-01 + 2.7099186e-01 + -8.8573094e-01 + 5.7399511e-01 + -4.2584677e-01 + -1.4499840e+00 + 9.7398030e-01 + 2.4461151e+00 + -7.9886839e-01 + 1.6134674e-02 + 1.2323493e+00 + -2.1315675e+00 + -1.9239946e+00 + -2.4660985e-01 + 1.0476753e+00 + 3.3876522e+00 + 3.2123917e+00 + 1.0165715e+00 + 6.4107857e-01 + -5.7226014e-01 + -1.7824126e+00 + -9.7692242e-02 + 1.7827116e-01 + 9.7844396e-02 + 1.6570813e+00 + 1.1137829e-01 + 1.6017756e+00 + 7.7008613e-01 + 8.0764263e-01 + -1.4051295e+00 + 7.9412880e-01 + 6.5696188e-01 + -6.9896296e-01 + 3.8271744e-01 + 4.5389961e-01 + 5.5144080e-01 + 7.2276474e-01 + 1.1698373e+00 + 8.0641655e-02 + 5.4286446e-01 + 1.0721590e-02 + 9.8597685e-01 + -5.9723198e-01 + 1.0530361e+00 + -1.2153764e+00 + 8.8439777e-01 + -1.3848524e-01 + 3.0855667e-01 + -3.4248901e-01 + -1.2682340e-01 + 3.1647592e-01 + 8.6802291e-01 + 8.8554061e-01 + 3.5197224e-01 + 1.2543797e+00 + 3.7408720e-01 + 1.2201000e+00 + 1.8975340e+00 + -1.1789496e+00 + -1.1279858e+00 + 1.2492441e+00 + -1.5155198e-01 + 4.7717248e-01 + 1.5649915e+00 + -6.3864001e-01 + -9.7264393e-01 + 9.0446153e-02 + 1.8841478e-01 + 5.2285625e-01 + 5.0468441e-01 + -1.4254207e+00 + -2.0340609e-01 + -2.4064949e-01 + -2.3428967e+00 + -1.3150764e+00 + 7.7196272e-01 + -1.1006190e+00 + 2.4273741e-01 + -1.7590269e+00 + 2.9468733e-01 + 8.8153318e-01 + 1.1418250e+00 + -4.3527628e-01 + -9.8019523e-01 + 7.8425379e-01 + -4.4802077e-02 + 5.7496094e-02 + 1.2289169e+00 + 1.8262793e+00 + -8.7513123e-01 + -4.8933199e-01 + 8.4889184e-02 + 6.7121209e-01 + 1.3421961e+00 + 5.6770329e-01 + -4.2854918e-01 + 1.0023726e+00 + 5.8151153e-01 + -1.6202803e-01 + 5.9373983e-01 + 2.0171941e-01 + 1.8235152e+00 + -2.5082535e-01 + 1.2669903e+00 + 1.1863382e+00 + -5.3306390e-01 + 6.8030104e-01 + 8.9844679e-01 + 1.6372917e+00 + -1.2965979e+00 + -8.0619497e-01 + 1.6088482e-01 + -2.3662207e+00 + -1.5265038e+00 + -1.8083222e+00 + 6.9978961e-01 + -6.3025457e-01 + 3.0020499e+00 + 8.1152394e-01 + 8.1473280e-01 + -1.5989659e-01 + -3.1270454e-01 + 8.1478208e-01 + 1.1799679e+00 + 1.4592821e+00 + 1.3752595e+00 + 1.0925921e+00 + -2.4784251e-02 + -2.6131419e-02 + -8.7914894e-01 + -1.3443903e-01 + 3.9256181e-01 + -1.3912484e+00 + -4.0838824e-01 + -4.0759894e-01 + 9.3749542e-02 + -3.2693087e-01 + -3.2310021e-01 + -1.3088114e+00 + -1.1587566e+00 + -1.2944976e+00 + 3.0836809e-01 + 4.3237561e-01 + -1.8730249e+00 + -1.1235015e+00 + -3.6929299e-01 + 5.4320770e-01 + 2.0910456e-01 + 8.6053681e-01 + -1.3526953e+00 + -6.5608425e-01 + -1.3510469e+00 + 8.9603500e-02 + -8.1471116e-01 + 7.6226928e-01 + -1.6894022e+00 + 8.0682696e-02 + -2.1623104e+00 + -9.0915448e-01 + -7.8678619e-02 + 3.9814636e-01 + 3.3213370e-01 + -1.7578705e+00 + 4.7255797e-01 + 7.9948447e-01 + -7.9839131e-01 + 1.0160619e+00 + -5.6234739e-01 + -8.4779609e-01 + 1.8699521e-01 + 6.5682079e-01 + 4.6235349e-01 + 2.9775943e-01 + 5.9155935e-01 + -3.1049692e-01 + 6.8632414e-01 + 6.2225783e-01 + -1.5601503e+00 + -5.7907526e-01 + 9.4407340e-01 + -3.6157289e-01 + -6.1596832e-01 + -2.5691341e-01 + 9.2829851e-01 + -1.2564355e+00 + 7.8085146e-01 + 7.9997074e-01 + 5.0990390e-01 + -6.5111349e-01 + -1.1290447e+00 + 9.1046926e-01 + 4.1019165e-01 + 1.2216281e-01 + 1.8091194e-01 + 4.0786658e-01 + 3.6581201e-01 + 1.1970927e+00 + 6.6268559e-01 + 8.7472928e-02 + 9.7913019e-01 + 1.8966597e+00 + 2.5218066e-01 + 9.8862311e-01 + -1.0910943e+00 + 1.1491425e+00 + -5.6756746e-01 + -3.3694685e-01 + 6.8412750e-01 + -4.0717209e-01 + -2.1796028e+00 + -1.9852053e+00 + -1.3851693e+00 + 5.4621363e-01 + -4.9809964e-01 + -3.3224611e-01 + -1.0754624e+00 + 1.8782401e+00 + -2.4180908e-01 + -8.0657463e-01 + 2.5847438e-01 + -1.5717923e+00 + -5.2220134e-01 + 9.8982405e-02 + 2.0897118e+00 + 2.9872795e-01 + 3.1343035e-01 + 7.7858487e-01 + 1.0396290e+00 + -5.3543394e-01 + 3.5690978e-01 + -1.6947875e+00 + 4.7459585e-01 + -1.1322064e+00 + -1.6203141e-01 + 2.0611398e-01 + -8.4558348e-01 + 1.2766374e+00 + -5.1551325e-01 + -6.3192905e-01 + 6.7817899e-01 + 1.3186119e+00 + 1.7744734e-01 + -1.0526282e+00 + 1.0418467e+00 + -7.5425475e-01 + -2.0253581e+00 + -9.9381322e-01 + 1.5417407e+00 + 2.0596332e+00 + 2.1559438e-01 + 9.2452690e-02 + -1.7801494e+00 + -1.7965573e+00 + 7.4997818e-01 + -2.4970714e-01 + -7.8048668e-01 + -5.2223225e-01 + -4.7277443e-01 + -1.2407897e-01 + -1.0928585e+00 + 2.0903778e-01 + 2.7831854e-01 + 8.2525075e-01 + -5.0230258e-01 + 1.5888584e+00 + -3.3144632e-01 + 5.3682025e-01 + -4.5739987e-01 + 1.7073382e+00 + -4.7673616e-01 + 9.2812886e-01 + -3.5640706e-01 + 9.4490142e-01 + 1.0911600e+00 + -1.5975554e-01 + -3.3399478e-01 + -5.6206112e-01 + -1.9080166e-01 + -4.3256298e-01 + -1.8802751e+00 + -2.7137720e-01 + 2.9138238e-01 + -7.5275708e-01 + -6.4402338e-01 + -6.0683982e-01 + -3.9941654e-02 + -8.1843830e-01 + -1.2448939e+00 + 1.5432298e+00 + -5.5739948e-01 + 5.4163445e-01 + -1.1719152e+00 + 1.9763791e+00 + 9.2604759e-03 + 1.1649173e+00 + 7.7126865e-01 + -8.3182599e-03 + 3.1477641e-01 + -6.2206572e-01 + 1.1302762e-01 + 8.5582846e-01 + -5.3551405e-01 + -5.6984797e-01 + -2.0484305e-01 + 7.6043703e-01 + -9.8510605e-01 + -1.0510468e+00 + -2.9088584e-01 + -2.6484101e-01 + 6.9013007e-01 + 1.0773918e+00 + -1.0665281e+00 + -1.9046066e+00 + -1.5707899e+00 + -1.1982856e+00 + -1.2893926e+00 + -8.7523996e-02 + -4.1260436e-01 + 1.6050605e+00 + 7.3810341e-01 + -2.6055508e-02 + -1.2387558e+00 + 1.5699981e-01 + 3.4632937e-01 + 4.4458759e-01 + -3.6761769e-01 + -1.0016501e+00 + 1.5679696e+00 + -5.4957781e-01 + 4.3436511e-02 + 6.9352277e-01 + 2.6360603e-02 + -7.6754297e-01 + 1.6356456e+00 + -2.7865474e+00 + 4.7040551e-01 + 1.5058488e+00 + -1.3390378e-01 + -1.1311177e-01 + -6.1749524e-01 + 2.4319195e+00 + 1.6222731e+00 + -3.3383957e-02 + -2.5417329e-01 + -8.1862435e-01 + 1.5374654e+00 + -1.6064862e+00 + -8.6621730e-01 + -4.3836513e-01 + -1.0895863e+00 + -1.2207748e+00 + 7.0743412e-01 + -6.9864027e-02 + -4.8631217e-01 + -2.5662263e-01 + -1.0698371e-01 + -9.4886955e-01 + -2.1128248e-01 + -8.6031194e-01 + 8.0873179e-01 + 4.8924578e-01 + -3.4718916e-01 + 3.3116242e-01 + -8.5171963e-01 + -6.1064883e-01 + -6.2117705e-01 + 2.0704792e-01 + 5.3433984e-02 + -2.0279787e+00 + -9.8028655e-01 + -4.8799244e-01 + -2.1525700e-01 + -5.1344604e-01 + 6.5439398e-01 + 1.2958683e+00 + 1.0071414e+00 + 3.8694638e-01 + 1.0825328e+00 + 1.1826183e+00 + 5.5482781e-01 + 1.9955792e+00 + -2.5286494e-01 + 3.4802050e-01 + -4.5511344e-01 + -6.3570742e-01 + -9.7985657e-01 + -7.6149203e-01 + -1.2835468e+00 + -3.0125030e-01 + -7.0723177e-01 + 1.5570262e+00 + 5.2793330e-01 + -1.9342622e+00 + 1.1686913e+00 + -5.3418184e-01 + -1.5779267e+00 + 5.3117163e-01 + 1.2251152e+00 + 2.9168577e-01 + 4.0392554e-01 + -7.9831267e-01 + -1.4949182e-01 + -9.8310900e-02 + -2.3104021e-01 + 7.3319078e-01 + -7.7298182e-01 + -3.2230526e-01 + -4.4751898e-01 + 4.1500624e-01 + 1.2590871e+00 + 1.7764082e+00 + 2.0916076e+00 + -1.0045665e+00 + -7.3112597e-01 + 1.9421008e+00 + 3.7535999e-01 + -5.5278796e-01 + 1.4011755e+00 + -1.5537207e+00 + -4.6397703e-01 + -9.3772308e-01 + 1.1189372e+00 + 1.9568067e+00 + 7.4188466e-01 + 1.4970983e+00 + 1.5635004e+00 + 6.9660452e-01 + -5.0850462e-01 + 9.0790386e-01 + 3.3005998e-01 + -1.1199756e+00 + -5.5851610e-01 + 1.4958486e+00 + -1.1525248e+00 + 3.2379869e-01 + -7.6135083e-01 + 5.5999754e-01 + -9.8424192e-01 + -1.2566349e+00 + 2.2173362e-01 + -8.8610561e-01 + 1.3092344e+00 + 5.2113990e-01 + -3.4122210e-01 + -3.4656079e-01 + -1.9982374e+00 + -1.0512259e-02 + 2.1838218e+00 + 3.0775054e-01 + -1.0243593e+00 + 3.3472453e-01 + 7.2875456e-01 + -1.3228438e+00 + 5.2678527e-01 + 1.4281606e+00 + 2.2815076e-01 + -3.0052779e-01 + -1.0143078e+00 + 7.0127627e-02 + -1.0109112e+00 + -3.3205967e-01 + -4.1650067e-01 + -4.7305300e-02 + 4.6551100e-01 + -4.2129302e-01 + 6.9630489e-02 + -1.7137865e+00 + 1.0023362e+00 + -9.9138470e-01 + -2.8071603e-01 + 1.6986814e-01 + 8.9489781e-01 + -8.0102224e-01 + 2.6822339e-02 + -5.8776097e-01 + -1.0870414e+00 + -3.6334863e-02 + -1.7055750e-01 + -4.0716616e-02 + -1.0304774e+00 + -5.1447231e-01 + 3.3314572e-01 + 6.9451946e-01 + -2.7043092e-01 + 1.9901118e+00 + -1.0163913e+00 + -1.3406439e+00 + 1.6347682e+00 + -9.2742312e-01 + -1.8909137e-01 + -9.9147245e-01 + -1.1734507e+00 + -7.7347136e-01 + -1.6288262e-01 + -4.4774016e-01 + 8.6720802e-01 + -4.1850431e-01 + 1.2691233e+00 + -8.2238408e-01 + -1.5595317e+00 + 2.9489214e-01 + 1.3202938e+00 + -2.3276501e-01 + 1.2353695e+00 + -2.4345094e-01 + -6.3269416e-01 + -1.2384112e+00 + 1.0707227e+00 + -1.2958065e+00 + -3.2623290e-01 + -7.7929871e-01 + -7.7321418e-01 + -2.8368571e-01 + 1.4332778e-01 + 2.3603522e-01 + -8.4445069e-01 + 3.4079175e-01 + 5.1499266e-01 + -1.4023908e-01 + -2.2724598e-01 + -1.2092160e+00 + 3.1033897e-01 + 1.6461559e+00 + 7.4914308e-01 + -1.1499789e-01 + 5.7648556e-01 + 1.8509554e-01 + 5.7287951e-01 + 1.2326669e-01 + 9.5607636e-03 + 1.5898305e+00 + 1.2317125e-01 + 6.3841668e-01 + 7.7802505e-01 + 1.3269576e+00 + -1.5564360e-01 + 6.2847516e-01 + 6.5594268e-02 + -4.8295592e-01 + -1.0224728e-01 + 6.0433133e-01 + -7.4714328e-01 + 1.5832737e+00 + 1.8838081e+00 + -7.2903677e-01 + -3.4690113e-01 + 4.6162007e-01 + 4.0287871e-01 + 1.3849863e+00 + -7.1399591e-02 + 1.5942307e+00 + -8.3500271e-01 + 8.0347443e-02 + 3.2348949e-01 + -9.6689503e-01 + 5.9188539e-02 + -2.6517437e-01 + 8.5769261e-01 + 5.4568617e-01 + 1.8537518e+00 + 9.9609664e-01 + 1.0289138e-01 + -1.9183819e+00 + -1.3106782e-01 + -7.6863167e-01 + 2.3899518e+00 + 7.7245680e-02 + 3.7560745e-01 + 3.9556417e-01 + -1.1249909e-01 + -1.8290367e+00 + 2.0914522e+00 + 3.5909312e-01 + -7.9434475e-01 + -2.2731164e-01 + 1.5938214e+00 + 1.5520563e-01 + 1.7859563e-01 + -3.3773085e-01 + -1.5249919e+00 + -7.0940665e-01 + -8.6661663e-01 + 7.1481108e-02 + 1.5562064e-01 + -1.8219139e-01 + 7.3101584e-01 + -3.4756807e-01 + 2.3442401e-01 + -8.6772936e-01 + -9.8253859e-01 + -2.9357242e-01 + 8.2446964e-01 + 1.9413317e-01 + 2.9769162e-01 + -7.1012508e-01 + -6.8767410e-01 + 5.7283812e-01 + 4.4521760e-01 + -1.3259593e+00 + -1.4998754e+00 + 1.0159682e+00 + -2.7515788e-02 + -1.6044558e-01 + 3.7883518e-01 + -1.0716072e-01 + 2.1283509e-01 + 4.6806392e-01 + -1.6160743e+00 + 1.4738006e-02 + -3.7764348e-02 + 4.0380900e-01 + 3.0525439e-01 + -1.2431101e+00 + 1.3185919e-01 + -9.9947508e-01 + -3.5421346e-01 + 1.0558872e-01 + 9.5542627e-01 + 4.6479898e-01 + 2.6670639e-01 + -1.4232233e+00 + 1.1105731e-01 + 1.1728554e+00 + -2.1155833e+00 + 4.6216114e-01 + -2.4599032e+00 + -3.0485718e-01 + 3.9823325e-01 + -1.7057866e+00 + 7.5940981e-01 + 2.0323762e-01 + 9.5868279e-01 + 4.8682975e-01 + -4.4590444e-01 + 3.2567307e-01 + -2.0097806e-02 + -1.8884756e+00 + 3.3836147e-01 + 3.3780540e-01 + 4.2433122e-01 + 1.1287079e-01 + -1.1827037e-01 + -2.6862862e+00 + 1.5483562e+00 + -9.2437868e-01 + -7.2040491e-01 + 8.3350531e-01 + -5.6649186e-01 + -9.9915100e-01 + 6.4126705e-01 + -2.5395009e-01 + -1.1217000e+00 + 1.6479269e+00 + -3.0667757e-01 + -7.7404141e-01 + -1.3542396e+00 + -3.2592679e-01 + 1.5532163e+00 + 6.2813121e-01 + -1.0275462e+00 + -2.0194229e-01 + 8.6106603e-01 + 1.5581574e+00 + -1.2968112e-01 + -8.1777232e-01 + 2.8850644e-01 + -1.1313790e+00 + 8.8131707e-01 + -9.4421370e-01 + -6.2159192e-01 + -1.9910523e+00 + -9.5195327e-01 + 2.5794900e-01 + 1.1981972e+00 + 1.1089668e+00 + -1.6126667e+00 + -3.5662964e-01 + -8.6164589e-03 + -1.4613958e-02 + 2.1708766e-01 + 1.8019073e-01 + -5.2051641e-01 + -2.3958191e-01 + -6.9301523e-01 + -6.8491079e-01 + 9.3260276e-01 + -1.2085510e+00 + -3.6078550e-01 + -1.1823695e+00 + 6.4465760e-01 + -1.0888329e+00 + -1.6984745e+00 + -1.2903596e+00 + 5.4562674e-01 + 2.1353495e+00 + -5.7685875e-01 + 8.2518905e-01 + 1.6131042e+00 + 1.2159222e+00 + 1.6139113e+00 + -5.9993880e-01 + 1.0400800e+00 + -2.4440684e-01 + -1.4850667e+00 + -3.5617863e-01 + 3.5452356e-01 + 1.8349129e+00 + 8.9769247e-01 + 2.5230230e-01 + 9.8402784e-01 + -5.1456092e-01 + -1.3106536e+00 + -6.8731566e-01 + -1.1854646e+00 + 9.8238861e-01 + -1.3534657e-01 + -1.1900400e+00 + -2.0730962e-01 + -8.4561519e-01 + -3.1429513e-01 + 1.4242803e+00 + 1.4914769e+00 + -7.4404839e-01 + -3.7437698e-01 + 4.2410689e-01 + 1.1411571e-01 + -5.1109796e-01 + 1.0223372e+00 + -1.4191838e+00 + 2.5466793e+00 + -3.5795550e-01 + 4.0131843e-01 + -7.0619483e-01 + -1.0206634e+00 + 1.1339608e+00 + 3.8545332e-02 + 2.3091273e-01 + 1.2573352e-01 + 6.9628561e-01 + 1.7394737e+00 + 6.6537739e-01 + 6.8753180e-01 + 1.2389687e+00 + 8.9866307e-01 + -1.1500981e+00 + -2.6418046e-01 + -1.6251805e+00 + 5.8164260e-01 + 1.9024927e+00 + 1.5800943e+00 + 9.2102905e-01 + -9.3790246e-01 + -7.3718621e-01 + 1.7978079e-01 + -1.3183047e-01 + 8.6792689e-01 + 1.3143919e+00 + -2.5111955e-01 + -7.1759512e-02 + 1.0952087e+00 + 4.8928037e-01 + -1.6801537e+00 + -8.1152546e-01 + -7.5222489e-01 + -1.3259191e+00 + -1.8148085e-01 + 1.3141549e-01 + 1.3938299e+00 + 7.0621342e-01 + 1.1628468e+00 + -7.5368772e-01 + 3.2192470e-01 + 1.6357042e+00 + -6.4779452e-01 + 6.7326330e-01 + 1.2735555e+00 + -1.0398118e+00 + 4.8795003e-01 + -9.0675360e-01 + -4.7470307e-01 + -6.6608673e-01 + -5.0201962e-01 + -3.0888602e-01 + -8.3690130e-01 + -6.2832389e-01 + 5.0090346e-01 + 1.6702536e+00 + -1.5417301e+00 + -2.7200912e-01 + 3.4164674e-01 + 4.8436693e-01 + 9.5268422e-01 + 1.3135013e-01 + -1.7419133e+00 + 6.6776131e-01 + 8.9815588e-01 + -5.4931556e-01 + -3.1750026e-01 + -5.8269331e-01 + -1.6421093e-01 + -9.3513325e-01 + 1.1881074e+00 + -1.2127883e+00 + -3.8117851e-01 + 1.3226534e+00 + 3.8534628e-01 + -3.6182184e-01 + -4.2637666e-01 + 3.8713794e-01 + 9.0277695e-01 + 7.1777527e-01 + 1.7360807e+00 + -1.0088329e+00 + -1.8003940e-01 + -2.0265477e+00 + 4.0893784e-01 + 7.3432512e-01 + 8.1967433e-02 + -1.6865170e+00 + -2.0617113e+00 + 1.8209372e+00 + -1.2491315e+00 + 9.3631615e-01 + -1.7155872e-01 + -7.8369128e-02 + -6.1036921e-01 + 5.6887556e-01 + -1.5719719e-01 + -1.0685058e+00 + -3.1252217e-01 + -1.7122889e-02 + -1.3233227e-01 + 4.4468541e-01 + 4.0173856e-01 + -2.5141902e+00 + -7.8849274e-01 + -1.1401662e-01 + 4.7413698e-01 + 6.8491618e-01 + 5.3977044e-01 + -3.8044895e-01 + 1.4430567e+00 + -8.0929881e-01 + -1.4712311e+00 + 4.2542207e-01 + 9.6419273e-01 + 9.7041652e-01 + 5.2231356e-01 + 8.7477896e-01 + 1.5806639e-01 + 1.5656886e+00 + 1.3527578e+00 + 9.2528175e-02 + 7.8252329e-01 + 1.1100244e+00 + 1.4999465e+00 + -1.3238085e-01 + 1.2577997e+00 + 1.0932928e+00 + 9.7522127e-01 + 1.2002858e+00 + -1.0728336e-01 + 6.1949924e-01 + 1.0909685e+00 + -4.4203488e-01 + -1.2807932e+00 + 6.5878350e-01 + 2.0102942e-01 + 4.5001961e-01 + -1.3068824e-02 + -8.4648209e-01 + 4.8271838e-01 + 9.3312086e-01 + 2.9170062e-01 + -2.1339365e-01 + -4.0705416e-02 + -2.2802828e-01 + -1.3811048e+00 + 2.6506418e-01 + 1.0620732e+00 + 5.8548211e-02 + -5.6460054e-01 + 6.6265084e-01 + 1.2090738e+00 + 4.5482148e-01 + 4.9357133e-01 + 2.2162062e-01 + -5.7464411e-01 + 1.3227023e-01 + 1.1286398e+00 + -5.6005888e-02 + 7.0626588e-01 + -6.0550907e-02 + 5.9024852e-01 + -6.1960724e-01 + -1.1902801e+00 + -2.4353561e+00 + 7.3200557e-01 + 3.4681241e-01 + 7.2808703e-01 + 5.7115967e-01 + -1.7775743e+00 + 1.0337879e-01 + 1.9348477e+00 + 9.3067300e-01 + -1.5083464e-01 + -4.6819906e-01 + -3.6528668e-01 + 2.5813451e-01 + 1.8535987e-01 + -8.9456506e-01 + -4.5442473e-01 + -2.8301609e-01 + 1.0965017e+00 + 1.0177969e+00 + 3.0255491e-01 + -1.2609276e+00 + 2.4015108e-01 + 7.8343789e-01 + -1.9302007e-01 + -1.3070100e+00 + -7.6559968e-01 + 7.8255347e-01 + -6.8662559e-02 + 3.8321645e-01 + 3.1142887e-01 + 7.5205738e-01 + 9.5719177e-01 + 4.4150389e-01 + 5.5314577e-01 + 3.6718812e-01 + -1.1446970e+00 + 9.2748395e-01 + 1.0477348e+00 + 3.2909568e-01 + -2.3967398e-01 + -5.6783658e-01 + -1.5646099e+00 + 2.9717995e-02 + 6.0717782e-01 + 9.6029016e-01 + -1.2553660e-01 + -4.8256378e-01 + 1.7204100e+00 + 1.7116231e+00 + 2.3919526e+00 + -9.3724221e-01 + -1.2838415e+00 + 1.6259642e-01 + 3.8903029e-01 + 6.8499318e-01 + -4.9181946e-01 + -1.9880144e-01 + -3.0830493e-01 + -1.9709990e+00 + -8.2212635e-01 + 6.7323334e-02 + -4.1562828e-01 + 8.4179930e-01 + 5.9350698e-01 + 2.9900881e-01 + 6.2032616e-01 + 2.0547497e+00 + -2.5180396e-01 + 2.6635878e+00 + 1.8578244e+00 + 1.2647113e+00 + -1.9688424e+00 + -5.6491559e-01 + -1.3172138e+00 + 2.0211130e-01 + -1.0584010e+00 + -4.3997017e-01 + 1.4778867e+00 + -1.2282586e+00 + -1.8466841e+00 + -7.4760417e-01 + -2.5630795e-01 + 6.8392577e-01 + 1.1821271e-01 + -3.5234586e-01 + 2.3460685e-01 + -1.1382177e+00 + 3.0103188e-01 + 1.0366978e+00 + -2.0253571e-02 + 1.1856314e+00 + -3.3262184e-01 + 1.0198931e+00 + -1.3459873e+00 + 4.5249931e-02 + 5.6978574e-01 + -1.0480414e+00 + -1.4765510e+00 + -5.9117629e-01 + -2.5900867e-01 + 1.3568368e+00 + -1.0056502e+00 + 1.0442225e+00 + -2.5932158e-01 + -6.1920217e-01 + -3.5101410e-01 + 2.1361985e+00 + -6.1599655e-01 + 1.5139365e+00 + 8.5554198e-02 + -5.0259962e-01 + 7.0582523e-01 + 1.1969366e-01 + -8.5694750e-02 + 4.8205162e-01 + -4.7597089e-01 + 2.1170407e+00 + 9.9026814e-02 + 8.0667107e-01 + 1.0169191e+00 + -9.3339821e-01 + 1.4725052e+00 + 9.8495987e-01 + -7.4668537e-01 + 3.1540918e-01 + -9.1433077e-01 + 1.2303684e+00 + -2.6587270e-02 + 9.0971698e-01 + 5.9256656e-02 + 2.6802869e-01 + -4.9421514e-01 + -4.5913713e-01 + -1.8801111e-01 + 2.4256492e+00 + 8.7054502e-01 + 5.6176349e-01 + 5.4971013e-01 + 2.3983417e+00 + 4.5732078e-01 + 6.5507391e-01 + -6.1347899e-01 + -1.8690513e-02 + -1.0380457e+00 + 5.4586221e-01 + -6.6939864e-01 + 1.3647959e+00 + 9.7885080e-01 + -6.6268531e-02 + -3.5787838e-01 + -1.3744338e+00 + 8.5066498e-01 + 8.5815476e-01 + -9.9552784e-02 + 2.1040331e+00 + 5.9418549e-01 + 6.0198587e-01 + 2.3120934e-02 + 7.6864179e-01 + -7.4281742e-01 + -9.6305351e-02 + -9.9523073e-01 + -1.2312624e+00 + -1.8376544e+00 + 1.5897524e+00 + -2.0318485e+00 + 2.3552286e+00 + 7.6404438e-01 + -2.1146526e+00 + -9.0353464e-02 + 8.8481897e-01 + -6.8837522e-01 + 7.9571957e-01 + -1.0377472e+00 + 9.8199263e-02 + 1.5237266e+00 + 3.7423274e-01 + 1.2390072e+00 + 6.5530194e-02 + -6.8030769e-01 + 5.1355658e-01 + 5.3690330e-02 + 2.1301171e+00 + -8.1960089e-01 + 9.8988330e-02 + -1.4617316e+00 + 1.6269981e+00 + 6.6043770e-01 + 1.4171046e+00 + -2.5323072e-01 + 4.5042330e-01 + 1.3013656e+00 + -2.9331732e-01 + 5.6921616e-01 + -1.4056865e+00 + -2.9313570e-01 + -1.1954598e-01 + -7.0002520e-01 + -1.5770161e+00 + 2.8758377e-01 + 2.4020215e-01 + 6.2244497e-01 + 9.6851909e-01 + -8.7452995e-01 + 2.6228534e-01 + 1.4501639e-01 + 1.1975501e+00 + 9.2473931e-01 + -7.8384661e-01 + -1.8150684e+00 + -8.1184821e-01 + 9.8893012e-01 + -7.3826135e-03 + -2.0371885e-01 + -6.9674307e-01 + -6.2502420e-01 + 4.6320393e-01 + 7.5812985e-01 + 5.0639985e-01 + 1.8001758e-01 + 1.1690202e+00 + -1.8039761e-01 + -1.6285389e-02 + -9.7952091e-01 + 2.0060874e-01 + -1.4747605e-01 + -1.0198766e+00 + 5.5524827e-01 + 2.6999586e-01 + 2.0614805e+00 + 5.1672752e-01 + 5.1782044e-01 + -1.7640511e-01 + -1.0924193e+00 + -1.1863172e+00 + 3.3836748e-01 + 1.5337581e+00 + 3.7779777e-01 + 9.5322996e-01 + -4.9014348e-01 + 3.1356209e-01 + -2.6380492e-01 + -7.9218233e-01 + 7.4409535e-01 + -2.8055603e-01 + -3.2169378e+00 + 1.9347692e+00 + -2.9875786e-01 + 3.8298125e-01 + -4.5438749e-01 + 1.5645920e-01 + -2.6126403e-01 + -6.1447955e-02 + -4.3489524e-01 + -1.1036657e+00 + -4.5878218e-01 + 2.9417284e-01 + -1.9477656e-01 + 1.5976725e+00 + 3.0954421e+00 + -7.5579575e-01 + -8.7235676e-01 + -1.0529907e+00 + -9.7559961e-01 + -1.1210815e-01 + 3.4542259e-01 + 1.5487863e-01 + -1.3068423e+00 + 1.5257117e+00 + 9.5863291e-01 + -9.8617215e-01 + -2.3718924e-01 + -4.8578903e-01 + -6.1163903e-02 + -6.3991739e-01 + -7.1532345e-01 + 1.8141396e-01 + -3.0259439e-01 + -2.1741077e-03 + -3.5152043e-01 + -1.4486974e-01 + 2.1407139e-01 + -6.5414217e-01 + 1.3855814e+00 + 6.0512786e-01 + -2.7553944e+00 + -6.6270335e-01 + 6.4392531e-01 + 9.3573296e-01 + -1.4264727e+00 + 1.7663624e+00 + -3.9751447e-02 + -1.5026254e+00 + -4.2496284e-01 + -6.4928869e-01 + 1.5704536e+00 + -2.1910482e+00 + -8.0709304e-01 + 3.8684839e-01 + 7.4292497e-01 + -1.6248157e+00 + 1.3680247e+00 + -1.4088395e+00 + -8.8216627e-01 + -3.4655931e-01 + 8.4283943e-01 + 5.5073027e-01 + 5.0885640e-03 + 8.7732064e-01 + -5.4354098e-01 + 1.5722160e+00 + 9.1945971e-02 + -1.8415581e+00 + -9.0406713e-01 + -9.8564825e-01 + -1.1298286e+00 + 6.6078594e-01 + -1.2078156e+00 + -1.9847514e-04 + -1.2154045e-01 + -7.7362012e-01 + 1.0878998e-01 + -7.0266433e-01 + 1.8479700e+00 + -1.5100297e+00 + 2.6510472e-01 + -4.9971297e-01 + -2.0950359e-01 + -1.7303794e+00 + 8.4164484e-01 + 2.1608976e-01 + 1.0955955e+00 + 6.2110477e-01 + -7.9548979e-01 + -1.2218376e+00 + -5.1083621e-01 + 5.1953778e-01 + -1.1049367e+00 + -2.4488621e-01 + -2.1857312e+00 + -9.8441307e-01 + 4.7344971e-01 + 8.1646612e-01 + 1.3909207e+00 + 4.1989086e-01 + 3.6125312e-01 + -9.7828711e-01 + -1.9788252e+00 + 9.9451778e-01 + 5.3802622e-01 + 4.4552059e-01 + 6.5422140e-01 + -4.3798682e-01 + 1.1226512e+00 + 9.5986046e-01 + -2.8859494e-01 + -6.1594291e-01 + -5.0616719e-02 + 6.6918447e-01 + 1.1498751e+00 + 9.8945169e-01 + -1.8928875e+00 + 2.9459688e-01 + -3.0688735e+00 + -1.5987793e+00 + -8.4631750e-01 + 4.4202013e-02 + -5.7684787e-02 + -1.2261838e-01 + 1.0371513e+00 + 1.1724120e-01 + 8.8167172e-01 + -7.6140598e-02 + -9.1442755e-01 + -1.1863140e+00 + 1.1997547e+00 + -4.1596168e-01 + 4.8394339e-01 + -6.5124866e-03 + -5.2376515e-01 + 4.6051679e-01 + -8.4241135e-01 + 9.2029321e-01 + 1.2784153e+00 + 1.8203717e+00 + 6.7590513e-01 + 9.3548460e-01 + 7.8826121e-01 + -1.0081944e+00 + -1.1533025e-01 + 4.1914355e-01 + -1.1429721e+00 + -2.2347716e-01 + -1.4164110e+00 + -2.6229936e-01 + 2.2802868e-01 + 3.3611962e-01 + 6.8345088e-01 + 9.8072475e-01 + -2.1553145e-01 + 9.6122126e-01 + 1.0349595e+00 + -1.5690988e-01 + 1.1077506e-01 + 9.0942270e-01 + -6.6064393e-02 + -7.2675744e-01 + -5.0838131e-01 + -6.4345674e-01 + -1.0840958e+00 + 1.2329015e+00 + -2.0850131e+00 + -9.2157756e-02 + 1.2962555e-01 + 2.0629267e-01 + -2.1348076e-01 + -1.5269838e+00 + -5.4421902e-01 + -1.0278122e+00 + 6.8755631e-01 + -3.9327924e-01 + 4.7565834e-01 + -6.3453204e-02 + -5.5904750e-01 + -7.3539704e-01 + -1.3866199e+00 + -7.9917366e-01 + -6.1121940e-01 + -1.1022349e-01 + 4.1425870e-01 + 2.3009527e-01 + 8.5703100e-01 + 4.8208732e-02 + 1.0233485e+00 + -1.8199287e-01 + -2.9012838e-01 + 8.1520391e-01 + 3.2233233e-01 + 1.3837468e-01 + -4.5101250e-01 + -1.5304060e-01 + -8.7900213e-01 + -1.9270694e-01 + 1.9488557e-01 + 1.5948781e+00 + -4.4194329e-01 + -4.2197083e-01 + 2.2580915e-01 + 1.4640549e-01 + 9.6901688e-03 + 1.0759872e-01 + -2.0495315e+00 + 1.3140299e+00 + 6.1804025e-01 + -4.1926490e-01 + -6.5461894e-01 + -6.9014672e-01 + -1.6792687e+00 + -2.4816894e-01 + 1.1933549e+00 + -1.5635730e+00 + -1.7451892e+00 + -2.4094730e-02 + -1.3481895e+00 + -2.8720563e-01 + -7.5126504e-01 + 4.3172515e-01 + -4.3123900e-01 + 1.2185488e-01 + 4.2056701e-01 + 4.0485047e-01 + 4.8372997e-01 + -2.9332601e-01 + -2.4694777e+00 + 2.5220914e-01 + -9.2917262e-01 + 5.3184551e-01 + -1.3263118e+00 + 1.0240248e+00 + -9.0126457e-01 + -6.5581629e-01 + 3.9817142e-01 + 2.3453116e+00 + -9.4529466e-01 + 1.7895027e+00 + 4.9043622e-01 + -8.9293645e-01 + 7.6420604e-01 + 2.2181690e-01 + -4.6993832e-01 + -4.3710564e-01 + -2.0513971e+00 + -1.6079263e-01 + 5.3075011e-01 + 2.6452400e-01 + -3.3193621e-01 + 1.0650741e+00 + -3.9640199e-01 + 6.1584665e-01 + -1.1577666e+00 + -1.9303874e-01 + 2.8629647e-01 + 7.2121907e-01 + 3.8690493e-02 + 3.4314478e-01 + 1.2560980e+00 + 1.2441861e+00 + -5.6312299e-01 + 2.3461755e-01 + 1.5473411e+00 + 1.6698147e-01 + 3.1500560e-02 + 1.4188402e+00 + 8.9203619e-01 + -6.5706503e-01 + 3.7980005e-03 + -1.1240728e+00 + -2.4869596e-01 + 8.9867012e-01 + -1.2880944e+00 + 1.0216136e+00 + -3.8424968e-01 + -6.9742625e-01 + -7.3441893e-01 + -2.1297391e+00 + -9.4251717e-02 + -1.1520457e+00 + -1.6791688e+00 + -4.9894417e-03 + -5.8749717e-01 + -3.9926894e-01 + 1.2420923e-01 + 1.6437822e-01 + -3.5008591e-01 + -2.8528617e-01 + -3.9782645e-01 + -2.5637975e-01 + -9.3547408e-01 + -1.3074692e+00 + -1.1252888e+00 + 5.2786271e-01 + 5.4423048e-03 + 8.9986362e-01 + 1.1799861e+00 + -7.6370442e-01 + -1.0566742e+00 + -1.8606377e+00 + -2.1111027e-01 + 6.9129810e-01 + 1.4982046e+00 + 7.6072898e-02 + -4.6479094e-01 + 2.2029349e-01 + -8.2178856e-01 + 9.0595625e-02 + -8.0848465e-02 + -1.2384605e+00 + -3.3642744e-01 + 4.6254179e-01 + 1.4246669e+00 + 5.5028230e-01 + 1.9425181e+00 + -6.9362140e-01 + 1.8508831e-01 + -1.6687079e-01 + 1.4751592e-01 + -1.0763054e+00 + -1.0340995e-01 + -3.1535882e-01 + -3.7326206e-01 + -3.6425193e-01 + -2.5827332e-01 + 8.8412499e-03 + 1.2958869e+00 + -3.7907416e-01 + -5.3354847e-03 + -1.6469414e+00 + 1.8607167e-01 + 8.0751522e-02 + -6.4700396e-01 + 3.7019685e-01 + -2.8666870e-01 + -2.7146531e-01 + -1.1292652e+00 + 8.7729765e-01 + -9.2228184e-01 + 1.0779998e-01 + 1.1892588e-01 + 7.1843907e-01 + 7.3908025e-01 + -1.3552589e+00 + 1.2905214e+00 + 5.7341962e-01 + -9.4955470e-01 + -9.8968909e-01 + -4.0948748e-01 + -5.3583565e-01 + 9.6550134e-01 + 1.0186432e+00 + 2.1129655e-01 + 1.0263613e+00 + 1.0982435e-01 + 1.3266116e+00 + 1.2186230e+00 + -1.2687537e+00 + 8.3629057e-01 + 3.6796697e-01 + -2.1976248e-01 + 8.4088774e-01 + -4.5008654e-01 + -5.6584619e-01 + 5.6646597e-01 + -1.0594414e-01 + 9.5585753e-02 + 1.1472685e+00 + -4.9554686e-01 + 2.4170911e-01 + 7.6768155e-01 + -1.1652674e+00 + 1.0289058e-01 + -1.6962865e-01 + 4.5727371e-01 + 2.6205772e-01 + 2.9126713e-02 + -8.2138724e-01 + 9.2337388e-01 + 1.4928808e+00 + 4.9234112e-01 + 8.4526780e-01 + 4.8235103e-02 + -3.9442719e-01 + 1.8061324e-01 + -1.5527073e+00 + 1.6592576e+00 + 9.3051905e-01 + -1.8327798e+00 + -1.3127958e+00 + 5.7537984e-01 + -1.6098793e-01 + -3.0442573e-02 + -1.6021356e+00 + 1.2549807e-01 + 1.8054493e-01 + 6.3510917e-01 + -1.4726965e+00 + 1.0202820e+00 + -1.0616060e+00 + 6.0541309e-02 + 1.5133236e+00 + 1.3295089e+00 + 3.8820932e-01 + 1.0619229e+00 + -1.1525521e+00 + 8.2406717e-01 + 9.1364021e-01 + -1.0291627e+00 + 1.3901028e-01 + 2.8583564e+00 + 9.6178784e-01 + 1.2448852e+00 + 6.0705133e-01 + -1.1578290e+00 + -1.8989076e+00 + -8.0190963e-02 + -1.0157720e+00 + -1.4445356e+00 + -1.3862910e-01 + 4.3202061e-01 + 2.2529935e+00 + -4.5958057e-01 + 9.0487100e-02 + 2.6081350e+00 + -1.0371692e+00 + 2.5310417e-01 + -2.6659886e-01 + 1.3174838e+00 + 1.1170149e-01 + 1.2714367e+00 + 4.1177924e-01 + 7.5791646e-01 + -1.6723351e+00 + -7.3348547e-01 + -1.3232145e+00 + -1.5115646e+00 + 9.1143911e-01 + 1.0438762e+00 + -1.3703896e-01 + -9.9039523e-01 + 1.0444031e+00 + 1.8246589e+00 + 7.0341242e-01 + -8.2215211e-01 + -4.4931308e-01 + 7.0320969e-01 + 6.2227935e-02 + 1.0264366e+00 + -9.8191465e-01 + 1.5361659e+00 + -2.8788051e-01 + -7.1129985e-01 + -1.1749555e+00 + 8.5577262e-01 + -3.3617631e-01 + -2.7418845e-01 + -3.7729515e-01 + -1.0397324e+00 + -7.0839796e-01 + -1.1918859e-01 + 2.1694238e+00 + -3.7663075e-01 + 7.9868609e-01 + -9.4202784e-01 + 8.7311301e-01 + 8.9599816e-01 + 7.1552154e-01 + 3.7160226e-01 + -1.8252009e+00 + -1.4159643e-01 + 6.0139000e-01 + -1.8092895e+00 + -4.1891260e-01 + 1.1975469e+00 + 3.3763286e-02 + 1.3563095e+00 + -3.3832843e-01 + 1.2386743e+00 + 1.5980147e-01 + 6.7825699e-01 + -1.4417330e+00 + -1.4795289e+00 + 4.8835108e-01 + -3.5870944e-01 + -1.8251808e+00 + -4.5306607e-01 + -3.5555029e-01 + -8.5476969e-01 + -1.2468225e+00 + 2.2176544e-01 + 3.3563225e-01 + -8.0249019e-01 + 1.3237444e+00 + -4.8740863e-01 + -1.9806977e+00 + 2.2903185e-02 + 8.1361849e-01 + -1.8975251e+00 + 1.8775138e+00 + -2.9066814e-01 + -8.2288157e-01 + 2.8370516e-01 + -5.3949709e-01 + 9.4973689e-01 + 1.3279037e+00 + 4.3738494e-01 + -5.5101438e-03 + -1.7033288e+00 + -7.6379308e-01 + 2.1813535e-02 + -1.9982183e+00 + -1.0539349e+00 + 1.4950441e-01 + -1.2319057e+00 + -7.7123123e-01 + 3.0126021e-01 + 1.8942899e-01 + 1.1857229e-01 + 2.4408932e+00 + 6.7059619e-01 + -6.7952998e-01 + 4.8528665e-02 + 1.1604839e+00 + 1.8087226e+00 + 6.8462116e-01 + -7.7803696e-01 + 6.8554978e-01 + 5.6833280e-01 + 5.2527440e-01 + -5.3678583e-02 + -2.1786703e-01 + 9.6949175e-02 + -5.9884471e-01 + 5.9437877e-01 + -5.0686483e-02 + 1.3316581e+00 + 7.4563957e-01 + 2.2633599e-01 + 1.3315034e+00 + 8.6830894e-01 + 3.4004775e-01 + -9.1059797e-01 + 1.3325892e+00 + -1.2632909e-01 + -3.5159914e-01 + 3.0142907e-02 + 1.0683220e+00 + 1.1857478e-01 + -1.1365895e+00 + -2.8084879e-01 + -8.0620989e-01 + -2.7180114e-01 + -1.2513240e+00 + 3.5577179e-01 + -3.4479236e-01 + -8.8385719e-01 + -5.8125360e-01 + 1.2704408e+00 + -1.1950753e+00 + 4.8604620e-01 + 1.6894879e-01 + -1.1936222e+00 + 4.0070989e-02 + -9.2534381e-01 + 8.3587926e-01 + 5.5127780e-01 + -1.1702060e-01 + -9.8920588e-01 + -5.1987408e-01 + -4.9813307e-01 + 3.4539861e-01 + 1.2462365e+00 + 7.5868363e-01 + -4.4510858e-01 + -1.8829860e+00 + -7.3588921e-01 + 3.5266763e-01 + -1.0611239e+00 + -5.1637115e-03 + 1.4726198e+00 + 1.6254662e+00 + 1.7581754e-01 + 1.7698051e+00 + 5.6982624e-01 + 7.0893706e-01 + 5.5655989e-01 + -4.9304250e-01 + 1.9601778e-01 + 5.1774147e-01 + 1.1855278e+00 + -2.5713507e+00 + -8.5399060e-01 + 1.3866599e+00 + 6.5192622e-01 + 2.1780597e-01 + 5.2258586e-01 + 1.1832797e+00 + -9.4528630e-01 + 4.1103331e-01 + -1.8809456e+00 + 1.3208515e-01 + 9.6166196e-02 + 1.2599841e+00 + -7.3473753e-01 + 5.4542850e-01 + 9.5580720e-01 + -7.0670643e-01 + 3.1162774e-01 + 4.8762082e-02 + -1.7382360e-01 + -4.9825532e-01 + -6.6230279e-01 + -1.1679659e+00 + -4.6331232e-01 + -9.3003836e-01 + -4.6155781e-02 + 1.5650353e+00 + -2.9626971e-01 + 9.7163894e-01 + 4.8797129e-01 + 1.3504959e+00 + -6.4775887e-03 + -9.9419910e-02 + -1.5128722e-01 + -1.2174697e+00 + 2.0324967e+00 + -1.4269880e+00 + -1.2398838e-01 + -3.6647194e-01 + 7.3641924e-02 + -1.4311642e+00 + 7.7855450e-01 + -4.3189544e-02 + -2.2896738e-01 + 1.4217551e+00 + 6.7468187e-01 + 1.7187916e+00 + 1.3144733e+00 + -5.4716441e-01 + -2.5585208e-01 + 1.2471957e+00 + -4.1713226e-01 + -7.5175165e-02 + -4.4896796e-01 + 4.1733428e-01 + 1.0752628e+00 + -6.0892510e-01 + -5.0186038e-01 + 9.5373153e-01 + 1.7102019e+00 + 9.5240855e-01 + -1.3728618e+00 + -6.8408630e-02 + 3.1451428e-01 + 7.2836393e-02 + -5.2894342e-01 + -1.7558093e+00 + 1.2069411e+00 + 1.0615736e+00 + 7.2328394e-01 + -3.7779114e-01 + -1.3145056e+00 + 5.8353902e-01 + -8.6127034e-01 + -2.3974282e-01 + 1.2496903e+00 + 9.6153986e-01 + -3.2911743e-01 + 3.6623112e-01 + -6.6281293e-01 + -7.8420270e-01 + -1.9810085e-01 + -1.2869598e+00 + 1.8883417e+00 + 5.0386084e-01 + -7.6236389e-01 + -6.9923591e-03 + 9.6047324e-01 + -1.7376957e-01 + -2.2985495e-01 + 7.7779132e-01 + 1.4765336e+00 + 8.6875723e-01 + 1.3579218e-01 + 5.3053016e-01 + 2.3219872e-02 + -4.4828307e-01 + -6.5846129e-01 + -7.8518595e-01 + -8.4702881e-01 + 1.0874763e-02 + -1.5884046e+00 + -1.2803498e-01 + -1.5132236e+00 + -2.6838672e-01 + -9.2026558e-01 + 1.4582828e-01 + 9.7314835e-01 + -1.6799571e+00 + -7.4864390e-01 + -7.4900348e-01 + -4.6070195e-01 + -1.9382338e-01 + -9.2903128e-01 + -2.5627933e-01 + 9.9326162e-01 + 1.4403929e-01 + -4.9906004e-01 + 3.0542923e-01 + 5.4390090e-01 + -1.7766304e+00 + -1.7484827e-01 + 1.9867120e+00 + 5.7357329e-02 + 1.7478475e-01 + 1.5762910e+00 + -1.2049265e+00 + 8.5305907e-01 + -3.0731860e-01 + 2.4801396e-01 + 6.0265910e-01 + -2.0771427e-01 + -6.3600644e-01 + 6.4201707e-01 + -1.2306127e-01 + 1.0869433e-01 + 5.9646009e-01 + 9.0129817e-01 + -2.4822662e-01 + -9.7325591e-01 + 4.2613172e-01 + 1.3105813e+00 + -6.1998985e-01 + 4.9943863e-01 + 1.4143037e+00 + -7.2818744e-02 + 3.3056439e-01 + -1.1028156e-01 + -9.2475106e-01 + -8.0088039e-01 + -1.2307399e+00 + -1.6811737e-01 + 1.8028701e+00 + 2.3371175e-01 + 1.6280675e+00 + -8.9801125e-01 + -4.9948250e-01 + 1.7343030e+00 + -1.3589580e+00 + -1.3037716e+00 + 1.9966175e+00 + 9.8456284e-01 + 2.3520878e-01 + 6.3658420e-02 + 1.1155733e+00 + 6.5006854e-01 + 7.5206429e-01 + 1.4361856e+00 + 1.2858489e+00 + 2.3960416e-01 + -1.3493414e+00 + 1.3703175e+00 + -1.0015286e+00 + -2.4932471e+00 + 3.8021656e-01 + 1.4898623e-01 + -5.8844721e-01 + 1.4917509e-01 + 1.3852518e+00 + 3.4487622e-01 + -2.8751345e-01 + 1.0469652e-01 + -1.6589844e+00 + -1.4889311e+00 + -1.0691735e+00 + -1.1442886e+00 + 2.2074813e+00 + 5.7093448e-01 + 9.8821920e-01 + -2.8929911e-01 + -7.3184188e-01 + 7.9706644e-01 + 4.0944296e-01 + -4.2417244e-01 + -1.7927278e+00 + 2.0884283e+00 + 2.0203867e+00 + -1.0703567e+00 + 1.2478443e+00 + -2.9472936e-01 + -6.1934888e-01 + -1.0383307e+00 + -4.5739415e-01 + 1.6630703e-01 + -1.4348308e+00 + 1.1473375e-01 + -1.5363629e+00 + -1.7160160e-01 + -9.5714902e-01 + 1.2551161e+00 + -7.0254596e-01 + -2.2528805e-01 + 4.2750230e-01 + -2.0768479e-01 + -5.7730195e-01 + -1.7658902e+00 + -3.9407710e-01 + 1.1410009e+00 + 4.1882215e-01 + -1.1593829e+00 + 9.5571984e-01 + -1.3825784e-01 + 7.3980502e-01 + 1.5174833e-01 + -2.3199689e+00 + -1.0663588e+00 + 1.5968882e+00 + -1.9011955e-01 + -6.1176971e-01 + 2.7247333e-01 + 5.7434300e-01 + -7.2697902e-01 + 3.0598786e-01 + -1.2674482e+00 + -6.8335225e-01 + -6.2558738e-01 + 1.8857792e-01 + 1.9165936e+00 + 5.9647362e-01 + -9.1136936e-01 + -1.6784928e+00 + -7.8371517e-01 + 1.4939468e+00 + 5.2154525e-01 + -1.0873966e+00 + 1.3327172e+00 + -8.4568354e-01 + -3.6571818e-02 + -7.0177505e-01 + -1.2914302e-02 + -6.8554029e-01 + -7.4234387e-01 + -7.4256993e-01 + 2.0343390e+00 + -2.0059021e+00 + 1.0231072e+00 + -4.6326586e-01 + 5.5115219e-01 + 1.0344137e+00 + -1.4667991e+00 + 7.4057031e-01 + -2.5472502e-01 + -1.0305989e+00 + -3.1904830e-02 + -9.2055716e-02 + 3.0797290e-01 + 4.0364790e-01 + -3.0541731e-01 + 7.4837935e-01 + 3.0778427e-01 + 1.2741223e+00 + 1.4238348e+00 + -4.9056328e-01 + -2.7659823e-01 + 1.0701254e+00 + 2.0272501e+00 + 1.2974194e+00 + -9.2371956e-04 + 2.1165710e-01 + 1.6094540e+00 + -1.1225689e+00 + -2.4594133e-01 + -7.9185048e-01 + 1.3970665e+00 + -1.2504266e+00 + -5.2120291e-01 + 6.0455933e-02 + 3.3018635e-01 + -3.9698115e-01 + -1.0162790e+00 + -3.3120143e-01 + -3.2577091e-01 + -1.1851456e+00 + -1.3382194e+00 + 2.0390758e-01 + 6.9457582e-01 + 5.3373611e-01 + -1.3663268e-04 + -6.2645993e-01 + -1.6588052e+00 + -1.0092288e+00 + -6.2124861e-01 + -2.9753171e-01 + 2.4311271e-01 + 2.2073315e-01 + 8.1847573e-01 + 3.4045281e-01 + -1.4010568e+00 + 7.7680784e-01 + -1.0839538e+00 + -4.8276399e-01 + -7.4930423e-01 + 6.1808078e-01 + -1.7789091e+00 + 5.7517593e-01 + -7.6473245e-01 + -8.8943671e-01 + -1.3675010e+00 + -8.6961586e-01 + -1.2722492e+00 + -9.4876522e-01 + 1.1316876e+00 + -2.3552102e-01 + -1.1074407e+00 + 1.1353818e+00 + 5.6084113e-01 + 3.3533840e-01 + -5.9188880e-01 + 6.2645459e-01 + -6.9294023e-01 + -8.3188345e-01 + -6.5207892e-01 + -5.0009740e-01 + 4.8253822e-01 + 8.6026162e-01 + -2.0416543e+00 + -5.0330522e-01 + -1.4859717e+00 + 1.1639076e+00 + 1.5666668e+00 + -6.8921558e-01 + 8.3134110e-01 + 5.1721343e-01 + 3.5481183e-01 + 8.8905412e-01 + 7.2024398e-01 + 2.0601084e-01 + -7.6012169e-01 + 1.4884590e+00 + -1.0251589e+00 + -1.0616451e-01 + -3.6329441e-01 + 9.9012451e-01 + 1.1781545e+00 + 1.2876581e+00 + 1.4026089e+00 + -1.4227702e+00 + 3.6052872e-01 + 8.7903079e-03 + -6.3129620e-01 + 1.8193749e-01 + -3.1566452e-01 + -1.2398143e+00 + -8.0650141e-01 + -9.6658639e-01 + -9.0059644e-01 + -1.3427892e-01 + 1.9686702e-01 + -9.8417643e-01 + -1.5539602e+00 + -1.0568448e+00 + 6.0531498e-01 + 8.6152331e-01 + -1.4255271e+00 + 3.4789773e-01 + -4.5615869e-01 + -9.3591823e-01 + 2.7957365e-01 + -1.3940504e+00 + -1.3818373e+00 + -3.8689556e-01 + -2.3249229e+00 + -8.1692841e-01 + -1.3469695e+00 + -1.7898982e+00 + -8.9313766e-01 + 3.3785925e-02 + -3.2267264e-01 + 2.1905039e+00 + -1.7976382e-01 + -8.9705399e-01 + 7.0041868e-01 + 6.1082404e-01 + -9.5219782e-01 + -1.2563299e-01 + -1.1838291e+00 + -3.8089692e-01 + -3.3015042e-01 + 2.0960550e+00 + 6.7051922e-01 + -1.1900344e+00 + -1.4534120e+00 + -7.2292057e-01 + 3.3604612e-01 + 1.8658126e+00 + -6.2200272e-01 + -1.8036931e-01 + -1.5947138e+00 + 1.2009401e+00 + 5.8540509e-01 + 8.7505269e-01 + 7.2894316e-01 + -2.0910374e+00 + 1.1185154e+00 + -6.9783915e-02 + -6.1889200e-01 + -4.6385940e-01 + 1.0848388e+00 + 1.9004864e+00 + 1.0134970e+00 + 1.8090806e+00 + -5.4576448e-01 + -1.5293068e+00 + -3.9498126e-01 + -1.0835558e+00 + -1.1118752e+00 + -3.7991149e-01 + -1.5024958e+00 + -9.0922568e-01 + -1.1387124e-01 + 1.0906961e-01 + -7.9517377e-01 + -2.6886529e-01 + -3.2803042e-02 + -3.6175121e-01 + 6.9917040e-01 + -9.0927569e-01 + 4.5295653e-01 + 1.5013566e+00 + 1.6690615e+00 + -5.2491950e-01 + 5.0016281e-01 + -9.8000999e-01 + 4.6844188e-01 + -1.6721176e+00 + -1.7252898e+00 + -9.2075076e-01 + -1.8349813e+00 + 5.0020646e-01 + 7.0653860e-02 + 9.8812180e-01 + 3.0715881e-01 + 6.5027693e-01 + -9.8695307e-01 + 8.6739158e-01 + -2.7670913e-02 + -6.5800707e-01 + 1.1382169e+00 + 7.4583089e-01 + -1.8757928e-01 + 2.7660615e-01 + -3.7608371e-01 + -8.4692727e-01 + 2.0943756e-01 + -2.7138133e-01 + -3.8993323e-01 + 3.6217492e-01 + -4.7701897e-01 + -3.2699346e-01 + 1.6667086e+00 + -2.2719241e+00 + -7.6602787e-01 + -1.2700063e+00 + 2.0368601e+00 + -2.5658153e-01 + 1.6376547e+00 + 1.7852675e-01 + 6.1726511e-02 + -1.1774598e+00 + -1.0733450e+00 + -7.0850706e-02 + -6.2323460e-01 + 2.0674880e+00 + -1.1425804e+00 + 1.3913383e+00 + 4.2484385e-01 + -3.4078180e-01 + -1.0343972e+00 + -7.4786423e-01 + -6.7843848e-01 + -1.3500676e+00 + 1.5247154e+00 + -8.1449036e-01 + -1.2172286e+00 + 1.6934063e-02 + 2.0070410e-02 + -1.3833563e+00 + -4.7451122e-01 + 2.4328553e-01 + 1.2867110e+00 + -3.5105826e-01 + 9.2196073e-01 + -1.6187853e+00 + -4.0626177e-01 + 1.7199500e-01 + -2.4183513e+00 + 2.2456949e-01 + -6.2362702e-01 + -1.1116582e+00 + 1.1752763e+00 + 2.9437930e-01 + -7.5326286e-01 + -3.6824065e-01 + -1.4413532e+00 + -1.0530018e+00 + 1.3656061e+00 + 2.0058101e+00 + 7.5906390e-01 + -7.3699983e-01 + 3.4343164e-01 + -5.4261545e-01 + -7.0488568e-01 + 9.8831032e-01 + 1.9934569e+00 + 2.7560834e-01 + 9.8280750e-01 + -6.9619097e-01 + -2.6797389e-01 + -3.3880892e-01 + 1.3263599e+00 + -4.4756764e-01 + 2.3474551e-02 + 6.0440290e-01 + -4.2998328e-01 + -9.2807579e-01 + -2.2063489e-01 + -7.1745435e-01 + -5.4361462e-01 + 8.7436487e-01 + -1.1147934e-01 + 8.2124116e-01 + -1.3621336e+00 + -9.7424374e-02 + -1.2431697e+00 + -1.3219483e-02 + -1.1740634e+00 + 3.2166819e-01 + 8.3026123e-01 + -4.2721230e-01 + 1.6484454e-01 + 8.5747769e-01 + 6.5507828e-01 + 4.6491733e-02 + -1.6557618e+00 + -4.4869763e-01 + -1.9910939e+00 + -3.7507707e-01 + 8.8169728e-01 + 4.7369777e-01 + 2.4266358e+00 + -1.9290231e-01 + 7.0747586e-01 + 1.0871843e-01 + -9.3745210e-01 + 3.1253014e-02 + -5.7013075e-01 + -9.2208876e-01 + -6.0285015e-01 + -2.0052478e-01 + 2.6435586e+00 + -5.2887290e-01 + -6.9176170e-01 + -7.2368303e-01 + -1.3245745e-03 + 1.1476807e+00 + -1.1609141e+00 + -2.4546418e+00 + -8.5614006e-02 + 9.9640598e-01 + -2.4145123e+00 + 7.7076271e-01 + 1.2506601e+00 + 1.7424527e-01 + -1.9596647e+00 + 2.0022970e-02 + 5.6429277e-01 + 8.3191546e-01 + 7.0898750e-01 + 7.3330896e-01 + 1.1254094e+00 + -1.1983760e+00 + 1.0344605e+00 + -1.7570608e+00 + 5.3415492e-02 + 3.2688450e-01 + 1.0957041e+00 + -9.7832853e-01 + 1.8191031e-01 + 1.3351982e+00 + 3.9370579e-01 + 7.5556825e-01 + -3.1743436e-02 + -5.9536474e-01 + 1.0070843e+00 + 6.0563831e-01 + 1.0884122e+00 + -4.5373999e-01 + 5.4717550e-02 + 1.0458391e+00 + -1.0649402e+00 + 5.6607435e-01 + 4.7366424e-01 + 1.5525874e+00 + 1.9681732e+00 + 1.3092373e+00 + -1.1254486e+00 + -1.6364700e+00 + -1.3417701e+00 + 7.2468786e-01 + -5.2971202e-01 + -1.0719234e+00 + -1.8815058e-01 + -1.0432608e-01 + -1.3616970e+00 + 2.4953706e-02 + -1.0898950e+00 + -8.3546249e-01 + 9.0289048e-01 + -5.3522683e-01 + -6.9854643e-01 + 1.4999838e+00 + 1.0276789e+00 + 4.3486120e-01 + 3.1186582e-01 + -9.0756870e-01 + -6.8133752e-01 + 7.8528865e-01 + 6.0228171e-02 + -5.4112166e-01 + 2.0707242e+00 + -5.8960893e-01 + -6.6816231e-01 + -4.9466829e-01 + -2.3860530e+00 + 5.2319834e-01 + 1.0573061e+00 + 5.3695772e-01 + -1.2016841e+00 + -1.2441854e+00 + 8.7198870e-01 + -6.3854525e-01 + 1.1542168e+00 + -1.1341624e+00 + 5.3668184e-01 + -9.6348276e-01 + -5.3445281e-01 + -6.7754027e-01 + 1.2523491e+00 + 8.0070737e-01 + 1.9404171e-01 + 1.2875770e+00 + -9.5794433e-01 + -1.7154190e+00 + 4.3612434e-01 + 6.0673329e-02 + 6.8095499e-02 + -9.2561057e-01 + 7.0795328e-01 + 4.9879906e-01 + -1.3223187e+00 + -4.4170044e-02 + 1.2088458e+00 + -9.2549057e-02 + 2.0257244e+00 + 7.1907735e-02 + -2.4647081e-01 + -1.2816853e+00 + 2.0759712e-02 + 5.9738145e-01 + 1.8868348e+00 + -8.1035930e-01 + -2.1022176e-01 + 7.7485862e-02 + 3.3537999e-01 + 4.3010455e-01 + 1.4799474e+00 + 7.1090851e-01 + -5.5984602e-01 + 2.4032091e+00 + -5.5070452e-01 + 4.2464246e-01 + 1.4922798e+00 + 1.5600052e+00 + -1.0088790e+00 + -1.7180024e-01 + -7.7398530e-01 + -1.3938563e-01 + -1.5501267e-01 + -1.2727656e+00 + 3.7900010e-01 + 4.2020594e-01 + -1.9461213e-01 + -4.4588538e-01 + -3.3821763e-01 + -2.2164967e+00 + -1.1735451e+00 + -9.1076709e-01 + 1.5156006e-01 + 2.2306490e-01 + -4.1955434e-01 + 5.8404549e-01 + 2.5233860e-01 + 8.5367971e-01 + -3.9610206e-02 + 9.4451447e-02 + 6.2095057e-01 + 3.0636778e-02 + 1.0698985e+00 + -6.2200362e-01 + 4.5927408e-01 + -1.5004839e-01 + 4.3459452e-01 + -8.3596091e-01 + 7.9826994e-01 + -2.4072275e+00 + -6.9242569e-01 + 2.1642675e+00 + 1.6554467e+00 + 6.8959864e-02 + -1.0090233e+00 + -5.8307534e-01 + -6.8382124e-01 + 5.6091707e-01 + 1.6451574e+00 + -1.3551299e-01 + -5.2942306e-02 + -1.5902534e-01 + 1.2491739e+00 + -2.7960329e-01 + 3.1556620e-01 + -1.0031601e+00 + 7.3606756e-01 + -1.2446669e+00 + 4.5705647e-01 + -9.3726182e-01 + 3.1216772e+00 + 2.4965592e-01 + -8.1186996e-01 + -2.0054637e-01 + 1.2755168e+00 + 1.5694246e-02 + -1.5619598e+00 + 8.0512718e-01 + -1.9861234e-01 + -9.4142371e-01 + 1.4032347e+00 + 1.9681705e-01 + -1.0661892e+00 + 1.6529156e+00 + 1.1105660e+00 + -1.3145895e+00 + 2.2809749e-01 + 7.8106469e-01 + -7.5942973e-01 + 4.0616852e-01 + -1.2089475e-01 + -2.1325355e-01 + -1.0369866e+00 + 1.3459321e+00 + 4.8086153e-01 + -4.0482152e-02 + 2.0034840e-01 + 1.4204342e+00 + -2.2953195e-01 + -6.9030570e-01 + 4.0252445e-01 + 9.0570140e-01 + -3.8412901e-01 + -1.2835386e+00 + -1.7138999e+00 + -1.1321760e+00 + 1.5351322e+00 + 9.8974914e-01 + -1.1704476e+00 + -1.8841191e-01 + 3.1064420e-01 + -6.6145167e-01 + 3.3039482e-01 + -7.1695726e-01 + -1.1121854e+00 + -9.6000907e-01 + 6.1209357e-01 + -4.3192613e-01 + -3.8387041e-01 + -3.7188233e-02 + -9.7571363e-01 + -5.3890900e-01 + 6.5584056e-01 + 9.9357557e-01 + -3.0286091e-02 + 2.2978972e-01 + -7.7457636e-01 + -4.8115938e-01 + -4.0645304e-01 + 5.2372645e-01 + -2.4769707e-01 + 1.1456257e+00 + -1.0216159e+00 + 3.0226996e-01 + -6.4605476e-01 + 2.6422853e-02 + 1.2095867e-01 + -2.1458647e+00 + -2.0796431e-01 + -6.9304486e-01 + 1.9678392e+00 + 1.0463621e+00 + -1.6533795e-01 + -5.7982882e-01 + -2.1719160e-01 + 2.4010067e-01 + 1.0212226e+00 + -9.0247873e-02 + 8.3927005e-01 + -2.9735274e-01 + 1.1550213e+00 + -4.4525596e-01 + -1.1093738e+00 + 1.1407570e+00 + 9.3306662e-01 + -5.2064815e-01 + -5.8971253e-01 + 1.3813775e+00 + -3.0433343e-01 + 1.9542518e-01 + 1.1588249e+00 + 3.2975841e-02 + -9.5516359e-01 + -2.7310560e-01 + 1.1577799e+00 + -7.0378523e-01 + 1.1411641e+00 + -1.5812815e-01 + -9.6846957e-01 + -8.9269859e-01 + 9.0945804e-01 + 3.3234123e-01 + 2.7075540e-01 + -1.4823312e+00 + 1.1943985e+00 + -1.3115854e-01 + 4.1605052e-01 + 1.3424734e+00 + -1.1638606e+00 + 4.2855994e-01 + -1.3293134e+00 + -1.9229195e+00 + 1.2900195e+00 + 7.6564567e-02 + 4.3112886e-01 + -1.0051639e+00 + 3.5399899e-01 + -7.8850670e-01 + 4.8381810e-01 + -8.6369566e-01 + 3.7490767e-01 + 2.7223501e+00 + 8.3216397e-01 + -4.6904799e-01 + -2.3506805e-01 + -1.5171919e+00 + 1.0934207e-01 + 1.0577449e+00 + 1.1568345e+00 + -6.3554725e-01 + 3.6758530e-01 + 3.0638658e-01 + 5.6086062e-02 + -7.0547399e-01 + -7.2406676e-01 + 4.3539370e-03 + -4.1873778e-01 + -4.2779059e-01 + 5.3201739e-01 + 7.1440869e-01 + -5.5571407e-02 + 3.1058261e-01 + 1.2481803e+00 + -5.8423584e-01 + 3.7062425e-01 + 5.0082839e-01 + -2.4446293e-01 + -2.3526083e-01 + -1.9595846e-02 + -7.5554525e-01 + 1.4726423e+00 + 5.1467620e-03 + -7.6439522e-01 + -3.2285746e-01 + 1.4577943e+00 + -1.7848833e+00 + 5.2172452e-01 + 8.5151181e-01 + 7.4530407e-01 + -1.3727669e+00 + 1.7920151e+00 + -3.0494347e-01 + 2.8986921e-01 + -6.1920210e-01 + -4.8661666e-02 + -1.3717560e+00 + -3.6528725e-01 + -8.0359205e-01 + -2.7330135e-01 + 3.4009318e-01 + 6.0079896e-02 + 9.5157929e-01 + 1.0733519e-01 + -2.7268657e+00 + -4.9234824e-01 + 1.1178597e+00 + 1.0497533e+00 + 1.9844143e+00 + -7.4187235e-01 + 1.3397665e+00 + 1.7058233e-01 + 7.0696862e-01 + 3.1671778e-01 + 4.3206750e-01 + 2.2689744e-01 + -4.3988843e-01 + -2.3777821e+00 + -1.2390864e+00 + -1.5459484e+00 + -4.7894162e-01 + -2.4638689e+00 + 3.4914308e-01 + 9.7130022e-01 + -1.4914094e+00 + -1.2022198e-01 + -5.0987646e-01 + -4.7444092e-01 + 8.0087827e-01 + -2.2533462e-01 + -5.7256852e-01 + -1.1011937e+00 + 1.0493369e-01 + 2.9299227e-01 + 1.0629206e-01 + 3.5320178e-01 + 7.3230410e-01 + 1.0279890e+00 + -5.8927386e-01 + 8.7842939e-02 + 4.5694145e-01 + 5.3185677e-02 + 3.4309992e-01 + -1.0225447e+00 + 6.2415099e-01 + -4.8415682e-01 + -1.7939031e-01 + 1.9481646e+00 + -8.2283036e-02 + 3.0450473e-01 + -2.4732981e+00 + 8.8765629e-01 + 1.6040736e+00 + -1.1557963e+00 + -2.2355829e-01 + -7.4201424e-01 + -2.0063736e+00 + -1.3583546e+00 + -4.4083357e-02 + 2.1040523e-02 + 6.9108153e-01 + -3.4240471e-01 + -3.3312092e-01 + 1.5546726e+00 + -7.2944541e-01 + -8.0834383e-01 + 5.0562798e-01 + 5.5875644e-01 + -3.3789405e-02 + 1.8101760e-02 + -6.8140499e-01 + 1.2242071e+00 + 2.0756135e-01 + 7.5266620e-01 + 1.1216543e+00 + 7.0992291e-01 + -2.0728639e+00 + 1.0784942e+00 + -5.3862154e-01 + 9.7972638e-02 + 1.7032126e-01 + -1.7119631e+00 + 1.5188973e+00 + 3.0934042e-01 + 6.9909026e-01 + -1.3953464e-01 + 5.2184106e-01 + -3.3249834e-02 + -2.7115477e-01 + 1.0638890e+00 + -6.5588293e-02 + -1.0929661e+00 + 5.6818858e-01 + -7.7201946e-01 + -6.1474184e-01 + -5.5048488e-01 + 1.1157862e+00 + 1.4128467e-01 + -1.1100723e+00 + -3.2547516e-01 + 5.9381289e-01 + -1.7859902e-01 + -4.8629096e-01 + -2.1426292e+00 + -1.1954118e+00 + -1.3346884e-02 + -1.8087171e+00 + -4.7846927e-01 + -5.1356791e-01 + -6.8570453e-01 + -9.4152433e-01 + 8.4331472e-01 + -1.6925777e+00 + 7.2567873e-01 + -2.9749253e-01 + -2.7149749e-01 + 6.3104172e-01 + 4.9178176e-01 + 3.1224403e+00 + -1.3988021e+00 + 7.8866234e-01 + 1.0953744e+00 + 6.8404263e-01 + 2.0654464e-01 + 6.2315383e-01 + -2.7818408e+00 + 7.9120024e-01 + 3.7521367e-01 + 9.3806488e-01 + -3.3371491e-01 + 6.3803936e-02 + -8.0436638e-02 + -1.4728266e+00 + 1.6244372e+00 + -2.0498254e+00 + 4.3364782e-02 + -7.4901509e-01 + 7.4113533e-01 + 7.4343009e-02 + -2.1718637e+00 + 1.3769233e+00 + -7.5403625e-01 + -1.4435982e+00 + -7.7272788e-01 + 6.0410785e-01 + -3.5282337e-01 + -2.7857484e+00 + 1.4463973e+00 + -3.3707800e-01 + 9.9101411e-01 + 1.0841775e+00 + 4.6143703e-01 + 9.6455704e-02 + 1.4293312e+00 + -1.4351278e+00 + -6.5771162e-01 + -1.2864638e+00 + -4.7150154e-01 + -1.4849677e+00 + 1.3222677e+00 + 1.7077852e-01 + 5.3653150e-01 + 6.0133746e-01 + 1.6857710e+00 + -6.5851419e-01 + -1.3889916e+00 + -1.1166049e+00 + 5.4899617e-01 + 1.7292770e-01 + 2.7965540e-01 + 2.2348431e-01 + -2.9774281e-01 + -1.7204687e+00 + 1.9875484e-01 + 1.6043066e+00 + -1.1845688e+00 + 1.0107212e+00 + 1.3773946e+00 + -8.4084801e-01 + -2.6610482e-02 + 2.6222520e-01 + 1.0994831e+00 + 1.0953423e+00 + 1.2853378e-01 + 1.3605963e-01 + -5.4296996e-01 + 1.8983353e-01 + -1.7681442e+00 + 5.2607630e-01 + 2.3039229e+00 + 1.1259601e+00 + -1.4910957e+00 + 1.2993640e+00 + -1.6641348e+00 + 1.2681637e+00 + 5.5617663e-02 + -1.4916498e+00 + -1.0986695e+00 + 2.0005617e-01 + 9.6109125e-01 + -7.7275615e-01 + -1.1263830e+00 + -6.6665417e-01 + 7.3842313e-01 + 8.9438115e-01 + 7.8210339e-02 + 1.4508188e+00 + -1.1965580e-01 + 6.2590968e-01 + -9.4637070e-01 + 2.8119398e-01 + 2.3434323e-01 + -4.5680703e-01 + -3.5958167e-01 + 6.6130192e-01 + 9.0556775e-01 + -1.1704516e+00 + -5.3916881e-01 + 1.3764591e+00 + 6.0575093e-01 + 2.0283693e+00 + -3.5222734e-01 + -1.7656045e-01 + -2.0422814e-01 + -1.5902297e-01 + 1.1525175e+00 + 1.0359512e+00 + 4.0904203e+00 + 1.3457453e+00 + -2.1185424e+00 + -6.6413549e-01 + 2.7039710e-01 + -7.0795706e-01 + -3.2729906e-01 + -9.0453803e-02 + -4.4546129e-01 + -1.8116238e+00 + 2.3864463e-02 + -9.8345917e-01 + 3.0076711e-01 + -2.5101284e+00 + 1.4375505e-01 + -1.7418991e-01 + 3.6401234e-01 + -5.3292082e-01 + -1.0924855e+00 + -1.6342597e-01 + 2.2720305e-01 + -8.9330937e-01 + -1.0949723e+00 + -4.4169915e-01 + -1.7033544e+00 + -1.8291962e+00 + -1.8859015e+00 + 3.2048264e-01 + 1.7284961e-01 + 5.9127425e-02 + 3.2289306e+00 + 4.5062077e-01 + 6.3581981e-01 + -1.9033419e-01 + -1.6228797e+00 + 1.3093253e+00 + 1.1650146e+00 + 4.5199627e-01 + -2.0372428e+00 + 6.8679350e-01 + 3.3650361e-01 + 2.1329776e+00 + 6.3398591e-02 + -6.9168853e-01 + -9.3831922e-01 + -3.0390177e-01 + -4.3784837e-01 + 1.0777277e+00 + 2.2628248e+00 + -1.2263183e+00 + -1.9007169e-01 + -2.1288940e-01 + -1.7870134e+00 + 1.7541686e-01 + -5.0449694e-01 + -6.1123409e-01 + 1.1818566e+00 + 6.5946807e-01 + -7.2721940e-01 + 8.6758207e-01 + -3.6959051e-01 + -6.1920736e-01 + -1.5689259e-02 + -1.0151620e+00 + -4.0515263e-01 + -5.1676991e-01 + -2.8293142e-01 + -1.2085865e-01 + 1.9737024e+00 + 7.7157227e-01 + -4.9098639e-01 + 9.4105277e-01 + 8.2352026e-01 + 9.5370186e-01 + 4.9566291e-02 + -1.3430925e+00 + 6.2056056e-01 + 3.6449433e-01 + -9.9715689e-01 + 1.8722434e+00 + -3.4648416e-01 + 8.3477035e-01 + -1.0161436e+00 + 1.4072234e+00 + -2.6976555e-01 + -5.3086506e-01 + 8.5077354e-01 + -2.3421746e-01 + 1.7028833e+00 + 1.8352945e+00 + 1.2132514e-01 + 2.4801638e+00 + -5.9771040e-01 + -8.3715620e-01 + -1.2761829e+00 + -1.2409675e+00 + 4.2165515e-01 + -4.1228468e-01 + 7.6076755e-01 + 3.0572657e-01 + -6.3256920e-01 + -4.4509821e-01 + -8.5646041e-01 + 2.0987476e-01 + -2.3887307e-01 + 8.2728647e-01 + -3.0284665e+00 + 1.8293285e+00 + -1.1240945e+00 + 8.2835008e-01 + -1.8572865e+00 + 6.6030719e-01 + -1.2073929e+00 + 2.3406938e+00 + 3.6359650e-02 + 9.9736592e-02 + -7.9474483e-01 + -3.8212459e-01 + 3.3224486e-02 + 2.3795580e-02 + -1.7340733e-01 + -1.3335400e+00 + -1.1703236e+00 + 4.3206639e-01 + 4.2804519e-01 + -8.4329019e-01 + 1.7295965e+00 + 2.4254364e-02 + 1.4635957e+00 + -6.9701157e-01 + 1.6023512e+00 + 2.5764106e-01 + 6.5420840e-01 + -1.2757486e+00 + 8.4527055e-02 + 1.8804332e+00 + 2.3981861e-02 + 8.1810326e-02 + 9.4125295e-01 + 7.0478992e-01 + -8.7410288e-02 + 2.9929933e-01 + 7.3969866e-01 + 6.1652527e-03 + -1.0205326e+00 + 1.1393192e+00 + 2.2763866e-01 + 6.9238933e-02 + 1.1372073e+00 + -1.7859383e+00 + 1.2093209e+00 + 1.7075824e-01 + 5.0519876e-01 + 9.5462565e-01 + -1.5937658e+00 + 1.9271784e+00 + -1.3459917e-01 + -2.2719418e+00 + -1.6415187e+00 + 1.2727242e+00 + 1.8010434e-01 + -5.3922344e-02 + 3.1130869e-01 + -9.7602299e-01 + 3.6502563e-01 + -5.1014226e-01 + 2.6156070e-01 + 1.6004989e+00 + 6.3145023e-01 + 1.4041219e+00 + 1.1782578e+00 + 1.0028962e-01 + -1.7067393e-01 + 7.1091364e-01 + -1.1679110e+00 + -1.2987078e-01 + 5.4162472e-01 + 5.5676318e-01 + -6.0847956e-01 + 2.2785543e-01 + 7.5719264e-03 + -1.1566288e+00 + -9.1690713e-01 + -4.3371860e-01 + 1.0682805e+00 + 7.2500571e-01 + 1.3243114e+00 + 8.8053260e-01 + 3.3612188e-01 + 3.1711505e-02 + 2.0585438e-01 + 1.3071147e+00 + 2.6859885e-01 + 1.0240752e+00 + -3.3767800e-02 + -2.0907923e+00 + -3.1605928e-01 + 1.3293614e-01 + -6.6502875e-01 + -4.6751384e-02 + -1.5042442e+00 + -6.7332695e-01 + -8.0040830e-01 + -2.2820500e-01 + 4.6014117e-01 + 5.6643539e-01 + 1.0466590e+00 + 1.0085411e+00 + -4.3562634e-01 + 1.5347461e+00 + 9.3346182e-02 + -9.8834931e-01 + -9.4302361e-01 + -9.5601855e-01 + -1.2864599e+00 + 1.2958926e+00 + -2.6279949e-01 + 1.0125045e+00 + -5.1349431e-01 + 1.4286581e+00 + 3.4724086e-01 + -9.4450772e-01 + 7.9786996e-01 + 6.0385224e-01 + -1.5594339e+00 + -1.3957051e+00 + 1.3869349e-01 + -7.0213893e-01 + -5.2048933e-01 + 7.6411642e-01 + 2.9853005e-01 + 1.0527312e+00 + 2.9577746e-01 + 1.4587117e+00 + -3.5218769e-01 + 1.4126565e-01 + -6.3791043e-02 + 1.3278377e-01 + -1.0916598e+00 + 6.9544992e-01 + -6.3877890e-01 + -1.0116274e+00 + 2.5629750e+00 + -1.0365102e+00 + -2.2961823e+00 + -2.9167374e-01 + -8.7843361e-01 + 1.8085733e+00 + 5.0819847e-01 + 2.7595729e-01 + -4.0476070e-01 + -5.8316475e-02 + -1.8093261e+00 + -6.5760227e-01 + 1.1008245e+00 + -1.2002698e+00 + -7.7748577e-01 + 5.1123972e-01 + 3.1796235e-01 + 7.8364337e-01 + 9.3043358e-01 + -3.2940993e-01 + 2.3730973e+00 + -1.3686203e-01 + 8.8604068e-01 + -1.3494337e-01 + 2.5938026e-01 + -1.4533512e+00 + 3.7203293e-01 + -2.9586405e-01 + -1.4770410e+00 + 2.7873733e-01 + -2.3160758e+00 + 3.8453911e-01 + 1.0168891e+00 + -6.1808277e-01 + 4.2853442e-01 + 3.1769513e-01 + -6.6709341e-01 + 8.6269295e-02 + -1.1852492e+00 + 6.8718698e-01 + 9.7650598e-01 + -2.9192385e-02 + -5.2907122e-01 + 1.9874819e+00 + -1.7279886e+00 + 1.4370308e+00 + 8.8883998e-01 + 1.1268836e+00 + 1.3095244e+00 + -2.5114481e+00 + 4.7042793e-01 + 3.8762363e-02 + 3.8273236e-02 + -7.2462693e-01 + -1.6223258e+00 + -9.6644469e-01 + 3.7245694e-01 + 5.9675205e-02 + 5.8916948e-01 + 7.8175891e-01 + -1.1110514e+00 + -1.4968209e-02 + 5.0481430e-01 + -8.2604687e-01 + 1.4610651e+00 + 8.7844123e-01 + -3.7860047e-01 + 9.2151679e-02 + 6.2083873e-01 + -6.5447605e-01 + -1.8860184e+00 + 4.2951317e-01 + 7.0602393e-02 + -1.2104967e+00 + 1.3644896e+00 + 5.2415748e-01 + -5.0833112e-02 + 5.6964257e-01 + 9.8804130e-02 + -6.1042830e-01 + -1.7135368e+00 + -4.2861084e-01 + 3.4723485e-01 + -9.8493767e-01 + -1.0175654e+00 + 1.3531262e+00 + 6.8185288e-01 + 7.2209148e-01 + -2.1485566e+00 + -5.5094979e-01 + 1.2133245e+00 + 3.3918575e-01 + -2.0445724e+00 + 8.8761750e-01 + 8.9336755e-02 + 1.0525786e+00 + -1.7464749e+00 + 9.0579532e-01 + -4.2693011e-01 + 4.4305063e-01 + -1.9962416e+00 + 5.3011950e-01 + -2.3868159e+00 + 3.1851358e-01 + 5.6632183e-03 + 6.3687810e-02 + 8.6102891e-01 + -4.0210452e-01 + -4.1003446e-01 + 1.9502042e-01 + 1.3941302e+00 + -4.6775293e-01 + -7.1250014e-01 + -1.4447708e+00 + 1.5975822e+00 + 7.1674082e-01 + 4.1896816e-01 + 1.4398078e+00 + 2.2690758e-01 + -6.8495188e-01 + -3.7195839e-01 + 6.6749039e-01 + 1.9639448e+00 + 7.0729899e-01 + -2.6122910e-01 + -6.4493321e-03 + 4.2340403e-01 + -2.9028374e-01 + -1.5467727e+00 + -7.4311249e-01 + -7.0107537e-01 + -1.0776600e+00 + -5.2649700e-01 + 5.6873746e-02 + -9.7044344e-01 + -2.9868340e-01 + 8.7330453e-01 + 5.0126438e-01 + 4.4655934e-01 + -1.5576534e-01 + 5.0048996e-01 + -7.0762483e-01 + -1.2594021e-01 + -2.2789729e+00 + 3.1794867e-01 + -2.0059230e+00 + -7.5338070e-01 + 1.3096114e+00 + 1.6713798e+00 + 1.5630925e+00 + -1.0908324e+00 + -7.6347770e-01 + -1.3801865e-01 + 4.2069754e-02 + -9.7489515e-02 + 7.7648979e-01 + 1.1381339e-02 + 1.0366631e+00 + 3.7520686e-01 + 2.7120230e-01 + -4.7167289e-01 + 4.5586564e-01 + 8.9475730e-01 + 1.3604688e+00 + 5.7132364e-01 + -1.5581980e+00 + 1.8503823e+00 + -5.5571031e-01 + 7.0504004e-01 + -2.8406112e+00 + 2.4634740e+00 + -1.1663395e+00 + -7.0377258e-01 + -3.3767012e-01 + 3.0607601e-01 + -1.0590630e+00 + 9.9030513e-01 + -2.0261636e+00 + -2.7835380e-02 + 1.0573392e-01 + -3.0862549e-01 + -1.8196029e+00 + 3.2653594e-01 + -9.5554972e-01 + 6.5634913e-01 + -2.3736873e-01 + 8.1390748e-01 + 7.1642431e-01 + 2.5970675e-01 + 2.4342645e-01 + -2.4466719e-01 + 6.9818152e-01 + -8.9900193e-01 + -1.4336348e-01 + -1.1669928e-01 + -4.2759970e-01 + -4.1170368e-01 + -5.5612510e-01 + 5.3903357e-01 + 1.4565602e+00 + 1.1090722e+00 + -1.3130928e+00 + 1.3157085e-01 + 3.9419522e-01 + -8.6064007e-01 + -1.5904887e-01 + 6.7708860e-01 + -9.6812238e-01 + -3.1548823e-02 + 9.1789815e-01 + -9.8744517e-02 + 1.0596911e+00 + 4.6426006e-01 + -6.7322142e-01 + 1.4761351e+00 + 1.8969675e-01 + -1.3833997e+00 + -7.8488096e-01 + -1.0164769e+00 + -2.3167685e+00 + -1.1137962e-01 + 2.2396439e-01 + 4.9345650e-01 + 4.6799125e-01 + 4.5131102e-01 + -7.6818496e-01 + -1.1060913e+00 + 3.2860195e-01 + -6.5393641e-01 + 1.2423623e-01 + -5.7917825e-01 + -2.3761078e-01 + 1.0651050e+00 + -6.1023755e-01 + -2.5357610e+00 + -3.8775431e-01 + 1.7951827e-01 + 1.1162595e+00 + -3.2391373e-01 + -1.3372364e-02 + 5.2370308e-01 + 6.1672483e-01 + 1.0946403e+00 + -8.8464571e-01 + 5.4899174e-01 + -5.8036117e-01 + 1.0479938e-01 + 1.3037208e+00 + -5.0537137e-01 + 1.5332945e+00 + -4.1641551e-02 + -5.7738902e-01 + 6.8498441e-01 + -1.0023310e+00 + -4.5435803e-01 + -3.4607705e-01 + -8.7274632e-01 + 6.3119143e-01 + 9.7601459e-01 + -6.5840933e-01 + 7.8317020e-01 + -1.0260025e+00 + 5.5591507e-01 + -8.5708557e-01 + -8.6229283e-01 + 1.0418377e+00 + -4.0807206e-01 + -1.1724260e+00 + 4.7506930e-02 + -9.9679910e-01 + -1.8438136e+00 + -3.2330188e-01 + -1.7406816e+00 + -1.5883703e-01 + -2.3952344e+00 + -7.6868130e-01 + -3.5274356e-01 + -3.3888664e-01 + 8.1963390e-02 + -1.2058405e+00 + 1.4085478e-01 + 1.7355266e-01 + -7.0917695e-01 + 3.5805107e+00 + 1.1861180e+00 + 9.2512836e-01 + 1.3908647e-02 + -1.8635669e+00 + -8.5852985e-01 + -6.0100247e-01 + 2.5259599e-01 + -8.0784359e-01 + 2.2050361e-01 + 8.0694149e-01 + -3.2116163e-01 + -1.2727943e+00 + 1.5048480e-01 + 3.7533312e-01 + -1.4203326e+00 + 1.2021708e+00 + -4.0896829e-02 + -6.9691338e-01 + -4.5930011e-01 + 9.1976268e-01 + 5.0390667e-04 + -1.2738259e-01 + -6.6668105e-01 + 3.0294878e-01 + -1.0334954e+00 + 2.0372746e-01 + 3.4088060e+00 + -7.2513650e-02 + -6.2253157e-01 + 8.0460222e-01 + -7.2680736e-01 + -6.2143639e-01 + -2.4671656e-01 + -1.2955563e-01 + 2.1946469e-01 + 4.9865198e-01 + 1.0205904e-01 + -9.0577458e-01 + -3.3441849e-01 + -2.8571051e-01 + -3.0101149e-01 + 1.3820376e+00 + 2.3820188e+00 + -6.0770795e-01 + 7.2824691e-02 + 4.3269087e-01 + 1.3386660e+00 + 1.8837198e-01 + -1.4750746e-01 + 4.4405193e-01 + -1.3325971e+00 + 2.4554218e-01 + -4.1772482e-01 + -1.6973956e+00 + -6.1478173e-01 + -2.9508434e-01 + -1.0102840e-01 + -6.2327817e-01 + 6.7540068e-01 + 1.6053156e-01 + -1.2680926e+00 + -1.3566391e+00 + 8.3559201e-01 + 6.3636655e-01 + -7.9808755e-01 + -9.9817536e-01 + -2.5544562e-01 + -1.2607425e-01 + 6.3974015e-02 + 1.5007614e+00 + 1.4298370e+00 + -7.2892420e-01 + 7.7070571e-01 + 9.0383855e-01 + 8.7262468e-01 + 6.3045733e-01 + 4.5461017e-01 + -3.4150177e-01 + -6.4942674e-01 + 2.8074432e-01 + 6.3578576e-01 + 6.6021617e-01 + -1.4916494e+00 + -4.4875407e-01 + 4.6528374e-01 + -4.7279449e-03 + -3.6294007e-01 + -2.3249125e-01 + -8.9143708e-01 + 1.0710673e+00 + -2.4977504e-01 + -1.0934049e+00 + 1.5473977e-01 + -9.7186903e-01 + 2.1210485e-01 + -2.0071060e-01 + 8.7734128e-01 + -1.3725237e+00 + -1.1727356e-01 + 2.4227496e-01 + -7.8376669e-01 + -5.8739109e-03 + 5.4659302e-01 + -1.1493651e+00 + 5.1249841e-01 + 1.3587148e+00 + 3.5963235e-02 + -1.8049284e+00 + -3.7459200e-01 + 1.6734869e+00 + -7.4664231e-01 + 1.0276640e+00 + -3.5589256e-01 + -8.0298450e-01 + 5.4875892e-02 + -3.3097895e-01 + 7.9442363e-01 + -3.2631676e-01 + -1.4245328e+00 + -4.1840937e-01 + -1.1925914e+00 + 1.5615359e+00 + 6.8270822e-01 + 5.5670986e-01 + 1.0584190e+00 + 5.1924525e-02 + -3.7384901e-01 + -2.1027586e+00 + 1.3607168e+00 + -4.1100167e-01 + 4.3927932e-01 + -4.7502671e-02 + 4.5391253e-01 + -2.2161730e-01 + -6.7926290e-01 + 6.8460981e-01 + 1.4282970e+00 + -1.2586061e+00 + 1.6961526e+00 + 1.8878205e+00 + 7.4545159e-01 + 9.7709528e-01 + -8.9700360e-01 + 7.3734229e-01 + 3.9388289e-01 + 1.3086688e+00 + 1.1075902e+00 + -1.9689869e-02 + 5.8613415e-01 + 7.2484525e-01 + -8.6586509e-01 + 7.9010448e-01 + -1.4669250e-01 + 6.8417456e-02 + 9.3223576e-01 + 4.9498002e-01 + 1.2783307e+00 + -6.1999968e-01 + -5.2993135e-01 + -3.5014899e-01 + -1.9118274e-01 + 1.6379433e-01 + -7.0694354e-01 + 2.2963282e+00 + 4.2761636e-01 + 1.6118132e+00 + -6.5122231e-01 + -9.5335368e-01 + -1.0385623e+00 + 5.5351352e-01 + 4.8675084e-01 + -8.2982190e-01 + -1.9611874e+00 + -1.3617226e+00 + 1.9703414e-02 + 7.3906525e-01 + 1.7400578e+00 + 6.8915969e-01 + 7.4760718e-01 + -1.8278361e-01 + -7.1103604e-01 + -1.9504566e+00 + 3.7763172e-01 + -1.3213669e+00 + -2.6352027e+00 + 1.2030408e+00 + -8.0054811e-02 + 4.0283864e-01 + -1.1493667e+00 + -2.1439793e-01 + 1.2750906e-01 + 2.2386761e+00 + 6.6232400e-01 + -7.1234883e-01 + -2.9656456e-01 + -1.1199285e+00 + 1.0871655e+00 + -3.9403840e-01 + 1.3356235e+00 + -2.9299663e-01 + -1.0780581e-01 + -1.0883319e+00 + -8.1012650e-01 + 1.1069790e+00 + 1.0235897e+00 + -7.5150771e-02 + 1.1698604e+00 + 2.6401048e-01 + -1.3639758e+00 + -9.2763270e-01 + -7.7790622e-01 + -3.6399014e-01 + 2.0260128e-01 + 1.8329947e-01 + -6.5205292e-01 + 3.1349416e-01 + -1.0321609e+00 + 3.1499294e-01 + -1.8741100e+00 + -1.5652373e-01 + 9.1034838e-01 + 1.4454185e-01 + 1.3919353e+00 + -2.5688957e-01 + 1.9367791e-01 + -4.4944421e-01 + -2.6992043e-01 + 6.9003114e-01 + 3.8693391e-01 + -1.5278899e+00 + -9.0868549e-02 + 5.0991231e-01 + -4.9345085e-01 + -1.0155738e+00 + 2.1732512e-01 + 7.0329777e-01 + 9.9310181e-01 + 2.4791742e+00 + 1.1106428e+00 + 4.8151720e-01 + 5.6974787e-01 + 8.1893707e-01 + 6.0857918e-01 + -2.7340211e-01 + -1.7439461e+00 + 1.8689215e-02 + -1.4833475e+00 + -1.8244291e-01 + -5.0927349e-01 + -1.7238216e-01 + 1.5965128e+00 + 1.1954233e+00 + 1.9710088e+00 + -4.1495207e-01 + -1.7961960e+00 + 1.2966728e+00 + 4.7798841e-01 + 1.8149265e-01 + -1.2752919e+00 + 7.8141788e-02 + -8.7693030e-01 + -1.9136904e-01 + -7.4912709e-01 + -5.3118463e-01 + 1.6369013e+00 + 1.9849515e+00 + -5.3635736e-01 + -5.2680882e-01 + 6.9813012e-01 + 8.0216250e-01 + -1.5800073e+00 + -7.7983212e-01 + -1.1434768e+00 + 4.6297701e-01 + 1.2856119e+00 + -3.7580797e-01 + 6.0781062e-01 + -7.4159757e-01 + -4.4873797e-01 + 1.2782383e+00 + 1.9943754e-01 + 5.5656574e-01 + 8.8042740e-01 + -1.0638588e+00 + 8.4267949e-01 + -7.5642639e-01 + 9.8144028e-01 + 8.9289775e-01 + 1.3478700e+00 + 4.3822222e-01 + 7.6773585e-01 + -4.3339236e-01 + -1.4761727e+00 + -5.1002308e-01 + 6.8941698e-01 + -4.5765711e-01 + 1.2327241e-01 + 1.0738428e+00 + 1.5729547e+00 + -7.7114648e-02 + -8.3192083e-01 + -7.0911387e-01 + 1.8839830e+00 + -1.8480874e+00 + 2.0807979e-01 + -3.2335562e-01 + -8.9696965e-02 + -1.7777022e+00 + -1.4662050e+00 + 1.5835412e+00 + -1.7547472e+00 + 1.5159923e+00 + -3.1310484e-01 + -2.4288079e-01 + -3.6779344e-01 + -9.2313062e-01 + 7.0184142e-01 + -3.4041508e-01 + 3.8206082e-01 + 9.6084534e-01 + 3.4072576e-01 + -3.1180590e-02 + 1.3005795e+00 + -1.1767989e+00 + -9.7638914e-01 + -1.8365830e-01 + -1.8464814e+00 + 5.9270284e-01 + -5.8256505e-01 + -3.4113998e-01 + -5.7274419e-01 + 1.9873937e+00 + -6.0818332e-01 + -1.6104905e-02 + -4.9918284e-01 + 1.6262184e-01 + 4.6287933e-02 + 7.3815314e-01 + -1.1900175e+00 + -3.4665394e-01 + -1.8161761e+00 + 2.6423302e-01 + 9.3768856e-01 + 4.0846630e-01 + -8.3720198e-01 + 5.1347588e-01 + -5.3029029e-01 + -1.6078144e-01 + 4.8631908e-01 + -1.6294133e+00 + -8.9065074e-01 + -4.4631327e-01 + 2.6534077e-01 + -2.2565439e-01 + -1.5810926e-01 + -4.8295383e-01 + 1.8304666e+00 + 3.2041716e-01 + -9.7029079e-01 + 4.1824764e-01 + -2.1355375e+00 + 9.1039544e-01 + -2.1588778e+00 + 5.9735425e-01 + -1.6785333e+00 + -2.1841847e-01 + -1.3131793e+00 + 2.2760810e-01 + -6.7269626e-01 + -4.4476859e-01 + 1.7271752e+00 + -1.0110061e+00 + 8.4892440e-01 + -7.6674374e-01 + -4.0057886e-01 + 1.2700435e+00 + 4.7821542e-01 + 4.4276970e-01 + 1.1542324e+00 + -5.8810763e-01 + -1.6662775e-01 + 3.9633717e-01 + 2.2551266e-01 + 9.1701362e-01 + -1.7596457e+00 + -9.0756906e-01 + -1.2612895e+00 + -1.5467284e+00 + 5.8806181e-01 + -4.4268899e-01 + -1.0563030e+00 + -1.9987190e-01 + -1.7385973e+00 + -1.2232963e+00 + 3.1239721e-01 + -1.7301538e+00 + 1.5037819e+00 + -1.3148743e+00 + -5.5081265e-02 + -7.2485787e-01 + -1.6991750e-01 + 4.1195564e-01 + 1.2233642e+00 + 1.2152738e+00 + -4.2624723e-01 + -1.7953451e-01 + 2.4436711e-01 + 1.6594810e+00 + 8.9947897e-01 + -1.6389043e+00 + -7.3351580e-01 + -1.1253048e+00 + -9.4035125e-01 + 7.1638916e-01 + -4.6946125e-01 + 1.6000137e+00 + 5.2585571e-01 + 3.2118849e-01 + 2.0952629e+00 + -3.9012804e-01 + 3.6881430e-01 + 6.1224995e-01 + -6.4318865e-01 + 1.8674919e-01 + -1.4178382e+00 + 1.0335631e+00 + 1.8982487e+00 + 3.0799298e-01 + -2.1883551e+00 + 1.8815040e+00 + -1.2800462e+00 + -1.2693642e+00 + -8.6150632e-01 + -2.6905085e-01 + -1.3885013e+00 + 3.0489817e+00 + -9.3187058e-01 + 8.8456082e-01 + 6.8472240e-01 + -8.4659989e-01 + -9.2009022e-01 + 1.6819373e+00 + 7.2498750e-01 + -1.1012138e+00 + -2.8001246e-01 + -1.1283240e-01 + 6.3774311e-01 + 9.7697216e-01 + 1.0029315e+00 + 9.7508437e-01 + 2.9773685e-01 + 1.6825549e+00 + -8.4133420e-01 + 2.0818447e+00 + 6.7915838e-01 + 1.4586190e+00 + -2.2127400e-01 + -7.7378136e-01 + 5.3860031e-01 + 4.7658903e-01 + 4.9003957e-01 + 2.0583231e-01 + 6.8023330e-01 + 4.9998795e-01 + -7.6963735e-01 + -1.3668553e+00 + 4.5851428e-01 + 1.7235169e-01 + 4.9553145e-01 + -1.4838706e+00 + -6.4668035e-01 + 1.9986432e-01 + 1.3448631e+00 + -1.1977934e+00 + 1.3108855e-01 + 2.1933662e-01 + 2.8563297e-01 + -8.1061512e-01 + -8.1673741e-01 + -5.4847688e-01 + 6.8704812e-02 + 4.8662484e-01 + 2.0682443e+00 + -1.5984502e+00 + 9.9117854e-01 + 1.0432691e+00 + -1.0079386e-01 + -9.4775041e-01 + -3.4661073e-01 + -3.3626313e-01 + 5.7817279e-01 + 2.4411423e-01 + 7.1628402e-01 + -7.9975416e-02 + 5.8579015e-01 + -9.7557168e-02 + 1.7925353e+00 + -7.0486474e-01 + 7.3295761e-01 + 2.2555019e+00 + -5.8129470e-01 + 7.0610653e-02 + 7.6920404e-01 + 9.0373786e-02 + 9.5401664e-01 + 2.9615247e-01 + 1.3670472e+00 + -2.1625191e-01 + -1.7282587e+00 + 7.8932657e-01 + -3.6019584e-01 + 4.7136545e-02 + 6.3113509e-01 + -1.9396646e+00 + -3.5927649e-01 + 5.8748448e-01 + -2.2806382e+00 + -1.1168671e+00 + -8.1648598e-01 + -4.8532653e-01 + 6.6501897e-01 + -1.3283128e+00 + -1.2615899e-01 + 6.3291425e-01 + 4.6997901e-01 + 6.3515745e-02 + 5.5624540e-01 + 1.5755808e+00 + 1.2563312e-01 + 1.6255982e+00 + 1.7997885e+00 + -4.8136642e-01 + -3.9253742e-01 + 6.0740953e-01 + -7.5156625e-01 + -1.6553692e+00 + 2.7173639e-01 + 4.3543567e-01 + 1.9720793e-01 + -9.6200295e-01 + -3.9220036e-01 + 1.0303199e+00 + 1.7998307e-01 + -1.9326882e-01 + -5.7405901e-01 + -3.6318091e-01 + 2.9741216e-02 + 3.0411079e-01 + -7.0210197e-01 + -9.9578396e-01 + 4.3829626e-02 + 1.6304099e-01 + 3.4175267e-02 + -6.1575165e-01 + -1.6599884e+00 + -1.7172393e-01 + 8.6575178e-01 + 1.8107388e+00 + 5.1669677e-01 + 3.3607327e-01 + 4.6281198e-01 + 1.0802987e-01 + -8.1246867e-01 + -6.0956129e-01 + -1.1478631e+00 + -1.4572797e-01 + 1.8402385e-01 + 8.4055286e-01 + -4.0860877e-01 + -9.5863835e-01 + 3.2681575e-01 + -1.4363744e+00 + -1.0429713e+00 + -1.6052430e+00 + 5.9029210e-02 + 3.2708950e-01 + -1.0086085e+00 + -2.3358497e-01 + 6.4791408e-01 + 2.3266264e-01 + -2.7809723e-01 + 6.3167423e-02 + -1.7059653e-01 + -1.2828129e+00 + 5.0689767e-01 + 7.7600246e-01 + 2.5301966e-01 + 3.5147873e-01 + 3.9519653e-01 + 3.4241646e-01 + -4.5448988e-01 + 4.0039605e-01 + 4.9526589e-01 + 1.3768858e+00 + -1.6907557e+00 + -1.5319171e+00 + 6.5561022e-01 + 1.1328016e+00 + 3.1619374e-01 + -1.1974688e+00 + -5.7233863e-01 + 1.0136870e+00 + 1.2322172e+00 + 7.0770364e-01 + -1.4719784e+00 + 4.5258043e-01 + -1.9431388e+00 + 2.2620354e-01 + -1.2025145e-01 + 7.5855895e-01 + -1.2787692e-01 + -1.0357779e+00 + -3.0073161e-01 + -1.2264550e-01 + -1.4968213e+00 + 3.0789829e-01 + -8.8212471e-01 + 1.1146227e+00 + 4.8630456e-01 + -4.9951822e-01 + -1.1148426e+00 + -1.6820794e+00 + 8.9436573e-01 + 1.3168689e+00 + 2.6676597e-01 + -5.8989630e-01 + 4.7629131e-01 + 5.3787167e-02 + 2.7337173e-01 + 1.7258183e+00 + -2.0315030e-01 + 1.1730719e-01 + -1.1744938e+00 + -7.2216932e-01 + 1.0277115e+00 + -5.4945568e-01 + -1.8451282e+00 + 5.6267504e-01 + 5.7640622e-01 + 5.1815661e-01 + 8.2727539e-01 + -6.6860514e-01 + 3.5785514e-01 + -2.5254687e-01 + 4.3781898e-01 + -8.7546880e-01 + 2.6690045e-01 + -2.0715384e-01 + 1.9421029e+00 + -1.1788107e-01 + 4.2122434e-01 + 4.5984199e-01 + -5.0174495e-01 + 1.1841121e+00 + 4.0778624e-01 + 1.0279580e+00 + -6.7743925e-01 + -8.0885726e-01 + 5.4248772e-01 + 6.8482075e-01 + 6.1665844e-01 + 9.8104886e-01 + 7.2865115e-02 + -1.0830964e-01 + -1.0485597e+00 + 9.2418845e-02 + 5.6468090e-01 + 1.2539461e+00 + -7.2767563e-01 + 4.8212900e-01 + 7.4339715e-01 + 1.0969152e+00 + -1.3243268e-01 + -1.0807954e+00 + -4.1856341e-01 + -7.9079087e-01 + -1.7594251e-02 + -1.6406631e+00 + -6.5961641e-01 + -5.9120125e-01 + 7.6876200e-01 + 9.7914778e-01 + 5.2412698e-01 + -6.5734345e-01 + -5.8248748e-01 + -1.7132466e+00 + 1.3234224e+00 + -1.8442746e+00 + 8.2928411e-01 + -1.1435650e+00 + 5.2984478e-02 + -2.3154079e-01 + 7.8759349e-01 + 1.3981704e+00 + -2.5522466e-01 + 1.3298566e+00 + -1.4307163e+00 + -1.3470363e+00 + 6.5038948e-01 + 5.4451871e-01 + 1.5199368e-01 + -1.6447022e+00 + 7.7295003e-01 + 1.2208917e+00 + 1.5273115e-01 + -1.7079831e-01 + -1.0413514e+00 + -2.1254927e-01 + 1.0365272e+00 + 8.7245622e-02 + -1.0484794e-02 + 5.6410447e-01 + -7.6674960e-01 + -3.8907318e-01 + -1.2455784e+00 + -1.5903724e+00 + -3.5582575e-01 + 8.7512183e-01 + -4.1565966e-01 + 8.8992940e-01 + -8.4075212e-01 + -1.0808629e-01 + -7.4194554e-01 + 4.5204851e-01 + 5.6817238e-01 + -5.4178737e-01 + -8.5705925e-01 + -2.8912471e+00 + -1.4754087e+00 + 8.6678293e-01 + 2.0146279e+00 + 4.1106005e-01 + 3.7729404e-02 + 5.3518186e-01 + -1.6581814e+00 + 1.0569922e+00 + 1.8294578e-01 + -8.3960051e-01 + 3.9004478e-03 + 6.4865016e-02 + 1.0128258e-01 + 9.5439277e-01 + 1.2464847e-01 + 1.1813492e-01 + 1.4460495e+00 + -2.2707463e+00 + 3.9396120e-01 + -1.4354696e+00 + 2.2495335e-01 + 1.5637836e+00 + -1.6974176e+00 + 1.1098401e-01 + -7.7345614e-01 + 8.3202125e-01 + 3.1614630e-01 + -1.2051650e+00 + 6.1226135e-01 + 8.0024556e-01 + -9.4978293e-01 + -5.8660377e-01 + 1.4001760e+00 + -3.4989700e-01 + 8.9321036e-01 + 1.4971043e+00 + 9.3737214e-01 + 1.4040391e+00 + -4.4856698e-01 + 8.9225419e-01 + 1.5198065e+00 + 1.1592176e+00 + 1.8144996e+00 + -1.7014030e+00 + 8.0170457e-01 + 1.8867159e-01 + 2.3995531e-01 + 1.1636506e+00 + 1.1309012e-02 + 6.2326186e-01 + -8.8146253e-01 + 1.7829848e-01 + 5.7349734e-01 + 4.1044716e-02 + -4.5080828e-01 + 9.9492592e-01 + 1.5839719e+00 + 4.6677347e-01 + -1.1854789e+00 + 2.6880486e-02 + -1.0065933e-01 + -2.5342843e+00 + -2.8607298e-01 + 6.3179535e-01 + 7.0631409e-01 + -2.0188961e+00 + -2.7268394e-01 + 8.1929232e-01 + -6.3303586e-01 + 6.8422103e-01 + -1.0361394e+00 + 9.4844000e-01 + 1.4091284e+00 + 8.1366998e-01 + -1.7820107e-01 + -4.5220572e-02 + -6.3958589e-01 + -4.3830409e-01 + 6.2310047e-01 + 8.2260398e-02 + 1.5066088e-01 + 8.6616094e-01 + 5.8198116e-01 + 2.2972657e-01 + 9.8624365e-01 + 6.5999621e-02 + -1.2892109e+00 + -9.1640347e-02 + 1.8748994e+00 + -2.2932762e-01 + -1.1766798e+00 + 1.9286430e-01 + -4.4640947e-01 + 8.4360920e-01 + 1.2027638e+00 + -8.7965275e-02 + 9.8940756e-01 + -3.3708830e-01 + -5.0592986e-01 + -1.4467890e+00 + -4.5500456e-01 + 1.4136497e+00 + 2.8005576e-01 + -6.5277240e-01 + -6.0566753e-01 + -4.7567749e-01 + 8.7145129e-01 + 1.3343616e-02 + 1.8770343e-01 + 1.6560612e-01 + -1.1183994e-01 + -1.6421889e+00 + 1.3647325e+00 + -1.5856650e+00 + -2.6304665e+00 + -4.4754289e-01 + 7.2468963e-01 + -3.1711790e-02 + -2.6331268e-01 + -1.5475282e-01 + 3.8955795e-01 + 3.9704785e-01 + 7.8175456e-01 + -7.5661144e-01 + -9.4681040e-01 + 8.2535198e-01 + -3.1197328e-01 + -7.0125346e-01 + -1.1496709e+00 + -1.0364907e+00 + -3.8003203e-01 + 5.6843066e-01 + -1.0970639e+00 + 1.5248585e+00 + 1.4891711e+00 + 1.2458674e+00 + 1.0454267e-01 + -4.2599002e-01 + 1.0509341e+00 + 2.1975444e-02 + 2.8206191e-01 + 1.0661494e+00 + -1.7762970e+00 + 1.1587227e+00 + -5.1064892e-01 + -1.7206889e+00 + -2.6922869e-01 + -9.2149017e-01 + -8.7501012e-01 + -9.5859477e-01 + 6.1550501e-01 + -7.4508604e-01 + -5.7196434e-01 + 1.4449363e-01 + -1.3715908e+00 + 8.8828195e-01 + -2.6460222e+00 + -3.8861784e-01 + -6.0205611e-01 + 7.1053771e-01 + 4.0686489e-01 + 5.9501881e-01 + -5.0465035e-01 + 1.8554295e+00 + -4.7498791e-01 + 3.4611570e-03 + -6.9495389e-01 + 1.2752005e+00 + -9.5518988e-01 + -1.4309180e+00 + -3.1222158e-01 + 2.0572210e+00 + -2.6703060e-01 + -7.5167375e-01 + 1.0728716e-02 + 2.2556869e-01 + -2.9360571e-01 + 4.8258946e-01 + -1.5415761e+00 + -1.4326800e+00 + -3.5557889e+00 + 8.0790197e-02 + 1.4429386e+00 + 2.3811603e-01 + 1.2272107e-01 + 8.4533345e-01 + -3.4149606e-01 + -6.0762842e-01 + 2.7060076e-01 + 7.2572637e-01 + 1.0601907e+00 + -1.1141214e+00 + -2.3972839e-01 + -1.8818007e+00 + -1.9339379e-01 + -7.6195449e-01 + 4.2729276e-01 + 4.5267476e-01 + 9.7488915e-01 + 1.3369350e+00 + 1.4792377e+00 + -1.9967439e+00 + 3.6253843e-02 + -1.2806688e+00 + 7.3494547e-01 + -6.0683779e-01 + -6.4068253e-01 + -5.7302944e-01 + -9.1549628e-01 + -3.6805385e-01 + 1.0879061e+00 + 7.5929629e-01 + 1.0497543e-01 + -2.5957994e-01 + -3.1113821e+00 + -6.2735536e-01 + 3.5194973e-01 + 4.1168205e-01 + 3.0163214e-01 + -1.0691416e+00 + -9.6047148e-02 + -7.2517210e-01 + 1.2022217e+00 + 1.3927531e+00 + 8.8634140e-01 + -1.3528130e-01 + 6.4054173e-01 + -8.8350902e-01 + 1.4015558e+00 + 7.7263637e-01 + -3.8583698e-01 + 6.3186367e-01 + -7.0975845e-02 + 6.0482616e-01 + -6.9647835e-01 + 2.4497686e-01 + -6.8153889e-01 + -1.3379844e+00 + -6.8595119e-01 + -4.8642417e-01 + 7.5853605e-01 + -1.0710834e+00 + 6.2649900e-01 + -9.1824835e-01 + 1.0564986e+00 + 8.6365517e-02 + -1.4459763e-01 + -1.2030209e+00 + -1.1419309e+00 + -2.2088364e-01 + 1.2708369e+00 + 5.8332394e-02 + -1.0115563e+00 + 8.9082375e-01 + -1.0450404e-01 + 8.6889766e-01 + -5.5525097e-01 + 1.8948276e-01 + -1.4060890e+00 + -8.2712269e-01 + 6.9662379e-01 + 5.3305846e-01 + 1.1975261e+00 + 5.0615401e-01 + 1.7969161e-01 + 7.2958670e-01 + 7.9850398e-01 + 1.1297469e+00 + 1.5823421e+00 + 7.5634719e-01 + -1.5420169e-01 + -1.3274774e+00 + -6.6248839e-01 + -8.2086943e-01 + -5.6330301e-01 + 1.4650626e+00 + -9.1838533e-01 + 6.6853158e-01 + -1.4843262e+00 + -3.0161892e-01 + -8.3296799e-02 + -5.6251841e-01 + 1.0134178e+00 + -3.3298915e-01 + 1.2385745e+00 + -6.6633797e-01 + -1.1875228e+00 + 6.0702553e-01 + 1.8944202e+00 + 1.3383548e+00 + 1.0753391e+00 + 6.4891251e-01 + 1.6838851e+00 + 1.3734457e+00 + -3.1516537e-01 + 1.4350882e-01 + -8.8312345e-01 + -1.5294067e-01 + 7.9241879e-01 + 4.0794279e-01 + -1.0159025e+00 + 1.2524802e+00 + 1.0048408e+00 + 1.1753365e+00 + 3.1657780e-01 + 9.7147829e-01 + 5.1296908e-01 + 5.5086777e-01 + -6.2630370e-02 + -3.6860815e-01 + -1.3654842e+00 + -1.2239407e-01 + -6.4828906e-01 + -7.3024521e-01 + -3.5912151e-01 + 4.1388524e-01 + -1.3703907e+00 + 1.8129030e-01 + -3.2049718e-01 + -1.7305027e+00 + -2.4451942e+00 + 8.9423546e-01 + -4.3905421e-01 + 6.6221070e-01 + 2.7585502e-01 + -5.5137107e-01 + 8.2053763e-01 + 8.1865888e-01 + 1.5978971e-01 + 9.9362458e-01 + 3.8030201e-01 + 7.3987026e-01 + -1.1565714e+00 + 1.0748184e+00 + -1.7422441e+00 + -4.8881776e-01 + 6.1150659e-01 + -4.5994612e-01 + 4.6590402e-01 + 5.6665860e-01 + -6.3349860e-01 + 7.8230795e-01 + 2.6647875e-01 + 4.3244836e-02 + 9.2904456e-01 + -1.8060847e-01 + -1.0147575e+00 + 6.0821165e-01 + 7.3746144e-01 + -7.9095222e-01 + 1.4554401e+00 + -1.1193664e+00 + -8.6273317e-01 + 5.3634782e-01 + -2.1668658e+00 + -1.3281392e+00 + -3.8530050e-01 + 1.1776973e+00 + 1.3876263e+00 + -8.3159653e-01 + -6.7382125e-01 + 3.8005810e-01 + 9.6433417e-01 + 2.5696013e+00 + 3.3719240e-01 + 8.0784677e-01 + -4.2624510e-01 + -9.8877596e-01 + 1.3233659e-01 + 2.6438710e-01 + -8.0473306e-01 + 1.1733493e+00 + 1.4199498e+00 + 4.0278305e-01 + 1.3793755e+00 + -5.3190912e-01 + -1.3430390e+00 + -1.2890921e+00 + 4.0671979e-01 + -3.4595587e-01 + 4.4592318e-01 + 1.0806492e+00 + 5.4122505e-01 + 6.0488517e-01 + -1.6970340e+00 + -5.2518963e-01 + -2.2392087e-01 + 1.5451891e+00 + 1.8886215e-01 + -1.5734609e+00 + 1.6438116e+00 + 4.9526448e-01 + 1.5755920e-02 + -4.8318619e-01 + 1.2108692e+00 + -8.4431341e-01 + 2.1916780e+00 + -1.8183736e-01 + -9.7141771e-01 + -1.3530961e+00 + -3.1300740e-01 + 4.8484027e-02 + -3.8136823e-01 + -7.1194516e-01 + 5.6759130e-01 + -7.7301534e-01 + 2.7626386e-01 + -2.6558490e-01 + 6.3454000e-01 + -1.5588440e+00 + 9.6003594e-01 + -1.0304308e+00 + -8.5119728e-01 + 1.0125694e+00 + 1.7251888e+00 + -4.2107114e-01 + 2.1170236e-01 + -1.1977169e+00 + -1.6104851e+00 + 1.1743512e+00 + 7.4914063e-01 + -3.4580152e-02 + -5.1757738e-01 + -1.2422333e+00 + -5.5706473e-01 + 1.4948945e+00 + -2.3982145e-01 + 5.6957246e-01 + 9.4422403e-02 + -1.3356558e+00 + -1.7112314e+00 + 1.0508186e+00 + 2.2268929e-01 + 2.8472210e+00 + -1.4976307e-01 + 6.5110489e-01 + 1.4691028e-01 + -6.4797455e-01 + -8.1647983e-01 + -1.0060780e+00 + 1.0124593e+00 + -5.5819433e-01 + -9.6915594e-01 + -1.7484110e-01 + -6.7693433e-01 + -1.1347123e-01 + -1.8678598e+00 + -1.1960069e+00 + 6.0869825e-02 + -7.7294836e-01 + -6.4473994e-01 + 1.8484658e+00 + 1.2822464e+00 + -2.2338146e-01 + -1.2040883e+00 + -9.4220731e-01 + 2.2141222e+00 + -1.3089948e-01 + 2.6812897e-01 + 2.9080838e-02 + 1.1303473e+00 + -7.6975063e-01 + -7.3981709e-01 + -1.7883514e+00 + -1.5273983e+00 + 2.6947017e-01 + -8.7771962e-02 + 7.6945828e-01 + -5.1305245e-01 + 4.5651088e-01 + 7.4929476e-01 + 1.9267031e+00 + -8.6362932e-02 + -1.8410589e-01 + 8.8229839e-02 + 7.4206949e-02 + -1.7089676e-01 + 1.8750257e+00 + 1.2386200e+00 + -5.1887312e-01 + 8.2761046e-01 + 1.2439834e+00 + -9.3334363e-01 + -1.0725294e+00 + -3.4541015e-01 + 2.3004726e-01 + 1.1950894e-01 + -1.0373891e-01 + 1.9635736e-01 + -9.5358982e-01 + -8.7926200e-01 + 3.4686941e-01 + -1.9845868e-01 + -4.1570379e-01 + -1.7130132e+00 + 2.0993549e-01 + 3.8041254e-01 + -1.3926891e+00 + -2.0103972e-01 + -2.6028459e-02 + 8.1083959e-01 + -7.4049848e-01 + -6.4052536e-01 + -8.1523270e-01 + -1.7805414e+00 + 6.4596247e-02 + 3.1245523e-01 + -8.0366172e-01 + -9.5425816e-01 + -1.1799251e+00 + -1.9779793e-01 + 1.0656458e+00 + -2.8281276e+00 + -2.2670158e+00 + 1.0387089e+00 + -7.1846459e-01 + -6.4093408e-02 + 1.1782348e+00 + 1.5232771e+00 + 3.0259342e-02 + 6.5743833e-01 + 1.8868258e-01 + 4.7329284e-01 + -3.6968532e-01 + -1.5064976e+00 + 5.6867808e-01 + 6.2545240e-01 + -4.0274772e-01 + -5.6886411e-01 + -1.4542189e+00 + -5.3684409e-01 + -5.9844863e-01 + -3.7695118e-01 + 1.6485260e+00 + 3.5345633e-01 + -4.0300153e-01 + 2.9777011e-01 + 2.9261272e-01 + 1.1639393e+00 + 8.6626864e-01 + 9.9473077e-01 + 1.6386885e-01 + 3.6471899e-01 + 1.0616928e+00 + 8.8825213e-02 + -1.5602559e+00 + 1.7087668e-01 + -9.4165668e-01 + -7.5117358e-02 + -4.8219930e-01 + -6.9185731e-01 + 1.1330263e+00 + -3.8366435e-01 + -2.4153342e-04 + 7.2493139e-02 + -1.4297617e+00 + 1.1679316e+00 + -1.4730375e-01 + 8.0107100e-01 + 2.7147594e-01 + 1.1291275e+00 + -7.4157332e-01 + -1.7189749e+00 + -5.1409961e-01 + -6.3912689e-01 + -1.2145940e+00 + 1.1407582e+00 + 9.3819536e-01 + 8.2366599e-01 + -1.8167609e+00 + -1.7345708e+00 + 1.5575451e+00 + 8.1167591e-02 + 5.2360539e-01 + -3.4281333e-01 + -1.7146757e+00 + -5.5943253e-02 + -2.6592466e-01 + 2.6818212e+00 + -1.1547325e+00 + -3.8335098e-01 + -9.6647734e-01 + 1.9833773e+00 + 7.0682415e-01 + -1.2173614e+00 + 3.2160878e-01 + -1.2887312e+00 + -3.1919455e-01 + 3.0379483e+00 + 3.3820911e-01 + -1.0769470e+00 + 2.3574298e-01 + -6.7303417e-01 + -1.0219672e+00 + -9.2951784e-01 + 1.1633172e-01 + 7.7494420e-01 + -7.2376413e-02 + -1.2930181e+00 + -7.6138132e-01 + 1.7726471e+00 + -6.5593676e-01 + -4.5488369e-01 + 1.2557690e+00 + -1.3283277e+00 + 7.0522828e-01 + -4.3696361e-01 + -7.2463026e-01 + 9.6435255e-01 + 1.4070238e-01 + 3.3014073e-01 + 3.3646231e-01 + 2.1662891e-01 + -8.5523371e-01 + -1.1585450e+00 + 5.2371478e-01 + -5.4372101e-01 + 1.6756511e+00 + -2.9632586e-01 + 3.8095871e-01 + 1.8774854e+00 + -4.6344936e-02 + 3.5645593e-01 + -1.9219010e-01 + 1.5311768e+00 + 2.5570766e-01 + 1.1643939e+00 + -3.5858770e-01 + -1.6126769e+00 + -3.0457238e-02 + 1.2026201e+00 + 7.5524293e-01 + -2.2423890e-01 + -2.9777182e-03 + -9.3137370e-01 + 7.0300180e-01 + -8.1170991e-01 + 3.3219759e-01 + -1.1327094e+00 + 8.8527740e-02 + 1.5797170e+00 + 1.2103919e-01 + 4.0867890e-01 + -2.7189765e-01 + -1.2601012e+00 + 1.2883531e+00 + 1.4912539e+00 + 3.4685796e-01 + 3.8400468e-01 + 3.2635021e-01 + -1.3924401e+00 + 1.3287002e-01 + 7.2772191e-01 + -1.2319928e+00 + 1.0985511e+00 + -8.6984623e-01 + -1.0210482e-01 + -8.6698709e-01 + -3.2813565e-01 + 9.6341841e-01 + -9.0410699e-01 + 4.2706707e-01 + -1.9902758e-01 + 2.1445761e-01 + -4.1900815e-01 + 1.2165423e+00 + 1.5228154e+00 + 6.2211203e-02 + -1.9301613e+00 + 6.2305772e-02 + 1.3750287e+00 + 1.5775011e-01 + -3.6313584e-01 + -1.0111255e-01 + -3.0005734e+00 + -2.2037418e-01 + -4.6462431e-01 + -3.8988473e-01 + -6.3140203e-02 + -1.3855814e+00 + -1.5855227e+00 + 5.9272360e-01 + -6.9387414e-01 + -4.8736188e-01 + 7.0856880e-01 + -3.1884391e-01 + 7.0073802e-01 + 2.3555047e-01 + -3.0672805e-01 + -1.1454153e-01 + -9.8949064e-01 + 6.2025978e-01 + 1.0164381e+00 + 6.9515632e-01 + 3.7381918e-01 + -7.0019850e-01 + -1.6549172e+00 + -5.1262031e-01 + 1.2434616e+00 + 6.1936905e-01 + -4.3287419e-01 + -9.6928447e-01 + -1.0487009e+00 + -9.0437213e-01 + -2.5415641e-01 + -3.9015989e-01 + -8.1083438e-01 + -1.1045725e+00 + -6.9444450e-02 + 2.1196236e-01 + -1.7908484e-01 + -1.8441057e+00 + -1.6470432e+00 + 4.1213931e-01 + -3.6567845e-01 + -1.1208004e+00 + 2.3982903e+00 + 1.0976013e+00 + 6.2791930e-01 + -1.6690154e-02 + -1.4241685e-01 + 2.0988228e+00 + -9.2849932e-01 + 8.3305345e-01 + 5.2447249e-01 + 6.0884248e-01 + -8.6829511e-02 + 1.8033795e+00 + 1.0929377e+00 + -1.5260860e+00 + 3.1661708e-01 + 5.8070573e-01 + -1.7389370e-01 + 1.8872170e-01 + 1.3042173e+00 + 2.2421373e-01 + 1.7001948e+00 + -9.0482551e-01 + -4.6082487e-01 + -2.6365403e-01 + 4.7292176e-01 + 4.1291720e-01 + 9.3869070e-01 + 6.0346384e-01 + 3.2322895e-01 + 6.9979377e-01 + 1.3404778e+00 + 8.1260591e-01 + -1.6328561e+00 + -8.7672003e-01 + -1.9275592e+00 + 1.8855027e+00 + -3.3660132e-01 + -8.3635572e-02 + -1.7755256e+00 + -7.7332266e-01 + 9.4729705e-01 + -1.0769035e+00 + 1.7488224e+00 + -1.4861597e+00 + -1.2404675e+00 + 4.2993501e-01 + -1.5216025e+00 + -2.4718944e+00 + 4.9963177e-01 + -1.1992082e+00 + -5.0423947e-01 + -4.8553531e-01 + 1.2388922e+00 + 1.5304163e-01 + 5.6579854e-02 + 1.8297337e-01 + -2.0530325e+00 + -6.1279161e-01 + 6.4905247e-02 + -3.7826622e-01 + -7.0221153e-01 + 1.1469332e-01 + -2.5256294e+00 + -2.0978383e+00 + -2.3303790e-01 + -1.7769720e+00 + -6.1619727e-01 + -5.0082599e-01 + -3.4388210e-01 + 2.8010060e-01 + 7.0789224e-02 + 8.0285301e-01 + -1.6090164e-01 + 1.0865721e+00 + 8.1798113e-01 + 2.1641969e-01 + 1.9377398e+00 + -9.8794738e-02 + 4.9405655e-01 + 1.1547898e-01 + 1.3181348e+00 + -1.2981214e+00 + -8.9931393e-01 + -3.1246738e-01 + -1.3241896e-01 + -1.8628818e-01 + -4.9272287e-01 + -8.5362121e-01 + -1.5273849e+00 + -1.6221402e+00 + 7.8021450e-01 + -2.0929894e+00 + 3.0699345e-01 + 6.8069469e-02 + 4.6237190e-01 + -1.0728868e+00 + 2.4006465e-01 + 7.2115680e-03 + 8.2332927e-01 + -6.0492698e-01 + 1.8606442e+00 + 1.0702114e+00 + 1.8689494e-01 + 2.8362783e-02 + -9.4667424e-01 + 6.0799243e-01 + 5.4580857e-01 + 8.5181523e-01 + -1.7913733e-02 + 9.0761025e-01 + -6.0830622e-01 + -1.5619805e+00 + -1.0190169e+00 + 1.4791723e+00 + 6.4601416e-01 + -1.2484643e+00 + -2.4666853e-01 + 3.3781613e-01 + -2.6844697e-01 + 1.5739720e+00 + -4.9934544e-02 + -3.1902485e-01 + -5.5856236e-01 + -4.3911936e-01 + -1.1553084e-01 + -2.0438550e+00 + 8.6554673e-01 + -1.6749810e-01 + 1.6443519e+00 + 1.1334502e+00 + -1.1633947e+00 + 5.6195571e-01 + -1.0713314e+00 + -1.0382431e+00 + -3.5997110e-01 + -1.4658957e+00 + -1.1404976e+00 + 1.4846351e-01 + -1.2967265e+00 + -1.5870073e+00 + 1.4176433e+00 + 1.0392455e+00 + 1.1342050e+00 + 5.2777097e-01 + -7.0741375e-02 + 1.3204856e+00 + 1.6701900e+00 + -5.1711322e-01 + 2.0304408e+00 + -1.6658061e+00 + -1.5947434e+00 + -5.8484153e-01 + -5.2223437e-01 + 5.1035536e-01 + 7.1611429e-01 + -7.1018342e-01 + 9.5112051e-01 + 6.9797651e-01 + -1.4538099e+00 + 5.8549588e-01 + 1.0772378e+00 + -1.0182615e+00 + -5.5332727e-01 + 9.9870995e-01 + 2.1957958e+00 + -3.4696651e-01 + -3.2420346e-01 + 5.2937617e-01 + -2.5750600e-01 + -8.6034626e-01 + -1.2489737e+00 + -1.6591715e+00 + 1.8749013e+00 + 4.1247902e-01 + 3.1507633e-01 + 3.3741260e-01 + -7.9565778e-01 + 5.3461118e-01 + 1.1919352e+00 + -1.6283414e+00 + 3.6270824e-01 + 1.6535835e-01 + 3.0117881e-01 + -1.0721780e-02 + 3.9647106e-01 + -1.1046630e+00 + 4.9946524e-01 + 1.9451701e-01 + -3.5688008e-01 + 4.8854721e-01 + -5.3093068e-01 + -4.7392550e-01 + 4.5326675e-01 + -4.3476474e-01 + -1.5503932e+00 + -1.6039028e+00 + -7.8682415e-01 + 1.8678759e+00 + 2.2972230e+00 + -6.6852666e-02 + -1.5552173e+00 + 5.0222735e-03 + 6.8997052e-01 + 2.5733311e+00 + 1.7257476e+00 + -4.0078384e-01 + -1.1978630e+00 + -4.9311680e-01 + -1.1325528e+00 + 1.3293019e+00 + -4.2361305e-01 + -1.7841487e-01 + -8.7468243e-01 + 6.5960619e-01 + -9.2296265e-01 + 7.2630985e-01 + -9.9763016e-01 + 2.7866176e-01 + -4.8408841e-01 + 7.3902218e-01 + -7.3003391e-01 + -7.2327557e-01 + -1.0032712e+00 + -1.2930905e-01 + -4.9923888e-01 + -5.5463299e-01 + 9.3351425e-01 + 1.2934197e+00 + -3.5110944e-01 + 1.9127470e+00 + 8.4753981e-01 + 1.7299247e+00 + -1.0066951e+00 + -5.0428618e-01 + 9.3605337e-01 + 6.6776122e-01 + 1.3481068e+00 + 3.4145553e-01 + 3.6326618e-01 + -3.1921046e-01 + -5.4882741e-01 + 6.4483728e-01 + 1.8730472e-01 + -3.6205640e-02 + 5.0141550e-01 + -7.5200897e-01 + -1.0075157e+00 + 6.6168638e-01 + 2.8497901e-01 + -1.7587725e+00 + -7.4564701e-01 + -2.0010785e+00 + 6.8480569e-01 + 4.6650232e-01 + 1.5296996e-01 + 4.8447406e-01 + -6.6746961e-01 + -4.7535172e-01 + 4.9225496e-02 + 1.0712371e+00 + 5.4918460e-01 + -5.4761864e-02 + 1.1217776e+00 + -4.6277979e-02 + -5.9219615e-01 + 9.0743995e-01 + 3.1523689e-01 + -1.0996958e+00 + -1.0930023e+00 + -7.3166759e-01 + 9.0394121e-01 + 6.0230788e-01 + 5.5551946e-02 + -1.7874717e-01 + 1.9281795e-01 + 1.3504385e+00 + 7.5306979e-01 + -5.3640679e-01 + -1.8412508e-01 + 5.3509185e-01 + -3.7849158e-01 + 1.1253087e+00 + 3.5172875e-01 + 1.4346317e+00 + -2.3864239e-01 + -4.0352663e-01 + 1.9988571e+00 + -1.5749092e+00 + -7.5031035e-01 + 8.3566442e-01 + 1.2987574e+00 + -1.1719748e+00 + 8.1747621e-01 + 8.0490877e-01 + 1.3297684e+00 + 7.7288485e-01 + 3.5715993e-01 + -8.0754143e-01 + 1.3036191e+00 + 7.3858083e-01 + -9.2659029e-01 + 6.4375050e-01 + -7.3905535e-01 + -1.3232330e+00 + -4.3659248e-01 + 5.0237570e-02 + 1.1833663e+00 + -2.2021842e-01 + 1.2205267e-01 + 3.4874075e-01 + -1.1680523e+00 + -2.9535321e-01 + -3.3277679e-01 + -7.2197218e-01 + -1.1930074e+00 + -1.1071688e+00 + -3.3776112e-01 + -6.5148968e-01 + 1.4599507e+00 + -7.1562007e-01 + 2.6081955e-02 + -3.7348650e-01 + 1.5871681e+00 + 1.4439181e+00 + -5.6060475e-01 + 7.2117669e-01 + -6.4449350e-01 + 9.1646181e-01 + 2.1633414e+00 + -3.5328006e-01 + -7.8207349e-01 + -1.2081097e+00 + 1.1413465e+00 + 5.6967409e-01 + 8.4362989e-01 + -2.3323358e-01 + -9.0200074e-01 + -5.8886665e-01 + -6.1893282e-01 + -8.8568573e-01 + 1.3395541e-02 + -2.8253142e-01 + 1.1015644e+00 + -4.9396900e-01 + 8.0249521e-01 + -1.0079662e+00 + 1.9220602e+00 + 1.6812884e-01 + -2.6185677e-02 + -4.0465548e-01 + -5.3684970e-01 + -4.8573468e-01 + -3.5357268e-01 + 1.2911640e+00 + 5.3526762e-01 + 8.2746839e-03 + -1.0066964e+00 + -1.6972581e+00 + 1.8162178e+00 + -1.4523769e-01 + -1.3962768e-01 + -1.1318527e+00 + 6.1262085e-01 + -9.0613694e-01 + 8.8443597e-01 + -2.3600850e+00 + 4.2088890e-01 + 1.8345483e-01 + 5.0080816e-01 + -3.3018587e-01 + -2.4135556e+00 + -9.6284192e-01 + 2.7150485e+00 + 9.7847822e-01 + -7.9943446e-01 + 4.8398761e-01 + 4.6523784e-01 + -2.4673219e+00 + -3.1955502e-01 + -2.0291487e+00 + 1.1620256e+00 + 9.4911960e-01 + 1.4856515e+00 + 2.0440262e+00 + 8.0026723e-02 + -5.2773468e-01 + 2.9604982e-01 + 2.1998456e-01 + -1.6644027e-01 + -1.8087717e-01 + -1.0206403e+00 + 4.5718420e-02 + -1.3502515e+00 + 2.6408864e-01 + 6.1873499e-01 + 6.7018024e-01 + 8.9923037e-01 + 5.2905202e-01 + 8.8045166e-01 + -1.2942665e-02 + -3.8326424e-01 + 1.3958087e+00 + -1.8446802e+00 + -1.1089240e+00 + -7.9673008e-01 + 5.8666549e-01 + -1.3698054e+00 + -4.4202036e-02 + 5.0177947e-01 + -3.3445245e-01 + 6.7565975e-01 + 6.3661890e-01 + 2.3866861e+00 + -1.4091610e+00 + -5.3558822e-01 + 9.7962340e-01 + -1.5059050e-01 + -2.5551574e-01 + -7.0586158e-01 + 1.1672165e+00 + 7.7248742e-01 + 8.7356280e-01 + 1.9963948e-01 + -1.7885266e+00 + 2.1275536e+00 + -7.9824151e-01 + 5.5876494e-01 + 1.5933973e+00 + 1.5001298e-01 + -1.1524532e-01 + 7.1353652e-01 + -3.4268760e-01 + -7.2238913e-01 + -2.2238907e+00 + -2.0893120e-01 + 1.5294689e-01 + 1.5124007e+00 + 6.9418506e-01 + 1.0408120e+00 + -2.1534405e-01 + 1.3935350e+00 + 9.2368653e-01 + -3.4667223e-01 + 9.4793144e-02 + -1.4546456e+00 + -8.6343434e-01 + 3.5780797e-01 + -8.1169160e-01 + -2.0285255e-01 + 1.2303591e+00 + -6.9525235e-01 + -1.1332550e-01 + -1.0762198e+00 + 7.3453106e-01 + 5.5463931e-01 + -1.5022403e+00 + -8.6219579e-01 + -5.5489713e-01 + -2.6481305e+00 + -1.2682327e+00 + -7.8726736e-01 + 5.5100488e-01 + -2.2846527e-01 + -1.1368479e+00 + -2.5988354e-01 + 7.4312088e-01 + -1.3166575e-01 + -1.3186536e+00 + 3.0071277e+00 + 2.4675743e-01 + 1.5170185e+00 + 2.6926577e+00 + 1.2445192e+00 + -1.1291519e-01 + -2.0495455e+00 + -1.5354230e+00 + -4.6779469e-01 + 1.4910878e-01 + 1.8213609e+00 + 2.3982027e+00 + 8.5791342e-01 + -1.2531153e+00 + -1.9644556e-01 + 2.2339222e+00 + 2.2944501e-02 + -6.4150542e-02 + -9.8527972e-01 + 3.4239489e-01 + -5.4365298e-01 + 4.3519621e-01 + 1.1367490e+00 + 1.7657257e+00 + -1.6748615e-02 + 2.4608703e+00 + 1.8079725e+00 + -8.4641888e-01 + 1.6672207e+00 + 4.8733123e-01 + -9.1846530e-01 + 1.2705401e+00 + 9.4920410e-01 + 5.9084601e-01 + 1.0547963e-01 + -1.0748194e+00 + 2.4078590e+00 + 1.2941860e+00 + 1.7014524e+00 + 4.9085714e-01 + -4.0774219e-01 + 1.1909916e+00 + -1.3801225e+00 + 4.5844407e-01 + -7.2270989e-01 + 3.0503790e-02 + 6.6631551e-01 + 9.3272890e-01 + -3.5188543e-01 + -2.9670011e-01 + -2.5151477e+00 + -1.4740716e+00 + 2.0699174e+00 + 3.5638414e-01 + 5.5536770e-01 + -1.2695886e+00 + -4.0672260e-01 + -2.0204179e+00 + -1.6021090e+00 + -1.5399960e+00 + -1.9104904e+00 + -1.3973177e+00 + -1.2509676e+00 + -7.9457666e-01 + 1.2260360e+00 + 1.9994138e+00 + -7.9197382e-01 + 2.9256117e-01 + -1.6533786e-01 + -1.1797356e+00 + -1.0258157e+00 + -1.8825834e+00 + 8.7634851e-01 + -3.0989962e-02 + 1.0754817e+00 + -7.5025723e-01 + -4.0780964e-01 + 5.3203994e-01 + -1.9126230e-02 + 1.4391408e+00 + -8.7015218e-01 + 1.4877474e+00 + -3.3286491e-01 + -1.4534087e-01 + -4.5134941e-01 + -5.4074676e-01 + 1.6821651e+00 + -8.0177950e-01 + 1.2839513e+00 + -1.4037974e-01 + -6.8733430e-02 + 1.4710030e-01 + -7.3850891e-02 + -1.3276376e+00 + -9.9916773e-01 + 4.3502499e-01 + -2.8060221e-01 + 1.8367699e-01 + 6.7599173e-01 + 1.4832156e-01 + -4.3473268e-01 + -8.3362376e-02 + 1.3618028e+00 + 6.7448146e-01 + 8.0319162e-01 + 9.0500045e-01 + 9.5601384e-01 + -7.6870593e-01 + 2.4913242e+00 + -1.5386936e-01 + 4.1459462e-02 + -1.5048899e+00 + 1.0850124e+00 + 5.7204918e-01 + 1.9192942e-01 + 6.1832651e-01 + 8.6576640e-01 + 3.5852364e-01 + -2.5292043e+00 + -1.0762737e-01 + -1.6597450e-01 + 4.3537085e-01 + -3.0074284e-01 + 1.4459471e-01 + 9.6596677e-02 + -1.7469987e-01 + 6.7510373e-01 + 8.4941118e-02 + 8.7750503e-01 + -5.9469082e-01 + 1.5896471e+00 + -8.5259748e-01 + -2.8857658e-01 + -1.4839392e+00 + -6.4682438e-01 + 1.2651552e+00 + 4.7322598e-01 + -9.5585595e-01 + 5.0604356e-01 + -7.2019438e-01 + -2.1102951e+00 + -5.4138802e-01 + 1.9891918e+00 + 2.1541256e-01 + -1.9819061e+00 + 7.1173398e-01 + 1.9608741e+00 + -4.1661656e-02 + -1.5007239e-01 + 6.0624491e-01 + -8.3195901e-01 + 3.0950824e-01 + 2.5553044e+00 + -8.7965808e-01 + 7.4854464e-02 + 4.1819442e-01 + 4.4742865e-01 + 8.7793687e-01 + -2.0782911e-01 + -7.4789440e-01 + -6.3207439e-02 + -1.9370325e+00 + -2.1898802e-01 + 2.2318618e+00 + -5.6434247e-01 + 3.7089110e-01 + 5.1764755e-01 + 4.0798842e-01 + 7.8779190e-02 + -6.4814296e-01 + 3.6616463e-01 + 2.5522091e-01 + 1.7487267e-01 + 6.2325524e-01 + -1.7013550e-01 + -1.1924502e+00 + -7.7028586e-01 + 7.1317015e-01 + 1.0504404e+00 + -6.3568523e-01 + -1.3500596e+00 + -1.0330074e+00 + 1.0312234e+00 + 9.3709474e-01 + 8.0312712e-01 + 9.9304344e-01 + -2.9102506e-02 + 1.6131075e-01 + 7.3409326e-01 + 9.4167540e-01 + 2.6037131e+00 + -9.8319581e-01 + 1.1470338e-01 + 4.4900541e-01 + -1.1811384e+00 + -1.5147128e+00 + 1.6636561e-01 + -7.2021238e-01 + -7.6074353e-05 + -9.7390243e-01 + -9.9567897e-02 + 1.0344031e-01 + -2.2655498e+00 + 7.7475544e-01 + -2.0586867e+00 + 2.6078839e-01 + 2.2192226e-02 + 2.3679869e-01 + 1.5572384e+00 + -1.5741818e+00 + -7.0216493e-01 + -7.7898991e-01 + 1.5847471e+00 + 1.3448152e+00 + 7.2315002e-01 + -1.5913109e+00 + -4.7057458e-01 + 5.3713263e-01 + 3.6041700e-01 + -6.6369173e-01 + 1.5413658e+00 + -5.8962151e-01 + 3.9595058e-01 + 2.0445007e+00 + 1.7727362e+00 + -2.0051023e-01 + 7.7232370e-01 + 1.7200044e+00 + -9.7210663e-01 + 9.8559757e-01 + 1.9088541e+00 + 1.0316617e+00 + 1.2658263e+00 + 1.4644653e-03 + -1.3133840e+00 + -7.4258581e-01 + 1.5845620e+00 + 7.3718533e-02 + 8.4647119e-01 + -1.0378446e+00 + -1.8147525e+00 + -2.0970814e+00 + 2.8551868e-01 + -2.1790063e+00 + 1.4552318e+00 + 1.1656071e+00 + 3.0795128e-01 + 1.0470861e+00 + -1.0690758e-01 + -1.8357208e+00 + -1.2612905e-01 + -6.7804907e-01 + 1.2650400e+00 + 3.4814314e-01 + 4.1348965e-01 + -3.7451435e-01 + -8.9425241e-01 + 2.8035344e-01 + -4.3825559e-01 + 1.3925479e+00 + -3.6737749e-01 + -7.9542689e-01 + -2.1839812e-01 + 1.0819980e+00 + -5.6699827e-01 + -9.5499384e-02 + -1.4779762e+00 + 1.2210693e-01 + -3.8311619e-01 + -4.4894979e-01 + 1.4455328e-01 + 2.7061289e-02 + -2.5350454e-03 + 3.0073496e+00 + 1.0467306e+00 + 1.6897330e+00 + 1.6665272e+00 + -2.8750152e-01 + -4.8700548e-01 + -1.6691816e+00 + -9.7526499e-01 + -2.8579688e-01 + -9.2190933e-02 + 3.2527773e-01 + 1.5378654e-01 + -1.1933850e+00 + -3.3034398e-01 + 1.7382949e+00 + -3.0276427e-01 + -9.2345488e-01 + -2.5556650e-01 + 3.3679309e-01 + -3.8916627e-01 + -4.2914582e-01 + -3.4537395e-01 + 1.1947576e+00 + 8.4475834e-01 + -7.5475139e-01 + -7.5055111e-01 + -1.7510883e+00 + 1.1342118e+00 + -1.0816355e-01 + -2.4368059e-01 + 1.8020780e-01 + -1.3082789e+00 + -9.2730829e-01 + 1.8473956e-01 + -3.2342472e-01 + -2.0696442e+00 + -7.7690905e-01 + 2.6626814e-01 + 1.0776113e+00 + 8.9024401e-02 + 1.4597825e-01 + -4.8314024e-01 + 2.1125482e-01 + 5.4570460e-01 + -9.0864932e-01 + 1.0596933e+00 + -1.6723669e+00 + -4.6121573e-02 + -2.3286496e-01 + 1.6579591e+00 + -3.1510459e-01 + 3.2528110e+00 + -2.7518483e-01 + -7.2157315e-01 + 2.3459280e+00 + -1.8623369e-02 + -2.5805187e-01 + 1.4674075e-01 + -1.0093652e+00 + -1.4705670e+00 + -6.4920410e-01 + 7.0548383e-02 + 1.1510160e+00 + 1.2214678e+00 + 4.8586655e-01 + 1.2084332e+00 + 2.6448846e+00 + 6.5719393e-01 + 9.7213558e-01 + -3.0338902e-01 + 1.2094771e+00 + -1.1364200e+00 + -3.3345452e-01 + -8.6597480e-01 + -5.6315330e-01 + 2.0094235e+00 + -2.0641398e-01 + -4.2974197e-01 + 1.0437269e+00 + -3.1805853e-01 + 3.2403306e-01 + 5.5794050e-01 + -8.7460480e-01 + -3.5746386e-01 + 1.9401291e+00 + 1.3858893e-01 + 9.1665081e-01 + 1.2889938e+00 + 5.8316954e-01 + 1.2698503e-01 + 1.2959541e+00 + -1.2724136e+00 + 1.2208358e+00 + -2.1281422e+00 + -1.2775109e+00 + -4.3234311e-01 + -8.6368621e-02 + -1.6486842e+00 + 7.8520802e-01 + -7.7123324e-02 + -1.1083778e+00 + -1.2046293e+00 + -9.7160832e-01 + -8.4566051e-01 + -1.2796718e-01 + -5.4686402e-02 + -5.9253053e-01 + -8.5598613e-02 + -6.5492597e-01 + 1.7864230e-01 + 1.5656637e+00 + 8.7058960e-01 + -4.1370797e-01 + 1.4709963e-01 + -1.6142856e-01 + -4.3190911e-01 + -3.1704384e-01 + 1.1236781e+00 + -5.5164351e-01 + 1.9238343e-01 + 6.2290129e-01 + -1.0444332e+00 + -1.5227712e+00 + 7.7850057e-01 + 3.9001283e-01 + -5.3959474e-01 + 1.1422192e+00 + 3.2017224e-01 + -4.1172890e-01 + -4.4576022e-01 + -5.0716259e-01 + -1.1053460e+00 + 2.7596315e+00 + -2.2959759e+00 + 2.7600191e-01 + 5.7124080e-03 + -1.2946679e+00 + -1.4722341e-01 + 3.9396135e-01 + 1.0369279e+00 + 1.1394090e-01 + 5.8737697e-01 + 1.7693424e+00 + -1.0996868e-01 + -5.7859900e-01 + -1.4431946e+00 + 8.5760947e-01 + -5.1407083e-01 + 1.4365343e+00 + 7.2891030e-02 + -1.3576969e-01 + -5.6864135e-01 + -5.2024917e-01 + -1.2739092e+00 + 6.0534007e-01 + -4.2380667e-01 + 6.4517359e-01 + -1.7055419e+00 + 3.4755996e-01 + -9.2228333e-01 + -1.5780662e+00 + -2.3706099e-01 + 6.2106144e-01 + 1.0408284e+00 + 1.2435989e+00 + -3.8164099e-01 + -9.6743939e-01 + 3.0586915e+00 + -5.5410290e-01 + -7.1040670e-01 + 4.7848695e-01 + -1.0827396e+00 + -6.7180285e-01 + -1.5380202e+00 + -2.0103921e-01 + -1.1337184e+00 + 3.9148713e-01 + 1.8984596e-01 + -7.2371652e-01 + -3.8629198e-01 + -5.7492396e-01 + 1.6987328e-01 + -6.5960249e-01 + 2.7293694e-01 + -8.5354785e-01 + 5.9022606e-01 + -1.6627522e-01 + -2.0600353e+00 + 1.9193220e-01 + 9.5064059e-01 + 1.2716353e+00 + 2.3057478e-01 + 1.4866915e+00 + 6.9537307e-01 + 2.1164141e+00 + 2.6720926e-01 + 4.8200225e-01 + 4.3809625e-01 + 5.6034199e-01 + 8.3567289e-01 + 1.0707195e+00 + -9.9021735e-01 + -1.2996562e+00 + 1.3419407e+00 + 9.7079069e-01 + -8.4979523e-01 + -4.9387922e-02 + 1.8572482e+00 + -1.1609076e+00 + 3.3049663e-01 + -1.3903523e+00 + 1.7398324e-01 + 3.0908139e-01 + -1.8284385e-01 + 9.4688208e-01 + -1.3672638e-01 + 1.1922425e+00 + 1.1014286e+00 + -2.7674550e-01 + 2.6170047e-01 + 2.1152209e-01 + 9.7143830e-01 + 1.2501602e+00 + 7.9766188e-01 + 2.7899755e-02 + -8.9040584e-01 + -1.2894539e+00 + 1.1050777e+00 + 2.0056996e+00 + 2.7237922e-01 + -6.8548344e-02 + 9.4055839e-01 + -1.6864145e+00 + -2.6015488e-01 + -2.0053683e+00 + 4.2975712e-01 + 2.9374624e-02 + 3.3015136e-01 + -4.2923103e-01 + -1.8710105e+00 + 9.9816837e-01 + -6.5605915e-01 + 1.8046059e-01 + 9.5503147e-01 + 5.7545540e-01 + -8.2948015e-01 + -2.6046473e-01 + -2.1653662e-01 + 9.9529663e-01 + 1.2916626e+00 + -1.0654210e+00 + -1.0194381e+00 + 1.3138487e-01 + -1.2038000e-03 + 2.0219423e-01 + -1.0525190e+00 + -1.3452304e+00 + -7.9278989e-02 + 1.2416265e+00 + 6.3567115e-01 + -1.1878394e-01 + -3.8456210e-01 + -1.1263222e+00 + 9.0383371e-01 + 8.5881799e-01 + -1.6623214e-01 + 3.8942096e-01 + 2.7396943e-01 + 9.3150310e-01 + 1.6483895e+00 + -1.7665450e+00 + -3.0843480e-01 + -8.0881759e-02 + -1.2815926e+00 + -2.9144528e-01 + 8.1624868e-01 + -7.6055019e-01 + -2.1092229e+00 + -1.0233038e+00 + 2.8861036e-01 + -7.6500362e-01 + 9.5127646e-01 + -5.5997452e-01 + 2.3227359e-01 + -5.9858673e-01 + 6.3413170e-01 + -1.6455747e+00 + 1.6476934e+00 + -2.1946822e-01 + -1.3843862e-01 + -1.4308814e+00 + -1.6345002e-03 + -7.0544055e-02 + -1.2097457e+00 + 5.9862123e-01 + 2.0194693e+00 + 1.1948856e+00 + -6.3161812e-02 + 5.5974371e-01 + 2.1500148e-01 + 4.2203862e-01 + -2.0716303e+00 + -9.0964451e-01 + -2.8527502e-01 + 6.3634874e-01 + 3.6623325e-01 + -1.0243679e-01 + -2.1672384e+00 + -1.4302718e+00 + 1.3435930e+00 + 1.3804724e-01 + 1.7499128e-02 + -3.3849541e-01 + 2.9153450e+00 + -6.8693469e-01 + -1.4236379e-01 + 5.3876181e-01 + 1.3282234e+00 + -1.3104018e-01 + 9.7013225e-01 + 9.9857124e-01 + 2.6285052e-01 + -1.3183349e+00 + 8.0647026e-01 + 1.0434415e-01 + 1.5567019e+00 + -8.4178586e-01 + -3.4837322e-03 + -5.0506339e-01 + -1.8451229e+00 + -1.0525271e+00 + -1.9628364e+00 + 1.6968672e+00 + 2.4264373e-01 + 6.0269731e-01 + 2.0677181e-01 + 1.1232577e+00 + 1.5197555e+00 + -4.0614530e-01 + -9.6616622e-01 + 1.1088181e+00 + 2.2532815e+00 + -2.1988394e-01 + -7.6108310e-01 + 3.3448177e-01 + -9.4411190e-01 + -7.7986630e-01 + 6.7844785e-01 + -2.1996474e-01 + 5.2864800e-01 + -5.0380723e-01 + 5.8741882e-01 + 3.4405039e-01 + 5.1955364e-01 + 1.1771975e+00 + 8.7521628e-01 + -1.5440495e+00 + 1.8288448e+00 + -1.2453374e+00 + -1.7680161e+00 + 9.5916498e-01 + -7.8267374e-01 + -1.8993805e+00 + -4.3281035e-02 + 1.8434865e+00 + 8.9775368e-01 + 6.9499801e-01 + -1.0705170e+00 + -8.0791956e-01 + 9.2459777e-01 + 1.3292460e+00 + 1.1161258e+00 + 5.5772359e-01 + -1.0223957e+00 + -1.8541531e-01 + 1.2346408e+00 + 1.4159910e+00 + 4.0442777e-01 + 1.1399499e-01 + 3.5141198e-01 + -4.6849077e-01 + 8.6608792e-01 + 2.3563688e-01 + 4.8197878e-01 + -1.3877921e-01 + 3.3029412e-01 + -6.0974770e-01 + 1.6248130e+00 + -2.6876484e-01 + 7.1945123e-01 + -1.9433802e+00 + 1.0083910e+00 + -3.5634750e-01 + 6.3336075e-01 + -4.1595132e-01 + 6.9558371e-01 + -5.2294893e-01 + -4.2020575e-01 + -9.5681584e-01 + -1.4952893e+00 + 4.3614500e-01 + 1.1196578e+00 + 1.6831509e-01 + -6.5017989e-01 + -1.1401968e+00 + -9.7121141e-01 + 1.7920707e+00 + 1.0843040e-01 + -1.0753746e+00 + -1.1145431e+00 + -7.3902032e-01 + -2.1035790e-01 + 2.0430438e+00 + 5.0995314e-02 + -1.2417222e+00 + -7.2082453e-01 + -9.8142155e-01 + 1.3615246e+00 + 2.0354990e+00 + 1.5637746e+00 + -3.3550140e-01 + 1.2277799e+00 + -3.5126458e-02 + -1.2119138e-01 + -1.0793063e+00 + -2.3875061e-01 + -7.7292534e-01 + -2.2342569e-01 + -6.2907779e-01 + -3.2695152e-01 + -1.5754350e+00 + 5.4153802e-01 + -1.2718197e+00 + 3.4682392e-01 + -6.1524860e-01 + -8.3818393e-01 + -1.8481410e+00 + -2.9712279e-01 + 9.2328461e-01 + 1.6867230e+00 + 5.4728745e-01 + -1.2643712e+00 + -2.0959144e-01 + 1.1097976e+00 + 5.1165706e-01 + -6.1548325e-01 + 2.3624142e-01 + 9.0895407e-01 + -3.7813365e-01 + -7.4248117e-01 + -8.0007488e-01 + 5.2261550e-01 + 5.0046530e-01 + -4.8137074e-01 + -1.5091492e+00 + 1.1366395e-01 + -2.6447162e-01 + 8.4827957e-02 + 1.4253947e+00 + 3.0619471e-01 + -8.2956573e-01 + 2.1469768e+00 + -6.7052530e-01 + -4.9043315e-01 + 5.5425713e-01 + -1.3666960e+00 + 1.4032331e-01 + -3.9547130e-02 + 2.0627195e+00 + 1.2516545e+00 + 3.9572182e-01 + -1.0870702e+00 + 5.2062296e-01 + -3.5659969e-01 + -5.2625412e-01 + -1.8595048e+00 + -2.2905802e+00 + 3.4707260e-01 + 4.5031121e-01 + -3.7801863e-01 + 6.3488393e-01 + 3.1672938e-01 + -1.3865547e+00 + -1.2284838e+00 + 1.1772833e+00 + 4.5814815e-01 + -3.1811635e-01 + -1.0458822e+00 + 2.5870851e-01 + 2.4557075e-01 + -1.8521146e+00 + 9.4300881e-01 + 6.1106544e-02 + 3.3441699e-01 + -1.3209247e+00 + 1.6472339e+00 + 8.3594464e-01 + -8.2600352e-01 + -2.0408848e-01 + -6.1613953e-01 + 4.1626923e-01 + 8.0718428e-01 + 3.6855420e-01 + 4.7315517e-01 + 5.3582624e-01 + -1.0805360e+00 + 7.1284964e-01 + -8.7175396e-01 + 6.1536323e-01 + -1.0943510e+00 + 1.0999106e+00 + 4.2017691e-01 + 7.9247736e-01 + -6.7504410e-01 + 7.8472798e-01 + -7.5255754e-01 + -3.7310503e-01 + -2.7068859e-01 + 5.1124283e-01 + 1.2797396e+00 + -2.3413977e-01 + -2.0657834e-01 + 3.0834838e-01 + -6.7275746e-01 + 1.4549955e+00 + 1.0545370e+00 + 9.4236492e-01 + -4.6378129e-01 + -1.5842231e+00 + -8.6463338e-01 + 4.2562059e-01 + -6.3777896e-01 + 3.1088415e-01 + -6.7470709e-01 + 2.0176272e-01 + -1.8657000e-01 + 3.9377690e-01 + -1.6666277e+00 + 1.3172984e+00 + -1.9843712e-01 + 3.8441723e-01 + 1.8591752e+00 + 1.0938580e-02 + 1.1463209e+00 + -3.2788813e-01 + 1.0261127e+00 + 4.6526090e-01 + 8.6795702e-03 + -2.8429835e-01 + 5.5383412e-01 + -9.3695653e-01 + -9.1492264e-01 + 9.8048978e-01 + 6.5810058e-01 + 5.6754461e-01 + -3.8926975e-01 + 1.0686149e-02 + -1.4628151e+00 + -1.3049282e+00 + 4.1449655e-01 + -1.0731036e+00 + 1.3671472e-01 + -1.5581760e+00 + -4.4644622e-01 + -9.3870019e-01 + 5.5632807e-01 + 9.3990378e-03 + 2.7234567e-01 + -1.1460350e+00 + -1.1883139e+00 + -1.2577979e+00 + 1.0708310e+00 + 6.0297618e-01 + 1.8784120e-01 + -7.8888755e-01 + -1.0757188e+00 + 9.9130314e-01 + 4.9675948e-01 + -1.0979177e+00 + 1.6485794e+00 + -1.7640636e+00 + 3.2548931e-01 + 6.7487708e-01 + 1.5340542e-01 + -9.6480317e-01 + 2.5331817e-01 + -2.1183956e-01 + 2.0196345e-01 + -3.1503036e-01 + 5.1371783e-01 + -5.0150871e-01 + -1.2992986e+00 + 9.0961515e-01 + 9.7671188e-01 + 8.3914362e-01 + -1.6022925e+00 + 4.4183083e-01 + -1.0853775e+00 + 8.9310509e-01 + 9.4576653e-01 + 1.0142658e+00 + 1.8177369e+00 + -1.4267701e+00 + 3.8697955e-01 + 1.5780750e+00 + 3.1841756e-02 + 2.7299881e-02 + -7.0114259e-01 + 1.1091989e+00 + 2.6586032e-01 + 1.2117969e+00 + -1.0323327e+00 + -8.3080100e-01 + 4.2126425e-02 + 1.9374961e-01 + -9.4879641e-01 + 3.6957487e-01 + -2.7815589e-01 + 1.2718530e+00 + 5.5363215e-02 + 2.6324562e-01 + -8.9491253e-01 + -1.6750152e+00 + -2.3246005e+00 + 2.0092164e+00 + 5.9549030e-01 + 1.4857513e+00 + -1.4679767e-01 + -1.5617935e+00 + -1.1380196e+00 + -1.1818844e+00 + -2.4044195e+00 + 6.8544550e-01 + -9.5148770e-01 + 2.9706640e-01 + 1.4505042e-01 + -6.6765340e-01 + 1.2689995e+00 + 3.1147217e-01 + -1.5310910e+00 + -8.7283366e-02 + 2.9656659e-01 + -5.0196154e-01 + 3.3483803e-01 + 1.2732431e+00 + 4.4360685e-01 + 1.1035161e+00 + 1.9212764e+00 + 1.6630420e+00 + 3.5132398e-01 + 1.6305756e+00 + -1.5362317e+00 + 3.9289158e-02 + 6.3066760e-01 + 3.4040399e-01 + -2.7180181e-01 + -2.1067345e+00 + 3.6511907e-02 + -1.2498194e+00 + -6.1838478e-01 + 8.3119009e-01 + -8.5002321e-01 + 8.4307520e-01 + -7.6824240e-01 + 1.9464174e+00 + 1.0478513e+00 + -1.1142999e+00 + 7.4086218e-01 + 2.2696286e+00 + -2.6488482e+00 + -4.8722764e-01 + -1.2804448e+00 + 3.3786665e-01 + 8.7915723e-01 + 1.9530471e-01 + 7.4083740e-03 + 3.3189421e-01 + -1.0639290e+00 + -1.0119263e+00 + 7.7645349e-01 + -5.4008462e-01 + 1.5081790e+00 + 1.0147125e+00 + -9.5926939e-01 + 3.7049304e-01 + 7.2605916e-01 + 1.9438611e-01 + -5.8855255e-01 + 1.0400252e+00 + 3.1086259e+00 + 7.0700543e-02 + 5.2166200e-01 + 1.6170399e+00 + -4.5675649e-01 + -8.5010076e-01 + 1.5671387e-01 + -2.1711186e+00 + -8.4986679e-01 + -9.0465406e-01 + 1.0178386e+00 + -5.1293623e-01 + -9.0290094e-01 + -5.1296649e-01 + -5.5600808e-01 + 1.2284372e+00 + -3.5975600e-01 + -9.7868020e-01 + 7.2348947e-01 + 3.9962264e-01 + 7.6718031e-01 + -5.9946482e-01 + -1.3661750e+00 + 2.7324115e-01 + -5.4929775e-02 + -5.2625552e-02 + -4.7261139e-01 + 3.5454331e-01 + 9.4028684e-02 + -1.8251896e-01 + -3.5849803e-01 + -2.4296102e+00 + 1.2287271e+00 + 7.6134034e-01 + -5.9030794e-02 + 2.3125366e+00 + 1.2193902e+00 + -5.3418245e-01 + -1.5906536e+00 + -1.0786839e+00 + -1.1539462e+00 + 5.2480698e-01 + 8.3188792e-02 + 1.4683427e+00 + -1.1912019e+00 + 2.9988324e-01 + 2.0339361e-01 + -4.0841148e-01 + -1.2537027e+00 + 1.0349469e+00 + 2.0301310e+00 + 8.8437760e-01 + 6.7114745e-01 + -1.2084166e+00 + 6.0934981e-01 + 1.5005422e+00 + 8.7597005e-01 + 1.4935774e-01 + -2.8847804e-01 + 5.8453239e-01 + -1.0157663e+00 + -1.3921606e+00 + -1.6931218e+00 + -2.9526952e-01 + -8.4449479e-01 + 1.2027360e+00 + -1.6890500e-01 + 8.3210820e-01 + -2.2296251e+00 + -6.2647213e-01 + -9.5545263e-01 + 8.0160437e-01 + 4.9347233e-01 + 2.8890319e+00 + 1.9846412e+00 + 1.4732473e+00 + -4.1145440e-01 + -2.7134556e+00 + 5.8967586e-01 + -6.6298090e-02 + -2.8514956e-01 + 1.6934824e+00 + -3.0528759e+00 + -5.0285706e-01 + -2.0731144e+00 + -1.2730868e+00 + 4.0675325e-01 + 1.0016520e+00 + -2.9812281e-01 + -8.3469490e-01 + 1.6493271e+00 + 4.6649228e-01 + 9.3053051e-01 + 1.1099870e+00 + 1.3409435e+00 + 2.5729334e+00 + 7.5233055e-01 + 7.0797593e-01 + 3.6913187e-01 + 5.9675112e-01 + -1.9996841e-02 + 8.5953981e-03 + 2.4475943e-01 + -2.2756522e+00 + 1.2096802e+00 + 6.9998986e-01 + 3.1359737e-01 + 8.2206869e-01 + -5.4588352e-01 + -9.6681027e-01 + 6.0270575e-01 + 1.1538140e+00 + 5.7567969e-01 + -2.9767919e-01 + -1.5260615e+00 + 9.2286524e-01 + 5.8898058e-01 + 1.3635026e+00 + 5.2944814e-01 + -3.8091083e-01 + 4.7910413e-01 + 2.3098045e-01 + -1.4222204e+00 + -3.9390964e-01 + -6.2850763e-01 + -5.1178061e-01 + -2.7057728e-01 + -9.3410904e-01 + 2.4480795e-01 + 3.3088914e-01 + -4.2251544e-01 + -4.1229293e-01 + 1.8621545e+00 + 1.4064748e+00 + -1.0813430e+00 + 6.0636373e-01 + -4.7759091e-01 + -3.7941816e-01 + -7.4906997e-01 + -1.4850859e+00 + 1.1905076e+00 + -1.9303139e+00 + -1.2291323e-01 + 2.2575685e-01 + -1.6586112e+00 + 8.4435837e-01 + 1.9534632e-01 + -1.8120413e-01 + -5.1518293e-01 + -2.9578347e-01 + 6.4384475e-01 + -1.8825410e+00 + 4.6140878e-01 + -1.4320158e+00 + -1.0697638e-01 + 1.1140628e+00 + 1.0382575e+00 + -8.9085937e-01 + 3.0692158e-01 + -1.2781398e+00 + -7.0951197e-02 + 1.2712536e+00 + -1.8636018e+00 + 1.7429525e+00 + 7.2671571e-01 + -1.3272840e+00 + 1.7800341e+00 + 6.4987019e-01 + 9.0242833e-01 + 3.0364259e-01 + -4.4153907e-02 + 1.1639628e+00 + -1.1468061e+00 + -1.7075536e+00 + -1.9748947e-01 + -4.5874796e-02 + -1.0010385e+00 + 2.2688069e-01 + 6.9851266e-01 + 9.6544045e-01 + 1.3140925e+00 + -1.6566112e-01 + -4.6646403e-01 + -1.4083637e-01 + -4.1449345e-01 + -8.5291447e-02 + 1.0180422e+00 + -8.8556020e-02 + -2.6912634e-03 + -1.4240030e+00 + -9.1996500e-01 + 1.9581902e+00 + -4.5269472e-01 + -2.2467498e+00 + -2.4478289e-01 + -1.2233457e+00 + -7.3665783e-01 + 4.5612893e-01 + 1.4031737e+00 + 1.1844029e+00 + -1.6980611e+00 + 1.7556123e+00 + -1.6619224e+00 + 1.7207524e+00 + -8.9145738e-01 + -2.5264038e-01 + 2.6869682e+00 + 6.2371841e-01 + 1.8775344e+00 + 2.6958646e-01 + 2.4458825e+00 + 2.4512987e-01 + -3.4136931e-01 + -2.1345966e+00 + 1.3318091e+00 + 5.0027958e-01 + -2.4796347e-01 + 1.7015712e+00 + 1.7245307e+00 + -9.9039490e-01 + -2.9582811e-01 + -1.3097497e+00 + 9.4677301e-01 + -2.7383693e-01 + 3.5000440e-01 + -4.5099830e-01 + 9.3015933e-01 + 2.4467244e-01 + 3.7984443e-01 + 1.3243017e+00 + -1.6034640e-01 + -2.2662823e+00 + 9.3046864e-01 + 4.6879237e-01 + 5.1928879e-01 + 5.3642289e-01 + 8.2740168e-01 + 1.2195680e+00 + 1.0785078e-01 + -6.8918081e-01 + 1.2869712e+00 + -4.3814058e-01 + -9.0359021e-01 + 8.9327689e-01 + 9.8926344e-01 + -4.9375235e-01 + 1.1085127e+00 + 3.1397743e-01 + 1.8984340e+00 + 9.9482174e-03 + -2.4166537e-02 + 7.4987903e-02 + 2.2165658e+00 + -4.7985882e-01 + -2.3299553e-01 + 3.2366453e-01 + 4.9631167e-01 + -1.0928019e+00 + -5.2860849e-01 + -1.6137808e+00 + -7.8802094e-01 + -1.5327541e-01 + -5.6569348e-01 + -2.1950106e+00 + -2.3892055e-01 + -1.1735585e+00 + -1.0243865e+00 + 2.4311868e-02 + -2.2478353e-01 + -1.0290868e-01 + 1.5651311e-01 + 1.7281640e-01 + -5.8114483e-01 + 1.0851151e+00 + 1.9996380e+00 + -1.2963699e+00 + -1.2227464e+00 + -1.8556410e-01 + -2.1573013e+00 + -5.6943844e-01 + -2.2750598e+00 + -9.3374217e-01 + -1.3124017e+00 + 2.6599597e-01 + -3.8280419e-01 + 3.4479620e-01 + 7.9693459e-01 + 9.3181768e-01 + -1.1804510e+00 + 1.1751492e+00 + -2.3443928e-01 + 1.3002394e+00 + 1.0851546e+00 + -4.5224597e-01 + 1.8315411e+00 + 1.1523255e+00 + 2.8881086e-01 + -4.2626546e-01 + 3.2004214e-01 + 1.6424274e+00 + -7.8933851e-01 + -9.2502402e-01 + 3.4886105e-01 + 4.4174021e-01 + 7.9433720e-01 + 5.6734419e-01 + -1.0198975e+00 + 2.1631870e+00 + 7.3864819e-01 + 3.9889889e-01 + 5.2136905e-01 + 5.5997400e-01 + 8.6321272e-01 + 5.9880989e-01 + -4.5306198e-01 + -8.1080506e-01 + -1.5015045e+00 + -9.8894613e-01 + -7.1425299e-01 + 1.5805310e+00 + 9.5174077e-01 + 6.7133315e-01 + 1.3588310e+00 + 8.7480587e-01 + -4.0605398e-01 + -1.1332710e+00 + 6.3021385e-01 + 1.6018221e+00 + -1.6712484e+00 + -1.0209680e+00 + -1.7237164e+00 + -8.4682831e-01 + -1.1018661e+00 + 1.6699498e+00 + -7.1008674e-01 + -9.7067890e-01 + 6.8924357e-01 + 1.1433338e+00 + -1.2612761e+00 + -7.3185674e-01 + -6.5652974e-01 + -4.0317865e-01 + -1.1328765e-01 + -2.0016368e-01 + -8.6560013e-02 + 2.0660815e-01 + 7.1665475e-02 + 1.2991876e-02 + 7.7639405e-01 + -5.4624320e-01 + 2.0747261e-01 + 7.9131769e-02 + -1.8642335e+00 + 3.0189050e-01 + -6.3519876e-01 + 1.5972204e-01 + -5.1722668e-01 + 1.0582584e+00 + -9.2733126e-01 + -1.0122943e+00 + -6.0425681e-01 + -4.3346072e-01 + 5.4545469e-01 + -2.6702417e-01 + -1.9055693e+00 + 1.1856835e+00 + -3.5366991e-01 + 1.0261048e-02 + -5.0538338e-01 + 3.9151801e-01 + -2.7578263e-01 + -7.3930076e-01 + -5.3639002e-01 + 2.4090855e+00 + -1.0003617e-01 + -4.3339303e-01 + -6.3052566e-01 + 4.2858102e-01 + -3.3146374e-01 + 6.0939196e-01 + 2.9882157e-01 + -1.7094561e-01 + -9.1920473e-01 + 8.6229657e-01 + 7.3724959e-01 + -2.9491907e-01 + -1.1483825e+00 diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplotscontourmatlabexample.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplotscontourmatlabexample.dat new file mode 100644 index 00000000000..58046425ce0 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplotscontourmatlabexample.dat @@ -0,0 +1,19 @@ + 2.0000000e-01 5.0000000e+00 + 3.0000000e+00 4.0000000e-01 + 2.0000000e+00 2.8571429e-01 + 1.0000000e+00 3.3333333e-01 + 3.3333333e-01 1.0000000e+00 + 2.8571429e-01 2.0000000e+00 + 4.0000000e-01 5.0000000e+00 + 3.0000000e+00 8.0000000e-01 + 2.0000000e+00 5.7142857e-01 + 1.0000000e+00 6.6666667e-01 + 6.6666667e-01 1.0000000e+00 + 5.7142857e-01 2.0000000e+00 + 6.0000000e-01 6.0000000e+00 + 2.6666667e+00 2.0000000e+00 + 2.5000000e+00 1.0000000e+00 + 2.0000000e+00 8.5714286e-01 + 1.0000000e+00 1.0000000e+00 + 1.0000000e+00 1.0000000e+00 + 8.5714286e-01 2.0000000e+00 diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplotscontourmatlabexample.m b/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplotscontourmatlabexample.m new file mode 100644 index 00000000000..44c28b43ad9 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplotscontourmatlabexample.m @@ -0,0 +1,21 @@ +A=[ 0 0 0 0; + 1.0000 0 0 0; + 2.0000 0 0 0; + 3.0000 0 0 0; + 0 1.0000 0 0; + 1.0000 1.0000 0.6000 0.6000; + 2.0000 1.0000 0.7000 0.7000; + 3.0000 1.0000 0.5000 0.5000; + 0 2.0000 0 0; + 1.0000 2.0000 0.7000 0.7000; + 2.0000 2.0000 0.8000 0.8000; + 3.0000 2.0000 0.5000 0.5000]; +[x,y]=meshgrid(1:3,1:4); +x(:) = A(:,1); +y(:) = A(:,2); +z=x; +z(:) = A(:,3); + +data = contour(x,y,z,3); +data=data'; +save 'pgfplotscontourmatlabexample.dat' data -ASCII diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplotsternary.example1.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplotsternary.example1.dat new file mode 100644 index 00000000000..27d1e1ab52c --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/pgfplotsternary.example1.dat @@ -0,0 +1,124 @@ +Chromium Iron Nickel Temperature +0.90 0.0 0.10 1700 +0.85 0.14 0.00 1700 + +0.85 0.00 0.15 1600 +0.78 0.22 0.00 1600 +0.71 0.29 0.00 1600 + +0.77 0.00 0.23 1500 +0.69 0.21 0.10 1500 +0.58 0.38 0.03 1500 +0.43 0.55 0.02 1500 +0.22 0.75 0.02 1500 +0.00 0.94 0.06 1500 + +0.70 0.00 0.30 1400 +0.59 0.22 0.19 1400 +0.48 0.39 0.13 1400 +0.39 0.50 0.11 1400 +0.35 0.53 0.12 1400 +0.33 0.54 0.13 1400 + +0.60 0.00 0.40 1350 +0.56 0.11 0.33 1350 +0.51 0.19 0.30 1350 +0.49 0.21 0.30 1350 + +0.00 0.97 0.03 1500 +0.07 0.93 0.00 1500 + +0.00 0.96 0.04 1500 +0.01 0.92 0.07 1500 +0.07 0.86 0.08 1500 +0.12 0.81 0.07 1500 +0.15 0.78 0.07 1500 +0.19 0.72 0.09 1500 +0.23 0.66 0.11 1500 +0.29 0.59 0.12 1500 +0.35 0.51 0.14 1500 +0.40 0.43 0.17 1500 +0.45 0.36 0.19 1500 +0.49 0.28 0.23 1500 +0.50 0.20 0.30 1500 +0.50 0.14 0.36 1500 +0.50 0.10 0.40 1500 +0.53 0.06 0.41 1500 +0.56 0.03 0.40 1500 +0.59 0.02 0.39 1500 + +0.00 0.94 0.06 1600 +0.01 0.90 0.08 1600 +0.04 0.86 0.10 1600 +0.10 0.81 0.09 1600 +0.14 0.75 0.11 1600 +0.18 0.69 0.14 1600 +0.21 0.63 0.16 1600 +0.25 0.57 0.18 1600 +0.30 0.49 0.21 1600 +0.34 0.43 0.23 1600 +0.38 0.35 0.27 1600 +0.42 0.27 0.31 1600 +0.44 0.20 0.35 1600 +0.46 0.16 0.39 1600 +0.48 0.09 0.43 1600 +0.48 0.04 0.48 1600 +0.49 0.00 0.51 1600 + +0.45 0.00 0.55 1350 +0.38 0.07 0.55 1350 +0.35 0.14 0.51 1350 +0.34 0.23 0.43 1350 +0.36 0.26 0.38 1350 +0.41 0.28 0.31 1350 + +0.39 0.00 0.61 1360 +0.31 0.07 0.62 1360 +0.24 0.13 0.63 1360 +0.19 0.17 0.63 1360 +0.17 0.25 0.58 1360 +0.18 0.31 0.51 1360 +0.20 0.37 0.43 1360 +0.24 0.42 0.34 1360 +0.28 0.45 0.27 1360 +0.33 0.45 0.22 1360 + +0.32 0.00 0.68 1370 +0.23 0.07 0.70 1370 +0.18 0.12 0.70 1370 +0.15 0.17 0.68 1370 +0.15 0.23 0.62 1370 +0.15 0.30 0.55 1370 +0.16 0.36 0.48 1370 +0.19 0.41 0.40 1370 +0.22 0.47 0.31 1370 +0.26 0.49 0.25 1370 +0.28 0.51 0.21 1370 + +0.21 0.00 0.79 1400 +0.12 0.11 0.77 1400 +0.09 0.17 0.74 1400 +0.08 0.23 0.68 1400 +0.08 0.31 0.61 1400 +0.08 0.40 0.52 1400 +0.10 0.46 0.44 1400 +0.12 0.52 0.36 1400 +0.15 0.56 0.29 1400 +0.18 0.58 0.24 1400 +0.24 0.59 0.17 1400 + +0.11 0.00 0.89 1420 +0.04 0.14 0.82 1420 +0.01 0.25 0.74 1420 +0.01 0.33 0.66 1420 +0.01 0.47 0.52 1420 +0.02 0.55 0.42 1420 +0.04 0.62 0.34 1420 +0.07 0.67 0.26 1420 +0.11 0.70 0.19 1420 +0.14 0.70 0.16 1420 +0.17 0.70 0.13 1420 + +0.00 0.78 0.22 1490 +0.04 0.81 0.15 1490 +0.10 0.80 0.10 1490 diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics1.m b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics1.m new file mode 100644 index 00000000000..13f28c6a1a6 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics1.m @@ -0,0 +1,20 @@ +load wind +xmin = min(x(:)); +xmax = max(x(:)); +ymax = max(y(:)); +zmin = min(z(:)); +wind_speed = sqrt(u.^2 + v.^2 + w.^2); +hsurfaces = slice(x,y,z,wind_speed,[xmin,100,xmax],ymax,zmin); +set(hsurfaces,'FaceColor','interp','EdgeColor','none') +hcont = contourslice(x,y,z,wind_speed,[xmin,100,xmax],ymax,zmin); +set(hcont,'EdgeColor',[.7,.7,.7],'LineWidth',.5) +[sx,sy,sz] = meshgrid(80,20:10:50,0:5:15); +hlines = streamline(x,y,z,u,v,w,sx,sy,sz); +set(hlines,'LineWidth',2,'Color','r') +view(3) +daspect([2,2,1]) +axis tight + +axis off +print -dpng plotgraphics3d +[h,v]=view diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3.m b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3.m new file mode 100644 index 00000000000..eece73aabfb --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3.m @@ -0,0 +1,18 @@ +clear all +close all +seed = sum(clock) +rand('seed',seed); +X = rand(10,10,10); +data = smooth3(X,'box',5); +p1 = patch(isosurface(data,.5), ... + 'FaceColor','blue','EdgeColor','none'); +p2 = patch(isocaps(data,.5), ... + 'FaceColor','interp','EdgeColor','none'); +isonormals(data,p1) +daspect([1 2 2]) +view(3); axis vis3d tight +camlight; lighting phong +% print -dpng plotgraphics3withaxis +axis off +print -dpng plotgraphics3 +save plotgraphics3.seed seed -ASCII % to reproduce the result diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3.png b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3.png Binary files differnew file mode 100644 index 00000000000..521468ccf84 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3.seed b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3.seed new file mode 100644 index 00000000000..e328e30c44f --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3.seed @@ -0,0 +1 @@ + 2.0847021e+03 diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3d.png b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3d.png Binary files differnew file mode 100644 index 00000000000..9de971cbb54 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3d.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3d.png.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3d.png.dat new file mode 100644 index 00000000000..05e41fbc8eb --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3d.png.dat @@ -0,0 +1,16 @@ +img x unit=4.33908000000000 1.66402000000000, +img y unit=-3.341000000000 2.1648000000000, +img z unit=0.051308 9.5824000000000, +img origin=-104.092000000000 -155.681000000000, +unit length=4.64721000000000 3.981034000000000 9.582537000000000, +canvasmapmatrix=[7.0e1 0.0e0 6.0e1 0.0e0 1.6e1 0.0e0 1.0e0 0.0e0 +0.0e0 7.0e1 0.0e0 6.0e1 0.0e0 1.6e1 0.0e0 1.0e0 +1.343e2 0.0e0 6.0e1 0.0e0 1.6e1 0.0e0 1.0e0 0.0e0 +0.0e0 1.343e2 0.0e0 6.0e1 0.0e0 1.6e1 0.0e0 1.0e0 +7.019e1 0.0e0 6.0e1 0.0e0 0.0e0 0.0e0 1.0e0 0.0e0 +0.0e0 7.019e1 0.0e0 6.0e1 0.0e0 0.0e0 0.0e0 1.0e0 +1.343e2 0.0e0 1.75e1 0.0e0 1.6e1 0.0e0 1.0e0 0.0e0 +0.0e0 1.343e2 0.0e0 1.75e1 0.0e0 1.6e1 0.0e0 1.0e0 +]; +canvasmaprhs = [0.0e0 2.44e2 2.79e2 3.51e2 0.0e0 9.1e1 4.21e2 2.59e2 ]; + diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3dsurf.png b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3dsurf.png Binary files differnew file mode 100644 index 00000000000..0b5105d825b --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3dsurf.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3dsurfmatlab.png b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3dsurfmatlab.png Binary files differnew file mode 100644 index 00000000000..02d5f9be992 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3dsurfmatlab.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3withaxis.png b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3withaxis.png Binary files differnew file mode 100644 index 00000000000..558227c2a42 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics3withaxis.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics_gimpmeasure.png b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics_gimpmeasure.png Binary files differnew file mode 100644 index 00000000000..1ec61b87fc4 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/plotgraphics_gimpmeasure.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d.m b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d.m new file mode 100644 index 00000000000..67619a40913 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d.m @@ -0,0 +1,75 @@ + +xdata =load('risingdrop3d_coord.dat'); +veldata=load('risingdrop3d_vel.dat'); + +n = veldata(1) / 3 + +X = xdata(2:3:n)'; +Y = xdata(3:3:n)'; +Z = xdata(4:3:n)'; + +U = veldata(2:3:n)'; +V = veldata(3:3:n)'; +W = veldata(4:3:n)'; + +% swap ordering: +t=Y; Y=Z; Z=t; +t=V; V=W; W=t; + +xx = [X Y Z]; + +DT=DelaunayTri(xx); +xmin=min(X); xmax=max(X); +ymin=min(Y); ymax=max(Y); +zmin=min(Z); zmax=max(Z); +N = 31; +[x,y,z] = meshgrid( linspace(xmin,xmax,N), linspace(ymin,ymax,N), linspace(zmin,zmax,N)); +method='linear'; +F = TriScatteredInterp(DT, U,method); u = F(x,y,z); +F = TriScatteredInterp(DT, V,method); v = F(x,y,z); +F = TriScatteredInterp(DT, W,method); w = F(x,y,z); +I = find(isnan(u)); u(I)=0; +I = find(isnan(v)); v(I)=0; +I = find(isnan(w)); w(I)=0; + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +close all; +wind_speed = sqrt(u.^2 + v.^2 + w.^2); +slicepos = { [(xmin+xmax)/2], [(ymin+ymax)/2] , [(zmin+zmax)/2 ] }; +slicepos{2} =[]; +hsurfaces = slice(x,y,z,wind_speed,slicepos{1}, slicepos{2}, slicepos{3}); +set(hsurfaces,'FaceColor','interp','EdgeColor','none') + +hcont = contourslice(x,y,z,wind_speed,slicepos{1},slicepos{2},slicepos{3}); +set(hcont,'EdgeColor',[.7,.7,.7],'LineWidth',.5) + +NN= 4; +%[sx,sy,sz] = meshgrid( linspace(xmin,xmax,NN), linspace(ymin,ymax,NN), linspace(zmin,zmax,4) ); +[sx,sy,sz] = meshgrid( 0, linspace(-1e-3,1e-3,NN), slicepos{3} )%linspace(zmin,zmax,5) ); +hlines = streamline(x,y,z,u,v,w,sx,sy,sz); +set(hlines,'LineWidth',2,'Color','r') + +hold on +I = find( ... + abs(Z-(zmin+zmax)/2) < 1e-5 | ... + abs(X-(xmin+xmax)/2) < 1e-5 ... + ); +scale=2; +h=quiver3(X(I),Y(I),Z(I),U(I),V(I),W(I),scale); +set(h, 'Color', [0.9 0.9 0.9], 'Linewidth',1.3); +hold off + +view(3) +%daspect([2,2,1]) +%axis tight +axis equal +xlabel('x') +ylabel('y') +zlabel('z') +print -dpng risingdrop3dwithaxis +plotboxratio=pbaspect +[az,el]=view +axis off +print -dpng risingdrop3d + diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d.png b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d.png Binary files differnew file mode 100644 index 00000000000..581134eb4a1 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d_coord.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d_coord.dat new file mode 100644 index 00000000000..480f18e263e --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d_coord.dat @@ -0,0 +1,2 @@ +19560 -0.0015 -0.0015 -0.0015 0 -0.0015 -0.0015 0.0015 -0.0015 -0.0015 -0.0015 0 -0.0015 0 0 -0.0015 0.0015 0 -0.0015 -0.0015 0.0015 -0.0015 0 0.0015 -0.0015 0.0015 0.0015 -0.0015 -0.0015 -0.0015 0 0 -0.0015 0 0.0015 -0.0015 0 -0.0015 0 0 0 0 0 0.0015 0 0 -0.0015 0.0015 0 0 0.0015 0 0.0015 0.0015 0 -0.0015 -0.0015 0.0015 0 -0.0015 0.0015 0.0015 -0.0015 0.0015 -0.0015 0 0.0015 0 0 0.0015 0.0015 0 0.0015 -0.0015 0.0015 0.0015 0 0.0015 0.0015 0.0015 0.0015 0.0015 -0.0015 -0.0015 -0.00225 -0.0015 -0.00225 -0.0015 -0.00225 -0.0015 -0.0015 0 -0.0015 -0.00225 0 -0.00225 -0.0015 -0.00075 -0.0015 -0.00225 -0.00075 -0.0015 -0.0015 -0.00075 -0.00225 -0.0015 0.00075 -0.0015 -0.0015 -0.0015 -0.00075 -0.00225 -0.0015 0 -0.00225 -0.0015 -0.00075 -0.0015 -0.00225 0 -0.0015 -0.00225 -0.00075 -0.0015 -0.00075 -0.00075 -0.00225 0 -0.00075 -0.00225 0 0 -0.00225 0 -0.00075 -0.0015 -0.00075 0 -0.00225 -0.00075 0 -0.0015 -0.00075 -0.00075 -0.0015 0.00075 -0.00075 -0.00225 0.0015 -0.00075 -0.0015 0.00075 0 -0.00225 0.00075 0 -0.0015 0.00075 -0.00075 -0.0015 -0.0015 0.00075 -0.0015 -0.00075 0.00075 -0.00225 0 0.00075 -0.00225 0 0.00075 -0.0015 -0.00075 0.0015 -0.0015 -0.00075 0.00075 -0.0015 0.00075 0.00075 -0.00225 0.0015 0.00075 -0.0015 0.00075 0.0015 -0.0015 0.00075 0.00075 -0.0015 -0.0015 -0.00225 -0.00075 -0.0015 -0.0015 -0.00075 -0.0015 -0.00225 0 -0.00225 -0.0015 -0.00075 -0.00225 -0.0015 0 -0.00075 -0.00225 -0.00075 0 -0.00225 -0.00075 0 -0.0015 -0.00075 0 -0.00225 0 -0.00075 -0.0015 -0.00075 -0.00075 -0.0015 0 -0.00075 -0.00225 0 0.00075 -0.00225 -0.00075 0.0015 -0.0015 -0.00075 0.00075 -0.0015 -0.00075 0.00075 -0.0015 0 0.00075 -0.00225 0 -0.00225 -0.00075 -0.00075 -0.0015 -0.00075 -0.00075 -0.0015 0 -0.00075 -0.0015 -0.00075 0 -0.00225 0 -0.00075 -0.00225 0 0 -0.00225 -0.00075 0 -0.00075 -0.00075 -0.00075 0 -0.00075 -0.00075 0 0 -0.00075 0 -0.00075 0 -0.00075 0 -0.00075 -0.00075 0 0 -0.00075 -0.00075 0 0.00075 -0.00075 -0.00075 0.0015 -0.00075 -0.00075 0.0015 0 -0.00075 0.0015 -0.00075 0 0.00075 0 -0.00075 0.00075 0 0 0.00075 -0.00075 0 -0.00225 0.00075 -0.00075 -0.0015 0.00075 -0.00075 -0.0015 0.0015 -0.00075 -0.0015 0.00075 0 -0.00225 0.00075 0 -0.00075 0.00075 -0.00075 0 0.00075 -0.00075 0 0.0015 -0.00075 0 0.00075 0 -0.00075 0.0015 -0.00075 -0.00075 0.0015 0 -0.00075 0.00075 0 0.00075 0.00075 -0.00075 0.0015 0.00075 -0.00075 0.0015 0.0015 -0.00075 0.0015 0.00075 0 0.00075 0.0015 -0.00075 0.00075 0.0015 0 0.00075 0.00075 0 -0.0015 -0.0015 0.00075 -0.00075 -0.00225 0.00075 0 -0.00225 0.00075 0 -0.0015 0.00075 -0.00075 -0.0015 0.00075 -0.00075 -0.0015 0.0015 0.00075 -0.00225 0.00075 0.0015 -0.0015 0.00075 0.00075 -0.0015 0.00075 0.00075 -0.0015 0.0015 -0.00225 -0.00075 0.00075 -0.0015 -0.00075 0.00075 -0.0015 0 0.00075 -0.0015 -0.00075 0.0015 -0.00225 0 0.00075 -0.00075 -0.00075 0.00075 0 -0.00075 0.00075 0 0 0.00075 0 -0.00075 0.0015 -0.00075 0 0.00075 -0.00075 0 0.0015 -0.00075 -0.00075 0.0015 0.00075 -0.00075 0.00075 0.0015 -0.00075 0.00075 0.0015 0 0.00075 0.0015 -0.00075 0.0015 0.00075 0 0.00075 0.00075 0 0.0015 0.00075 -0.00075 0.0015 -0.00225 0.00075 0.00075 -0.0015 0.00075 0.00075 -0.0015 0.0015 0.00075 -0.0015 0.00075 0.0015 -0.00075 0.00075 0.00075 0 0.00075 0.00075 0 0.0015 0.00075 0 0.00075 0.0015 -0.00075 0.0015 0.00075 -0.00075 0.0015 0.0015 -0.00075 0.00075 0.0015 0.00075 0.00075 0.00075 0.0015 0.00075 0.00075 0.0015 0.0015 0.00075 0.0015 0.00075 0.0015 0.00075 0.0015 0.00075 0.00075 0.0015 0.0015 0.00075 0.00075 0.0015 -0.0015 -0.00225 -0.00225 -0.00225 -0.0015 -0.00225 -0.00225 -0.00225 -0.0015 -0.00075 -0.00225 -0.00225 0 -0.00225 -0.00225 0.00075 -0.00225 -0.00225 0.00075 -0.0015 -0.00225 0.00075 -0.00225 -0.0015 -0.00225 -0.00075 -0.00225 -0.00225 0 -0.00225 -0.00225 0.00075 -0.00225 -0.0015 0.00075 -0.00225 -0.00225 0.00075 -0.0015 -0.00225 -0.00225 -0.00075 -0.00225 -0.00225 0 0.00225 -0.00075 -0.00075 0.00225 0 -0.00075 0.00225 0 0 0.00225 -0.00075 0 0.00225 0.00075 -0.00075 0.00225 0.0015 -0.00075 0.00225 0.0015 0 0.00225 0.00075 0 -0.00075 0.00225 -0.00075 0 0.00225 -0.00075 0 0.00225 0 -0.00075 0.00225 0 0.00075 0.00225 -0.00075 0.0015 0.00225 -0.00075 0.0015 0.00225 0 0.00075 0.00225 0 0.00225 0.00225 -0.00075 0.00225 0.00225 0 -0.00225 -0.00225 0.00075 -0.0015 -0.00225 0.00075 -0.00225 -0.0015 0.00075 0.00225 -0.00075 0.00075 0.00225 0 0.00075 0.00225 0 0.0015 0.00225 -0.00075 0.0015 0.00225 0.00075 0.00075 0.00225 0.0015 0.00075 0.00225 0.0015 0.0015 0.00225 0.00075 0.0015 -0.00075 0.00225 0.00075 0 0.00225 0.00075 0 0.00225 0.0015 -0.00075 0.00225 0.0015 0.00075 0.00225 0.00075 0.0015 0.00225 0.00075 0.0015 0.00225 0.0015 0.00075 0.00225 0.0015 0.00225 0.00225 0.00075 0.00225 0.00225 0.0015 -0.00075 -0.00075 0.00225 0 -0.00075 0.00225 0 0 0.00225 -0.00075 0 0.00225 0.00075 -0.00075 0.00225 0.0015 -0.00075 0.00225 0.0015 0 0.00225 0.00075 0 0.00225 0.00225 -0.00075 0.00225 0.00225 0 0.00225 -0.00075 0.00075 0.00225 0 0.00075 0.00225 0 0.0015 0.00225 -0.00075 0.0015 0.00225 0.00075 0.00075 0.00225 0.0015 0.00075 0.00225 0.0015 0.0015 0.00225 0.00075 0.0015 0.00225 0.00225 0.00075 0.00225 0.00225 0.0015 0.00225 -0.00075 0.00225 0.00225 0 0.00225 0.00225 0.00075 0.00225 0.00225 0.0015 0.00225 0.00225 -0.000375 -0.00075 -0.00225 0 -0.000375 -0.00225 -0.000375 -0.000375 -0.00225 -0.000375 -0.000375 -0.001875 0 -0.000375 -0.001875 0 0 -0.001875 0 -0.001125 -0.0015 0 -0.00075 -0.001875 -0.000375 -0.00075 -0.001875 0 -0.000375 -0.0015 -0.00075 -0.000375 -0.00225 -0.000375 0 -0.00225 -0.000375 0 -0.001875 -0.001125 0 -0.0015 -0.00075 0 -0.001875 -0.00075 -0.000375 -0.001875 -0.000375 0 -0.0015 -0.001125 -0.0015 -0.0015 -0.001125 -0.001125 -0.0015 -0.00075 -0.001125 -0.0015 -0.00075 -0.00075 -0.001875 -0.000375 -0.0015 -0.0015 -0.000375 -0.001125 -0.0015 -0.000375 -0.00075 -0.0015 -0.000375 -0.000375 -0.0015 -0.0015 -0.001125 -0.0015 -0.001125 -0.00075 -0.0015 -0.0015 -0.000375 -0.0015 -0.001125 -0.000375 -0.0015 -0.00075 -0.000375 -0.0015 0.000375 -0.000375 -0.001875 0.000375 0 -0.001875 0.000375 0 -0.0015 0.000375 -0.0015 -0.0015 0.000375 -0.001125 -0.0015 0.00075 -0.001125 -0.0015 0.000375 -0.00075 -0.0015 0.000375 -0.000375 -0.0015 0.00075 -0.000375 -0.0015 -0.000375 0.000375 -0.001875 0 0.000375 -0.001875 0 0.000375 -0.0015 -0.001125 0.000375 -0.0015 -0.00075 0.000375 -0.0015 -0.000375 0.000375 -0.0015 -0.000375 0.00075 -0.0015 -0.0015 0.000375 -0.0015 -0.001125 0.00075 -0.0015 0.000375 0.000375 -0.001875 0.000375 0.000375 -0.0015 0.00075 0.000375 -0.0015 0.000375 0.00075 -0.0015 -0.000375 -0.00225 -0.00075 0 -0.0015 -0.001125 0 -0.001875 -0.00075 -0.000375 -0.001875 -0.00075 -0.000375 -0.001875 -0.000375 0 -0.001875 -0.000375 0 -0.0015 -0.000375 0 -0.00225 -0.000375 -0.000375 -0.00225 -0.000375 0 -0.001875 0 -0.001125 -0.0015 -0.001125 -0.00075 -0.0015 -0.001125 -0.00075 -0.001875 -0.00075 -0.000375 -0.0015 -0.001125 -0.000375 -0.0015 -0.00075 -0.000375 -0.0015 -0.000375 -0.0015 -0.0015 -0.001125 -0.001125 -0.0015 -0.00075 -0.0015 -0.0015 -0.000375 -0.001125 -0.0015 -0.000375 -0.001125 -0.0015 0 -0.00075 -0.0015 -0.000375 -0.00075 -0.001875 -0.000375 -0.000375 -0.0015 0 -0.00075 -0.00225 -0.000375 -0.000375 -0.00225 0 -0.000375 -0.001875 0 -0.00075 -0.001875 0 0.000375 -0.0015 -0.001125 0.00075 -0.0015 -0.001125 0.000375 -0.0015 -0.00075 0.000375 -0.001875 -0.000375 0.000375 -0.0015 -0.000375 0.000375 -0.0015 0 0.00075 -0.0015 -0.000375 0.000375 -0.001875 0 -0.0015 -0.001125 -0.001125 -0.0015 -0.00075 -0.001125 -0.001875 -0.00075 -0.00075 -0.0015 -0.000375 -0.001125 -0.0015 0 -0.001125 -0.0015 -0.000375 -0.00075 -0.001875 -0.000375 -0.00075 -0.001875 -0.000375 -0.000375 -0.0015 -0.000375 -0.000375 -0.0015 0 -0.000375 -0.0015 -0.001125 -0.00075 -0.0015 -0.001125 -0.000375 -0.0015 -0.001125 0 -0.0015 -0.00075 -0.000375 -0.001875 -0.00075 -0.000375 -0.0015 -0.000375 0 -0.00225 -0.000375 -0.00075 -0.001875 0 -0.00075 -0.001875 0 -0.000375 -0.00225 0 -0.000375 -0.00225 -0.000375 -0.000375 -0.001875 0 0 -0.00225 -0.00075 -0.000375 -0.001875 -0.00075 0 -0.001875 -0.000375 0 -0.00225 -0.000375 0 -0.001125 -0.001125 -0.001125 -0.00075 -0.001125 -0.001125 -0.00075 -0.00075 -0.001125 -0.000375 -0.001125 -0.001125 0 -0.001125 -0.001125 0 -0.00075 -0.001125 -0.000375 -0.00075 -0.001125 -0.000375 -0.00075 -0.00075 -0.000375 -0.000375 -0.001125 0 -0.000375 -0.001125 0 0 -0.001125 0 -0.000375 -0.00075 -0.000375 -0.000375 -0.00075 -0.000375 -0.000375 -0.000375 0 -0.000375 -0.000375 0 0 -0.000375 -0.00075 -0.001125 -0.00075 0 -0.001125 -0.00075 -0.000375 -0.001125 -0.00075 -0.000375 -0.001125 -0.000375 0 -0.001125 -0.000375 0 -0.001125 0 0 -0.00075 -0.000375 -0.000375 -0.00075 -0.000375 0 -0.000375 0 -0.001125 -0.00075 -0.001125 -0.001125 -0.000375 -0.001125 -0.001125 0 -0.001125 -0.00075 0 -0.001125 -0.00075 -0.000375 -0.001125 -0.00075 -0.000375 -0.00075 -0.000375 0 -0.001125 -0.000375 0 -0.00075 -0.000375 0 -0.000375 -0.001125 -0.00075 -0.00075 -0.001125 0 -0.00075 -0.001125 -0.000375 -0.00075 -0.001125 -0.000375 -0.000375 -0.001125 0 -0.000375 -0.001125 0 0 -0.00075 0 -0.000375 -0.00075 -0.000375 -0.000375 -0.000375 0 0 -0.001125 -0.001125 -0.00075 -0.001125 -0.001125 -0.000375 -0.001125 -0.001125 0 -0.00075 -0.001125 0 -0.00075 -0.001125 -0.000375 -0.00075 -0.00075 -0.000375 -0.000375 -0.001125 0 -0.000375 -0.00075 0 -0.000375 -0.000375 0 -0.001125 -0.00075 0 -0.001125 -0.00075 -0.000375 -0.001125 -0.000375 0 -0.00075 -0.000375 0 0.000375 -0.001125 -0.001125 0.00075 -0.001125 -0.001125 0.00075 -0.00075 -0.001125 0.001125 -0.001125 -0.001125 0.001125 -0.00075 -0.001125 0.001125 -0.00075 -0.00075 0.001125 -0.000375 -0.001125 0.0015 -0.000375 -0.00075 0.001125 -0.000375 -0.00075 0.001125 -0.000375 -0.000375 0.0015 -0.000375 -0.000375 0.0015 0 -0.000375 0.00075 -0.001125 -0.00075 0.001125 -0.001125 -0.00075 0.001125 -0.001125 -0.000375 0.0015 -0.00075 -0.000375 0.001125 -0.00075 -0.000375 0.0015 -0.000375 0 0.000375 -0.00075 -0.001125 0.000375 -0.000375 -0.001125 0.000375 0 -0.001125 0.00075 0 -0.001125 0.00075 -0.000375 -0.001125 0.00075 -0.000375 -0.00075 0.001125 0 -0.001125 0.001125 0 -0.00075 0.001125 0 -0.000375 0.000375 -0.00075 -0.00075 0.000375 0 -0.00075 0.000375 -0.000375 -0.00075 0.000375 -0.000375 -0.000375 0.000375 0 -0.000375 0.000375 0 0 0.00075 0 -0.000375 0.00075 -0.000375 -0.000375 0.001125 0 0 0.000375 -0.001125 -0.00075 0.000375 -0.001125 -0.000375 0.000375 -0.001125 0 0.00075 -0.001125 0 0.00075 -0.001125 -0.000375 0.00075 -0.00075 -0.000375 0.001125 -0.001125 0 0.001125 -0.00075 0 0.001125 -0.000375 0 0.000375 -0.00075 0 0.000375 -0.00075 -0.000375 0.000375 -0.000375 0 0.00075 -0.000375 0 -0.0015 0.000375 -0.001125 -0.0015 0.00075 -0.001125 -0.0015 0.000375 -0.00075 -0.001875 0.000375 -0.000375 -0.0015 0.000375 -0.000375 -0.0015 0.000375 0 -0.0015 0.00075 -0.000375 -0.001875 0.000375 0 -0.001125 0.000375 -0.001125 -0.00075 0.000375 -0.001125 -0.00075 0.00075 -0.001125 -0.000375 0.000375 -0.001125 0 0.000375 -0.001125 0 0.00075 -0.001125 -0.000375 0.00075 -0.001125 -0.000375 0.00075 -0.00075 -0.000375 0.001125 -0.001125 0 0.001125 -0.001125 0 0.001125 -0.00075 -0.000375 0.001125 -0.00075 -0.000375 0.001125 -0.000375 0 0.001125 -0.000375 0 0.0015 -0.000375 -0.00075 0.000375 -0.00075 0 0.000375 -0.00075 -0.000375 0.000375 -0.00075 -0.000375 0.000375 -0.000375 0 0.000375 -0.000375 0 0.000375 0 0 0.00075 -0.000375 -0.000375 0.00075 -0.000375 0 0.001125 0 -0.001125 0.00075 -0.001125 -0.001125 0.001125 -0.001125 -0.00075 0.001125 -0.001125 -0.00075 0.001125 -0.00075 -0.000375 0.0015 -0.00075 -0.000375 0.0015 -0.000375 -0.001125 0.00075 -0.00075 -0.001125 0.001125 -0.00075 -0.001125 0.001125 -0.000375 -0.00075 0.0015 -0.000375 -0.00075 0.001125 -0.000375 -0.000375 0.0015 0 -0.001125 0.000375 -0.00075 -0.001125 0.000375 -0.000375 -0.001125 0.000375 0 -0.00075 0.000375 0 -0.00075 0.000375 -0.000375 -0.00075 0.00075 -0.000375 -0.000375 0.000375 0 -0.000375 0.00075 0 -0.000375 0.001125 0 -0.001125 0.00075 0 -0.001125 0.00075 -0.000375 -0.001125 0.001125 0 -0.00075 0.001125 0 0.000375 0.000375 -0.001125 0.00075 0.000375 -0.001125 0.00075 0.00075 -0.001125 0.001125 0.000375 -0.001125 0.001125 0.00075 -0.001125 0.001125 0.00075 -0.00075 0.001125 0.001125 -0.001125 0.0015 0.001125 -0.00075 0.001125 0.001125 -0.00075 0.001125 0.001125 -0.000375 0.0015 0.001125 -0.000375 0.0015 0.0015 -0.000375 0.00075 0.000375 -0.00075 0.0015 0.000375 -0.00075 0.001125 0.000375 -0.00075 0.001125 0.000375 -0.000375 0.0015 0.000375 -0.000375 0.0015 0.000375 0 0.0015 0.00075 -0.000375 0.001125 0.00075 -0.000375 0.0015 0.001125 0 0.000375 0.00075 -0.001125 0.000375 0.001125 -0.001125 0.00075 0.001125 -0.001125 0.00075 0.001125 -0.00075 0.001125 0.0015 -0.00075 0.001125 0.0015 -0.000375 0.000375 0.00075 -0.00075 0.000375 0.0015 -0.00075 0.000375 0.001125 -0.00075 0.000375 0.001125 -0.000375 0.000375 0.0015 -0.000375 0.000375 0.0015 0 0.00075 0.0015 -0.000375 0.00075 0.001125 -0.000375 0.001125 0.0015 0 0.000375 0.000375 -0.00075 0.000375 0.000375 -0.000375 0.000375 0.000375 0 0.00075 0.000375 0 0.00075 0.000375 -0.000375 0.00075 0.00075 -0.000375 0.001125 0.000375 0 0.001125 0.00075 0 0.001125 0.001125 0 0.000375 0.00075 0 0.000375 0.00075 -0.000375 0.000375 0.001125 0 0.00075 0.001125 0 -0.000375 -0.001875 0.000375 0 -0.001875 0.000375 0 -0.0015 0.000375 -0.001125 -0.0015 0.000375 -0.00075 -0.0015 0.000375 -0.000375 -0.0015 0.000375 -0.000375 -0.0015 0.00075 -0.0015 -0.0015 0.000375 -0.001125 -0.0015 0.00075 0.000375 -0.001875 0.000375 0.000375 -0.0015 0.000375 0.00075 -0.0015 0.000375 0.000375 -0.0015 0.00075 -0.0015 -0.001125 0.000375 -0.0015 -0.00075 0.000375 -0.001875 -0.000375 0.000375 -0.0015 -0.000375 0.000375 -0.0015 0 0.000375 -0.0015 -0.000375 0.00075 -0.0015 -0.001125 0.00075 -0.001875 0 0.000375 -0.001125 -0.001125 0.000375 -0.00075 -0.001125 0.000375 -0.00075 -0.00075 0.000375 -0.000375 -0.001125 0.000375 0 -0.001125 0.000375 0 -0.00075 0.000375 -0.000375 -0.00075 0.000375 -0.000375 -0.00075 0.00075 -0.000375 -0.000375 0.000375 0 -0.000375 0.000375 0 0 0.000375 0 -0.000375 0.00075 -0.000375 -0.000375 0.00075 -0.000375 -0.000375 0.001125 0 -0.000375 0.001125 0 0 0.001125 -0.00075 -0.001125 0.00075 0 -0.001125 0.00075 -0.000375 -0.001125 0.00075 -0.000375 -0.001125 0.001125 0 -0.001125 0.001125 0 -0.00075 0.001125 -0.000375 -0.00075 0.001125 0 -0.000375 0.0015 -0.001125 -0.00075 0.000375 -0.001125 -0.000375 0.000375 -0.001125 0 0.000375 -0.00075 0 0.000375 -0.00075 -0.000375 0.000375 -0.00075 -0.000375 0.00075 -0.000375 0 0.000375 -0.000375 0 0.00075 -0.000375 0 0.001125 -0.001125 -0.00075 0.00075 -0.001125 0 0.00075 -0.001125 -0.000375 0.00075 -0.001125 -0.000375 0.001125 -0.001125 0 0.001125 -0.00075 0 0.001125 -0.00075 -0.000375 0.001125 -0.000375 0 0.0015 -0.001125 -0.001125 0.00075 -0.001125 -0.001125 0.001125 -0.00075 -0.001125 0.001125 -0.00075 -0.00075 0.001125 -0.000375 -0.00075 0.0015 -0.000375 -0.000375 0.0015 -0.001125 -0.00075 0.001125 -0.00075 -0.000375 0.0015 0.000375 -0.001125 0.000375 0.00075 -0.001125 0.000375 0.00075 -0.00075 0.000375 0.001125 -0.001125 0.000375 0.0015 -0.00075 0.000375 0.001125 -0.00075 0.000375 0.001125 -0.00075 0.00075 0.001125 -0.000375 0.000375 0.0015 -0.000375 0.000375 0.0015 0 0.000375 0.0015 -0.000375 0.00075 0.001125 -0.000375 0.00075 0.001125 -0.000375 0.001125 0.0015 -0.000375 0.001125 0.0015 0 0.001125 0.00075 -0.001125 0.00075 0.001125 -0.001125 0.00075 0.001125 -0.001125 0.001125 0.0015 -0.00075 0.001125 0.001125 -0.00075 0.001125 0.0015 -0.000375 0.0015 0.000375 -0.00075 0.000375 0.000375 -0.000375 0.000375 0.000375 0 0.000375 0.00075 0 0.000375 0.00075 -0.000375 0.000375 0.00075 -0.000375 0.00075 0.001125 0 0.000375 0.001125 0 0.00075 0.001125 0 0.001125 0.000375 -0.00075 0.00075 0.000375 0 0.00075 0.000375 -0.000375 0.00075 0.000375 -0.000375 0.001125 0.000375 0 0.001125 0.000375 0 0.0015 0.00075 0 0.001125 0.00075 -0.000375 0.001125 0.001125 0 0.0015 0.000375 -0.001125 0.00075 0.000375 -0.001125 0.001125 0.00075 -0.001125 0.001125 0.00075 -0.00075 0.001125 0.001125 -0.00075 0.0015 0.001125 -0.000375 0.0015 0.000375 -0.00075 0.0015 0.000375 -0.00075 0.001125 0.000375 -0.000375 0.0015 0.00075 -0.000375 0.0015 -0.001875 0.000375 0.000375 -0.0015 0.000375 0.000375 -0.0015 0.00075 0.000375 -0.0015 0.000375 0.00075 -0.001125 0.000375 0.000375 -0.00075 0.000375 0.000375 -0.00075 0.00075 0.000375 -0.000375 0.000375 0.000375 0 0.000375 0.000375 0 0.00075 0.000375 -0.000375 0.00075 0.000375 -0.000375 0.00075 0.00075 -0.000375 0.001125 0.000375 0 0.001125 0.000375 0 0.0015 0.000375 0 0.001125 0.00075 -0.000375 0.001125 0.00075 -0.000375 0.001125 0.001125 0 0.001125 0.001125 0 0.0015 0.001125 -0.00075 0.000375 0.00075 0 0.000375 0.00075 -0.000375 0.000375 0.00075 -0.000375 0.000375 0.001125 0 0.000375 0.001125 0 0.000375 0.0015 0 0.00075 0.001125 -0.000375 0.00075 0.001125 0 0.001125 0.0015 -0.001125 0.00075 0.000375 -0.001125 0.001125 0.000375 -0.00075 0.0015 0.000375 -0.00075 0.001125 0.000375 -0.00075 0.001125 0.00075 -0.000375 0.0015 0.000375 -0.000375 0.0015 0.00075 -0.000375 0.0015 0.001125 -0.001125 0.00075 0.00075 -0.001125 0.001125 0.00075 -0.001125 0.001125 0.001125 -0.00075 0.0015 0.001125 -0.00075 0.001125 0.001125 -0.000375 0.0015 0.0015 -0.001125 0.000375 0.00075 -0.001125 0.000375 0.001125 -0.00075 0.000375 0.0015 -0.00075 0.000375 0.001125 -0.00075 0.00075 0.001125 -0.000375 0.000375 0.0015 -0.000375 0.00075 0.0015 -0.000375 0.001125 0.0015 -0.001125 0.00075 0.001125 -0.00075 0.001125 0.0015 0.000375 0.000375 0.000375 0.00075 0.000375 0.000375 0.00075 0.00075 0.000375 0.001125 0.000375 0.000375 0.0015 0.000375 0.000375 0.0015 0.00075 0.000375 0.001125 0.00075 0.000375 0.001125 0.00075 0.00075 0.001125 0.001125 0.000375 0.0015 0.001125 0.000375 0.0015 0.0015 0.000375 0.0015 0.001125 0.00075 0.001125 0.001125 0.00075 0.001125 0.001125 0.001125 0.0015 0.001125 0.001125 0.0015 0.0015 0.001125 0.00075 0.000375 0.00075 0.0015 0.000375 0.00075 0.001125 0.000375 0.00075 0.001125 0.000375 0.001125 0.0015 0.000375 0.001125 0.0015 0.000375 0.0015 0.0015 0.00075 0.001125 0.001125 0.00075 0.001125 0.0015 0.001125 0.0015 0.000375 0.00075 0.000375 0.000375 0.001125 0.000375 0.000375 0.0015 0.000375 0.00075 0.0015 0.000375 0.00075 0.001125 0.000375 0.00075 0.001125 0.00075 0.001125 0.0015 0.000375 0.001125 0.0015 0.00075 0.001125 0.0015 0.001125 0.000375 0.00075 0.00075 0.000375 0.0015 0.00075 0.000375 0.001125 0.00075 0.000375 0.001125 0.001125 0.000375 0.0015 0.001125 0.000375 0.0015 0.0015 0.00075 0.0015 0.001125 0.00075 0.001125 0.001125 0.001125 0.0015 0.0015 0.000375 0.000375 0.00075 0.000375 0.000375 0.001125 0.000375 0.000375 0.0015 0.00075 0.000375 0.0015 0.00075 0.000375 0.001125 0.00075 0.00075 0.001125 0.001125 0.000375 0.0015 0.001125 0.00075 0.0015 0.001125 0.001125 0.0015 0.000375 0.00075 0.0015 0.000375 0.00075 0.001125 0.000375 0.001125 0.0015 0.00075 0.001125 0.0015 -0.00225 -0.00225 -0.00225 0.0015 -0.00225 -0.00225 0.0015 -0.0015 -0.00225 0.0015 -0.00225 -0.0015 0.00225 -0.00225 -0.00225 0.00225 -0.0015 -0.00225 0.00225 -0.0015 -0.0015 0.00225 -0.00225 -0.0015 0.0015 -0.00075 -0.00225 0.0015 0 -0.00225 0.00225 -0.00075 -0.00225 0.00225 0 -0.00225 0.00225 0 -0.0015 0.00225 -0.00075 -0.0015 -0.0015 0.0015 -0.00225 -0.00225 0.0015 -0.00225 -0.00225 0.0015 -0.0015 0 0.0015 -0.00225 -0.00075 0.0015 -0.00225 0.0015 0.00075 -0.00225 0.0015 0.0015 -0.00225 0.00075 0.0015 -0.00225 0.00225 0.00075 -0.00225 0.00225 0.0015 -0.00225 0.00225 0.0015 -0.0015 0.00225 0.00075 -0.0015 -0.00225 0.00225 -0.00225 -0.0015 0.00225 -0.00225 -0.0015 0.00225 -0.0015 -0.00225 0.00225 -0.0015 -0.00075 0.00225 -0.00225 0 0.00225 -0.00225 0 0.00225 -0.0015 -0.00075 0.00225 -0.0015 0.00075 0.00225 -0.00225 0.0015 0.00225 -0.00225 0.0015 0.00225 -0.0015 0.00075 0.00225 -0.0015 0.00225 0.00225 -0.00225 0.00225 0.00225 -0.0015 0.0015 -0.00225 -0.00075 0.0015 -0.00225 0 0.00225 -0.00225 -0.00075 0.00225 -0.0015 -0.00075 0.00225 -0.0015 0 0.00225 -0.00225 0 -0.00225 0.0015 -0.00075 -0.00225 0.0015 0 -0.00225 0.00225 -0.00075 -0.0015 0.00225 -0.00075 -0.0015 0.00225 0 -0.00225 0.00225 0 -0.0015 -0.00225 0.0015 -0.00225 -0.0015 0.0015 -0.00225 -0.00225 0.0015 0 -0.00225 0.0015 -0.00075 -0.00225 0.0015 0.0015 -0.00225 0.00075 0.0015 -0.00225 0.0015 0.00075 -0.00225 0.0015 0.00225 -0.00225 0.00075 0.00225 -0.0015 0.00075 0.00225 -0.0015 0.0015 0.00225 -0.00225 0.0015 -0.00225 0 0.0015 -0.00225 -0.00075 0.0015 -0.00225 0.0015 0.00075 -0.00225 0.0015 0.0015 -0.00225 0.00075 0.0015 -0.00225 0.00225 0.00075 -0.0015 0.00225 0.00075 -0.0015 0.00225 0.0015 -0.00225 0.00225 0.0015 -0.00225 -0.00225 0.00225 -0.0015 -0.00225 0.00225 -0.0015 -0.0015 0.00225 -0.00225 -0.0015 0.00225 -0.00075 -0.00225 0.00225 0 -0.00225 0.00225 0 -0.0015 0.00225 -0.00075 -0.0015 0.00225 0.00075 -0.00225 0.00225 0.0015 -0.00225 0.00225 0.0015 -0.0015 0.00225 0.00075 -0.0015 0.00225 0.00225 -0.00225 0.00225 0.00225 -0.0015 0.00225 -0.00225 -0.00075 0.00225 -0.0015 -0.00075 0.00225 -0.0015 0 0.00225 -0.00225 0 0.00225 -0.00225 0.00075 0.00225 -0.0015 0.00075 0.00225 -0.0015 0.0015 0.00225 -0.00225 0.0015 0.00225 -0.00225 0.00225 0.00225 -0.0015 0.00225 0.00225 0.00225 0.00225 0.00225 -0.0015 -0.0015 -0.002625 -0.0015 -0.0015 -0.001875 -0.00225 -0.00225 -0.002625 -0.0015 -0.002625 -0.0015 -0.0015 -0.001875 -0.0015 -0.00225 -0.002625 -0.00225 -0.002625 -0.0015 -0.0015 -0.001875 -0.0015 -0.0015 -0.002625 -0.00225 -0.00225 0 -0.0015 -0.002625 0 -0.0015 -0.001875 0 -0.002625 -0.0015 0 -0.001875 -0.0015 -0.001125 -0.0015 -0.002625 -0.000375 -0.0015 -0.001875 -0.00075 -0.0015 -0.002625 -0.000375 -0.0015 -0.002625 -0.000375 -0.0015 -0.00225 -0.001125 -0.0015 -0.00225 -0.001125 -0.0015 -0.001875 -0.00075 -0.0015 -0.001875 -0.001125 -0.002625 -0.0015 -0.000375 -0.001875 -0.0015 -0.00075 -0.002625 -0.0015 -0.000375 -0.002625 -0.0015 -0.000375 -0.00225 -0.0015 -0.001125 -0.00225 -0.0015 -0.001125 -0.001875 -0.0015 -0.00075 -0.001875 -0.0015 0.001125 -0.0015 -0.0015 0.000375 -0.0015 -0.001875 0.000375 -0.001875 -0.0015 -0.0015 -0.001125 -0.002625 -0.0015 -0.000375 -0.001875 -0.0015 0 -0.002625 -0.0015 0 -0.001875 -0.0015 -0.00075 -0.002625 -0.0015 -0.000375 -0.002625 -0.0015 -0.000375 -0.00225 -0.0015 -0.001125 -0.00225 -0.0015 -0.001125 -0.001875 -0.0015 -0.00075 -0.001875 -0.002625 0 -0.0015 -0.001875 0 -0.0015 -0.002625 -0.001125 -0.0015 -0.001875 -0.000375 -0.0015 -0.00225 -0.001125 -0.0015 -0.001875 -0.001125 -0.0015 -0.001875 -0.00075 -0.0015 -0.002625 -0.00075 -0.0015 -0.002625 -0.000375 -0.0015 -0.00225 -0.000375 -0.0015 -0.001125 -0.001125 -0.002625 0 -0.001125 -0.002625 0 0 -0.002625 0 -0.00075 -0.002625 0 -0.000375 -0.002625 -0.00075 -0.00075 -0.002625 -0.000375 -0.000375 -0.002625 -0.00075 -0.001125 -0.002625 -0.000375 -0.001125 -0.002625 -0.000375 -0.00075 -0.002625 0 -0.001125 -0.00225 0 -0.001125 -0.001875 -0.00075 -0.001125 -0.00225 -0.000375 -0.001125 -0.001875 -0.000375 -0.001125 -0.00225 -0.001125 0 -0.002625 -0.00075 0 -0.002625 -0.000375 0 -0.002625 -0.001125 -0.00075 -0.002625 -0.001125 -0.000375 -0.002625 -0.00075 -0.000375 -0.002625 -0.001125 0 -0.00225 -0.001125 0 -0.001875 -0.001125 -0.00075 -0.00225 -0.001125 -0.000375 -0.001875 -0.001125 -0.000375 -0.00225 -0.001125 -0.001125 -0.00225 -0.001125 -0.001125 -0.001875 -0.00075 -0.001125 -0.001875 -0.001125 -0.00075 -0.001875 0.000375 -0.001125 -0.002625 0.001125 -0.000375 -0.001875 0.001125 -0.000375 -0.002625 0.001125 -0.001125 -0.002625 0.0015 -0.001125 -0.0015 0.0015 -0.000375 -0.0015 0.0015 -0.001125 -0.00225 0.001125 -0.00075 -0.001875 0.000375 0 -0.002625 0.001125 0 -0.001875 0.001125 0 -0.002625 0.000375 -0.00075 -0.002625 0.000375 -0.000375 -0.002625 0.00075 -0.000375 -0.00225 0.001125 0 -0.0015 0.000375 0 -0.00225 0.00075 0 -0.001875 0.000375 -0.00075 -0.00225 0.00075 -0.000375 -0.001875 0.000375 -0.000375 -0.00225 0.001125 -0.000375 -0.0015 0.001125 -0.001125 -0.0015 0.001125 -0.00075 -0.0015 0.000375 -0.001125 -0.00225 0.000375 -0.001125 -0.001875 0.00075 -0.00075 -0.001875 0.000375 -0.00075 -0.001875 0.00225 -0.000375 -0.0015 -0.0015 0.001125 -0.0015 -0.0015 0.000375 -0.001875 -0.001875 0.000375 -0.0015 -0.001125 0.000375 -0.002625 -0.000375 0.001125 -0.001875 0 0.000375 -0.002625 0 0.001125 -0.001875 0 0.001125 -0.002625 -0.000375 0.001125 -0.002625 -0.00075 0.000375 -0.002625 -0.000375 0.000375 -0.002625 -0.000375 0.00075 -0.00225 0 0.001125 -0.0015 0 0.000375 -0.00225 0 0.00075 -0.001875 -0.00075 0.000375 -0.00225 -0.000375 0.00075 -0.001875 -0.000375 0.000375 -0.00225 -0.001125 0.001125 -0.002625 -0.001125 0.0015 -0.0015 -0.000375 0.0015 -0.0015 -0.001125 0.0015 -0.00225 -0.00075 0.001125 -0.001875 -0.000375 0.001125 -0.0015 -0.001125 0.000375 -0.00225 -0.001125 0.000375 -0.001875 -0.00075 0.00075 -0.001875 -0.00075 0.000375 -0.001875 -0.001125 0.001125 -0.0015 -0.00075 0.001125 -0.0015 0.000375 0.000375 -0.002625 0.001125 0.001125 -0.001875 0.001125 0.001125 -0.002625 0.001125 0.000375 -0.002625 0.0015 0.000375 -0.0015 0.0015 0.001125 -0.0015 0.0015 0.000375 -0.00225 0.00075 0.000375 -0.00225 0.001125 0.000375 -0.001875 0.001125 0.00075 -0.001875 0.000375 0.001125 -0.002625 0.000375 0.0015 -0.0015 0.001125 0.0015 -0.0015 0.000375 0.0015 -0.00225 0.000375 0.00075 -0.00225 0.000375 0.001125 -0.001875 0.00075 0.001125 -0.001875 0.001125 0.001125 -0.0015 0.001125 0.000375 -0.0015 0.001125 0.00075 -0.0015 0.000375 0.000375 -0.00225 0.00075 0.00075 -0.001875 0.00075 0.000375 -0.001875 0.000375 0.001125 -0.0015 0.00075 0.001125 -0.0015 0.000375 0.00075 -0.001875 0.00225 0.001125 -0.0015 -0.000375 0.00225 -0.0015 0.001125 0.00225 -0.0015 -0.0015 -0.002625 -0.001125 -0.0015 -0.001875 -0.000375 -0.0015 -0.00225 -0.001125 -0.0015 -0.001875 -0.001125 -0.0015 -0.001875 -0.00075 -0.0015 -0.002625 0 -0.0015 -0.001875 0 -0.0015 -0.002625 -0.00075 -0.0015 -0.002625 -0.000375 -0.0015 -0.00225 -0.000375 -0.002625 -0.0015 -0.001125 -0.001875 -0.0015 -0.000375 -0.00225 -0.0015 -0.001125 -0.001875 -0.0015 -0.001125 -0.001875 -0.0015 -0.00075 -0.002625 -0.0015 0 -0.001875 -0.0015 0 -0.002625 -0.0015 -0.00075 -0.002625 -0.0015 -0.000375 -0.00225 -0.0015 -0.000375 -0.001125 -0.002625 -0.001125 0 -0.002625 -0.001125 0 -0.00225 -0.001125 0 -0.001875 -0.001125 -0.00075 -0.00225 -0.001125 -0.000375 -0.001875 -0.001125 -0.00075 -0.002625 -0.001125 -0.000375 -0.002625 -0.001125 -0.000375 -0.00225 -0.001125 0 -0.002625 0 0 -0.002625 -0.00075 0 -0.002625 -0.000375 -0.00075 -0.002625 -0.00075 -0.000375 -0.002625 -0.000375 -0.000375 -0.002625 -0.00075 -0.001125 -0.00225 -0.001125 -0.001125 -0.001875 -0.001125 -0.00075 -0.001875 -0.001125 -0.001125 -0.00225 -0.00075 -0.001125 -0.001875 -0.000375 -0.001125 -0.001875 -0.00075 -0.001125 -0.002625 0 -0.00075 -0.002625 0 -0.000375 -0.002625 0 -0.001125 -0.002625 -0.00075 -0.001125 -0.002625 -0.000375 -0.00075 -0.002625 -0.000375 -0.001125 -0.00225 0 -0.001125 -0.001875 0 -0.001125 -0.00225 -0.000375 0.000375 -0.002625 -0.001125 0.001125 -0.001875 -0.000375 0.0015 -0.0015 -0.001125 0.0015 -0.0015 -0.000375 0.0015 -0.00225 -0.001125 0.001125 -0.002625 -0.001125 0.001125 -0.001875 -0.00075 0.001125 -0.002625 -0.000375 0.001125 -0.0015 -0.000375 0.001125 -0.0015 -0.001125 0.001125 -0.0015 -0.00075 0.000375 -0.00225 -0.001125 0.000375 -0.001875 -0.001125 0.00075 -0.001875 -0.00075 0.001125 -0.0015 0 0.000375 -0.00225 -0.00075 0.00075 -0.001875 -0.000375 0.000375 -0.001875 -0.00075 0.000375 -0.002625 0 0.001125 -0.001875 0 0.001125 -0.002625 0 0.000375 -0.002625 -0.00075 0.000375 -0.002625 -0.000375 0.00075 -0.00225 -0.000375 0.000375 -0.00225 0 0.00075 -0.001875 0 0.000375 -0.00225 -0.000375 0.00225 -0.0015 -0.000375 -0.002625 -0.001125 -0.001125 -0.00225 -0.00075 -0.001125 -0.001875 -0.000375 -0.001125 -0.00225 -0.001125 -0.001125 -0.001875 -0.001125 -0.001125 -0.001875 -0.00075 -0.001125 -0.00225 -0.001125 -0.00075 -0.001875 -0.001125 -0.000375 -0.001875 -0.001125 -0.00075 -0.002625 0 -0.001125 -0.00225 0 -0.001125 -0.001875 0 -0.001125 -0.002625 -0.00075 -0.001125 -0.002625 -0.000375 -0.001125 -0.00225 -0.000375 -0.001125 -0.002625 0 0 -0.002625 0 -0.00075 -0.002625 0 -0.000375 -0.002625 -0.00075 -0.00075 -0.002625 -0.000375 -0.000375 -0.002625 -0.000375 -0.00075 -0.002625 -0.001125 0 -0.00225 -0.001125 0 -0.001875 -0.001125 0 -0.002625 -0.001125 -0.00075 -0.002625 -0.001125 -0.000375 -0.00225 -0.001125 -0.000375 -0.002625 -0.00075 0 -0.002625 -0.000375 0 -0.002625 -0.00075 -0.000375 0.0015 -0.001125 -0.001125 0.0015 0 -0.001125 0.0015 -0.00075 -0.001125 0.0015 -0.000375 -0.001125 0.0015 -0.001125 0 0.0015 -0.001125 -0.00075 0.0015 -0.001125 -0.000375 -0.002625 0.000375 -0.001125 -0.001875 0.001125 -0.000375 -0.0015 0.001125 -0.000375 -0.0015 0.0015 -0.001125 -0.0015 0.0015 -0.000375 -0.0015 0.001125 -0.001125 -0.0015 0.001125 -0.00075 -0.001875 0.001125 -0.00075 -0.00225 0.000375 -0.001125 -0.001875 0.000375 -0.001125 -0.001875 0.00075 -0.00075 -0.0015 0.001125 0 -0.00225 0.000375 -0.00075 -0.001875 0.00075 -0.000375 -0.001875 0.000375 -0.00075 -0.00225 0.0015 -0.001125 -0.002625 0.001125 -0.001125 -0.002625 0.001125 -0.000375 -0.002625 0.000375 0 -0.001875 0.001125 0 -0.00225 0.000375 0 -0.001875 0.00075 0 -0.002625 0.000375 -0.00075 -0.002625 0.000375 -0.000375 -0.00225 0.00075 -0.000375 -0.00225 0.000375 -0.000375 -0.002625 0.001125 0 0 0.0015 -0.001125 -0.001125 0.0015 -0.001125 -0.00075 0.0015 -0.001125 -0.000375 0.0015 -0.001125 -0.001125 0.0015 0 -0.001125 0.0015 -0.00075 -0.001125 0.0015 -0.000375 0.0015 0.000375 -0.001125 0.0015 0.0015 -0.001125 0.0015 0.00075 -0.001125 0.0015 0.001125 -0.001125 0.000375 0.0015 -0.001125 0.00075 0.0015 -0.001125 0.001125 0.0015 -0.001125 -0.0015 0.00225 -0.000375 -0.0015 -0.0015 0.001125 -0.0015 -0.001875 0.000375 -0.001875 -0.0015 0.000375 -0.001125 -0.002625 0.000375 -0.000375 -0.001875 0.001125 0 -0.002625 0.000375 0 -0.001875 0.001125 0 -0.0015 0.001125 0 -0.00225 0.000375 0 -0.001875 0.00075 -0.00075 -0.00225 0.000375 -0.000375 -0.001875 0.00075 -0.00075 -0.002625 0.000375 -0.000375 -0.002625 0.000375 -0.000375 -0.00225 0.00075 -0.000375 -0.00225 0.000375 0 -0.002625 0.001125 -0.000375 -0.002625 0.001125 -0.000375 -0.0015 0.001125 -0.001125 -0.00225 0.000375 -0.001125 -0.001875 0.000375 -0.00075 -0.001875 0.00075 -0.00075 -0.001875 0.000375 -0.001125 -0.0015 0.0015 -0.000375 -0.0015 0.0015 -0.001125 -0.0015 0.001125 -0.00075 -0.0015 0.001125 -0.00075 -0.001875 0.001125 -0.001125 -0.002625 0.001125 -0.001125 -0.00225 0.0015 0.000375 -0.002625 0.000375 0.001125 -0.001875 0.001125 0.0015 -0.0015 0.000375 0.0015 -0.0015 0.001125 0.0015 -0.00225 0.000375 0.001125 -0.002625 0.000375 0.00075 -0.00225 0.000375 0.001125 -0.001875 0.000375 0.001125 -0.001875 0.00075 0.001125 -0.002625 0.001125 0.001125 -0.0015 0.001125 0.001125 -0.0015 0.000375 0.001125 -0.0015 0.00075 0.000375 -0.00225 0.000375 0.00075 -0.001875 0.00075 0.00075 -0.001875 0.000375 0.000375 -0.0015 0.0015 0.001125 -0.0015 0.0015 0.000375 -0.0015 0.001125 0.00075 -0.0015 0.001125 0.000375 -0.00225 0.00075 0.000375 -0.001875 0.001125 0.00075 -0.001875 0.001125 0.000375 -0.001875 0.00075 0.000375 -0.002625 0.001125 0.000375 -0.00225 0.0015 0.00225 -0.0015 0.001125 -0.002625 -0.001125 0.000375 -0.001875 -0.000375 0.001125 -0.0015 -0.000375 0.001125 -0.0015 0 0.001125 -0.00225 -0.00075 0.000375 -0.001875 -0.000375 0.00075 -0.00225 -0.001125 0.000375 -0.001875 -0.001125 0.000375 -0.001875 -0.00075 0.00075 -0.001875 -0.00075 0.000375 -0.0015 -0.001125 0.0015 -0.0015 -0.000375 0.0015 -0.0015 -0.001125 0.001125 -0.0015 -0.00075 0.001125 -0.001875 -0.00075 0.001125 -0.002625 0 0.000375 -0.001875 0 0.001125 -0.00225 0 0.000375 -0.001875 0 0.00075 -0.002625 -0.00075 0.000375 -0.002625 -0.000375 0.000375 -0.00225 -0.000375 0.00075 -0.00225 -0.000375 0.000375 -0.002625 0 0.001125 -0.002625 -0.000375 0.001125 -0.00225 -0.001125 0.0015 -0.002625 -0.001125 0.001125 0 -0.001125 0.0015 -0.001125 0 0.0015 -0.001125 -0.001125 0.0015 -0.00075 -0.001125 0.0015 -0.000375 -0.001125 0.0015 -0.001125 -0.00075 0.0015 -0.001125 -0.000375 0.0015 0.0015 -0.001125 0.000375 0.0015 -0.001125 0.0015 0.0015 -0.001125 0.00075 0.0015 -0.001125 0.001125 0.000375 -0.001125 0.0015 0.00075 -0.001125 0.0015 0.001125 -0.001125 0.0015 -0.002625 0.000375 0.000375 -0.001875 0.001125 0.001125 -0.0015 0.001125 0.001125 -0.0015 0.0015 0.000375 -0.0015 0.0015 0.001125 -0.0015 0.001125 0.000375 -0.0015 0.001125 0.00075 -0.00225 0.00075 0.000375 -0.001875 0.001125 0.000375 -0.001875 0.001125 0.00075 -0.00225 0.000375 0.000375 -0.001875 0.00075 0.00075 -0.001875 0.00075 0.000375 -0.0015 0.000375 0.0015 -0.0015 0.001125 0.0015 -0.0015 0.000375 0.001125 -0.0015 0.00075 0.001125 -0.00225 0.000375 0.00075 -0.001875 0.000375 0.001125 -0.001875 0.00075 0.001125 -0.001875 0.000375 0.00075 -0.00225 0.0015 0.000375 -0.002625 0.001125 0.000375 -0.002625 0.001125 0.001125 -0.00225 0.000375 0.0015 -0.002625 0.000375 0.001125 -0.001125 0.0015 0.000375 -0.001125 0.0015 0.0015 -0.001125 0.0015 0.00075 -0.001125 0.0015 0.001125 -0.001125 0.000375 0.0015 -0.001125 0.00075 0.0015 -0.001125 0.001125 0.0015 -0.0015 0.00225 0.001125 -0.000375 -0.0015 0.00225 0.001125 -0.0015 0.00225 -0.0015 -0.000375 0.00225 -0.0015 0.001125 0.00225 -0.0015 -0.002625 -0.002625 -0.0015 -0.001875 -0.001875 -0.00225 -0.002625 -0.002625 -0.0015 -0.00225 -0.002625 -0.0015 -0.001875 -0.002625 -0.0015 -0.001875 -0.00225 -0.0015 -0.002625 -0.00225 -0.0015 -0.002625 -0.001875 -0.0015 -0.00225 -0.001875 -0.002625 -0.0015 -0.002625 -0.001875 -0.0015 -0.001875 -0.002625 -0.00225 -0.002625 -0.00225 -0.0015 -0.002625 -0.001875 -0.0015 -0.002625 -0.001875 -0.0015 -0.00225 -0.002625 -0.0015 -0.00225 -0.002625 -0.0015 -0.001875 -0.00225 -0.0015 -0.001875 -0.002625 -0.002625 -0.0015 -0.001875 -0.001875 -0.0015 -0.002625 -0.002625 -0.00225 -0.00225 -0.002625 -0.0015 -0.001875 -0.002625 -0.0015 -0.001875 -0.00225 -0.0015 -0.002625 -0.00225 -0.0015 -0.002625 -0.001875 -0.0015 -0.00225 -0.001875 -0.0015 -0.001125 -0.002625 -0.002625 -0.000375 -0.001875 -0.001875 0 -0.002625 -0.002625 0 -0.001875 -0.001875 -0.000375 -0.001875 -0.002625 -0.000375 -0.002625 -0.002625 0 -0.00225 -0.002625 0 -0.001875 -0.002625 0 -0.001875 -0.00225 -0.000375 -0.001875 -0.00225 -0.000375 -0.00225 -0.00225 -0.000375 -0.00225 -0.002625 -0.000375 -0.002625 -0.001875 0 -0.002625 -0.00225 0 -0.002625 -0.001875 0 -0.00225 -0.001875 -0.000375 -0.00225 -0.001875 -0.000375 -0.002625 -0.00225 -0.001125 -0.00225 -0.002625 -0.001125 -0.001875 -0.002625 -0.00075 -0.001875 -0.00225 -0.00075 -0.001875 -0.002625 -0.001125 -0.00225 -0.00225 -0.001125 -0.001875 -0.001875 -0.00075 -0.001875 -0.001875 -0.001125 -0.001875 -0.00225 -0.001125 -0.002625 -0.00225 -0.001125 -0.002625 -0.001875 -0.00075 -0.00225 -0.001875 -0.00075 -0.002625 -0.001875 -0.001125 -0.00225 -0.001875 0.000375 -0.002625 -0.002625 0.001125 -0.001875 -0.001875 0.001125 -0.001875 -0.002625 0.001125 -0.002625 -0.002625 0.001125 -0.002625 -0.001875 0.000375 -0.0015 -0.002625 0.001125 -0.0015 -0.001875 0.001125 -0.0015 -0.002625 0.000375 -0.00225 -0.002625 0.000375 -0.001875 -0.002625 0.00075 -0.001875 -0.00225 0.000375 -0.0015 -0.00225 0.00075 -0.0015 -0.001875 0.000375 -0.00225 -0.00225 0.000375 -0.001875 -0.001875 0.00075 -0.001875 -0.001875 0.000375 -0.001875 -0.00225 0.000375 -0.002625 -0.0015 0.001125 -0.001875 -0.0015 0.001125 -0.002625 -0.0015 0.000375 -0.002625 -0.00225 0.000375 -0.002625 -0.001875 0.00075 -0.00225 -0.001875 0.000375 -0.00225 -0.0015 0.00075 -0.001875 -0.0015 0.000375 -0.00225 -0.001875 -0.002625 -0.001125 -0.002625 -0.001875 -0.000375 -0.001875 -0.001875 -0.000375 -0.002625 -0.001875 -0.000375 -0.00225 -0.00225 -0.001125 -0.002625 -0.001875 -0.001125 -0.002625 -0.001875 -0.00075 -0.00225 -0.001875 -0.00075 -0.002625 -0.00225 -0.001125 -0.00225 -0.001875 -0.001125 -0.001875 -0.001875 -0.00075 -0.001875 -0.001875 -0.001125 -0.00225 -0.002625 0 -0.002625 -0.001875 0 -0.001875 -0.002625 -0.000375 -0.002625 -0.00225 0 -0.002625 -0.001875 0 -0.002625 -0.001875 0 -0.00225 -0.00225 -0.000375 -0.00225 -0.00225 -0.000375 -0.002625 -0.002625 -0.000375 -0.001875 -0.002625 0 -0.00225 -0.002625 0 -0.001875 -0.00225 0 -0.001875 -0.00225 -0.000375 -0.001875 -0.002625 -0.000375 -0.00225 -0.002625 -0.001125 -0.00225 -0.002625 -0.001125 -0.001875 -0.00225 -0.00075 -0.001875 -0.00225 -0.001125 -0.001875 -0.002625 -0.00075 -0.001875 0.00075 -0.001125 -0.00225 0.001125 -0.001125 -0.001875 0.00075 -0.001125 -0.001875 -0.002625 0.000375 -0.002625 -0.001875 0.001125 -0.001875 -0.0015 0.000375 -0.002625 -0.0015 0.001125 -0.001875 -0.0015 0.001125 -0.002625 -0.001875 0.001125 -0.002625 -0.00225 0.000375 -0.002625 -0.001875 0.000375 -0.002625 -0.001875 0.00075 -0.00225 -0.0015 0.000375 -0.00225 -0.0015 0.00075 -0.001875 -0.00225 0.000375 -0.00225 -0.001875 0.000375 -0.001875 -0.001875 0.00075 -0.001875 -0.001875 0.000375 -0.00225 -0.002625 0.001125 -0.002625 -0.002625 0.001125 -0.001875 -0.002625 0.000375 -0.0015 -0.001875 0.001125 -0.0015 -0.00225 0.000375 -0.0015 -0.001875 0.00075 -0.0015 -0.002625 0.000375 -0.00225 -0.002625 0.000375 -0.001875 -0.00225 0.00075 -0.001875 -0.00225 0.000375 -0.001875 -0.002625 0.001125 -0.0015 -0.001125 0.00075 -0.00225 -0.001125 0.001125 -0.001875 -0.001125 0.00075 -0.001875 -0.002625 -0.002625 -0.001125 -0.001875 -0.001875 -0.000375 -0.00225 -0.00225 -0.001125 -0.001875 -0.001875 -0.001125 -0.001875 -0.001875 -0.00075 -0.00225 -0.002625 -0.001125 -0.001875 -0.002625 -0.001125 -0.001875 -0.00225 -0.00075 -0.001875 -0.00225 -0.001125 -0.001875 -0.002625 -0.000375 -0.001875 -0.00225 -0.000375 -0.001875 -0.002625 -0.00075 -0.002625 -0.00225 -0.001125 -0.002625 -0.001875 -0.001125 -0.00225 -0.001875 -0.00075 -0.00225 -0.001875 -0.001125 -0.002625 -0.001875 -0.000375 -0.00225 -0.001875 -0.000375 -0.002625 -0.001875 -0.00075 -0.002625 -0.002625 0 -0.001875 -0.001875 0 -0.002625 -0.002625 -0.000375 -0.00225 -0.002625 0 -0.001875 -0.002625 0 -0.001875 -0.00225 0 -0.00225 -0.00225 -0.000375 -0.00225 -0.002625 -0.000375 -0.002625 -0.00225 0 -0.002625 -0.001875 0 -0.00225 -0.001875 0 -0.002625 -0.00225 -0.000375 0.00075 -0.00225 -0.001125 0.001125 -0.001875 -0.001125 0.00075 -0.001875 -0.001125 0.001875 -0.001125 -0.001125 0.002625 -0.000375 -0.000375 0.002625 -0.000375 -0.001125 0.002625 -0.001125 -0.001125 0.002625 -0.001125 -0.000375 0.001875 0 -0.001125 0.002625 0 -0.000375 0.002625 0 -0.001125 0.001875 -0.00075 -0.001125 0.001875 -0.000375 -0.001125 0.00225 -0.000375 -0.00075 0.001875 0 0 0.002625 0 0 0.001875 0 -0.00075 0.001875 0 -0.000375 0.00225 0 -0.000375 0.001875 -0.00075 -0.00075 0.001875 -0.000375 -0.000375 0.00225 -0.000375 -0.000375 0.001875 -0.000375 -0.00075 0.001875 -0.001125 0 0.002625 -0.000375 0 0.002625 -0.001125 0 0.001875 -0.001125 -0.00075 0.001875 -0.001125 -0.000375 0.00225 -0.00075 -0.000375 0.001875 -0.00075 0 0.001875 -0.000375 0 0.00225 -0.000375 0 0.001875 -0.00075 -0.000375 -0.00225 0.00075 -0.001125 -0.001875 0.001125 -0.001125 -0.001875 0.00075 -0.001125 0.001875 0.000375 -0.001125 0.002625 0.001125 -0.000375 0.002625 0.001125 -0.001125 0.002625 0.000375 -0.001125 0.00225 0.000375 -0.00075 0.002625 0.000375 -0.000375 0.002625 0.00075 -0.000375 0.001875 0.0015 -0.001125 0.002625 0.0015 -0.000375 0.002625 0.0015 -0.001125 0.001875 0.00075 -0.001125 0.001875 0.001125 -0.001125 0.00225 0.001125 -0.00075 0.001875 0.0015 0 0.002625 0.0015 0 0.001875 0.0015 -0.00075 0.001875 0.0015 -0.000375 0.00225 0.0015 -0.000375 0.001875 0.00075 -0.00075 0.001875 0.001125 -0.000375 0.00225 0.001125 -0.000375 0.001875 0.001125 -0.00075 0.001875 0.000375 0 0.002625 0.001125 0 0.00225 0.000375 0 0.002625 0.000375 0 0.002625 0.00075 0 0.001875 0.000375 -0.00075 0.001875 0.000375 -0.000375 0.00225 0.00075 -0.000375 0.00225 0.000375 -0.000375 0.001875 0.00075 0 0.001875 0.001125 0 0.00225 0.001125 0 0.001875 0.00075 -0.000375 -0.001125 0.001875 -0.001125 -0.000375 0.002625 -0.000375 0 0.001875 -0.001125 0 0.002625 -0.000375 0 0.002625 -0.001125 -0.000375 0.002625 -0.001125 -0.00075 0.001875 -0.001125 -0.000375 0.001875 -0.001125 -0.000375 0.00225 -0.00075 0 0.001875 0 0 0.002625 0 0 0.001875 -0.00075 0 0.001875 -0.000375 0 0.00225 -0.000375 -0.00075 0.001875 -0.00075 -0.000375 0.001875 -0.000375 -0.000375 0.00225 -0.000375 -0.000375 0.001875 -0.00075 -0.001125 0.002625 -0.001125 -0.001125 0.002625 -0.000375 -0.001125 0.001875 0 -0.000375 0.002625 0 -0.00075 0.001875 0 -0.000375 0.001875 0 -0.000375 0.00225 0 -0.001125 0.001875 -0.00075 -0.001125 0.001875 -0.000375 -0.00075 0.00225 -0.000375 -0.00075 0.001875 -0.000375 -0.001125 0.002625 0 0.000375 0.001875 -0.001125 0.001125 0.002625 -0.000375 0.0015 0.001875 -0.001125 0.0015 0.002625 -0.000375 0.0015 0.002625 -0.001125 0.001125 0.002625 -0.001125 0.00075 0.001875 -0.001125 0.001125 0.001875 -0.001125 0.001125 0.00225 -0.00075 0.0015 0.001875 0 0.0015 0.002625 0 0.0015 0.001875 -0.00075 0.0015 0.001875 -0.000375 0.0015 0.00225 -0.000375 0.00075 0.001875 -0.00075 0.001125 0.001875 -0.000375 0.001125 0.00225 -0.000375 0.001125 0.001875 -0.00075 0.000375 0.002625 -0.001125 0.000375 0.00225 -0.00075 0.000375 0.002625 -0.000375 0.00075 0.002625 -0.000375 0.000375 0.001875 0 0.001125 0.002625 0 0.00075 0.001875 0 0.001125 0.001875 0 0.001125 0.00225 0 0.000375 0.001875 -0.00075 0.000375 0.001875 -0.000375 0.00075 0.00225 -0.000375 0.00075 0.001875 -0.000375 0.000375 0.00225 0 0.000375 0.002625 0 0.00075 0.002625 0 0.000375 0.00225 -0.000375 0.001875 0.001875 -0.001125 0.002625 0.002625 -0.000375 0.002625 0.002625 -0.001125 0.002625 0.001875 -0.001125 0.00225 0.001875 -0.00075 0.002625 0.001875 -0.000375 0.002625 0.00225 -0.000375 0.001875 0.002625 -0.001125 0.001875 0.00225 -0.00075 0.001875 0.002625 -0.000375 0.00225 0.002625 -0.000375 0.001875 0.001875 0 0.002625 0.002625 0 0.00225 0.001875 0 0.002625 0.001875 0 0.002625 0.00225 0 0.001875 0.001875 -0.00075 0.001875 0.001875 -0.000375 0.00225 0.00225 -0.000375 0.00225 0.001875 -0.000375 0.001875 0.00225 0 0.001875 0.002625 0 0.00225 0.002625 0 0.001875 0.00225 -0.000375 -0.002625 -0.002625 0.000375 -0.001875 -0.001875 0.001125 -0.0015 -0.002625 0.000375 -0.0015 -0.001875 0.001125 -0.0015 -0.00225 0.000375 -0.0015 -0.001875 0.00075 -0.00225 -0.00225 0.000375 -0.001875 -0.001875 0.000375 -0.001875 -0.001875 0.00075 -0.00225 -0.002625 0.000375 -0.001875 -0.002625 0.000375 -0.001875 -0.00225 0.00075 -0.001875 -0.00225 0.000375 -0.0015 -0.002625 0.001125 -0.001875 -0.002625 0.001125 -0.002625 -0.0015 0.000375 -0.001875 -0.0015 0.001125 -0.00225 -0.0015 0.000375 -0.001875 -0.0015 0.00075 -0.002625 -0.00225 0.000375 -0.002625 -0.001875 0.000375 -0.00225 -0.001875 0.00075 -0.00225 -0.001875 0.000375 -0.002625 -0.0015 0.001125 -0.002625 -0.001875 0.001125 -0.002625 -0.002625 0.001125 -0.001125 -0.00225 0.00075 -0.001125 -0.001875 0.001125 -0.001125 -0.001875 0.00075 -0.00225 -0.001125 0.00075 -0.001875 -0.001125 0.001125 -0.001875 -0.001125 0.00075 0.001875 -0.001125 0.000375 0.002625 -0.000375 0.001125 0.002625 -0.001125 0.000375 0.00225 -0.00075 0.000375 0.002625 -0.000375 0.000375 0.002625 -0.000375 0.00075 0.002625 -0.001125 0.001125 0.001875 0 0.000375 0.002625 0 0.001125 0.00225 0 0.000375 0.002625 0 0.000375 0.002625 0 0.00075 0.001875 -0.00075 0.000375 0.001875 -0.000375 0.000375 0.00225 -0.000375 0.00075 0.00225 -0.000375 0.000375 0.001875 0 0.0015 0.002625 0 0.0015 0.001875 0 0.00075 0.001875 0 0.001125 0.00225 0 0.001125 0.001875 -0.00075 0.00075 0.001875 -0.000375 0.001125 0.00225 -0.000375 0.001125 0.001875 -0.000375 0.00075 0.001875 -0.001125 0.0015 0.002625 -0.000375 0.0015 0.002625 -0.001125 0.0015 0.001875 -0.001125 0.00075 0.001875 -0.001125 0.001125 0.00225 -0.00075 0.001125 0.001875 -0.00075 0.0015 0.001875 -0.000375 0.0015 0.00225 -0.000375 0.0015 0.001875 -0.00075 0.001125 0.001875 0.000375 0.000375 0.002625 0.001125 0.001125 0.002625 0.00075 0.00075 0.00225 0.00075 0.000375 0.002625 0.001125 0.000375 0.002625 0.001125 0.00075 0.00225 0.000375 0.000375 0.002625 0.00075 0.000375 0.00225 0.000375 0.00075 0.002625 0.000375 0.001125 0.002625 0.00075 0.001125 0.002625 0.000375 0.00075 0.001875 0.0015 0.000375 0.002625 0.0015 0.001125 0.00225 0.0015 0.000375 0.002625 0.0015 0.000375 0.002625 0.0015 0.00075 0.001875 0.00075 0.000375 0.001875 0.001125 0.000375 0.00225 0.001125 0.00075 0.00225 0.001125 0.000375 0.001875 0.0015 0.0015 0.002625 0.0015 0.0015 0.001875 0.0015 0.00075 0.001875 0.0015 0.001125 0.00225 0.0015 0.001125 0.001875 0.00075 0.00075 0.001875 0.001125 0.001125 0.00225 0.001125 0.001125 0.001875 0.001125 0.00075 0.001875 0.000375 0.0015 0.002625 0.001125 0.0015 0.00225 0.000375 0.0015 0.002625 0.000375 0.0015 0.002625 0.00075 0.0015 0.001875 0.000375 0.00075 0.001875 0.000375 0.001125 0.00225 0.00075 0.001125 0.00225 0.000375 0.001125 0.001875 0.00075 0.0015 0.001875 0.001125 0.0015 0.00225 0.001125 0.0015 0.001875 0.00075 0.001125 -0.001125 0.001875 0.000375 -0.000375 0.002625 0.001125 0 0.001875 0.000375 0 0.002625 0.001125 0 0.00225 0.000375 0 0.002625 0.000375 0 0.002625 0.00075 -0.00075 0.00225 0.000375 -0.000375 0.002625 0.000375 -0.000375 0.002625 0.00075 -0.00075 0.001875 0.000375 -0.000375 0.001875 0.000375 -0.000375 0.00225 0.00075 -0.000375 0.00225 0.000375 0 0.001875 0.0015 0 0.002625 0.0015 0 0.001875 0.00075 0 0.001875 0.001125 0 0.00225 0.001125 -0.00075 0.001875 0.00075 -0.000375 0.001875 0.001125 -0.000375 0.00225 0.001125 -0.000375 0.001875 0.00075 -0.001125 0.002625 0.000375 -0.001125 0.002625 0.001125 -0.001125 0.001875 0.0015 -0.000375 0.002625 0.0015 -0.00075 0.001875 0.0015 -0.000375 0.001875 0.0015 -0.000375 0.00225 0.0015 -0.001125 0.001875 0.00075 -0.001125 0.001875 0.001125 -0.00075 0.00225 0.001125 -0.00075 0.001875 0.001125 -0.001125 0.002625 0.0015 0.000375 0.001875 0.000375 0.001125 0.002625 0.001125 0.0015 0.001875 0.000375 0.0015 0.002625 0.001125 0.0015 0.00225 0.000375 0.0015 0.002625 0.000375 0.0015 0.002625 0.00075 0.00075 0.00225 0.000375 0.001125 0.002625 0.000375 0.001125 0.002625 0.00075 0.00075 0.001875 0.000375 0.001125 0.001875 0.000375 0.001125 0.00225 0.00075 0.001125 0.00225 0.000375 0.0015 0.001875 0.0015 0.0015 0.002625 0.0015 0.0015 0.001875 0.00075 0.0015 0.001875 0.001125 0.0015 0.00225 0.001125 0.00075 0.001875 0.00075 0.001125 0.001875 0.001125 0.001125 0.00225 0.001125 0.001125 0.001875 0.00075 0.00075 0.002625 0.00075 0.000375 0.00225 0.000375 0.00075 0.002625 0.000375 0.000375 0.00225 0.00075 0.000375 0.002625 0.001125 0.00075 0.002625 0.001125 0.000375 0.002625 0.00075 0.000375 0.001875 0.0015 0.001125 0.002625 0.0015 0.00075 0.001875 0.0015 0.001125 0.001875 0.0015 0.001125 0.00225 0.0015 0.000375 0.001875 0.00075 0.000375 0.001875 0.001125 0.00075 0.00225 0.001125 0.00075 0.001875 0.001125 0.000375 0.00225 0.0015 0.000375 0.002625 0.0015 0.00075 0.002625 0.0015 0.000375 0.00225 0.001125 0.001875 0.001875 0.000375 0.002625 0.002625 0.001125 0.002625 0.002625 0.00075 0.002625 0.00225 0.00075 0.00225 0.00225 0.000375 0.00225 0.001875 0.000375 0.00225 0.001875 0.00075 0.002625 0.001875 0.001125 0.002625 0.00225 0.001125 0.002625 0.001875 0.00075 0.00225 0.002625 0.00075 0.001875 0.00225 0.000375 0.001875 0.00225 0.00075 0.001875 0.002625 0.001125 0.00225 0.002625 0.001125 0.001875 0.002625 0.00075 0.001875 0.001875 0.0015 0.002625 0.002625 0.0015 0.00225 0.001875 0.0015 0.002625 0.001875 0.0015 0.002625 0.00225 0.0015 0.001875 0.001875 0.00075 0.001875 0.001875 0.001125 0.00225 0.00225 0.001125 0.00225 0.001875 0.001125 0.001875 0.00225 0.0015 0.001875 0.002625 0.0015 0.00225 0.002625 0.0015 0.001875 0.00225 0.001125 -0.001125 -0.001125 0.001875 -0.000375 -0.000375 0.002625 0 -0.001125 0.001875 0 -0.000375 0.002625 0 0 0.001875 0 0 0.002625 0 -0.00075 0.001875 0 -0.000375 0.001875 0 -0.000375 0.00225 -0.00075 -0.00075 0.001875 -0.000375 -0.000375 0.001875 -0.000375 -0.000375 0.00225 -0.00075 -0.001125 0.001875 -0.000375 -0.001125 0.001875 -0.000375 -0.00075 0.00225 -0.000375 -0.00075 0.001875 0 -0.001125 0.002625 -0.000375 -0.001125 0.002625 -0.001125 0 0.001875 -0.000375 0 0.002625 -0.00075 0 0.001875 -0.000375 0 0.001875 -0.000375 0 0.00225 -0.001125 -0.00075 0.001875 -0.001125 -0.000375 0.001875 -0.00075 -0.000375 0.00225 -0.00075 -0.000375 0.001875 -0.001125 0 0.002625 -0.001125 -0.000375 0.002625 -0.001125 -0.001125 0.002625 0.000375 -0.001125 0.001875 0.001125 -0.000375 0.002625 0.0015 -0.001125 0.001875 0.0015 -0.000375 0.002625 0.0015 0 0.001875 0.0015 0 0.002625 0.0015 -0.00075 0.001875 0.0015 -0.000375 0.001875 0.0015 -0.000375 0.00225 0.00075 -0.00075 0.001875 0.001125 -0.000375 0.001875 0.001125 -0.000375 0.00225 0.00075 -0.001125 0.001875 0.001125 -0.001125 0.001875 0.001125 -0.00075 0.00225 0.001125 -0.00075 0.001875 0.0015 -0.001125 0.002625 0.001125 -0.001125 0.002625 0.000375 0 0.001875 0.001125 0 0.002625 0.00075 0 0.001875 0.001125 0 0.001875 0.001125 0 0.00225 0.000375 -0.00075 0.001875 0.000375 -0.000375 0.001875 0.00075 -0.000375 0.00225 0.00075 -0.000375 0.001875 0.000375 0 0.00225 0.000375 0 0.002625 0.00075 0 0.002625 0.000375 -0.00075 0.00225 0.000375 -0.000375 0.002625 0.00075 -0.000375 0.002625 0.000375 -0.000375 0.00225 0.000375 -0.001125 0.002625 0.001875 -0.001125 0.001875 0.002625 -0.000375 0.002625 0.002625 -0.001125 0.001875 0.00225 -0.00075 0.001875 0.002625 -0.000375 0.001875 0.002625 -0.000375 0.00225 0.002625 -0.001125 0.002625 0.001875 0 0.001875 0.002625 0 0.002625 0.00225 0 0.001875 0.002625 0 0.001875 0.002625 0 0.00225 0.001875 -0.00075 0.001875 0.001875 -0.000375 0.001875 0.00225 -0.000375 0.00225 0.00225 -0.000375 0.001875 0.001875 0 0.00225 0.001875 0 0.002625 0.00225 0 0.002625 0.001875 -0.00075 0.00225 0.001875 -0.000375 0.002625 0.00225 -0.000375 0.002625 0.001875 -0.000375 0.00225 0.001875 -0.001125 0.002625 -0.001125 0.000375 0.001875 -0.000375 0.001125 0.002625 0 0.000375 0.001875 0 0.001125 0.002625 0 0.0015 0.001875 0 0.0015 0.002625 0 0.00075 0.001875 0 0.001125 0.001875 0 0.001125 0.00225 -0.00075 0.00075 0.001875 -0.000375 0.001125 0.001875 -0.000375 0.001125 0.00225 -0.00075 0.000375 0.001875 -0.000375 0.000375 0.001875 -0.000375 0.00075 0.00225 -0.000375 0.00075 0.001875 0 0.000375 0.00225 0 0.000375 0.002625 0 0.00075 0.002625 -0.00075 0.000375 0.00225 -0.000375 0.000375 0.002625 -0.000375 0.00075 0.002625 -0.000375 0.000375 0.00225 -0.001125 0.0015 0.001875 -0.000375 0.0015 0.002625 -0.00075 0.0015 0.001875 -0.000375 0.0015 0.001875 -0.000375 0.0015 0.00225 -0.001125 0.00075 0.001875 -0.001125 0.001125 0.001875 -0.00075 0.001125 0.00225 -0.00075 0.001125 0.001875 -0.001125 0.0015 0.002625 -0.001125 0.001125 0.002625 -0.001125 0.000375 0.002625 0.000375 0.000375 0.001875 0.001125 0.001125 0.002625 0.0015 0.000375 0.001875 0.0015 0.001125 0.002625 0.0015 0.0015 0.001875 0.0015 0.0015 0.002625 0.0015 0.00075 0.001875 0.0015 0.001125 0.001875 0.0015 0.001125 0.00225 0.00075 0.00075 0.001875 0.001125 0.001125 0.001875 0.001125 0.001125 0.00225 0.00075 0.000375 0.001875 0.001125 0.000375 0.001875 0.001125 0.00075 0.00225 0.001125 0.00075 0.001875 0.0015 0.000375 0.00225 0.0015 0.000375 0.002625 0.0015 0.00075 0.002625 0.00075 0.000375 0.00225 0.001125 0.000375 0.002625 0.001125 0.00075 0.002625 0.001125 0.000375 0.00225 0.000375 0.0015 0.001875 0.001125 0.0015 0.002625 0.00075 0.0015 0.001875 0.001125 0.0015 0.001875 0.001125 0.0015 0.00225 0.000375 0.00075 0.001875 0.000375 0.001125 0.001875 0.00075 0.001125 0.00225 0.00075 0.001125 0.001875 0.000375 0.0015 0.00225 0.000375 0.0015 0.002625 0.00075 0.0015 0.002625 0.000375 0.00075 0.00225 0.000375 0.001125 0.002625 0.00075 0.001125 0.002625 0.000375 0.001125 0.00225 0.00075 0.00075 0.002625 0.000375 0.000375 0.00225 0.00075 0.000375 0.002625 0.000375 0.00075 0.002625 0.001875 0.000375 0.001875 0.002625 0.001125 0.002625 0.002625 0.00075 0.00225 0.00225 0.00075 0.001875 0.002625 0.001125 0.001875 0.002625 0.001125 0.00225 0.00225 0.000375 0.001875 0.002625 0.00075 0.001875 0.002625 0.00075 0.002625 0.00225 0.000375 0.00225 0.001875 0.0015 0.001875 0.002625 0.0015 0.002625 0.00225 0.0015 0.001875 0.002625 0.0015 0.001875 0.002625 0.0015 0.00225 0.001875 0.00075 0.001875 0.001875 0.001125 0.001875 0.00225 0.001125 0.00225 0.00225 0.001125 0.001875 0.001875 0.0015 0.00225 0.001875 0.0015 0.002625 0.00225 0.0015 0.002625 0.001875 0.00075 0.00225 0.001875 0.001125 0.002625 0.00225 0.001125 0.002625 0.001875 0.001125 0.00225 0.00225 0.00075 0.002625 0.001875 0.000375 0.00225 0.001875 0.00075 0.002625 -0.001125 0.001875 0.001875 -0.000375 0.002625 0.002625 0 0.001875 0.001875 0 0.002625 0.002625 0 0.00225 0.001875 0 0.002625 0.001875 0 0.002625 0.00225 -0.00075 0.00225 0.001875 -0.000375 0.002625 0.001875 -0.000375 0.002625 0.00225 -0.00075 0.001875 0.001875 -0.000375 0.001875 0.001875 -0.000375 0.00225 0.00225 -0.000375 0.00225 0.001875 0 0.001875 0.00225 0 0.001875 0.002625 0 0.00225 0.002625 -0.00075 0.001875 0.00225 -0.000375 0.001875 0.002625 -0.000375 0.00225 0.002625 -0.000375 0.001875 0.00225 -0.001125 0.002625 0.001875 -0.001125 0.002625 0.002625 -0.001125 0.001875 0.002625 0.000375 0.001875 0.001875 0.001125 0.002625 0.002625 0.0015 0.001875 0.001875 0.0015 0.002625 0.002625 0.0015 0.00225 0.001875 0.0015 0.002625 0.001875 0.0015 0.002625 0.00225 0.00075 0.00225 0.001875 0.001125 0.002625 0.001875 0.001125 0.002625 0.00225 0.00075 0.001875 0.001875 0.001125 0.001875 0.001875 0.001125 0.00225 0.00225 0.001125 0.00225 0.001875 0.0015 0.001875 0.00225 0.0015 0.001875 0.002625 0.0015 0.00225 0.002625 0.00075 0.001875 0.00225 0.001125 0.001875 0.002625 0.001125 0.00225 0.002625 0.001125 0.001875 0.00225 0.00075 0.002625 0.00225 0.000375 0.00225 0.001875 0.00075 0.002625 0.001875 0.00075 0.002625 0.002625 0.000375 0.00225 0.00225 0.00075 0.00225 0.002625 0.000375 0.001875 0.00225 0.00075 0.001875 0.002625 0.002625 0.002625 0.00225 0.002625 0.00225 0.00225 0.002625 0.00225 0.002625 0.00225 0.002625 0.00225 0.00225 0.002625 0.002625 0.00225 0.00225 0.002625 -0.0005625 -0.00075 -0.00225 -0.0001875 -0.00075 -0.00225 -0.0005625 -0.00075 -0.002625 -0.0005625 -0.001125 -0.002625 0 -0.0005625 -0.00225 0 -0.0001875 -0.00225 0 -0.0005625 -0.002625 -0.000375 -0.0005625 -0.002625 -0.0005625 -0.0005625 -0.00225 -0.0001875 -0.0001875 -0.00225 -0.0005625 -0.0005625 -0.002625 -0.000375 -0.0005625 -0.00225 -0.0001875 -0.0005625 -0.00225 -0.0001875 -0.000375 -0.00225 -0.0005625 -0.0005625 -0.0020625 -0.0001875 -0.0001875 -0.0016875 0 -0.0005625 -0.0020625 0 -0.0001875 -0.0016875 0 0 -0.0020625 0 0 -0.0016875 0 -0.000375 -0.0020625 0 -0.0001875 -0.0020625 0 -0.0001875 -0.001875 -0.000375 -0.000375 -0.0020625 -0.0001875 -0.0001875 -0.0020625 -0.0001875 -0.0001875 -0.001875 -0.000375 -0.0005625 -0.0020625 -0.0001875 -0.0005625 -0.0020625 -0.0001875 -0.000375 -0.001875 -0.0001875 -0.000375 -0.0020625 -0.0005625 -0.001125 -0.00225 0 -0.0013125 -0.0015 0 -0.0009375 -0.0015 0 -0.0013125 -0.001875 -0.000375 -0.0013125 -0.001875 0 -0.00075 -0.0020625 0 -0.00075 -0.0016875 0 -0.001125 -0.0020625 -0.000375 -0.001125 -0.0020625 -0.0005625 -0.00075 -0.0020625 -0.0001875 -0.00075 -0.0016875 -0.0005625 -0.001125 -0.0020625 -0.000375 -0.00075 -0.0020625 -0.0001875 -0.00075 -0.0020625 -0.0001875 -0.00075 -0.001875 0 -0.0005625 -0.0015 0 -0.0001875 -0.0015 0 -0.0005625 -0.001875 0 -0.0005625 -0.0016875 0 -0.000375 -0.0016875 -0.000375 -0.0005625 -0.001875 -0.0001875 -0.0005625 -0.0016875 -0.0001875 -0.000375 -0.0016875 -0.0001875 -0.0005625 -0.001875 -0.00075 -0.0005625 -0.00225 -0.00075 -0.0001875 -0.00225 -0.00075 -0.0005625 -0.002625 -0.001125 -0.0005625 -0.002625 -0.0005625 0 -0.00225 -0.0001875 0 -0.00225 -0.0005625 0 -0.002625 -0.0005625 -0.000375 -0.002625 -0.0005625 -0.000375 -0.00225 -0.0005625 -0.0001875 -0.00225 -0.000375 -0.0001875 -0.00225 -0.0005625 0 -0.0020625 -0.0001875 0 -0.0016875 -0.000375 0 -0.0020625 -0.0001875 0 -0.0020625 -0.0001875 0 -0.001875 -0.0005625 -0.000375 -0.0020625 -0.0005625 -0.0001875 -0.0020625 -0.000375 -0.0001875 -0.001875 -0.000375 -0.0001875 -0.0020625 -0.001125 -0.0005625 -0.00225 -0.0013125 0 -0.0015 -0.0009375 0 -0.0015 -0.0013125 0 -0.001875 -0.0013125 -0.000375 -0.001875 -0.00075 0 -0.0020625 -0.00075 0 -0.0016875 -0.001125 0 -0.0020625 -0.001125 -0.000375 -0.0020625 -0.00075 -0.0005625 -0.0020625 -0.00075 -0.0001875 -0.0016875 -0.001125 -0.0005625 -0.0020625 -0.00075 -0.000375 -0.0020625 -0.00075 -0.0001875 -0.0020625 -0.00075 -0.0001875 -0.001875 -0.0005625 0 -0.0015 -0.0001875 0 -0.0015 -0.0005625 0 -0.001875 -0.0005625 0 -0.0016875 -0.000375 0 -0.0016875 -0.0005625 -0.000375 -0.001875 -0.0005625 -0.0001875 -0.0016875 -0.000375 -0.0001875 -0.0016875 -0.0005625 -0.0001875 -0.001875 -0.0013125 -0.0015 -0.0015 -0.0009375 -0.0015 -0.0015 -0.0013125 -0.0013125 -0.0015 -0.0009375 -0.0009375 -0.0015 -0.00075 -0.0013125 -0.0015 -0.00075 -0.0009375 -0.0015 -0.001125 -0.0013125 -0.001875 -0.0013125 -0.0013125 -0.001875 -0.0013125 -0.0015 -0.001875 -0.001125 -0.0013125 -0.0015 -0.0009375 -0.0013125 -0.0015 -0.0009375 -0.001125 -0.0015 -0.00075 -0.0013125 -0.001875 -0.00075 -0.00075 -0.0020625 -0.00075 -0.00075 -0.0016875 -0.00075 -0.001125 -0.0020625 -0.001125 -0.001125 -0.0020625 -0.0005625 -0.0015 -0.0015 -0.0001875 -0.0015 -0.0015 -0.0005625 -0.0013125 -0.0015 -0.0001875 -0.0009375 -0.0015 -0.0005625 -0.0013125 -0.001875 -0.0005625 -0.0015 -0.001875 -0.000375 -0.0013125 -0.0015 -0.0001875 -0.0013125 -0.0015 -0.0001875 -0.001125 -0.0015 -0.0005625 -0.00075 -0.0015 -0.0001875 -0.00075 -0.0015 -0.0005625 -0.001125 -0.001875 -0.0005625 -0.001125 -0.0015 -0.0005625 -0.0009375 -0.0015 -0.000375 -0.0009375 -0.0015 -0.0005625 -0.00075 -0.001875 -0.0005625 -0.00075 -0.0016875 -0.000375 -0.00075 -0.0016875 -0.0005625 -0.0005625 -0.0015 -0.0001875 -0.0001875 -0.0015 -0.000375 -0.0005625 -0.0015 -0.0001875 -0.0005625 -0.0015 -0.0001875 -0.000375 -0.0015 -0.0005625 -0.0005625 -0.001875 -0.0005625 -0.0005625 -0.0016875 -0.000375 -0.000375 -0.0016875 -0.000375 -0.0005625 -0.0016875 -0.0015 -0.0013125 -0.0015 -0.0015 -0.0009375 -0.0015 -0.0013125 -0.00075 -0.0015 -0.0009375 -0.00075 -0.0015 -0.0013125 -0.001125 -0.001875 -0.0015 -0.0013125 -0.001875 -0.0013125 -0.001125 -0.0015 -0.0013125 -0.0009375 -0.0015 -0.001125 -0.0009375 -0.0015 -0.0013125 -0.00075 -0.001875 -0.001125 -0.00075 -0.0020625 -0.0015 -0.0005625 -0.0015 -0.0015 -0.0001875 -0.0015 -0.0013125 -0.0005625 -0.0015 -0.0009375 -0.0001875 -0.0015 -0.0013125 -0.0005625 -0.001875 -0.0015 -0.0005625 -0.001875 -0.0013125 -0.000375 -0.0015 -0.0013125 -0.0001875 -0.0015 -0.001125 -0.0001875 -0.0015 -0.00075 -0.0005625 -0.0015 -0.00075 -0.0001875 -0.0015 -0.001125 -0.0005625 -0.001875 -0.001125 -0.0005625 -0.0015 -0.0009375 -0.0005625 -0.0015 -0.0009375 -0.000375 -0.0015 -0.00075 -0.0005625 -0.001875 -0.00075 -0.0005625 -0.0016875 -0.00075 -0.000375 -0.0016875 -0.0005625 -0.000375 -0.0015 -0.0005625 -0.0001875 -0.0015 -0.000375 -0.0001875 -0.0015 -0.0005625 -0.000375 -0.0016875 0.000375 -0.0001875 -0.00225 0.0001875 -0.0005625 -0.0020625 0.0005625 -0.0001875 -0.0016875 0.0001875 0 -0.0020625 0.0005625 0 -0.0016875 0.0001875 0 -0.0015 0.0005625 0 -0.0015 0.0001875 0 -0.001875 0.0001875 0 -0.0016875 0.000375 0 -0.0016875 0.0001875 -0.000375 -0.001875 0.0001875 -0.0001875 -0.0016875 0.000375 -0.0001875 -0.0016875 0.0001875 -0.000375 -0.0020625 0.0001875 -0.0001875 -0.0020625 0.000375 -0.0001875 -0.001875 0.0001875 -0.0001875 -0.001875 0.0005625 0 -0.0020625 0.0005625 -0.0001875 -0.0020625 0.0005625 -0.0005625 -0.0020625 0.0001875 -0.0015 -0.0015 0.0005625 -0.0015 -0.0015 0.0001875 -0.0013125 -0.0015 0.0005625 -0.0009375 -0.0015 0.00075 -0.0013125 -0.0015 0.00075 -0.0009375 -0.0015 0.000375 -0.0013125 -0.001875 0.0001875 -0.0013125 -0.001875 0.0001875 -0.0015 -0.001875 0.000375 -0.0013125 -0.0015 0.0005625 -0.0013125 -0.0015 0.0005625 -0.001125 -0.0015 0.0001875 -0.00075 -0.0015 0.0005625 -0.00075 -0.0015 0.0001875 -0.001125 -0.001875 0.0001875 -0.001125 -0.0015 0.0001875 -0.0009375 -0.0015 0.000375 -0.0009375 -0.0015 0.000375 -0.00075 -0.0016875 0.0001875 -0.00075 -0.0016875 0.0001875 -0.0005625 -0.0015 0.0005625 -0.0001875 -0.0015 0.0001875 -0.000375 -0.0015 0.0001875 -0.0001875 -0.0015 0.000375 -0.0001875 -0.0015 0.0001875 -0.0005625 -0.001875 0.0001875 -0.0005625 -0.0016875 0.000375 -0.000375 -0.0016875 0.0001875 -0.000375 -0.0016875 0.00075 -0.0005625 -0.0015 0.00075 -0.0001875 -0.0015 0.0005625 -0.0005625 -0.0016875 0.000375 -0.0005625 -0.0015 0.0005625 -0.0005625 -0.0015 0.0005625 -0.000375 -0.0015 0.0005625 -0.000375 -0.0016875 0.000375 -0.0005625 -0.0016875 0.00075 -0.0005625 -0.001875 0.001125 -0.0001875 -0.0015 -0.0001875 0.000375 -0.00225 -0.0005625 0.0001875 -0.0020625 -0.0001875 0.0005625 -0.0016875 0 0.0001875 -0.0020625 0 0.0005625 -0.0016875 0 0.0001875 -0.0015 0 0.0005625 -0.0015 0 0.0001875 -0.001875 0 0.0001875 -0.0016875 0 0.000375 -0.0016875 -0.000375 0.0001875 -0.001875 -0.0001875 0.0001875 -0.0016875 -0.0001875 0.000375 -0.0016875 -0.000375 0.0001875 -0.0020625 -0.0001875 0.0001875 -0.0020625 -0.0001875 0.000375 -0.001875 -0.0001875 0.0001875 -0.001875 0 0.0005625 -0.0020625 -0.0001875 0.0005625 -0.0020625 -0.0005625 0.0005625 -0.0020625 -0.0013125 0.0001875 -0.0015 -0.0009375 0.0005625 -0.0015 -0.00075 0.0001875 -0.0015 -0.00075 0.0005625 -0.0015 -0.001125 0.0001875 -0.001875 -0.0013125 0.0001875 -0.001875 -0.001125 0.0001875 -0.0015 -0.0009375 0.0001875 -0.0015 -0.0009375 0.000375 -0.0015 -0.00075 0.000375 -0.0016875 -0.00075 0.0001875 -0.0016875 -0.0005625 0.0001875 -0.0015 -0.0001875 0.0005625 -0.0015 -0.000375 0.0001875 -0.0015 -0.0001875 0.0001875 -0.0015 -0.0001875 0.000375 -0.0015 -0.0005625 0.0001875 -0.001875 -0.0005625 0.0001875 -0.0016875 -0.000375 0.000375 -0.0016875 -0.000375 0.0001875 -0.0016875 -0.0005625 0.00075 -0.0015 -0.0001875 0.00075 -0.0015 -0.0005625 0.0005625 -0.0016875 -0.0005625 0.000375 -0.0015 -0.0005625 0.0005625 -0.0015 -0.000375 0.0005625 -0.0015 -0.000375 0.0005625 -0.0016875 -0.0005625 0.000375 -0.0016875 -0.0005625 0.00075 -0.001875 -0.0001875 0.001125 -0.0015 -0.0015 0.0001875 -0.0015 -0.0015 0.0005625 -0.0015 -0.0013125 0.00075 -0.0015 -0.0009375 0.00075 -0.0015 -0.0013125 0.000375 -0.001875 -0.0015 0.0001875 -0.001875 -0.0013125 0.000375 -0.0015 -0.0013125 0.0005625 -0.0015 -0.001125 0.0005625 -0.0015 0.0001875 0.0001875 -0.0020625 0.0005625 0.0005625 -0.0016875 0.0001875 0.0001875 -0.0015 0.0005625 0.0005625 -0.0015 0.00075 0.0001875 -0.0015 0.00075 0.0005625 -0.0015 0.000375 0.0001875 -0.0015 0.0005625 0.0001875 -0.0015 0.0005625 0.000375 -0.0015 0.000375 0.0001875 -0.001875 0.0005625 0.0001875 -0.0016875 0.0005625 0.000375 -0.0016875 0.0001875 0.0001875 -0.001875 0.0001875 0.0001875 -0.0016875 0.000375 0.000375 -0.0016875 0.000375 0.0001875 -0.0016875 0.00075 0.0001875 -0.001875 0.0005625 0.0001875 -0.0020625 0.0005625 0.0005625 -0.0020625 0.001125 0.0005625 -0.0015 0.0001875 0.00075 -0.0015 0.0005625 0.00075 -0.0015 0.0001875 0.000375 -0.0015 0.0001875 0.0005625 -0.0015 0.000375 0.0005625 -0.0015 0.0001875 0.000375 -0.001875 0.0001875 0.0005625 -0.0016875 0.000375 0.0005625 -0.0016875 0.0001875 0.000375 -0.0016875 0.0001875 0.00075 -0.001875 0.0001875 0.0005625 -0.0020625 0.0005625 0.001125 -0.0015 -0.0005625 -0.00225 -0.00075 -0.0001875 -0.00225 -0.00075 -0.0005625 -0.00225 -0.001125 -0.0005625 -0.002625 -0.001125 0 -0.0015 -0.0013125 0 -0.0015 -0.0009375 0 -0.001875 -0.0013125 -0.000375 -0.001875 -0.0013125 0 -0.0020625 -0.00075 0 -0.0016875 -0.00075 0 -0.0020625 -0.001125 -0.000375 -0.0020625 -0.001125 -0.0005625 -0.0020625 -0.00075 -0.0001875 -0.0016875 -0.00075 -0.0005625 -0.0020625 -0.001125 -0.000375 -0.0020625 -0.00075 -0.0001875 -0.0020625 -0.00075 -0.0001875 -0.001875 -0.00075 -0.0005625 -0.0020625 -0.0005625 -0.0001875 -0.0016875 -0.0001875 0 -0.0020625 -0.0005625 0 -0.0016875 -0.0001875 0 -0.0015 -0.0005625 0 -0.0015 -0.0001875 0 -0.001875 -0.0005625 0 -0.0016875 -0.0005625 0 -0.0016875 -0.000375 -0.000375 -0.001875 -0.0005625 -0.0001875 -0.0016875 -0.0005625 -0.0001875 -0.0016875 -0.000375 -0.000375 -0.0020625 -0.0005625 -0.0001875 -0.0020625 -0.0005625 -0.0001875 -0.001875 -0.000375 -0.0001875 -0.001875 -0.0005625 -0.0005625 -0.002625 -0.00075 0 -0.00225 -0.0005625 0 -0.00225 -0.0001875 0 -0.002625 -0.0005625 -0.000375 -0.002625 -0.0005625 -0.0005625 -0.00225 -0.0005625 -0.0001875 -0.00225 -0.0001875 -0.0005625 -0.002625 -0.0005625 -0.000375 -0.00225 -0.0005625 -0.0001875 -0.00225 -0.0005625 -0.0001875 -0.00225 -0.000375 0 -0.0020625 0 0 -0.0016875 0 0 -0.0020625 -0.000375 0 -0.0020625 -0.0001875 0 -0.001875 -0.0001875 -0.000375 -0.0020625 -0.000375 -0.0001875 -0.0020625 -0.0001875 -0.0001875 -0.001875 -0.0001875 -0.0001875 -0.0020625 -0.000375 -0.0013125 -0.0015 -0.0013125 -0.0009375 -0.0015 -0.0009375 -0.00075 -0.0015 -0.0013125 -0.00075 -0.0015 -0.0009375 -0.001125 -0.001875 -0.0013125 -0.0013125 -0.001875 -0.0013125 -0.0013125 -0.001875 -0.0015 -0.001125 -0.0015 -0.0013125 -0.0009375 -0.0015 -0.0013125 -0.0009375 -0.0015 -0.001125 -0.00075 -0.001875 -0.0013125 -0.00075 -0.0020625 -0.00075 -0.00075 -0.0016875 -0.00075 -0.00075 -0.0020625 -0.001125 -0.001125 -0.0020625 -0.001125 -0.0005625 -0.0015 -0.0013125 -0.0001875 -0.0015 -0.0009375 -0.0005625 -0.001875 -0.0013125 -0.0005625 -0.001875 -0.0015 -0.000375 -0.0015 -0.0013125 -0.0001875 -0.0015 -0.0013125 -0.0001875 -0.0015 -0.001125 -0.0005625 -0.0015 -0.00075 -0.0001875 -0.0015 -0.00075 -0.0005625 -0.001875 -0.001125 -0.0005625 -0.0015 -0.001125 -0.0005625 -0.0015 -0.0009375 -0.000375 -0.0015 -0.0009375 -0.0005625 -0.001875 -0.00075 -0.0005625 -0.0016875 -0.00075 -0.000375 -0.0016875 -0.00075 -0.0005625 -0.0015 -0.0005625 -0.0001875 -0.0015 -0.0001875 -0.000375 -0.0015 -0.0005625 -0.0001875 -0.0015 -0.0005625 -0.0001875 -0.0015 -0.000375 -0.0005625 -0.001875 -0.0005625 -0.0005625 -0.0016875 -0.0005625 -0.000375 -0.0016875 -0.000375 -0.000375 -0.0016875 -0.0005625 -0.0015 -0.0015 -0.0013125 -0.0015 -0.0015 -0.0009375 -0.0013125 -0.0015 -0.00075 -0.0009375 -0.0015 -0.00075 -0.0013125 -0.001875 -0.001125 -0.0015 -0.001875 -0.0013125 -0.0013125 -0.0015 -0.001125 -0.0013125 -0.0015 -0.0009375 -0.001125 -0.0015 -0.0009375 -0.0013125 -0.001875 -0.00075 -0.001125 -0.0020625 -0.00075 -0.0015 -0.0015 -0.0005625 -0.0015 -0.0015 -0.0001875 -0.0013125 -0.0015 -0.0005625 -0.0009375 -0.0015 -0.0001875 -0.0013125 -0.0015 0 -0.0009375 -0.0015 0 -0.0013125 -0.001875 -0.000375 -0.0013125 -0.001875 -0.0005625 -0.0015 -0.001875 -0.0005625 -0.0013125 -0.0015 -0.000375 -0.0013125 -0.0015 -0.0001875 -0.001125 -0.0015 -0.0001875 -0.00075 -0.0015 -0.0005625 -0.00075 -0.0015 -0.0001875 -0.001125 -0.001875 -0.0005625 -0.001125 -0.0015 -0.0005625 -0.0009375 -0.0015 -0.0005625 -0.0009375 -0.0015 -0.000375 -0.00075 -0.0020625 -0.0005625 -0.00075 -0.0016875 -0.0001875 -0.001125 -0.0020625 -0.0005625 -0.00075 -0.001875 -0.0005625 -0.00075 -0.0016875 -0.0005625 -0.00075 -0.0016875 -0.000375 -0.0005625 -0.0015 0 -0.0001875 -0.0015 0 -0.0005625 -0.0015 -0.000375 -0.0005625 -0.0015 -0.0001875 -0.000375 -0.0015 -0.0001875 -0.0005625 -0.001875 -0.000375 -0.0005625 -0.0016875 -0.0001875 -0.000375 -0.0016875 -0.0001875 -0.0005625 -0.0016875 -0.000375 -0.00075 -0.00225 -0.0005625 -0.00075 -0.00225 -0.0001875 -0.00075 -0.002625 -0.0005625 -0.001125 -0.002625 -0.0005625 -0.0005625 -0.00225 0 -0.0001875 -0.00225 0 -0.0005625 -0.002625 0 -0.0005625 -0.002625 -0.000375 -0.0005625 -0.00225 -0.000375 -0.0005625 -0.00225 -0.0001875 -0.000375 -0.00225 -0.0001875 -0.0005625 -0.0020625 0 -0.0001875 -0.0016875 0 -0.000375 -0.0020625 0 -0.0001875 -0.0020625 0 -0.0001875 -0.001875 0 -0.0005625 -0.0020625 -0.000375 -0.0005625 -0.0020625 -0.0001875 -0.000375 -0.001875 -0.0001875 -0.000375 -0.0020625 -0.0001875 -0.001125 -0.00225 -0.0005625 -0.0013125 -0.001875 0 -0.00075 -0.0020625 0 -0.00075 -0.0016875 0 -0.001125 -0.0020625 0 -0.001125 -0.0020625 -0.000375 -0.00075 -0.0020625 -0.000375 -0.00075 -0.0020625 -0.0001875 -0.00075 -0.001875 -0.0001875 -0.0005625 -0.001875 0 -0.0005625 -0.0016875 0 -0.000375 -0.0016875 0 -0.0005625 -0.001875 -0.0001875 0.0001875 -0.0015 -0.0013125 0.0005625 -0.0015 -0.0009375 0.00075 -0.0015 -0.0013125 0.00075 -0.0015 -0.0009375 0.000375 -0.001875 -0.0013125 0.0001875 -0.001875 -0.0013125 0.0001875 -0.001875 -0.0015 0.000375 -0.0015 -0.0013125 0.0005625 -0.0015 -0.0013125 0.0005625 -0.0015 -0.001125 0.0001875 -0.0015 -0.00075 0.0005625 -0.0015 -0.00075 0.0001875 -0.001875 -0.001125 0.0001875 -0.0015 -0.001125 0.0001875 -0.0015 -0.0009375 0.000375 -0.0015 -0.0009375 0.000375 -0.0016875 -0.00075 0.0001875 -0.0016875 -0.00075 0.0001875 -0.0020625 -0.0005625 0.0005625 -0.0016875 -0.0001875 0.0001875 -0.0015 -0.0005625 0.0005625 -0.0015 -0.0001875 0.0001875 -0.0015 0 0.0005625 -0.0015 0 0.0001875 -0.0015 -0.000375 0.0001875 -0.0015 -0.0001875 0.000375 -0.0015 -0.0001875 0.0001875 -0.001875 -0.000375 0.0001875 -0.0016875 -0.0001875 0.000375 -0.0016875 -0.0001875 0.0001875 -0.001875 -0.0005625 0.0001875 -0.0016875 -0.0005625 0.000375 -0.0016875 -0.000375 0.0001875 -0.0016875 -0.000375 0.00075 -0.0015 -0.0005625 0.00075 -0.0015 -0.0001875 0.0005625 -0.0016875 -0.0005625 0.000375 -0.0015 -0.0005625 0.0005625 -0.0015 -0.0005625 0.0005625 -0.0015 -0.000375 0.0005625 -0.0016875 -0.000375 0.000375 -0.0016875 -0.0005625 0.00075 -0.001875 -0.0005625 0.0005625 -0.0020625 -0.0005625 0.001125 -0.0015 -0.0001875 0.000375 -0.00225 -0.0001875 0.0001875 -0.0020625 0 0.0005625 -0.0016875 0 0.0001875 -0.001875 0 0.0001875 -0.0016875 0 0.000375 -0.0016875 0 0.0001875 -0.0020625 -0.000375 0.0001875 -0.0020625 -0.0001875 0.000375 -0.001875 -0.0001875 0.0001875 -0.001875 -0.0001875 0.0005625 -0.0020625 0 0.0005625 -0.0020625 -0.0001875 -0.0015 -0.0013125 -0.0013125 -0.0015 -0.0009375 -0.0009375 -0.0015 -0.00075 -0.0013125 -0.0015 -0.00075 -0.0009375 -0.001875 -0.001125 -0.0013125 -0.001875 -0.0013125 -0.0013125 -0.001875 -0.0013125 -0.0015 -0.0015 -0.001125 -0.0013125 -0.0015 -0.0009375 -0.0013125 -0.0015 -0.0009375 -0.001125 -0.001875 -0.00075 -0.0013125 -0.0020625 -0.00075 -0.00075 -0.0016875 -0.00075 -0.00075 -0.0020625 -0.00075 -0.001125 -0.0020625 -0.001125 -0.001125 -0.0015 -0.0005625 -0.0013125 -0.0015 -0.0001875 -0.0009375 -0.0015 0 -0.0013125 -0.0015 0 -0.0009375 -0.001875 -0.000375 -0.0013125 -0.001875 -0.0005625 -0.0013125 -0.001875 -0.0005625 -0.0015 -0.0015 -0.000375 -0.0013125 -0.0015 -0.0001875 -0.0013125 -0.0015 -0.0001875 -0.001125 -0.0015 -0.0005625 -0.00075 -0.0015 -0.0001875 -0.00075 -0.001875 -0.0005625 -0.001125 -0.0015 -0.0005625 -0.001125 -0.0015 -0.0005625 -0.0009375 -0.0015 -0.000375 -0.0009375 -0.0020625 -0.0005625 -0.00075 -0.0016875 -0.0001875 -0.00075 -0.0020625 -0.0005625 -0.001125 -0.001875 -0.0005625 -0.00075 -0.0016875 -0.0005625 -0.00075 -0.0016875 -0.000375 -0.00075 -0.0020625 -0.0005625 -0.0005625 -0.0016875 -0.0001875 -0.0001875 -0.0015 -0.0005625 -0.0005625 -0.0015 -0.0001875 -0.0001875 -0.0015 0 -0.0005625 -0.0015 0 -0.0001875 -0.0015 -0.000375 -0.0005625 -0.0015 -0.0001875 -0.0005625 -0.0015 -0.0001875 -0.000375 -0.001875 -0.000375 -0.0005625 -0.0016875 -0.0001875 -0.0005625 -0.0016875 -0.0001875 -0.000375 -0.001875 -0.0005625 -0.0005625 -0.0016875 -0.0005625 -0.0005625 -0.0016875 -0.000375 -0.000375 -0.0016875 -0.000375 -0.0005625 -0.0015 -0.0013125 -0.00075 -0.0015 -0.0009375 -0.00075 -0.001875 -0.0013125 -0.001125 -0.001875 -0.0015 -0.0013125 -0.0015 -0.0013125 -0.001125 -0.0015 -0.0013125 -0.0009375 -0.0015 -0.001125 -0.0009375 -0.001875 -0.0013125 -0.00075 -0.0020625 -0.001125 -0.00075 -0.0015 -0.0013125 -0.0005625 -0.0015 -0.0009375 -0.0001875 -0.0015 -0.0013125 0 -0.0015 -0.0009375 0 -0.001875 -0.0013125 -0.000375 -0.001875 -0.0013125 -0.0005625 -0.001875 -0.0015 -0.0005625 -0.0015 -0.0013125 -0.000375 -0.0015 -0.0013125 -0.0001875 -0.0015 -0.001125 -0.0001875 -0.0015 -0.00075 -0.0005625 -0.0015 -0.00075 -0.0001875 -0.001875 -0.001125 -0.0005625 -0.0015 -0.001125 -0.0005625 -0.0015 -0.0009375 -0.0005625 -0.0015 -0.0009375 -0.000375 -0.0020625 -0.00075 -0.0005625 -0.0016875 -0.00075 -0.0001875 -0.0020625 -0.001125 -0.0005625 -0.001875 -0.00075 -0.0005625 -0.0016875 -0.00075 -0.0005625 -0.0016875 -0.00075 -0.000375 -0.0015 -0.0005625 0 -0.0015 -0.0001875 0 -0.0015 -0.0005625 -0.000375 -0.0015 -0.0005625 -0.0001875 -0.0015 -0.000375 -0.0001875 -0.001875 -0.0005625 -0.000375 -0.0016875 -0.0005625 -0.0001875 -0.0016875 -0.000375 -0.0001875 -0.0016875 -0.0005625 -0.000375 -0.00225 -0.0005625 -0.00075 -0.00225 -0.0001875 -0.00075 -0.00225 -0.0005625 -0.001125 -0.002625 -0.0005625 -0.001125 -0.001875 0 -0.0013125 -0.0020625 0 -0.00075 -0.0016875 0 -0.00075 -0.0020625 0 -0.001125 -0.0020625 -0.000375 -0.001125 -0.0020625 -0.000375 -0.00075 -0.0020625 -0.0001875 -0.00075 -0.001875 -0.0001875 -0.00075 -0.0020625 0 -0.0005625 -0.0016875 0 -0.0001875 -0.001875 0 -0.0005625 -0.0016875 0 -0.0005625 -0.0016875 0 -0.000375 -0.0020625 -0.000375 -0.0005625 -0.0020625 -0.0001875 -0.0005625 -0.001875 -0.0001875 -0.000375 -0.001875 -0.0001875 -0.0005625 -0.002625 -0.0005625 -0.00075 -0.00225 0 -0.0005625 -0.00225 0 -0.0001875 -0.002625 0 -0.0005625 -0.002625 -0.000375 -0.0005625 -0.00225 -0.0005625 -0.0005625 -0.00225 -0.0001875 -0.0001875 -0.002625 -0.0005625 -0.0005625 -0.00225 -0.000375 -0.0005625 -0.00225 -0.0001875 -0.0005625 -0.00225 -0.0001875 -0.000375 -0.0020625 0 0 -0.0016875 0 0 -0.0020625 0 -0.000375 -0.0020625 0 -0.0001875 -0.001875 0 -0.0001875 -0.0020625 -0.000375 -0.000375 -0.0020625 -0.0001875 -0.0001875 -0.001875 -0.0001875 -0.0001875 -0.0020625 -0.0001875 -0.000375 -0.00225 -0.00075 -0.0005625 -0.00225 -0.00075 -0.0001875 -0.00225 -0.001125 -0.0005625 -0.002625 -0.001125 -0.0005625 -0.001875 -0.0013125 0 -0.0020625 -0.00075 0 -0.0016875 -0.00075 0 -0.0020625 -0.001125 0 -0.0020625 -0.001125 -0.000375 -0.0020625 -0.00075 -0.000375 -0.0020625 -0.00075 -0.0001875 -0.001875 -0.00075 -0.0001875 -0.0020625 -0.0005625 0 -0.0016875 -0.0001875 0 -0.001875 -0.0005625 0 -0.0016875 -0.0005625 0 -0.0016875 -0.000375 0 -0.0020625 -0.0005625 -0.000375 -0.0020625 -0.0005625 -0.0001875 -0.001875 -0.000375 -0.0001875 -0.001875 -0.0005625 -0.0001875 -0.002625 -0.00075 -0.0005625 -0.00225 -0.0005625 0 -0.00225 -0.0001875 0 -0.002625 -0.0005625 0 -0.002625 -0.0005625 -0.000375 -0.00225 -0.0005625 -0.000375 -0.00225 -0.0005625 -0.0001875 -0.00225 -0.000375 -0.0001875 -0.0020625 -0.000375 0 -0.0020625 -0.0001875 0 -0.001875 -0.0001875 0 -0.0020625 -0.000375 -0.0001875 -0.0013125 -0.0013125 -0.0013125 -0.0009375 -0.0009375 -0.0009375 -0.00075 -0.0013125 -0.0013125 -0.00075 -0.0009375 -0.0009375 -0.00075 -0.00075 -0.0013125 -0.00075 -0.00075 -0.0009375 -0.00075 -0.001125 -0.0013125 -0.00075 -0.0009375 -0.0013125 -0.00075 -0.0009375 -0.001125 -0.001125 -0.001125 -0.0013125 -0.0009375 -0.0009375 -0.0013125 -0.0009375 -0.0009375 -0.001125 -0.001125 -0.0013125 -0.0013125 -0.0009375 -0.0013125 -0.0013125 -0.0009375 -0.001125 -0.001125 -0.0009375 -0.001125 -0.0013125 -0.0005625 -0.0013125 -0.0013125 -0.0001875 -0.0009375 -0.0009375 0 -0.0013125 -0.0013125 0 -0.0009375 -0.0009375 0 -0.00075 -0.0013125 0 -0.00075 -0.0009375 0 -0.001125 -0.0013125 0 -0.0009375 -0.0013125 0 -0.0009375 -0.001125 -0.000375 -0.001125 -0.0013125 -0.0001875 -0.0009375 -0.0013125 -0.0001875 -0.0009375 -0.001125 -0.000375 -0.0013125 -0.0013125 -0.0001875 -0.0013125 -0.0013125 -0.0001875 -0.001125 -0.001125 -0.0001875 -0.001125 -0.0013125 -0.0005625 -0.00075 -0.0013125 -0.0001875 -0.00075 -0.0009375 -0.000375 -0.00075 -0.0013125 -0.0001875 -0.00075 -0.0013125 -0.0001875 -0.00075 -0.001125 -0.0005625 -0.001125 -0.0013125 -0.0005625 -0.0009375 -0.0013125 -0.000375 -0.0009375 -0.001125 -0.000375 -0.0009375 -0.0013125 -0.0005625 -0.00075 -0.00075 -0.0001875 -0.00075 -0.00075 -0.0005625 -0.00075 -0.001125 -0.0005625 -0.00075 -0.0009375 -0.000375 -0.00075 -0.0009375 -0.0005625 -0.001125 -0.001125 -0.0005625 -0.0009375 -0.0009375 -0.000375 -0.0009375 -0.0009375 -0.0005625 -0.0009375 -0.001125 -0.0005625 -0.0005625 -0.0013125 -0.0001875 -0.0001875 -0.0009375 0 -0.0005625 -0.0013125 0 -0.0001875 -0.0009375 0 0 -0.0013125 0 0 -0.0009375 0 -0.000375 -0.0013125 0 -0.0001875 -0.0013125 0 -0.0001875 -0.001125 -0.000375 -0.000375 -0.0013125 -0.0001875 -0.0001875 -0.0013125 -0.0001875 -0.0001875 -0.001125 -0.000375 -0.0005625 -0.0013125 -0.0001875 -0.0005625 -0.0013125 -0.0001875 -0.000375 -0.001125 -0.0001875 -0.000375 -0.0013125 0 -0.0005625 -0.00075 0 -0.0001875 -0.00075 0 -0.0005625 -0.001125 0 -0.0005625 -0.0009375 0 -0.000375 -0.0009375 -0.000375 -0.0005625 -0.001125 -0.0001875 -0.0005625 -0.0009375 -0.0001875 -0.000375 -0.0009375 -0.0001875 -0.0005625 -0.001125 -0.0005625 -0.0005625 -0.00075 -0.0001875 -0.0001875 -0.00075 -0.000375 -0.0005625 -0.00075 -0.0001875 -0.0005625 -0.00075 -0.0001875 -0.000375 -0.00075 -0.0005625 -0.0005625 -0.001125 -0.0005625 -0.0005625 -0.0009375 -0.000375 -0.000375 -0.0009375 -0.000375 -0.0005625 -0.0009375 -0.0005625 -0.0005625 -0.0005625 -0.0001875 -0.0001875 -0.0001875 0 -0.0005625 -0.0005625 0 -0.0001875 -0.0001875 0 0 -0.0005625 0 0 -0.0001875 0 -0.000375 -0.0005625 0 -0.0001875 -0.0005625 0 -0.0001875 -0.000375 -0.000375 -0.000375 -0.0005625 -0.0001875 -0.0001875 -0.0005625 -0.0001875 -0.0001875 -0.000375 -0.000375 -0.0005625 -0.0005625 -0.0001875 -0.0005625 -0.0005625 -0.0001875 -0.000375 -0.000375 -0.0001875 -0.000375 -0.0005625 -0.00075 -0.0013125 -0.00075 -0.00075 -0.0009375 -0.00075 -0.00075 -0.0013125 -0.001125 -0.00075 -0.0013125 -0.0009375 -0.00075 -0.001125 -0.0009375 -0.001125 -0.0013125 -0.001125 -0.0009375 -0.0013125 -0.0009375 -0.0009375 -0.001125 -0.0009375 -0.0009375 -0.0013125 -0.001125 0 -0.0013125 -0.00075 0 -0.0009375 -0.00075 0 -0.0013125 -0.001125 0 -0.0013125 -0.0009375 0 -0.001125 -0.0009375 -0.000375 -0.0013125 -0.001125 -0.0001875 -0.0013125 -0.0009375 -0.0001875 -0.001125 -0.0009375 -0.0001875 -0.0013125 -0.001125 -0.0005625 -0.0013125 -0.00075 -0.0001875 -0.0009375 -0.00075 -0.000375 -0.0013125 -0.00075 -0.0001875 -0.0013125 -0.00075 -0.0001875 -0.001125 -0.00075 -0.0005625 -0.0013125 -0.001125 -0.0005625 -0.0013125 -0.0009375 -0.000375 -0.001125 -0.0009375 -0.000375 -0.0013125 -0.0009375 -0.0005625 -0.001125 -0.00075 -0.0005625 -0.0009375 -0.00075 -0.000375 -0.0009375 -0.00075 -0.0005625 -0.001125 -0.0009375 -0.0005625 -0.0013125 -0.0005625 -0.0001875 -0.0009375 -0.0001875 0 -0.0013125 -0.0005625 0 -0.0009375 -0.0001875 0 -0.0013125 0 0 -0.0009375 0 0 -0.0013125 -0.000375 0 -0.0013125 -0.0001875 0 -0.001125 -0.0001875 -0.000375 -0.0013125 -0.000375 -0.0001875 -0.0013125 -0.0001875 -0.0001875 -0.001125 -0.0001875 -0.000375 -0.0013125 -0.0005625 -0.0001875 -0.0013125 -0.0005625 -0.0001875 -0.001125 -0.000375 -0.0001875 -0.0013125 -0.000375 0 -0.00075 -0.0005625 0 -0.00075 -0.0001875 0 -0.001125 -0.0005625 0 -0.0009375 -0.0005625 0 -0.0009375 -0.000375 -0.000375 -0.001125 -0.0005625 -0.0001875 -0.0009375 -0.0005625 -0.0001875 -0.0009375 -0.000375 -0.0001875 -0.001125 -0.0005625 -0.0005625 -0.00075 -0.0005625 -0.0001875 -0.00075 -0.0001875 -0.000375 -0.00075 -0.0005625 -0.0001875 -0.00075 -0.0005625 -0.0001875 -0.00075 -0.000375 -0.0005625 -0.001125 -0.0005625 -0.0005625 -0.0009375 -0.0005625 -0.000375 -0.0009375 -0.000375 -0.000375 -0.0009375 -0.0005625 0 -0.0005625 0 0 -0.0001875 0 0 -0.0005625 -0.000375 0 -0.0005625 -0.0001875 0 -0.000375 -0.0001875 -0.000375 -0.0005625 -0.000375 -0.0001875 -0.0005625 -0.0001875 -0.0001875 -0.000375 -0.0001875 -0.0001875 -0.0005625 -0.000375 -0.0013125 -0.00075 -0.0013125 -0.0009375 -0.00075 -0.0009375 -0.001125 -0.00075 -0.0013125 -0.0009375 -0.00075 -0.0013125 -0.0009375 -0.00075 -0.001125 -0.0013125 -0.001125 -0.0013125 -0.0013125 -0.0009375 -0.0013125 -0.001125 -0.0009375 -0.001125 -0.001125 -0.0009375 -0.0013125 -0.0013125 -0.0005625 -0.0013125 -0.0009375 -0.0001875 -0.0009375 -0.0013125 0 -0.0013125 -0.0009375 0 -0.0009375 -0.00075 0 -0.0013125 -0.00075 0 -0.0009375 -0.001125 0 -0.0013125 -0.0009375 0 -0.0013125 -0.0009375 0 -0.001125 -0.001125 -0.000375 -0.0013125 -0.0009375 -0.0001875 -0.0013125 -0.0009375 -0.0001875 -0.001125 -0.0013125 -0.000375 -0.0013125 -0.0013125 -0.0001875 -0.0013125 -0.001125 -0.0001875 -0.001125 -0.001125 -0.0001875 -0.0013125 -0.00075 -0.0005625 -0.0013125 -0.00075 -0.0001875 -0.0009375 -0.00075 -0.000375 -0.0013125 -0.00075 -0.0001875 -0.0013125 -0.00075 -0.0001875 -0.001125 -0.001125 -0.0005625 -0.0013125 -0.0009375 -0.0005625 -0.0013125 -0.0009375 -0.000375 -0.001125 -0.0009375 -0.000375 -0.0013125 -0.00075 -0.0005625 -0.00075 -0.00075 -0.0001875 -0.00075 -0.00075 -0.0005625 -0.001125 -0.00075 -0.0005625 -0.0009375 -0.00075 -0.000375 -0.0009375 -0.001125 -0.0005625 -0.001125 -0.0009375 -0.0005625 -0.0009375 -0.0009375 -0.000375 -0.0009375 -0.0009375 -0.0005625 -0.001125 -0.0005625 0 -0.0013125 -0.0001875 0 -0.0009375 -0.000375 0 -0.0013125 -0.0001875 0 -0.0013125 -0.0001875 0 -0.001125 -0.0005625 -0.000375 -0.0013125 -0.0005625 -0.0001875 -0.0013125 -0.000375 -0.0001875 -0.001125 -0.000375 -0.0001875 -0.0013125 -0.0005625 0 -0.00075 -0.0001875 0 -0.00075 -0.0005625 0 -0.001125 -0.0005625 0 -0.0009375 -0.000375 0 -0.0009375 -0.0005625 -0.000375 -0.001125 -0.0005625 -0.0001875 -0.0009375 -0.000375 -0.0001875 -0.0009375 -0.0005625 -0.0001875 -0.001125 -0.0005625 -0.000375 -0.00075 -0.0005625 -0.0001875 -0.00075 -0.000375 -0.0001875 -0.00075 -0.0005625 -0.000375 -0.0009375 -0.0005625 0 -0.0005625 -0.0001875 0 -0.0001875 -0.000375 0 -0.0005625 -0.0001875 0 -0.0005625 -0.0001875 0 -0.000375 -0.0005625 -0.000375 -0.0005625 -0.0005625 -0.0001875 -0.0005625 -0.000375 -0.0001875 -0.000375 -0.000375 -0.0001875 -0.0005625 -0.0013125 -0.00075 -0.00075 -0.0009375 -0.00075 -0.00075 -0.0013125 -0.00075 -0.001125 -0.0013125 -0.00075 -0.0009375 -0.001125 -0.00075 -0.0009375 -0.0013125 -0.001125 -0.001125 -0.0013125 -0.0009375 -0.0009375 -0.001125 -0.0009375 -0.0009375 -0.0013125 -0.0009375 -0.001125 -0.0013125 0 -0.00075 -0.0009375 0 -0.00075 -0.0013125 0 -0.001125 -0.0013125 0 -0.0009375 -0.001125 0 -0.0009375 -0.0013125 -0.000375 -0.001125 -0.0013125 -0.0001875 -0.0009375 -0.001125 -0.0001875 -0.0009375 -0.0013125 -0.0001875 -0.001125 -0.0013125 -0.0005625 -0.00075 -0.0009375 -0.0001875 -0.00075 -0.0013125 -0.000375 -0.00075 -0.0013125 -0.0001875 -0.00075 -0.001125 -0.0001875 -0.00075 -0.0013125 -0.0005625 -0.001125 -0.0013125 -0.0005625 -0.0009375 -0.001125 -0.000375 -0.0009375 -0.0013125 -0.000375 -0.0009375 -0.001125 -0.0005625 -0.00075 -0.0009375 -0.0005625 -0.00075 -0.0009375 -0.000375 -0.00075 -0.001125 -0.0005625 -0.0009375 -0.0013125 -0.0005625 -0.0005625 -0.0009375 -0.0001875 -0.0001875 -0.0013125 0 -0.0005625 -0.0009375 0 -0.0001875 -0.0013125 0 0 -0.0009375 0 0 -0.0013125 0 -0.000375 -0.0013125 0 -0.0001875 -0.001125 0 -0.0001875 -0.0013125 -0.000375 -0.000375 -0.0013125 -0.0001875 -0.0001875 -0.001125 -0.0001875 -0.0001875 -0.0013125 -0.000375 -0.0005625 -0.0013125 -0.0001875 -0.0005625 -0.001125 -0.0001875 -0.000375 -0.0013125 -0.0001875 -0.000375 -0.00075 0 -0.0005625 -0.00075 0 -0.0001875 -0.001125 0 -0.0005625 -0.0009375 0 -0.0005625 -0.0009375 0 -0.000375 -0.001125 -0.000375 -0.0005625 -0.0009375 -0.0001875 -0.0005625 -0.0009375 -0.0001875 -0.000375 -0.001125 -0.0001875 -0.0005625 -0.00075 -0.0005625 -0.0005625 -0.00075 -0.0001875 -0.0001875 -0.00075 -0.000375 -0.0005625 -0.00075 -0.0001875 -0.0005625 -0.00075 -0.0001875 -0.000375 -0.001125 -0.0005625 -0.0005625 -0.0009375 -0.0005625 -0.0005625 -0.0009375 -0.000375 -0.000375 -0.0009375 -0.000375 -0.0005625 -0.0005625 0 0 -0.0001875 0 0 -0.0005625 0 -0.000375 -0.0005625 0 -0.0001875 -0.000375 0 -0.0001875 -0.0005625 -0.000375 -0.000375 -0.0005625 -0.0001875 -0.0001875 -0.000375 -0.0001875 -0.0001875 -0.0005625 -0.0001875 -0.000375 -0.0013125 -0.0013125 -0.00075 -0.0009375 -0.0009375 -0.00075 -0.001125 -0.0013125 -0.00075 -0.0009375 -0.0013125 -0.00075 -0.0009375 -0.001125 -0.00075 -0.0013125 -0.0013125 -0.001125 -0.0013125 -0.0013125 -0.0009375 -0.001125 -0.001125 -0.0009375 -0.001125 -0.0013125 -0.0009375 -0.0013125 -0.0013125 -0.0005625 -0.0009375 -0.0009375 -0.0001875 -0.0013125 -0.0013125 0 -0.0009375 -0.0009375 0 -0.00075 -0.0013125 0 -0.00075 -0.0009375 0 -0.001125 -0.0013125 0 -0.0009375 -0.0013125 0 -0.0009375 -0.001125 0 -0.001125 -0.0013125 -0.000375 -0.0009375 -0.0013125 -0.0001875 -0.0009375 -0.001125 -0.0001875 -0.0013125 -0.0013125 -0.000375 -0.0013125 -0.0013125 -0.0001875 -0.001125 -0.001125 -0.0001875 -0.001125 -0.0013125 -0.0001875 -0.00075 -0.0013125 -0.0005625 -0.00075 -0.0009375 -0.0001875 -0.00075 -0.0013125 -0.000375 -0.00075 -0.0013125 -0.0001875 -0.00075 -0.001125 -0.0001875 -0.001125 -0.0013125 -0.0005625 -0.0009375 -0.0013125 -0.0005625 -0.0009375 -0.001125 -0.000375 -0.0009375 -0.0013125 -0.000375 -0.00075 -0.00075 -0.0005625 -0.00075 -0.00075 -0.0001875 -0.00075 -0.001125 -0.0005625 -0.00075 -0.0009375 -0.0005625 -0.00075 -0.0009375 -0.000375 -0.001125 -0.001125 -0.0005625 -0.0009375 -0.0009375 -0.0005625 -0.0009375 -0.0009375 -0.000375 -0.0009375 -0.001125 -0.0005625 -0.0005625 -0.0013125 0 -0.0001875 -0.0009375 0 -0.000375 -0.0013125 0 -0.0001875 -0.0013125 0 -0.0001875 -0.001125 0 -0.0005625 -0.0013125 -0.000375 -0.0005625 -0.0013125 -0.0001875 -0.000375 -0.001125 -0.0001875 -0.000375 -0.0013125 -0.0001875 -0.0005625 -0.00075 0 -0.0001875 -0.00075 0 -0.0005625 -0.001125 0 -0.0005625 -0.0009375 0 -0.000375 -0.0009375 0 -0.0005625 -0.001125 -0.000375 -0.0005625 -0.0009375 -0.0001875 -0.000375 -0.0009375 -0.0001875 -0.0005625 -0.001125 -0.0001875 -0.0005625 -0.00075 -0.000375 -0.0005625 -0.00075 -0.0001875 -0.000375 -0.00075 -0.0001875 -0.0005625 -0.0009375 -0.000375 -0.0005625 -0.0005625 0 -0.0001875 -0.0001875 0 -0.000375 -0.0005625 0 -0.0001875 -0.0005625 0 -0.0001875 -0.000375 0 -0.0005625 -0.0005625 -0.000375 -0.0005625 -0.0005625 -0.0001875 -0.000375 -0.000375 -0.0001875 -0.000375 -0.0005625 -0.0001875 -0.0013125 -0.001125 -0.00075 -0.0013125 -0.0009375 -0.00075 -0.001125 -0.0009375 -0.00075 -0.0013125 -0.001125 -0.0009375 -0.0013125 -0.00075 0 -0.0009375 -0.00075 0 -0.0013125 -0.001125 0 -0.0013125 -0.0009375 0 -0.001125 -0.0009375 0 -0.0013125 -0.001125 -0.000375 -0.0013125 -0.0009375 -0.0001875 -0.001125 -0.0009375 -0.0001875 -0.0013125 -0.001125 -0.0001875 -0.0013125 -0.00075 -0.0005625 -0.0009375 -0.00075 -0.0001875 -0.0013125 -0.00075 -0.000375 -0.0013125 -0.00075 -0.0001875 -0.001125 -0.00075 -0.0001875 -0.0013125 -0.001125 -0.0005625 -0.0013125 -0.0009375 -0.0005625 -0.001125 -0.0009375 -0.000375 -0.0013125 -0.0009375 -0.000375 -0.001125 -0.00075 -0.0005625 -0.0009375 -0.00075 -0.0005625 -0.0009375 -0.00075 -0.000375 -0.001125 -0.0009375 -0.0005625 -0.0013125 -0.0005625 0 -0.0009375 -0.0001875 0 -0.0013125 -0.000375 0 -0.0013125 -0.0001875 0 -0.001125 -0.0001875 0 -0.0013125 -0.0005625 -0.000375 -0.0013125 -0.0005625 -0.0001875 -0.001125 -0.000375 -0.0001875 -0.0013125 -0.000375 -0.0001875 -0.00075 -0.0005625 0 -0.00075 -0.0001875 0 -0.001125 -0.0005625 0 -0.0009375 -0.0005625 0 -0.0009375 -0.000375 0 -0.001125 -0.0005625 -0.000375 -0.0009375 -0.0005625 -0.0001875 -0.0009375 -0.000375 -0.0001875 -0.001125 -0.0005625 -0.0001875 -0.00075 -0.0005625 -0.000375 -0.00075 -0.0005625 -0.0001875 -0.00075 -0.000375 -0.0001875 -0.0009375 -0.0005625 -0.000375 -0.0005625 -0.000375 0 -0.0005625 -0.0001875 0 -0.000375 -0.0001875 0 -0.0005625 -0.000375 -0.0001875 0.0001875 -0.0013125 -0.0013125 0.0005625 -0.0009375 -0.0009375 0.00075 -0.0013125 -0.0013125 0.00075 -0.0009375 -0.0009375 0.00075 -0.00075 -0.0013125 0.00075 -0.00075 -0.0009375 0.00075 -0.001125 -0.0013125 0.00075 -0.0009375 -0.0013125 0.00075 -0.0009375 -0.001125 0.000375 -0.001125 -0.0013125 0.0005625 -0.0009375 -0.0013125 0.0005625 -0.0009375 -0.001125 0.000375 -0.0013125 -0.0013125 0.0005625 -0.0013125 -0.0013125 0.0005625 -0.001125 -0.001125 0.0005625 -0.001125 -0.0013125 0.0009375 -0.0013125 -0.0013125 0.0013125 -0.0009375 -0.0009375 0.0013125 -0.0009375 -0.0013125 0.0013125 -0.0013125 -0.0013125 0.0009375 -0.00075 -0.0013125 0.0013125 -0.00075 -0.0009375 0.0013125 -0.00075 -0.0013125 0.001125 -0.0009375 -0.0015 0.0009375 -0.001125 -0.0013125 0.0009375 -0.0009375 -0.0013125 0.001125 -0.0009375 -0.001125 0.0009375 -0.00075 -0.00075 0.0013125 -0.00075 -0.00075 0.0009375 -0.00075 -0.001125 0.0009375 -0.00075 -0.0009375 0.001125 -0.00075 -0.0009375 0.0009375 -0.001125 -0.001125 0.0009375 -0.0009375 -0.0009375 0.001125 -0.0009375 -0.0009375 0.0009375 -0.0009375 -0.001125 0.0009375 -0.0005625 -0.0013125 0.0013125 -0.0001875 -0.0009375 0.0013125 -0.0001875 -0.0013125 0.0013125 -0.0005625 -0.0013125 0.0015 -0.0005625 -0.00075 0.0015 -0.0001875 -0.00075 0.0015 -0.0005625 -0.001125 0.001125 -0.0005625 -0.001125 0.0013125 -0.0005625 -0.0009375 0.0013125 -0.000375 -0.0009375 0.0009375 -0.0005625 -0.00075 0.0013125 -0.0001875 -0.00075 0.001125 -0.0005625 -0.00075 0.0013125 -0.0005625 -0.00075 0.0013125 -0.000375 -0.00075 0.0009375 -0.0005625 -0.001125 0.0009375 -0.0005625 -0.0009375 0.001125 -0.000375 -0.0009375 0.001125 -0.0005625 -0.0009375 0.0009375 -0.0005625 -0.0005625 0.0013125 -0.0001875 -0.0001875 0.0015 -0.0005625 -0.0005625 0.0015 -0.0001875 -0.0001875 0.0015 0 -0.0005625 0.0015 0 -0.0001875 0.0015 -0.000375 -0.0005625 0.0015 -0.0001875 -0.0005625 0.0015 -0.0001875 -0.000375 0.001125 -0.000375 -0.0005625 0.0013125 -0.0001875 -0.0005625 0.0013125 -0.0001875 -0.000375 0.001125 -0.0005625 -0.0005625 0.0013125 -0.0005625 -0.0005625 0.0013125 -0.000375 -0.000375 0.0013125 -0.000375 -0.0005625 0.00075 -0.0013125 -0.00075 0.00075 -0.0009375 -0.00075 0.00075 -0.0013125 -0.001125 0.00075 -0.0013125 -0.0009375 0.00075 -0.001125 -0.0009375 0.000375 -0.0013125 -0.001125 0.0005625 -0.0013125 -0.0009375 0.0005625 -0.001125 -0.0009375 0.0005625 -0.0013125 -0.001125 0.0013125 -0.0013125 -0.0009375 0.0009375 -0.0013125 -0.00075 0.0013125 -0.0009375 -0.00075 0.0013125 -0.0013125 -0.00075 0.001125 -0.0015 -0.0009375 0.0009375 -0.0013125 -0.001125 0.0009375 -0.0013125 -0.0009375 0.001125 -0.001125 -0.0009375 0.0009375 -0.001125 -0.00075 0.0009375 -0.0009375 -0.00075 0.001125 -0.0009375 -0.00075 0.0009375 -0.001125 -0.0009375 0.0009375 -0.0013125 -0.0005625 0.0013125 -0.0009375 -0.0001875 0.0013125 -0.0013125 -0.0001875 0.0013125 -0.0013125 -0.0005625 0.0015 -0.00075 -0.0005625 0.0015 -0.00075 -0.0001875 0.0015 -0.001125 -0.0005625 0.001125 -0.001125 -0.0005625 0.0013125 -0.0009375 -0.0005625 0.0013125 -0.0009375 -0.000375 0.0009375 -0.00075 -0.0005625 0.0013125 -0.00075 -0.0001875 0.001125 -0.00075 -0.0005625 0.0013125 -0.00075 -0.0005625 0.0013125 -0.00075 -0.000375 0.0009375 -0.001125 -0.0005625 0.0009375 -0.0009375 -0.0005625 0.001125 -0.0009375 -0.000375 0.001125 -0.0009375 -0.0005625 0.0015 -0.0005625 0 0.0015 -0.0001875 0 0.0015 -0.0005625 -0.000375 0.0015 -0.0005625 -0.0001875 0.0015 -0.000375 -0.0001875 0.001125 -0.0005625 -0.000375 0.0013125 -0.0005625 -0.0001875 0.0013125 -0.000375 -0.0001875 0.0013125 -0.0005625 -0.000375 0.0001875 -0.00075 -0.0013125 0.0005625 -0.00075 -0.0009375 0.000375 -0.00075 -0.0013125 0.0005625 -0.00075 -0.0013125 0.0005625 -0.00075 -0.001125 0.0001875 -0.001125 -0.0013125 0.0001875 -0.0009375 -0.0013125 0.000375 -0.0009375 -0.001125 0.000375 -0.0009375 -0.0013125 0.0001875 -0.0005625 -0.0013125 0.0005625 -0.0001875 -0.0009375 0.0001875 0 -0.0013125 0.0005625 0 -0.0009375 0.00075 0 -0.0013125 0.00075 0 -0.0009375 0.000375 0 -0.0013125 0.0005625 0 -0.0013125 0.0005625 0 -0.001125 0.000375 -0.000375 -0.0013125 0.0005625 -0.0001875 -0.0013125 0.0005625 -0.0001875 -0.001125 0.0001875 -0.000375 -0.0013125 0.0001875 -0.0001875 -0.0013125 0.000375 -0.0001875 -0.001125 0.000375 -0.0001875 -0.0013125 0.00075 -0.0005625 -0.0013125 0.00075 -0.0001875 -0.0009375 0.00075 -0.000375 -0.0013125 0.00075 -0.0001875 -0.0013125 0.00075 -0.0001875 -0.001125 0.000375 -0.0005625 -0.0013125 0.0005625 -0.0005625 -0.0013125 0.0005625 -0.000375 -0.001125 0.0005625 -0.000375 -0.0013125 0.00075 -0.0005625 -0.00075 0.00075 -0.0001875 -0.00075 0.00075 -0.0005625 -0.001125 0.00075 -0.0005625 -0.0009375 0.00075 -0.000375 -0.0009375 0.000375 -0.0005625 -0.001125 0.0005625 -0.0005625 -0.0009375 0.0005625 -0.000375 -0.0009375 0.0005625 -0.0005625 -0.001125 0.0009375 0 -0.0013125 0.0013125 0 -0.0009375 0.0013125 0 -0.0013125 0.0009375 -0.000375 -0.0013125 0.0009375 -0.0001875 -0.0013125 0.001125 -0.0001875 -0.001125 0.0009375 0 -0.00075 0.0013125 0 -0.00075 0.0009375 0 -0.001125 0.0009375 0 -0.0009375 0.001125 0 -0.0009375 0.0009375 -0.000375 -0.001125 0.0009375 -0.0001875 -0.0009375 0.001125 -0.0001875 -0.0009375 0.0009375 -0.0001875 -0.001125 0.0009375 -0.000375 -0.00075 0.0009375 -0.0001875 -0.00075 0.001125 -0.0001875 -0.00075 0.0009375 -0.000375 -0.0009375 0.0009375 0 -0.0005625 0.0013125 0 -0.0001875 0.001125 0 -0.0005625 0.0013125 0 -0.0005625 0.0013125 0 -0.000375 0.0009375 -0.000375 -0.0005625 0.0009375 -0.0001875 -0.0005625 0.001125 -0.0001875 -0.000375 0.001125 -0.0001875 -0.0005625 0.0001875 -0.00075 -0.00075 0.0005625 -0.00075 -0.00075 0.0001875 -0.00075 -0.001125 0.0001875 -0.00075 -0.0009375 0.000375 -0.00075 -0.0009375 0.0001875 -0.001125 -0.001125 0.0001875 -0.0009375 -0.0009375 0.000375 -0.0009375 -0.0009375 0.0001875 -0.0009375 -0.001125 0.0001875 0 -0.00075 0.0005625 0 -0.00075 0.0001875 0 -0.001125 0.0001875 0 -0.0009375 0.000375 0 -0.0009375 0.0001875 -0.000375 -0.001125 0.0001875 -0.0001875 -0.0009375 0.000375 -0.0001875 -0.0009375 0.0001875 -0.0001875 -0.001125 0.0001875 -0.0005625 -0.00075 0.0005625 -0.0001875 -0.00075 0.0001875 -0.000375 -0.00075 0.0001875 -0.0001875 -0.00075 0.000375 -0.0001875 -0.00075 0.0001875 -0.0005625 -0.001125 0.0001875 -0.0005625 -0.0009375 0.000375 -0.000375 -0.0009375 0.0001875 -0.000375 -0.0009375 0.000375 -0.0005625 -0.00075 0.0005625 -0.0005625 -0.00075 0.0005625 -0.000375 -0.00075 0.000375 -0.0005625 -0.0009375 0.0001875 -0.0005625 -0.0005625 0.0005625 -0.0001875 -0.0001875 0.0001875 0 -0.0005625 0.0005625 0 -0.0001875 0.0001875 0 0 0.0005625 0 0 0.0001875 0 -0.000375 0.0001875 0 -0.0001875 0.000375 0 -0.0001875 0.0001875 -0.000375 -0.000375 0.0001875 -0.0001875 -0.0001875 0.000375 -0.0001875 -0.0001875 0.0001875 -0.000375 -0.0005625 0.0001875 -0.0001875 -0.0005625 0.000375 -0.0001875 -0.000375 0.0001875 -0.0001875 -0.000375 0.00075 0 -0.0005625 0.00075 0 -0.0001875 0.000375 0 -0.0005625 0.0005625 0 -0.0005625 0.0005625 0 -0.000375 0.000375 -0.000375 -0.0005625 0.0005625 -0.0001875 -0.0005625 0.0005625 -0.0001875 -0.000375 0.000375 -0.0001875 -0.0005625 0.00075 -0.0005625 -0.0005625 0.00075 -0.0001875 -0.0001875 0.00075 -0.000375 -0.0005625 0.00075 -0.0001875 -0.0005625 0.00075 -0.0001875 -0.000375 0.000375 -0.0005625 -0.0005625 0.0005625 -0.0005625 -0.0005625 0.0005625 -0.000375 -0.000375 0.0005625 -0.000375 -0.0005625 0.0009375 0 0 0.0013125 0 0 0.0009375 0 -0.000375 0.0009375 0 -0.0001875 0.001125 0 -0.0001875 0.0009375 -0.000375 -0.000375 0.0009375 -0.0001875 -0.0001875 0.001125 -0.0001875 -0.0001875 0.0009375 -0.0001875 -0.000375 0.0001875 -0.0013125 -0.00075 0.0005625 -0.0009375 -0.00075 0.000375 -0.0013125 -0.00075 0.0005625 -0.0013125 -0.00075 0.0005625 -0.001125 -0.00075 0.0001875 -0.0013125 -0.001125 0.0001875 -0.0013125 -0.0009375 0.000375 -0.001125 -0.0009375 0.000375 -0.0013125 -0.0009375 0.0001875 -0.0013125 -0.0005625 0.0005625 -0.0009375 -0.0001875 0.0001875 -0.0013125 0 0.0005625 -0.0009375 0 0.00075 -0.0013125 0 0.00075 -0.0009375 0 0.000375 -0.0013125 0 0.0005625 -0.0013125 0 0.0005625 -0.001125 0 0.000375 -0.0013125 -0.000375 0.0005625 -0.0013125 -0.0001875 0.0005625 -0.001125 -0.0001875 0.0001875 -0.0013125 -0.000375 0.0001875 -0.0013125 -0.0001875 0.000375 -0.001125 -0.0001875 0.000375 -0.0013125 -0.0001875 0.00075 -0.0013125 -0.0005625 0.00075 -0.0009375 -0.0001875 0.00075 -0.0013125 -0.000375 0.00075 -0.0013125 -0.0001875 0.00075 -0.001125 -0.0001875 0.000375 -0.0013125 -0.0005625 0.0005625 -0.0013125 -0.0005625 0.0005625 -0.001125 -0.000375 0.0005625 -0.0013125 -0.000375 0.00075 -0.00075 -0.0005625 0.00075 -0.00075 -0.0001875 0.00075 -0.001125 -0.0005625 0.00075 -0.0009375 -0.0005625 0.00075 -0.0009375 -0.000375 0.000375 -0.001125 -0.0005625 0.0005625 -0.0009375 -0.0005625 0.0005625 -0.0009375 -0.000375 0.0005625 -0.001125 -0.0005625 0.0009375 -0.0013125 0 0.0013125 -0.0009375 0 0.0013125 -0.0013125 0 0.0009375 -0.0013125 -0.000375 0.0009375 -0.0013125 -0.0001875 0.001125 -0.001125 -0.0001875 0.0009375 -0.00075 0 0.0013125 -0.00075 0 0.0009375 -0.001125 0 0.0009375 -0.0009375 0 0.001125 -0.0009375 0 0.0009375 -0.001125 -0.000375 0.0009375 -0.0009375 -0.0001875 0.001125 -0.0009375 -0.0001875 0.0009375 -0.001125 -0.0001875 0.0009375 -0.00075 -0.000375 0.0009375 -0.00075 -0.0001875 0.001125 -0.00075 -0.0001875 0.0009375 -0.0009375 -0.000375 0.0009375 -0.0005625 0 0.0013125 -0.0001875 0 0.001125 -0.0005625 0 0.0013125 -0.0005625 0 0.0013125 -0.000375 0 0.0009375 -0.0005625 -0.000375 0.0009375 -0.0005625 -0.0001875 0.001125 -0.000375 -0.0001875 0.001125 -0.0005625 -0.0001875 0.0001875 -0.001125 -0.00075 0.0001875 -0.0009375 -0.00075 0.000375 -0.0009375 -0.00075 0.0001875 -0.001125 -0.0009375 0.0001875 -0.00075 0 0.0005625 -0.00075 0 0.0001875 -0.001125 0 0.0001875 -0.0009375 0 0.000375 -0.0009375 0 0.0001875 -0.001125 -0.000375 0.0001875 -0.0009375 -0.0001875 0.000375 -0.0009375 -0.0001875 0.0001875 -0.001125 -0.0001875 0.0001875 -0.00075 -0.0005625 0.0005625 -0.00075 -0.0001875 0.0001875 -0.00075 -0.000375 0.0001875 -0.00075 -0.0001875 0.000375 -0.00075 -0.0001875 0.0001875 -0.001125 -0.0005625 0.0001875 -0.0009375 -0.0005625 0.000375 -0.0009375 -0.000375 0.0001875 -0.0009375 -0.000375 0.000375 -0.00075 -0.0005625 0.0005625 -0.00075 -0.0005625 0.0005625 -0.00075 -0.000375 0.000375 -0.0009375 -0.0005625 0.0001875 -0.0005625 0 0.0005625 -0.0001875 0 0.0001875 -0.000375 0 0.0001875 -0.0001875 0 0.000375 -0.0001875 0 0.0001875 -0.0005625 -0.000375 0.0001875 -0.0005625 -0.0001875 0.000375 -0.000375 -0.0001875 0.0001875 -0.000375 -0.0001875 0.00075 -0.0005625 0 0.00075 -0.0001875 0 0.000375 -0.0005625 0 0.0005625 -0.0005625 0 0.0005625 -0.000375 0 0.000375 -0.0005625 -0.000375 0.0005625 -0.0005625 -0.0001875 0.0005625 -0.000375 -0.0001875 0.000375 -0.0005625 -0.0001875 0.00075 -0.0005625 -0.000375 0.00075 -0.0005625 -0.0001875 0.00075 -0.000375 -0.0001875 0.0005625 -0.0005625 -0.000375 0.0009375 -0.000375 0 0.0009375 -0.0001875 0 0.001125 -0.0001875 0 0.0009375 -0.000375 -0.0001875 -0.0015 0.0001875 -0.0013125 -0.0015 0.0005625 -0.0009375 -0.0015 0.00075 -0.0013125 -0.0015 0.00075 -0.0009375 -0.001875 0.000375 -0.0013125 -0.001875 0.0001875 -0.0013125 -0.001875 0.0001875 -0.0015 -0.0015 0.000375 -0.0013125 -0.0015 0.0005625 -0.0013125 -0.0015 0.0005625 -0.001125 -0.0015 0.0001875 -0.00075 -0.0015 0.0005625 -0.00075 -0.001875 0.0001875 -0.001125 -0.0015 0.0001875 -0.001125 -0.0015 0.0001875 -0.0009375 -0.0015 0.000375 -0.0009375 -0.0016875 0.000375 -0.00075 -0.0016875 0.0001875 -0.00075 -0.0020625 0.0001875 -0.0005625 -0.0016875 0.0005625 -0.0001875 -0.0015 0.0001875 -0.0005625 -0.0015 0.0005625 -0.0001875 -0.0015 0.0001875 0 -0.0015 0.0005625 0 -0.0015 0.0001875 -0.000375 -0.0015 0.0001875 -0.0001875 -0.0015 0.000375 -0.0001875 -0.001875 0.0001875 -0.000375 -0.0016875 0.0001875 -0.0001875 -0.0016875 0.000375 -0.0001875 -0.001875 0.0001875 -0.0005625 -0.0016875 0.0001875 -0.0005625 -0.0016875 0.000375 -0.000375 -0.0016875 0.0001875 -0.000375 -0.0015 0.00075 -0.0005625 -0.0015 0.00075 -0.0001875 -0.0016875 0.0005625 -0.0005625 -0.0015 0.000375 -0.0005625 -0.0015 0.0005625 -0.0005625 -0.0015 0.0005625 -0.000375 -0.0016875 0.0005625 -0.000375 -0.0016875 0.000375 -0.0005625 -0.001875 0.00075 -0.0005625 -0.0020625 0.0005625 -0.0005625 -0.0015 0.001125 -0.0001875 -0.00225 0.000375 -0.0001875 -0.0020625 0.0001875 0 -0.0016875 0.0005625 0 -0.001875 0.0001875 0 -0.0016875 0.0001875 0 -0.0016875 0.000375 0 -0.0020625 0.0001875 -0.000375 -0.0020625 0.0001875 -0.0001875 -0.001875 0.000375 -0.0001875 -0.001875 0.0001875 -0.0001875 -0.0020625 0.0005625 0 -0.0020625 0.0005625 -0.0001875 -0.0013125 0.0001875 -0.0013125 -0.0009375 0.0005625 -0.0009375 -0.00075 0.0001875 -0.0013125 -0.00075 0.0005625 -0.0009375 -0.00075 0.00075 -0.0013125 -0.00075 0.00075 -0.0009375 -0.00075 0.000375 -0.0013125 -0.00075 0.0005625 -0.0013125 -0.00075 0.0005625 -0.001125 -0.001125 0.000375 -0.0013125 -0.0009375 0.0005625 -0.0013125 -0.0009375 0.0005625 -0.001125 -0.001125 0.0001875 -0.0013125 -0.0009375 0.0001875 -0.0013125 -0.0009375 0.000375 -0.001125 -0.0009375 0.000375 -0.0013125 -0.0005625 0.0001875 -0.0013125 -0.0001875 0.0005625 -0.0009375 0 0.0001875 -0.0013125 0 0.0005625 -0.0009375 0 0.00075 -0.0013125 0 0.00075 -0.0009375 0 0.000375 -0.0013125 0 0.0005625 -0.0013125 0 0.0005625 -0.001125 -0.000375 0.000375 -0.0013125 -0.0001875 0.0005625 -0.0013125 -0.0001875 0.0005625 -0.001125 -0.000375 0.0001875 -0.0013125 -0.0001875 0.0001875 -0.0013125 -0.0001875 0.000375 -0.001125 -0.0001875 0.000375 -0.0013125 -0.0005625 0.00075 -0.0013125 -0.0001875 0.00075 -0.0009375 -0.000375 0.00075 -0.0013125 -0.0001875 0.00075 -0.0013125 -0.0001875 0.00075 -0.001125 -0.0005625 0.000375 -0.0013125 -0.0005625 0.0005625 -0.0013125 -0.000375 0.0005625 -0.001125 -0.000375 0.0005625 -0.0013125 -0.0005625 0.00075 -0.00075 -0.0001875 0.00075 -0.00075 -0.0005625 0.00075 -0.001125 -0.0005625 0.00075 -0.0009375 -0.000375 0.00075 -0.0009375 -0.0005625 0.000375 -0.001125 -0.0005625 0.0005625 -0.0009375 -0.000375 0.0005625 -0.0009375 -0.0005625 0.0005625 -0.001125 -0.0005625 0.0009375 -0.0013125 -0.0001875 0.0013125 -0.0009375 0 0.0009375 -0.0013125 0 0.0013125 -0.0009375 0 0.0013125 -0.0013125 -0.0001875 0.0013125 -0.0013125 -0.000375 0.0009375 -0.0013125 -0.0001875 0.0009375 -0.0013125 -0.0001875 0.001125 -0.001125 0 0.0009375 -0.00075 0 0.0013125 -0.00075 0 0.0009375 -0.001125 0 0.0009375 -0.0009375 0 0.001125 -0.0009375 -0.000375 0.0009375 -0.001125 -0.0001875 0.0009375 -0.0009375 -0.0001875 0.001125 -0.0009375 -0.0001875 0.0009375 -0.001125 -0.0005625 0.0009375 -0.00075 -0.0001875 0.0013125 -0.00075 -0.000375 0.0009375 -0.00075 -0.0001875 0.0009375 -0.00075 -0.0001875 0.001125 -0.00075 -0.0005625 0.0009375 -0.001125 -0.0005625 0.0009375 -0.0009375 -0.000375 0.001125 -0.0009375 -0.000375 0.0009375 -0.0009375 -0.0005625 0.0009375 -0.0005625 -0.0001875 0.0013125 -0.0001875 0 0.0009375 -0.0005625 0 0.0013125 -0.0001875 0 0.0015 -0.0005625 0 0.0015 -0.0001875 0 0.001125 -0.0005625 0 0.0013125 -0.0005625 0 0.0013125 -0.000375 -0.000375 0.001125 -0.0005625 -0.0001875 0.0013125 -0.0005625 -0.0001875 0.0013125 -0.000375 -0.000375 0.0009375 -0.0005625 -0.0001875 0.0009375 -0.0005625 -0.0001875 0.001125 -0.000375 -0.0001875 0.001125 -0.0005625 -0.00075 0.0001875 -0.00075 -0.00075 0.0005625 -0.00075 -0.00075 0.0001875 -0.001125 -0.00075 0.0001875 -0.0009375 -0.00075 0.000375 -0.0009375 -0.001125 0.0001875 -0.001125 -0.0009375 0.0001875 -0.0009375 -0.0009375 0.000375 -0.0009375 -0.0009375 0.0001875 -0.001125 0 0.0001875 -0.00075 0 0.0005625 -0.00075 0 0.0001875 -0.001125 0 0.0001875 -0.0009375 0 0.000375 -0.0009375 -0.000375 0.0001875 -0.001125 -0.0001875 0.0001875 -0.0009375 -0.0001875 0.000375 -0.0009375 -0.0001875 0.0001875 -0.001125 -0.0005625 0.0001875 -0.00075 -0.0001875 0.0005625 -0.00075 -0.000375 0.0001875 -0.00075 -0.0001875 0.0001875 -0.00075 -0.0001875 0.000375 -0.00075 -0.0005625 0.0001875 -0.001125 -0.0005625 0.0001875 -0.0009375 -0.000375 0.000375 -0.0009375 -0.000375 0.0001875 -0.0009375 -0.0005625 0.000375 -0.00075 -0.0005625 0.0005625 -0.00075 -0.000375 0.0005625 -0.00075 -0.0005625 0.000375 -0.0009375 -0.0005625 0.0001875 -0.0005625 -0.0001875 0.0005625 -0.0001875 0 0.0001875 -0.0005625 0 0.0005625 -0.0001875 0 0.0001875 0 0 0.0005625 0 0 0.0001875 -0.000375 0 0.0001875 -0.0001875 0 0.000375 -0.0001875 -0.000375 0.0001875 -0.000375 -0.0001875 0.0001875 -0.0001875 -0.0001875 0.000375 -0.0001875 -0.000375 0.0001875 -0.0005625 -0.0001875 0.0001875 -0.0005625 -0.0001875 0.000375 -0.000375 -0.0001875 0.0001875 -0.000375 0 0.00075 -0.0005625 0 0.00075 -0.0001875 0 0.000375 -0.0005625 0 0.0005625 -0.0005625 0 0.0005625 -0.000375 -0.000375 0.000375 -0.0005625 -0.0001875 0.0005625 -0.0005625 -0.0001875 0.0005625 -0.000375 -0.0001875 0.000375 -0.0005625 -0.0005625 0.00075 -0.0005625 -0.0001875 0.00075 -0.0001875 -0.000375 0.00075 -0.0005625 -0.0001875 0.00075 -0.0005625 -0.0001875 0.00075 -0.000375 -0.0005625 0.000375 -0.0005625 -0.0005625 0.0005625 -0.0005625 -0.000375 0.0005625 -0.000375 -0.000375 0.0005625 -0.0005625 0 0.0009375 0 0 0.0013125 0 0 0.0009375 -0.000375 0 0.0009375 -0.0001875 0 0.001125 -0.0001875 -0.000375 0.0009375 -0.000375 -0.0001875 0.0009375 -0.0001875 -0.0001875 0.001125 -0.0001875 -0.0001875 0.0009375 -0.000375 -0.0013125 0.00075 -0.0013125 -0.0009375 0.00075 -0.0009375 -0.001125 0.00075 -0.0013125 -0.0009375 0.00075 -0.0013125 -0.0009375 0.00075 -0.001125 -0.0013125 0.000375 -0.0013125 -0.0013125 0.0005625 -0.0013125 -0.001125 0.0005625 -0.001125 -0.001125 0.0005625 -0.0013125 -0.0013125 0.0009375 -0.0013125 -0.0009375 0.0013125 -0.0009375 -0.0009375 0.0013125 -0.0013125 -0.0013125 0.0013125 -0.0013125 -0.00075 0.0009375 -0.0013125 -0.00075 0.0013125 -0.0009375 -0.00075 0.0013125 -0.0013125 -0.0009375 0.001125 -0.0015 -0.001125 0.0009375 -0.0013125 -0.0009375 0.0009375 -0.0013125 -0.0009375 0.001125 -0.001125 -0.00075 0.0009375 -0.00075 -0.00075 0.0013125 -0.00075 -0.00075 0.0009375 -0.001125 -0.00075 0.0009375 -0.0009375 -0.00075 0.001125 -0.0009375 -0.001125 0.0009375 -0.001125 -0.0009375 0.0009375 -0.0009375 -0.0009375 0.001125 -0.0009375 -0.0009375 0.0009375 -0.001125 -0.0005625 0.0013125 -0.0013125 -0.0005625 0.0015 -0.00075 -0.0001875 0.0015 -0.00075 -0.0005625 0.0015 -0.001125 -0.0005625 0.001125 -0.001125 -0.0005625 0.0013125 -0.0009375 -0.000375 0.0013125 -0.0009375 -0.0005625 0.001125 -0.00075 -0.0005625 0.0013125 -0.00075 -0.000375 0.0013125 -0.00075 -0.0005625 0.001125 -0.0009375 -0.0005625 0.0015 -0.0005625 -0.0001875 0.0015 -0.0001875 -0.000375 0.0015 -0.0005625 -0.0001875 0.0015 -0.0005625 -0.0001875 0.0015 -0.000375 -0.0005625 0.001125 -0.0005625 -0.0005625 0.0013125 -0.0005625 -0.000375 0.0013125 -0.000375 -0.000375 0.0013125 -0.0005625 -0.0013125 0.00075 -0.00075 -0.0009375 0.00075 -0.00075 -0.0013125 0.00075 -0.001125 -0.0013125 0.00075 -0.0009375 -0.001125 0.00075 -0.0009375 -0.0013125 0.000375 -0.001125 -0.0013125 0.0005625 -0.0009375 -0.001125 0.0005625 -0.0009375 -0.0013125 0.0005625 -0.001125 -0.0013125 0.0013125 -0.0009375 -0.0013125 0.0009375 -0.00075 -0.0009375 0.0013125 -0.00075 -0.0013125 0.0013125 -0.00075 -0.0015 0.001125 -0.0009375 -0.0013125 0.0009375 -0.001125 -0.0013125 0.0009375 -0.0009375 -0.001125 0.001125 -0.0009375 -0.001125 0.0009375 -0.00075 -0.0009375 0.0009375 -0.00075 -0.0009375 0.001125 -0.00075 -0.001125 0.0009375 -0.0009375 -0.0013125 0.0009375 -0.0005625 -0.0009375 0.0013125 -0.0001875 -0.0013125 0.0013125 -0.0001875 -0.0013125 0.0013125 -0.0005625 -0.00075 0.0015 -0.0005625 -0.00075 0.0015 -0.0001875 -0.001125 0.0015 -0.0005625 -0.001125 0.001125 -0.0005625 -0.0009375 0.0013125 -0.0005625 -0.0009375 0.0013125 -0.000375 -0.00075 0.0009375 -0.0005625 -0.00075 0.0013125 -0.0001875 -0.00075 0.001125 -0.0005625 -0.00075 0.0013125 -0.0005625 -0.00075 0.0013125 -0.000375 -0.001125 0.0009375 -0.0005625 -0.0009375 0.0009375 -0.0005625 -0.0009375 0.001125 -0.000375 -0.0009375 0.001125 -0.0005625 -0.0005625 0.0015 0 -0.0001875 0.0015 0 -0.0005625 0.0015 -0.000375 -0.0005625 0.0015 -0.0001875 -0.000375 0.0015 -0.0001875 -0.0005625 0.001125 -0.000375 -0.0005625 0.0013125 -0.0001875 -0.000375 0.0013125 -0.0001875 -0.0005625 0.0013125 -0.000375 -0.0013125 0.0001875 -0.00075 -0.0009375 0.0005625 -0.00075 -0.001125 0.0001875 -0.00075 -0.0009375 0.0001875 -0.00075 -0.0009375 0.000375 -0.00075 -0.0013125 0.0001875 -0.001125 -0.0013125 0.0001875 -0.0009375 -0.001125 0.000375 -0.0009375 -0.001125 0.0001875 -0.0009375 -0.0013125 0.0001875 -0.0005625 -0.0009375 0.0005625 -0.0001875 -0.0013125 0.0001875 0 -0.0009375 0.0005625 0 -0.00075 0.0001875 0 -0.00075 0.0005625 0 -0.001125 0.0001875 0 -0.0009375 0.0001875 0 -0.0009375 0.000375 0 -0.001125 0.0001875 -0.000375 -0.0009375 0.0001875 -0.0001875 -0.0009375 0.000375 -0.0001875 -0.0013125 0.0001875 -0.000375 -0.0013125 0.0001875 -0.0001875 -0.001125 0.000375 -0.0001875 -0.001125 0.0001875 -0.0001875 -0.00075 0.0001875 -0.0005625 -0.00075 0.0005625 -0.0001875 -0.00075 0.0001875 -0.000375 -0.00075 0.0001875 -0.0001875 -0.00075 0.000375 -0.0001875 -0.001125 0.0001875 -0.0005625 -0.0009375 0.0001875 -0.0005625 -0.0009375 0.000375 -0.000375 -0.0009375 0.0001875 -0.000375 -0.00075 0.00075 -0.0005625 -0.00075 0.00075 -0.0001875 -0.00075 0.000375 -0.0005625 -0.00075 0.0005625 -0.0005625 -0.00075 0.0005625 -0.000375 -0.001125 0.000375 -0.0005625 -0.0009375 0.0005625 -0.0005625 -0.0009375 0.0005625 -0.000375 -0.0009375 0.000375 -0.0005625 -0.0005625 0.0001875 0 -0.0001875 0.0005625 0 -0.000375 0.0001875 0 -0.0001875 0.0001875 0 -0.0001875 0.000375 0 -0.0005625 0.0001875 -0.000375 -0.0005625 0.0001875 -0.0001875 -0.000375 0.000375 -0.0001875 -0.000375 0.0001875 -0.0001875 -0.0005625 0.00075 0 -0.0001875 0.00075 0 -0.0005625 0.000375 0 -0.0005625 0.0005625 0 -0.000375 0.0005625 0 -0.0005625 0.000375 -0.000375 -0.0005625 0.0005625 -0.0001875 -0.000375 0.0005625 -0.0001875 -0.0005625 0.000375 -0.0001875 -0.0005625 0.00075 -0.000375 -0.0005625 0.00075 -0.0001875 -0.000375 0.00075 -0.0001875 -0.0005625 0.0005625 -0.000375 -0.0005625 0.0009375 0 -0.0001875 0.0013125 0 -0.000375 0.0009375 0 -0.0001875 0.0009375 0 -0.0001875 0.001125 0 -0.0005625 0.0009375 -0.000375 -0.0005625 0.0009375 -0.0001875 -0.000375 0.001125 -0.0001875 -0.000375 0.0009375 -0.0001875 -0.0013125 0.000375 -0.00075 -0.0013125 0.0005625 -0.00075 -0.001125 0.0005625 -0.00075 -0.0013125 0.000375 -0.0009375 -0.0013125 0.00075 0 -0.0009375 0.00075 0 -0.0013125 0.000375 0 -0.0013125 0.0005625 0 -0.001125 0.0005625 0 -0.0013125 0.000375 -0.000375 -0.0013125 0.0005625 -0.0001875 -0.001125 0.0005625 -0.0001875 -0.0013125 0.000375 -0.0001875 -0.0013125 0.00075 -0.0005625 -0.0009375 0.00075 -0.0001875 -0.0013125 0.00075 -0.000375 -0.0013125 0.00075 -0.0001875 -0.001125 0.00075 -0.0001875 -0.0013125 0.000375 -0.0005625 -0.0013125 0.0005625 -0.0005625 -0.001125 0.0005625 -0.000375 -0.0013125 0.0005625 -0.000375 -0.001125 0.00075 -0.0005625 -0.0009375 0.00075 -0.0005625 -0.0009375 0.00075 -0.000375 -0.001125 0.0005625 -0.0005625 -0.0013125 0.0009375 0 -0.0009375 0.0013125 0 -0.0013125 0.0013125 0 -0.0013125 0.0009375 -0.000375 -0.0013125 0.0009375 -0.0001875 -0.001125 0.001125 -0.0001875 -0.00075 0.0009375 0 -0.00075 0.0013125 0 -0.001125 0.0009375 0 -0.0009375 0.0009375 0 -0.0009375 0.001125 0 -0.001125 0.0009375 -0.000375 -0.0009375 0.0009375 -0.0001875 -0.0009375 0.001125 -0.0001875 -0.001125 0.0009375 -0.0001875 -0.00075 0.0009375 -0.000375 -0.00075 0.0009375 -0.0001875 -0.00075 0.001125 -0.0001875 -0.0009375 0.0009375 -0.000375 -0.0005625 0.001125 0 -0.0005625 0.0013125 0 -0.000375 0.0013125 0 -0.0005625 0.001125 -0.0001875 0.0001875 0.0001875 -0.0013125 0.0005625 0.0005625 -0.0009375 0.00075 0.0001875 -0.0013125 0.00075 0.0005625 -0.0009375 0.00075 0.00075 -0.0013125 0.00075 0.00075 -0.0009375 0.00075 0.000375 -0.0013125 0.00075 0.0005625 -0.0013125 0.00075 0.0005625 -0.001125 0.000375 0.000375 -0.0013125 0.0005625 0.0005625 -0.0013125 0.0005625 0.0005625 -0.001125 0.000375 0.0001875 -0.0013125 0.0005625 0.0001875 -0.0013125 0.0005625 0.000375 -0.001125 0.0005625 0.000375 -0.0013125 0.0009375 0.0001875 -0.0013125 0.0013125 0.0005625 -0.0009375 0.0013125 0.0005625 -0.0013125 0.0013125 0.0001875 -0.0013125 0.0009375 0.00075 -0.0013125 0.0013125 0.00075 -0.0009375 0.0013125 0.00075 -0.0013125 0.0009375 0.000375 -0.0013125 0.0009375 0.0005625 -0.0013125 0.001125 0.0005625 -0.001125 0.0009375 0.00075 -0.00075 0.0013125 0.00075 -0.00075 0.0009375 0.00075 -0.001125 0.0009375 0.00075 -0.0009375 0.001125 0.00075 -0.0009375 0.0009375 0.000375 -0.001125 0.0009375 0.0005625 -0.0009375 0.001125 0.0005625 -0.0009375 0.0009375 0.0005625 -0.001125 0.0009375 0.0009375 -0.0013125 0.0013125 0.0013125 -0.0009375 0.0013125 0.0013125 -0.0013125 0.0013125 0.0009375 -0.0013125 0.0015 0.0009375 -0.00075 0.0015 0.0013125 -0.00075 0.0015 0.0009375 -0.001125 0.001125 0.0009375 -0.001125 0.0013125 0.0009375 -0.0009375 0.0013125 0.001125 -0.0009375 0.0009375 0.0009375 -0.00075 0.0013125 0.0013125 -0.00075 0.001125 0.0009375 -0.00075 0.0013125 0.0009375 -0.00075 0.0013125 0.001125 -0.00075 0.0009375 0.0009375 -0.001125 0.0009375 0.0009375 -0.0009375 0.001125 0.001125 -0.0009375 0.001125 0.0009375 -0.0009375 0.0009375 0.0009375 -0.0005625 0.0013125 0.0013125 -0.0001875 0.0015 0.0009375 -0.0005625 0.0015 0.0013125 -0.0001875 0.0015 0.0015 -0.0005625 0.0015 0.0015 -0.0001875 0.0015 0.001125 -0.0005625 0.0015 0.0013125 -0.0005625 0.0015 0.0013125 -0.000375 0.001125 0.001125 -0.0005625 0.0013125 0.0013125 -0.0005625 0.0013125 0.0013125 -0.000375 0.001125 0.0009375 -0.0005625 0.0013125 0.0009375 -0.0005625 0.0013125 0.001125 -0.000375 0.0013125 0.001125 -0.0005625 0.00075 0.0001875 -0.00075 0.00075 0.0005625 -0.00075 0.00075 0.0001875 -0.001125 0.00075 0.0001875 -0.0009375 0.00075 0.000375 -0.0009375 0.000375 0.0001875 -0.001125 0.0005625 0.0001875 -0.0009375 0.0005625 0.000375 -0.0009375 0.0005625 0.0001875 -0.001125 0.0015 0.0001875 -0.00075 0.0015 0.0005625 -0.00075 0.0015 0.0001875 -0.001125 0.001125 0.0001875 -0.001125 0.0013125 0.0001875 -0.0009375 0.0013125 0.000375 -0.0009375 0.0009375 0.0001875 -0.00075 0.0013125 0.0005625 -0.00075 0.001125 0.0001875 -0.00075 0.0013125 0.0001875 -0.00075 0.0013125 0.000375 -0.00075 0.0009375 0.0001875 -0.001125 0.0009375 0.0001875 -0.0009375 0.001125 0.000375 -0.0009375 0.001125 0.0001875 -0.0009375 0.0009375 0.000375 -0.00075 0.0009375 0.0005625 -0.00075 0.001125 0.0005625 -0.00075 0.0009375 0.000375 -0.0009375 0.0009375 0.0001875 -0.0005625 0.0013125 0.0005625 -0.0001875 0.0015 0.0001875 -0.0005625 0.0015 0.0005625 -0.0001875 0.0015 0.0001875 0 0.0015 0.0005625 0 0.0015 0.0001875 -0.000375 0.0015 0.0001875 -0.0001875 0.0015 0.000375 -0.0001875 0.001125 0.0001875 -0.000375 0.0013125 0.0001875 -0.0001875 0.0013125 0.000375 -0.0001875 0.001125 0.0001875 -0.0005625 0.0013125 0.0001875 -0.0005625 0.0013125 0.000375 -0.000375 0.0013125 0.0001875 -0.000375 0.0015 0.00075 -0.0005625 0.0015 0.00075 -0.0001875 0.0015 0.000375 -0.0005625 0.0015 0.0005625 -0.0005625 0.0015 0.0005625 -0.000375 0.001125 0.000375 -0.0005625 0.0013125 0.0005625 -0.0005625 0.0013125 0.0005625 -0.000375 0.0013125 0.000375 -0.0005625 0.0009375 0.00075 -0.0005625 0.0013125 0.00075 -0.0001875 0.001125 0.00075 -0.0005625 0.0013125 0.00075 -0.0005625 0.0013125 0.00075 -0.000375 0.0009375 0.000375 -0.0005625 0.0009375 0.0005625 -0.0005625 0.001125 0.0005625 -0.000375 0.001125 0.0005625 -0.0005625 0.0015 0.0009375 0 0.0015 0.0013125 0 0.0015 0.0009375 -0.000375 0.0015 0.0009375 -0.0001875 0.0015 0.001125 -0.0001875 0.001125 0.0009375 -0.000375 0.0013125 0.0009375 -0.0001875 0.0013125 0.001125 -0.0001875 0.0013125 0.0009375 -0.000375 0.0001875 0.00075 -0.0013125 0.0005625 0.00075 -0.0009375 0.000375 0.00075 -0.0013125 0.0005625 0.00075 -0.0013125 0.0005625 0.00075 -0.001125 0.0001875 0.000375 -0.0013125 0.0001875 0.0005625 -0.0013125 0.000375 0.0005625 -0.001125 0.000375 0.0005625 -0.0013125 0.0001875 0.0009375 -0.0013125 0.0005625 0.0013125 -0.0009375 0.0005625 0.0013125 -0.0013125 0.0001875 0.0013125 -0.0013125 0.00075 0.0009375 -0.0013125 0.00075 0.0013125 -0.0009375 0.00075 0.0013125 -0.0013125 0.000375 0.0009375 -0.0013125 0.0005625 0.0009375 -0.0013125 0.0005625 0.001125 -0.001125 0.00075 0.0009375 -0.00075 0.00075 0.0013125 -0.00075 0.00075 0.0009375 -0.001125 0.00075 0.0009375 -0.0009375 0.00075 0.001125 -0.0009375 0.000375 0.0009375 -0.001125 0.0005625 0.0009375 -0.0009375 0.0005625 0.001125 -0.0009375 0.0005625 0.0009375 -0.001125 0.0009375 0.0013125 -0.0013125 0.0009375 0.0015 -0.00075 0.0013125 0.0015 -0.00075 0.0009375 0.0015 -0.001125 0.0009375 0.001125 -0.001125 0.0009375 0.0013125 -0.0009375 0.001125 0.0013125 -0.0009375 0.0009375 0.001125 -0.00075 0.0009375 0.0013125 -0.00075 0.001125 0.0013125 -0.00075 0.0009375 0.001125 -0.0009375 0.0009375 0.0015 -0.0005625 0.0013125 0.0015 -0.0001875 0.001125 0.0015 -0.0005625 0.0013125 0.0015 -0.0005625 0.0013125 0.0015 -0.000375 0.0009375 0.001125 -0.0005625 0.0009375 0.0013125 -0.0005625 0.001125 0.0013125 -0.000375 0.001125 0.0013125 -0.0005625 0.0001875 0.00075 -0.00075 0.0005625 0.00075 -0.00075 0.0001875 0.00075 -0.001125 0.0001875 0.00075 -0.0009375 0.000375 0.00075 -0.0009375 0.0001875 0.000375 -0.001125 0.0001875 0.0005625 -0.0009375 0.000375 0.0005625 -0.0009375 0.0001875 0.0005625 -0.001125 0.0001875 0.0015 -0.00075 0.0005625 0.0015 -0.00075 0.0001875 0.0015 -0.001125 0.0001875 0.001125 -0.001125 0.0001875 0.0013125 -0.0009375 0.000375 0.0013125 -0.0009375 0.0001875 0.0009375 -0.00075 0.0005625 0.0013125 -0.00075 0.0001875 0.001125 -0.00075 0.0001875 0.0013125 -0.00075 0.000375 0.0013125 -0.00075 0.0001875 0.0009375 -0.001125 0.0001875 0.0009375 -0.0009375 0.000375 0.001125 -0.0009375 0.0001875 0.001125 -0.0009375 0.000375 0.0009375 -0.00075 0.0005625 0.0009375 -0.00075 0.0005625 0.001125 -0.00075 0.000375 0.0009375 -0.0009375 0.0001875 0.0009375 -0.0005625 0.0005625 0.0013125 -0.0001875 0.0001875 0.0015 -0.0005625 0.0005625 0.0015 -0.0001875 0.0001875 0.0015 0 0.0005625 0.0015 0 0.0001875 0.0015 -0.000375 0.0001875 0.0015 -0.0001875 0.000375 0.0015 -0.0001875 0.0001875 0.001125 -0.000375 0.0001875 0.0013125 -0.0001875 0.000375 0.0013125 -0.0001875 0.0001875 0.001125 -0.0005625 0.0001875 0.0013125 -0.0005625 0.000375 0.0013125 -0.000375 0.0001875 0.0013125 -0.000375 0.00075 0.0015 -0.0005625 0.00075 0.0015 -0.0001875 0.000375 0.0015 -0.0005625 0.0005625 0.0015 -0.0005625 0.0005625 0.0015 -0.000375 0.000375 0.001125 -0.0005625 0.0005625 0.0013125 -0.0005625 0.0005625 0.0013125 -0.000375 0.000375 0.0013125 -0.0005625 0.00075 0.0009375 -0.0005625 0.00075 0.0013125 -0.0001875 0.00075 0.001125 -0.0005625 0.00075 0.0013125 -0.0005625 0.00075 0.0013125 -0.000375 0.000375 0.0009375 -0.0005625 0.0005625 0.0009375 -0.0005625 0.0005625 0.001125 -0.000375 0.0005625 0.001125 -0.0005625 0.0009375 0.0015 0 0.0013125 0.0015 0 0.0009375 0.0015 -0.000375 0.0009375 0.0015 -0.0001875 0.001125 0.0015 -0.0001875 0.0009375 0.001125 -0.000375 0.0009375 0.0013125 -0.0001875 0.001125 0.0013125 -0.0001875 0.0009375 0.0013125 -0.000375 0.0001875 0.0001875 -0.00075 0.0005625 0.0005625 -0.00075 0.000375 0.0001875 -0.00075 0.0005625 0.0001875 -0.00075 0.0005625 0.000375 -0.00075 0.0001875 0.0001875 -0.001125 0.0001875 0.0001875 -0.0009375 0.000375 0.000375 -0.0009375 0.000375 0.0001875 -0.0009375 0.0001875 0.0001875 -0.0005625 0.0005625 0.0005625 -0.0001875 0.0001875 0.0001875 0 0.0005625 0.0005625 0 0.00075 0.0001875 0 0.00075 0.0005625 0 0.000375 0.0001875 0 0.0005625 0.0001875 0 0.0005625 0.000375 0 0.000375 0.0001875 -0.000375 0.0005625 0.0001875 -0.0001875 0.0005625 0.000375 -0.0001875 0.0001875 0.0001875 -0.000375 0.0001875 0.0001875 -0.0001875 0.000375 0.000375 -0.0001875 0.000375 0.0001875 -0.0001875 0.00075 0.0001875 -0.0005625 0.00075 0.0005625 -0.0001875 0.00075 0.0001875 -0.000375 0.00075 0.0001875 -0.0001875 0.00075 0.000375 -0.0001875 0.000375 0.0001875 -0.0005625 0.0005625 0.0001875 -0.0005625 0.0005625 0.000375 -0.000375 0.0005625 0.0001875 -0.000375 0.00075 0.00075 -0.0005625 0.00075 0.00075 -0.0001875 0.00075 0.000375 -0.0005625 0.00075 0.0005625 -0.0005625 0.00075 0.0005625 -0.000375 0.000375 0.000375 -0.0005625 0.0005625 0.0005625 -0.0005625 0.0005625 0.0005625 -0.000375 0.0005625 0.000375 -0.0005625 0.0009375 0.0001875 0 0.0013125 0.0005625 0 0.001125 0.0001875 0 0.0013125 0.0001875 0 0.0013125 0.000375 0 0.0009375 0.0001875 -0.000375 0.0009375 0.0001875 -0.0001875 0.001125 0.000375 -0.0001875 0.001125 0.0001875 -0.0001875 0.0009375 0.00075 0 0.0013125 0.00075 0 0.0009375 0.000375 0 0.0009375 0.0005625 0 0.001125 0.0005625 0 0.0009375 0.000375 -0.000375 0.0009375 0.0005625 -0.0001875 0.001125 0.0005625 -0.0001875 0.0009375 0.000375 -0.0001875 0.0009375 0.00075 -0.000375 0.0009375 0.00075 -0.0001875 0.001125 0.00075 -0.0001875 0.0009375 0.0005625 -0.000375 0.0009375 0.0009375 0 0.0013125 0.0013125 0 0.001125 0.0009375 0 0.0013125 0.0009375 0 0.0013125 0.001125 0 0.0009375 0.0009375 -0.000375 0.0009375 0.0009375 -0.0001875 0.001125 0.001125 -0.0001875 0.001125 0.0009375 -0.0001875 0.0001875 0.000375 -0.00075 0.0001875 0.0005625 -0.00075 0.000375 0.0005625 -0.00075 0.0001875 0.000375 -0.0009375 0.0001875 0.00075 0 0.0005625 0.00075 0 0.0001875 0.000375 0 0.0001875 0.0005625 0 0.000375 0.0005625 0 0.0001875 0.000375 -0.000375 0.0001875 0.0005625 -0.0001875 0.000375 0.0005625 -0.0001875 0.0001875 0.000375 -0.0001875 0.0001875 0.00075 -0.0005625 0.0005625 0.00075 -0.0001875 0.0001875 0.00075 -0.000375 0.0001875 0.00075 -0.0001875 0.000375 0.00075 -0.0001875 0.0001875 0.000375 -0.0005625 0.0001875 0.0005625 -0.0005625 0.000375 0.0005625 -0.000375 0.0001875 0.0005625 -0.000375 0.000375 0.00075 -0.0005625 0.0005625 0.00075 -0.0005625 0.0005625 0.00075 -0.000375 0.000375 0.0005625 -0.0005625 0.0001875 0.0009375 0 0.0005625 0.0013125 0 0.0001875 0.001125 0 0.0001875 0.0013125 0 0.000375 0.0013125 0 0.0001875 0.0009375 -0.000375 0.0001875 0.0009375 -0.0001875 0.000375 0.001125 -0.0001875 0.0001875 0.001125 -0.0001875 0.00075 0.0009375 0 0.00075 0.0013125 0 0.000375 0.0009375 0 0.0005625 0.0009375 0 0.0005625 0.001125 0 0.000375 0.0009375 -0.000375 0.0005625 0.0009375 -0.0001875 0.0005625 0.001125 -0.0001875 0.000375 0.0009375 -0.0001875 0.00075 0.0009375 -0.000375 0.00075 0.0009375 -0.0001875 0.00075 0.001125 -0.0001875 0.0005625 0.0009375 -0.000375 0.0009375 0.001125 0 0.0009375 0.0013125 0 0.001125 0.0013125 0 0.0009375 0.001125 -0.0001875 -0.0001875 -0.00225 0.000375 -0.0005625 -0.0020625 0.0001875 -0.0001875 -0.0016875 0.0005625 0 -0.0020625 0.0001875 0 -0.0016875 0.0005625 0 -0.0015 0.0001875 0 -0.0015 0.0005625 0 -0.001875 0.0001875 0 -0.0016875 0.0001875 0 -0.0016875 0.000375 -0.000375 -0.001875 0.0001875 -0.0001875 -0.0016875 0.0001875 -0.0001875 -0.0016875 0.000375 -0.000375 -0.0020625 0.0001875 -0.0001875 -0.0020625 0.0001875 -0.0001875 -0.001875 0.000375 -0.0001875 -0.001875 0.0001875 0 -0.0020625 0.0005625 -0.0001875 -0.0020625 0.0005625 -0.0005625 -0.0020625 0.0005625 -0.0013125 -0.0015 0.0001875 -0.0009375 -0.0015 0.0005625 -0.00075 -0.0015 0.0001875 -0.00075 -0.0015 0.0005625 -0.001125 -0.001875 0.0001875 -0.0013125 -0.001875 0.0001875 -0.001125 -0.0015 0.0001875 -0.0009375 -0.0015 0.0001875 -0.0009375 -0.0015 0.000375 -0.00075 -0.0016875 0.000375 -0.00075 -0.0016875 0.0001875 -0.0005625 -0.0015 0.0001875 -0.0001875 -0.0015 0.0005625 -0.000375 -0.0015 0.0001875 -0.0001875 -0.0015 0.0001875 -0.0001875 -0.0015 0.000375 -0.0005625 -0.001875 0.0001875 -0.0005625 -0.0016875 0.0001875 -0.000375 -0.0016875 0.000375 -0.000375 -0.0016875 0.0001875 -0.0005625 -0.0015 0.00075 -0.0001875 -0.0015 0.00075 -0.0005625 -0.0016875 0.0005625 -0.0005625 -0.0015 0.000375 -0.0005625 -0.0015 0.0005625 -0.000375 -0.0015 0.0005625 -0.000375 -0.0016875 0.0005625 -0.0005625 -0.0016875 0.000375 -0.0005625 -0.001875 0.00075 -0.0001875 -0.0015 0.001125 -0.0015 -0.0015 0.0001875 -0.0015 -0.0015 0.0005625 -0.0013125 -0.0015 0.00075 -0.0009375 -0.0015 0.00075 -0.0013125 -0.001875 0.000375 -0.0015 -0.001875 0.0001875 -0.0013125 -0.0015 0.000375 -0.0013125 -0.0015 0.0005625 -0.001125 -0.0015 0.0005625 0.0001875 -0.0020625 0.0001875 0.0005625 -0.0016875 0.0005625 0.0001875 -0.0015 0.0001875 0.0005625 -0.0015 0.0005625 0.00075 -0.0015 0.0001875 0.00075 -0.0015 0.0005625 0.000375 -0.0015 0.0001875 0.0005625 -0.0015 0.0001875 0.0005625 -0.0015 0.000375 0.000375 -0.001875 0.0001875 0.0005625 -0.0016875 0.0001875 0.0005625 -0.0016875 0.000375 0.0001875 -0.001875 0.0001875 0.0001875 -0.0016875 0.0001875 0.000375 -0.0016875 0.000375 0.000375 -0.0016875 0.0001875 0.00075 -0.001875 0.0001875 0.0005625 -0.0020625 0.0001875 0.0005625 -0.0020625 0.0005625 0.001125 -0.0015 0.0005625 0.0001875 -0.0015 0.00075 0.0005625 -0.0015 0.00075 0.0001875 -0.0015 0.000375 0.0001875 -0.0015 0.0005625 0.000375 -0.0015 0.0005625 0.0001875 -0.001875 0.000375 0.0001875 -0.0016875 0.0005625 0.000375 -0.0016875 0.0005625 0.0001875 -0.0016875 0.000375 0.0001875 -0.001875 0.00075 0.0001875 -0.0020625 0.0005625 0.0005625 -0.0015 0.001125 -0.0015 -0.0013125 0.0001875 -0.0015 -0.0009375 0.0005625 -0.0015 -0.00075 0.0001875 -0.0015 -0.00075 0.0005625 -0.001875 -0.001125 0.0001875 -0.001875 -0.0013125 0.0001875 -0.0015 -0.001125 0.0001875 -0.0015 -0.0009375 0.0001875 -0.0015 -0.0009375 0.000375 -0.0016875 -0.00075 0.000375 -0.0016875 -0.00075 0.0001875 -0.0020625 -0.0005625 0.0001875 -0.0016875 -0.0001875 0.0005625 -0.0015 -0.0005625 0.0001875 -0.0015 -0.0001875 0.0005625 -0.0015 0 0.0001875 -0.0015 0 0.0005625 -0.0015 -0.000375 0.0001875 -0.0015 -0.0001875 0.0001875 -0.0015 -0.0001875 0.000375 -0.001875 -0.000375 0.0001875 -0.0016875 -0.0001875 0.0001875 -0.0016875 -0.0001875 0.000375 -0.001875 -0.0005625 0.0001875 -0.0016875 -0.0005625 0.0001875 -0.0016875 -0.000375 0.000375 -0.0016875 -0.000375 0.0001875 -0.0015 -0.0005625 0.00075 -0.0015 -0.0001875 0.00075 -0.0016875 -0.0005625 0.0005625 -0.0015 -0.0005625 0.000375 -0.0015 -0.0005625 0.0005625 -0.0015 -0.000375 0.0005625 -0.0016875 -0.000375 0.0005625 -0.0016875 -0.0005625 0.000375 -0.001875 -0.0005625 0.00075 -0.0020625 -0.0005625 0.0005625 -0.0015 -0.0001875 0.001125 -0.0015 -0.0013125 0.00075 -0.0015 -0.0009375 0.00075 -0.001875 -0.0013125 0.000375 -0.001875 -0.0015 0.0001875 -0.0015 -0.0013125 0.000375 -0.0015 -0.0013125 0.0005625 -0.0015 -0.001125 0.0005625 -0.00225 -0.0001875 0.000375 -0.0020625 0 0.0001875 -0.0016875 0 0.0005625 -0.001875 0 0.0001875 -0.0016875 0 0.0001875 -0.0016875 0 0.000375 -0.0020625 -0.000375 0.0001875 -0.0020625 -0.0001875 0.0001875 -0.001875 -0.0001875 0.000375 -0.001875 -0.0001875 0.0001875 -0.0020625 0 0.0005625 -0.0020625 -0.0001875 0.0005625 -0.0013125 -0.0013125 0.0001875 -0.0009375 -0.0009375 0.0005625 -0.00075 -0.0013125 0.0001875 -0.00075 -0.0009375 0.0005625 -0.00075 -0.00075 0.0001875 -0.00075 -0.00075 0.0005625 -0.00075 -0.001125 0.0001875 -0.00075 -0.0009375 0.0001875 -0.00075 -0.0009375 0.000375 -0.001125 -0.001125 0.0001875 -0.0009375 -0.0009375 0.0001875 -0.0009375 -0.0009375 0.000375 -0.001125 -0.0013125 0.0001875 -0.0009375 -0.0013125 0.0001875 -0.0009375 -0.001125 0.000375 -0.0009375 -0.001125 0.0001875 -0.0005625 -0.0013125 0.0001875 -0.0001875 -0.0009375 0.0005625 0 -0.0013125 0.0001875 0 -0.0009375 0.0005625 0 -0.00075 0.0001875 0 -0.00075 0.0005625 0 -0.001125 0.0001875 0 -0.0009375 0.0001875 0 -0.0009375 0.000375 -0.000375 -0.001125 0.0001875 -0.0001875 -0.0009375 0.0001875 -0.0001875 -0.0009375 0.000375 -0.000375 -0.0013125 0.0001875 -0.0001875 -0.0013125 0.0001875 -0.0001875 -0.001125 0.000375 -0.0001875 -0.001125 0.0001875 -0.0005625 -0.00075 0.0001875 -0.0001875 -0.00075 0.0005625 -0.000375 -0.00075 0.0001875 -0.0001875 -0.00075 0.0001875 -0.0001875 -0.00075 0.000375 -0.0005625 -0.001125 0.0001875 -0.0005625 -0.0009375 0.0001875 -0.000375 -0.0009375 0.000375 -0.000375 -0.0009375 0.0001875 -0.0005625 -0.00075 0.00075 -0.0001875 -0.00075 0.00075 -0.0005625 -0.00075 0.000375 -0.0005625 -0.00075 0.0005625 -0.000375 -0.00075 0.0005625 -0.0005625 -0.001125 0.000375 -0.0005625 -0.0009375 0.0005625 -0.000375 -0.0009375 0.0005625 -0.0005625 -0.0009375 0.000375 -0.0005625 -0.0005625 0.0001875 -0.0001875 -0.0001875 0.0005625 0 -0.0005625 0.0001875 0 -0.0001875 0.0005625 0 0 0.0001875 0 0 0.0005625 0 -0.000375 0.0001875 0 -0.0001875 0.0001875 0 -0.0001875 0.000375 -0.000375 -0.000375 0.0001875 -0.0001875 -0.0001875 0.0001875 -0.0001875 -0.0001875 0.000375 -0.000375 -0.0005625 0.0001875 -0.0001875 -0.0005625 0.0001875 -0.0001875 -0.000375 0.000375 -0.0001875 -0.000375 0.0001875 0 -0.0005625 0.00075 0 -0.0001875 0.00075 0 -0.0005625 0.000375 0 -0.0005625 0.0005625 0 -0.000375 0.0005625 -0.000375 -0.0005625 0.000375 -0.0001875 -0.0005625 0.0005625 -0.0001875 -0.000375 0.0005625 -0.0001875 -0.0005625 0.000375 -0.0005625 -0.0005625 0.00075 -0.0001875 -0.0001875 0.00075 -0.000375 -0.0005625 0.00075 -0.0001875 -0.0005625 0.00075 -0.0001875 -0.000375 0.00075 -0.0005625 -0.0005625 0.000375 -0.0005625 -0.0005625 0.0005625 -0.000375 -0.000375 0.0005625 -0.000375 -0.0005625 0.0005625 -0.0005625 -0.0005625 0.0009375 -0.0001875 -0.0001875 0.0013125 0 -0.0005625 0.0009375 0 -0.0001875 0.0013125 0 0 0.0009375 0 0 0.0013125 0 -0.000375 0.0009375 0 -0.0001875 0.0009375 0 -0.0001875 0.001125 -0.000375 -0.000375 0.0009375 -0.0001875 -0.0001875 0.0009375 -0.0001875 -0.0001875 0.001125 -0.000375 -0.0005625 0.0009375 -0.0001875 -0.0005625 0.0009375 -0.0001875 -0.000375 0.001125 -0.0001875 -0.000375 0.0009375 -0.00075 -0.0013125 0.00075 -0.00075 -0.0009375 0.00075 -0.00075 -0.0013125 0.000375 -0.00075 -0.0013125 0.0005625 -0.00075 -0.001125 0.0005625 -0.001125 -0.0013125 0.000375 -0.0009375 -0.0013125 0.0005625 -0.0009375 -0.001125 0.0005625 -0.0009375 -0.0013125 0.000375 0 -0.0013125 0.00075 0 -0.0009375 0.00075 0 -0.0013125 0.000375 0 -0.0013125 0.0005625 0 -0.001125 0.0005625 -0.000375 -0.0013125 0.000375 -0.0001875 -0.0013125 0.0005625 -0.0001875 -0.001125 0.0005625 -0.0001875 -0.0013125 0.000375 -0.0005625 -0.0013125 0.00075 -0.0001875 -0.0009375 0.00075 -0.000375 -0.0013125 0.00075 -0.0001875 -0.0013125 0.00075 -0.0001875 -0.001125 0.00075 -0.0005625 -0.0013125 0.000375 -0.0005625 -0.0013125 0.0005625 -0.000375 -0.001125 0.0005625 -0.000375 -0.0013125 0.0005625 -0.0005625 -0.001125 0.00075 -0.0005625 -0.0009375 0.00075 -0.000375 -0.0009375 0.00075 -0.0005625 -0.001125 0.0005625 -0.0005625 -0.0013125 0.0009375 -0.0001875 -0.0009375 0.0013125 0 -0.0013125 0.0009375 0 -0.0009375 0.0013125 0 -0.0013125 0.0013125 -0.0001875 -0.0013125 0.0013125 -0.000375 -0.0013125 0.0009375 -0.0001875 -0.0013125 0.0009375 -0.0001875 -0.001125 0.001125 0 -0.00075 0.0009375 0 -0.00075 0.0013125 0 -0.001125 0.0009375 0 -0.0009375 0.0009375 0 -0.0009375 0.001125 -0.000375 -0.001125 0.0009375 -0.0001875 -0.0009375 0.0009375 -0.0001875 -0.0009375 0.001125 -0.0001875 -0.001125 0.0009375 -0.0005625 -0.00075 0.0009375 -0.0001875 -0.00075 0.0013125 -0.000375 -0.00075 0.0009375 -0.0001875 -0.00075 0.0009375 -0.0001875 -0.00075 0.001125 -0.0005625 -0.001125 0.0009375 -0.0005625 -0.0009375 0.0009375 -0.000375 -0.0009375 0.001125 -0.000375 -0.0009375 0.0009375 0 -0.0005625 0.0015 0 -0.0001875 0.0015 0 -0.0005625 0.001125 0 -0.0005625 0.0013125 0 -0.000375 0.0013125 -0.000375 -0.0005625 0.001125 -0.0001875 -0.0005625 0.0013125 -0.0001875 -0.000375 0.0013125 -0.0001875 -0.0005625 0.001125 -0.0013125 -0.00075 0.0001875 -0.0009375 -0.00075 0.0005625 -0.001125 -0.00075 0.0001875 -0.0009375 -0.00075 0.0001875 -0.0009375 -0.00075 0.000375 -0.0013125 -0.001125 0.0001875 -0.0013125 -0.0009375 0.0001875 -0.001125 -0.0009375 0.000375 -0.001125 -0.0009375 0.0001875 -0.0013125 -0.0005625 0.0001875 -0.0009375 -0.0001875 0.0005625 -0.0013125 0 0.0001875 -0.0009375 0 0.0005625 -0.00075 0 0.0001875 -0.00075 0 0.0005625 -0.001125 0 0.0001875 -0.0009375 0 0.0001875 -0.0009375 0 0.000375 -0.001125 -0.000375 0.0001875 -0.0009375 -0.0001875 0.0001875 -0.0009375 -0.0001875 0.000375 -0.0013125 -0.000375 0.0001875 -0.0013125 -0.0001875 0.0001875 -0.001125 -0.0001875 0.000375 -0.001125 -0.0001875 0.0001875 -0.00075 -0.0005625 0.0001875 -0.00075 -0.0001875 0.0005625 -0.00075 -0.000375 0.0001875 -0.00075 -0.0001875 0.0001875 -0.00075 -0.0001875 0.000375 -0.001125 -0.0005625 0.0001875 -0.0009375 -0.0005625 0.0001875 -0.0009375 -0.000375 0.000375 -0.0009375 -0.000375 0.0001875 -0.00075 -0.0005625 0.00075 -0.00075 -0.0001875 0.00075 -0.00075 -0.0005625 0.000375 -0.00075 -0.0005625 0.0005625 -0.00075 -0.000375 0.0005625 -0.001125 -0.0005625 0.000375 -0.0009375 -0.0005625 0.0005625 -0.0009375 -0.000375 0.0005625 -0.0009375 -0.0005625 0.000375 -0.0005625 0 0.0001875 -0.0001875 0 0.0005625 -0.000375 0 0.0001875 -0.0001875 0 0.0001875 -0.0001875 0 0.000375 -0.0005625 -0.000375 0.0001875 -0.0005625 -0.0001875 0.0001875 -0.000375 -0.0001875 0.000375 -0.000375 -0.0001875 0.0001875 -0.0005625 0 0.00075 -0.0001875 0 0.00075 -0.0005625 0 0.000375 -0.0005625 0 0.0005625 -0.000375 0 0.0005625 -0.0005625 -0.000375 0.000375 -0.0005625 -0.0001875 0.0005625 -0.000375 -0.0001875 0.0005625 -0.0005625 -0.0001875 0.000375 -0.0005625 -0.000375 0.00075 -0.0005625 -0.0001875 0.00075 -0.000375 -0.0001875 0.00075 -0.0005625 -0.000375 0.0005625 -0.0005625 0 0.0009375 -0.0001875 0 0.0013125 -0.000375 0 0.0009375 -0.0001875 0 0.0009375 -0.0001875 0 0.001125 -0.0005625 -0.000375 0.0009375 -0.0005625 -0.0001875 0.0009375 -0.000375 -0.0001875 0.001125 -0.000375 -0.0001875 0.0009375 -0.0013125 -0.00075 0.00075 -0.0009375 -0.00075 0.00075 -0.0013125 -0.00075 0.000375 -0.0013125 -0.00075 0.0005625 -0.001125 -0.00075 0.0005625 -0.0013125 -0.001125 0.000375 -0.0013125 -0.0009375 0.0005625 -0.001125 -0.0009375 0.0005625 -0.0013125 -0.0009375 0.000375 -0.0013125 0 0.00075 -0.0009375 0 0.00075 -0.0013125 0 0.000375 -0.0013125 0 0.0005625 -0.001125 0 0.0005625 -0.0013125 -0.000375 0.000375 -0.0013125 -0.0001875 0.0005625 -0.001125 -0.0001875 0.0005625 -0.0013125 -0.0001875 0.000375 -0.0013125 -0.0005625 0.00075 -0.0009375 -0.0001875 0.00075 -0.0013125 -0.000375 0.00075 -0.0013125 -0.0001875 0.00075 -0.001125 -0.0001875 0.00075 -0.0013125 -0.0005625 0.000375 -0.0013125 -0.0005625 0.0005625 -0.001125 -0.000375 0.0005625 -0.0013125 -0.000375 0.0005625 -0.001125 -0.0005625 0.00075 -0.0009375 -0.0005625 0.00075 -0.0009375 -0.000375 0.00075 -0.001125 -0.0005625 0.0005625 -0.0013125 -0.0005625 0.0009375 -0.0009375 -0.0001875 0.0013125 -0.0013125 0 0.0009375 -0.0009375 0 0.0013125 -0.0013125 0 0.0013125 -0.0013125 -0.0001875 0.0013125 -0.0013125 -0.000375 0.0009375 -0.0013125 -0.0001875 0.0009375 -0.001125 -0.0001875 0.001125 -0.00075 0 0.0009375 -0.00075 0 0.0013125 -0.001125 0 0.0009375 -0.0009375 0 0.0009375 -0.0009375 0 0.001125 -0.001125 -0.000375 0.0009375 -0.0009375 -0.0001875 0.0009375 -0.0009375 -0.0001875 0.001125 -0.001125 -0.0001875 0.0009375 -0.00075 -0.0005625 0.0009375 -0.00075 -0.0001875 0.0013125 -0.00075 -0.000375 0.0009375 -0.00075 -0.0001875 0.0009375 -0.00075 -0.0001875 0.001125 -0.001125 -0.0005625 0.0009375 -0.0009375 -0.0005625 0.0009375 -0.0009375 -0.000375 0.001125 -0.0009375 -0.000375 0.0009375 -0.0005625 0 0.0015 -0.0001875 0 0.0015 -0.0005625 0 0.001125 -0.0005625 0 0.0013125 -0.000375 0 0.0013125 -0.0005625 -0.000375 0.001125 -0.0005625 -0.0001875 0.0013125 -0.000375 -0.0001875 0.0013125 -0.0005625 -0.0001875 0.001125 -0.0013125 -0.0013125 0.00075 -0.0009375 -0.0009375 0.00075 -0.001125 -0.0013125 0.00075 -0.0009375 -0.0013125 0.00075 -0.0009375 -0.001125 0.00075 -0.0013125 -0.0013125 0.000375 -0.0013125 -0.0013125 0.0005625 -0.001125 -0.001125 0.0005625 -0.001125 -0.0013125 0.0005625 -0.0013125 -0.0013125 0.0009375 -0.0009375 -0.0009375 0.0013125 -0.0009375 -0.0013125 0.0013125 -0.0013125 -0.0013125 0.0013125 -0.00075 -0.0013125 0.0009375 -0.00075 -0.0009375 0.0013125 -0.00075 -0.0013125 0.0013125 -0.0009375 -0.0015 0.001125 -0.001125 -0.0013125 0.0009375 -0.0009375 -0.0013125 0.0009375 -0.0009375 -0.001125 0.001125 -0.00075 -0.00075 0.0009375 -0.00075 -0.00075 0.0013125 -0.00075 -0.001125 0.0009375 -0.00075 -0.0009375 0.0009375 -0.00075 -0.0009375 0.001125 -0.001125 -0.001125 0.0009375 -0.0009375 -0.0009375 0.0009375 -0.0009375 -0.0009375 0.001125 -0.0009375 -0.001125 0.0009375 -0.0005625 -0.0013125 0.0013125 -0.0005625 -0.00075 0.0015 -0.0001875 -0.00075 0.0015 -0.0005625 -0.001125 0.0015 -0.0005625 -0.001125 0.001125 -0.0005625 -0.0009375 0.0013125 -0.000375 -0.0009375 0.0013125 -0.0005625 -0.00075 0.001125 -0.0005625 -0.00075 0.0013125 -0.000375 -0.00075 0.0013125 -0.0005625 -0.0009375 0.001125 -0.0005625 -0.0005625 0.0015 -0.0001875 -0.0001875 0.0015 -0.000375 -0.0005625 0.0015 -0.0001875 -0.0005625 0.0015 -0.0001875 -0.000375 0.0015 -0.0005625 -0.0005625 0.001125 -0.0005625 -0.0005625 0.0013125 -0.000375 -0.000375 0.0013125 -0.000375 -0.0005625 0.0013125 -0.0013125 -0.001125 0.00075 -0.0013125 -0.0009375 0.00075 -0.001125 -0.0009375 0.00075 -0.0013125 -0.001125 0.0005625 -0.0013125 -0.0009375 0.0013125 -0.0013125 -0.00075 0.0009375 -0.0009375 -0.00075 0.0013125 -0.0013125 -0.00075 0.0013125 -0.0015 -0.0009375 0.001125 -0.0013125 -0.001125 0.0009375 -0.0013125 -0.0009375 0.0009375 -0.001125 -0.0009375 0.001125 -0.001125 -0.00075 0.0009375 -0.0009375 -0.00075 0.0009375 -0.0009375 -0.00075 0.001125 -0.001125 -0.0009375 0.0009375 -0.0013125 -0.0005625 0.0013125 -0.00075 -0.0005625 0.0015 -0.00075 -0.0001875 0.0015 -0.001125 -0.0005625 0.0015 -0.001125 -0.0005625 0.001125 -0.0009375 -0.0005625 0.0013125 -0.0009375 -0.000375 0.0013125 -0.00075 -0.0005625 0.001125 -0.00075 -0.0005625 0.0013125 -0.00075 -0.000375 0.0013125 -0.0009375 -0.0005625 0.001125 -0.0005625 -0.000375 0.0015 -0.0005625 -0.0001875 0.0015 -0.000375 -0.0001875 0.0015 -0.0005625 -0.000375 0.0013125 0.0001875 -0.0013125 0.0001875 0.0005625 -0.0009375 0.0005625 0.00075 -0.0013125 0.0001875 0.00075 -0.0009375 0.0005625 0.00075 -0.00075 0.0001875 0.00075 -0.00075 0.0005625 0.00075 -0.001125 0.0001875 0.00075 -0.0009375 0.0001875 0.00075 -0.0009375 0.000375 0.000375 -0.001125 0.0001875 0.0005625 -0.0009375 0.0001875 0.0005625 -0.0009375 0.000375 0.000375 -0.0013125 0.0001875 0.0005625 -0.0013125 0.0001875 0.0005625 -0.001125 0.000375 0.0005625 -0.001125 0.0001875 0.0009375 -0.0013125 0.0001875 0.0013125 -0.0009375 0.0005625 0.0015 -0.00075 0.0001875 0.0015 -0.00075 0.0005625 0.0015 -0.001125 0.0001875 0.0013125 -0.0013125 0.0001875 0.001125 -0.001125 0.0001875 0.0013125 -0.0009375 0.0001875 0.0013125 -0.0009375 0.000375 0.0009375 -0.00075 0.0001875 0.0013125 -0.00075 0.0005625 0.001125 -0.00075 0.0001875 0.0013125 -0.00075 0.0001875 0.0013125 -0.00075 0.000375 0.0009375 -0.001125 0.0001875 0.0009375 -0.0009375 0.0001875 0.001125 -0.0009375 0.000375 0.001125 -0.0009375 0.0001875 0.0009375 -0.00075 0.00075 0.0013125 -0.00075 0.00075 0.0009375 -0.00075 0.000375 0.0009375 -0.00075 0.0005625 0.001125 -0.00075 0.0005625 0.0009375 -0.001125 0.000375 0.0009375 -0.0009375 0.0005625 0.001125 -0.0009375 0.0005625 0.0009375 -0.0009375 0.000375 0.0009375 -0.0005625 0.0001875 0.0013125 -0.0001875 0.0005625 0.0015 -0.0005625 0.0001875 0.0015 -0.0001875 0.0005625 0.0015 0 0.0001875 0.0015 0 0.0005625 0.0015 -0.000375 0.0001875 0.0015 -0.0001875 0.0001875 0.0015 -0.0001875 0.000375 0.001125 -0.000375 0.0001875 0.0013125 -0.0001875 0.0001875 0.0013125 -0.0001875 0.000375 0.001125 -0.0005625 0.0001875 0.0013125 -0.0005625 0.0001875 0.0013125 -0.000375 0.000375 0.0013125 -0.000375 0.0001875 0.0015 -0.0005625 0.00075 0.0015 -0.0001875 0.00075 0.0015 -0.0005625 0.000375 0.0015 -0.0005625 0.0005625 0.0015 -0.000375 0.0005625 0.001125 -0.0005625 0.000375 0.0013125 -0.0005625 0.0005625 0.0013125 -0.000375 0.0005625 0.0013125 -0.0005625 0.000375 0.0009375 -0.0005625 0.00075 0.0013125 -0.0001875 0.00075 0.001125 -0.0005625 0.00075 0.0013125 -0.0005625 0.00075 0.0013125 -0.000375 0.00075 0.0009375 -0.0005625 0.000375 0.0009375 -0.0005625 0.0005625 0.001125 -0.000375 0.0005625 0.001125 -0.0005625 0.0005625 0.0009375 -0.0005625 0.0009375 0.0013125 -0.0001875 0.0013125 0.0015 -0.0005625 0.0009375 0.0015 -0.0001875 0.0013125 0.0015 0 0.0009375 0.0015 0 0.0013125 0.0015 -0.000375 0.0009375 0.0015 -0.0001875 0.0009375 0.0015 -0.0001875 0.001125 0.001125 -0.000375 0.0009375 0.0013125 -0.0001875 0.0009375 0.0013125 -0.0001875 0.001125 0.001125 -0.0005625 0.0009375 0.0013125 -0.0005625 0.0009375 0.0013125 -0.000375 0.001125 0.0013125 -0.000375 0.0009375 0.00075 -0.0013125 0.00075 0.00075 -0.0009375 0.00075 0.00075 -0.0013125 0.000375 0.00075 -0.0013125 0.0005625 0.00075 -0.001125 0.0005625 0.000375 -0.0013125 0.000375 0.0005625 -0.0013125 0.0005625 0.0005625 -0.001125 0.0005625 0.0005625 -0.0013125 0.000375 0.0013125 -0.0013125 0.0005625 0.0009375 -0.0013125 0.00075 0.0013125 -0.0009375 0.00075 0.0013125 -0.0013125 0.00075 0.0009375 -0.0013125 0.000375 0.0009375 -0.0013125 0.0005625 0.001125 -0.001125 0.0005625 0.0009375 -0.001125 0.00075 0.0009375 -0.0009375 0.00075 0.001125 -0.0009375 0.00075 0.0009375 -0.001125 0.0005625 0.0009375 -0.0013125 0.0009375 0.0013125 -0.0009375 0.0013125 0.0013125 -0.0013125 0.0013125 0.0013125 -0.0013125 0.0009375 0.0015 -0.00075 0.0009375 0.0015 -0.00075 0.0013125 0.0015 -0.001125 0.0009375 0.001125 -0.001125 0.0009375 0.0013125 -0.0009375 0.0009375 0.0013125 -0.0009375 0.001125 0.0009375 -0.00075 0.0009375 0.0013125 -0.00075 0.0013125 0.001125 -0.00075 0.0009375 0.0013125 -0.00075 0.0009375 0.0013125 -0.00075 0.001125 0.0009375 -0.001125 0.0009375 0.0009375 -0.0009375 0.0009375 0.001125 -0.0009375 0.001125 0.001125 -0.0009375 0.0009375 0.0015 -0.0005625 0.0015 0.0015 -0.0001875 0.0015 0.0015 -0.0005625 0.001125 0.0015 -0.0005625 0.0013125 0.0015 -0.000375 0.0013125 0.001125 -0.0005625 0.001125 0.0013125 -0.0005625 0.0013125 0.0013125 -0.000375 0.0013125 0.0013125 -0.0005625 0.001125 0.0001875 -0.00075 0.0001875 0.0005625 -0.00075 0.0005625 0.000375 -0.00075 0.0001875 0.0005625 -0.00075 0.0001875 0.0005625 -0.00075 0.000375 0.0001875 -0.001125 0.0001875 0.0001875 -0.0009375 0.0001875 0.000375 -0.0009375 0.000375 0.000375 -0.0009375 0.0001875 0.0001875 -0.0005625 0.0001875 0.0005625 -0.0001875 0.0005625 0.0001875 0 0.0001875 0.0005625 0 0.0005625 0.00075 0 0.0001875 0.00075 0 0.0005625 0.000375 0 0.0001875 0.0005625 0 0.0001875 0.0005625 0 0.000375 0.000375 -0.000375 0.0001875 0.0005625 -0.0001875 0.0001875 0.0005625 -0.0001875 0.000375 0.0001875 -0.000375 0.0001875 0.0001875 -0.0001875 0.0001875 0.000375 -0.0001875 0.000375 0.000375 -0.0001875 0.0001875 0.00075 -0.0005625 0.0001875 0.00075 -0.0001875 0.0005625 0.00075 -0.000375 0.0001875 0.00075 -0.0001875 0.0001875 0.00075 -0.0001875 0.000375 0.000375 -0.0005625 0.0001875 0.0005625 -0.0005625 0.0001875 0.0005625 -0.000375 0.000375 0.0005625 -0.000375 0.0001875 0.00075 -0.0005625 0.00075 0.00075 -0.0001875 0.00075 0.00075 -0.0005625 0.000375 0.00075 -0.0005625 0.0005625 0.00075 -0.000375 0.0005625 0.000375 -0.0005625 0.000375 0.0005625 -0.0005625 0.0005625 0.0005625 -0.000375 0.0005625 0.0005625 -0.0005625 0.000375 0.0009375 0 0.0001875 0.0013125 0 0.0005625 0.001125 0 0.0001875 0.0013125 0 0.0001875 0.0013125 0 0.000375 0.0009375 -0.000375 0.0001875 0.0009375 -0.0001875 0.0001875 0.001125 -0.0001875 0.000375 0.001125 -0.0001875 0.0001875 0.0009375 0 0.00075 0.0013125 0 0.00075 0.0009375 0 0.000375 0.0009375 0 0.0005625 0.001125 0 0.0005625 0.0009375 -0.000375 0.000375 0.0009375 -0.0001875 0.0005625 0.001125 -0.0001875 0.0005625 0.0009375 -0.0001875 0.000375 0.0009375 -0.000375 0.00075 0.0009375 -0.0001875 0.00075 0.001125 -0.0001875 0.00075 0.0009375 -0.000375 0.0005625 0.0009375 0 0.0009375 0.0013125 0 0.0013125 0.001125 0 0.0009375 0.0013125 0 0.0009375 0.0013125 0 0.001125 0.0009375 -0.000375 0.0009375 0.0009375 -0.0001875 0.0009375 0.001125 -0.0001875 0.001125 0.001125 -0.0001875 0.0009375 0.0001875 -0.00075 0.00075 0.0005625 -0.00075 0.00075 0.0001875 -0.00075 0.000375 0.0001875 -0.00075 0.0005625 0.000375 -0.00075 0.0005625 0.0001875 -0.001125 0.000375 0.0001875 -0.0009375 0.0005625 0.000375 -0.0009375 0.0005625 0.0001875 -0.0009375 0.000375 0.0001875 0 0.00075 0.0005625 0 0.00075 0.0001875 0 0.000375 0.0001875 0 0.0005625 0.000375 0 0.0005625 0.0001875 -0.000375 0.000375 0.0001875 -0.0001875 0.0005625 0.000375 -0.0001875 0.0005625 0.0001875 -0.0001875 0.000375 0.0001875 -0.0005625 0.00075 0.0005625 -0.0001875 0.00075 0.0001875 -0.000375 0.00075 0.0001875 -0.0001875 0.00075 0.000375 -0.0001875 0.00075 0.0001875 -0.0005625 0.000375 0.0001875 -0.0005625 0.0005625 0.000375 -0.000375 0.0005625 0.0001875 -0.000375 0.0005625 0.000375 -0.0005625 0.00075 0.0005625 -0.0005625 0.00075 0.0005625 -0.000375 0.00075 0.000375 -0.0005625 0.0005625 0.0001875 -0.0005625 0.0009375 0.0005625 -0.0001875 0.0013125 0.0001875 0 0.0009375 0.0005625 0 0.0013125 0.0001875 0 0.0015 0.0005625 0 0.0015 0.0001875 0 0.001125 0.0001875 0 0.0013125 0.000375 0 0.0013125 0.0001875 -0.000375 0.001125 0.0001875 -0.0001875 0.0013125 0.000375 -0.0001875 0.0013125 0.0001875 -0.000375 0.0009375 0.0001875 -0.0001875 0.0009375 0.000375 -0.0001875 0.001125 0.0001875 -0.0001875 0.001125 0.00075 0 0.0009375 0.00075 0 0.0013125 0.000375 0 0.0009375 0.0005625 0 0.0009375 0.0005625 0 0.001125 0.000375 -0.000375 0.0009375 0.0005625 -0.0001875 0.0009375 0.0005625 -0.0001875 0.001125 0.000375 -0.0001875 0.0009375 0.00075 -0.0005625 0.0009375 0.00075 -0.0001875 0.0013125 0.00075 -0.000375 0.0009375 0.00075 -0.0001875 0.0009375 0.00075 -0.0001875 0.001125 0.000375 -0.0005625 0.0009375 0.0005625 -0.0005625 0.0009375 0.0005625 -0.000375 0.001125 0.0005625 -0.000375 0.0009375 0.0009375 0 0.0015 0.0013125 0 0.0015 0.0009375 0 0.001125 0.0009375 0 0.0013125 0.001125 0 0.0013125 0.0009375 -0.000375 0.001125 0.0009375 -0.0001875 0.0013125 0.001125 -0.0001875 0.0013125 0.0009375 -0.0001875 0.001125 0.0001875 -0.0013125 0.00075 0.0005625 -0.0009375 0.00075 0.000375 -0.0013125 0.00075 0.0005625 -0.0013125 0.00075 0.0005625 -0.001125 0.00075 0.0001875 -0.0013125 0.000375 0.0001875 -0.0013125 0.0005625 0.000375 -0.001125 0.0005625 0.000375 -0.0013125 0.0005625 0.0001875 -0.0013125 0.0009375 0.0005625 -0.0009375 0.0013125 0.0005625 -0.0013125 0.0013125 0.0001875 -0.0013125 0.0013125 0.00075 -0.0013125 0.0009375 0.00075 -0.0009375 0.0013125 0.00075 -0.0013125 0.0013125 0.000375 -0.0013125 0.0009375 0.0005625 -0.0013125 0.0009375 0.0005625 -0.001125 0.001125 0.00075 -0.00075 0.0009375 0.00075 -0.00075 0.0013125 0.00075 -0.001125 0.0009375 0.00075 -0.0009375 0.0009375 0.00075 -0.0009375 0.001125 0.000375 -0.001125 0.0009375 0.0005625 -0.0009375 0.0009375 0.0005625 -0.0009375 0.001125 0.0005625 -0.001125 0.0009375 0.0009375 -0.0013125 0.0013125 0.0009375 -0.00075 0.0015 0.0013125 -0.00075 0.0015 0.0009375 -0.001125 0.0015 0.0009375 -0.001125 0.001125 0.0009375 -0.0009375 0.0013125 0.001125 -0.0009375 0.0013125 0.0009375 -0.00075 0.001125 0.0009375 -0.00075 0.0013125 0.001125 -0.00075 0.0013125 0.0009375 -0.0009375 0.001125 0.0009375 -0.0005625 0.0015 0.0013125 -0.0001875 0.0015 0.001125 -0.0005625 0.0015 0.0013125 -0.0005625 0.0015 0.0013125 -0.000375 0.0015 0.0009375 -0.0005625 0.001125 0.0009375 -0.0005625 0.0013125 0.001125 -0.000375 0.0013125 0.001125 -0.0005625 0.0013125 0.0001875 -0.001125 0.00075 0.0001875 -0.0009375 0.00075 0.000375 -0.0009375 0.00075 0.0001875 -0.001125 0.0005625 0.0001875 -0.00075 0.0015 0.0005625 -0.00075 0.0015 0.0001875 -0.001125 0.0015 0.0001875 -0.001125 0.001125 0.0001875 -0.0009375 0.0013125 0.000375 -0.0009375 0.0013125 0.0001875 -0.00075 0.0009375 0.0005625 -0.00075 0.0013125 0.0001875 -0.00075 0.001125 0.0001875 -0.00075 0.0013125 0.000375 -0.00075 0.0013125 0.0001875 -0.001125 0.0009375 0.0001875 -0.0009375 0.0009375 0.000375 -0.0009375 0.001125 0.0001875 -0.0009375 0.001125 0.000375 -0.00075 0.0009375 0.0005625 -0.00075 0.0009375 0.0005625 -0.00075 0.001125 0.000375 -0.0009375 0.0009375 0.0001875 -0.0005625 0.0015 0.0005625 -0.0001875 0.0015 0.0001875 -0.000375 0.0015 0.0001875 -0.0001875 0.0015 0.000375 -0.0001875 0.0015 0.0001875 -0.0005625 0.001125 0.0001875 -0.0005625 0.0013125 0.000375 -0.000375 0.0013125 0.0001875 -0.000375 0.0013125 0.00075 -0.0005625 0.0015 0.00075 -0.0001875 0.0015 0.000375 -0.0005625 0.0015 0.0005625 -0.0005625 0.0015 0.0005625 -0.000375 0.0015 0.000375 -0.0005625 0.001125 0.0005625 -0.0005625 0.0013125 0.0005625 -0.000375 0.0013125 0.000375 -0.0005625 0.0013125 0.00075 -0.0005625 0.001125 0.00075 -0.0005625 0.0013125 0.00075 -0.000375 0.0013125 0.0005625 -0.0005625 0.001125 0.0009375 -0.000375 0.0015 0.0009375 -0.0001875 0.0015 0.001125 -0.0001875 0.0015 0.0009375 -0.000375 0.0013125 -0.0020625 0.0001875 0.0001875 -0.0016875 0.0005625 0.0005625 -0.0015 0.0001875 0.0001875 -0.0015 0.0005625 0.0005625 -0.0015 0.00075 0.0001875 -0.0015 0.00075 0.0005625 -0.0015 0.000375 0.0001875 -0.0015 0.0005625 0.0001875 -0.0015 0.0005625 0.000375 -0.001875 0.000375 0.0001875 -0.0016875 0.0005625 0.0001875 -0.0016875 0.0005625 0.000375 -0.001875 0.0001875 0.0001875 -0.0016875 0.0001875 0.0001875 -0.0016875 0.000375 0.000375 -0.0016875 0.000375 0.0001875 -0.001875 0.00075 0.0001875 -0.0020625 0.0005625 0.0001875 -0.0020625 0.0005625 0.0005625 -0.0015 0.001125 0.0005625 -0.0015 0.0001875 0.00075 -0.0015 0.0005625 0.00075 -0.0015 0.0001875 0.000375 -0.0015 0.0001875 0.0005625 -0.0015 0.000375 0.0005625 -0.001875 0.0001875 0.000375 -0.0016875 0.0001875 0.0005625 -0.0016875 0.000375 0.0005625 -0.0016875 0.0001875 0.000375 -0.001875 0.0001875 0.00075 -0.0020625 0.0001875 0.0005625 -0.0015 0.0005625 0.001125 -0.0013125 0.0001875 0.0001875 -0.0009375 0.0005625 0.0005625 -0.00075 0.0001875 0.0001875 -0.00075 0.0005625 0.0005625 -0.00075 0.00075 0.0001875 -0.00075 0.00075 0.0005625 -0.00075 0.000375 0.0001875 -0.00075 0.0005625 0.0001875 -0.00075 0.0005625 0.000375 -0.001125 0.000375 0.0001875 -0.0009375 0.0005625 0.0001875 -0.0009375 0.0005625 0.000375 -0.001125 0.0001875 0.0001875 -0.0009375 0.0001875 0.0001875 -0.0009375 0.000375 0.000375 -0.0009375 0.000375 0.0001875 -0.0005625 0.0001875 0.0001875 -0.0001875 0.0005625 0.0005625 0 0.0001875 0.0001875 0 0.0005625 0.0005625 0 0.00075 0.0001875 0 0.00075 0.0005625 0 0.000375 0.0001875 0 0.0005625 0.0001875 0 0.0005625 0.000375 -0.000375 0.000375 0.0001875 -0.0001875 0.0005625 0.0001875 -0.0001875 0.0005625 0.000375 -0.000375 0.0001875 0.0001875 -0.0001875 0.0001875 0.0001875 -0.0001875 0.000375 0.000375 -0.0001875 0.000375 0.0001875 -0.0005625 0.00075 0.0001875 -0.0001875 0.00075 0.0005625 -0.000375 0.00075 0.0001875 -0.0001875 0.00075 0.0001875 -0.0001875 0.00075 0.000375 -0.0005625 0.000375 0.0001875 -0.0005625 0.0005625 0.0001875 -0.000375 0.0005625 0.000375 -0.000375 0.0005625 0.0001875 -0.0005625 0.00075 0.00075 -0.0001875 0.00075 0.00075 -0.0005625 0.00075 0.000375 -0.0005625 0.00075 0.0005625 -0.000375 0.00075 0.0005625 -0.0005625 0.000375 0.000375 -0.0005625 0.0005625 0.0005625 -0.000375 0.0005625 0.0005625 -0.0005625 0.0005625 0.000375 -0.0005625 0.0009375 0.0001875 -0.0001875 0.0013125 0.0005625 0 0.0009375 0.0001875 0 0.0013125 0.0005625 0 0.0015 0.0001875 0 0.0015 0.0005625 0 0.001125 0.0001875 0 0.0013125 0.0001875 0 0.0013125 0.000375 -0.000375 0.001125 0.0001875 -0.0001875 0.0013125 0.0001875 -0.0001875 0.0013125 0.000375 -0.000375 0.0009375 0.0001875 -0.0001875 0.0009375 0.0001875 -0.0001875 0.001125 0.000375 -0.0001875 0.001125 0.0001875 0 0.0009375 0.00075 0 0.0013125 0.00075 0 0.0009375 0.000375 0 0.0009375 0.0005625 0 0.001125 0.0005625 -0.000375 0.0009375 0.000375 -0.0001875 0.0009375 0.0005625 -0.0001875 0.001125 0.0005625 -0.0001875 0.0009375 0.000375 -0.0005625 0.0009375 0.00075 -0.0001875 0.0013125 0.00075 -0.000375 0.0009375 0.00075 -0.0001875 0.0009375 0.00075 -0.0001875 0.001125 0.00075 -0.0005625 0.0009375 0.000375 -0.0005625 0.0009375 0.0005625 -0.000375 0.001125 0.0005625 -0.000375 0.0009375 0.0005625 -0.0005625 0.0009375 0.0009375 -0.0001875 0.0013125 0.0013125 0 0.0009375 0.0009375 0 0.0013125 0.0013125 0 0.0015 0.0009375 0 0.0015 0.0013125 0 0.001125 0.0009375 0 0.0013125 0.0009375 0 0.0013125 0.001125 -0.000375 0.001125 0.0009375 -0.0001875 0.0013125 0.0009375 -0.0001875 0.0013125 0.001125 -0.000375 0.0009375 0.0009375 -0.0001875 0.0009375 0.0009375 -0.0001875 0.001125 0.001125 -0.0001875 0.001125 0.0009375 -0.00075 0.0001875 0.00075 -0.00075 0.0005625 0.00075 -0.00075 0.0001875 0.000375 -0.00075 0.0001875 0.0005625 -0.00075 0.000375 0.0005625 -0.001125 0.0001875 0.000375 -0.0009375 0.0001875 0.0005625 -0.0009375 0.000375 0.0005625 -0.0009375 0.0001875 0.000375 0 0.0001875 0.00075 0 0.0005625 0.00075 0 0.0001875 0.000375 0 0.0001875 0.0005625 0 0.000375 0.0005625 -0.000375 0.0001875 0.000375 -0.0001875 0.0001875 0.0005625 -0.0001875 0.000375 0.0005625 -0.0001875 0.0001875 0.000375 -0.0005625 0.0001875 0.00075 -0.0001875 0.0005625 0.00075 -0.000375 0.0001875 0.00075 -0.0001875 0.0001875 0.00075 -0.0001875 0.000375 0.00075 -0.0005625 0.0001875 0.000375 -0.0005625 0.0001875 0.0005625 -0.000375 0.000375 0.0005625 -0.000375 0.0001875 0.0005625 -0.0005625 0.000375 0.00075 -0.0005625 0.0005625 0.00075 -0.000375 0.0005625 0.00075 -0.0005625 0.000375 0.0005625 -0.0005625 0.0001875 0.0009375 -0.0001875 0.0005625 0.0013125 0 0.0001875 0.0009375 0 0.0005625 0.0013125 0 0.0001875 0.0015 0 0.0005625 0.0015 0 0.0001875 0.001125 0 0.0001875 0.0013125 0 0.000375 0.0013125 -0.000375 0.0001875 0.001125 -0.0001875 0.0001875 0.0013125 -0.0001875 0.000375 0.0013125 -0.000375 0.0001875 0.0009375 -0.0001875 0.0001875 0.0009375 -0.0001875 0.000375 0.001125 -0.0001875 0.0001875 0.001125 0 0.00075 0.0009375 0 0.00075 0.0013125 0 0.000375 0.0009375 0 0.0005625 0.0009375 0 0.0005625 0.001125 -0.000375 0.000375 0.0009375 -0.0001875 0.0005625 0.0009375 -0.0001875 0.0005625 0.001125 -0.0001875 0.000375 0.0009375 -0.0005625 0.00075 0.0009375 -0.0001875 0.00075 0.0013125 -0.000375 0.00075 0.0009375 -0.0001875 0.00075 0.0009375 -0.0001875 0.00075 0.001125 -0.0005625 0.000375 0.0009375 -0.0005625 0.0005625 0.0009375 -0.000375 0.0005625 0.001125 -0.000375 0.0005625 0.0009375 0 0.0009375 0.0015 0 0.0013125 0.0015 0 0.0009375 0.001125 0 0.0009375 0.0013125 0 0.001125 0.0013125 -0.000375 0.0009375 0.001125 -0.0001875 0.0009375 0.0013125 -0.0001875 0.001125 0.0013125 -0.0001875 0.0009375 0.001125 -0.0013125 0.00075 0.0001875 -0.0009375 0.00075 0.0005625 -0.001125 0.00075 0.0001875 -0.0009375 0.00075 0.0001875 -0.0009375 0.00075 0.000375 -0.0013125 0.000375 0.0001875 -0.0013125 0.0005625 0.0001875 -0.001125 0.0005625 0.000375 -0.001125 0.0005625 0.0001875 -0.0013125 0.0009375 0.0001875 -0.0009375 0.0013125 0.0005625 -0.00075 0.0015 0.0001875 -0.00075 0.0015 0.0005625 -0.001125 0.0015 0.0001875 -0.0013125 0.0013125 0.0001875 -0.001125 0.001125 0.0001875 -0.0009375 0.0013125 0.0001875 -0.0009375 0.0013125 0.000375 -0.00075 0.0009375 0.0001875 -0.00075 0.0013125 0.0005625 -0.00075 0.001125 0.0001875 -0.00075 0.0013125 0.0001875 -0.00075 0.0013125 0.000375 -0.001125 0.0009375 0.0001875 -0.0009375 0.0009375 0.0001875 -0.0009375 0.001125 0.000375 -0.0009375 0.001125 0.0001875 -0.00075 0.0009375 0.00075 -0.00075 0.0013125 0.00075 -0.00075 0.0009375 0.000375 -0.00075 0.0009375 0.0005625 -0.00075 0.001125 0.0005625 -0.001125 0.0009375 0.000375 -0.0009375 0.0009375 0.0005625 -0.0009375 0.001125 0.0005625 -0.0009375 0.0009375 0.000375 -0.0005625 0.0015 0.0001875 -0.0001875 0.0015 0.0005625 -0.000375 0.0015 0.0001875 -0.0001875 0.0015 0.0001875 -0.0001875 0.0015 0.000375 -0.0005625 0.001125 0.0001875 -0.0005625 0.0013125 0.0001875 -0.000375 0.0013125 0.000375 -0.000375 0.0013125 0.0001875 -0.0005625 0.0015 0.00075 -0.0001875 0.0015 0.00075 -0.0005625 0.0015 0.000375 -0.0005625 0.0015 0.0005625 -0.000375 0.0015 0.0005625 -0.0005625 0.001125 0.000375 -0.0005625 0.0013125 0.0005625 -0.000375 0.0013125 0.0005625 -0.0005625 0.0013125 0.000375 -0.0005625 0.001125 0.00075 -0.0005625 0.0013125 0.00075 -0.000375 0.0013125 0.00075 -0.0005625 0.001125 0.0005625 -0.0005625 0.0015 0.0009375 -0.0001875 0.0015 0.0013125 -0.000375 0.0015 0.0009375 -0.0001875 0.0015 0.0009375 -0.0001875 0.0015 0.001125 -0.0005625 0.001125 0.0009375 -0.0005625 0.0013125 0.0009375 -0.000375 0.0013125 0.001125 -0.000375 0.0013125 0.0009375 -0.0013125 0.00075 0.00075 -0.0009375 0.00075 0.00075 -0.0013125 0.00075 0.000375 -0.0013125 0.00075 0.0005625 -0.001125 0.00075 0.0005625 -0.0013125 0.000375 0.000375 -0.0013125 0.0005625 0.0005625 -0.001125 0.0005625 0.0005625 -0.0013125 0.0005625 0.000375 -0.0013125 0.0013125 0.0005625 -0.0013125 0.0009375 0.00075 -0.0009375 0.0013125 0.00075 -0.0013125 0.0013125 0.00075 -0.0013125 0.0009375 0.000375 -0.0013125 0.0009375 0.0005625 -0.001125 0.001125 0.0005625 -0.001125 0.0009375 0.00075 -0.0009375 0.0009375 0.00075 -0.0009375 0.001125 0.00075 -0.001125 0.0009375 0.0005625 -0.0013125 0.0009375 0.0009375 -0.0009375 0.0013125 0.0013125 -0.0013125 0.0013125 0.0013125 -0.0013125 0.0013125 0.0009375 -0.00075 0.0015 0.0009375 -0.00075 0.0015 0.0013125 -0.001125 0.0015 0.0009375 -0.001125 0.001125 0.0009375 -0.0009375 0.0013125 0.0009375 -0.0009375 0.0013125 0.001125 -0.00075 0.0009375 0.0009375 -0.00075 0.0013125 0.0013125 -0.00075 0.001125 0.0009375 -0.00075 0.0013125 0.0009375 -0.00075 0.0013125 0.001125 -0.001125 0.0009375 0.0009375 -0.0009375 0.0009375 0.0009375 -0.0009375 0.001125 0.001125 -0.0009375 0.001125 0.0009375 -0.0005625 0.0015 0.0015 -0.0001875 0.0015 0.0015 -0.0005625 0.0015 0.001125 -0.0005625 0.0015 0.0013125 -0.000375 0.0015 0.0013125 -0.0005625 0.001125 0.001125 -0.0005625 0.0013125 0.0013125 -0.000375 0.0013125 0.0013125 -0.0005625 0.0013125 0.001125 -0.0013125 0.0001875 0.00075 -0.0009375 0.0005625 0.00075 -0.001125 0.0001875 0.00075 -0.0009375 0.0001875 0.00075 -0.0009375 0.000375 0.00075 -0.0013125 0.0001875 0.000375 -0.0013125 0.0001875 0.0005625 -0.001125 0.000375 0.0005625 -0.001125 0.0001875 0.0005625 -0.0013125 0.0001875 0.0009375 -0.0009375 0.0005625 0.0013125 -0.00075 0.0001875 0.0015 -0.00075 0.0005625 0.0015 -0.001125 0.0001875 0.0015 -0.0013125 0.0001875 0.0013125 -0.001125 0.0001875 0.001125 -0.0009375 0.0001875 0.0013125 -0.0009375 0.000375 0.0013125 -0.00075 0.0001875 0.0009375 -0.00075 0.0005625 0.0013125 -0.00075 0.0001875 0.001125 -0.00075 0.0001875 0.0013125 -0.00075 0.000375 0.0013125 -0.001125 0.0001875 0.0009375 -0.0009375 0.0001875 0.0009375 -0.0009375 0.000375 0.001125 -0.0009375 0.0001875 0.001125 -0.00075 0.00075 0.0009375 -0.00075 0.00075 0.0013125 -0.00075 0.000375 0.0009375 -0.00075 0.0005625 0.0009375 -0.00075 0.0005625 0.001125 -0.001125 0.000375 0.0009375 -0.0009375 0.0005625 0.0009375 -0.0009375 0.0005625 0.001125 -0.0009375 0.000375 0.0009375 -0.0005625 0.0001875 0.0015 -0.0001875 0.0005625 0.0015 -0.000375 0.0001875 0.0015 -0.0001875 0.0001875 0.0015 -0.0001875 0.000375 0.0015 -0.0005625 0.0001875 0.001125 -0.0005625 0.0001875 0.0013125 -0.000375 0.000375 0.0013125 -0.000375 0.0001875 0.0013125 -0.0005625 0.00075 0.0015 -0.0001875 0.00075 0.0015 -0.0005625 0.000375 0.0015 -0.0005625 0.0005625 0.0015 -0.000375 0.0005625 0.0015 -0.0005625 0.000375 0.001125 -0.0005625 0.0005625 0.0013125 -0.000375 0.0005625 0.0013125 -0.0005625 0.000375 0.0013125 -0.0005625 0.00075 0.001125 -0.0005625 0.00075 0.0013125 -0.000375 0.00075 0.0013125 -0.0005625 0.0005625 0.001125 -0.0005625 0.0009375 0.0015 -0.0001875 0.0013125 0.0015 -0.000375 0.0009375 0.0015 -0.0001875 0.0009375 0.0015 -0.0001875 0.001125 0.0015 -0.0005625 0.0009375 0.001125 -0.0005625 0.0009375 0.0013125 -0.000375 0.001125 0.0013125 -0.000375 0.0009375 0.0013125 -0.0013125 0.000375 0.00075 -0.0013125 0.0005625 0.00075 -0.001125 0.0005625 0.00075 -0.0013125 0.000375 0.0005625 -0.0013125 0.0005625 0.0013125 -0.0013125 0.00075 0.0009375 -0.0009375 0.00075 0.0013125 -0.0013125 0.00075 0.0013125 -0.0013125 0.000375 0.0009375 -0.0013125 0.0005625 0.0009375 -0.001125 0.0005625 0.001125 -0.001125 0.00075 0.0009375 -0.0009375 0.00075 0.0009375 -0.0009375 0.00075 0.001125 -0.001125 0.0005625 0.0009375 -0.0013125 0.0009375 0.0013125 -0.00075 0.0009375 0.0015 -0.00075 0.0013125 0.0015 -0.001125 0.0009375 0.0015 -0.001125 0.0009375 0.001125 -0.0009375 0.0009375 0.0013125 -0.0009375 0.001125 0.0013125 -0.00075 0.0009375 0.001125 -0.00075 0.0009375 0.0013125 -0.00075 0.001125 0.0013125 -0.0009375 0.0009375 0.001125 -0.0005625 0.001125 0.0015 -0.0005625 0.0013125 0.0015 -0.000375 0.0013125 0.0015 -0.0005625 0.001125 0.0013125 0.0001875 0.0001875 0.0001875 0.0005625 0.0005625 0.0005625 0.00075 0.0001875 0.0001875 0.00075 0.0005625 0.0005625 0.00075 0.00075 0.0001875 0.00075 0.00075 0.0005625 0.00075 0.000375 0.0001875 0.00075 0.0005625 0.0001875 0.00075 0.0005625 0.000375 0.000375 0.000375 0.0001875 0.0005625 0.0005625 0.0001875 0.0005625 0.0005625 0.000375 0.000375 0.0001875 0.0001875 0.0005625 0.0001875 0.0001875 0.0005625 0.000375 0.000375 0.0005625 0.000375 0.0001875 0.0009375 0.0001875 0.0001875 0.0013125 0.0005625 0.0005625 0.0015 0.0001875 0.0001875 0.0015 0.0005625 0.0005625 0.0015 0.00075 0.0001875 0.0015 0.00075 0.0005625 0.0015 0.000375 0.0001875 0.0015 0.0005625 0.0001875 0.0015 0.0005625 0.000375 0.001125 0.000375 0.0001875 0.0013125 0.0005625 0.0001875 0.0013125 0.0005625 0.000375 0.001125 0.0001875 0.0001875 0.0013125 0.0001875 0.0001875 0.0013125 0.000375 0.000375 0.0013125 0.000375 0.0001875 0.0009375 0.00075 0.0001875 0.0013125 0.00075 0.0005625 0.001125 0.00075 0.0001875 0.0013125 0.00075 0.0001875 0.0013125 0.00075 0.000375 0.0009375 0.000375 0.0001875 0.0009375 0.0005625 0.0001875 0.001125 0.0005625 0.000375 0.001125 0.0005625 0.0001875 0.0009375 0.00075 0.00075 0.0013125 0.00075 0.00075 0.0009375 0.00075 0.000375 0.0009375 0.00075 0.0005625 0.001125 0.00075 0.0005625 0.0009375 0.000375 0.000375 0.0009375 0.0005625 0.0005625 0.001125 0.0005625 0.0005625 0.0009375 0.0005625 0.000375 0.0009375 0.0009375 0.0001875 0.0013125 0.0013125 0.0005625 0.0015 0.0009375 0.0001875 0.0015 0.0013125 0.0005625 0.0015 0.0015 0.0001875 0.0015 0.0015 0.0005625 0.0015 0.001125 0.0001875 0.0015 0.0013125 0.0001875 0.0015 0.0013125 0.000375 0.001125 0.001125 0.0001875 0.0013125 0.0013125 0.0001875 0.0013125 0.0013125 0.000375 0.001125 0.0009375 0.0001875 0.0013125 0.0009375 0.0001875 0.0013125 0.001125 0.000375 0.0013125 0.001125 0.0001875 0.0015 0.0009375 0.00075 0.0015 0.0013125 0.00075 0.0015 0.0009375 0.000375 0.0015 0.0009375 0.0005625 0.0015 0.001125 0.0005625 0.001125 0.0009375 0.000375 0.0013125 0.0009375 0.0005625 0.0013125 0.001125 0.0005625 0.0013125 0.0009375 0.000375 0.0009375 0.0009375 0.00075 0.0013125 0.0013125 0.00075 0.001125 0.0009375 0.00075 0.0013125 0.0009375 0.00075 0.0013125 0.001125 0.00075 0.0009375 0.0009375 0.000375 0.0009375 0.0009375 0.0005625 0.001125 0.001125 0.0005625 0.001125 0.0009375 0.0005625 0.0009375 0.0009375 0.0009375 0.0013125 0.0013125 0.0013125 0.0015 0.0009375 0.0009375 0.0015 0.0013125 0.0013125 0.0015 0.0015 0.0009375 0.0015 0.0015 0.0013125 0.0015 0.001125 0.0009375 0.0015 0.0013125 0.0009375 0.0015 0.0013125 0.001125 0.001125 0.001125 0.0009375 0.0013125 0.0013125 0.0009375 0.0013125 0.0013125 0.001125 0.001125 0.0009375 0.0009375 0.0013125 0.0009375 0.0009375 0.0013125 0.001125 0.001125 0.0013125 0.001125 0.0009375 0.00075 0.0001875 0.00075 0.00075 0.0005625 0.00075 0.00075 0.0001875 0.000375 0.00075 0.0001875 0.0005625 0.00075 0.000375 0.0005625 0.000375 0.0001875 0.000375 0.0005625 0.0001875 0.0005625 0.0005625 0.000375 0.0005625 0.0005625 0.0001875 0.000375 0.0015 0.0001875 0.00075 0.0015 0.0005625 0.00075 0.0015 0.0001875 0.000375 0.0015 0.0001875 0.0005625 0.0015 0.000375 0.0005625 0.001125 0.0001875 0.000375 0.0013125 0.0001875 0.0005625 0.0013125 0.000375 0.0005625 0.0013125 0.0001875 0.000375 0.0009375 0.0001875 0.00075 0.0013125 0.0005625 0.00075 0.001125 0.0001875 0.00075 0.0013125 0.0001875 0.00075 0.0013125 0.000375 0.00075 0.0009375 0.0001875 0.000375 0.0009375 0.0001875 0.0005625 0.001125 0.000375 0.0005625 0.001125 0.0001875 0.0005625 0.0009375 0.000375 0.00075 0.0009375 0.0005625 0.00075 0.001125 0.0005625 0.00075 0.0009375 0.000375 0.0005625 0.0009375 0.0001875 0.0009375 0.0013125 0.0005625 0.0013125 0.0015 0.0001875 0.0009375 0.0015 0.0005625 0.0013125 0.0015 0.0001875 0.0015 0.0015 0.0005625 0.0015 0.0015 0.0001875 0.001125 0.0015 0.0001875 0.0013125 0.0015 0.000375 0.0013125 0.001125 0.0001875 0.001125 0.0013125 0.0001875 0.0013125 0.0013125 0.000375 0.0013125 0.001125 0.0001875 0.0009375 0.0013125 0.0001875 0.0009375 0.0013125 0.000375 0.001125 0.0013125 0.0001875 0.001125 0.0015 0.00075 0.0009375 0.0015 0.00075 0.0013125 0.0015 0.000375 0.0009375 0.0015 0.0005625 0.0009375 0.0015 0.0005625 0.001125 0.001125 0.000375 0.0009375 0.0013125 0.0005625 0.0009375 0.0013125 0.0005625 0.001125 0.0013125 0.000375 0.0009375 0.0009375 0.00075 0.0009375 0.0013125 0.00075 0.0013125 0.001125 0.00075 0.0009375 0.0013125 0.00075 0.0009375 0.0013125 0.00075 0.001125 0.0009375 0.000375 0.0009375 0.0009375 0.0005625 0.0009375 0.001125 0.0005625 0.001125 0.001125 0.0005625 0.0009375 0.0015 0.0009375 0.0015 0.0015 0.0013125 0.0015 0.0015 0.0009375 0.001125 0.0015 0.0009375 0.0013125 0.0015 0.001125 0.0013125 0.001125 0.0009375 0.001125 0.0013125 0.0009375 0.0013125 0.0013125 0.001125 0.0013125 0.0013125 0.0009375 0.001125 0.0001875 0.00075 0.0001875 0.0005625 0.00075 0.0005625 0.000375 0.00075 0.0001875 0.0005625 0.00075 0.0001875 0.0005625 0.00075 0.000375 0.0001875 0.000375 0.0001875 0.0001875 0.0005625 0.0001875 0.000375 0.0005625 0.000375 0.000375 0.0005625 0.0001875 0.0001875 0.0009375 0.0001875 0.0005625 0.0013125 0.0005625 0.0001875 0.0015 0.0001875 0.0005625 0.0015 0.0005625 0.00075 0.0015 0.0001875 0.00075 0.0015 0.0005625 0.000375 0.0015 0.0001875 0.0005625 0.0015 0.0001875 0.0005625 0.0015 0.000375 0.000375 0.001125 0.0001875 0.0005625 0.0013125 0.0001875 0.0005625 0.0013125 0.000375 0.0001875 0.001125 0.0001875 0.0001875 0.0013125 0.0001875 0.000375 0.0013125 0.000375 0.000375 0.0013125 0.0001875 0.00075 0.0009375 0.0001875 0.00075 0.0013125 0.0005625 0.00075 0.001125 0.0001875 0.00075 0.0013125 0.0001875 0.00075 0.0013125 0.000375 0.000375 0.0009375 0.0001875 0.0005625 0.0009375 0.0001875 0.0005625 0.001125 0.000375 0.0005625 0.001125 0.0001875 0.00075 0.0009375 0.00075 0.00075 0.0013125 0.00075 0.00075 0.0009375 0.000375 0.00075 0.0009375 0.0005625 0.00075 0.001125 0.0005625 0.000375 0.0009375 0.000375 0.0005625 0.0009375 0.0005625 0.0005625 0.001125 0.0005625 0.0005625 0.0009375 0.000375 0.0009375 0.0015 0.0001875 0.0013125 0.0015 0.0005625 0.001125 0.0015 0.0001875 0.0013125 0.0015 0.0001875 0.0013125 0.0015 0.000375 0.0009375 0.001125 0.0001875 0.0009375 0.0013125 0.0001875 0.001125 0.0013125 0.000375 0.001125 0.0013125 0.0001875 0.0009375 0.0015 0.00075 0.0013125 0.0015 0.00075 0.0009375 0.0015 0.000375 0.0009375 0.0015 0.0005625 0.001125 0.0015 0.0005625 0.0009375 0.001125 0.000375 0.0009375 0.0013125 0.0005625 0.001125 0.0013125 0.0005625 0.0009375 0.0013125 0.000375 0.0009375 0.001125 0.00075 0.0009375 0.0013125 0.00075 0.001125 0.0013125 0.00075 0.0009375 0.001125 0.0005625 0.0009375 0.0015 0.0009375 0.0013125 0.0015 0.0013125 0.001125 0.0015 0.0009375 0.0013125 0.0015 0.0009375 0.0013125 0.0015 0.001125 0.0009375 0.001125 0.0009375 0.0009375 0.0013125 0.0009375 0.001125 0.0013125 0.001125 0.001125 0.0013125 0.0009375 0.0001875 0.00075 0.00075 0.0005625 0.00075 0.00075 0.0001875 0.00075 0.000375 0.0001875 0.00075 0.0005625 0.000375 0.00075 0.0005625 0.0001875 0.000375 0.000375 0.0001875 0.0005625 0.0005625 0.000375 0.0005625 0.0005625 0.0001875 0.0005625 0.000375 0.0001875 0.0015 0.00075 0.0005625 0.0015 0.00075 0.0001875 0.0015 0.000375 0.0001875 0.0015 0.0005625 0.000375 0.0015 0.0005625 0.0001875 0.001125 0.000375 0.0001875 0.0013125 0.0005625 0.000375 0.0013125 0.0005625 0.0001875 0.0013125 0.000375 0.0001875 0.0009375 0.00075 0.0005625 0.0013125 0.00075 0.0001875 0.001125 0.00075 0.0001875 0.0013125 0.00075 0.000375 0.0013125 0.00075 0.0001875 0.0009375 0.000375 0.0001875 0.0009375 0.0005625 0.000375 0.001125 0.0005625 0.0001875 0.001125 0.0005625 0.000375 0.0009375 0.00075 0.0005625 0.0009375 0.00075 0.0005625 0.001125 0.00075 0.000375 0.0009375 0.0005625 0.0001875 0.0009375 0.0009375 0.0005625 0.0013125 0.0013125 0.0001875 0.0015 0.0009375 0.0005625 0.0015 0.0013125 0.0001875 0.0015 0.0015 0.0005625 0.0015 0.0015 0.0001875 0.0015 0.001125 0.0001875 0.0015 0.0013125 0.000375 0.0015 0.0013125 0.0001875 0.001125 0.001125 0.0001875 0.0013125 0.0013125 0.000375 0.0013125 0.0013125 0.0001875 0.001125 0.0009375 0.0001875 0.0013125 0.0009375 0.000375 0.0013125 0.001125 0.0001875 0.0013125 0.001125 0.00075 0.0015 0.0009375 0.00075 0.0015 0.0013125 0.000375 0.0015 0.0009375 0.0005625 0.0015 0.0009375 0.0005625 0.0015 0.001125 0.000375 0.001125 0.0009375 0.0005625 0.0013125 0.0009375 0.0005625 0.0013125 0.001125 0.000375 0.0013125 0.0009375 0.00075 0.0009375 0.0009375 0.00075 0.0013125 0.0013125 0.00075 0.001125 0.0009375 0.00075 0.0013125 0.0009375 0.00075 0.0013125 0.001125 0.000375 0.0009375 0.0009375 0.0005625 0.0009375 0.0009375 0.0005625 0.001125 0.001125 0.0005625 0.001125 0.0009375 0.0009375 0.0015 0.0015 0.0013125 0.0015 0.0015 0.0009375 0.0015 0.001125 0.0009375 0.0015 0.0013125 0.001125 0.0015 0.0013125 0.0009375 0.001125 0.001125 0.0009375 0.0013125 0.0013125 0.001125 0.0013125 0.0013125 0.0009375 0.0013125 0.001125 0.0001875 0.0001875 0.00075 0.0005625 0.0005625 0.00075 0.000375 0.0001875 0.00075 0.0005625 0.0001875 0.00075 0.0005625 0.000375 0.00075 0.0001875 0.0001875 0.000375 0.0001875 0.0001875 0.0005625 0.000375 0.000375 0.0005625 0.000375 0.0001875 0.0005625 0.0001875 0.0001875 0.0009375 0.0005625 0.0005625 0.0013125 0.0001875 0.0001875 0.0015 0.0005625 0.0005625 0.0015 0.00075 0.0001875 0.0015 0.00075 0.0005625 0.0015 0.000375 0.0001875 0.0015 0.0005625 0.0001875 0.0015 0.0005625 0.000375 0.0015 0.000375 0.0001875 0.001125 0.0005625 0.0001875 0.0013125 0.0005625 0.000375 0.0013125 0.0001875 0.0001875 0.001125 0.0001875 0.0001875 0.0013125 0.000375 0.000375 0.0013125 0.000375 0.0001875 0.0013125 0.00075 0.0001875 0.0009375 0.00075 0.0005625 0.0013125 0.00075 0.0001875 0.001125 0.00075 0.0001875 0.0013125 0.00075 0.000375 0.0013125 0.000375 0.0001875 0.0009375 0.0005625 0.0001875 0.0009375 0.0005625 0.000375 0.001125 0.0005625 0.0001875 0.001125 0.00075 0.00075 0.0009375 0.00075 0.00075 0.0013125 0.00075 0.000375 0.0009375 0.00075 0.0005625 0.0009375 0.00075 0.0005625 0.001125 0.000375 0.000375 0.0009375 0.0005625 0.0005625 0.0009375 0.0005625 0.0005625 0.001125 0.0005625 0.000375 0.0009375 0.0009375 0.0001875 0.0015 0.0013125 0.0005625 0.0015 0.001125 0.0001875 0.0015 0.0013125 0.0001875 0.0015 0.0013125 0.000375 0.0015 0.0009375 0.0001875 0.001125 0.0009375 0.0001875 0.0013125 0.001125 0.000375 0.0013125 0.001125 0.0001875 0.0013125 0.0009375 0.00075 0.0015 0.0013125 0.00075 0.0015 0.0009375 0.000375 0.0015 0.0009375 0.0005625 0.0015 0.001125 0.0005625 0.0015 0.0009375 0.000375 0.001125 0.0009375 0.0005625 0.0013125 0.001125 0.0005625 0.0013125 0.0009375 0.000375 0.0013125 0.0009375 0.00075 0.001125 0.0009375 0.00075 0.0013125 0.001125 0.00075 0.0013125 0.0009375 0.0005625 0.001125 0.0009375 0.0009375 0.0015 0.0013125 0.0013125 0.0015 0.001125 0.0009375 0.0015 0.0013125 0.0009375 0.0015 0.0013125 0.001125 0.0015 0.0009375 0.0009375 0.001125 0.0009375 0.0009375 0.0013125 0.001125 0.001125 0.0013125 0.001125 0.0009375 0.0013125 0.0001875 0.000375 0.00075 0.0001875 0.0005625 0.00075 0.000375 0.0005625 0.00075 0.0001875 0.000375 0.0005625 0.0001875 0.00075 0.0015 0.0005625 0.00075 0.0015 0.0001875 0.000375 0.0015 0.0001875 0.0005625 0.0015 0.000375 0.0005625 0.0015 0.0001875 0.000375 0.001125 0.0001875 0.0005625 0.0013125 0.000375 0.0005625 0.0013125 0.0001875 0.000375 0.0013125 0.0001875 0.00075 0.0009375 0.0005625 0.00075 0.0013125 0.0001875 0.00075 0.001125 0.0001875 0.00075 0.0013125 0.000375 0.00075 0.0013125 0.0001875 0.000375 0.0009375 0.0001875 0.0005625 0.0009375 0.000375 0.0005625 0.001125 0.0001875 0.0005625 0.001125 0.000375 0.00075 0.0009375 0.0005625 0.00075 0.0009375 0.0005625 0.00075 0.001125 0.000375 0.0005625 0.0009375 0.0001875 0.0009375 0.0015 0.0005625 0.0013125 0.0015 0.0001875 0.001125 0.0015 0.0001875 0.0013125 0.0015 0.000375 0.0013125 0.0015 0.0001875 0.0009375 0.001125 0.0001875 0.0009375 0.0013125 0.000375 0.001125 0.0013125 0.0001875 0.001125 0.0013125 0.00075 0.0009375 0.0015 0.00075 0.0013125 0.0015 0.000375 0.0009375 0.0015 0.0005625 0.0009375 0.0015 0.0005625 0.001125 0.0015 0.000375 0.0009375 0.001125 0.0005625 0.0009375 0.0013125 0.0005625 0.001125 0.0013125 0.000375 0.0009375 0.0013125 0.00075 0.0009375 0.001125 0.00075 0.0009375 0.0013125 0.00075 0.001125 0.0013125 0.0005625 0.0009375 0.001125 0.0009375 0.001125 0.0015 0.0009375 0.0013125 0.0015 0.001125 0.0013125 0.0015 0.0009375 0.001125 0.0013125 -0.0013125 -0.001875 -0.001875 -0.0005625 -0.001875 -0.001875 0.0001875 -0.001875 -0.001875 -0.001875 -0.0013125 -0.001875 -0.001875 -0.0005625 -0.001875 0.00075 -0.0013125 -0.001875 -0.001875 0.0001875 -0.001875 -0.0013125 0.00075 -0.001875 -0.001875 -0.001875 -0.0013125 -0.001875 -0.001875 -0.0005625 0.00075 -0.001875 -0.0013125 0.001875 -0.0001875 -0.00075 0.001875 0 -0.0001875 0.001875 -0.0001875 -0.0001875 0.001875 -0.0001875 -0.000375 0.001875 -0.00075 -0.0001875 0.001875 -0.0001875 0 0.001875 -0.000375 -0.0001875 -0.001875 0.00075 -0.0013125 0.001875 0.0013125 -0.00075 0.001875 0.0015 -0.0001875 0.001875 0.0013125 -0.0001875 0.001875 0.0013125 -0.000375 0.001875 0.000375 -0.0001875 0.001875 0.0005625 -0.00075 0.001875 0.0005625 0 0.001875 0.0005625 -0.0001875 0.001875 0.00075 -0.0001875 0.001875 0.0005625 -0.000375 0.001875 0.0013125 0 0.001875 0.001125 -0.0001875 -0.0001875 0.001875 -0.00075 0 0.001875 -0.0001875 -0.0001875 0.001875 -0.0001875 -0.0001875 0.001875 -0.000375 -0.00075 0.001875 -0.0001875 -0.0001875 0.001875 0 -0.000375 0.001875 -0.0001875 0.0013125 0.001875 -0.00075 0.0015 0.001875 -0.0001875 0.0013125 0.001875 -0.0001875 0.0013125 0.001875 -0.000375 0.0005625 0.001875 -0.00075 0.0005625 0.001875 0 0.0005625 0.001875 -0.0001875 0.000375 0.001875 -0.0001875 0.00075 0.001875 -0.0001875 0.0005625 0.001875 -0.000375 0.0013125 0.001875 0 0.001125 0.001875 -0.0001875 0.001875 0.001875 -0.0001875 -0.001875 -0.001875 0.0001875 -0.0013125 -0.001875 0.00075 -0.001875 -0.0013125 0.00075 0.001875 -0.0001875 0.000375 0.001875 -0.00075 0.0005625 0.001875 0 0.0005625 0.001875 -0.0001875 0.0005625 0.001875 -0.0001875 0.00075 0.001875 -0.000375 0.0005625 0.001875 0 0.0013125 0.001875 -0.0001875 0.0013125 0.001875 -0.0001875 0.001125 0.001875 -0.00075 0.0013125 0.001875 -0.0001875 0.0015 0.001875 -0.000375 0.0013125 0.001875 0.0005625 0.000375 0.001875 0.0013125 0.000375 0.001875 0.00075 0.0005625 0.001875 0.0005625 0.0005625 0.001875 0.0015 0.0005625 0.001875 0.0013125 0.0005625 0.001875 0.0013125 0.00075 0.001875 0.001125 0.0005625 0.001875 0.0015 0.0013125 0.001875 0.0013125 0.0013125 0.001875 0.0013125 0.001125 0.001875 0.000375 0.0005625 0.001875 0.000375 0.0013125 0.001875 0.0005625 0.00075 0.001875 0.0005625 0.0015 0.001875 0.0005625 0.0013125 0.001875 0.00075 0.0013125 0.001875 0.0005625 0.001125 0.001875 0.0013125 0.0015 0.001875 0.001125 0.0013125 -0.0001875 0.001875 0.000375 -0.00075 0.001875 0.0005625 0 0.001875 0.0005625 -0.0001875 0.001875 0.0005625 -0.0001875 0.001875 0.00075 -0.000375 0.001875 0.0005625 0 0.001875 0.0013125 -0.0001875 0.001875 0.0013125 -0.0001875 0.001875 0.001125 -0.00075 0.001875 0.0013125 -0.0001875 0.001875 0.0015 -0.000375 0.001875 0.0013125 0.0005625 0.001875 0.000375 0.0013125 0.001875 0.000375 0.00075 0.001875 0.0005625 0.0005625 0.001875 0.0005625 0.0015 0.001875 0.0005625 0.0013125 0.001875 0.0005625 0.0013125 0.001875 0.00075 0.001125 0.001875 0.0005625 0.0015 0.001875 0.0013125 0.0013125 0.001875 0.0013125 0.0013125 0.001875 0.001125 0.0005625 0.001875 0.00075 0.000375 0.001875 0.0005625 0.0005625 0.001875 0.0015 0.0005625 0.001875 0.0013125 0.000375 0.001875 0.0013125 0.00075 0.001875 0.0013125 0.0005625 0.001875 0.001125 0.0013125 0.001875 0.0015 0.001125 0.001875 0.0013125 0.001875 0.001875 0.0005625 0.001875 0.001875 0.0013125 -0.0001875 -0.00075 0.001875 0 -0.0001875 0.001875 -0.0001875 -0.0001875 0.001875 -0.0001875 -0.000375 0.001875 -0.00075 -0.0001875 0.001875 -0.0001875 0 0.001875 -0.000375 -0.0001875 0.001875 0.0013125 -0.00075 0.001875 0.0015 -0.0001875 0.001875 0.0013125 -0.0001875 0.001875 0.0013125 -0.000375 0.001875 0.0005625 -0.00075 0.001875 0.0005625 0 0.001875 0.0005625 -0.0001875 0.001875 0.000375 -0.0001875 0.001875 0.00075 -0.0001875 0.001875 0.0005625 -0.000375 0.001875 0.0013125 0 0.001875 0.001125 -0.0001875 0.001875 0.001875 -0.0001875 0.001875 -0.00075 0.0005625 0.001875 0 0.0005625 0.001875 -0.0001875 0.0005625 0.001875 -0.0001875 0.000375 0.001875 -0.0001875 0.00075 0.001875 -0.000375 0.0005625 0.001875 0 0.0013125 0.001875 -0.0001875 0.0013125 0.001875 -0.0001875 0.001125 0.001875 -0.00075 0.0013125 0.001875 -0.0001875 0.0015 0.001875 -0.000375 0.0013125 0.001875 0.00075 0.0005625 0.001875 0.0005625 0.0005625 0.001875 0.0005625 0.000375 0.001875 0.0015 0.0005625 0.001875 0.0013125 0.0005625 0.001875 0.0013125 0.000375 0.001875 0.0013125 0.00075 0.001875 0.001125 0.0005625 0.001875 0.0015 0.0013125 0.001875 0.0013125 0.0013125 0.001875 0.0013125 0.001125 0.001875 0.0005625 0.00075 0.001875 0.000375 0.0005625 0.001875 0.0005625 0.0015 0.001875 0.0005625 0.0013125 0.001875 0.000375 0.0013125 0.001875 0.00075 0.0013125 0.001875 0.0005625 0.001125 0.001875 0.0013125 0.0015 0.001875 0.001125 0.0013125 0.001875 0.001875 0.0005625 0.001875 0.001875 0.0013125 0.001875 -0.0001875 0.001875 0.001875 0.0005625 0.001875 0.001875 0.0013125 0.001875 0.001875 + diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d_vel.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d_vel.dat new file mode 100644 index 00000000000..20cb999a4e1 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3d_vel.dat @@ -0,0 +1,2 @@ +19560 0.125062 -0.132034 0.125061 -0.00312274 0.0313288 0.27559 -0.125076 -0.126337 0.12426 0.00311664 -0.319212 0.00311588 -0.00495182 -0.168003 0.00844223 -0.0022575 -0.333773 -0.00234047 -0.130814 -0.128401 -0.130814 -0.00399319 0.0190295 -0.272613 0.124206 -0.126407 -0.125018 0.275591 0.0313289 -0.00312338 -0.0157824 0.900814 -0.0157831 -0.272513 0.0186653 -0.00384409 0.00844316 -0.168003 -0.00495288 -0.0353536 4.321 -0.0353546 0.0161566 -0.166767 -0.00457565 -0.272612 0.0190296 -0.00399381 -0.00791747 0.897842 -0.00791823 0.274616 0.0317389 -0.00278261 0.12426 -0.126337 -0.125076 -0.00384371 0.0186652 -0.272514 -0.13053 -0.128385 -0.13053 -0.00233997 -0.333773 -0.00225801 -0.00457498 -0.166767 0.016156 0.00338551 -0.31918 0.00338495 -0.125018 -0.126407 0.124205 -0.00278198 0.0317389 0.274616 0.12442 -0.131856 0.124419 0.0600182 -0.127264 0.0475913 0.0834601 -0.0370425 0.08346 0.0475915 -0.127264 0.0600179 0.00195923 -0.104155 0.0947996 0.00277705 0.0126916 0.157809 0.0537022 -0.111476 0.0821169 0.125031 -0.031439 0.222043 0.0789706 0.000301023 0.134653 -0.128631 -0.0300809 0.220466 0.0438958 -0.224995 0.0398927 0.00409879 -0.278969 0.00535611 0.110762 -0.248754 0.110761 0.00535645 -0.278969 0.00409842 0.039893 -0.224995 0.0438955 0.0428301 -0.221138 0.0738969 -0.00192513 -0.21117 0.0915103 -0.00320048 -0.273501 0.00591113 -0.0026171 -0.0403455 0.320189 -0.00124838 -0.279278 0.00519802 0.00346286 -0.237642 0.0144547 0.124283 -0.135628 0.225907 -0.0449179 -0.219223 0.0691232 -0.105859 -0.256486 0.100814 -0.00292814 -0.276605 0.00185414 -0.00672059 -0.242373 -0.00164371 -0.130464 -0.134742 0.233168 -0.109874 -0.252132 -0.109874 -0.0440318 -0.220371 -0.0754601 -0.00343214 -0.212441 -0.0902886 -0.006161 -0.0527678 -0.32195 -0.124773 -0.0431561 -0.222115 -0.128772 -0.143306 -0.231107 0.0412837 -0.220655 -0.0752836 0.100919 -0.256527 -0.10575 0.120542 -0.0366528 -0.214393 0.120812 -0.142532 -0.235295 0.134653 0.000301043 0.0789703 0.222044 -0.031439 0.12503 0.157809 0.0126916 0.00277672 0.0821171 -0.111476 0.0537018 0.0947998 -0.104155 0.00195887 0.131294 0.0837484 0.131294 -0.000508092 0.134451 0.158364 -0.00103353 0.475627 0.356009 -0.00236541 0.213319 -0.00236578 0.247979 0.241472 0.247979 0.35601 0.475628 -0.00103429 0.158364 0.134451 -0.00050845 -0.134128 0.0830458 0.125553 -0.21449 -0.0367775 0.120569 -0.260008 0.262955 0.25606 -0.354423 0.480294 -0.00406336 -0.163612 0.137746 -0.00053613 0.0738973 -0.221138 0.0428297 0.225908 -0.135628 0.124283 0.0144555 -0.237642 0.00346189 0.32019 -0.0403454 -0.00261798 0.00519847 -0.279278 -0.00124889 0.00591161 -0.273501 -0.00320102 0.0915107 -0.21117 -0.00192565 0.443676 0.393152 0.443676 -0.0299189 0.818907 0.624166 0.042868 1.48595 0.193316 0.398434 4.44823 0.398432 0.00254283 0.138006 0.00254183 0.193318 1.48595 0.0428668 0.624167 0.818907 -0.0299197 -0.420253 0.359188 0.393677 -0.237257 -0.141493 0.120732 -0.000164385 -0.240531 -0.00787949 -0.322568 -0.0520975 -0.00679741 -0.00839553 0.181994 -0.00893971 0.195167 1.48225 0.0424998 -0.643069 0.859603 -0.00492201 -0.0754598 -0.220371 -0.0440322 -0.231106 -0.143306 -0.128773 -0.222114 -0.0431561 -0.124773 -0.32195 -0.0527677 -0.00616193 -0.0902883 -0.212441 -0.00343265 -0.399245 0.362043 -0.399246 -0.00525086 0.859509 -0.644682 -0.00424881 0.488411 -0.358894 0.39935 4.43871 0.39935 -0.261238 0.256438 -0.261239 -0.358893 0.488411 -0.00424957 -0.644682 0.859509 -0.00525201 0.393617 0.358823 -0.420457 0.232898 -0.135112 -0.129982 0.220141 -0.0301711 -0.128756 0.319968 -0.0409265 -0.00210509 0.256071 0.262216 -0.259926 0.353191 0.48211 -0.000529738 0.624358 0.819879 -0.0293997 0.220467 -0.0300808 -0.128632 0.125553 0.0830458 -0.134128 -0.000535835 0.137746 -0.163612 -0.00406286 0.480294 -0.354424 0.256061 0.262955 -0.260008 0.12057 -0.0367775 -0.21449 -0.131596 0.0742426 -0.131596 -0.221685 -0.0433008 -0.12456 -0.259914 0.254476 -0.259915 -0.12456 -0.0433009 -0.221685 0.0691235 -0.219223 -0.0449183 0.233168 -0.134743 -0.130465 -0.00164292 -0.242373 -0.00672145 0.100815 -0.256486 -0.105859 0.00185448 -0.276605 -0.00292852 0.393678 0.359188 -0.420254 -0.00492136 0.859603 -0.64307 0.0425001 1.48225 0.195166 -0.00679687 -0.0520976 -0.322569 -0.0089387 0.181994 -0.00839657 -0.00787878 -0.240531 -0.000165026 0.120732 -0.141493 -0.237257 -0.398736 0.361495 -0.398737 -0.229665 -0.142952 -0.127995 0.016721 -0.235949 0.00423713 -0.109521 -0.251885 -0.109522 0.00269378 0.138044 0.00269296 0.00423781 -0.235949 0.0167203 -0.127994 -0.142952 -0.229666 -0.0752833 -0.220655 0.0412833 -0.235294 -0.142532 0.120811 -0.214393 -0.0366528 0.120542 -0.105749 -0.256527 0.100918 -0.420456 0.358823 0.393616 -0.0293989 0.819879 0.624357 -0.00052896 0.48211 0.35319 -0.0021043 -0.0409264 0.319967 -0.259925 0.262216 0.25607 -0.128755 -0.030171 0.220141 -0.129981 -0.135112 0.232897 0.443832 0.394847 0.443831 0.225899 -0.134772 0.123632 0.221992 -0.0306617 0.124749 0.110133 -0.248679 0.110133 0.247084 0.245267 0.247083 0.124749 -0.0306617 0.221992 0.123633 -0.134772 0.225898 0.0440596 -0.0384781 0.0337942 0.0234754 -0.105665 0.0234753 0.0337942 -0.0384781 0.0440595 0.040398 -0.0299783 0.0535405 -0.000815254 -0.0283464 0.0594534 -0.0425382 -0.0326816 0.0525952 -0.0552669 -0.114434 0.0802621 -0.0811971 -0.00423808 0.131618 0.0181628 -0.178975 0.0181627 0.000661116 -0.207374 0.00066091 -0.0201903 -0.174579 -0.0201904 -0.0460192 -0.228775 -0.0417221 -0.0417219 -0.228775 -0.0460195 0.0535406 -0.0299783 0.0403978 0.0594535 -0.0283465 -0.00081544 -0.0750563 -0.220967 0.0409513 0.00105792 -0.276392 -0.00311302 0.0154364 -0.280237 -0.00384004 -0.0904616 -0.212618 -0.00291978 0.0687927 -0.219446 -0.045622 0.0799877 -0.114369 -0.0561856 0.093511 -0.103399 0.00404166 0.086383 -0.210499 0.000328028 -0.131056 0.0741617 -0.131057 -0.000775498 0.136751 -0.164017 0.00889921 0.204315 0.00889873 -0.164016 0.136752 -0.000775938 0.125598 0.0832984 -0.134336 0.1313 -0.00438746 -0.0810495 0.157807 0.00933911 0.00488392 0.155387 0.132856 0.00139361 0.0524995 -0.032586 -0.043036 0.0595642 -0.0277943 -0.000398217 0.0525953 -0.0326816 -0.0425383 0.131618 -0.00423808 -0.0811973 0.0802623 -0.114434 -0.0552672 -0.0752323 -0.219952 -0.0439871 0.000890281 -0.275733 -6.87065e-06 0.00668223 -0.281882 0.00427092 -0.041243 -0.228493 -0.04576 0.0692569 -0.218444 0.0409051 0.0827477 -0.111456 0.0528205 0.045197 -0.127142 0.0595273 0.03913 -0.225985 0.0434484 -0.134336 0.0832985 0.125598 0.00139392 0.132856 0.155387 0.0048843 0.00933915 0.157807 -0.0810492 -0.00438742 0.1313 0.123537 0.0930048 0.123536 0.134215 -0.000248942 0.0784532 0.0835586 -0.0372478 0.0835584 0.0784534 -0.000248899 0.134215 0.0566492 -0.0306169 0.0374264 0.0332119 -0.0397645 0.0435104 0.0409515 -0.220967 -0.0750565 -0.00291951 -0.212618 -0.0904618 -0.00383972 -0.280237 0.0154361 -0.0031127 -0.276392 0.00105771 -0.0439869 -0.219952 -0.0752326 -0.0457598 -0.228493 -0.0412432 0.00427124 -0.281882 0.00668196 -6.5226e-06 -0.275733 0.000890008 -0.019878 -0.17406 -0.0198781 6.692e-05 -0.207181 6.67039e-05 -0.0456217 -0.219446 0.0687924 0.000328364 -0.210499 0.0863826 0.00404202 -0.103399 0.0935107 -0.0561853 -0.114369 0.0799874 0.0409054 -0.218444 0.0692565 0.0434487 -0.225985 0.0391298 0.0595276 -0.127142 0.0451968 0.0528208 -0.111456 0.0827475 0.0166771 -0.175551 0.0166769 0.0244986 -0.105604 0.0244984 -0.0430359 -0.032586 0.0524994 -0.000397966 -0.0277943 0.059564 0.0374266 -0.0306168 0.056649 0.0435106 -0.0397645 0.0332118 0.0238725 -0.21313 0.0867345 -0.0021976 -0.254512 0.0528269 0.0134422 -0.256544 0.0500757 0.0249871 -0.250423 0.108241 -0.00315383 -0.242722 0.117063 -0.00351026 -0.26996 0.0022975 -0.00353559 0.0116694 0.31668 -0.00295499 -0.181457 0.188755 0.0429319 -0.192658 0.174412 -0.00642892 -0.123588 0.231109 0.0247308 -0.262321 0.0426846 -0.0018967 -0.274247 0.00296877 -0.0024244 -0.276638 0.00242281 0.00411958 -0.286086 0.00824303 0.00127715 -0.293866 0.00455815 0.0434238 -0.270939 0.0883798 -0.00219468 -0.187304 0.011417 0.13997 -0.0824992 0.173129 0.147028 -0.135644 0.181159 0.134646 -0.0739307 0.239015 0.0718331 -0.216741 0.145866 0.0726588 0.012791 0.260103 0.081114 -0.0127708 0.292778 0.0799486 -0.0646792 0.292047 0.0525281 -0.145091 0.211742 0.128537 -0.185903 0.128536 0.129676 -0.200874 0.162078 0.0654509 -0.298229 0.0654501 0.0806481 -0.258072 0.103483 0.0820176 -0.199009 0.153517 -0.0297838 -0.252579 0.107464 -0.0042373 -0.278166 0.00147601 -0.00666885 -0.189205 0.0042721 -0.0771902 0.013095 0.258836 -0.0869416 -0.0126703 0.298063 -0.139347 -0.0715187 0.244989 -0.0824833 -0.0710411 0.291272 -0.0573742 -0.149056 0.195641 -0.0820553 -0.207415 0.143379 -0.0289713 -0.252853 -0.108016 -0.00353504 -0.246153 -0.114784 -0.00370933 -0.129287 -0.209639 -0.0774483 -0.263126 -0.0975814 -0.0783102 -0.210113 -0.136202 -0.0552626 -0.152972 -0.183865 -0.0846726 -0.0797559 -0.293097 -0.0626826 -0.301094 -0.0626833 -0.132028 -0.20474 -0.165682 0.0220908 -0.254951 -0.107433 0.0451046 -0.155992 -0.189399 0.0740617 -0.212677 -0.147869 0.0742337 -0.0816858 -0.294931 0.0754998 0.123362 0.149746 -0.00393369 0.215188 0.341804 -0.00379211 0.287507 0.2329 0.110364 0.248849 0.215921 0.134313 0.358225 0.134312 -0.00269011 0.412286 0.144987 -0.0118041 0.792463 0.238421 -0.0026015 0.191085 0.091214 0.0871937 0.175749 0.0871932 -0.00220617 0.466224 -0.00220671 0.197579 -0.00861746 0.197578 0.181609 0.0844439 0.258965 0.182516 0.164077 0.182516 0.110161 0.175371 0.315533 0.16417 0.414424 0.32639 0.220173 0.695851 0.220172 0.17313 -0.0824992 0.139969 0.258965 0.084444 0.181608 0.260103 0.012791 0.0726581 0.315534 0.175371 0.110161 0.341804 0.215188 -0.00393437 0.32639 0.414424 0.164169 0.215921 0.248849 0.110363 0.238421 0.792463 -0.0118049 0.149746 0.123362 0.0754994 0.0912144 0.191085 -0.00260199 0.144988 0.412286 -0.00269073 0.2329 0.287507 -0.00379273 -0.116611 0.18078 0.320243 -0.188899 0.0954714 0.264141 -0.16313 0.408787 0.322202 -0.142427 0.367645 0.133843 -0.220763 0.64466 0.21071 -0.244007 0.747074 -0.0105697 -0.328491 0.41339 0.16027 -0.150639 0.413077 -0.00263185 0.18116 -0.135644 0.147028 0.162079 -0.200874 0.129675 0.145866 -0.216741 0.0718324 0.103484 -0.258072 0.0806472 0.00824382 -0.286086 0.00411871 0.153518 -0.199009 0.0820167 0.0883804 -0.270939 0.0434231 0.108242 -0.250423 0.0249863 0.211742 -0.14509 0.0525271 0.0114178 -0.187303 -0.00219565 0.239016 -0.0739307 0.134645 0.292778 -0.0127707 0.0811133 0.316681 0.0116695 -0.00353637 0.292048 -0.0646791 0.0799477 0.174413 -0.192658 0.0429311 0.231109 -0.123588 -0.00642996 0.042685 -0.262321 0.0247304 0.00455877 -0.293866 0.00127636 0.00242352 -0.276638 -0.00242529 0.00296926 -0.274247 -0.00189727 0.0500761 -0.256544 0.0134417 0.00229818 -0.26996 -0.00351114 0.0867349 -0.21313 0.023872 0.188755 -0.181457 -0.00295567 0.117063 -0.242722 -0.00315452 0.0528273 -0.254512 -0.0021981 0.218804 -0.0404196 0.218803 0.216541 0.102743 0.318644 0.232066 0.0627512 0.362557 0.139157 0.240516 0.416426 -0.00155513 0.293914 0.456131 -0.0096409 0.286608 0.558534 0.154131 0.219932 0.508786 0.279638 0.677866 0.577179 0.118634 0.105468 0.365333 -0.0140372 0.17684 0.40956 -0.00606349 0.096252 -0.00772339 -0.00129956 0.939355 0.720645 0.191191 0.59252 0.445483 1.38955 3.40835 1.38955 0.383822 4.14343 1.18956 -0.0860499 3.56736 -0.0314367 0.347321 0.390689 0.34732 -0.0139574 0.775398 0.546158 0.234471 0.668779 0.492779 0.364997 1.10227 0.364996 -0.0401256 1.27812 0.413012 -0.046076 1.45429 -0.0460768 0.00768236 2.09757 0.470087 0.366347 1.33942 0.366346 -0.0211898 3.82833 -0.0211911 0.215578 -0.0950091 0.215577 0.146712 -0.168814 0.146711 0.00833366 -0.212078 0.00833281 0.00463154 -0.0941452 0.00383177 0.164167 -0.0388285 0.25494 0.288074 0.211214 0.288073 -0.000238656 0.0335037 -0.000604658 0.0243733 0.645451 0.0554904 0.266353 3.207 0.266353 0.362558 0.0627512 0.232065 0.0038327 -0.0941451 0.00463053 0.254941 -0.0388284 0.164166 0.365334 0.105468 0.118632 -0.000603707 0.0335038 -0.000239765 -0.0077223 0.0962521 -0.00606464 0.0554915 0.645451 0.0243721 0.445484 0.59252 0.19119 -0.0314355 3.56736 -0.0860511 0.318645 0.102743 0.21654 0.416427 0.240516 0.139157 0.456132 0.293914 -0.001556 0.546159 0.775398 -0.0139583 0.49278 0.668779 0.23447 0.57718 0.677866 0.279637 0.413013 1.27812 -0.0401265 0.470088 2.09757 0.00768158 1.18956 4.14343 0.383821 0.558535 0.286608 -0.00964186 0.508787 0.219932 0.15413 0.409561 0.17684 -0.0140382 0.720646 0.939355 -0.00130048 -0.144543 0.23127 0.413356 -0.223547 0.0948361 0.317057 -0.229534 0.0489838 0.324876 -0.226547 -0.042342 0.220601 -0.217389 -0.105054 0.209883 -0.330699 0.0426034 0.217993 -0.140403 -0.180068 0.13257 -0.146828 -0.212679 0.0733733 -0.232075 -0.0425494 0.144203 -0.341974 0.100339 0.105308 -0.187108 -0.157439 0.0446072 0.00520836 -0.189531 -0.00764187 -0.34208 0.34294 0.334802 -0.32512 0.0937338 0.217005 -0.415557 0.219839 0.137867 -0.294843 -0.0814664 0.0726107 -0.463603 0.197138 0.150485 -0.205662 -0.131468 -0.00350889 -0.167386 0.203361 0.476233 -0.134102 0.105849 0.350263 -0.0114998 0.0363818 -0.00691326 -0.00783009 -0.0953631 -0.00325395 -0.161501 -0.0427805 0.227352 -0.32793 0.256478 0.304191 -0.00454358 -0.21601 -0.00472653 -0.00271574 -0.0954116 -0.00805865 -0.00617116 0.0359098 -0.011791 -0.340312 0.707239 0.587853 0.0426355 0.817578 0.0332721 -0.240777 0.622498 0.471124 -0.662623 3.6936 1.38541 -0.0431357 2.65817 -0.0440129 -0.0301212 3.56701 -0.0859776 0.0352165 0.815352 0.0420023 -0.4675 0.713145 0.225372 -0.00706705 0.0954681 -0.00606214 -0.246659 0.630544 0.457997 -0.389308 1.07907 0.335026 -0.442433 1.28609 -0.0193755 -0.528633 0.742573 -0.00742199 -0.467745 0.615886 0.229206 -0.637523 0.738362 0.306676 -0.454866 0.276089 -0.00521925 -0.530516 0.269891 -0.00573259 -0.410893 0.174518 -0.00575274 -0.770224 2.71099 -0.0333375 -0.469604 1.43281 0.359324 -0.302183 2.88533 -0.134547 -0.821711 1.23231 0.0419999 -0.0975807 -0.263126 -0.0774491 -0.165681 -0.20474 -0.132029 -0.136201 -0.210113 -0.0783111 -0.108016 -0.252853 -0.0289721 -0.183864 -0.152972 -0.0552636 -0.209638 -0.129287 -0.00371038 -0.293096 -0.0797559 -0.0846736 -0.114783 -0.246153 -0.00353585 -0.132339 -0.180433 -0.132339 -0.147802 -0.0444331 -0.23223 -0.225933 0.0387795 -0.326622 -0.113364 0.108605 -0.35283 -0.00577019 0.175285 -0.412241 -0.00585595 0.270275 -0.530729 -0.160237 0.194244 -0.466336 -0.315713 0.747914 -0.609464 -0.146525 0.219395 -0.414463 -0.00532698 0.276803 -0.454736 -0.00761143 0.743581 -0.529004 -0.242433 0.607663 -0.46173 -0.354797 1.04926 -0.354797 -0.0191515 1.28351 -0.44308 -0.00929273 0.739607 -0.238301 -0.300886 0.262153 -0.300887 0.0426423 1.2327 -0.825604 -0.205258 0.676026 -0.464021 -0.869592 2.63325 -0.869592 -0.13498 2.88525 -0.302709 -0.0219285 3.82716 -0.0219295 -0.0336742 2.70754 -0.773781 -0.447526 1.47953 -0.447527 -0.0453492 1.44731 -0.0453499 -0.210884 -0.108249 -0.210885 -0.2272 -0.0455886 -0.227201 -0.224471 0.0885905 -0.32412 -0.33977 0.333184 -0.339771 -0.164928 0.409706 -0.325093 -0.214492 0.62669 -0.214493 -0.326621 0.0387796 -0.225934 -0.324119 0.0885905 -0.224471 -0.414462 0.219395 -0.146525 -0.325092 0.409706 -0.164929 -0.461729 0.607663 -0.242434 -0.2383 0.739607 -0.0092935 -0.232229 -0.044433 -0.147803 -0.352829 0.108605 -0.113365 -0.41224 0.175285 -0.00577128 -0.825603 1.2327 0.0426412 -0.46402 0.676026 -0.205259 -0.609464 0.747915 -0.315714 -0.302708 2.88525 -0.134981 -0.773781 2.70755 -0.0336752 -0.443079 1.28351 -0.0191524 -0.530728 0.270275 -0.00585701 -0.466336 0.194244 -0.160238 -0.454736 0.276803 -0.00532788 -0.529003 0.743581 -0.00761231 0.105697 0.100782 -0.343364 0.144382 -0.0428117 -0.232674 0.218061 0.0422627 -0.330501 0.132757 -0.180181 -0.140477 0.210117 -0.1052 -0.217151 0.324993 0.04891 -0.229245 0.220763 -0.0423277 -0.22635 0.244726 -0.0717685 -0.139358 0.317051 0.0947007 -0.223287 0.413002 0.231452 -0.144189 0.297192 -0.013033 -0.0869662 0.257918 0.0133291 -0.0773636 0.304128 0.256121 -0.328621 0.143936 -0.206164 -0.0810187 0.22755 -0.0429085 -0.161561 0.349581 0.105753 -0.134081 0.193013 -0.147794 -0.0563667 0.227332 -0.12029 -0.00515869 0.290466 -0.071379 -0.0820585 0.476143 0.203586 -0.167166 0.315831 0.0115983 -0.00329671 0.150521 0.197047 -0.463923 0.137736 0.220026 -0.415467 0.217107 0.0937071 -0.324953 0.334831 0.342614 -0.341855 0.264028 0.0953996 -0.188812 0.319714 0.181164 -0.116434 0.306525 0.737719 -0.638487 0.160571 0.411163 -0.327871 0.228928 0.615577 -0.467899 0.335607 1.07706 -0.389352 0.210513 0.639106 -0.218786 0.236123 0.794002 -0.00887814 0.321869 0.40851 -0.163479 0.457992 0.630736 -0.246315 0.340802 0.216436 -0.0035969 0.224891 0.712718 -0.469721 1.38586 3.69134 -0.663365 1.18918 4.13844 0.382628 0.719065 0.940213 -0.000935376 0.470554 0.622268 -0.241182 0.587952 0.707239 -0.340309 0.407615 0.176897 -0.0137266 0.557856 0.287452 -0.00931282 0.455413 0.294937 -0.00115309 0.473347 2.09543 0.00889732 0.360387 1.43136 -0.470234 0.414292 1.27491 -0.0386967 0.546175 0.776362 -0.0134131 0.133844 0.367645 -0.142428 -0.00263138 0.413077 -0.15064 -0.0105691 0.747074 -0.244008 0.320244 0.18078 -0.116612 0.322202 0.408787 -0.163131 0.21071 0.64466 -0.220763 0.160271 0.41339 -0.328492 0.258836 0.013095 -0.0771908 0.264141 0.0954714 -0.188899 -0.139573 0.359732 -0.139573 -0.217061 0.636314 -0.217062 -0.324014 0.407703 -0.165002 -0.165002 0.407703 -0.324015 0.298064 -0.0126702 -0.0869423 0.291273 -0.0710411 -0.0824841 0.107464 -0.252579 -0.0297845 0.195642 -0.149056 -0.0573751 0.00427301 -0.189205 -0.00666983 0.143379 -0.207415 -0.0820561 0.24499 -0.0715187 -0.139347 0.00147667 -0.278166 -0.00423801 0.413357 0.23127 -0.144544 0.457997 0.630544 -0.24666 0.587854 0.707239 -0.340313 0.335026 1.07907 -0.389309 -0.0193748 1.28609 -0.442434 -0.0333369 2.71099 -0.770224 0.359325 1.43281 -0.469605 0.306676 0.738362 -0.637524 1.38541 3.6936 -0.662625 -0.134546 2.88533 -0.302184 -0.0859765 3.56701 -0.0301225 0.0420016 1.23231 -0.821713 0.225373 0.713145 -0.467501 0.105309 0.100339 -0.341974 -0.00575197 0.174518 -0.410894 -0.00606137 0.095468 -0.00706775 0.334803 0.34294 -0.342081 -0.00742144 0.742573 -0.528633 0.229207 0.615886 -0.467746 0.137867 0.219839 -0.415558 -0.0052187 0.276089 -0.454866 -0.00573187 0.269891 -0.530517 0.150485 0.197138 -0.463604 -0.0035083 -0.131468 -0.205663 0.476234 0.203361 -0.167387 0.350264 0.105849 -0.134103 -0.00691217 0.0363819 -0.0115009 0.0332733 0.817578 0.0426341 0.471125 0.622497 -0.240777 0.304192 0.256478 -0.32793 -0.0440119 2.65817 -0.043137 0.0420035 0.815352 0.0352155 -0.0117901 0.0359098 -0.00617205 0.324877 0.0489837 -0.229534 -0.00325302 -0.0953631 -0.00783105 0.227353 -0.0427806 -0.161502 0.13257 -0.180068 -0.140403 -0.00472582 -0.21601 -0.00454433 -0.00805779 -0.0954116 -0.00271663 0.144204 -0.0425495 -0.232076 -0.00764115 -0.189531 0.00520769 0.317058 0.094836 -0.223548 0.220601 -0.0423421 -0.226547 0.217006 0.0937337 -0.32512 0.217993 0.0426033 -0.3307 0.0726112 -0.0814665 -0.294843 0.0446078 -0.157439 -0.187109 0.209884 -0.105054 -0.21739 0.0733739 -0.212679 -0.146828 -0.354675 1.05079 -0.354676 -0.461356 0.607089 -0.242307 -0.608384 0.747482 -0.315292 -0.414403 0.219016 -0.146252 -0.290744 -0.0799916 -0.0826154 -0.466121 0.193638 -0.159829 -0.326357 0.038366 -0.22539 -0.352826 0.10815 -0.113072 -0.184088 -0.152676 -0.053539 0.0128248 -0.186454 -0.000564264 -0.134721 -0.209576 -0.0774614 -0.232364 -0.0443629 -0.147139 -0.131891 -0.180103 -0.131892 -0.0972053 -0.262651 -0.0768818 0.00849622 -0.285591 0.00471391 -0.339544 0.333052 -0.339545 -0.323754 0.0886207 -0.224049 -0.226793 -0.0453566 -0.226793 -0.165214 -0.20448 -0.131698 -0.210492 -0.108327 -0.210493 -0.0623074 -0.300594 -0.0623079 -0.446018 1.4803 -0.446019 -0.868274 2.63242 -0.868276 0.267369 3.2064 0.267368 0.055512 0.644645 0.0247795 -0.463009 0.675423 -0.205361 -0.300533 0.261889 -0.300533 -0.00107777 0.0334435 7.56663e-05 0.00359718 -0.0937065 0.0051341 0.00865229 -0.211579 0.00865152 -0.315291 0.747482 -0.608385 0.0247802 0.644645 0.0555112 -0.20536 0.675423 -0.46301 -0.113071 0.10815 -0.352826 7.64971e-05 0.0334436 -0.00107849 -0.000563652 -0.186454 0.0128242 0.00513485 -0.0937065 0.0035964 -0.147138 -0.0443629 -0.232364 0.00471459 -0.285591 0.00849559 -0.242306 0.607089 -0.461357 -0.146251 0.219016 -0.414404 -0.224049 0.0886206 -0.323754 -0.225389 0.038366 -0.326357 -0.131697 -0.20448 -0.165214 -0.0768812 -0.262651 -0.0972058 -0.0826148 -0.0799917 -0.290744 -0.159829 0.193638 -0.466122 -0.0535383 -0.152676 -0.184089 -0.0774608 -0.209576 -0.134722 -0.107432 -0.254951 0.0220901 -0.189398 -0.155992 0.0451036 -0.29493 -0.0816857 0.0742328 -0.147868 -0.212677 0.0740609 -0.343363 0.100782 0.105696 -0.46972 0.712718 0.22489 -0.638487 0.73772 0.306524 -0.663364 3.69134 1.38586 0.382629 4.13844 1.18918 0.00889842 2.09543 0.473346 -0.470233 1.43136 0.360386 -0.340308 0.707239 0.587951 -0.389351 1.07706 0.335606 -0.0386959 1.27491 0.414291 -0.00887737 0.794002 0.236122 -0.0134122 0.776362 0.546174 -0.246314 0.630736 0.457991 -0.144188 0.231452 0.413001 -0.00115226 0.294937 0.455412 -0.0035962 0.216436 0.340801 -0.328619 0.256121 0.304126 -0.000934282 0.940213 0.719064 -0.241181 0.622268 0.470553 -0.13408 0.105753 0.34958 -0.0137257 0.176897 0.407614 -0.00515789 -0.12029 0.227332 -0.00931195 0.287452 0.557855 -0.167165 0.203587 0.476142 -0.00329594 0.0115984 0.31583 -0.463922 0.197047 0.15052 -0.415466 0.220026 0.137735 -0.327871 0.411163 0.16057 -0.467898 0.615577 0.228927 -0.341854 0.342615 0.33483 -0.218785 0.639106 0.210512 -0.163479 0.40851 0.321868 -0.116434 0.181164 0.319714 -0.3305 0.0422627 0.21806 -0.324952 0.0937072 0.217106 -0.226349 -0.0423276 0.220762 -0.188811 0.0953997 0.264027 -0.223286 0.0947008 0.31705 -0.0773629 0.0133292 0.257917 -0.232673 -0.0428117 0.144381 -0.140477 -0.180181 0.132756 -0.0810179 -0.206164 0.143935 -0.16156 -0.0429085 0.227549 -0.229244 0.0489101 0.324992 -0.0563659 -0.147794 0.193012 -0.0820576 -0.0713789 0.290465 -0.0869654 -0.0130328 0.297192 -0.21715 -0.1052 0.210116 -0.139358 -0.0717684 0.244725 1.38921 3.40678 1.38921 0.444647 0.593632 0.191799 0.577401 0.679599 0.280255 0.363872 0.106171 0.119032 0.209583 -0.141891 0.0520783 0.293733 -0.0650929 0.0789419 0.508498 0.221161 0.154374 0.362445 0.0639467 0.231883 0.415676 0.242154 0.13917 0.292652 -0.0121521 0.0811728 0.259906 0.0137311 0.0728325 0.238849 -0.0732133 0.134225 0.317941 0.104188 0.216112 0.218246 -0.0396222 0.218246 0.180818 -0.135213 0.146477 0.172908 -0.0821539 0.139382 0.288138 0.212101 0.288137 0.153874 -0.19819 0.080527 0.25463 -0.0379334 0.164323 0.146648 -0.168102 0.146647 0.103214 -0.25766 0.0802936 0.0650383 -0.298402 0.0650377 0.161778 -0.200522 0.129093 0.215269 -0.0941918 0.215268 0.127957 -0.185742 0.127957 0.368007 1.34014 0.368006 0.365796 1.104 0.365795 0.217428 0.71486 0.217427 0.322029 0.420552 0.164086 0.492314 0.671357 0.234888 0.346769 0.393428 0.346768 0.314686 0.177141 0.110152 0.258279 0.0859488 0.181064 0.197015 -0.00795572 0.197014 0.280256 0.679599 0.5774 0.164087 0.420552 0.322028 0.234889 0.671357 0.492313 0.139171 0.242154 0.415675 0.110153 0.177141 0.314685 0.0728331 0.0137311 0.259906 0.181065 0.0859488 0.258279 0.216113 0.104188 0.31794 0.139382 -0.082154 0.172907 0.1918 0.593632 0.444646 0.119033 0.106171 0.363871 0.0520791 -0.141891 0.209582 0.0805277 -0.19819 0.153873 0.164324 -0.0379334 0.254629 0.231884 0.0639467 0.362444 0.0802944 -0.25766 0.103213 0.129094 -0.200522 0.161777 0.146478 -0.135213 0.180818 0.0789427 -0.0650929 0.293732 0.154375 0.221161 0.508497 0.0811735 -0.0121521 0.292651 0.134226 -0.0732132 0.238849 0.0197854 -0.0394724 0.0197854 -0.0422075 -0.0393425 0.039188 -0.0562549 -0.119386 0.0515164 -0.0790962 -0.0358789 0.0820736 -0.00665047 -0.0287167 0.0154657 -0.0192773 -0.101731 0.0170465 -0.0506034 -0.126971 0.0563189 -0.0255182 -0.0436701 0.0383258 -0.0402987 -0.234548 0.0357521 -0.00185802 -0.26669 -0.00473744 -0.0171427 -0.185747 0.012459 -0.00157703 -0.19942 -0.00157188 -0.00456684 -0.266666 -0.00190808 -0.048209 -0.222163 0.0416804 -0.0631152 -0.122739 -0.0559782 -0.0292409 -0.0974568 -0.0292411 -0.055978 -0.122739 -0.0631154 -0.00308976 -0.0942818 -0.108742 -0.059962 -0.109056 -0.0933339 0.0417907 -0.22218 -0.0483615 0.056385 -0.126986 -0.0506639 0.0601179 -0.113422 -0.083107 0.0124157 -0.185808 -0.0171796 0.0170232 -0.101832 -0.0193282 0.0514879 -0.119511 -0.0562173 0.035826 -0.234633 -0.0402365 -0.0206265 -0.0206991 -0.0206266 -0.0437471 -0.0384973 -0.0290862 -0.0837127 -0.0416835 -0.0837129 -0.0290862 -0.0384973 -0.0437472 -0.0480206 -0.038921 -0.0488089 0.00173085 -0.0324697 -0.055803 -0.00116508 0.0201441 -0.149189 -0.0858551 -0.013882 -0.12167 0.0432796 -0.0290834 -0.0441106 0.0383081 -0.0436832 -0.0255756 0.0819556 -0.0359532 -0.0791318 0.0742873 0.000443418 -0.127808 0.0153777 -0.0287901 -0.00673051 0.0391294 -0.0394336 -0.0422634 -0.127826 0.000503489 0.0743984 -0.149412 0.020073 -0.00103603 -0.0441725 -0.0291439 0.0433253 -0.0831678 -0.113587 0.0601274 -0.108809 -0.0945109 -0.00296218 -0.0558869 -0.0325433 0.00180427 -0.0933337 -0.109056 -0.0599623 -0.108742 -0.0942818 -0.00309005 -0.0488088 -0.038921 -0.0480207 -0.12167 -0.0138819 -0.0858553 -0.149189 0.0201441 -0.00116539 -0.055803 -0.0324697 0.00173067 0.0820738 -0.0358789 -0.0790964 0.0515166 -0.119386 -0.0562551 0.039188 -0.0393425 -0.0422076 -0.00103583 0.0200729 -0.149413 0.0743987 0.000503414 -0.127826 -0.121908 -0.0138908 -0.0858911 -0.0837496 -0.0416409 -0.0837497 -0.085891 -0.0138908 -0.121908 -0.0488906 -0.0390273 -0.0479938 -0.0933115 -0.109052 -0.059776 -0.0559087 -0.122618 -0.0628283 -0.0291414 -0.038473 -0.0436591 -0.00473724 -0.26669 -0.00185827 0.0357523 -0.234548 -0.0402989 -0.0831068 -0.113422 0.0601177 -0.0506637 -0.126986 0.0563848 -0.0483614 -0.22218 0.0417905 -0.0441104 -0.0290834 0.0432795 -0.127808 0.000443484 0.074287 -0.0791317 -0.0359532 0.0819554 -0.0255756 -0.0436833 0.0383081 0.0154658 -0.0287167 -0.00665052 0.0383258 -0.0436701 -0.0255182 0.056319 -0.126971 -0.0506035 0.0170466 -0.101731 -0.0192774 0.0433254 -0.029144 -0.0441726 0.00180437 -0.0325434 -0.0558871 -0.00296198 -0.094511 -0.10881 0.0601275 -0.113587 -0.083168 -0.0479937 -0.0390273 -0.0488906 -0.043659 -0.038473 -0.0291415 -0.0628281 -0.122618 -0.0559089 -0.0597758 -0.109053 -0.0933117 -0.0205368 -0.0206106 -0.0205369 -0.0290693 -0.0972393 -0.0290694 0.0124591 -0.185747 -0.0171428 0.0416805 -0.222163 -0.0482091 -0.00190791 -0.266666 -0.00456709 -0.0015718 -0.19942 -0.00157713 -0.0171795 -0.185808 0.0124156 -0.0402363 -0.234634 0.0358258 -0.0562172 -0.119511 0.0514877 -0.0193281 -0.101832 0.0170232 -0.00673063 -0.02879 0.0153777 -0.0422634 -0.0394336 0.0391293 0.0200352 -0.0399055 0.0200351 0.0330686 -0.0800417 0.0139296 0.0908625 -0.141398 0.0879561 0.0133701 -0.0242303 0.0064989 0.0480992 -0.0119833 0.0480991 0.108474 -0.07993 0.108473 0.0102225 -0.0142595 0.0102224 0.0139297 -0.0800417 0.0330686 0.0879564 -0.141398 0.0908622 0.0064989 -0.0242303 0.01337 0.00180657 -0.0721562 0.0266651 -0.00223385 -0.0681246 0.185874 0.00315898 0.00151104 0.0899763 -0.0016313 0.0270272 0.217997 0.0348034 -0.0817856 0.0191327 0.0477377 -0.0755863 0.176661 0.0294659 -0.0787495 0.0230057 0.0171431 -0.0759476 0.0257622 0.0323347 -0.104967 0.0926836 0.0629914 -0.121737 0.0660496 0.0973237 -0.120362 0.1217 0.0844778 -0.0947648 0.154058 0.0554325 -0.00721665 0.0658838 0.0599617 0.0181564 0.209014 0.0471483 -0.00231261 0.0786005 0.0272055 0.00074534 0.0870911 0.0475762 0.0120064 0.151118 0.0921595 -0.0185935 0.110221 0.120506 -0.0459139 0.147925 0.10461 -0.00986734 0.183869 -0.142315 -0.0848081 0.169847 -0.0527295 -0.078294 0.175707 -0.0638794 0.0163526 0.205802 0.0303859 -0.114353 0.0138262 0.0399879 -0.301471 0.0449035 0.00224516 -0.174618 0.00432587 0.0012024 -0.318927 0.00282474 0.0240939 -0.144378 0.0104564 0.0140088 -0.165717 0.00808862 0.025408 -0.261259 0.0234352 0.056551 -0.178175 0.0489435 0.0887304 -0.200502 0.09062 0.0730516 -0.258329 0.0765188 0.00432603 -0.174618 0.00224498 0.00282526 -0.318927 0.00120181 0.0138263 -0.114353 0.0303858 0.044904 -0.301471 0.0399873 0.0489437 -0.178175 0.0565507 0.0906204 -0.200502 0.08873 0.0765193 -0.258329 0.0730511 0.0104566 -0.144378 0.0240938 0.00808878 -0.165717 0.0140086 0.0234355 -0.261259 0.0254076 0.0331858 -0.115923 0.0186971 -0.000382824 -0.112678 0.0281237 -0.00228492 -0.188184 0.00736675 -0.000521389 -0.148879 0.0259066 -0.000592657 -0.179334 0.0170303 0.0230765 -0.149318 0.0205927 0.00570232 -0.179544 0.0157143 0.0279736 -0.114149 0.0242717 0.0168337 -0.112477 0.0270976 0.0119177 -0.149345 0.025181 -0.000510278 -0.157054 0.101575 -0.00353628 -0.119113 0.205178 0.0520594 -0.166821 0.0848258 0.0489975 -0.129951 0.195305 0.0296953 -0.158226 0.0982841 -0.000673756 -0.182234 0.00333247 -0.000442164 -0.186339 0.0041768 -0.0019786 -0.185998 0.00393601 0.0260042 -0.149815 0.0162349 0.0144138 -0.17585 0.0103757 0.0122434 -0.177354 0.0125884 0.000139911 -0.281665 0.0031892 0.000714581 -0.311906 0.0018681 0.0483169 -0.22778 0.0573422 0.0484707 -0.294122 0.0660235 0.0275841 -0.265515 0.0328412 0.0602103 -0.17628 0.0675563 0.0974274 -0.181399 0.128274 0.08442 -0.155074 0.164657 0.0805037 -0.243928 0.110165 -0.0214348 -0.115163 0.0263382 -0.0450747 -0.297433 0.0598665 -0.0169994 -0.17432 0.012708 -0.0323281 -0.120366 0.0247085 -0.123684 -0.192894 0.120549 -0.0629131 -0.308175 0.0565224 -0.0535335 -0.187054 0.0520535 -0.0799553 -0.247988 0.100559 0.000688585 -0.189511 0.00375922 -0.00110404 -0.314649 -0.00268259 -0.0024096 -0.183482 0.00146436 -0.0146789 -0.149666 0.022926 -0.00825564 -0.181249 0.0160076 -0.0280506 -0.260475 0.042485 -0.00487855 -0.294924 -0.00312541 -0.00268264 -0.276146 0.00372266 -0.00361498 -0.295565 -0.000197939 -0.0265508 -0.214236 0.0838006 -0.0453737 -0.275531 0.0847653 -0.0160301 -0.257122 0.0491626 -0.0821515 -0.267518 0.0978967 -0.147589 -0.139357 0.179135 -0.132189 -0.204717 0.161474 -0.0325826 -0.158307 0.0943764 -0.0553254 -0.129744 0.191483 -0.0768731 -0.216657 0.144347 -0.0480929 -0.193821 0.173639 -0.0319598 -0.252532 0.0223866 -0.130359 -0.190381 -0.13036 -0.0417674 -0.302376 -0.0437432 -0.0437427 -0.302376 -0.0417679 -0.0179149 -0.173191 -0.0112865 -0.051276 -0.139629 -0.189437 -0.00121905 -0.173844 -0.0156557 -0.000660997 -0.124224 -0.205698 -0.00315253 -0.125228 -0.0356914 -0.0196529 -0.121912 -0.0355387 -0.0131504 -0.174441 -0.0137634 -0.00998149 -0.173377 -0.0144329 -0.0267466 -0.214071 -0.0872845 -0.00487225 0.000501512 -0.326578 -0.00290816 -0.253435 -0.0525766 -0.00315863 -0.185214 -0.192248 -0.0254028 -0.260313 -0.0433894 -0.0484858 -0.193827 -0.179222 -0.0158305 -0.255234 -0.0518632 -0.0354629 -0.125557 -0.0246285 -0.142506 -0.0910248 -0.175096 -0.0750856 -0.00152815 -0.257012 -0.0722214 -0.124188 -0.0741676 -0.0862871 -0.156955 -0.167286 -0.0887259 -0.0269616 -0.300449 -0.0293859 -0.265317 -0.033901 -0.0489215 -0.292812 -0.064006 -0.0761462 -0.219369 -0.147233 -0.0437378 -0.272006 -0.0871539 -0.149225 -0.145756 -0.183995 -0.138299 -0.0844671 -0.247381 0.00787916 -0.177213 -0.0173209 0.0925416 -0.194957 -0.121956 0.0311465 -0.116281 -0.0305581 0.0142841 -0.169335 -0.0151741 0.0566182 -0.30821 -0.0628815 0.1206 -0.192893 -0.123611 0.0224468 -0.252598 -0.0321183 0.0226277 -0.259848 -0.0443862 0.0447138 -0.296699 -0.0666425 0.0780555 -0.251798 -0.108374 0.0174167 -0.118021 -0.0371442 0.0695858 0.00173506 -0.253313 0.136524 -0.0856653 -0.168007 0.0381925 -0.104311 -0.101197 0.021432 -0.21425 -0.0868156 0.0451992 -0.135182 -0.192489 0.0812806 -0.164383 -0.158009 0.143876 -0.142802 -0.182236 0.0722023 -0.271132 -0.100743 0.126011 -0.209814 -0.16635 0.0113583 -0.25726 -0.0510383 0.0693565 -0.220911 -0.148631 0.0416407 -0.276126 -0.091297 0.077933 -0.0224488 -0.303314 0.131701 -0.079964 -0.246263 0.040755 -0.195637 -0.178525 0.0521091 -0.187103 -0.0534606 -0.0544393 0.0110968 -0.140222 0.089763 -0.0181328 -0.102574 0.0658838 -0.00721668 0.0554323 0.209015 0.0181564 0.0599613 0.110221 -0.0185935 0.0921593 0.147925 -0.0459139 0.120506 0.183869 -0.00986731 0.10461 0.0899764 0.00151104 0.00315884 0.217997 0.0270272 -0.00163179 0.0786006 -0.0023126 0.0471482 0.0870912 0.000745336 0.0272053 0.151118 0.0120064 0.0475759 0.0191328 -0.0817856 0.0348033 0.176661 -0.0755863 0.0477373 0.0660499 -0.121737 0.0629911 0.1217 -0.120362 0.0973233 0.154059 -0.0947647 0.0844773 0.0266652 -0.0721562 0.00180638 0.185874 -0.0681246 -0.00223434 0.0230059 -0.0787494 0.0294657 0.0257623 -0.0759476 0.0171429 0.0926839 -0.104967 0.0323343 0.0728978 0.00169388 0.0728976 -0.00297988 0.0193689 0.103853 -0.000762316 0.0708204 0.176213 -0.00490527 0.147185 0.253164 0.104895 0.0390722 0.148789 0.0834838 0.125704 0.238353 0.0620762 0.0110889 0.0881068 0.0374621 0.0164589 0.0996308 0.0596381 0.0636494 0.168873 0.000562097 0.0548429 0.000561945 0.00037853 0.0348291 0.0918031 -0.00168617 0.0520355 0.0510633 0.0773969 0.0245304 0.0773968 0.0520355 0.0485281 0.0520353 0.0448619 0.0344136 0.0859283 0.121009 0.00818024 0.121009 0.164479 0.00946916 0.164479 0.142122 0.0701439 0.203733 0.14879 0.0390722 0.104895 0.238353 0.125704 0.0834833 0.203734 0.0701439 0.142122 0.103853 0.0193689 -0.00298004 0.0918033 0.0348291 0.000378359 0.0510635 0.0520355 -0.00168634 0.0881069 0.0110889 0.0620759 0.0996309 0.0164589 0.0374619 0.0859284 0.0344136 0.0448617 0.176213 0.0708204 -0.00076264 0.253164 0.147185 -0.00490579 0.168873 0.0636494 0.0596377 -0.0453486 0.0249743 0.102019 -0.241074 0.110808 0.0817979 -0.168113 -0.085729 0.136643 -0.2533 0.00145693 0.0696234 -0.102613 -0.0180268 0.0898782 -0.0695176 0.00338157 0.0710174 -0.21093 0.0690752 0.13673 -0.0955209 0.0297361 0.0361088 -0.322922 0.176857 0.113703 -0.199573 -0.00939045 0.19663 -0.266897 0.0937116 0.182912 -0.0636084 0.0643869 0.168473 -0.0905228 0.120612 0.239679 -0.190709 0.167138 0.18491 -0.350576 0.222833 -0.00276479 -0.0780839 0.118172 0.148465 -0.228013 0.254311 0.108421 -0.118222 0.248311 0.218838 -0.0592752 0.0488793 -0.00110039 -0.256273 0.139764 -0.00325542 -0.103789 0.0222214 0.000424963 -0.0506374 0.0347309 0.0843051 -0.0544997 0.0469117 0.0488955 -0.153478 0.122493 0.0714591 -0.0956878 0.185893 -0.00103259 -0.243403 0.292628 -0.00391141 -0.0907941 0.166815 0.0869018 -0.101285 -0.104512 0.0382515 0.0186973 -0.115923 0.0331857 0.0573426 -0.22778 0.0483166 0.0660241 -0.294122 0.0484701 0.0675566 -0.17628 0.06021 0.128274 -0.181399 0.0974269 0.110166 -0.243928 0.0805031 0.0848262 -0.166821 0.052059 0.195305 -0.129951 0.0489969 0.164657 -0.155074 0.0844195 0.00333266 -0.182233 -0.000673952 0.00318964 -0.281665 0.000139471 0.00186871 -0.311906 0.000713883 0.0162351 -0.149815 0.026004 0.0103759 -0.17585 0.0144136 0.0328416 -0.265515 0.0275837 0.007367 -0.188184 -0.00228516 0.00417703 -0.186339 -0.000442398 0.00393622 -0.185998 -0.00197886 0.0205929 -0.149318 0.0230762 0.0157145 -0.179544 0.00570207 0.0125886 -0.177354 0.0122431 0.0281238 -0.112678 -0.000383078 0.101576 -0.157054 -0.000510707 0.205178 -0.119113 -0.00353686 0.0242719 -0.114149 0.0279734 0.0270978 -0.112477 0.0168335 0.0982844 -0.158226 0.0296949 0.0259067 -0.148879 -0.00052164 0.0170305 -0.179334 -0.00059291 0.0251812 -0.149345 0.0119175 -0.182307 -0.14282 0.143825 -0.00256368 -0.294379 -0.0055688 -0.166908 -0.209584 0.125896 -0.100269 -0.271033 0.0720543 -0.326567 -0.000394156 -0.00489163 -0.246744 -0.0798145 0.131489 -0.302973 -0.0230864 0.0776163 -0.0112863 -0.173191 -0.0179152 -0.189437 -0.139629 -0.0512765 -0.300449 -0.0269615 -0.0887267 -0.175096 -0.0910248 -0.142507 -0.257012 -0.00152806 -0.0750862 -0.183994 -0.145756 -0.149226 -0.24738 -0.0844671 -0.1383 -0.167285 -0.156955 -0.0862876 -0.0339006 -0.265317 -0.0293864 -0.0640054 -0.292812 -0.0489222 -0.147232 -0.219369 -0.0761469 -0.326577 0.000501616 -0.00487302 -0.043389 -0.260313 -0.0254033 -0.179221 -0.193826 -0.0484865 -0.0871533 -0.272006 -0.0437385 -0.0741673 -0.124187 -0.0722216 -0.0246283 -0.125557 -0.035463 -0.0355386 -0.121912 -0.0196531 -0.0156555 -0.173844 -0.00121931 -0.205698 -0.124224 -0.000661576 -0.0525762 -0.253435 -0.00290872 -0.192247 -0.185214 -0.00315934 -0.0137632 -0.174441 -0.0131507 -0.0144328 -0.173377 -0.00998179 -0.0872842 -0.214071 -0.0267472 -0.0518629 -0.255234 -0.0158311 -0.0356913 -0.125228 -0.00315273 -0.00251962 0.224887 -0.352245 -0.20521 -0.0115421 -0.205211 -0.188216 0.0883502 -0.271273 -0.114925 0.18115 -0.327073 -0.352244 0.224887 -0.00252036 -0.271273 0.0883502 -0.188217 -0.327073 0.18115 -0.114926 0.0978499 -0.267307 -0.0817942 0.169777 -0.0849223 -0.142231 0.161586 -0.204844 -0.131655 0.179198 -0.139446 -0.1474 0.113671 0.176157 -0.322886 0.182839 0.0935204 -0.266769 0.19661 -0.00938003 -0.199524 -0.140221 0.0110969 -0.0544397 0.169847 -0.0848082 -0.142315 0.205802 0.0163525 -0.0638798 0.175708 -0.078294 -0.0527299 0.102019 0.0249743 -0.0453488 0.0817982 0.110808 -0.241074 -0.00110026 0.0488794 -0.0592753 -0.00325509 0.139764 -0.256274 -0.00276439 0.222833 -0.350576 -0.00103227 0.185893 -0.0956881 -0.00391096 0.292628 -0.243404 0.148465 0.118172 -0.0780842 0.108421 0.254311 -0.228014 0.0843052 0.0347308 -0.0506376 0.0488956 0.0469117 -0.0544999 0.0714594 0.122493 -0.153478 0.0869021 0.166815 -0.0907944 0.00042508 0.0222214 -0.103789 0.0361089 0.0297361 -0.095521 0.113704 0.176857 -0.322923 0.168473 0.0643869 -0.0636086 0.23968 0.120612 -0.0905233 0.18491 0.167138 -0.190709 0.218838 0.248311 -0.118222 0.136643 -0.085729 -0.168113 0.0696237 0.00145686 -0.2533 0.196631 -0.00939049 -0.199573 0.182912 0.0937116 -0.266897 0.136731 0.0690752 -0.210931 0.0710175 0.00338154 -0.0695177 0.0898784 -0.0180268 -0.102613 -0.0591997 0.0394816 -0.0591999 -0.163288 0.00245556 -0.163288 -0.256816 -0.00171205 -0.0748441 -0.174735 -0.091065 -0.142216 -0.140495 0.0110584 -0.0543979 -0.0988969 0.0235937 -0.0376836 -0.154311 0.11675 -0.0754602 -0.241808 0.117421 -0.0810559 -0.204052 0.0554135 -0.140482 -0.0754064 0.00291106 -0.0754064 -0.204387 -0.0116562 -0.204387 -0.326243 0.180822 -0.11509 -0.269618 0.0878627 -0.187721 -0.0884287 0.160881 -0.088429 -0.187904 0.158527 -0.187904 -0.226195 0.244879 -0.116844 -0.0748437 -0.00171215 -0.256817 -0.142216 -0.091065 -0.174735 -0.11509 0.180822 -0.326243 -0.18772 0.0878627 -0.269619 -0.07546 0.11675 -0.154311 -0.0810556 0.117421 -0.241808 -0.140481 0.0554135 -0.204052 -0.116843 0.244879 -0.226195 -0.0376835 0.0235936 -0.0988971 -0.0543978 0.0110584 -0.140495 -0.0740674 -0.124154 -0.0720258 0.0263384 -0.115162 -0.021435 0.0598669 -0.297434 -0.0450752 0.0978973 -0.267518 -0.0821521 -0.00312479 -0.294924 -0.00487924 0.083801 -0.214236 -0.0265512 0.0847658 -0.275531 -0.0453744 0.0943767 -0.158307 -0.032583 0.191483 -0.129744 -0.0553259 0.144347 -0.216657 -0.0768736 0.17364 -0.193821 -0.0480935 0.12055 -0.192894 -0.123685 0.0565228 -0.308175 -0.0629135 0.179136 -0.139357 -0.14759 0.161475 -0.204717 -0.13219 0.100559 -0.247988 -0.0799557 0.00375946 -0.189511 0.000688406 -0.00268219 -0.31465 -0.00110461 0.00372307 -0.276147 -0.00268304 -0.000197375 -0.295565 -0.0036156 0.0229261 -0.149666 -0.0146791 0.0160078 -0.181249 -0.00825585 0.0424853 -0.260475 -0.0280509 0.049163 -0.257122 -0.0160306 0.0014645 -0.183482 -0.00240975 0.0127081 -0.17432 -0.0169996 0.0520536 -0.187054 -0.0535337 0.0247085 -0.120366 -0.0323283 -0.00489117 -0.000394212 -0.326568 -0.00556816 -0.29438 -0.0025643 0.143825 -0.14282 -0.182308 0.131489 -0.0798145 -0.246744 0.0776167 -0.0230865 -0.302974 0.125897 -0.209584 -0.166908 0.0720548 -0.271033 -0.100269 -0.300313 -0.0274343 -0.0875623 -0.130031 -0.190245 -0.130032 -0.24684 -0.0843703 -0.137821 -0.18369 -0.145602 -0.148897 -0.0875619 -0.0274344 -0.300314 -0.137821 -0.0843703 -0.246841 -0.148897 -0.145602 -0.18369 -0.0173207 -0.177213 0.00787894 -0.121955 -0.194957 0.0925411 -0.182236 -0.142802 0.143875 -0.253313 0.00173516 0.0695852 -0.168007 -0.0856653 0.136523 -0.303313 -0.0224487 0.0779323 -0.246263 -0.0799639 0.131701 -0.0868152 -0.21425 0.0214316 -0.192489 -0.135182 0.0451986 -0.158009 -0.164383 0.08128 -0.0510379 -0.25726 0.0113578 -0.148631 -0.220911 0.0693558 -0.178525 -0.195637 0.0407543 -0.062881 -0.30821 0.0566177 -0.123611 -0.192893 0.120599 -0.100743 -0.271132 0.0722016 -0.16635 -0.209814 0.126011 -0.0443859 -0.259848 0.0226273 -0.0666421 -0.296699 0.0447132 -0.108374 -0.251797 0.0780549 -0.0912965 -0.276126 0.0416401 -0.101197 -0.104311 0.0381922 -0.0371441 -0.118021 0.0174165 -0.030558 -0.116281 0.0311463 -0.0321181 -0.252598 0.0224465 -0.015174 -0.169335 0.014284 -0.322886 0.176157 0.11367 -0.14223 -0.0849223 0.169776 -0.266769 0.0935205 0.182838 -0.199524 -0.00937994 0.196609 -0.0817936 -0.267307 0.0978493 -0.131655 -0.204844 0.161585 -0.1474 -0.139446 0.179197 -0.102574 -0.0181327 0.0897627 0.0382517 -0.104512 -0.101285 -0.0720256 -0.124154 -0.0740675 0.0223868 -0.252532 -0.03196 -0.0534604 -0.187102 0.0521089 0.017359 -0.00533442 0.0064646 0.0813595 -0.0858912 0.0781106 0.00755602 -0.00924466 0.00191891 0.0262819 -0.0245333 0.010959 0.0318046 -0.0525533 0.013193 0.0553388 -0.0799763 0.0438287 0.0262707 -0.00952062 0.0190074 0.0375339 -0.0124348 0.0353307 0.0629386 -0.042041 0.0597668 0.00325965 -0.0451629 0.00325962 0.0660421 -0.138227 0.0660419 0.00368731 -0.0125956 0.00368731 0.013099 -0.0666756 0.00586084 0.0244412 -0.076224 0.0102608 0.0438107 -0.122415 0.0350388 0.00586087 -0.0666756 0.0130989 0.0102608 -0.076224 0.0244411 0.035039 -0.122415 0.0438105 0.00646462 -0.00533443 0.0173589 0.0781108 -0.0858912 0.0813593 0.00191891 -0.00924464 0.00755595 0.0190074 -0.00952062 0.0262706 0.0353307 -0.0124348 0.0375338 0.0597669 -0.042041 0.0629384 0.010959 -0.0245333 0.0262818 0.0131931 -0.0525533 0.0318045 0.0438289 -0.0799763 0.0553386 0.0233399 -0.00509835 0.00875764 0.042751 -0.0412142 0.145791 -0.0016993 -0.00588533 0.0085048 -0.0027992 -0.0362088 0.152385 0.0177299 -0.0427796 0.0213639 0.00792192 -0.00525201 0.00981279 -0.000604741 -0.022146 0.0168441 -0.000748266 -0.04429 0.0224899 -0.00052021 -0.0604069 0.0807253 0.0278131 -0.0629798 0.076169 0.022348 -0.0286614 0.0578277 0.0140718 -0.020097 0.0164089 0.0204943 -0.0120219 0.0622462 -0.00155901 -0.00733503 0.0343258 -0.000576036 -0.00757851 0.0673278 -0.000488791 -0.0185378 0.1125 0.0316751 -0.0191667 0.107574 0.0115559 -0.00892983 0.0349603 0.0296264 -0.0260749 0.0130859 0.0333401 -0.0509082 0.0163529 0.0488621 -0.0669688 0.0706359 0.0280133 -0.0466326 0.020449 0.0472672 -0.035751 0.0436526 0.0864527 -0.0733158 0.103706 0.07397 -0.0550953 0.128656 0.0581394 -0.0763276 0.0574475 0.0334048 -0.0110202 0.0262253 0.0426743 -0.0132819 0.0473887 0.0566909 -0.0254274 0.0955857 0.0351857 -0.0104407 0.0569034 0.0683247 -0.0358159 0.0782405 -0.013266 -0.00491559 0.0109299 -0.0892893 -0.0727123 0.100196 -0.0307494 -0.0457068 0.0228808 -0.0212401 -0.00783206 0.0111636 -0.0430056 -0.012252 0.047145 -0.0202742 -0.0761 0.0248256 -0.097263 -0.12679 0.118978 -0.0334717 -0.0825891 0.0210812 -0.015615 -0.0232996 0.0170067 -0.0175584 -0.0437071 0.0224462 -0.0493983 -0.0699874 0.0689485 -0.0332231 -0.106263 0.0905229 -0.0868138 -0.0991406 0.152172 -0.0245712 -0.0295697 0.0576624 -0.0453275 -0.0438186 0.145259 -0.0766927 -0.0577397 0.127532 -0.0302011 -0.0629367 0.0780344 -0.0297021 0.00361488 0.0913236 -0.123083 -0.0454661 0.140523 -0.0580017 -0.00684787 0.0658009 -0.0167921 -0.00694875 0.0341008 -0.0213866 -0.00532298 0.0658498 -0.0591281 -0.0275751 0.0955069 -0.0466882 0.00949911 0.15074 -0.106974 -0.0127293 0.177694 -0.0348672 -0.0191771 0.108336 0.00517381 -0.0693571 0.00517378 0.0293468 -0.2879 0.0293464 0.00889867 -0.153254 0.00847332 0.0169415 -0.240182 0.0168308 0.0147079 -0.0979914 0.00845563 0.0253565 -0.112205 0.0114616 0.0321054 -0.211576 0.0271763 0.0183657 -0.136665 0.00939806 0.0230771 -0.146073 0.023077 0.0634774 -0.197717 0.0634771 0.0519883 -0.250468 0.0519879 0.0416618 -0.171185 0.0349447 0.00154818 -0.0908273 0.00154815 0.000290139 -0.299819 0.000289739 0.00258139 -0.083344 0.00258134 0.00143506 -0.130586 0.000679136 0.000843853 -0.159207 0.00290468 0.00199448 -0.25205 0.00121739 0.011113 -0.200895 0.0111128 0.00520841 -0.126928 0.00509392 0.00847345 -0.153254 0.00889855 0.000679228 -0.130586 0.00143496 0.00290482 -0.159207 0.000843694 0.0012177 -0.25205 0.00199418 0.0168311 -0.240182 0.0169412 0.00509398 -0.126928 0.00520832 0.00845569 -0.0979914 0.0147079 0.0114617 -0.112205 0.0253564 0.0271765 -0.211576 0.0321051 0.0349449 -0.171186 0.0416615 0.0093982 -0.136665 0.0183656 -0.0546293 -0.166274 0.0820349 -0.0963111 -0.182632 0.121663 -0.0887638 -0.154078 0.16103 0.000347462 -0.0927603 0.000347458 -0.0671742 -0.197561 -0.0671746 -0.0164996 -0.16576 -0.00709883 -0.0916515 -0.204608 -0.09338 -0.0316238 -0.124648 -0.019534 -0.0227016 -0.11511 -0.012381 -0.00598868 -0.125329 -0.00435125 -0.0117627 -0.151123 -0.00576713 -0.0350801 -0.211518 -0.0296104 -0.0252416 -0.262799 -0.0236978 -0.0731112 -0.260155 -0.0769455 -0.0116788 -0.197299 -0.011679 -0.0301274 -0.286712 -0.0301277 -0.0545563 -0.248757 -0.0545567 -0.0193611 -0.240241 -0.0177553 -0.00356782 -0.0666127 -0.00356786 -0.0123809 -0.11511 -0.0227018 -0.00709869 -0.16576 -0.0164998 -0.0933797 -0.204608 -0.0916519 -0.0236975 -0.262799 -0.025242 -0.0769451 -0.260155 -0.0731117 -0.00435124 -0.125329 -0.0059887 -0.00576705 -0.151123 -0.0117628 -0.0296102 -0.211518 -0.0350803 -0.017755 -0.240241 -0.0193614 -0.0195339 -0.124648 -0.031624 -0.0499789 -0.228452 -0.0580387 -0.0982874 -0.185804 -0.127984 -0.0842502 -0.24269 -0.111712 0.00875766 -0.00509834 0.0233398 0.145791 -0.0412142 0.0427506 0.0436527 -0.035751 0.0472671 0.103707 -0.0733158 0.0864524 0.128656 -0.0550953 0.0739696 0.0262253 -0.0110202 0.0334047 0.0473887 -0.0132819 0.0426742 0.0955858 -0.0254274 0.0566906 0.0782406 -0.0358159 0.0683245 0.0622463 -0.0120219 0.0204942 0.107574 -0.0191667 0.0316748 0.0569035 -0.0104407 0.0351856 0.013086 -0.0260749 0.0296263 0.0163529 -0.0509082 0.03334 0.0706361 -0.0669688 0.0488618 0.0574477 -0.0763276 0.0581392 0.021364 -0.0427795 0.0177298 0.0761691 -0.0629798 0.0278128 0.0204491 -0.0466326 0.0280132 0.0085048 -0.00588531 -0.00169931 0.152385 -0.0362088 -0.00279962 0.00981279 -0.00525206 0.00792191 0.0343259 -0.00733505 -0.00155908 0.0673279 -0.00757849 -0.000576128 0.1125 -0.0185378 -0.000489072 0.0578278 -0.0286613 0.0223478 0.0349604 -0.00892981 0.0115559 0.0168441 -0.022146 -0.000604777 0.02249 -0.0442899 -0.000748372 0.0807254 -0.0604069 -0.000520454 0.016409 -0.020097 0.0140717 -0.107059 0.0360699 0.145263 -0.164113 0.00728497 0.15665 -0.149103 0.069501 0.20423 -0.121768 -0.195026 0.0925016 -0.0182759 -0.177567 0.00738963 -0.0154013 -0.169143 0.0139596 -0.0305795 -0.116432 0.0309079 -0.0372857 -0.118483 0.0173786 -0.00264481 -0.314585 -0.000772998 0.00265651 -0.188938 0.000902857 0.000890914 -0.183447 -0.00271632 -0.10807 -0.251792 0.078061 -0.0662804 -0.29645 0.0447204 -0.04466 -0.259814 0.022114 0.00753513 -0.270351 -0.00431349 0.0100766 -0.189504 -0.000764709 -0.00101826 -0.296056 -0.00337905 0.00173842 -0.27789 -0.00268238 0.00558369 -0.277049 -0.00375191 -0.148946 -0.220927 0.0695943 -0.107801 -0.254617 0.0244351 -0.0527645 -0.257702 0.0111736 -0.0894352 -0.275827 0.0417471 -0.205548 -0.124208 -0.000182232 -0.015957 -0.174634 -0.000910778 -0.0360074 -0.125652 -0.00294582 -0.157791 -0.164676 0.0812758 -0.192161 -0.135682 0.0452922 -0.086752 -0.214523 0.0212692 -0.19335 -0.18293 -0.0028995 -0.116382 -0.243818 -0.000789479 -0.0530787 -0.256883 -0.00238969 -0.176937 -0.196315 0.0415349 -0.0580384 -0.228452 -0.0499792 -0.127983 -0.185804 -0.0982878 -0.111711 -0.24269 -0.0842509 0.0597788 -0.297567 -0.0447521 0.0259158 -0.114702 -0.022115 0.0245817 -0.120396 -0.0324364 0.0124985 -0.174342 -0.017213 0.0420784 -0.260625 -0.0282605 0.0150543 -0.181029 -0.00796215 0.0217371 -0.149195 -0.0150041 0.118958 -0.126943 -0.0972929 0.0245402 -0.0761746 -0.0205821 0.0207308 -0.0826866 -0.0336706 0.100462 -0.24808 -0.0797692 0.121641 -0.182689 -0.0962054 0.0817187 -0.166106 -0.0555593 0.18386 -0.0674476 -0.000871892 0.0259017 -0.0720144 0.00352998 0.151909 -0.0991893 -0.0876126 0.174417 -0.0778509 -0.0534179 0.0899644 -0.105802 -0.0342212 0.144221 -0.217396 -0.0771183 0.189812 -0.129772 -0.056155 0.0938289 -0.157903 -0.0338468 0.160699 -0.154277 -0.089545 0.116235 -0.24446 -0.00141479 0.0275788 -0.111968 -0.000175462 0.0549211 -0.256751 -0.000409008 0.0143397 -0.174913 0.00405823 0.0236139 -0.147894 0.0022869 0.0838029 -0.275323 -0.0436731 0.10699 -0.254572 -0.029838 0.0815669 -0.213801 -0.0270374 0.0471104 -0.257193 -0.0164963 0.188917 -0.181811 -0.00241498 0.203701 -0.118321 -0.00245043 0.0999135 -0.156141 0.00121985 0.173301 -0.194757 -0.0495116 -0.163271 0.00261409 -0.163271 -0.0591758 0.0404167 -0.059176 -0.00354309 0.139274 -0.255936 -0.00110289 0.0496693 -0.0593481 6.69932e-05 0.0218089 -0.103651 -0.0375651 0.0235791 -0.0985407 -0.140204 0.0554133 -0.203698 -0.0808211 0.117692 -0.241496 -0.0752689 0.116776 -0.154055 -0.00345547 0.482139 -0.0034561 0.00674926 0.0552422 0.00674906 -0.0052473 0.29158 -0.243513 -0.00465697 0.412797 -0.156264 0.00271644 0.185384 -0.0973813 -0.187031 0.15722 -0.187031 -0.142469 0.359288 -0.14247 -0.090304 0.161121 -0.0903044 -0.115165 0.243252 -0.222808 -0.0751642 0.00286248 -0.0751642 -0.0985406 0.0235791 -0.0375652 -0.255936 0.139274 -0.00354364 -0.0593479 0.0496694 -0.00110307 -0.243513 0.29158 -0.00524787 -0.156263 0.412797 -0.00465762 -0.0973809 0.185385 0.00271597 -0.203698 0.0554134 -0.140205 -0.241496 0.117692 -0.0808216 -0.154054 0.116776 -0.0752694 -0.222808 0.243252 -0.115166 -0.103651 0.021809 6.68631e-05 0.0813657 0.110293 -0.240747 0.10217 0.0249391 -0.0451741 0.140356 -0.04559 -0.123048 0.0907373 0.00371896 -0.0297256 0.0656871 -0.00693591 -0.0580751 0.0710154 0.00357633 -0.0696475 0.136646 0.0688424 -0.210937 0.156565 0.00721392 -0.164118 0.14538 0.0360925 -0.106929 0.21813 0.0264743 -0.000943993 0.0907465 -0.000710879 0.00265882 0.177337 -0.0127591 -0.106947 0.205246 0.0162823 -0.0636734 0.150084 0.00837702 -0.0455534 0.185013 0.16735 -0.190741 0.239705 0.120989 -0.0902867 0.168583 0.0645438 -0.0628827 0.204108 0.0696157 -0.148929 0.0359497 0.0298164 -0.095601 0.0711902 0.122254 -0.153521 0.0491951 0.0470256 -0.0540319 0.0844566 0.0346523 -0.0511898 0.14543 0.417281 -0.00492741 0.103299 0.0178965 -0.00297354 0.236503 0.286978 -0.000378081 0.254324 0.148441 -0.00498445 0.175746 0.0704609 0.00036156 0.107335 0.250454 -0.226512 0.132725 0.368052 -0.145985 0.148196 0.117845 -0.0781288 0.220233 0.251545 -0.11928 0.0969531 0.184934 0.00253057 0.0519033 0.0490235 0.00201951 0.0894394 0.0329339 -0.00220162 0.0858098 0.171628 -0.0925994 0.10006 -0.0729004 -0.0893668 0.0113482 -0.00417262 -0.0137864 0.0112169 -0.00778722 -0.0211693 0.0226631 -0.0457706 -0.0309405 0.0685513 -0.0701301 -0.0499165 0.021686 -0.0439122 -0.0177581 0.0165895 -0.0225931 -0.0161097 0.047159 -0.0123516 -0.0432863 0.0952136 -0.0277345 -0.0595486 0.0652655 -0.00546417 -0.0220397 0.0343872 -0.00691388 -0.0174633 0.15125 -0.0349104 -0.00192607 0.00922809 -0.0046006 -0.00141121 0.0798852 -0.060504 0.00194631 0.0229071 -0.04376 0.00178869 0.0170101 -0.0198533 0.00130614 0.12717 -0.057882 -0.0770782 0.144365 -0.0434583 -0.0455756 0.0574025 -0.0294152 -0.0253092 0.0774598 -0.0628685 -0.030616 0.111081 -0.018174 0.00108348 0.0667829 -0.00493755 -0.00224154 0.0343698 -0.0077808 -0.00123332 0.107416 -0.0188575 -0.0350082 0.0109299 -0.00491557 -0.0132661 0.100196 -0.0727124 -0.0892895 0.0913238 0.00361488 -0.0297022 0.140523 -0.0454661 -0.123084 0.15074 0.00949909 -0.0466885 0.177695 -0.0127292 -0.106974 0.0576626 -0.0295698 -0.0245714 0.145259 -0.0438186 -0.0453278 0.127532 -0.0577397 -0.076693 0.034101 -0.00694874 -0.0167922 0.0658499 -0.00532301 -0.0213866 0.0955071 -0.0275751 -0.0591282 0.108336 -0.0191771 -0.0348674 0.0658009 -0.00684792 -0.0580017 0.047145 -0.0122521 -0.0430057 0.0248257 -0.0761 -0.0202744 0.118978 -0.12679 -0.0972633 0.0905231 -0.106263 -0.0332234 0.152172 -0.0991405 -0.0868142 0.0170068 -0.0232995 -0.015615 0.0224463 -0.0437071 -0.0175585 0.0689487 -0.0699874 -0.0493985 0.0780346 -0.0629367 -0.0302012 0.0210813 -0.082589 -0.0334718 0.0228809 -0.0457068 -0.0307495 0.0111636 -0.00783204 -0.02124 0.145264 0.0360699 -0.107059 0.15665 0.00728503 -0.164114 0.20423 0.069501 -0.149103 0.0820352 -0.166274 -0.0546296 0.121664 -0.182632 -0.0963114 0.16103 -0.154078 -0.0887642 -0.189268 -0.139623 -0.0507547 -0.0104557 -0.172798 -0.017508 -0.0354244 -0.122082 -0.0192302 -0.0871763 -0.21396 -0.026276 -0.0144599 -0.17375 -0.00899377 -0.0140808 -0.174035 -0.0123015 -0.0242662 -0.125218 -0.0354949 0.0025595 -0.275919 -0.00219721 0.00346608 -0.182326 0.000157196 0.00505257 -0.273792 -0.00161165 0.00720653 -0.184373 -0.00197231 0.00398084 -0.181701 -0.000113091 -0.178616 -0.192349 -0.0462959 -0.109482 -0.251191 -0.0286876 -0.0457076 -0.259291 -0.024998 -0.0541594 -0.255427 -0.0157321 0.00356701 -0.319702 0.00098121 0.00563113 -0.177896 0.00213909 0.00383304 -0.293207 -0.000348565 0.00278605 -0.312151 0.000446784 0.00237334 -0.281417 0.00147283 -0.146611 -0.218131 -0.0762482 -0.0641451 -0.29249 -0.0493701 -0.0336972 -0.265297 -0.0292077 -0.0874656 -0.270769 -0.0463852 -0.0931811 -0.204501 -0.091252 -0.00609185 -0.16566 -0.0164658 -0.0191211 -0.124338 -0.0314085 -0.167094 -0.156694 -0.086019 -0.127758 -0.185549 -0.0981442 -0.0576484 -0.22804 -0.050053 -0.076723 -0.25983 -0.0728071 -0.0434442 -0.30214 -0.0416196 -0.0228215 -0.263472 -0.0249559 -0.111392 -0.242069 -0.0842371 0.107855 -0.250968 0.024281 0.0240832 -0.12255 0.0302399 0.0217788 -0.149657 0.0191024 0.0814066 -0.209834 0.0246333 0.0309181 -0.115916 0.0181033 0.0304577 -0.119219 0.0248966 0.0507602 -0.255941 0.0151479 0.0234718 -0.147462 0.0137907 0.0416331 -0.260257 0.0244653 0.0148404 -0.176661 0.0125051 0.0188952 -0.151479 0.0233305 0.0152518 -0.170697 0.0100752 0.177282 -0.0744528 0.0487825 0.016984 -0.0819689 0.0322397 0.0926907 -0.105289 0.0344393 0.0269591 -0.0734175 0.0175126 0.0237997 -0.0791003 0.0273247 0.175519 -0.192533 0.0431793 0.194755 -0.127835 0.0493955 0.0848482 -0.16362 0.0505128 0.0982025 -0.156416 0.0310178 0.0873564 -0.141192 0.0898629 0.00847836 -0.0796663 0.0344173 0.155328 -0.0943988 0.083933 0.121958 -0.120041 0.0961889 0.0650075 -0.121648 0.0610547 0.143598 -0.217121 0.072575 0.127656 -0.180312 0.0968878 0.066041 -0.175204 0.0590228 0.163901 -0.153975 0.0841458 0.0442723 -0.302212 0.0392791 0.0117706 -0.116247 0.032405 0.0235202 -0.262678 0.0247308 0.00629623 -0.166129 0.0131613 0.0103165 -0.145794 0.0239914 0.0886865 -0.272006 0.0420918 0.0650719 -0.293922 0.0464992 0.0548217 -0.227789 0.0478386 0.0330928 -0.265817 0.0270373 0.075603 -0.25871 0.0723796 0.0897016 -0.200216 0.0879324 0.0470884 -0.178454 0.0564967 0.109321 -0.244628 0.0808538 -0.240746 0.110293 0.0813652 -0.0451739 0.0249392 0.10217 -0.00492681 0.417281 0.145429 -0.00297334 0.0178965 0.103299 0.00253096 0.184934 0.0969527 0.00201973 0.0490235 0.051903 -0.0022014 0.0329339 0.0894393 -0.153521 0.122254 0.0711898 -0.0540317 0.0470255 0.0491949 -0.0511895 0.0346523 0.0844564 -0.226511 0.250454 0.107334 -0.145984 0.368052 0.132724 -0.0781284 0.117845 0.148196 -0.092599 0.171628 0.0858094 -0.000943491 0.0264744 0.21813 0.00265903 -0.000710886 0.0907463 -0.00037748 0.286978 0.236502 -0.00498386 0.148441 0.254323 0.000361902 0.0704609 0.175746 -0.190741 0.167351 0.185013 -0.0902862 0.120989 0.239704 -0.0628823 0.0645438 0.168583 -0.119279 0.251545 0.220232 -0.0956008 0.0298165 0.0359496 -0.0696474 0.0035763 0.0710153 -0.123047 -0.0455899 0.140356 -0.0297254 0.00371891 0.0907372 -0.106946 -0.012759 0.177337 -0.0636729 0.0162824 0.205245 -0.045553 0.00837705 0.150084 -0.210936 0.0688425 0.136646 -0.164118 0.00721403 0.156564 -0.106928 0.0360926 0.145379 -0.148929 0.0696158 0.204108 -0.058075 -0.00693596 0.0656869 0.139107 0.364086 0.139106 0.0783296 0.00150569 0.0783294 0.209116 0.0189769 0.0601866 0.0671621 -0.00722929 0.0569153 0.15032 0.0105996 0.0482011 0.0858521 -0.00145086 0.0271361 0.0790743 -0.00250753 0.0473716 0.14384 0.129302 0.0714153 0.0985604 0.0135523 0.0370364 0.089615 0.0130666 0.0622964 0.216689 0.250901 0.112799 0.238337 0.127808 0.083211 0.149339 0.0411605 0.101275 0.167826 0.0641753 0.0606539 0.108079 -0.0798837 0.108079 0.0481762 -0.0110321 0.0481761 0.183702 -0.00925344 0.104323 0.147836 -0.0458329 0.120093 0.110988 -0.0191973 0.0920831 0.179507 0.164328 0.179506 0.164306 0.00958762 0.164305 0.121745 0.00785998 0.121745 0.203349 0.0700734 0.14204 0.0745696 0.0347795 0.0745695 0.0855724 0.168122 0.0855719 0.0785506 0.036245 0.0388417 0.0714157 0.129302 0.14384 0.0370365 0.0135523 0.0985602 0.0622965 0.0130666 0.0896149 0.0388419 0.0362451 0.0785504 0.060187 0.018977 0.209116 0.0569154 -0.00722928 0.0671621 0.104323 -0.0092534 0.183701 0.120093 -0.0458329 0.147835 0.0920833 -0.0191972 0.110988 0.112799 0.250901 0.216688 0.0832116 0.127808 0.238337 0.101275 0.0411605 0.149339 0.142041 0.0700735 0.203348 0.0482013 0.0105996 0.150319 0.0271362 -0.00145087 0.085852 0.0473717 -0.00250755 0.0790742 0.0606542 0.0641753 0.167826 0.146301 -0.0402999 0.0435532 0.00964885 -0.0106462 0.0218014 0.0117961 -0.00762406 0.0199373 0.0211235 -0.0195253 0.0236182 0.0618857 -0.0275737 0.0217056 0.0810074 -0.0604393 0.0282538 0.0726828 -0.0670603 0.0473129 0.015353 -0.0498141 0.0310645 0.0152396 -0.024674 0.0268069 0.023066 -0.0464685 0.0241079 0.0333271 -0.0106649 0.0255266 0.107196 -0.0170918 0.031922 0.0963084 -0.025182 0.055197 0.0467608 -0.0138333 0.0419367 0.0272094 -0.0135195 0.0314936 0.0567918 -0.0087476 0.0330711 0.077786 -0.0862583 0.0808093 0.00680859 -0.0062053 0.0168516 0.0425639 -0.0804588 0.0545459 0.00977236 -0.0515839 0.030934 0.00993401 -0.0249963 0.0256154 0.129874 -0.0546998 0.0732386 0.104288 -0.0734745 0.0853171 0.0443701 -0.0369055 0.0452386 0.0576941 -0.0765223 0.0560881 0.059323 -0.0429722 0.0628694 0.0343149 -0.013067 0.0383982 0.0191799 -0.0116854 0.0261754 0.0783091 -0.0366885 0.0673232 0.0925018 -0.195026 -0.121769 0.00738972 -0.177567 -0.018276 -0.000181908 -0.124208 -0.205548 -0.000910677 -0.174634 -0.0159571 -0.004313 -0.270351 0.00753465 -0.000764552 -0.189504 0.0100764 -0.00289909 -0.18293 -0.19335 -0.000789033 -0.243818 -0.116383 -0.00238942 -0.256884 -0.0530789 0.0695946 -0.220927 -0.148946 0.0244355 -0.254617 -0.107802 0.0111738 -0.257702 -0.0527648 0.0812761 -0.164676 -0.157791 0.0452926 -0.135682 -0.192161 0.0212694 -0.214523 -0.0867523 0.0415352 -0.196315 -0.176937 -0.00294565 -0.125652 -0.0360075 0.0173787 -0.118483 -0.0372859 -0.000772496 -0.314585 -0.00264521 0.000903019 -0.188938 0.0026564 -0.00337852 -0.296056 -0.00101864 -0.00268192 -0.27789 0.00173795 -0.00375156 -0.277049 0.00558344 0.0780613 -0.251792 -0.108071 0.0447207 -0.29645 -0.0662808 0.0221143 -0.259814 -0.0446602 0.0417475 -0.275827 -0.0894356 -0.00271624 -0.183447 0.000890789 0.0139597 -0.169143 -0.0154013 0.0309079 -0.116433 -0.0305796 -0.0507543 -0.139623 -0.189269 -0.0175079 -0.172798 -0.0104559 -0.0912517 -0.204501 -0.0931813 -0.0164658 -0.16566 -0.00609199 0.000981627 -0.319702 0.00356662 0.00213922 -0.177896 0.00563101 -0.0728068 -0.25983 -0.0767233 -0.0416192 -0.30214 -0.0434446 -0.0249557 -0.263472 -0.0228218 -0.0762478 -0.218132 -0.146611 -0.0493696 -0.29249 -0.0641455 -0.0292073 -0.265297 -0.0336975 -0.0860187 -0.156694 -0.167094 -0.0981439 -0.185549 -0.127759 -0.0500528 -0.22804 -0.0576487 -0.0842367 -0.242069 -0.111392 -0.0314084 -0.124338 -0.0191212 -0.0354948 -0.125218 -0.0242663 -0.0021967 -0.275919 0.00255906 0.000157348 -0.182326 0.00346591 -0.000348045 -0.293207 0.0038326 0.000447259 -0.312151 0.00278556 0.00147315 -0.281417 0.00237304 -0.0462955 -0.192349 -0.178617 -0.0286871 -0.251191 -0.109483 -0.0249976 -0.259291 -0.0457079 -0.0463847 -0.270769 -0.0874661 -0.00161131 -0.273792 0.00505226 -0.00197213 -0.184373 0.00720635 -0.000112956 -0.181701 0.00398071 -0.0262757 -0.21396 -0.0871765 -0.00899365 -0.17375 -0.0144601 -0.0123014 -0.174035 -0.0140809 -0.0157318 -0.255427 -0.0541596 -0.0192301 -0.122082 -0.0354245 -0.0667889 -0.197334 -0.0667891 -1.94077e-05 -0.0915361 -1.9402e-05 -0.0121668 -0.114846 -0.022406 -0.0291753 -0.21121 -0.0345732 -0.00491155 -0.150575 -0.0116663 -0.00420263 -0.124176 -0.0060534 -0.00353785 -0.0663951 -0.00353787 0.000537959 -0.300627 0.000537628 0.000756308 -0.0857152 0.000756248 0.00269635 -0.254715 0.00229305 0.00253587 -0.157118 -0.000500594 -0.000232138 -0.13135 0.000408687 -0.0541187 -0.248432 -0.0541189 -0.0298495 -0.28651 -0.0298498 -0.0114044 -0.196857 -0.0114046 -0.0171942 -0.239982 -0.0189971 0.00229333 -0.254715 0.0026961 -0.000500508 -0.157118 0.00253575 0.000408755 -0.13135 -0.000232275 -0.034573 -0.21121 -0.0291754 -0.0116662 -0.150575 -0.00491163 -0.00605336 -0.124176 -0.00420275 -0.0189969 -0.239982 -0.0171944 -0.0224059 -0.114846 -0.0121669 -0.0447516 -0.297567 0.0597784 -0.0221149 -0.114702 0.0259157 -0.00141424 -0.24446 0.116235 -0.00017533 -0.111968 0.0275786 -0.000871401 -0.0674475 0.183859 0.00353016 -0.0720144 0.0259015 -0.00241439 -0.181811 0.188916 -0.0024499 -0.118321 0.2037 0.0012202 -0.156141 0.0999131 -0.0771178 -0.217396 0.14422 -0.0561544 -0.129772 0.189812 -0.0338465 -0.157903 0.0938286 -0.0436725 -0.275323 0.0838025 -0.0298375 -0.254572 0.106989 -0.0270371 -0.213801 0.0815666 -0.0495111 -0.194757 0.1733 -0.000408669 -0.256751 0.0549207 0.00405843 -0.174913 0.0143396 0.00228707 -0.147894 0.0236137 -0.0282601 -0.260625 0.0420782 -0.00796197 -0.181029 0.0150542 -0.0150039 -0.149195 0.021737 -0.0164959 -0.257193 0.0471101 -0.0972926 -0.126943 0.118957 -0.0205819 -0.0761747 0.02454 -0.0876122 -0.0991892 0.151909 -0.0534174 -0.0778509 0.174417 -0.0342209 -0.105802 0.0899641 -0.0797688 -0.24808 0.100461 -0.0962051 -0.182689 0.12164 -0.055559 -0.166106 0.0817185 -0.0895446 -0.154277 0.160698 -0.0336706 -0.0826866 0.0207307 -0.0324363 -0.120396 0.0245816 -0.0172129 -0.174342 0.0124984 0.0242816 -0.250968 0.107854 0.0302401 -0.12255 0.024083 0.0392796 -0.302212 0.0442719 0.032405 -0.116247 0.0117704 0.0898633 -0.141192 0.0873561 0.0344174 -0.0796663 0.00847826 0.0723801 -0.25871 0.0756026 0.0879328 -0.200216 0.0897012 0.0564969 -0.178454 0.0470881 0.0725755 -0.217121 0.143598 0.0968883 -0.180312 0.127656 0.0590231 -0.175204 0.0660407 0.0420924 -0.272006 0.088686 0.0464997 -0.293922 0.0650714 0.047839 -0.227789 0.0548214 0.0808543 -0.244628 0.109321 0.0247311 -0.262678 0.02352 0.0131615 -0.166129 0.00629607 0.0239915 -0.145794 0.0103163 0.0244657 -0.260257 0.0416328 0.0125053 -0.176661 0.0148403 0.0233307 -0.151479 0.018895 0.0270376 -0.265817 0.0330925 0.048783 -0.0744528 0.177282 0.0322398 -0.0819688 0.0169839 0.0839334 -0.0943987 0.155328 0.0961892 -0.120041 0.121958 0.061055 -0.121648 0.0650073 0.0431798 -0.192533 0.175518 0.0493961 -0.127835 0.194754 0.0505131 -0.16362 0.084848 0.0841463 -0.153975 0.1639 0.0344396 -0.105289 0.0926905 0.0175128 -0.0734175 0.0269589 0.0273248 -0.0791003 0.0237996 0.0246336 -0.209834 0.0814063 0.0181035 -0.115916 0.0309179 0.0248968 -0.119219 0.0304575 0.0310181 -0.156416 0.0982021 0.0191025 -0.149657 0.0217786 0.0151482 -0.255941 0.0507599 0.0100754 -0.170697 0.0152516 0.0137909 -0.147462 0.0234716 0.0285185 -0.288779 0.0285181 0.00496519 -0.0728175 0.00496515 0.00456095 -0.115671 0.00862822 0.0263018 -0.21009 0.0308202 0.0107571 -0.110998 0.026559 0.00940651 -0.0957765 0.0127471 0.014362 -0.239494 0.0166007 0.00685835 -0.131467 0.0152292 0.00468629 -0.0858403 0.00468625 0.00796836 -0.197571 0.00796818 0.0656988 -0.138016 0.0656985 0.00328007 -0.0452488 0.00328 0.035532 -0.122296 0.0437165 0.0094761 -0.0771787 0.0268531 0.0083962 -0.0670411 0.0127332 0.0509286 -0.25032 0.0509282 0.0625421 -0.197289 0.0625418 0.02342 -0.14453 0.0234199 0.0350598 -0.170512 0.04137 0.0437168 -0.122296 0.0355319 0.0268531 -0.0771787 0.00947605 0.0127333 -0.0670411 0.00839613 0.0308204 -0.21009 0.0263016 0.0265591 -0.110998 0.010757 0.0127471 -0.0957765 0.00940645 0.0413702 -0.170512 0.0350596 0.00862829 -0.115671 0.00456088 0.016601 -0.239494 0.0143618 0.0152293 -0.131467 0.00685821 -0.0893666 -0.0729004 0.10006 -0.0137864 -0.00417265 0.0113482 -0.0019257 -0.0349104 0.151249 -0.00141121 -0.00460062 0.00922809 0.0010838 -0.018174 0.111081 -0.00224138 -0.00493753 0.0667827 -0.00123322 -0.00778077 0.0343697 -0.0595484 -0.0277345 0.0952134 -0.0220396 -0.00546414 0.0652653 -0.0174633 -0.00691389 0.0343872 -0.077078 -0.057882 0.12717 -0.0455752 -0.0434582 0.144365 -0.025309 -0.0294152 0.0574023 -0.0350079 -0.0188574 0.107415 0.00194663 -0.0605041 0.0798849 0.00178883 -0.04376 0.0229069 0.00130625 -0.0198533 0.01701 -0.0499163 -0.0701301 0.0685511 -0.017758 -0.0439123 0.0216859 -0.0161097 -0.0225931 0.0165894 -0.0306158 -0.0628685 0.0774596 -0.0432862 -0.0123516 0.0471589 -0.0211693 -0.00778719 0.0112168 -0.0309404 -0.0457706 0.022663 0.0435535 -0.0402998 0.146301 0.0218014 -0.0106462 0.00964871 0.0808096 -0.0862583 0.0777858 0.0168516 -0.00620528 0.00680852 0.0628696 -0.0429722 0.0593229 0.0383983 -0.013067 0.0343148 0.0261756 -0.0116854 0.0191798 0.0551972 -0.0251821 0.0963082 0.0419368 -0.0138333 0.0467608 0.0314937 -0.0135195 0.0272092 0.073239 -0.0546997 0.129874 0.0853175 -0.0734745 0.104288 0.0452387 -0.0369055 0.04437 0.0673234 -0.0366886 0.0783089 0.0545461 -0.0804588 0.0425638 0.0309341 -0.0515839 0.00977228 0.0256155 -0.0249962 0.00993394 0.0473131 -0.0670602 0.0726826 0.0310645 -0.0498141 0.0153529 0.026807 -0.024674 0.0152395 0.0560883 -0.0765223 0.0576939 0.0255267 -0.0106649 0.033327 0.0319222 -0.0170918 0.107196 0.0330712 -0.00874761 0.0567917 0.0199374 -0.00762406 0.011796 0.0217059 -0.0275738 0.0618855 0.0236182 -0.0195253 0.0211233 0.028254 -0.0604392 0.0810072 0.024108 -0.0464685 0.0230658 0.00167857 -0.00981759 0.00843909 0.00600126 -0.0249107 0.0144892 0.0044959 -0.0131226 0.0044959 0.0104556 -0.0147022 0.0104556 0.00843912 -0.00981754 0.00167863 0.0144893 -0.0249107 0.00600126 0.0345185 -0.216717 0.0810381 0.0113097 -0.211503 0.0903169 0.0178821 -0.148621 0.0227528 0.0226464 -0.114141 0.0270074 -0.00217805 -0.23534 0.0746172 -0.00253825 -0.26752 0.0293646 -0.000848746 -0.166784 0.0234482 0.00878323 -0.166778 0.0226135 0.028082 -0.240402 0.0662866 0.00230407 -0.268213 0.0283041 0.01346 -0.166854 0.0219121 0.0191177 -0.237296 0.0712961 0.0087196 -0.235734 0.0742756 0.00564046 -0.254827 0.0521502 0.0374335 -0.247709 0.0992606 0.00752701 -0.226002 0.0877059 -0.00304692 -0.236543 0.114059 -0.00387971 -0.22367 0.0886898 -0.00321474 -0.282278 0.00361517 -0.00387914 -0.233513 0.00427761 -0.00298734 -0.260281 0.0827852 -0.00307815 -0.276537 0.0447984 -0.00334954 -0.262493 0.0634987 0.0181384 -0.264811 0.0776296 0.00273005 -0.277596 0.0444469 0.00412265 -0.264064 0.0626658 0.0256649 -0.241686 0.107338 0.0118824 -0.237971 0.112308 0.0112845 -0.244474 0.114762 0.00753824 -0.261535 0.0815644 0.0420313 -0.160787 0.0925446 -0.00307026 0.0264744 0.297333 -0.00286144 -0.0125386 0.325197 -0.00347557 -0.0922504 0.197994 0.0493239 -0.0999425 0.190486 -0.0023137 -0.207767 0.137019 -0.00308397 -0.126542 0.250033 -0.00152633 -0.150248 0.151615 0.0381782 -0.154816 0.145504 0.0458016 -0.2199 0.119544 0.028849 -0.132303 0.243449 0.0546029 -0.161202 0.137292 0.0319228 -0.213772 0.128417 0.0151979 -0.20962 0.134625 0.0207472 -0.185115 0.184382 -0.00648664 -0.0797177 0.297571 -0.00514585 -0.155265 0.127228 -0.00306293 -0.21427 0.159659 -0.00382539 -0.165124 0.218388 -0.00360787 -0.199117 0.164159 0.0354869 -0.223877 0.147702 0.0243711 -0.169096 0.212753 0.0166755 -0.20224 0.160069 0.0166192 -0.216919 0.156426 0.0347284 -0.244487 0.0603135 0.0125604 -0.274013 0.0240099 0.0177365 -0.16599 0.0187927 0.0211328 -0.165738 0.0143937 -0.00178821 -0.276322 0.00382576 -0.00234135 -0.273542 0.00401436 -0.00124237 -0.185128 0.00252244 0.00906474 -0.17957 0.0162821 0.0199141 -0.259332 0.0469409 0.00974677 -0.271413 0.0251278 0.00648731 -0.269662 0.026702 -0.00155691 -0.290033 0.00325544 -0.00380505 -0.235923 0.00412788 -0.00204506 -0.285983 0.00321434 -0.00272449 -0.282898 0.00276026 -0.00305376 -0.271315 0.00235123 0.0264846 -0.270172 0.0722211 0.0134011 -0.285047 0.0396317 0.0120518 -0.269472 0.0590891 0.00839086 -0.280545 0.0423638 0.0390898 -0.249347 0.0464833 0.00302603 -0.305927 0.00538297 0.00408659 -0.263321 0.0122268 0.000274061 -0.318041 0.00213726 0.0452775 -0.301104 0.0566538 0.000185948 -0.296049 0.00564448 0.00201565 -0.274311 0.00657939 0.00212002 -0.305942 0.00274695 0.0372496 -0.288203 0.0489669 0.0453616 -0.254712 0.0897776 0.0314937 -0.26638 0.0643961 0.0525013 -0.26959 0.0688147 0.0328006 -0.276416 0.0651061 0.0172726 -0.290113 0.0357907 0.0237172 -0.287333 0.0480732 0.0012169 -0.209811 0.0122566 -0.00361345 -0.1726 0.00928369 -0.00117325 -0.284283 0.00287862 -0.000908749 -0.258799 0.00515877 -0.00231661 -0.245324 0.00542102 0.0357282 -0.259511 0.0989932 0.0256905 -0.249086 0.0748648 0.0170865 -0.234911 0.0826132 0.0180708 -0.277571 0.0548399 0.135395 -0.107782 0.148708 0.136441 -0.0576312 0.197896 0.140732 -0.133409 0.153495 0.140982 -0.136902 0.204865 0.131353 -0.0468746 0.231327 0.132005 -0.105351 0.237663 0.0997465 -0.150619 0.127233 0.0983402 -0.163366 0.108827 0.0970972 -0.131401 0.104312 0.145656 -0.105151 0.179058 0.142923 -0.0770436 0.204619 0.146415 -0.105638 0.209381 0.0856076 -0.123433 0.163755 0.0557811 -0.227597 0.108961 0.0946031 -0.186088 0.185439 0.0664067 -0.169376 0.125112 0.0766001 -0.187421 0.0980588 0.10315 -0.00746921 0.24295 0.0365672 0.0249882 0.270488 0.109878 -0.017309 0.255064 0.0418814 -0.0198502 0.317718 0.0703535 -0.112706 0.178579 0.0691703 -0.0830725 0.167301 0.0769503 0.00751991 0.276345 0.0377127 0.0209446 0.290638 0.0386685 0.00579247 0.31004 0.106445 -0.0964182 0.261695 0.0419467 -0.0459524 0.312905 0.0700201 -0.144118 0.181558 0.114481 -0.0414444 0.267619 0.113626 -0.0692611 0.269945 0.083176 -0.0399484 0.299484 0.0603907 -0.203897 0.161068 0.0800379 -0.161863 0.209451 0.0583694 -0.143933 0.22814 0.0940892 -0.132187 0.242456 0.0112853 -0.159843 0.126516 0.070568 -0.103759 0.273038 0.0352604 -0.0847488 0.294013 0.0266427 -0.128845 0.228044 0.0497404 -0.233801 0.135378 0.0674276 -0.197704 0.180272 0.0360745 -0.211725 0.149913 0.0493041 -0.179896 0.200602 0.129198 -0.157693 0.129197 0.12201 -0.217422 0.122009 0.124296 -0.228843 0.134117 0.129501 -0.169448 0.192728 0.0962888 -0.193874 0.108361 0.0915161 -0.1698 0.0925268 0.142304 -0.164062 0.153426 0.135779 -0.196245 0.146187 0.14112 -0.167125 0.175226 0.0792294 -0.254989 0.0918192 0.0630357 -0.244204 0.0831473 0.0906984 -0.276153 0.0906977 0.0358924 -0.313109 0.0358916 0.10291 -0.258274 0.112337 0.0461379 -0.252549 0.074095 0.0643406 -0.282864 0.0777122 0.0583074 -0.282986 0.0633968 0.0741583 -0.282214 0.0827049 0.0402774 -0.299343 0.0463404 0.0448457 -0.277808 0.0592396 0.109097 -0.169201 0.200591 0.0447104 -0.224995 0.0897077 0.06706 -0.27452 0.0914704 0.10996 -0.232964 0.138557 0.111896 -0.201514 0.168443 0.0829974 -0.229455 0.126966 0.0594502 -0.246297 0.121783 0.0798345 -0.21731 0.159289 0.0591734 -0.245683 0.117115 0.0703219 -0.169835 0.1864 0.0370295 -0.197888 0.105481 0.026817 -0.173721 0.117297 0.0489218 -0.22732 0.135777 -0.00944943 -0.269639 0.0262348 -0.0175964 -0.237722 0.111586 -0.0295896 -0.254272 0.0697625 -0.00335208 -0.283505 0.0022303 -0.00462899 -0.261348 0.000153896 -0.00570221 -0.172361 0.00668469 -0.00665659 -0.21366 0.00104641 -0.00394927 -0.272042 0.00189241 -0.00421408 -0.236525 0.00282199 -0.00475714 -0.247018 0.00256398 -0.0174446 -0.245567 0.115073 -0.0141528 -0.227824 0.0860832 -0.0234814 -0.238992 0.079664 -0.0129291 -0.261808 0.0803692 -0.00823624 -0.2783 0.0435881 -0.0177448 -0.271363 0.0581013 -0.0111211 -0.265017 0.0619705 -0.00359755 -0.291863 0.00132071 -0.0175852 -0.285821 0.0380771 -0.0407324 -0.249533 0.0974079 -0.0421281 0.026425 0.270785 -0.106105 -0.00654558 0.24156 -0.0458212 0.0206416 0.295137 -0.116879 -0.0674086 0.276423 -0.135997 -0.0479573 0.235902 -0.137763 -0.101104 0.244587 -0.0550364 -0.101433 0.187921 -0.0309473 -0.0941867 0.195964 -0.0290769 -0.0703077 0.183597 -0.0830795 0.00398154 0.2815 -0.113549 -0.0202698 0.260518 -0.117766 -0.0397703 0.273963 -0.0450254 -0.0497995 0.311702 -0.110978 -0.10094 0.265035 -0.0315733 -0.122123 0.201985 -0.0487755 0.00583651 0.313781 -0.0473983 -0.0183264 0.319568 -0.0864822 -0.0378748 0.301424 -0.0636781 -0.148663 0.228293 -0.0362674 -0.132371 0.24435 -0.0433216 -0.0882801 0.281309 -0.0423914 -0.203451 0.0922153 -0.0332638 -0.129473 0.215768 -0.0209583 -0.160791 0.119729 -0.0336978 -0.17888 0.10831 -0.0238064 -0.216821 0.157243 -0.0311462 -0.169464 0.212997 -0.040874 -0.215529 0.147651 -0.0233857 -0.203875 0.157857 -0.109763 -0.173346 0.196215 -0.046533 -0.231896 0.0759338 -0.0716971 -0.202368 0.177214 -0.0743829 -0.1095 0.258049 -0.0965924 -0.139728 0.228918 -0.0736733 -0.175768 0.171316 -0.0528459 -0.232918 0.13012 -0.0546174 -0.18301 0.197939 -0.0627235 -0.250606 0.120832 -0.0467457 -0.287216 0.0513384 -0.00955407 -0.254124 -0.0530076 -0.0154084 -0.285189 -0.0367285 -0.0292424 -0.175257 -0.209331 -0.00281913 -0.275954 -0.0422812 -0.00333912 -0.170221 -0.215463 -0.00341953 -0.157764 -0.110682 -0.00516717 -0.0905259 -0.280656 -0.00328121 -0.263869 -0.0601232 -0.0033061 -0.225418 -0.0827995 -0.00342054 -0.203063 -0.157271 -0.0166161 -0.270374 -0.0563724 -0.0133951 -0.229189 -0.0798157 -0.0220656 -0.205958 -0.15444 -0.01223 -0.279765 -0.0399339 -0.00806624 -0.276797 -0.0411162 -0.0171594 -0.24766 -0.113029 -0.0106209 -0.265237 -0.0589098 -0.0036059 -0.239656 -0.114826 -0.0180186 -0.240537 -0.112935 -0.0394905 -0.249802 -0.10018 -0.0360864 -0.300455 -0.0400187 -0.111516 -0.209014 -0.164469 -0.0398442 -0.230553 -0.0659381 -0.107525 -0.179196 -0.190901 -0.0246526 -0.307991 -0.0323904 -0.0236868 -0.314406 -0.0235383 -0.0388314 -0.279536 -0.0477899 -0.0404627 -0.256417 -0.0553779 -0.0809342 -0.237559 -0.115883 -0.0587416 -0.249419 -0.111103 -0.0311865 -0.267751 -0.0585495 -0.0385137 -0.202796 -0.0798756 -0.0404805 -0.0965878 -0.271999 -0.0310401 -0.179771 -0.094547 -0.0190314 -0.163349 -0.107193 -0.0307274 -0.134652 -0.20306 -0.0217009 -0.278019 -0.0527176 -0.0300617 -0.25182 -0.067127 -0.0397938 -0.216243 -0.143889 -0.0225685 -0.238597 -0.0752118 -0.111955 -0.109072 -0.263826 -0.0475555 -0.0613935 -0.311629 -0.0710048 -0.2038 -0.17467 -0.0715483 -0.178685 -0.160667 -0.0954309 -0.14515 -0.221076 -0.0725217 -0.116149 -0.250871 -0.0533012 -0.184984 -0.196083 -0.0527823 -0.231049 -0.129508 -0.0659488 -0.206362 -0.162997 -0.0505853 -0.00591343 -0.319878 -0.0309592 -0.314527 -0.03096 -0.0886428 -0.279846 -0.0886434 -0.12342 -0.231183 -0.136165 -0.134131 -0.175347 -0.197513 -0.0472245 -0.300769 -0.0520063 -0.0209482 -0.314323 -0.0215536 -0.0712412 -0.285633 -0.0789822 -0.100558 -0.261725 -0.111004 -0.108739 -0.23709 -0.136758 0.00210625 -0.277666 -0.0427982 0.0636775 -0.207544 -0.178266 0.0103867 -0.163225 -0.107367 0.0873374 -0.147419 -0.231252 0.0370184 -0.233814 -0.0802842 0.101711 -0.181098 -0.198834 0.0212167 -0.180568 -0.0997416 0.0309212 -0.205003 -0.0919042 0.0626723 -0.182249 -0.170653 0.00961275 -0.272227 -0.0560425 0.0227711 -0.254466 -0.0696957 0.046393 -0.235841 -0.131718 0.00352599 -0.265743 -0.0597391 0.00636496 -0.229713 -0.0804492 0.0319205 -0.219149 -0.144596 0.0154093 -0.239963 -0.0761571 0.0205949 -0.292194 -0.0486833 0.0103328 -0.286765 -0.037716 0.0329305 -0.249924 -0.101347 0.103799 -0.244482 -0.139365 0.0373817 -0.0619944 -0.314709 0.101719 -0.109352 -0.267426 0.0234244 -0.137196 -0.203662 0.0321799 -0.0993057 -0.276113 0.0632634 -0.11976 -0.257169 0.00992623 -0.248225 -0.113256 0.0229688 -0.175885 -0.210276 0.045772 -0.188268 -0.19819 0.015709 -0.20725 -0.154086 0.0211698 -0.188362 -0.188261 0.0106085 -0.23942 -0.113081 0.109413 -0.0466837 -0.279335 0.106666 0.105865 0.141447 0.0391233 0.131665 0.155555 0.0854879 0.0554034 0.160821 0.0516206 0.0128587 0.0955085 -0.00362622 0.111698 0.316121 -0.00216886 0.338368 0.35508 -0.00388279 0.0775138 0.24167 0.0714246 0.0661685 0.231646 -0.00282992 0.206476 0.192638 -0.002261 0.377221 0.287464 -0.00295412 0.105379 0.211522 0.0719959 0.0939125 0.2037 0.129031 0.157909 0.170324 0.0698094 0.361969 0.280142 0.10184 0.0746712 0.193551 0.090099 0.184542 0.181288 0.0443923 0.200271 0.189134 0.0538239 0.277147 0.227276 0.141251 0.195082 0.14125 0.0958301 0.607424 0.0958294 -0.00434681 0.252402 0.160769 -0.00460784 0.630527 0.0957127 -0.00989109 0.654883 0.314495 -0.0170317 0.881024 0.126343 -0.00313477 0.354161 0.198117 -0.00253169 0.484099 0.246734 -0.00196215 0.57068 0.185278 0.123726 0.305414 0.18401 0.0814808 0.461635 0.23993 0.0917955 0.548456 0.181296 0.098926 0.226656 0.150849 0.0492694 0.245905 0.1575 0.0667099 0.399046 0.142004 0.0617371 0.34098 0.194096 0.062215 0.0310912 0.081302 -0.00243393 0.165835 0.129281 -0.00230769 0.206787 0.0454914 -0.00081335 0.0447403 0.0731219 0.0487971 0.0425411 0.0704541 0.115366 0.132809 0.115365 0.0460656 0.202456 0.0460652 0.0667944 0.035441 0.0667942 0.0821096 0.152704 0.122852 0.0416541 0.162302 0.127347 0.0449374 0.187864 0.0901013 -0.00270554 0.326334 -0.002706 -0.00539679 0.652297 -0.00539744 -0.00321963 0.290533 0.114969 -0.00314211 0.317297 0.0580499 -0.00253833 0.453132 0.0749036 0.106773 0.261821 0.106773 0.0570474 0.309322 0.0570469 0.0723843 0.440116 0.0723837 0.053627 0.285114 0.112226 0.162526 -0.0806274 0.162526 0.226795 0.096683 0.226794 0.151533 0.0187425 0.250113 0.213316 0.159314 0.25825 0.142187 -0.024461 0.161716 0.140181 -0.0477183 0.140181 0.118802 -0.062614 0.128466 0.167858 -0.0502647 0.191496 0.165156 -0.0171065 0.22028 0.197656 0.0368357 0.227246 0.12211 0.0275185 0.200385 0.156933 0.124233 0.156933 0.212878 0.203603 0.212878 0.12235 0.0561462 0.17812 0.142571 0.00856424 0.142571 0.126481 0.0521965 0.27636 0.0701473 0.323726 0.345998 0.100757 0.0476266 0.216493 0.0854391 0.00778967 0.199143 0.0886253 0.0812448 0.298666 0.0431703 0.101445 0.311181 0.0530507 0.203748 0.335121 0.213405 0.335933 0.291201 0.0891589 0.461989 0.349854 0.118127 0.0949098 0.220136 0.154383 0.132659 0.288339 0.183681 0.229839 0.293771 0.136166 0.288427 0.321953 0.154455 0.208131 0.199808 0.182687 0.269781 0.240904 0.135439 0.322591 0.263461 0.254786 0.473389 0.254785 0.124092 0.865153 0.124091 0.196705 0.575729 0.281746 0.106329 0.64181 0.307131 0.121506 0.775876 0.234418 0.170726 0.256633 0.170725 0.20494 0.344597 0.204939 0.172725 0.486671 0.172725 0.157334 0.413881 0.225327 0.148708 -0.107782 0.135395 0.197896 -0.0576312 0.136441 0.250113 0.0187426 0.151533 0.258251 0.159314 0.213315 0.161716 -0.024461 0.142186 0.128466 -0.062614 0.118801 0.191497 -0.0502647 0.167858 0.220281 -0.0171064 0.165156 0.227247 0.0368357 0.197655 0.200386 0.0275185 0.12211 0.17812 0.0561461 0.122349 0.24295 -0.00746914 0.10315 0.270488 0.0249883 0.0365665 0.27636 0.0521965 0.12648 0.345998 0.323726 0.0701466 0.316122 0.111698 -0.00362685 0.35508 0.338368 -0.00216957 0.231647 0.0661685 0.0714241 0.216493 0.0476266 0.100756 0.199144 0.00778968 0.0854386 0.298667 0.0812448 0.0886247 0.311181 0.101445 0.0431696 0.335122 0.203748 0.05305 0.291202 0.335933 0.213404 0.349855 0.461989 0.0891582 0.220137 0.0949098 0.118126 0.28834 0.132659 0.154382 0.293772 0.229839 0.183681 0.321954 0.288427 0.136165 0.170324 0.157909 0.12903 0.280142 0.361969 0.0698087 0.193551 0.0746712 0.101839 0.199808 0.208131 0.154454 0.240905 0.269781 0.182686 0.263461 0.322591 0.135438 0.314495 0.654884 -0.00989193 0.126343 0.881024 -0.0170325 0.281747 0.575729 0.196705 0.307132 0.64181 0.106328 0.234419 0.775877 0.121505 0.18401 0.305414 0.123725 0.239931 0.461635 0.0814801 0.181297 0.548456 0.0917947 0.225328 0.413881 0.157333 0.141447 0.105865 0.106666 0.155556 0.131665 0.0391229 0.0813022 0.0310911 0.0622148 0.0955086 0.0128587 0.0516204 0.129281 0.165835 -0.00243433 0.0454918 0.206787 -0.00230812 0.0731221 0.0447403 -0.000813518 0.0704543 0.0425411 0.0487968 0.122853 0.152704 0.0821092 0.127348 0.162302 0.0416536 0.0901018 0.187864 0.0449369 0.16077 0.252402 -0.00434736 0.0957133 0.630527 -0.00460854 0.11497 0.290533 -0.00322017 0.0580504 0.317297 -0.00314265 0.0749042 0.453132 -0.00253892 0.150849 0.226657 0.0989255 0.1575 0.245905 0.0492688 0.142005 0.399046 0.0667092 0.112226 0.285114 0.0536264 0.160822 0.0554034 0.0854875 0.241671 0.0775138 -0.0038833 0.192639 0.206476 -0.00283038 0.287464 0.377221 -0.0022617 0.211523 0.105379 -0.00295455 0.2037 0.0939125 0.0719954 0.181288 0.184542 0.0900985 0.189135 0.200271 0.0443917 0.227277 0.277147 0.0538232 0.198118 0.354161 -0.0031354 0.246735 0.484099 -0.00253246 0.185279 0.57068 -0.00196288 0.194097 0.340981 0.0617364 -0.0530281 0.106816 0.310042 -0.189552 0.235646 0.301882 -0.157196 0.0269646 0.247186 -0.223724 0.175861 0.268027 -0.0768256 0.0651829 0.22935 -0.043169 0.0773315 0.239701 -0.0352397 0.0263846 0.21467 -0.0954623 0.0876736 0.294886 -0.130963 0.0591194 0.27299 -0.158922 0.14103 0.294888 -0.0870239 0.456198 0.344354 -0.220891 0.342677 0.290947 -0.0520936 0.140623 0.249194 -0.0649738 0.20806 0.337061 -0.0758156 0.326546 0.349954 -0.139072 0.287756 0.33154 -0.140047 0.326763 0.263501 -0.0780189 0.367308 0.281171 -0.0586411 0.248454 0.158257 -0.249693 0.459819 0.0768867 -0.10873 0.605549 0.304582 -0.312399 0.597542 0.0955705 -0.138648 0.840833 -0.0120495 -0.318695 0.621034 -0.00580862 -0.119412 0.731432 0.227918 -0.135533 0.817441 0.117763 -0.23911 0.72243 0.107856 -0.076363 0.404095 0.14187 -0.0986044 0.606843 0.0927063 -0.187415 0.549838 0.0844913 -0.0738448 0.350527 0.196126 -0.0865823 0.469979 0.244675 -0.176514 0.497023 0.168496 -0.0920276 0.549926 0.177706 -0.296283 0.343234 0.218635 -0.346941 0.458244 0.0829513 -0.21208 0.350077 0.206874 -0.195953 0.533313 0.286573 -0.258101 0.443958 0.254078 -0.291792 0.536102 0.18841 -0.235712 0.416067 0.150703 -0.160716 0.418797 0.228999 -0.21008 0.214979 0.154524 -0.14365 0.19155 0.140604 -0.343861 0.207265 0.0608847 -0.0946936 0.183177 0.0460588 -0.0645052 0.316483 -0.00254185 -0.256082 0.47911 -0.00539137 -0.0800291 0.453351 -0.00287714 -0.103039 0.624401 -0.00701769 -0.191372 0.566915 -0.00661241 -0.0620299 0.282679 0.112678 -0.0635929 0.307848 0.0568811 -0.14862 0.402419 0.0689603 -0.0794252 0.442152 0.0725504 -0.165496 0.252329 -0.00122088 -0.16205 0.248673 0.051391 0.153495 -0.133409 0.140732 0.204865 -0.136902 0.140981 0.134117 -0.228843 0.124295 0.192729 -0.169448 0.1295 0.108361 -0.193874 0.0962884 0.108828 -0.163366 0.0983398 0.0925272 -0.1698 0.0915157 0.153427 -0.164062 0.142303 0.146188 -0.196245 0.135779 0.175227 -0.167125 0.141119 0.0918197 -0.254989 0.0792288 0.108961 -0.227597 0.0557805 0.18544 -0.186088 0.0946024 0.0831477 -0.244204 0.0630352 0.0980591 -0.187421 0.0765996 0.112337 -0.258274 0.102909 0.0740958 -0.252549 0.046137 0.00538377 -0.305927 0.00302521 0.0122276 -0.263321 0.00408566 0.0566544 -0.301104 0.0452768 0.0777127 -0.282864 0.06434 0.0633974 -0.282986 0.0583069 0.0827057 -0.282214 0.0741575 0.0463412 -0.299343 0.0402765 0.0592404 -0.277808 0.0448448 0.200592 -0.169201 0.109096 0.0897085 -0.224995 0.0447094 0.0914709 -0.27452 0.0670593 0.138558 -0.232964 0.109959 0.168443 -0.201514 0.111896 0.126966 -0.229455 0.0829965 0.0897781 -0.254712 0.045361 0.0643969 -0.26638 0.0314929 0.0688152 -0.26959 0.0525008 0.121784 -0.246297 0.0594495 0.15929 -0.21731 0.0798338 0.117115 -0.245682 0.0591726 0.0992611 -0.247709 0.0374329 0.0877067 -0.226002 0.00752608 0.242457 -0.132187 0.0940884 0.126517 -0.159843 0.0112843 0.0122574 -0.209811 0.00121595 0.00928457 -0.1726 -0.00361446 0.186401 -0.169834 0.0703209 0.105482 -0.197887 0.0370286 0.117298 -0.17372 0.026816 0.0989938 -0.259511 0.0357274 0.0748655 -0.249086 0.0256897 0.0826139 -0.23491 0.0170856 0.135379 -0.233801 0.0497396 0.180273 -0.197704 0.0674267 0.149914 -0.211724 0.0360736 0.135778 -0.22732 0.048921 0.231327 -0.0468746 0.131352 0.237664 -0.105351 0.132004 0.127234 -0.150619 0.0997461 0.104312 -0.131401 0.0970969 0.179058 -0.105151 0.145656 0.20462 -0.0770436 0.142922 0.209382 -0.105638 0.146414 0.163755 -0.123433 0.0856071 0.125113 -0.169376 0.0664062 0.255065 -0.0173089 0.109877 0.317719 -0.0198502 0.0418806 0.297333 0.0264745 -0.00307095 0.325198 -0.0125386 -0.00286225 0.190486 -0.0999424 0.0493233 0.178579 -0.112706 0.070353 0.167301 -0.0830725 0.0691698 0.276346 0.00751997 0.0769496 0.290639 0.0209447 0.037712 0.31004 0.00579252 0.0386678 0.261695 -0.0964182 0.106444 0.312906 -0.0459524 0.0419458 0.181559 -0.144117 0.0700195 0.26762 -0.0414443 0.114481 0.269946 -0.0692611 0.113625 0.299484 -0.0399484 0.0831752 0.119545 -0.2199 0.045801 0.24345 -0.132303 0.0288482 0.137293 -0.161202 0.0546024 0.161068 -0.203897 0.06039 0.209451 -0.161863 0.0800372 0.228141 -0.143933 0.0583686 0.297571 -0.0797176 -0.00648759 0.127229 -0.155265 -0.00514688 0.273038 -0.103759 0.0705671 0.294014 -0.0847487 0.0352595 0.228045 -0.128845 0.0266417 0.147703 -0.223877 0.0354861 0.212754 -0.169096 0.0243703 0.160069 -0.20224 0.0166746 0.200603 -0.179896 0.0493032 0.0603139 -0.244487 0.034728 0.0240103 -0.274013 0.0125599 0.0464837 -0.249347 0.0390894 0.0143939 -0.165738 0.0211326 0.00213786 -0.318041 0.000273397 0.00564503 -0.296049 0.000185292 0.00658007 -0.274311 0.00201478 0.00274749 -0.305942 0.00211945 0.0489674 -0.288203 0.0372491 0.0651066 -0.276416 0.0328 0.0357912 -0.290113 0.017272 0.0480739 -0.287333 0.0237164 0.00325597 -0.290033 -0.00155763 0.00412867 -0.235923 -0.003806 0.00287927 -0.284283 -0.0011741 0.00515949 -0.258798 -0.000909689 0.00542178 -0.245324 -0.00231753 0.0722217 -0.270172 0.026484 0.0396322 -0.285047 0.0134004 0.0590897 -0.269472 0.0120509 0.0548405 -0.277571 0.0180701 0.0187928 -0.165989 0.0177363 0.00382623 -0.276322 -0.00178874 0.00401485 -0.273542 -0.00234194 0.00252267 -0.185128 -0.00124262 0.0162822 -0.17957 0.0090645 0.066287 -0.240402 0.0280815 0.0283045 -0.268213 0.00230353 0.0219123 -0.166854 0.0134597 0.0469413 -0.259332 0.0199135 0.0251283 -0.271413 0.00974624 0.0267025 -0.269662 0.00648677 0.00361576 -0.282278 -0.00321543 0.00427844 -0.233513 -0.00388012 0.00321498 -0.285983 -0.00204581 0.00276087 -0.282898 -0.00272519 0.00235194 -0.271315 -0.00305465 0.0776302 -0.264811 0.0181378 0.0444475 -0.277596 0.00272938 0.0626665 -0.264064 0.00412184 0.0423643 -0.280545 0.00839019 0.0810386 -0.216717 0.0345179 0.0903174 -0.211503 0.0113092 0.092545 -0.160787 0.0420309 0.0270076 -0.114141 0.0226462 0.197994 -0.0922503 -0.00347613 0.13702 -0.207767 -0.00231431 0.250034 -0.126542 -0.00308475 0.151615 -0.150248 -0.00152682 0.145504 -0.154816 0.0381776 0.128417 -0.213772 0.0319222 0.134625 -0.20962 0.0151972 0.184383 -0.185115 0.0207465 0.11406 -0.236543 -0.0030475 0.0886906 -0.22367 -0.00388061 0.159659 -0.21427 -0.00306361 0.218388 -0.165124 -0.00382622 0.164159 -0.199117 -0.00360874 0.107338 -0.241686 0.0256643 0.112309 -0.237971 0.0118818 0.114762 -0.244474 0.0112838 0.156426 -0.216919 0.0166184 0.022753 -0.148621 0.0178818 0.0746176 -0.23534 -0.00217856 0.0293651 -0.26752 -0.00253876 0.0234484 -0.166784 -0.000848984 0.0226137 -0.166778 0.00878297 0.0712965 -0.237296 0.0191172 0.0742761 -0.235734 0.0087191 0.0521506 -0.254827 0.00563999 0.0827858 -0.260281 -0.00298792 0.044799 -0.276537 -0.00307879 0.0634994 -0.262493 -0.00335031 0.081565 -0.261535 0.00753766 0.169274 -0.104197 0.169273 0.309474 0.12167 0.309473 0.160846 0.0116554 0.263907 0.32521 0.246345 0.39516 0.170313 -0.0469202 0.277564 0.331268 0.207438 0.421419 0.168331 -0.00212028 0.276898 0.17369 -0.0240364 0.289336 0.235995 0.0845959 0.361684 0.177868 -0.0965597 0.205907 0.178405 -0.0784183 0.243572 0.232303 0.00672344 0.291085 0.174211 -0.0688171 0.199387 0.173978 -0.0280776 0.232757 0.220601 0.0284255 0.266749 0.178602 -0.0504214 0.24049 0.135832 0.0538302 0.296327 0.102669 0.554233 0.5979 -0.000997739 0.122243 0.348473 -0.021514 0.572809 0.607091 -0.0061973 0.103237 0.413095 -0.0220794 0.510771 0.676378 -0.000545201 0.127738 0.378138 -0.00286246 0.117395 0.409297 -0.00849114 0.30035 0.536819 0.10695 0.0902045 0.343839 0.0578953 0.105883 0.397648 0.0779405 0.285833 0.530583 0.0988176 0.0874849 0.321814 0.0493571 0.112513 0.341126 0.0734077 0.282431 0.447645 0.055343 0.11861 0.370516 0.147492 0.0130944 0.3316 0.103579 0.482281 0.661829 0.112368 0.0635859 0.373022 0.0576388 0.0951901 0.402052 0.0810953 0.270085 0.547792 0.14499 0.0488297 0.315697 0.149814 0.0283517 0.332855 0.150811 0.237519 0.494815 0.112674 0.075729 0.373029 0.424165 0.538659 0.514708 0.138545 0.782975 0.616582 0.202934 0.14592 0.445954 0.300831 0.305978 0.522489 0.208653 0.411401 0.620971 0.18383 0.18098 0.374801 0.28314 0.377315 0.483504 0.200404 0.486128 0.556962 0.202767 0.170277 0.441796 0.138217 -0.0268785 0.305763 0.0560907 0.431409 0.274311 -0.0154539 0.0647272 0.390073 -0.003378 0.484934 0.291979 -0.0061181 -0.0630243 0.00995229 0.00339113 0.506694 0.00685259 -0.0142308 -0.00752757 0.323599 -0.00934143 -0.0529928 0.178646 -0.00731924 0.112968 0.218835 0.0798991 -0.0469387 0.289677 0.0208608 -0.0628811 0.175449 0.0343066 0.0926003 0.209447 0.101598 0.0228267 0.352013 0.0528326 0.056258 0.381628 0.0626926 0.157466 0.395325 0.039546 -0.0185364 0.313141 -0.0145309 0.786122 0.704607 0.0337681 1.14083 0.647241 -0.0147203 0.26099 0.510648 -0.0203022 0.49029 0.650469 -0.0118813 0.453354 0.502402 0.143159 0.190131 0.457831 0.101413 0.462558 0.636619 0.0768435 0.404224 0.487997 0.072153 0.238325 0.492589 0.35843 0.456714 0.464079 0.0958756 0.96676 0.632393 0.262985 0.592068 0.544565 0.131141 0.730725 0.658428 0.0795615 0.818967 0.632666 0.192038 0.102064 0.395976 0.270985 0.262274 0.479301 0.148847 0.294285 0.415623 0.190863 0.355868 0.553883 0.587714 0.989644 0.587713 0.20386 3.95683 0.203858 0.102835 1.84018 0.779881 0.0148082 4.11897 0.115509 -0.0149151 2.74474 -0.167281 -0.0668311 4.08946 0.0412032 0.276083 3.03562 0.906811 0.082799 2.6574 0.351612 0.0921432 3.5575 0.435244 0.725352 1.85207 0.681216 0.20269 2.45734 0.458005 0.239173 3.41962 0.491643 0.596906 1.34149 0.69305 0.256511 1.57317 0.682812 0.583535 3.93274 1.24594 0.323394 2.80849 0.825923 0.300814 0.296276 0.300814 0.406553 0.425959 0.406552 0.197221 0.0906434 0.28477 0.244314 0.192243 0.296427 0.281334 0.24792 0.33152 0.207824 -0.0190472 0.207824 0.250289 0.1096 0.250288 0.277361 0.13505 0.27736 0.209339 0.0333345 0.245198 -0.0114246 0.599512 0.460749 -0.0260701 0.890504 0.601715 -0.000155949 0.247132 0.3932 -0.00223445 0.413089 0.425896 -0.00788986 0.529642 0.502139 0.12571 0.196501 0.360018 0.0835988 0.393711 0.414152 0.0954538 0.515409 0.490484 0.0651944 0.234792 0.384771 0.262333 0.41651 0.371402 0.128971 0.855098 0.588446 0.201024 0.513527 0.424325 0.105659 0.578665 0.457839 0.123901 0.749392 0.534779 0.170048 0.149817 0.325735 0.210952 0.274671 0.342595 0.183015 0.457641 0.450827 0.160629 0.347631 0.386248 0.304383 0.543352 0.428032 0.368024 0.596287 0.477879 0.25922 0.768369 0.542431 0.243069 0.367655 0.402613 0.332984 0.582455 0.332983 0.287005 1.87006 0.287004 -0.0362229 0.832953 0.43266 0.021004 1.97159 0.29748 -0.0450522 1.20708 -0.045053 0.0405843 2.07919 0.0405833 -0.0440736 1.05471 0.314661 -0.051437 1.17076 0.159975 -0.0478951 1.40638 0.2126 0.287387 0.91447 0.287386 0.161952 1.13893 0.161951 0.203833 1.32962 0.203832 0.248081 0.722808 0.391122 0.130976 0.81068 0.426872 0.192764 1.22686 0.399253 0.149697 1.01904 0.308918 -0.0144256 1.37739 0.527678 0.221348 3.61202 0.381933 -0.0342082 1.02216 0.552189 -0.0328283 1.22417 0.587557 -0.0348149 1.47031 0.449295 0.295844 0.88034 0.487687 0.170906 1.18743 0.576309 0.194605 1.41598 0.430942 0.150814 0.969248 0.532679 0.462692 0.74909 0.462691 0.306479 3.43452 0.306478 0.333146 0.978523 0.493876 0.162948 1.2573 0.524559 0.171106 1.85114 0.443043 0.398089 0.709255 0.398088 0.445204 0.81535 0.445203 0.3744 1.19492 0.374399 0.314973 0.983855 0.51033 0.232458 3.40658 0.232457 -0.0711272 4.3118 -0.0711287 0.332409 2.97786 1.3069 0.205736 3.3659 0.461986 0.112392 4.03836 0.185089 0.90461 1.95503 0.904608 0.527672 3.43195 0.527671 0.39684 3.94453 0.396839 0.483815 2.75849 1.27071 0.152444 -0.197944 0.152443 0.319471 0.0895385 0.31947 0.164194 -0.156327 0.187434 0.169561 -0.104373 0.233877 0.223112 -0.0178433 0.29036 0.170807 -0.135075 0.170806 0.166442 -0.166277 0.166441 0.224633 -0.0683071 0.224632 0.175481 -0.125635 0.202167 0.129521 -0.22999 0.12952 0.121687 -0.0746164 0.121686 0.0062312 -0.286352 0.00623039 0.00188197 -0.0900494 0.00188103 0.00338574 -0.177026 0.0191395 0.00387948 0.00155446 -0.00270325 0.00862369 -0.255829 0.0100725 0.00823623 -0.219416 0.0132987 0.0119103 -0.159945 0.00215282 0.108655 -0.218593 0.122846 0.0654874 -0.202042 0.0907911 0.0884261 -0.139768 0.103568 0.0967669 -0.255893 0.096766 0.0536013 -0.275688 0.0536004 0.0812694 -0.19506 0.0812685 0.0624491 -0.243044 0.0713087 0.155519 -0.0865368 0.251968 0.121206 0.0124455 0.165808 0.120082 -0.12889 0.195475 0.0617813 -0.158364 0.113108 0.0879257 -0.0682892 0.132843 0.143625 -0.189542 0.164913 0.148993 -0.141222 0.204902 0.158037 -0.11038 0.202026 0.114503 -0.175608 0.158546 0.390429 0.33297 0.390428 0.167247 0.140208 0.167246 0.210729 0.0206977 0.329149 0.288169 0.14835 0.386239 0.218337 0.0621844 0.310102 0.193635 -0.132965 0.193634 0.292017 0.0386366 0.292016 0.227765 -0.0399581 0.227765 0.20439 -0.0615852 0.265436 -0.000899621 -0.13303 0.01597 0.0119547 0.434114 0.0107774 -0.00251528 -0.0973826 0.0144776 -0.0043065 -0.0729568 0.0100379 -0.00232732 0.0783869 -0.0072586 0.109943 -0.0881262 0.243676 0.0576728 -0.122027 0.137111 0.0681402 0.051562 0.198011 0.0412111 -0.0872249 0.161415 0.00347023 0.363105 0.0204823 0.0528758 1.14524 0.149939 0.000611915 -0.026809 0.000320617 0.00487684 0.128914 -0.000483241 0.0101002 0.247413 -0.00484893 0.161518 0.0300344 0.308518 0.119901 0.140121 0.20939 0.0943268 0.247023 0.248772 0.0854497 -0.0128198 0.164256 0.244898 0.394065 0.354299 0.146887 0.336575 0.228384 0.129385 0.545199 0.336613 0.201557 0.175973 0.363895 0.0647217 1.13742 0.0647209 -0.000144508 3.98313 -0.000145507 0.229172 2.09233 0.134673 0.0773907 2.53345 0.0139506 -0.0230366 3.52194 0.0867554 0.509608 1.13787 0.509607 0.234774 0.961249 0.234774 0.727551 2.91989 0.72755 0.508547 1.79759 0.442922 0.277565 -0.0469202 0.170312 0.42142 0.207438 0.331267 0.187435 -0.156327 0.164194 0.233878 -0.104373 0.16956 0.290361 -0.0178433 0.223112 0.205907 -0.0965597 0.177868 0.243573 -0.0784183 0.178405 0.291085 0.00672346 0.232302 0.202168 -0.125635 0.175481 0.0191404 -0.177026 0.00338477 -0.0027023 0.0015545 0.00387849 0.0100734 -0.255829 0.00862284 0.0132995 -0.219416 0.00823533 0.00215371 -0.159945 0.0119093 0.122847 -0.218593 0.108654 0.090792 -0.202042 0.0654865 0.103569 -0.139768 0.0884252 0.0713095 -0.243044 0.0624482 0.251969 -0.0865367 0.155518 0.165809 0.0124456 0.121205 0.195475 -0.12889 0.120081 0.113109 -0.158364 0.0617803 0.132844 -0.0682891 0.0879248 0.164914 -0.189542 0.143624 0.204903 -0.141221 0.148992 0.202027 -0.11038 0.158037 0.158546 -0.175608 0.114502 0.32915 0.0206977 0.210728 0.38624 0.14835 0.288168 0.310103 0.0621845 0.218336 0.265437 -0.0615852 0.204389 0.305764 -0.0268784 0.138216 0.274312 0.431409 0.0560896 0.0159708 -0.13303 -0.000900627 0.0107786 0.434115 0.0119535 0.00995331 -0.0630242 -0.0061192 0.00685393 0.506694 0.00338996 0.0144785 -0.0973825 -0.0025163 0.0100388 -0.0729567 -0.0043076 -0.00725757 0.078387 -0.00232849 0.289678 -0.0469386 0.0798981 0.17545 -0.062881 0.0208597 0.209447 0.0926004 0.0343055 0.243677 -0.0881261 0.109943 0.137112 -0.122026 0.0576718 0.198012 0.0515621 0.068139 0.161416 -0.0872247 0.0412101 0.0204833 0.363105 0.00346915 0.14994 1.14524 0.0528745 0.000321514 -0.0268089 0.000610849 -0.0004823 0.128914 0.00487577 -0.00484792 0.247413 0.0100991 0.308519 0.0300346 0.161517 0.209391 0.140121 0.1199 0.248773 0.247024 0.0943257 0.164257 -0.0128197 0.0854486 0.46408 0.456714 0.358429 0.632394 0.96676 0.0958747 0.3543 0.394065 0.244897 0.228385 0.336575 0.146886 0.336614 0.545199 0.129384 0.395977 0.102064 0.192037 0.479302 0.262274 0.270984 0.415624 0.294285 0.148846 0.363895 0.175973 0.201556 -0.16728 2.74474 -0.0149161 0.0412043 4.08946 -0.0668323 0.134674 2.09233 0.229171 0.0139519 2.53345 0.0773898 0.0867565 3.52194 -0.0230372 0.681217 1.85207 0.725351 0.458007 2.45734 0.202688 0.491644 3.41962 0.239172 0.442923 1.79759 0.508545 0.263908 0.0116555 0.160846 0.395161 0.246345 0.325209 0.284771 0.0906434 0.19722 0.296427 0.192243 0.244313 0.331521 0.24792 0.281333 0.199387 -0.0688171 0.174211 0.232758 -0.0280776 0.173977 0.26675 0.0284255 0.2206 0.245199 0.0333345 0.209338 0.296328 0.0538302 0.135831 0.597901 0.554234 0.102668 0.348474 0.122243 -0.000998458 0.607092 0.572809 -0.0215149 0.46075 0.599512 -0.0114255 0.601716 0.890504 -0.026071 0.393201 0.247132 -0.000156734 0.425897 0.413089 -0.00223525 0.50214 0.529642 -0.00789074 0.360018 0.196501 0.125709 0.414152 0.393711 0.083598 0.490484 0.515409 0.0954529 0.321815 0.0874849 0.0988168 0.341127 0.112513 0.0493564 0.447646 0.282431 0.0734069 0.384772 0.234792 0.0651936 0.371403 0.41651 0.262332 0.588447 0.855098 0.12897 0.424326 0.513527 0.201023 0.45784 0.578665 0.105658 0.53478 0.749392 0.1239 0.325736 0.149817 0.170047 0.342596 0.274671 0.210952 0.450828 0.457641 0.183014 0.386249 0.347631 0.160628 0.514709 0.538659 0.424164 0.616583 0.782975 0.138544 0.428033 0.543352 0.304382 0.47788 0.596287 0.368023 0.542432 0.768369 0.259219 0.374802 0.18098 0.183829 0.483505 0.377315 0.283139 0.556963 0.486128 0.200404 0.402614 0.367655 0.243069 0.43266 0.832954 -0.0362238 0.297481 1.97159 0.0210029 0.314662 1.05471 -0.0440745 0.159976 1.17076 -0.0514378 0.212601 1.40638 -0.047896 0.391123 0.722808 0.24808 0.426873 0.81068 0.130975 0.399254 1.22686 0.192763 0.308919 1.01904 0.149696 0.527679 1.37739 -0.0144264 0.381934 3.61203 0.221347 0.552189 1.02216 -0.0342091 0.587558 1.22417 -0.0328291 0.449296 1.47031 -0.0348158 0.487688 0.88034 0.295843 0.576309 1.18743 0.170905 0.430943 1.41598 0.194604 0.53268 0.969248 0.150813 0.493877 0.978523 0.333145 0.52456 1.2573 0.162947 0.443044 1.85114 0.171105 0.510331 0.983855 0.314972 0.779882 1.84018 0.102835 0.11551 4.11896 0.0148069 1.3069 2.97786 0.332408 0.461987 3.3659 0.205734 0.185091 4.03836 0.11239 0.693051 1.34149 0.596905 0.682813 1.57317 0.25651 1.24595 3.93275 0.583534 1.27071 2.75849 0.483814 0.276899 -0.00212029 0.16833 0.289337 -0.0240363 0.17369 0.361685 0.0845959 0.235994 0.240491 -0.0504214 0.178601 0.413096 0.103237 -0.00619821 0.676379 0.510771 -0.0220803 0.378139 0.127738 -0.000546014 0.409297 0.117395 -0.00286332 0.536819 0.30035 -0.00849204 0.343839 0.0902045 0.106949 0.397649 0.105883 0.0578944 0.530584 0.285833 0.0779395 0.370517 0.11861 0.0553422 0.331601 0.0130945 0.147491 0.66183 0.482281 0.103578 0.373022 0.0635859 0.112367 0.402053 0.0951902 0.0576378 0.547793 0.270085 0.0810943 0.315698 0.0488298 0.14499 0.332856 0.0283517 0.149813 0.494816 0.237519 0.15081 0.37303 0.0757291 0.112674 0.445955 0.14592 0.202933 0.522489 0.305978 0.30083 0.620972 0.411401 0.208652 0.441797 0.170277 0.202766 0.390074 0.0647273 -0.0154549 0.29198 0.484934 -0.00337904 0.3236 -0.00752747 -0.0142319 0.178647 -0.0529927 -0.0093425 0.218836 0.112969 -0.00732034 0.352014 0.0228268 0.101597 0.381629 0.0562581 0.0528316 0.395326 0.157466 0.0626915 0.313142 -0.0185362 0.0395449 0.704608 0.786122 -0.0145317 0.647242 1.14083 0.033767 0.510649 0.26099 -0.0147214 0.65047 0.49029 -0.0203031 0.502403 0.453354 -0.0118823 0.457832 0.190131 0.143158 0.63662 0.462558 0.101412 0.487998 0.404224 0.0768425 0.49259 0.238325 0.072152 0.544566 0.592068 0.262984 0.658429 0.730724 0.13114 0.632667 0.818967 0.0795604 0.553884 0.355868 0.190862 0.906812 3.03562 0.276082 0.351613 2.6574 0.0827976 0.435245 3.5575 0.0921419 0.825924 2.80849 0.323393 -0.0546106 0.1157 0.344207 -0.294633 0.331131 0.440578 -0.168349 0.0172356 0.26851 -0.301096 0.206173 0.358453 -0.172616 -0.0583555 0.280211 -0.309869 0.190399 0.362361 -0.176903 0.00104183 0.284983 -0.179287 -0.0241814 0.289843 -0.233333 0.0795108 0.328695 -0.110516 0.0898835 0.356753 -0.153896 0.0276389 0.335256 -0.208973 0.156332 0.390942 -0.10463 0.09436 0.328512 -0.142273 0.058579 0.300892 -0.194165 0.165273 0.36629 -0.151707 0.0488772 0.323837 -0.18131 -0.0273946 0.233146 -0.247763 -0.0831719 0.17934 -0.167265 -0.169734 0.163417 -0.169847 -0.107532 0.166881 -0.177754 -0.113928 0.230646 -0.236649 -0.118362 0.168931 -0.154049 -0.205283 0.147685 -0.144374 -0.169746 0.175157 -0.186293 -0.0508647 0.242206 -0.186997 -0.0793965 0.243749 -0.22766 -0.0711156 0.221838 -0.373122 0.181304 0.291637 -0.285338 -0.0637304 0.162566 -0.231162 -0.0330252 0.26311 -0.293681 0.0659908 0.282008 -0.271132 -0.0361226 0.22217 -0.232463 0.0230127 0.267025 -0.296328 0.0948801 0.289956 -0.278903 -0.00215617 0.230218 -0.238214 -0.000350259 0.272546 -0.152329 -0.15262 0.196841 -0.0824066 -0.215796 0.0543939 -0.0540155 -0.287855 0.0455512 -0.133302 -0.237811 0.123447 -0.198849 -0.180716 0.101137 -0.0787527 -0.233409 0.0356945 -0.138995 -0.244502 0.103647 -0.189496 -0.142511 0.180129 -0.204502 -0.15517 0.144165 -0.150613 -0.190455 0.103707 -0.350649 0.147587 0.263002 -0.101066 -0.171131 0.0517814 -0.296428 0.00144402 0.190826 -0.247091 -0.105136 0.139426 -0.187532 -0.142129 0.102315 -0.204295 -0.0745413 0.230945 -0.271551 0.0268148 0.255894 -0.18235 -0.117585 0.14365 -0.239289 -0.0762201 0.192459 -0.447572 0.270534 0.260763 -0.145904 -0.057622 0.0183142 -0.228045 -0.148507 0.0854376 -0.10422 -0.163871 0.0104925 0.00268158 -0.213281 -0.00836307 0.010909 -0.172886 -0.00604545 -0.168211 -0.183475 0.0618113 -0.0891006 -0.20638 0.0294222 -0.0989285 -0.18174 0.0205341 -0.282333 0.033635 0.128759 -0.118273 -0.125474 0.0423529 -0.135705 -0.0845428 0.0322541 -0.358109 0.078208 0.17503 -0.290199 -0.0554935 0.121534 -0.250992 -0.0537165 0.0663334 -0.217758 -0.0947708 0.0879849 -0.299771 0.306576 0.293513 -0.384855 0.359613 0.375876 -0.207198 0.100126 0.293152 -0.251717 0.197647 0.303766 -0.279586 0.208789 0.337346 -0.128961 0.208761 0.365053 -0.216119 0.278644 0.347897 -0.249542 0.312318 0.392795 -0.17727 0.159029 0.332315 -0.235664 -0.0312768 0.175061 -0.309066 0.195142 0.245152 -0.295393 -0.02915 0.17015 -0.271495 0.0112459 0.163551 -0.232761 0.0398535 0.196799 -0.218719 0.0360078 0.250644 -0.262646 0.112772 0.256216 -0.273401 0.0228893 0.226044 -0.344584 0.208825 0.272299 -0.367419 0.201883 0.29091 -0.338638 0.0764758 0.224133 -0.286085 0.110464 0.278691 -0.353839 0.274332 0.211206 -0.40061 0.0923866 0.0546739 -0.352714 0.112595 0.0500672 -0.306687 0.0534283 0.138008 -0.268442 -0.108807 0.100506 -0.314536 -0.0618603 0.0355851 -0.279144 -0.0471384 0.108853 -0.375247 0.162587 0.189198 -0.339261 0.0206364 0.147602 -0.37635 0.0628982 0.107426 -0.470069 0.301521 0.282841 -0.398665 0.0647985 0.0507977 -0.396151 0.121526 0.196677 -0.330051 -0.0129388 0.141051 -0.37392 0.0337384 0.104745 -0.403363 0.30789 0.238655 -0.449722 0.322966 0.267001 -0.449441 0.220331 0.145804 -0.397145 0.151572 0.197999 -0.274725 -0.0939104 -0.00527822 -0.104119 -0.157924 -0.00374799 -0.253287 -0.121068 0.0619051 -0.270386 -0.101937 0.0308106 -0.20123 -0.138565 0.0225987 -0.427124 0.148044 0.140639 -0.359271 0.0216499 0.0464077 -0.275599 -0.0232089 0.0384337 -0.329337 -0.0116905 0.0923039 -0.0643995 0.0817391 0.39797 -0.314507 0.314379 0.472336 -0.115469 0.0452117 0.369992 -0.149335 -0.00516157 0.324363 -0.206923 0.130367 0.394604 -0.05724 0.117024 0.376703 -0.0617844 0.103904 0.398924 -0.163266 0.227038 0.463829 -0.115398 0.0717104 0.374399 -0.0678497 0.044025 0.369508 -0.12802 0.147771 0.20251 -0.00920597 -0.069972 0.00662782 -0.00685847 0.136296 -0.0013463 -0.00768785 -0.181832 -0.00143347 -0.0062363 0.022602 -0.00701245 -0.00951666 -0.0967888 0.00279158 -0.0083293 -0.136361 0.000617597 -0.0108192 -0.0264666 -0.00267299 -0.0874225 -0.0456949 0.263396 -0.0617922 -0.123163 0.120746 -0.0891073 -0.00750361 0.155273 -0.0618729 -0.0139875 0.298416 -0.0358687 -0.0586595 0.167684 -0.0802656 0.0581315 0.187683 -0.0507985 -0.0836839 0.142814 -0.150249 -0.0995888 0.244066 -0.127281 0.0366575 0.149561 -0.11542 -0.139179 0.183076 -0.0648729 -0.169616 0.0974458 -0.0918895 -0.0803497 0.12248 -0.107749 0.00452455 0.333937 -0.135116 -0.045085 0.28931 -0.155276 0.0354139 0.284689 -0.106182 -0.0890792 0.220841 -0.404879 0.32369 0.370613 -0.1884 0.199237 0.169695 -0.207325 0.00480633 0.295191 -0.289738 0.148083 0.339756 -0.230009 0.0846039 0.275084 -0.158801 0.163348 0.439499 -0.288574 0.264701 0.443642 -0.227432 0.198882 0.353527 -0.191505 0.0877585 0.362657 -0.00610786 -0.224278 -0.0025505 -0.0021201 -0.223719 -0.00642033 -0.00396569 -0.297014 -0.00410103 -0.113856 -0.188627 0.145496 -0.0642753 -0.214403 0.0769967 -0.078316 -0.207029 0.0692707 -0.00635086 0.0224409 -0.00659684 -0.000821342 -0.181222 -0.00820303 -0.00720658 -0.160621 -0.00357711 -0.00484882 -0.0776546 -0.00522619 -0.00324524 -0.160539 -0.00735101 -0.155671 -0.116703 0.174566 -0.119964 -0.063935 0.108864 -0.100488 -0.149561 0.0758094 -0.0865883 -0.148441 0.0922282 -0.287625 0.094165 0.210309 -0.160903 0.0391802 0.118708 -0.129472 -0.0818007 0.0773201 -0.212268 -0.0241756 0.200279 -0.000355044 0.135804 -0.00716687 0.00800258 -0.0702919 -0.00886402 -0.00199963 -0.0266955 -0.0111123 0.00155493 -0.136131 -0.00900964 0.00315274 -0.0969908 -0.00990307 -0.361624 0.214028 0.20656 -0.199102 0.15266 0.118823 -0.193027 0.0565603 0.0512251 -0.159282 -0.00798071 0.0677613 -0.20492 0.806595 0.632269 -0.434169 0.549434 0.501852 -0.0894586 0.258393 0.527652 -0.147795 0.492244 0.649702 -0.252812 0.415536 0.579135 -0.0724198 0.275389 0.444348 -0.128718 0.537845 0.581262 -0.238999 0.453929 0.52579 -0.0859096 0.277837 0.510296 0.00959726 1.29003 0.172128 -0.00387828 0.440527 0.00791647 -0.0129511 0.077529 -0.00572825 -0.019389 0.362451 -0.0125094 -0.00367885 0.291806 -0.0051149 -0.091946 0.159668 0.395109 -0.0611233 0.374824 0.259196 -0.105025 0.285405 0.247859 -0.0575782 0.0984653 0.211705 -0.180206 0.730093 0.636163 -0.170897 0.376043 0.22015 -0.106425 0.846836 0.650649 -0.0185734 1.01356 0.708355 -0.1259 0.63649 0.382204 -0.099454 0.228982 0.490148 -0.135645 0.451574 0.614106 -0.188291 0.309424 0.432609 -0.113251 0.399643 0.476206 -0.303461 0.630614 0.538265 -0.405737 0.498283 0.488515 -0.307935 0.407588 0.377656 -0.233702 0.373841 0.542836 -0.343363 1.74833 0.853528 -0.143705 2.23624 -0.108132 -0.0615958 2.34639 -0.0722733 -0.0704148 2.34557 -0.0617126 0.0418042 4.08918 -0.0668367 -0.165071 2.74364 -0.0150518 -0.000685205 3.22457 -0.0368612 0.00577809 3.77592 0.00528412 -0.0356966 3.2244 -0.00088952 -0.171802 3.7467 0.950175 -0.0375002 3.95502 0.0613492 -0.261385 3.404 -0.00871011 -0.114565 2.71564 0.777748 -0.0459347 2.45064 0.300968 -0.288343 2.88031 0.402025 -0.0186517 3.32313 0.308383 0.00904247 0.439699 -0.0043196 0.174334 1.28682 0.00939328 -0.100585 1.83771 -0.110418 -0.124738 1.1942 -0.126304 -0.108813 1.83737 -0.101276 -0.544674 2.68123 0.729491 -0.63612 1.07516 0.382219 -0.195804 1.60329 0.214847 -0.235399 1.95555 0.269452 -0.508742 0.510641 0.360467 -0.172942 0.859671 -0.142269 -0.402139 0.440595 0.287677 -0.207939 0.403037 0.180978 -0.250295 0.606163 0.240701 -0.468948 1.37519 0.673061 -0.477062 0.747836 0.43427 -0.326946 2.31461 0.956145 -0.491537 0.932023 0.507169 0.00786545 0.50451 0.00305799 0.012591 -0.0631265 -0.00604068 -0.00376697 0.290612 -0.00405716 -0.0113728 0.360739 -0.019764 -0.00509962 0.0768822 -0.013042 -0.439514 0.348444 0.16789 -0.256885 0.351354 0.0297738 -0.214589 0.100124 0.0267474 -0.231458 0.269865 0.0899644 -0.112436 0.571186 0.425048 -0.383548 0.55041 0.458502 -0.200734 0.506458 0.388099 -0.26112 0.410165 0.339961 -0.307027 0.483491 0.397977 -0.0667955 0.24134 0.386312 -0.0856825 0.394836 0.4138 -0.193908 0.421453 0.445642 -0.161677 0.349784 0.385343 -0.161018 0.776054 0.397749 -0.56886 1.15999 0.180182 -0.221793 1.13504 -0.0284162 -0.579438 1.22117 -0.0224924 -0.43293 0.599608 -0.00464696 -0.617859 0.865295 -0.0137798 -0.325285 0.986137 -0.0192489 -0.402104 0.79409 -0.0078925 -0.504204 1.01659 -0.0106232 -0.292716 0.833695 0.267194 -0.393518 0.760053 0.120572 -0.485687 0.970902 0.151287 -0.200665 0.971902 0.296077 -0.219296 1.09268 0.155317 -0.425174 1.21677 0.178149 -0.320118 0.942224 0.140075 -0.347743 0.413867 0.256354 -0.606485 0.81576 0.151008 -0.392231 0.508161 0.192394 -0.422165 0.572846 0.0996058 -0.51265 0.711143 0.120769 -0.249085 0.676329 0.351354 -0.313049 0.547852 0.30437 -0.441779 0.841303 0.284634 -0.359097 0.671586 0.229426 -0.534075 0.542187 0.385797 -0.676223 0.83432 0.188706 -0.407975 0.48807 0.297791 -0.477209 0.536507 0.350497 -0.55616 0.708254 0.270385 -0.313704 0.857438 0.423544 -0.466639 0.777013 0.421704 -0.530333 0.989858 0.329425 -0.374809 0.669764 0.360293 -0.42765 0.408465 -0.00413795 -0.40918 0.100901 -0.00491776 -0.358925 0.117384 -0.00494008 -0.390343 0.341298 0.155616 -0.41859 0.39402 0.0803041 -0.444921 0.261429 0.0713191 -0.646994 0.542423 0.00155968 -0.410476 0.0764733 -0.00750591 -0.502981 0.478129 -0.00450193 -0.592655 0.544332 -0.00471402 -0.49626 0.279598 -0.00637532 -0.452199 0.395652 0.178281 -0.576754 0.512956 0.110361 -0.483618 0.265304 0.0742598 -0.489733 0.454907 0.0935014 -0.568587 0.431689 0.222749 -0.630268 0.513411 0.128768 -0.506844 0.252687 0.0742115 -0.520397 0.434218 0.199568 -0.61551 0.478162 0.0104052 -0.154684 -0.0484975 -0.00190907 -0.504557 0.226932 -0.00519472 -0.370115 0.0386588 -0.00621941 -0.290641 -0.00710191 -0.00374686 -0.536748 0.387823 0.211125 -0.59963 0.476078 0.120482 -0.381815 0.149116 0.0562769 -0.477613 0.205838 0.0755262 -0.132614 0.728227 0.506651 -0.17736 0.851948 0.583809 -0.3085 0.724307 0.532282 -0.100825 0.494084 0.482232 -0.042463 4.12526 0.297928 -0.620859 1.53381 -0.036123 -0.312247 1.42856 -0.0252828 -0.381466 1.79945 -0.0216123 -0.558334 1.69686 -0.0235759 -0.269972 1.23718 0.384174 -0.371223 1.70289 0.21237 -0.521276 1.5725 0.194786 -0.302183 1.36646 0.199874 -0.227454 1.21433 0.526128 -0.588891 1.22438 0.193296 -0.213085 1.90779 0.458275 -0.119869 3.59611 0.328032 -0.617157 2.22843 0.163272 -0.205474 0.982186 0.4963 -0.226212 1.15549 0.553016 -0.44929 1.2704 0.368374 -0.276157 1.42372 0.424061 -0.396361 0.995636 0.503525 -0.53943 0.811272 0.470464 -0.584037 1.03279 0.333443 -0.382094 1.00836 0.493484 -0.0395831 3.02341 0.231704 -0.185654 2.47101 -0.234509 -0.2117 3.53062 -0.0483908 -0.139829 4.13255 -0.191027 -0.242103 3.59138 -0.238924 -0.199888 2.71992 1.08469 -0.137634 3.0289 0.363214 -0.361907 3.26565 0.0891154 -0.129373 3.7341 0.0853757 -0.696323 0.889336 0.0335702 -0.282541 1.18384 -0.0300068 -0.512065 2.08833 0.160911 -1.45636 2.32185 0.0603578 -0.362106 2.10465 -0.223977 -0.678001 2.25936 1.46976 -1.58202 2.11221 0.454399 -0.305382 2.15586 -0.156442 -0.546393 2.47136 0.427137 -0.591419 0.700765 0.27153 -0.668407 0.838854 0.17693 -0.726733 1.17628 0.0442637 -0.819629 1.37179 0.467958 -0.555604 0.503475 0.00464501 -0.313073 0.439343 -0.00504974 -0.229733 0.121675 -0.00436147 -0.474467 0.41626 0.0858391 -0.040018 -0.300455 -0.0360871 -0.164468 -0.209014 -0.111517 -0.136164 -0.231183 -0.123421 -0.197513 -0.175347 -0.134132 -0.0520058 -0.300769 -0.047225 -0.0235378 -0.314406 -0.0236874 -0.0215531 -0.314323 -0.0209488 -0.0789815 -0.285633 -0.071242 -0.111003 -0.261725 -0.100559 -0.136758 -0.23709 -0.10874 -0.0659374 -0.230552 -0.0398452 -0.1909 -0.179196 -0.107526 -0.0323898 -0.307991 -0.0246533 -0.0477892 -0.279536 -0.0388322 -0.0553771 -0.256417 -0.0404636 -0.115882 -0.237559 -0.0809351 -0.111102 -0.249419 -0.0587425 -0.0585488 -0.267751 -0.0311874 -0.036728 -0.285189 -0.015409 -0.20933 -0.175257 -0.0292433 -0.0798749 -0.202796 -0.0385146 -0.271998 -0.0965876 -0.0404815 -0.110681 -0.157764 -0.00342063 -0.280656 -0.0905258 -0.00516818 -0.0945462 -0.179771 -0.031041 -0.107193 -0.163349 -0.0190324 -0.203059 -0.134652 -0.0307284 -0.0563717 -0.270374 -0.0166169 -0.0798149 -0.229189 -0.0133961 -0.15444 -0.205958 -0.0220665 -0.052717 -0.278019 -0.0217017 -0.0671263 -0.25182 -0.0300627 -0.143888 -0.216243 -0.0397947 -0.0752111 -0.238597 -0.0225695 -0.263826 -0.109072 -0.111956 -0.311628 -0.0613934 -0.0475564 -0.174669 -0.2038 -0.0710057 -0.160667 -0.178685 -0.0715493 -0.221075 -0.14515 -0.095432 -0.25087 -0.116149 -0.0725226 -0.196083 -0.184984 -0.0533021 -0.129507 -0.231049 -0.0527832 -0.162997 -0.206362 -0.0659495 -0.10018 -0.249802 -0.0394911 -0.319877 -0.00591335 -0.0505861 -0.0530072 -0.254124 -0.00955462 -0.0422807 -0.275954 -0.00281982 -0.215462 -0.170221 -0.00333998 -0.0601226 -0.263869 -0.00328208 -0.0827987 -0.225418 -0.00330711 -0.15727 -0.203062 -0.00342149 -0.0399334 -0.279765 -0.0122307 -0.0411157 -0.276797 -0.00806692 -0.113029 -0.24766 -0.0171602 -0.0589091 -0.265237 -0.0106218 -0.114826 -0.239656 -0.00360655 -0.112935 -0.240537 -0.0180193 -0.0455344 -0.27997 -0.0455352 -0.260669 0.0320693 -0.26067 -0.0556354 -0.168845 -0.0855224 -0.285036 0.154234 -0.350391 -0.168652 -0.0668358 -0.278321 -0.309712 0.180896 -0.364407 -0.106341 -0.143221 -0.172434 -0.144257 -0.107288 -0.237971 -0.199341 -0.00396809 -0.293228 -0.099105 -0.229699 -0.115978 -0.146765 -0.156115 -0.198101 -0.193523 -0.07773 -0.231491 -0.0486155 -0.250668 -0.0576067 -0.0515193 -0.212028 -0.0702458 -0.139808 -0.116342 -0.181531 -0.104309 -0.188996 -0.143915 -0.0534442 -0.122292 -0.106603 -0.122954 0.450747 -0.593286 -0.00208697 -0.0482865 -0.157002 0.0103644 0.478557 -0.617473 -0.00742113 0.0766879 -0.409554 0.00135728 0.542694 -0.648288 -0.00371239 -0.0063142 -0.291946 -0.00607954 0.0399802 -0.371894 -0.00520242 0.227593 -0.50554 -0.0806752 -0.047621 -0.244781 -0.0592523 0.0273895 -0.355054 -0.0850741 0.205924 -0.48788 -0.0472331 -0.0809416 -0.130432 -0.0289927 -0.0574682 -0.148054 -0.0718926 0.155357 -0.390147 -0.0492898 -0.0157216 -0.276228 -0.148588 -0.0139783 -0.326541 -0.13327 0.516619 -0.618699 -0.115497 0.031379 -0.366991 -0.0636081 0.0637408 -0.3959 -0.0901384 0.249722 -0.514892 -0.0984931 -0.0924022 -0.210495 -0.12975 -0.0544773 -0.281627 -0.147833 0.149531 -0.433933 -0.10177 -0.00777891 -0.323641 -0.397535 0.561971 -0.499362 -0.199017 0.855455 -0.641568 -0.202382 0.120972 -0.403079 -0.293053 0.317452 -0.465481 -0.22883 0.435598 -0.564864 -0.13616 0.0332078 -0.29567 -0.265153 0.2731 -0.446718 -0.21184 0.379871 -0.529062 -0.181573 0.0758419 -0.368947 -0.155079 0.019057 -0.338403 -0.0876134 0.388574 -0.418681 -0.00506032 0.101516 -0.408551 -0.00422854 0.410556 -0.428204 -0.00499315 0.117983 -0.358865 -0.0588799 0.109405 -0.353761 -0.116512 0.0590991 -0.372179 -0.0645791 0.0895771 -0.400069 -0.0815418 0.261624 -0.443541 -0.0140998 0.865603 -0.618984 -0.00500258 0.603339 -0.433805 -0.00658016 0.280031 -0.496132 -0.00502075 0.54484 -0.593408 -0.00467142 0.479081 -0.503283 -0.155788 0.212814 -0.44702 -0.12147 0.517312 -0.569333 -0.101152 0.454097 -0.490611 -0.0861763 0.262888 -0.482759 -0.360349 0.530952 -0.448203 -0.107642 0.573185 -0.420303 -0.288195 0.702539 -0.540076 -0.167794 0.826033 -0.598933 -0.130639 0.702176 -0.510718 -0.204189 0.148619 -0.396669 -0.277017 0.322109 -0.441105 -0.187956 0.395118 -0.456006 -0.20901 0.433743 -0.517137 -0.4391 0.773336 -0.439101 -0.195056 1.06261 -0.195057 -0.0226598 1.22037 -0.580749 -0.0262859 1.12972 -0.220264 -0.00593798 0.622177 -0.314891 -0.00780509 0.836495 -0.131001 -0.0105651 1.01634 -0.504814 -0.0072365 0.794271 -0.401455 -0.0187337 0.982794 -0.324645 -0.301622 0.828085 -0.420054 -0.134527 0.757736 -0.380948 -0.165455 0.924901 -0.301722 -0.356428 0.996475 -0.5185 -0.207198 1.17737 -0.581662 -0.212623 1.20199 -0.407718 -0.172727 0.958765 -0.476476 -0.161569 0.175641 -0.16157 -0.383111 0.336512 -0.383111 -0.0779527 -0.0828234 -0.130936 -0.118642 0.0309825 -0.162195 -0.216709 0.0960486 -0.285826 -0.0686541 -0.206558 -0.0686549 -0.115286 -0.0723103 -0.115287 -0.209505 -0.0120787 -0.209506 -0.0714604 -0.150563 -0.102521 -0.0294109 1.18503 -0.286527 0.0335694 0.889235 -0.698844 -0.00437654 0.122545 -0.231129 -0.00470423 0.440743 -0.315188 0.00485708 0.504227 -0.558117 -0.0622067 0.0631478 -0.202503 -0.0269022 0.408425 -0.30917 -0.0883929 0.443114 -0.523321 -0.0398696 0.105399 -0.221114 -0.140069 0.376836 -0.186924 -0.169237 0.784084 -0.598814 -0.0991895 0.601056 -0.219007 -0.0368907 0.971263 -0.304674 -0.0942945 0.977967 -0.690992 -0.0752636 -0.0074745 -0.169701 -0.105256 0.14448 -0.206816 -0.154329 0.328145 -0.440647 -0.0747805 0.262665 -0.236271 -0.272425 0.438619 -0.356589 -0.365409 0.530041 -0.49724 -0.270853 0.681126 -0.548757 -0.204586 0.217348 -0.367995 -0.290119 1.06002 -0.29012 -0.0894898 2.61765 -0.0894907 -0.23454 2.47104 -0.187439 0.230447 3.02189 -0.040428 -0.071445 4.31137 -0.0714461 0.231213 3.40403 0.231212 -0.239071 3.59135 -0.243279 -0.19123 4.13236 -0.140513 -0.0490673 3.53019 -0.212173 -0.242464 3.09264 -0.242465 -0.164498 3.99025 -0.1645 -0.260651 3.2426 -0.260653 -0.186361 1.96264 -0.218014 -0.138634 2.44278 -0.181375 -0.326473 2.74891 -0.492026 -0.167492 3.45723 -0.204871 -0.0365914 1.53275 -0.623004 0.298123 4.11726 -0.0437828 -0.224304 2.10443 -0.362959 0.0594566 2.32103 -1.45627 0.159754 2.08858 -0.513161 -0.824145 1.6678 -0.546789 -0.477648 2.31063 -1.30865 -0.163735 1.9913 -0.485075 -0.33315 1.9754 -0.485577 -0.483781 0.833293 -0.483782 -0.0305749 3.91137 -0.0305755 -0.361813 1.08309 -0.565143 -0.215577 1.379 -0.615392 -0.157856 2.3424 -0.815334 -0.449525 0.95097 -0.449526 -0.434927 0.759641 -0.434928 -0.822799 1.58034 -0.822799 -0.398863 1.29618 -0.803442 0.0410121 2.07183 0.0410115 -0.0420122 1.2005 -0.042013 -0.0237361 1.69408 -0.5601 -0.0214215 1.79349 -0.382664 -0.0247784 1.42265 -0.312303 -0.431387 1.30027 -0.431388 -0.293271 1.59097 -0.293272 -0.261595 1.36204 -0.261596 -0.240436 1.45111 -0.496244 -0.15415 -0.202416 -0.154151 -0.288319 0.0611435 -0.28832 -0.167363 -0.164065 -0.190951 -0.174222 -0.117298 -0.233126 -0.224518 -0.0398316 -0.26287 -0.0916988 -0.261689 -0.0916996 -0.127734 -0.235213 -0.127735 -0.180182 -0.144712 -0.180183 -0.140606 -0.198482 -0.161418 -0.17031 -0.168594 -0.170311 -0.263039 0.105907 -0.26304 -0.180923 -0.0377779 -0.23882 -0.17326 -0.115867 -0.17326 -0.178815 -0.0331893 -0.292492 -0.251231 0.190369 -0.310664 -0.170184 0.00517181 -0.273606 -0.147959 -0.115749 -0.215729 -0.182118 -0.130251 -0.206506 -0.186252 -0.0840257 -0.248092 -0.233173 0.0173446 -0.274218 -0.371232 0.347554 -0.371233 -0.300637 0.29968 -0.300637 -0.231588 0.0698874 -0.335111 -0.298541 0.197922 -0.360717 -0.27951 0.204056 -0.344992 -0.226348 -0.0736305 -0.226349 -0.295314 0.0857536 -0.295315 -0.286034 0.104896 -0.286035 -0.236362 -0.0055059 -0.278351 -0.145649 0.0479225 -0.307263 -0.222156 0.339288 -0.295707 -0.0899676 0.462613 -0.347295 -0.15908 0.138341 -0.302363 -0.197325 0.159687 -0.373156 -0.218776 0.272903 -0.355651 -0.162002 0.34356 -0.39345 -0.31038 0.472114 -0.399201 -0.264046 0.4085 -0.346504 -0.201175 0.507274 -0.389932 -0.249125 0.304838 -0.401879 -0.255866 0.442218 -0.255866 -0.129545 0.79456 -0.129546 -0.19168 0.527199 -0.284277 -0.105399 0.592837 -0.303597 -0.122155 0.705232 -0.229833 -0.367033 0.647955 -0.367034 -0.307638 0.542655 -0.307639 -0.272171 0.811798 -0.272172 -0.237735 0.662997 -0.345642 -0.27832 -0.0668358 -0.168653 -0.364406 0.180896 -0.309713 -0.19095 -0.164065 -0.167363 -0.233126 -0.117298 -0.174223 -0.262869 -0.0398316 -0.224519 -0.115977 -0.229699 -0.0991059 -0.1981 -0.156115 -0.146766 -0.23149 -0.07773 -0.193524 -0.161417 -0.198482 -0.140607 -0.23882 -0.0377779 -0.180924 -0.292491 -0.0331892 -0.178816 -0.310663 0.190369 -0.251231 -0.273605 0.00517183 -0.170185 -0.215728 -0.115749 -0.147959 -0.206506 -0.130251 -0.182118 -0.248091 -0.0840257 -0.186253 -0.274218 0.0173447 -0.233174 -0.33511 0.0698874 -0.231588 -0.360716 0.197922 -0.298542 -0.344992 0.204056 -0.279511 -0.27835 -0.00550588 -0.236363 -0.338402 0.019057 -0.15508 -0.41868 0.388574 -0.0876142 -0.353761 0.109405 -0.0588807 -0.307262 0.0479225 -0.145649 -0.295706 0.339288 -0.222157 -0.347294 0.462613 -0.0899684 -0.302363 0.138341 -0.159081 -0.373155 0.159688 -0.197326 -0.355651 0.272903 -0.218776 -0.393449 0.34356 -0.162003 -0.448202 0.530952 -0.36035 -0.420303 0.573185 -0.107643 -0.3992 0.472114 -0.310381 -0.346504 0.408501 -0.264047 -0.389932 0.507275 -0.201175 -0.396668 0.148619 -0.20419 -0.441104 0.322109 -0.277018 -0.456005 0.395119 -0.187956 -0.401878 0.304838 -0.249126 -0.31489 0.622177 -0.00593875 -0.131001 0.836495 -0.00780582 -0.284276 0.527199 -0.19168 -0.303597 0.592837 -0.1054 -0.229832 0.705232 -0.122156 -0.420053 0.828085 -0.301623 -0.380947 0.757736 -0.134528 -0.301722 0.924901 -0.165456 -0.345641 0.662997 -0.237736 -0.0855216 -0.168845 -0.0556364 -0.350391 0.154234 -0.285037 -0.130935 -0.0828233 -0.0779536 -0.162194 0.0309825 -0.118643 -0.285826 0.0960487 -0.21671 -0.0576059 -0.250668 -0.0486163 -0.070245 -0.212028 -0.0515202 -0.18153 -0.116342 -0.139809 -0.10252 -0.150563 -0.0714613 -0.106602 -0.122292 -0.0534452 -0.593285 0.450747 -0.122955 -0.157001 -0.0482865 -0.00208807 -0.617472 0.478558 0.0103633 -0.286526 1.18503 -0.0294121 -0.698843 0.889235 0.0335683 -0.231128 0.122545 -0.00437769 -0.315187 0.440743 -0.00470535 -0.558116 0.504227 0.00485603 -0.202502 0.0631479 -0.0622077 -0.309169 0.408426 -0.0269034 -0.52332 0.443114 -0.088394 -0.130431 -0.0809416 -0.0472341 -0.148053 -0.0574681 -0.0289938 -0.390146 0.155357 -0.0718937 -0.221113 0.105399 -0.0398708 -0.186923 0.376836 -0.14007 -0.598813 0.784084 -0.169238 -0.219006 0.601057 -0.0991905 -0.304673 0.971263 -0.0368916 -0.690991 0.977967 -0.0942953 -0.1697 -0.00747445 -0.0752646 -0.206815 0.14448 -0.105257 -0.440647 0.328145 -0.154331 -0.23627 0.262665 -0.0747815 -0.499361 0.561971 -0.397536 -0.641568 0.855455 -0.199018 -0.356588 0.43862 -0.272425 -0.49724 0.530041 -0.36541 -0.548756 0.681126 -0.270854 -0.295669 0.0332079 -0.136161 -0.446717 0.2731 -0.265154 -0.529061 0.379871 -0.211841 -0.367994 0.217348 -0.204587 -0.187438 2.47104 -0.234541 -0.0404271 3.02189 0.230446 -0.243278 3.59135 -0.239072 -0.140511 4.13236 -0.191231 -0.212172 3.53019 -0.0490688 -0.218014 1.96264 -0.186362 -0.181374 2.44278 -0.138634 -0.492026 2.74891 -0.326474 -0.20487 3.45723 -0.167493 -0.623004 1.53276 -0.0365926 -0.0437825 4.11727 0.298122 -0.362959 2.10443 -0.224305 -1.45627 2.32103 0.0594556 -0.51316 2.08858 0.159752 -0.546789 1.6678 -0.824145 -1.30865 2.31063 -0.477649 -0.485074 1.9913 -0.163736 -0.485577 1.9754 -0.333152 -0.565142 1.08309 -0.361814 -0.615392 1.379 -0.215578 -0.815334 2.3424 -0.157857 -0.803442 1.29618 -0.398863 -0.580749 1.22037 -0.0226608 -0.220264 1.12972 -0.0262867 -0.560099 1.69408 -0.0237371 -0.382664 1.79349 -0.0214223 -0.312303 1.42265 -0.0247792 -0.518499 0.996475 -0.356429 -0.581661 1.17737 -0.207199 -0.407718 1.20199 -0.212624 -0.496243 1.45111 -0.240437 -0.172433 -0.143221 -0.106342 -0.23797 -0.107288 -0.144258 -0.293227 -0.00396803 -0.199342 -0.143915 -0.188996 -0.10431 -0.409554 0.0766881 -0.00742212 -0.648288 0.542694 0.00135622 -0.291945 -0.00631405 -0.00371343 -0.371894 0.0399803 -0.0060806 -0.505539 0.227593 -0.00520351 -0.24478 -0.0476208 -0.0806762 -0.355054 0.0273897 -0.0592533 -0.487879 0.205925 -0.085075 -0.276228 -0.0157215 -0.0492908 -0.32654 -0.0139783 -0.148589 -0.618698 0.516619 -0.133271 -0.366991 0.0313792 -0.115498 -0.395899 0.063741 -0.0636091 -0.514891 0.249722 -0.0901394 -0.210494 -0.0924022 -0.0984941 -0.281626 -0.0544772 -0.129751 -0.433932 0.149531 -0.147834 -0.32364 -0.00777869 -0.101771 -0.403078 0.120972 -0.202383 -0.465481 0.317452 -0.293054 -0.564863 0.435599 -0.228831 -0.368946 0.0758421 -0.181574 -0.408551 0.101516 -0.00506123 -0.428204 0.410556 -0.00422938 -0.358865 0.117983 -0.00499396 -0.372179 0.0590992 -0.116512 -0.400068 0.0895773 -0.06458 -0.44354 0.261624 -0.0815427 -0.618983 0.865603 -0.0141008 -0.433804 0.603339 -0.00500341 -0.496131 0.280031 -0.00658115 -0.593407 0.54484 -0.00502176 -0.503282 0.479081 -0.00467232 -0.447019 0.212815 -0.155789 -0.569332 0.517312 -0.121471 -0.49061 0.454097 -0.101153 -0.482758 0.262888 -0.0861772 -0.540076 0.702539 -0.288195 -0.598932 0.826033 -0.167794 -0.510718 0.702176 -0.130639 -0.517137 0.433743 -0.209011 -0.504814 1.01634 -0.0105659 -0.401454 0.794271 -0.00723737 -0.324644 0.982794 -0.0187345 -0.476476 0.958765 -0.172727 0.0182378 -0.0573305 -0.147277 0.260703 0.270242 -0.44855 0.0524199 -0.171245 -0.102116 0.262965 0.147199 -0.351165 0.162756 -0.0642501 -0.284371 0.291562 0.180924 -0.373201 0.102795 -0.142339 -0.188216 0.140016 -0.105555 -0.247463 0.190985 0.000993963 -0.296723 0.0669475 -0.0529992 -0.25238 0.122056 -0.0554916 -0.291036 0.175156 0.0780895 -0.358851 0.0325532 -0.084018 -0.136353 0.0432056 -0.125113 -0.119503 0.129073 0.0336804 -0.28329 0.0886973 -0.0944012 -0.219137 0.0546877 -0.216199 -0.0829323 0.196988 -0.152617 -0.152051 0.123636 -0.237874 -0.133171 0.0456917 -0.287833 -0.0540302 0.169248 -0.118759 -0.236045 0.230836 -0.114089 -0.177365 0.147913 -0.205375 -0.153792 0.103924 -0.190623 -0.15108 0.144482 -0.155612 -0.204537 0.180323 -0.142726 -0.189432 0.362337 0.19021 -0.309799 0.280353 -0.0585278 -0.1721 0.222354 -0.0364184 -0.270876 0.282067 0.0657073 -0.293572 0.263297 -0.0331735 -0.230943 0.14374 -0.117862 -0.182673 0.255897 0.0264899 -0.271739 0.231095 -0.0746646 -0.204242 0.192598 -0.0766236 -0.239379 0.179581 -0.0832588 -0.247125 0.233104 -0.0274673 -0.181232 0.166893 -0.107514 -0.169731 0.163588 -0.16974 -0.167036 0.244387 -0.101467 -0.137572 0.235587 -0.0481075 -0.136095 0.175297 -0.169876 -0.144054 0.222054 -0.0711135 -0.227358 0.243881 -0.0795109 -0.186677 0.242238 -0.0509443 -0.186116 0.358471 0.206033 -0.300875 0.268394 0.0170929 -0.168294 0.328731 0.0794642 -0.233022 0.289876 -0.0243703 -0.17897 0.284901 0.000896868 -0.176719 0.23043 -0.00220342 -0.278594 0.290065 0.0947496 -0.296118 0.267132 0.0229267 -0.232255 0.27269 -0.000408695 -0.237952 0.440554 0.331145 -0.294374 0.343431 0.115927 -0.0544247 0.275794 -0.0679391 -0.116642 0.294006 0.0207831 -0.0458576 0.240816 -0.00643205 -0.106287 0.269768 0.0267 -0.0421484 0.273236 -0.0400351 -0.117832 0.259757 -0.0203145 -0.113741 0.280477 0.00398108 -0.0832102 0.366131 0.165192 -0.193822 0.300578 0.0584982 -0.142192 0.327988 0.0943819 -0.104534 0.390897 0.156343 -0.208632 0.335187 0.0273263 -0.153504 0.356274 0.0898422 -0.110342 0.323536 0.0487405 -0.151501 0.169836 0.198997 -0.189169 0.370517 0.323303 -0.405368 0.0775675 -0.0818597 -0.13016 0.118876 0.0391121 -0.16178 0.210328 0.0939134 -0.288417 0.0515881 0.0570166 -0.194292 0.119041 0.152837 -0.200516 0.206641 0.213959 -0.362946 0.0681098 -0.00785391 -0.160254 0.0770726 -0.230022 -0.0464547 0.196201 -0.172783 -0.109169 0.0514963 -0.286572 -0.0465361 0.0694962 -0.207123 -0.078469 0.077394 -0.214006 -0.0643021 0.145782 -0.188411 -0.1136 0.149841 0.0363151 -0.127698 0.244214 -0.099472 -0.149703 0.122877 -0.0806358 -0.0920457 0.0982156 -0.169048 -0.0648901 0.183529 -0.138743 -0.115107 0.0759529 -0.149713 -0.100912 0.10905 -0.0641557 -0.120467 0.174764 -0.116798 -0.155838 0.0925663 -0.148552 -0.0867794 0.275052 0.0843196 -0.230354 0.339669 0.147866 -0.289905 0.295313 0.00476279 -0.20718 0.200299 -0.0243973 -0.212718 0.202732 0.147191 -0.128306 0.368228 0.0449345 -0.067589 0.0939961 -0.20168 -0.0421128 0.279287 -0.0886305 -0.0414427 0.128277 -0.151223 -0.00411718 0.292728 -0.0802467 -0.00481379 0.106783 -0.177381 -0.0329986 0.118801 -0.158305 -0.0190816 0.213252 -0.127571 -0.0321723 0.187555 0.0576189 -0.0804025 0.166642 -0.0585418 -0.0355508 0.296348 -0.013193 -0.0616525 0.155581 -0.00786858 -0.0892378 0.121089 -0.12286 -0.0619751 0.261991 -0.0450593 -0.087299 0.142024 -0.0832279 -0.0507431 0.264137 -0.101437 -0.110397 0.310756 -0.0506949 -0.0446367 0.17006 -0.175125 -0.0726321 0.227839 -0.139538 -0.0955048 0.256279 -0.10911 -0.0734635 0.28461 0.0353216 -0.155262 0.289184 -0.0446904 -0.134543 0.333384 0.00501806 -0.107337 0.220431 -0.0885965 -0.10591 0.472262 0.314334 -0.314408 0.397655 0.0818583 -0.0641624 0.394703 0.13039 -0.206615 0.324454 -0.00536007 -0.148763 0.370084 0.0451562 -0.115209 0.35331 0.19855 -0.227618 0.44344 0.264538 -0.288619 0.43914 0.163529 -0.158655 0.362681 0.0878305 -0.191274 0.324747 -0.0130763 -0.00257708 0.296201 0.0267336 -0.00274795 0.300749 -0.0386339 -0.0862037 0.318965 -0.0190745 -0.0472718 0.312909 0.00551476 -0.0488289 0.463637 0.227292 -0.162965 0.398624 0.103829 -0.0615852 0.376027 0.117206 -0.0570665 0.3743 0.071431 -0.11514 0.0515096 0.0651455 -0.398502 0.282719 0.301176 -0.4706 0.105475 0.0336866 -0.373712 0.14157 -0.0130335 -0.329796 0.196597 0.121318 -0.39624 0.03869 -0.022512 -0.276695 0.0469861 0.0225859 -0.360865 0.140861 0.148264 -0.42817 0.0929493 -0.0109302 -0.331053 0.054945 0.0927062 -0.400107 0.211178 0.273948 -0.353816 0.138126 0.0535906 -0.306645 0.0499266 0.11303 -0.3526 0.170364 -0.0291497 -0.294754 0.245111 0.194885 -0.308972 0.16367 0.0113699 -0.271378 0.107898 0.0631393 -0.37617 0.147881 0.020713 -0.338922 0.189172 0.162597 -0.375144 0.375899 0.359286 -0.384801 0.293417 0.306126 -0.299467 0.224219 0.0763724 -0.338322 0.29087 0.201638 -0.367328 0.272304 0.208619 -0.344461 0.145795 0.220276 -0.449417 0.266932 0.322615 -0.449967 0.238632 0.307588 -0.403462 0.197958 0.151468 -0.397002 0.175157 -0.0311532 -0.235565 0.267885 0.175605 -0.223603 0.247074 0.0268615 -0.157189 0.196767 0.0398625 -0.232713 0.226228 0.022872 -0.273198 0.256201 0.112642 -0.262523 0.250694 0.0359191 -0.218639 0.337376 0.208581 -0.279324 0.303663 0.197405 -0.251554 0.293099 0.0999515 -0.20705 0.278786 0.110325 -0.285907 0.301561 0.235564 -0.189465 0.309435 0.10715 -0.052872 0.294633 0.141244 -0.158888 0.272747 0.0592242 -0.131038 0.294486 0.0878858 -0.095481 0.392651 0.312235 -0.249164 0.347472 0.278529 -0.215795 0.364571 0.208899 -0.128636 0.332116 0.158944 -0.177075 0.188437 0.833816 -0.67762 0.38575 0.541684 -0.534662 0.0741619 0.252893 -0.50723 0.128567 0.513383 -0.631518 0.222624 0.431381 -0.569526 0.0563353 0.149755 -0.383251 0.120357 0.476245 -0.601598 0.211051 0.387754 -0.538277 0.0755145 0.206343 -0.478697 0.08339 0.46087 -0.348927 0.218881 0.341814 -0.296508 0.0610634 0.207072 -0.343912 0.0710234 0.261908 -0.444732 0.0799363 0.394643 -0.41874 0.155375 0.340966 -0.390283 0.15068 0.815453 -0.607386 0.256282 0.413085 -0.347479 0.12024 0.711366 -0.512911 0.0993249 0.573444 -0.421909 0.192147 0.507551 -0.391833 0.0740849 0.265588 -0.483573 0.109978 0.513028 -0.577491 0.178003 0.395654 -0.452515 0.0930079 0.455429 -0.490038 0.270286 0.707636 -0.556733 0.350563 0.535963 -0.477469 0.297878 0.487607 -0.407956 0.199427 0.433935 -0.520963 0.180163 1.15885 -0.569771 0.397495 0.776237 -0.160524 0.098245 0.592085 -0.309037 0.301611 0.604351 -0.106284 0.130013 0.869261 -0.00987884 0.30772 0.654363 -0.00610217 0.108189 0.711174 -0.233586 0.119511 0.810067 -0.129571 0.2255 0.732239 -0.117598 0.178691 1.21396 -0.425559 0.15694 1.08684 -0.218103 0.296421 0.969561 -0.200148 0.151263 0.969926 -0.485933 0.120332 0.758927 -0.39285 0.267582 0.831031 -0.292289 0.141008 0.937604 -0.319279 0.290835 0.341313 -0.221337 0.342969 0.458425 -0.0869438 0.188264 0.530113 -0.290051 0.253994 0.44063 -0.258049 0.285385 0.531925 -0.194887 0.284623 0.840397 -0.441677 0.304383 0.546785 -0.312308 0.351019 0.675837 -0.24852 0.22927 0.669579 -0.358292 0.458582 0.550203 -0.383423 0.424349 0.572583 -0.112043 0.397954 0.483325 -0.306634 0.339653 0.40988 -0.260695 0.387635 0.506892 -0.2005 0.3296 0.98878 -0.530762 0.421934 0.77639 -0.466737 0.423908 0.856798 -0.313473 0.36041 0.669235 -0.374482 0.353462 0.341413 -0.00179625 0.315225 0.112302 -0.00330821 0.33066 0.288195 -0.138885 0.348848 0.327972 -0.0757117 0.336265 0.208783 -0.0646659 0.445392 0.421722 -0.193486 0.412925 0.395982 -0.0852996 0.385546 0.241874 -0.0663965 0.38458 0.350284 -0.161254 -0.142681 0.859966 -0.177132 0.360322 0.510163 -0.509742 0.24089 0.606566 -0.253062 0.181033 0.403211 -0.209471 0.287464 0.440181 -0.403508 0.0267498 0.100815 -0.215863 0.0298968 0.352471 -0.258825 0.167902 0.348604 -0.441498 0.0901289 0.270381 -0.233311 -0.108229 2.23586 -0.145055 0.853566 1.74784 -0.343414 0.115782 4.11764 0.0144414 0.779733 1.83944 0.103085 0.646065 1.13966 0.0338305 0.704034 0.787024 -0.0140507 0.436053 3.55599 0.0916923 0.352536 2.6565 0.0825438 0.906462 3.0328 0.27563 0.402929 2.88013 -0.28935 0.302235 2.45014 -0.0463776 0.778106 2.71355 -0.115033 -0.0082975 3.40368 -0.262637 0.0616998 3.95432 -0.0382162 0.95028 3.74325 -0.172711 0.309357 3.32224 -0.019351 0.220209 0.375498 -0.171504 0.635772 0.73048 -0.180103 0.382048 0.635394 -0.126545 0.707167 1.01272 -0.0187861 0.649456 0.847136 -0.106532 0.215321 1.6027 -0.196816 0.382879 1.07498 -0.637008 0.729982 2.67987 -0.54527 0.270559 1.95544 -0.236337 0.501848 0.549163 -0.434291 0.632452 0.807024 -0.204704 0.377414 0.407168 -0.308483 0.48835 0.497938 -0.406052 0.538041 0.630559 -0.30361 0.956057 2.31297 -0.326573 0.43412 0.747271 -0.477713 0.673259 1.37468 -0.469173 0.507055 0.931341 -0.492296 0.29114 0.483623 -0.00340027 0.38749 0.0655569 -0.0148422 0.217814 0.112395 -0.00709575 0.177484 -0.0525036 -0.00837066 0.320516 -0.00628901 -0.0135066 0.247949 0.284384 -0.105274 0.258806 0.373546 -0.0613358 0.393643 0.159565 -0.0918362 0.211073 0.0978015 -0.0575582 0.676053 0.511729 -0.0217089 0.412593 0.103545 -0.00578435 0.500752 0.453473 -0.0116712 0.649445 0.490986 -0.0199661 0.509234 0.261655 -0.0144206 0.431989 0.309084 -0.18841 0.613332 0.451869 -0.135507 0.489057 0.229406 -0.0992424 0.475 0.399407 -0.113259 0.579008 0.415732 -0.252676 0.649435 0.492801 -0.147571 0.527172 0.258935 -0.0891847 0.542404 0.373851 -0.233679 0.606957 0.573996 -0.0211239 0.347484 0.122811 -0.00068901 0.536329 0.301309 -0.00814568 0.408825 0.117646 -0.00256273 0.377287 0.128207 -0.000262248 0.525709 0.454239 -0.238717 0.581142 0.538566 -0.128384 0.443766 0.275965 -0.0720412 0.50992 0.278411 -0.0855984 0.0439113 1.1764 -0.730473 0.176732 0.838455 -0.670772 0.271194 0.700167 -0.593009 0.0857329 0.416791 -0.476771 0.384206 3.60565 0.222389 0.528981 1.37763 -0.0135899 0.185108 4.03508 0.111463 0.461218 3.36229 0.204958 1.30641 2.97388 0.331896 0.0896689 3.26418 -0.362655 0.362485 3.02621 -0.138906 1.08408 2.71707 -0.200773 0.08546 3.73173 -0.130219 0.193224 1.22323 -0.590241 0.526976 1.21426 -0.227245 0.163878 2.22574 -0.619234 0.329512 3.59047 -0.120841 0.460706 1.90556 -0.21298 -0.156612 2.15452 -0.305991 0.453961 2.1109 -1.5824 1.4698 2.2579 -0.678771 0.42669 2.46994 -0.547261 0.333612 1.03183 -0.584896 0.470572 0.810678 -0.539809 0.504043 0.995206 -0.39656 0.467827 1.37078 -0.820282 0.299797 1.96544 0.0219039 0.431608 0.832068 -0.0353966 0.214365 1.4004 -0.0464297 0.162767 1.16172 -0.0476675 0.314757 1.05226 -0.0412308 0.195336 1.56964 -0.522476 0.213909 1.69774 -0.371928 0.385247 1.23397 -0.269571 0.201251 1.36068 -0.301939 0.602129 0.891496 -0.0255624 0.459588 0.602091 -0.010915 0.451809 1.46747 -0.0337785 0.588899 1.22398 -0.0321044 0.552868 1.02149 -0.033439 0.369213 1.26857 -0.44973 0.554096 1.15487 -0.225997 0.496908 0.981194 -0.205126 0.425747 1.42092 -0.276125 0.532485 0.72439 -0.308342 0.584165 0.852396 -0.177065 0.506726 0.728668 -0.132154 0.494056 1.00772 -0.382122 0.501706 0.530963 -0.00740609 0.424885 0.414784 -0.00168932 0.3922 0.248159 0.000306067 0.481869 0.494894 -0.100383 0.0460592 0.183177 -0.094694 0.158257 0.248454 -0.0586416 0.0768872 0.459819 -0.249693 -0.00254147 0.316483 -0.0645057 -0.00539082 0.47911 -0.256083 -0.0120489 0.840833 -0.138648 -0.00580804 0.621034 -0.318696 -0.00287664 0.453351 -0.0800296 -0.00701711 0.624401 -0.10304 -0.00661188 0.566915 -0.191372 0.14187 0.404095 -0.0763635 0.0927068 0.606844 -0.098605 0.0844919 0.549838 -0.187415 0.112678 0.282679 -0.0620304 0.0568815 0.307848 -0.0635934 0.0689607 0.402419 -0.14862 0.072551 0.442152 -0.0794257 -0.00122046 0.252329 -0.165497 0.0513914 0.248673 -0.16205 0.140605 0.19155 -0.143651 0.310043 0.106816 -0.0530288 0.301882 0.235646 -0.189553 0.344355 0.456198 -0.0870246 0.290948 0.342677 -0.220892 0.249194 0.140623 -0.0520941 0.239701 0.0773314 -0.0431694 0.337061 0.20806 -0.0649745 0.349954 0.326546 -0.0758163 0.33154 0.287756 -0.139073 0.263501 0.326763 -0.140048 0.281172 0.367308 -0.0780196 0.304583 0.605549 -0.10873 0.095571 0.597542 -0.3124 0.227919 0.731432 -0.119413 0.117764 0.817441 -0.135534 0.107856 0.72243 -0.23911 0.196126 0.350527 -0.0738454 0.244676 0.469979 -0.086583 0.168496 0.497023 -0.176515 0.177707 0.549926 -0.0920282 0.218635 0.343234 -0.296284 0.0829518 0.458244 -0.346942 0.206875 0.350077 -0.21208 0.286574 0.533313 -0.195954 0.254078 0.443958 -0.258101 0.188411 0.536102 -0.291792 0.150703 0.416067 -0.235712 0.228999 0.418797 -0.160717 0.154524 0.214979 -0.210081 0.0608852 0.207265 -0.343862 0.270786 0.026425 -0.0421288 0.24156 -0.00654556 -0.106106 0.247187 0.0269646 -0.157197 0.268028 0.175861 -0.223725 0.22935 0.0651829 -0.0768261 0.21467 0.0263846 -0.0352401 0.294887 0.0876735 -0.0954629 0.272991 0.0591193 -0.130964 0.294889 0.14103 -0.158923 -0.062963 0.306043 -0.0629634 -0.212335 0.344239 -0.212335 -0.13435 0.79953 -0.134351 -0.257139 0.440475 -0.25714 -0.34472 0.45813 -0.0902867 -0.294666 0.33649 -0.221745 -0.233449 0.713656 -0.125315 -0.307262 0.596698 -0.107867 -0.286119 0.531381 -0.193188 -0.147646 0.398264 -0.0735958 -0.249839 0.460131 -0.0847795 -0.234424 0.410003 -0.156562 -0.0786954 0.438481 -0.0786959 -0.101051 0.600789 -0.101051 -0.173888 0.488632 -0.173888 -0.185667 0.543238 -0.0958029 -0.23717 0.278875 -0.0654172 -0.164284 0.244273 -0.0546502 -0.144846 0.188802 -0.144847 -0.301488 0.138342 -0.159255 -0.0902862 0.45813 -0.344721 -0.221745 0.33649 -0.294667 -0.125315 0.713656 -0.233449 -0.107866 0.596698 -0.307263 -0.193187 0.531381 -0.28612 -0.0735954 0.398264 -0.147646 -0.084779 0.460131 -0.249839 -0.156561 0.410003 -0.234424 -0.0958024 0.543238 -0.185668 -0.0654167 0.278875 -0.237171 -0.0546498 0.244273 -0.164285 -0.159255 0.138342 -0.301488 0.295138 0.0206416 -0.0458219 0.276424 -0.0674086 -0.11688 0.311702 -0.0497995 -0.0450263 0.265036 -0.10094 -0.110978 0.201985 -0.122123 -0.0315738 0.195964 -0.0941866 -0.0309478 0.313782 0.00583658 -0.0487762 0.319568 -0.0183264 -0.0473991 0.301425 -0.0378748 -0.086483 0.228294 -0.148663 -0.0636788 0.244351 -0.132371 -0.0362681 0.111587 -0.237722 -0.017597 0.0697632 -0.254272 -0.0295904 0.281309 -0.08828 -0.0433225 0.0922161 -0.203451 -0.0423923 0.00668562 -0.172361 -0.00570326 0.00104728 -0.21366 -0.00665752 0.215769 -0.129473 -0.0332648 0.11973 -0.160791 -0.0209592 0.108311 -0.17888 -0.0336987 0.115073 -0.245567 -0.0174453 0.086084 -0.227824 -0.0141536 0.0796648 -0.238992 -0.0234822 0.157244 -0.216821 -0.023807 0.212997 -0.169464 -0.031147 0.147652 -0.215529 -0.0408748 0.157858 -0.203875 -0.0233865 0.196215 -0.173346 -0.109764 0.0759345 -0.231896 -0.0465338 0.177215 -0.202368 -0.0716978 0.25805 -0.1095 -0.0743837 0.228919 -0.139728 -0.0965932 0.171317 -0.175768 -0.0736742 0.130121 -0.232918 -0.0528467 0.19794 -0.18301 -0.0546181 0.120833 -0.250606 -0.0627241 0.0974084 -0.249533 -0.0407329 0.051339 -0.287216 -0.0467464 0.235902 -0.0479572 -0.135998 0.244587 -0.101104 -0.137764 0.187921 -0.101433 -0.0550369 0.183598 -0.0703077 -0.0290773 0.2815 0.00398155 -0.0830801 0.260519 -0.0202698 -0.113549 0.273964 -0.0397703 -0.117766 0.0262352 -0.269639 -0.00944992 0.00223089 -0.283505 -0.00335274 0.000154627 -0.261348 -0.0046298 0.00189312 -0.272042 -0.00395008 0.00282279 -0.236525 -0.00421504 0.00256477 -0.247018 -0.004758 0.0803698 -0.261808 -0.0129297 0.0435887 -0.2783 -0.00823684 0.0581019 -0.271363 -0.0177455 0.0619712 -0.265017 -0.0111218 0.00132117 -0.291863 -0.00359803 0.0380775 -0.285821 -0.0175857 0.344208 0.1157 -0.0546113 0.440579 0.331131 -0.294634 0.425049 0.571186 -0.112437 0.458503 0.55041 -0.383549 0.63227 0.806595 -0.20492 0.501853 0.549434 -0.43417 0.506651 0.728227 -0.132615 0.58381 0.851948 -0.177361 0.532283 0.724307 -0.308501 0.444349 0.275389 -0.0724207 0.581263 0.537845 -0.128719 0.52579 0.453929 -0.239 0.386312 0.24134 -0.0667962 0.4138 0.394836 -0.0856832 0.445643 0.421453 -0.193909 0.482232 0.494084 -0.100826 0.39775 0.776054 -0.161019 0.180183 1.15999 -0.56886 -0.0284155 1.13504 -0.221794 -0.0224917 1.22117 -0.579438 0.297929 4.12526 -0.0424641 -0.0361224 1.53381 -0.620859 -0.0252821 1.42856 -0.312248 -0.0216116 1.79945 -0.381467 -0.0235753 1.69686 -0.558335 0.384175 1.23718 -0.269972 0.212371 1.70289 -0.371224 0.194787 1.5725 -0.521277 0.296078 0.971902 -0.200665 0.155317 1.09268 -0.219297 0.17815 1.21677 -0.425175 0.199874 1.36646 -0.302184 0.526129 1.21433 -0.227455 0.193297 1.22438 -0.588892 0.458276 1.90779 -0.213086 0.328033 3.59611 -0.11987 0.163273 2.22843 -0.617158 0.496301 0.982186 -0.205475 0.553017 1.15549 -0.226213 0.368375 1.2704 -0.449291 0.424062 1.42372 -0.276158 0.385798 0.542187 -0.534075 0.188707 0.83432 -0.676224 0.503526 0.995636 -0.396362 0.470464 0.811272 -0.539431 0.333443 1.03279 -0.584037 0.423544 0.857438 -0.313705 0.421705 0.777013 -0.466639 0.329426 0.989858 -0.530334 0.493484 1.00836 -0.382094 0.853529 1.74833 -0.343364 -0.108131 2.23624 -0.143706 0.231705 3.02341 -0.0395844 -0.234508 2.47101 -0.185654 -0.0668356 4.08918 0.041803 -0.0150509 2.74364 -0.165072 -0.0483896 3.53062 -0.211701 -0.191026 4.13255 -0.13983 -0.238923 3.59138 -0.242104 0.950175 3.7467 -0.171803 0.0613503 3.95502 -0.0375016 -0.00870933 3.404 -0.261386 1.08469 2.71992 -0.199889 0.363215 3.0289 -0.137634 0.0891155 3.26565 -0.361908 0.0853766 3.7341 -0.129374 0.0335711 0.889336 -0.696324 -0.0300057 1.18384 -0.282542 0.160912 2.08833 -0.512066 0.0603586 2.32185 -1.45637 -0.223976 2.10465 -0.362107 1.46976 2.25936 -0.678002 0.4544 2.11221 -1.58202 -0.156441 2.15586 -0.305383 0.427138 2.47136 -0.546393 0.360467 0.510641 -0.508743 -0.142268 0.85967 -0.172943 0.271531 0.700765 -0.59142 0.176931 0.838854 -0.668408 0.0442648 1.17628 -0.726734 0.673061 1.37519 -0.468949 0.43427 0.747836 -0.477063 0.956146 2.31461 -0.326947 0.467959 1.37179 -0.81963 0.260764 0.270534 -0.447573 0.0183149 -0.057622 -0.145905 0.010406 0.478162 -0.615511 -0.00190835 -0.0484976 -0.154685 0.00305866 0.50451 0.00786481 -0.00603993 -0.0631266 0.0125903 0.00464603 0.503475 -0.555605 -0.00504865 0.439343 -0.313074 -0.0043607 0.121675 -0.229733 0.167891 0.348443 -0.439515 0.0297747 0.351354 -0.256885 0.0267482 0.100124 -0.21459 0.211126 0.387823 -0.536749 0.120483 0.476078 -0.599631 0.0562777 0.149116 -0.381816 0.0858399 0.41626 -0.474468 0.293514 0.306576 -0.299771 0.375876 0.359612 -0.384856 0.3881 0.506458 -0.200734 0.339962 0.410165 -0.26112 0.397978 0.483491 -0.307027 0.365054 0.208761 -0.128962 0.347898 0.278644 -0.21612 0.392795 0.312318 -0.249543 0.385344 0.349784 -0.161678 -0.00464641 0.599608 -0.432931 -0.0137792 0.865295 -0.61786 -0.0192483 0.986137 -0.325286 -0.00789192 0.79409 -0.402104 -0.0106225 1.01659 -0.504204 0.267195 0.833695 -0.292717 0.120573 0.760053 -0.393519 0.151288 0.970902 -0.485688 0.140076 0.942224 -0.320119 0.256354 0.413867 -0.347743 0.151009 0.81576 -0.606486 0.192395 0.508161 -0.392232 0.0996063 0.572846 -0.422165 0.120769 0.711143 -0.512651 0.351355 0.676329 -0.249086 0.30437 0.547852 -0.313049 0.284635 0.841303 -0.44178 0.229427 0.671586 -0.359098 0.297791 0.48807 -0.407975 0.350498 0.536507 -0.477209 0.270386 0.708254 -0.556161 0.360294 0.669764 -0.374809 0.211206 0.274332 -0.353839 0.0546744 0.0923866 -0.400611 -0.00413738 0.408465 -0.42765 -0.00491721 0.100901 -0.40918 -0.00493959 0.117384 -0.358925 0.0500676 0.112595 -0.352714 0.155617 0.341298 -0.390343 0.0803046 0.39402 -0.418591 0.0713197 0.261429 -0.444922 0.0015604 0.542423 -0.646994 -0.00750526 0.0764733 -0.410477 -0.00450134 0.478129 -0.502981 -0.00471343 0.544332 -0.592656 -0.00637472 0.279598 -0.496261 0.178282 0.395652 -0.452199 0.110362 0.512956 -0.576754 0.0742604 0.265304 -0.483619 0.093502 0.454907 -0.489734 0.282841 0.301521 -0.47007 0.0507983 0.0647985 -0.398666 0.222749 0.431689 -0.568588 0.128769 0.513411 -0.630269 0.0742122 0.252687 -0.506845 0.238656 0.30789 -0.403364 0.267002 0.322966 -0.449723 0.145804 0.220331 -0.449442 0.199569 0.434218 -0.520398 -0.00527768 -0.0939104 -0.274725 -0.00374736 -0.157924 -0.104119 -0.00519399 0.226932 -0.504558 -0.00621871 0.0386588 -0.370116 -0.00374614 -0.00710191 -0.290642 0.14064 0.148044 -0.427125 0.0464084 0.0216499 -0.359272 0.0384344 -0.0232089 -0.2756 0.075527 0.205838 -0.477614 0.397971 0.081739 -0.0644004 0.472337 0.314379 -0.314508 0.527652 0.258393 -0.0894595 0.649703 0.492244 -0.147796 0.579136 0.415536 -0.252813 0.376704 0.117024 -0.0572408 0.398925 0.103904 -0.0617852 0.46383 0.227038 -0.163266 0.510296 0.277837 -0.0859104 0.369509 0.044025 -0.0678506 0.202511 0.147771 -0.128021 0.00662883 -0.069972 -0.00920705 -0.00134527 0.136296 -0.00685953 0.172129 1.29003 0.00959602 0.00791752 0.440527 -0.00387939 -0.00572716 0.0775291 -0.0129522 -0.0125083 0.362451 -0.0193901 -0.00511376 0.291806 -0.00368 0.395109 0.159668 -0.091947 0.259197 0.374824 -0.0611243 0.24786 0.285404 -0.105026 0.298417 -0.0139875 -0.0618739 0.167685 -0.0586595 -0.0358697 0.187684 0.0581315 -0.0802667 0.211706 0.0984654 -0.0575793 0.636163 0.730093 -0.180207 0.220151 0.376043 -0.170898 0.65065 0.846836 -0.106426 0.708356 1.01356 -0.0185744 0.382206 0.63649 -0.125901 0.490149 0.228982 -0.0994549 0.614107 0.451573 -0.135646 0.432609 0.309424 -0.188292 0.476207 0.399642 -0.113252 0.370614 0.32369 -0.40488 0.169696 0.199237 -0.188401 0.538266 0.630613 -0.303462 0.488515 0.498283 -0.405738 0.377657 0.407588 -0.307936 0.4395 0.163347 -0.158802 0.443643 0.264701 -0.288575 0.353528 0.198881 -0.227433 0.542837 0.373841 -0.233702 -0.0722722 2.34639 -0.061597 -0.0617116 2.34557 -0.070416 -0.0368601 3.22457 -0.000686347 0.00528503 3.77592 0.00577685 -0.000888476 3.2244 -0.0356976 0.777748 2.71564 -0.114566 0.300969 2.45064 -0.0459359 0.402026 2.8803 -0.288344 0.308383 3.32313 -0.018653 -0.00431853 0.439698 0.00904146 0.0093941 1.28682 0.174333 -0.110417 1.83771 -0.100586 -0.126303 1.1942 -0.124739 -0.101275 1.83737 -0.108815 0.729491 2.68123 -0.544675 0.38222 1.07516 -0.636121 0.214848 1.60329 -0.195805 0.269452 1.95555 -0.2354 0.287678 0.440594 -0.40214 0.180978 0.403036 -0.20794 0.240702 0.606163 -0.250296 0.50717 0.932023 -0.491538 -0.00716595 0.135804 -0.000356028 -0.00886326 -0.0702919 0.00800181 -0.00405622 0.290612 -0.00376791 -0.019763 0.360739 -0.0113736 -0.0130412 0.0768822 -0.00510042 0.206561 0.214028 -0.361624 0.118824 0.15266 -0.199103 0.0512259 0.0565603 -0.193028 0.0899651 0.269865 -0.231458 0.280212 -0.0583556 -0.172617 0.362362 0.190399 -0.30987 0.369992 0.0452117 -0.11547 0.324363 -0.00516166 -0.149336 0.394605 0.130367 -0.206924 0.356754 0.0898834 -0.110517 0.335257 0.0276388 -0.153896 0.390942 0.156332 -0.208974 0.3744 0.0717104 -0.115399 -0.00143258 -0.181832 -0.00768878 -0.00701147 0.022602 -0.00623732 0.00279262 -0.0967888 -0.00951772 0.000618539 -0.136361 -0.00833028 -0.00267198 -0.0264665 -0.0108203 0.263396 -0.0456949 -0.0874234 0.120747 -0.123163 -0.0617931 0.155274 -0.0075036 -0.0891082 0.142814 -0.0836838 -0.0507994 0.244067 -0.0995889 -0.15025 0.149562 0.0366575 -0.127282 0.183077 -0.139179 -0.115421 0.0974466 -0.169616 -0.0648737 0.122481 -0.0803497 -0.0918904 0.333937 0.0045245 -0.10775 0.289311 -0.0450851 -0.135117 0.284689 0.0354138 -0.155276 0.220842 -0.0890792 -0.106183 0.295192 0.00480617 -0.207325 0.339757 0.148082 -0.289739 0.275085 0.0846038 -0.23001 0.362658 0.0877584 -0.191506 0.196841 -0.15262 -0.152329 0.0543945 -0.215796 -0.0824073 -0.00254973 -0.224278 -0.00610868 -0.00641961 -0.223719 -0.00212084 -0.0041004 -0.297014 -0.00396632 0.0455518 -0.287855 -0.0540161 0.145496 -0.188627 -0.113856 0.0769974 -0.214403 -0.0642761 0.0692714 -0.207029 -0.0783167 -0.00659593 0.0224409 -0.00635184 -0.00820224 -0.181222 -0.000822126 -0.00357631 -0.160622 -0.00720741 -0.00522534 -0.0776546 -0.00484976 -0.00735023 -0.160539 -0.00324605 0.174567 -0.116703 -0.155671 0.108865 -0.0639351 -0.119965 0.0758102 -0.149561 -0.100489 0.0922289 -0.148441 -0.086589 0.263003 0.147587 -0.35065 0.0517821 -0.171131 -0.101067 0.21031 0.0941649 -0.287625 0.118709 0.0391802 -0.160904 0.0773208 -0.0818008 -0.129473 0.230946 -0.0745413 -0.204296 0.255895 0.0268147 -0.271552 0.143651 -0.117585 -0.18235 0.20028 -0.0241757 -0.212269 -0.00836233 -0.213281 0.00268092 -0.00604474 -0.172886 0.0109084 -0.0111113 -0.0266956 -0.00200052 -0.0090088 -0.136131 0.00155414 -0.00990229 -0.0969908 0.00315197 0.128759 0.0336349 -0.282333 0.0423536 -0.125474 -0.118274 0.0322548 -0.0845427 -0.135706 0.0677621 -0.00798079 -0.159283 0.268511 0.0172355 -0.168349 0.358453 0.206173 -0.301096 0.293152 0.100126 -0.207199 0.303767 0.197647 -0.251718 0.337347 0.208789 -0.279586 0.328513 0.09436 -0.104631 0.300893 0.058579 -0.142274 0.366291 0.165273 -0.194166 0.332316 0.159029 -0.177271 0.233147 -0.0273946 -0.181311 0.17934 -0.083172 -0.247763 0.175062 -0.0312768 -0.235665 0.166881 -0.107532 -0.169847 0.245152 0.195142 -0.309067 0.17015 -0.02915 -0.295394 0.163551 0.0112459 -0.271495 0.1968 0.0398535 -0.232762 0.250644 0.0360077 -0.21872 0.256216 0.112772 -0.262647 0.226044 0.0228892 -0.273401 0.291638 0.181303 -0.373123 0.162566 -0.0637304 -0.285339 0.2723 0.208825 -0.344585 0.29091 0.201883 -0.36742 0.224133 0.0764757 -0.338638 0.267026 0.0230126 -0.232464 0.289957 0.09488 -0.296329 0.230218 -0.00215626 -0.278904 0.278692 0.110464 -0.286086 0.138009 0.0534283 -0.306688 0.100507 -0.108807 -0.268443 0.0355856 -0.0618603 -0.314536 0.108853 -0.0471385 -0.279144 0.189198 0.162587 -0.375247 0.147602 0.0206364 -0.339262 0.107426 0.0628981 -0.376351 0.196678 0.121526 -0.396152 0.141052 -0.0129388 -0.330052 0.104745 0.0337384 -0.373921 0.197999 0.151572 -0.397146 0.0854381 -0.148507 -0.228046 0.0104932 -0.163871 -0.10422 0.0619056 -0.121068 -0.253288 0.0308111 -0.101937 -0.270386 0.0225993 -0.138565 -0.20123 0.175031 0.0782079 -0.358109 0.121534 -0.0554936 -0.2902 0.0663341 -0.0537165 -0.250992 0.0923046 -0.0116905 -0.329337 0.284983 0.00104179 -0.176904 0.289844 -0.0241815 -0.179288 0.328695 0.0795107 -0.233333 0.323838 0.0488771 -0.151708 0.163418 -0.169734 -0.167266 0.230647 -0.113928 -0.177755 0.168932 -0.118362 -0.23665 0.147685 -0.205283 -0.154049 0.175157 -0.169746 -0.144374 0.242206 -0.0508647 -0.186293 0.243749 -0.0793965 -0.186998 0.221839 -0.0711157 -0.22766 0.263111 -0.0330254 -0.231162 0.282009 0.0659907 -0.293681 0.222171 -0.0361227 -0.271133 0.272547 -0.000350292 -0.238215 0.123448 -0.237811 -0.133303 0.101137 -0.180716 -0.198849 0.0356952 -0.233409 -0.0787533 0.103648 -0.244502 -0.138995 0.18013 -0.142511 -0.189496 0.144166 -0.15517 -0.204503 0.103708 -0.190456 -0.150614 0.190827 0.00144383 -0.296428 0.139426 -0.105136 -0.247091 0.102315 -0.142129 -0.187533 0.19246 -0.0762203 -0.23929 0.0618119 -0.183475 -0.168211 0.0294229 -0.20638 -0.0891012 0.0205347 -0.18174 -0.0989291 0.0879855 -0.0947708 -0.217758 -0.196446 1.06776 -0.196446 -0.438406 0.772907 -0.438406 -0.419938 0.571208 -0.108648 -0.447596 0.530252 -0.359774 -0.640156 0.855227 -0.198679 -0.498659 0.561476 -0.397004 -0.510396 0.701247 -0.130772 -0.597845 0.825558 -0.167597 -0.539204 0.701998 -0.287841 -0.407118 1.20418 -0.212926 -0.580391 1.17784 -0.206858 -0.517566 0.996525 -0.355946 -0.302042 0.928778 -0.16734 -0.381258 0.758796 -0.136182 -0.419596 0.828359 -0.301647 -0.475757 0.958818 -0.173104 -0.417923 0.386679 -0.0880033 -0.338064 0.0187175 -0.154156 -0.310779 -0.0613884 -0.0470766 -0.262243 -0.108742 -0.110245 -0.319606 -0.00712857 -0.0496543 -0.353728 0.10896 -0.0586665 -0.443566 0.260869 -0.0815149 -0.400225 0.0888699 -0.0641183 -0.372135 0.0585394 -0.115534 -0.617537 0.516114 -0.133085 -0.326311 -0.0145077 -0.147448 -0.514639 0.249122 -0.0899788 -0.395705 0.0627389 -0.0629921 -0.366688 0.030648 -0.114412 -0.490408 0.453307 -0.101304 -0.568649 0.516681 -0.121303 -0.446984 0.212372 -0.155379 -0.482807 0.262294 -0.0860069 -0.364023 0.180367 -0.309259 -0.277683 -0.067122 -0.167899 -0.564012 0.435018 -0.228533 -0.464926 0.316922 -0.292657 -0.40282 0.120465 -0.201911 -0.455743 0.394545 -0.187808 -0.440746 0.32151 -0.276573 -0.396442 0.14822 -0.203652 -0.516594 0.433164 -0.20877 -0.591807 0.450263 -0.122907 -0.107241 -0.121695 -0.0521753 -0.267188 -0.099089 -0.039343 -0.0784544 -0.202164 -0.0358535 0.0138103 -0.17274 -0.00287556 0.0153399 -0.209411 0.00292834 -0.200607 -0.136576 -0.0294058 -0.10363 -0.164107 -0.0169126 -0.0946492 -0.178853 -0.0287646 -0.389452 0.154695 -0.0719245 -0.147132 -0.0575924 -0.0288457 -0.131212 -0.0805596 -0.0462344 -0.487255 0.205238 -0.0850216 -0.354275 0.0262959 -0.0590362 -0.245812 -0.0477035 -0.0797915 -0.275805 -0.0163452 -0.0489602 -0.189473 -0.178872 -0.106631 -0.0634011 -0.229672 -0.0388232 -0.248868 -0.11646 -0.0709276 -0.220053 -0.145331 -0.0937463 -0.159628 -0.178434 -0.0699654 -0.433808 0.148969 -0.147492 -0.281874 -0.0548937 -0.12865 -0.211124 -0.0923596 -0.0972146 -0.323967 -0.00847984 -0.100832 -0.350056 0.153986 -0.284637 -0.0853724 -0.168242 -0.0545398 -0.293236 -0.0041208 -0.198716 -0.237757 -0.107462 -0.143275 -0.172549 -0.142881 -0.105275 -0.528154 0.379392 -0.211636 -0.446177 0.272739 -0.26481 -0.295871 0.0330415 -0.135647 -0.369033 0.075506 -0.181028 -0.260326 0.0319414 -0.260327 -0.0450793 -0.27944 -0.0450799 -0.163754 -0.2088 -0.110877 -0.0396038 -0.299972 -0.0356871 0.0129505 -0.262413 0.0051132 0.00577896 -0.305695 0.00334099 -0.115369 -0.237167 -0.0799241 -0.0547426 -0.255746 -0.0392825 -0.0473761 -0.278924 -0.0382331 -0.181262 -0.116127 -0.139326 -0.0699807 -0.211447 -0.0506156 -0.0571526 -0.250136 -0.0480759 -0.231172 -0.0777361 -0.193039 -0.197714 -0.156062 -0.146014 -0.115563 -0.22925 -0.098568 -0.143805 -0.18862 -0.10337 -0.300286 0.299587 -0.300287 -0.370759 0.34688 -0.37076 -0.389537 0.506267 -0.201676 -0.346224 0.40741 -0.263975 -0.398969 0.471745 -0.30988 -0.273301 0.816296 -0.273301 -0.307494 0.542868 -0.307495 -0.366596 0.64771 -0.366597 -0.345874 0.665029 -0.239019 -0.306806 0.0479653 -0.145257 -0.310147 0.190401 -0.250858 -0.29195 -0.0332737 -0.178222 -0.273014 0.00528583 -0.169795 -0.393133 0.343028 -0.162283 -0.355205 0.272635 -0.21851 -0.372895 0.159543 -0.196874 -0.344874 0.204043 -0.279159 -0.360465 0.197355 -0.298061 -0.334837 0.0695389 -0.231068 -0.401762 0.304486 -0.248683 -0.262449 0.106067 -0.26245 -0.170001 -0.168506 -0.170001 -0.172773 -0.115637 -0.172774 -0.238238 -0.0375427 -0.180513 -0.196661 -0.175083 -0.133682 -0.135761 -0.230929 -0.123068 -0.215382 -0.115619 -0.147638 -0.273802 0.0175304 -0.232813 -0.247663 -0.0840348 -0.185872 -0.206159 -0.130194 -0.181781 -0.287954 0.0607037 -0.287955 -0.153756 -0.202257 -0.153757 -0.262529 -0.040076 -0.22411 -0.232584 -0.117354 -0.173747 -0.190499 -0.163998 -0.166958 -0.285782 0.10509 -0.285783 -0.295044 0.0853416 -0.295044 -0.226014 -0.0737082 -0.226015 -0.278051 -0.0057082 -0.236 -0.0882705 -0.279445 -0.0882709 -0.0305754 -0.314137 -0.030576 -0.136382 -0.23672 -0.108358 -0.1106 -0.261292 -0.100233 -0.0785729 -0.285124 -0.0708732 -0.179739 -0.144604 -0.179739 -0.127309 -0.234893 -0.127309 -0.09125 -0.261206 -0.0912506 -0.160983 -0.198245 -0.140129 -0.0295272 3.9186 -0.029528 -0.482971 0.832915 -0.482972 -0.812518 2.34501 -0.156826 -0.613511 1.37959 -0.215099 -0.563927 1.08301 -0.361014 -0.261608 1.3669 -0.261609 -0.292333 1.59541 -0.292333 -0.430548 1.30135 -0.430548 -0.494898 1.45335 -0.239921 -0.0887199 2.61766 -0.0887212 -0.289578 1.05962 -0.289579 0.000512166 3.9824 0.000511196 0.065145 1.13717 0.065144 0.150736 1.14299 0.052957 0.020559 0.362859 0.00376269 0.0879028 3.52131 -0.0222101 0.0153093 2.5328 0.0778232 0.135513 2.09178 0.229833 -0.491097 2.74846 -0.326103 -0.179719 2.44291 -0.138249 -0.21681 1.96272 -0.185731 -0.259996 3.24222 -0.259997 -0.163841 3.9903 -0.163843 -0.241377 3.09293 -0.241378 -0.203719 3.45728 -0.166978 -0.597185 0.783865 -0.169148 -0.186565 0.376503 -0.139866 -0.688698 0.977405 -0.0946945 -0.302222 0.970661 -0.0369623 -0.218291 0.600368 -0.0991146 -0.483683 1.99057 -0.162986 -1.30774 2.31077 -0.477115 -0.545576 1.66695 -0.823293 -0.484554 1.97499 -0.332683 -0.382646 0.336168 -0.382647 -0.161314 0.175468 -0.161315 -0.547658 0.680692 -0.270655 -0.496583 0.52962 -0.364997 -0.356067 0.438199 -0.272197 -0.821486 1.57894 -0.821488 -0.434229 0.759267 -0.434229 -0.449003 0.950384 -0.449004 -0.80254 1.29573 -0.398216 0.0110979 0.432595 0.011866 0.01553 -0.132206 2.81536e-06 -0.00726164 0.077938 -0.00224259 0.0106811 -0.072811 -0.00377082 0.0141558 -0.0968941 -0.00168848 -0.5216 0.442447 -0.088619 -0.307842 0.407369 -0.0272217 -0.202521 0.0628521 -0.0619246 -0.220472 0.104768 -0.0398479 -0.0026894 0.00175318 0.00413532 0.0192987 -0.176067 0.00420698 -0.00501623 0.246809 0.0102741 -0.000626217 0.12882 0.00517915 -0.000189289 -0.0265272 0.00107611 -0.439825 0.327583 -0.154296 -0.206616 0.144237 -0.105014 -0.170035 -0.00746072 -0.0747221 -0.235784 0.26202 -0.0747619 -0.285584 0.0959333 -0.216341 -0.162015 0.0309975 -0.118336 -0.131071 -0.0825862 -0.0773096 -0.367588 0.217051 -0.204317 0.00206103 -0.0896993 0.00206024 0.00661234 -0.286031 0.00661165 0.00233021 -0.159463 0.0122412 0.0134425 -0.218791 0.00895357 0.0104688 -0.255356 0.00901477 -0.209175 -0.0120319 -0.209176 -0.115015 -0.0721428 -0.115016 -0.0682001 -0.206126 -0.0682008 -0.102215 -0.150221 -0.0710044 -0.198678 0.855227 -0.640157 -0.397003 0.561476 -0.49866 -0.156825 2.34501 -0.812518 -0.215099 1.37959 -0.613511 -0.361013 1.08301 -0.563927 -0.212926 1.20418 -0.407119 -0.206857 1.17784 -0.580392 -0.355945 0.996525 -0.517567 -0.23992 1.45335 -0.494899 0.0529575 1.14299 0.150735 0.00376345 0.362859 0.0205582 -0.0222086 3.52131 0.0879013 0.0778243 2.5328 0.0153084 0.229834 2.09178 0.135512 -0.326102 2.74846 -0.491099 -0.138248 2.44291 -0.17972 -0.185731 1.96272 -0.216811 -0.166977 3.45727 -0.20372 -0.169148 0.783865 -0.597186 -0.139866 0.376503 -0.186566 -0.0946932 0.977405 -0.688699 -0.0369611 0.970662 -0.302223 -0.0991139 0.600368 -0.218292 -0.162985 1.99057 -0.483684 -0.477115 2.31077 -1.30774 -0.823292 1.66695 -0.545577 -0.332682 1.97499 -0.484556 -0.270655 0.680693 -0.547659 -0.364996 0.52962 -0.496583 -0.272196 0.438199 -0.356068 -0.398215 1.29573 -0.802541 -0.122906 0.450263 -0.591808 -0.0521746 -0.121695 -0.107242 0.0118667 0.432594 0.0110973 3.54776e-06 -0.132205 0.0155293 -0.00287493 -0.17274 0.0138096 0.002929 -0.209411 0.0153393 -0.00224178 0.0779381 -0.00726236 -0.00377008 -0.072811 0.0106804 -0.00168776 -0.096894 0.0141552 -0.0719237 0.154695 -0.389453 -0.028845 -0.0575923 -0.147133 -0.0462337 -0.0805596 -0.131213 -0.088618 0.442448 -0.521601 -0.0272208 0.407369 -0.307842 -0.0619238 0.0628522 -0.202522 -0.0398471 0.104768 -0.220473 0.0041361 0.00175319 -0.0026902 0.00420767 -0.176067 0.019298 0.0102748 0.246809 -0.00501701 0.00517995 0.12882 -0.000626972 0.00107693 -0.0265271 -0.000190033 -0.154296 0.327583 -0.439826 -0.105014 0.144237 -0.206616 -0.0747213 -0.00746064 -0.170036 -0.0747611 0.26202 -0.235785 -0.284636 0.153986 -0.350057 -0.0545391 -0.168242 -0.0853731 -0.21634 0.0959333 -0.285585 -0.118336 0.0309976 -0.162016 -0.0773089 -0.0825862 -0.131071 -0.211635 0.379392 -0.528154 -0.26481 0.272739 -0.446178 -0.135646 0.0330415 -0.295871 -0.204316 0.217051 -0.367589 0.0051139 -0.262413 0.0129498 0.00334162 -0.305695 0.00577833 0.012242 -0.159463 0.00232943 0.00895432 -0.218791 0.0134417 0.00901555 -0.255356 0.0104681 -0.139325 -0.116127 -0.181263 -0.0506149 -0.211447 -0.0699813 -0.0480752 -0.250136 -0.0571532 -0.0710036 -0.150221 -0.102216 -0.108648 0.571208 -0.419938 -0.359773 0.530252 -0.447596 -0.201675 0.506267 -0.389538 -0.263975 0.40741 -0.346225 -0.30988 0.471745 -0.39897 -0.167339 0.928778 -0.302043 -0.136181 0.758796 -0.381259 -0.301646 0.828359 -0.419597 -0.239018 0.665029 -0.345875 -0.0880028 0.386679 -0.417924 -0.154155 0.0187175 -0.338064 -0.145256 0.0479652 -0.306807 -0.058666 0.10896 -0.353729 -0.250857 0.190401 -0.310148 -0.178222 -0.0332738 -0.291951 -0.169795 0.00528582 -0.273014 -0.162282 0.343028 -0.393133 -0.218509 0.272635 -0.355205 -0.196874 0.159543 -0.372896 -0.309258 0.180367 -0.364024 -0.167898 -0.067122 -0.277683 -0.279159 0.204043 -0.344875 -0.298061 0.197355 -0.360466 -0.231068 0.0695389 -0.334837 -0.187808 0.394545 -0.455744 -0.276572 0.32151 -0.440746 -0.203651 0.14822 -0.396443 -0.248682 0.304486 -0.401762 -0.180513 -0.0375427 -0.238239 -0.133681 -0.175083 -0.196661 -0.123068 -0.230929 -0.135761 -0.147638 -0.115619 -0.215382 -0.232812 0.0175304 -0.273803 -0.185872 -0.0840348 -0.247664 -0.181781 -0.130194 -0.206159 -0.22411 -0.040076 -0.262529 -0.173746 -0.117354 -0.232584 -0.166958 -0.163998 -0.1905 -0.236 -0.00570827 -0.278052 -0.110877 -0.2088 -0.163755 -0.0356865 -0.299972 -0.0396044 -0.108358 -0.23672 -0.136383 -0.100232 -0.261292 -0.1106 -0.0708726 -0.285124 -0.0785734 -0.193038 -0.0777361 -0.231173 -0.146014 -0.156062 -0.197714 -0.0985673 -0.22925 -0.115564 -0.140129 -0.198245 -0.160983 -0.130772 0.701247 -0.510397 -0.167596 0.825558 -0.597845 -0.28784 0.701999 -0.539204 -0.173103 0.958818 -0.475758 -0.047076 -0.0613884 -0.31078 -0.110244 -0.108742 -0.262243 -0.0496538 -0.00712865 -0.319607 -0.0815144 0.260869 -0.443567 -0.0641178 0.0888699 -0.400226 -0.115533 0.0585394 -0.372136 -0.133084 0.516114 -0.617538 -0.147447 -0.0145077 -0.326311 -0.0899782 0.249122 -0.51464 -0.0629915 0.0627388 -0.395706 -0.114411 0.0306479 -0.366689 -0.101304 0.453307 -0.490408 -0.121303 0.516681 -0.56865 -0.155379 0.212372 -0.446985 -0.0860064 0.262294 -0.482807 -0.228533 0.435018 -0.564013 -0.292656 0.316923 -0.464927 -0.201911 0.120465 -0.402821 -0.208769 0.433164 -0.516595 -0.0393424 -0.099089 -0.267188 -0.0358528 -0.202164 -0.078455 -0.0294052 -0.136576 -0.200608 -0.016912 -0.164107 -0.103631 -0.028764 -0.178853 -0.0946498 -0.0850209 0.205238 -0.487255 -0.0590355 0.0262959 -0.354276 -0.0797908 -0.0477034 -0.245813 -0.0489595 -0.0163452 -0.275806 -0.10663 -0.178872 -0.189473 -0.0388225 -0.229671 -0.0634017 -0.070927 -0.11646 -0.248869 -0.0937457 -0.145331 -0.220054 -0.0699648 -0.178434 -0.159628 -0.147491 0.148969 -0.433808 -0.128649 -0.0548937 -0.281875 -0.0972139 -0.0923596 -0.211124 -0.100831 -0.00847988 -0.323968 -0.198715 -0.00412079 -0.293237 -0.143275 -0.107462 -0.237757 -0.105274 -0.142881 -0.17255 -0.181027 0.075506 -0.369034 -0.0799234 -0.237167 -0.115369 -0.0392819 -0.255746 -0.0547432 -0.0382324 -0.278924 -0.0473766 -0.10337 -0.18862 -0.143805 -0.0427977 -0.277666 0.00210562 -0.178265 -0.207544 0.0636768 -0.107366 -0.163225 0.0103857 -0.231251 -0.147419 0.0873365 -0.314708 -0.0619943 0.0373807 -0.267425 -0.109352 0.101718 -0.203661 -0.137196 0.0234234 -0.276113 -0.0993056 0.0321789 -0.257169 -0.11976 0.0632625 -0.113255 -0.248225 0.00992543 -0.210275 -0.175885 0.022968 -0.198189 -0.188268 0.0457713 -0.0597384 -0.265743 0.00352518 -0.0804485 -0.229713 0.00636396 -0.144595 -0.219149 0.0319197 -0.154085 -0.20725 0.0157081 -0.188261 -0.188362 0.021169 -0.11308 -0.23942 0.0106079 -0.101346 -0.249924 0.0329299 -0.279334 -0.0466836 0.109412 -0.0802834 -0.233814 0.0370175 -0.198834 -0.181098 0.10171 -0.0997407 -0.180568 0.0212157 -0.0919033 -0.205003 0.0309203 -0.170652 -0.182249 0.0626715 -0.0560418 -0.272227 0.00961202 -0.0696949 -0.254466 0.0227703 -0.131717 -0.235841 0.0463922 -0.0761563 -0.239963 0.0154084 -0.0486827 -0.292194 0.0205943 -0.0377155 -0.286765 0.0103323 -0.139364 -0.244482 0.103798 -0.147276 -0.0573304 0.0182367 -0.448549 0.270242 0.260702 -0.177131 0.859966 -0.142682 -0.509741 0.510163 0.360321 -0.677619 0.833816 0.188436 -0.534661 0.541684 0.385749 -0.730472 1.1764 0.0439098 -0.670772 0.838455 0.17673 -0.593008 0.700167 0.271193 -0.38325 0.149755 0.0563342 -0.601597 0.476245 0.120355 -0.538276 0.387755 0.21105 -0.215862 0.100815 0.0267487 -0.258824 0.352472 0.0298956 -0.441497 0.348604 0.167901 -0.47677 0.416791 0.0857317 -0.145054 2.23586 -0.108231 -0.343413 1.74784 0.853565 0.0144426 4.11764 0.11578 0.103086 1.83944 0.779732 0.222389 3.60565 0.384205 -0.0135889 1.37763 0.52898 0.111464 4.03508 0.185107 0.204958 3.36229 0.461217 0.331897 2.97388 1.3064 -0.362653 3.26418 0.0896675 -0.138905 3.02621 0.362484 -0.200772 2.71707 1.08408 -0.262635 3.40368 -0.00829885 -0.0382149 3.95433 0.0616982 -0.172709 3.74325 0.950279 -0.130217 3.73173 0.0854589 -0.590241 1.22323 0.193222 -0.227244 1.21427 0.526975 -0.619233 2.22574 0.163877 -0.120841 3.59047 0.329511 -0.212979 1.90556 0.460705 -0.30599 2.15452 -0.156613 -1.5824 2.1109 0.45396 -0.678771 2.2579 1.4698 -0.54726 2.46994 0.426689 -0.43429 0.549163 0.501847 -0.204703 0.807024 0.632451 -0.584895 1.03183 0.333611 -0.539808 0.810678 0.470571 -0.396559 0.995206 0.504042 -0.326572 2.31297 0.956056 -0.477712 0.747271 0.434119 -0.469172 1.37468 0.673257 -0.820282 1.37078 0.467826 -0.569771 1.15885 0.180162 -0.160523 0.776237 0.397494 0.0219047 1.96544 0.299796 -0.0353959 0.832068 0.431607 -0.00987804 0.869261 0.130012 -0.00610141 0.654364 0.307719 -0.046429 1.4004 0.214364 -0.0476667 1.16172 0.162766 -0.04123 1.05226 0.314756 -0.425559 1.21396 0.17869 -0.218102 1.08684 0.156939 -0.200147 0.969561 0.29642 -0.522476 1.56964 0.195335 -0.371928 1.69774 0.213909 -0.269571 1.23397 0.385246 -0.301938 1.36068 0.20125 -0.0255616 0.891496 0.602128 -0.0109142 0.602091 0.459587 -0.0337777 1.46747 0.451808 -0.0321034 1.22398 0.588897 -0.0334382 1.02149 0.552867 -0.449729 1.26857 0.369212 -0.225996 1.15487 0.554095 -0.205125 0.981194 0.496907 -0.276124 1.42092 0.425746 -0.383422 0.550203 0.458581 -0.112042 0.572583 0.424348 -0.308341 0.72439 0.532484 -0.177064 0.852396 0.584164 -0.132153 0.728668 0.506725 -0.530762 0.98878 0.329599 -0.466736 0.77639 0.421933 -0.313472 0.856799 0.423907 -0.382121 1.00772 0.494055 -0.294373 0.331145 0.440553 -0.054424 0.115928 0.34343 -0.021123 0.573996 0.606956 -0.000688297 0.122811 0.347484 -0.00179553 0.341414 0.353462 -0.00330757 0.112302 0.315224 -0.00740522 0.530963 0.501705 -0.00168851 0.414784 0.424884 0.000306856 0.248159 0.392199 -0.193485 0.421722 0.445391 -0.0852988 0.395982 0.412924 -0.0663958 0.241874 0.385545 -0.238716 0.454239 0.525708 -0.128383 0.538566 0.581141 -0.0720403 0.275965 0.443765 -0.100382 0.494894 0.481869 -0.189168 0.198997 0.169835 -0.405367 0.323304 0.370516 -0.25306 0.606566 0.240889 -0.20947 0.403211 0.181032 -0.403507 0.440181 0.287462 -0.194291 0.0570167 0.051587 -0.200515 0.152837 0.11904 -0.362944 0.213959 0.206639 -0.23331 0.270381 0.0901277 0.0338312 1.13966 0.646064 -0.0140498 0.787024 0.704033 0.0916933 3.55599 0.436051 0.0825449 2.6565 0.352535 0.275631 3.0328 0.906461 -0.28935 2.88013 0.402928 -0.0463764 2.45014 0.302234 -0.115033 2.71355 0.778104 -0.01935 3.32224 0.309356 -0.171503 0.375498 0.220208 -0.180102 0.73048 0.635771 -0.126544 0.635394 0.382047 -0.018785 1.01272 0.707166 -0.10653 0.847136 0.649456 -0.196815 1.6027 0.215319 -0.637007 1.07498 0.382877 -0.54527 2.67987 0.729981 -0.236336 1.95544 0.270558 -0.308482 0.407168 0.377413 -0.406051 0.497938 0.488349 -0.303609 0.630559 0.53804 -0.492295 0.931341 0.507054 -0.128305 0.147191 0.202731 -0.0675881 0.0449345 0.368228 -0.00339944 0.483623 0.29114 -0.0148414 0.065557 0.387489 -0.00411645 -0.151223 0.128276 -0.004813 -0.0802466 0.292727 -0.00709491 0.112395 0.217813 -0.00836986 -0.0525036 0.177483 -0.0135057 -0.00628903 0.320515 -0.0804016 0.0576188 0.187554 -0.03555 -0.0585418 0.166641 -0.0616517 -0.013193 0.296347 -0.105273 0.284384 0.247948 -0.0613348 0.373546 0.258806 -0.0918352 0.159565 0.393643 -0.0575573 0.0978015 0.211072 -0.021708 0.511729 0.676052 -0.00578351 0.103545 0.412592 -0.0116702 0.453473 0.500751 -0.0199652 0.490986 0.649445 -0.0144197 0.261655 0.509233 -0.188409 0.309084 0.431988 -0.135506 0.451869 0.613331 -0.0992415 0.229406 0.489056 -0.113258 0.399407 0.474999 -0.314407 0.314334 0.472261 -0.0641615 0.0818584 0.397654 -0.252675 0.415732 0.579007 -0.14757 0.492801 0.649434 -0.0891838 0.258935 0.527171 -0.227617 0.19855 0.353309 -0.288618 0.264538 0.443439 -0.158654 0.163529 0.439139 -0.233678 0.373851 0.542403 -0.0025763 -0.0130762 0.324747 -0.00274724 0.0267337 0.2962 -0.00814484 0.301309 0.536328 -0.00256191 0.117646 0.408824 -0.000261447 0.128207 0.377286 -0.162964 0.227292 0.463636 -0.0615844 0.103829 0.398624 -0.0570657 0.117206 0.376026 -0.0855975 0.278411 0.509919 -0.398501 0.0651456 0.0515086 -0.470599 0.301176 0.282718 -0.507229 0.252894 0.0741608 -0.631517 0.513383 0.128565 -0.569526 0.431381 0.222623 -0.276694 -0.0225119 0.038689 -0.360864 0.022586 0.046985 -0.42817 0.148264 0.14086 -0.478697 0.206343 0.0755134 -0.400106 0.0927062 0.054944 -0.353815 0.273948 0.211177 -0.348926 0.46087 0.0833892 -0.296507 0.341814 0.218881 -0.343911 0.207073 0.0610626 -0.3526 0.11303 0.0499258 -0.444731 0.261908 0.0710225 -0.418739 0.394643 0.0799354 -0.390283 0.340966 0.155374 -0.607386 0.815453 0.150679 -0.347479 0.413085 0.256281 -0.512911 0.711366 0.120239 -0.421909 0.573444 0.0993241 -0.391833 0.507551 0.192146 -0.483572 0.265588 0.0740839 -0.57749 0.513028 0.109977 -0.452515 0.395655 0.178002 -0.490038 0.455429 0.0930069 -0.3848 0.359286 0.375898 -0.299466 0.306126 0.293416 -0.556732 0.707636 0.270285 -0.477468 0.535963 0.350562 -0.407955 0.487607 0.297877 -0.449416 0.220276 0.145794 -0.449967 0.322615 0.266931 -0.403461 0.307588 0.238631 -0.520962 0.433935 0.199425 -0.309037 0.592086 0.0982442 -0.106283 0.604351 0.30161 -0.233586 0.711174 0.108188 -0.12957 0.810067 0.11951 -0.117597 0.732239 0.2255 -0.485932 0.969926 0.151262 -0.39285 0.758928 0.120331 -0.292288 0.831031 0.267581 -0.319278 0.937604 0.141007 -0.221337 0.341314 0.290834 -0.086943 0.458425 0.342968 -0.29005 0.530113 0.188263 -0.258048 0.44063 0.253993 -0.194887 0.531925 0.285384 -0.441676 0.840397 0.284622 -0.312307 0.546785 0.304382 -0.248519 0.675837 0.351018 -0.358291 0.669579 0.229269 -0.306633 0.483325 0.397953 -0.260694 0.40988 0.339652 -0.2005 0.506892 0.387634 -0.374481 0.669235 0.360409 -0.189464 0.235564 0.301561 -0.0528713 0.10715 0.309434 -0.138884 0.288195 0.33066 -0.0757109 0.327972 0.348848 -0.0646651 0.208783 0.336265 -0.249163 0.312236 0.39265 -0.215794 0.278529 0.347471 -0.128636 0.208899 0.364571 -0.161253 0.350284 0.38458 -0.28437 -0.0642501 0.162755 -0.3732 0.180924 0.291561 -0.373711 0.0336867 0.105474 -0.329796 -0.0130334 0.141569 -0.396239 0.121318 0.196596 -0.252379 -0.0529992 0.0669465 -0.291035 -0.0554915 0.122055 -0.35885 0.0780896 0.175155 -0.331052 -0.0109301 0.0929482 -0.306644 0.0535907 0.138126 -0.294753 -0.0291497 0.170363 -0.308971 0.194885 0.24511 -0.271377 0.01137 0.163669 -0.376169 0.0631393 0.107897 -0.338922 0.0207131 0.14788 -0.375143 0.162598 0.189171 -0.338321 0.0763725 0.224218 -0.367327 0.201638 0.290869 -0.34446 0.208619 0.272303 -0.397002 0.151468 0.197957 -0.247125 -0.0832587 0.17958 -0.181231 -0.0274672 0.233103 -0.169731 -0.107514 0.166893 -0.235565 -0.0311531 0.175156 -0.223602 0.175606 0.267884 -0.157189 0.0268615 0.247074 -0.232712 0.0398626 0.196766 -0.273197 0.0228721 0.226227 -0.262522 0.112643 0.2562 -0.218639 0.0359192 0.250693 -0.300874 0.206033 0.35847 -0.168293 0.017093 0.268393 -0.279324 0.208581 0.337375 -0.251553 0.197405 0.303662 -0.207049 0.0999515 0.293098 -0.278593 -0.00220329 0.230429 -0.296118 0.0947497 0.290064 -0.232255 0.0229268 0.267131 -0.285906 0.110325 0.278785 -0.106286 -0.00643196 0.240815 -0.0421478 0.0267001 0.269767 -0.158887 0.141244 0.294632 -0.131037 0.0592244 0.272746 -0.0954803 0.0878859 0.294485 -0.193822 0.165193 0.36613 -0.142191 0.0584983 0.300577 -0.104534 0.094382 0.327988 -0.177074 0.158944 0.332115 -0.102115 -0.171245 0.052419 -0.351164 0.147199 0.262963 -0.130159 -0.0818597 0.0775665 -0.161779 0.0391121 0.118875 -0.288416 0.0939134 0.210326 -0.136352 -0.0840179 0.0325521 -0.119502 -0.125113 0.0432046 -0.283289 0.0336804 0.129071 -0.160253 -0.00785383 0.0681087 -0.0829315 -0.216199 0.0546868 -0.15205 -0.152617 0.196987 -0.046454 -0.230022 0.0770719 -0.109168 -0.172783 0.1962 -0.0465354 -0.286572 0.0514956 -0.0540296 -0.287833 0.045691 -0.0784682 -0.207123 0.0694953 -0.0643013 -0.214006 0.0773931 -0.113599 -0.188411 0.145781 -0.127697 0.0363151 0.14984 -0.149702 -0.099472 0.244213 -0.0920448 -0.0806358 0.122876 -0.0648893 -0.169048 0.0982147 -0.115106 -0.138743 0.183528 -0.100911 -0.149713 0.0759519 -0.120466 -0.0641557 0.109048 -0.155837 -0.116798 0.174763 -0.0867786 -0.148552 0.0925653 -0.309798 0.19021 0.362336 -0.172099 -0.0585277 0.280352 -0.230353 0.0843196 0.275051 -0.289904 0.147866 0.339668 -0.207179 0.00476285 0.295312 -0.182672 -0.117862 0.143739 -0.271738 0.0264899 0.255896 -0.204241 -0.0746645 0.231094 -0.212717 -0.0243973 0.200298 -0.0421121 -0.20168 0.0939954 -0.0414419 -0.0886305 0.279286 -0.0329978 -0.177381 0.106782 -0.0190808 -0.158305 0.118801 -0.0321715 -0.127571 0.213252 -0.0892369 -0.00786859 0.15558 -0.0619743 -0.12286 0.121088 -0.0872982 -0.0450593 0.261991 -0.0507423 -0.0832279 0.142023 -0.110396 -0.101437 0.264136 -0.0446358 -0.0506949 0.310755 -0.0726314 -0.175125 0.170059 -0.095504 -0.139538 0.227838 -0.0734626 -0.10911 0.256279 -0.155261 0.0353216 0.284609 -0.134542 -0.0446903 0.289183 -0.107336 0.00501811 0.333383 -0.105909 -0.0885965 0.22043 -0.206614 0.13039 0.394702 -0.148762 -0.00535992 0.324453 -0.115208 0.0451563 0.370083 -0.191273 0.0878306 0.362679 -0.116641 -0.067939 0.275793 -0.0458569 0.0207832 0.294005 -0.086203 -0.0386338 0.300748 -0.047271 -0.0190743 0.318964 -0.0488282 0.0055149 0.312908 -0.208631 0.156343 0.390896 -0.153504 0.0273265 0.335186 -0.110341 0.0898424 0.356273 -0.115139 0.0714312 0.374299 -0.188215 -0.142339 0.102794 -0.247462 -0.105555 0.140015 -0.296722 0.000993979 0.190984 -0.219136 -0.0944012 0.0886963 -0.13317 -0.237874 0.123635 -0.236044 -0.118759 0.169247 -0.177364 -0.114089 0.230835 -0.153792 -0.205375 0.147912 -0.15108 -0.190623 0.103923 -0.204536 -0.155612 0.144481 -0.189431 -0.142726 0.180322 -0.270875 -0.0364183 0.222353 -0.293571 0.0657074 0.282066 -0.230942 -0.0331735 0.263296 -0.239378 -0.0766236 0.192598 -0.167035 -0.16974 0.163588 -0.137571 -0.101467 0.244386 -0.136094 -0.0481074 0.235586 -0.144053 -0.169876 0.175297 -0.227358 -0.0711134 0.222053 -0.186676 -0.0795108 0.243881 -0.186116 -0.0509442 0.242238 -0.233021 0.0794642 0.32873 -0.178969 -0.0243702 0.289875 -0.176719 0.000896999 0.284901 -0.237951 -0.00040868 0.272689 -0.117831 -0.0400349 0.273235 -0.11374 -0.0203145 0.259756 -0.0832096 0.0039812 0.280476 -0.1515 0.0487407 0.323535 0.204064 3.95531 0.204063 0.587962 0.99095 0.587961 0.631324 0.966134 0.0962387 0.464087 0.458183 0.358803 0.616761 0.784401 0.13923 0.514927 0.540505 0.424548 0.631325 0.820067 0.0801324 0.657926 0.73204 0.1318 0.544324 0.593492 0.2636 1.24554 3.9288 0.582752 0.682767 1.57352 0.25706 0.693073 1.34253 0.59746 0.492197 3.41816 0.239309 0.458608 2.45628 0.202766 0.680691 1.8523 0.725584 0.825582 2.80667 0.323211 0.273306 0.430582 0.0563082 0.305328 -0.0256909 0.137904 0.12453 -0.156906 0.0141542 0.241372 -0.132654 0.0925692 0.312801 -0.0472624 0.0417349 0.262444 -0.0966504 0.105279 0.223765 -0.126318 0.0275246 0.290337 -0.0859589 0.0362603 0.273301 -0.103302 0.0698 0.393481 0.157787 0.0631476 0.37924 0.0572759 0.0535881 0.351239 0.0237309 0.101556 0.208076 0.0923472 0.0346826 0.174026 -0.0621922 0.0215921 0.287683 -0.0453833 0.0801809 0.309958 -0.0177549 0.040471 0.66154 0.483573 0.104043 0.331761 0.0138499 0.147061 0.547127 0.271187 0.081507 0.401628 0.0956833 0.057864 0.373514 0.064149 0.112148 0.486376 0.404694 0.0772445 0.63566 0.463575 0.101871 0.456909 0.191235 0.143498 0.491173 0.239221 0.0726025 0.421451 0.208911 0.331277 0.277525 -0.0460611 0.169897 0.620874 0.412907 0.209056 0.522478 0.307562 0.30103 0.445794 0.147204 0.202946 0.414449 0.295004 0.149299 0.47905 0.263517 0.271277 0.395588 0.103178 0.192132 0.553284 0.357049 0.191297 0.597738 0.555834 0.103098 0.295522 0.0550726 0.135551 0.317617 -0.0199705 0.0422007 0.25494 -0.0164047 0.10973 0.270073 0.0257484 0.0368315 0.242883 -0.00655575 0.10308 0.309615 0.00617176 0.0389491 0.290122 0.0216662 0.0380444 0.276051 0.00835844 0.077123 0.44687 0.283856 0.0736783 0.340082 0.113433 0.0496395 0.320847 0.0886964 0.0988498 0.530151 0.287055 0.0782192 0.397357 0.106291 0.0580911 0.343203 0.0911945 0.106915 0.369789 0.119398 0.0555747 0.237648 -0.104771 0.131458 0.231161 -0.046019 0.130983 0.300019 -0.0399656 0.082892 0.270358 -0.0692169 0.113016 0.267679 -0.0406571 0.114191 0.494466 0.238952 0.150936 0.332767 0.0290279 0.149426 0.315124 0.0498836 0.144712 0.372937 0.0763518 0.112611 0.394949 0.248181 0.325048 0.26318 0.0127062 0.160455 0.361335 0.0859373 0.235713 0.289071 -0.0232364 0.173317 0.276216 -0.001111 0.167964 0.556818 0.488013 0.200695 0.483317 0.379358 0.283211 0.374065 0.182602 0.183588 0.441461 0.171726 0.202673 0.30918 0.123183 0.30918 0.168704 -0.103901 0.168703 0.204753 -0.136428 0.140444 0.153075 -0.133192 0.140064 0.197718 -0.0571189 0.136071 0.148309 -0.107544 0.134665 0.209092 -0.105069 0.146022 0.204319 -0.0764157 0.142499 0.17871 -0.104698 0.145078 0.266179 0.0295629 0.220043 0.232151 -0.0273126 0.173489 0.198866 -0.0683205 0.1736 0.290741 0.00784461 0.231926 0.243243 -0.0776956 0.177957 0.205378 -0.0959977 0.177316 0.239911 -0.0496254 0.178155 0.167303 0.140628 0.167302 0.39057 0.334247 0.39057 0.335786 0.545376 0.129965 0.228199 0.336904 0.147145 0.354039 0.395109 0.245201 0.727896 2.91886 0.727895 0.234922 0.961714 0.234921 0.509583 1.13849 0.509582 0.443124 1.79748 0.508831 0.0904833 -0.223049 0.044183 0.200566 -0.168771 0.107521 0.114947 -0.170622 0.0274262 0.103197 -0.195542 0.0375929 0.185312 -0.167399 0.0690139 0.196862 0.0517719 0.0684943 0.135887 -0.120952 0.0581901 0.242554 -0.087172 0.109914 0.159526 -0.0859467 0.0417373 0.165689 0.0129202 0.121405 0.251819 -0.0856009 0.155085 0.132501 -0.0676652 0.0882696 0.112788 -0.157356 0.0620767 0.195321 -0.127963 0.119789 0.247788 0.246951 0.0947019 0.20891 0.1404 0.120219 0.307666 0.0308906 0.161819 0.163425 -0.0123258 0.0858578 0.309955 0.0630391 0.218494 0.386208 0.149512 0.288264 0.328979 0.0218093 0.210672 0.363351 0.176809 0.201866 0.121775 -0.0740613 0.121774 0.129168 -0.229652 0.129168 0.0742577 -0.251587 0.0463568 0.111884 -0.258174 0.102456 0.0357678 -0.313269 0.0357672 0.0901481 -0.276181 0.0901475 0.0590888 -0.277439 0.0449402 0.0463668 -0.299312 0.0402407 0.0824291 -0.282155 0.0737708 0.0813646 -0.194415 0.0813639 0.0537016 -0.275428 0.0537009 0.0965803 -0.255581 0.0965796 0.103575 -0.139144 0.0885898 0.0907581 -0.201251 0.0657201 0.122721 -0.21803 0.108469 0.0714093 -0.242551 0.0625563 0.192686 -0.16893 0.128801 0.133594 -0.228641 0.123762 0.126722 -0.228554 0.0821927 0.168285 -0.201096 0.111054 0.138379 -0.232702 0.109435 0.201932 -0.109581 0.158082 0.204747 -0.140435 0.148514 0.164705 -0.188977 0.143274 0.158364 -0.174853 0.114345 0.319385 0.0907995 0.319384 0.151994 -0.197538 0.151993 0.290183 -0.0168067 0.222842 0.233734 -0.103615 0.169074 0.187101 -0.155752 0.163765 0.227776 -0.039141 0.227775 0.291997 0.0397183 0.291996 0.193426 -0.132169 0.193425 0.265307 -0.0606335 0.204249 0.1214 -0.217256 0.121399 0.128614 -0.157589 0.128614 0.174943 -0.166682 0.140526 0.145718 -0.195969 0.135213 0.152972 -0.163827 0.141739 0.22422 -0.0674902 0.22422 0.16594 -0.165876 0.165939 0.170264 -0.134734 0.170263 0.201755 -0.125048 0.174992 0.308375 3.42951 0.308374 0.463288 0.75109 0.463287 0.445651 1.85025 0.172875 0.525641 1.25835 0.164014 0.49466 0.980249 0.334176 0.396431 3.94096 0.39643 0.526918 3.42747 0.526917 0.905145 1.95497 0.905144 1.27026 2.75549 0.483587 0.289218 1.86524 0.289218 0.331097 0.588775 0.331097 0.128426 0.854104 0.128425 0.248042 0.482592 0.248042 0.345628 0.465497 0.0900468 0.286984 0.340605 0.212474 0.229742 0.78039 0.12437 0.298344 0.639316 0.107319 0.274203 0.587994 0.196559 0.40022 1.22576 0.194625 0.423996 0.81165 0.13294 0.387537 0.728824 0.247969 0.205809 1.3252 0.205808 0.165801 1.13297 0.1658 0.286291 0.92328 0.28629 0.30723 1.01955 0.152789 0.588782 0.856687 0.129642 0.369581 0.420302 0.261886 0.534579 0.75094 0.124599 0.456461 0.580731 0.106173 0.422506 0.517244 0.20115 0.433204 1.41438 0.196303 0.577615 1.18818 0.171992 0.487646 0.882788 0.296578 0.532805 0.969979 0.151879 0.406489 0.42825 0.406488 0.299885 0.299412 0.299884 0.542663 0.770524 0.25979 0.477973 0.598715 0.368245 0.427447 0.546478 0.304217 0.376013 1.1954 0.376012 0.445784 0.817706 0.445783 0.397982 0.712652 0.397981 0.511232 0.985641 0.315935 0.344458 0.326689 0.0704487 0.275605 0.0534816 0.126191 0.333952 0.205302 0.053466 0.310324 0.102429 0.0435472 0.297741 0.0824567 0.0887841 0.489958 0.517247 0.0958437 0.413109 0.395776 0.0839455 0.358925 0.19832 0.125643 0.383605 0.236325 0.0655748 0.257414 0.161739 0.212722 0.249596 0.0198346 0.151098 0.320323 0.29141 0.136025 0.291888 0.232534 0.18321 0.287772 0.134621 0.153903 0.450224 0.459889 0.183167 0.341293 0.277084 0.210563 0.32473 0.151613 0.169651 0.385215 0.349931 0.160603 0.330855 0.249986 0.280864 0.295416 0.194462 0.24365 0.283943 0.0920969 0.196685 0.401951 0.369938 0.242907 0.226046 0.0984272 0.226045 0.16198 -0.0802997 0.161979 0.226635 0.0378891 0.197041 0.219814 -0.0163866 0.164662 0.191102 -0.0498241 0.167269 0.276793 0.13666 0.276793 0.249543 0.11121 0.249542 0.207215 -0.0183635 0.207214 0.244515 0.0344065 0.208696 0.139231 0.784401 0.61676 0.424549 0.540505 0.514926 0.172876 1.85025 0.44565 0.164015 1.25835 0.52564 0.334177 0.980249 0.49466 0.582753 3.9288 1.24554 0.257061 1.57352 0.682766 0.597461 1.34253 0.693072 0.483588 2.75549 1.27026 0.0900476 0.465497 0.345627 0.212475 0.340605 0.286983 0.124371 0.78039 0.229741 0.10732 0.639316 0.298343 0.19656 0.587994 0.274202 0.194625 1.22576 0.400219 0.132941 0.81165 0.423996 0.24797 0.728824 0.387536 0.15279 1.01955 0.307229 0.129643 0.856687 0.588781 0.261887 0.420302 0.36958 0.1246 0.75094 0.534578 0.106174 0.580731 0.45646 0.201151 0.517244 0.422506 0.196304 1.41438 0.433203 0.171993 1.18818 0.577614 0.296579 0.882788 0.487645 0.15188 0.96998 0.532804 0.259791 0.770524 0.542662 0.368246 0.598715 0.477972 0.304218 0.546478 0.427446 0.315936 0.985641 0.511231 0.103099 0.555834 0.597737 0.135552 0.0550726 0.295521 0.0704495 0.326689 0.344457 0.126192 0.0534816 0.275604 0.0368321 0.0257485 0.270073 0.10308 -0.00655574 0.242882 0.0534667 0.205303 0.333951 0.0435478 0.10243 0.310324 0.0887847 0.0824568 0.29774 0.0736791 0.283856 0.446869 0.0496402 0.113433 0.340081 0.0988504 0.0886964 0.320847 0.0958445 0.517247 0.489957 0.0839463 0.395777 0.413108 0.125644 0.19832 0.358925 0.0655755 0.236325 0.383604 0.212723 0.161739 0.257413 0.151098 0.0198346 0.249595 0.136025 0.29141 0.320322 0.183211 0.232534 0.291887 0.153904 0.134621 0.287771 0.183168 0.459889 0.450223 0.210564 0.277084 0.341292 0.169652 0.151613 0.324729 0.160604 0.349931 0.385214 0.325049 0.248181 0.394948 0.160455 0.0127062 0.26318 0.280865 0.249986 0.330854 0.243651 0.194462 0.295415 0.196686 0.0920969 0.283942 0.200695 0.488013 0.556817 0.283211 0.379358 0.483316 0.183588 0.182602 0.374064 0.242908 0.369939 0.40195 0.136072 -0.0571189 0.197718 0.134666 -0.107544 0.148308 0.197041 0.0378891 0.226635 0.164663 -0.0163866 0.219814 0.167269 -0.0498242 0.191101 0.220043 0.0295629 0.266178 0.17349 -0.0273126 0.23215 0.173601 -0.0683205 0.198865 0.208697 0.0344065 0.244515 0.0962393 0.966133 0.631323 0.358804 0.458183 0.464086 0.129966 0.545376 0.335785 0.147146 0.336904 0.228199 0.245202 0.395109 0.354038 0.23931 3.41816 0.492196 0.202767 2.45628 0.458607 0.725585 1.8523 0.68069 0.508832 1.79748 0.443123 0.056309 0.430582 0.273305 0.137905 -0.0256908 0.305327 0.0141549 -0.156906 0.124529 0.0925699 -0.132654 0.241371 0.0441837 -0.223048 0.0904826 0.107522 -0.168771 0.200565 0.0274269 -0.170622 0.114947 0.0375935 -0.195542 0.103197 0.0690146 -0.167399 0.185311 0.0684951 0.051772 0.196861 0.0581908 -0.120952 0.135886 0.109915 -0.0871719 0.242553 0.0346834 0.0923471 0.208075 0.0215929 -0.0621922 0.174025 0.0801816 -0.0453833 0.287683 0.0417381 -0.0859467 0.159525 0.121406 0.0129202 0.165688 0.155086 -0.0856009 0.251818 0.0882704 -0.0676652 0.132501 0.0620774 -0.157356 0.112788 0.119789 -0.127963 0.19532 0.0947027 0.246951 0.247787 0.12022 0.1404 0.20891 0.16182 0.0308906 0.307666 0.0858586 -0.0123258 0.163424 0.331278 0.208911 0.42145 0.169898 -0.0460611 0.277524 0.218494 0.0630391 0.309954 0.288265 0.149512 0.386207 0.210673 0.0218093 0.328979 0.1493 0.295004 0.414448 0.271278 0.263517 0.479049 0.192133 0.103178 0.395587 0.201867 0.176809 0.36335 0.0463575 -0.251587 0.074257 0.102457 -0.258174 0.111883 0.0449409 -0.277439 0.0590881 0.0402413 -0.299312 0.0463661 0.0737715 -0.282155 0.0824285 0.0885906 -0.139144 0.103574 0.0657208 -0.201251 0.0907574 0.10847 -0.21803 0.12272 0.062557 -0.242551 0.0714086 0.128802 -0.16893 0.192685 0.123763 -0.228641 0.133593 0.0821935 -0.228554 0.126722 0.111055 -0.201096 0.168284 0.109436 -0.232702 0.138378 0.158083 -0.109581 0.201931 0.148515 -0.140435 0.204746 0.143275 -0.188977 0.164704 0.114346 -0.174853 0.158363 0.222843 -0.0168067 0.290182 0.169075 -0.103615 0.233734 0.163766 -0.155752 0.1871 0.20425 -0.0606335 0.265306 0.140445 -0.136428 0.204752 0.140064 -0.133192 0.153074 0.140527 -0.166682 0.174942 0.135213 -0.195969 0.145718 0.14174 -0.163827 0.152971 0.231926 0.00784461 0.29074 0.177957 -0.0776955 0.243242 0.177316 -0.0959978 0.205377 0.174993 -0.125048 0.201754 0.0801333 0.820067 0.631324 0.131801 0.73204 0.657926 0.263601 0.593492 0.544324 0.323212 2.80667 0.825581 0.0417356 -0.0472623 0.3128 0.10528 -0.0966503 0.262443 0.0275254 -0.126318 0.223764 0.0362611 -0.0859589 0.290336 0.0698008 -0.103302 0.273301 0.0631485 0.157787 0.39348 0.053589 0.0572759 0.379239 0.101556 0.0237309 0.351238 0.0404718 -0.0177549 0.309957 0.104044 0.483573 0.661539 0.147062 0.0138499 0.33176 0.0815079 0.271188 0.547126 0.0578648 0.0956834 0.401627 0.112149 0.064149 0.373513 0.0772454 0.404694 0.486375 0.101872 0.463575 0.635659 0.143499 0.191235 0.456908 0.0726034 0.239221 0.491172 0.209057 0.412907 0.620873 0.301031 0.307562 0.522477 0.202947 0.147204 0.445793 0.191298 0.357049 0.553283 0.0422015 -0.0199705 0.317616 0.10973 -0.0164047 0.254939 0.0389499 0.00617179 0.309615 0.0380451 0.0216663 0.290122 0.0771236 0.00835846 0.27605 0.0782201 0.287055 0.53015 0.0580919 0.106291 0.397356 0.106915 0.0911946 0.343203 0.0555755 0.119398 0.369789 0.131459 -0.104771 0.237648 0.130983 -0.046019 0.23116 0.0828928 -0.0399656 0.300018 0.113016 -0.0692168 0.270357 0.114191 -0.0406571 0.267678 0.150937 0.238952 0.494465 0.149427 0.029028 0.332767 0.144712 0.0498836 0.315123 0.112612 0.0763518 0.372936 0.235714 0.0859374 0.361334 0.173317 -0.0232363 0.28907 0.167965 -0.00111094 0.276215 0.202674 0.171726 0.44146 0.146022 -0.105069 0.209091 0.1425 -0.0764157 0.204318 0.145079 -0.104698 0.178709 0.178155 -0.0496253 0.23991 0.0862787 -0.082776 0.0904416 0.0608365 -0.0483328 0.138408 -0.0258584 -0.0386081 0.151074 0.0661263 -0.169983 0.066126 0.042624 -0.273337 0.0426236 -0.0893273 -0.125593 0.159703 -0.0150368 -0.297725 -0.0150372 -0.0811992 -0.253863 -0.0923818 0.0904418 -0.0827759 0.0862784 0.138408 -0.0483328 0.0608361 -0.126557 0.0226158 0.1965 -0.0486201 -0.292353 0.0214465 0.00382535 -0.270934 -0.00283272 -0.05791 -0.266755 0.00425481 -0.0575683 -0.271451 0.0113416 -0.187665 -0.187061 0.0220086 -0.0591865 -0.264223 -0.00186102 -0.115969 -0.24675 0.0131021 -0.0923813 -0.253863 -0.0811998 0.159378 -0.125713 -0.0901882 0.181811 -0.0696875 -0.0288472 0.194149 -0.0938711 -0.0309008 0.186532 -0.101253 -0.0557512 0.116213 -0.247054 -0.0164564 0.119813 -0.251445 -0.0622905 0.164387 -0.217993 -0.00248209 0.159638 -0.219955 -0.0230323 0.184851 -0.184632 -0.0279373 0.148606 -0.227313 -0.0417786 0.196299 -0.0915855 -0.00242719 0.200445 -0.121617 -0.0320483 -0.0657873 0.27628 -0.234976 -0.00605054 0.461355 -0.0882675 -0.0846045 0.44885 -0.0846051 -0.0795359 0.403219 -0.154457 -0.234976 0.27628 -0.0657879 -0.0882669 0.461355 -0.00605126 -0.154456 0.403219 -0.0795365 0.196264 0.0227495 -0.126452 0.214355 0.0260694 -0.0348893 0.239962 0.0770332 -0.0429292 0.229134 0.0652637 -0.076549 0.15386 0.211419 -0.209487 0.201688 0.357218 -0.0016093 0.197865 0.355525 -0.07128 0.14334 0.411276 -0.0806715 0.232474 0.284343 -0.0660316 0.185538 0.32141 -0.135158 0.242243 0.077355 -0.00354658 0.250799 0.139913 -0.0521383 0.149891 -0.0378802 -0.0255826 0.151074 -0.0386081 -0.0258588 0.196501 0.0226158 -0.126557 0.159703 -0.125593 -0.0893277 -0.0566299 -0.269964 -0.016878 -0.162872 -0.203997 -0.0648306 0.00273562 -0.284136 -0.000937882 -0.0480886 -0.28005 -0.0223378 -0.0449321 -0.287546 -0.0244684 -0.0991868 -0.260079 -0.0402347 0.00268279 -0.318574 0.000144532 -0.0228281 -0.314505 -0.0238972 -0.0310053 -0.307825 -0.0259176 -0.0922062 -0.253356 -0.0810916 -0.021006 -0.314535 -0.0208749 -0.0517117 -0.300604 -0.047295 0.15082 -0.226641 0.0353748 0.190231 -0.0986613 0.0502993 0.15926 -0.203718 0.0608586 0.137542 -0.236885 0.0492808 0.168311 -0.0823051 0.0693765 0.179019 -0.111445 0.0704705 0.164263 -0.122665 0.0850596 0.181868 -0.141277 0.0702091 0.104048 -0.131233 0.0961054 0.10818 -0.163068 0.0976299 0.126944 -0.150043 0.0989691 0.102621 -0.259731 0.0342159 0.0561485 -0.301616 0.0444378 0.123472 -0.24774 0.0598447 0.0626227 -0.283641 0.0576054 0.0771551 -0.283292 0.0637839 0.0909928 -0.255287 0.0789003 0.0922162 -0.275167 0.0664942 0.0916872 -0.169585 0.0906568 0.107563 -0.193565 0.0957242 -0.0806709 0.411276 0.14334 -0.209487 0.211419 0.15386 -0.0016087 0.357218 0.201687 -0.0712794 0.355525 0.197864 -0.066031 0.284343 0.232473 -0.135158 0.32141 0.185538 -0.00354607 0.0773551 0.242242 -0.0429286 0.0770333 0.239962 -0.0521376 0.139913 0.250799 -0.126452 0.0227496 0.196264 -0.0348888 0.0260696 0.214354 -0.0765485 0.0652638 0.229133 0.1852 0.310858 0.131505 0.231808 0.0670088 0.0715244 0.196285 0.210343 0.153687 0.16984 0.246909 0.169839 0.199132 0.0086158 0.0854129 0.216837 0.0486587 0.10066 0.200115 0.027899 0.121856 0.221824 0.0988104 0.118248 0.128296 -0.0625466 0.118382 0.139954 -0.0476356 0.139954 0.161557 -0.024477 0.141948 0.153687 0.210343 0.196285 0.131506 0.310858 0.1852 0.0854133 0.00861584 0.199132 0.10066 0.0486588 0.216837 0.071525 0.0670089 0.231807 0.121857 0.0278991 0.200115 0.118249 0.0988104 0.221824 0.118383 -0.0625466 0.128296 0.141949 -0.024477 0.161557 0.139463 -0.0476894 0.0608306 0.0904937 -0.0830626 0.0853818 0.022009 -0.187061 -0.187666 -0.00186054 -0.264223 -0.0591869 0.00425529 -0.266755 -0.0579104 0.0131025 -0.24675 -0.11597 0.0214469 -0.292353 -0.0486205 -0.00283223 -0.270934 0.00382485 0.0113421 -0.271451 -0.0575687 -0.0810912 -0.253356 -0.0922065 -0.0208746 -0.314535 -0.0210064 -0.0238968 -0.314505 -0.0228285 -0.0472946 -0.300604 -0.0517121 -0.0648302 -0.203997 -0.162873 -0.000937345 -0.284136 0.00273521 -0.0223373 -0.28005 -0.048089 -0.0168775 -0.269964 -0.0566303 -0.0244678 -0.287546 -0.0449326 -0.0402342 -0.260079 -0.0991871 0.000144983 -0.318575 0.00268235 -0.0259171 -0.307825 -0.0310058 -0.0147436 -0.297992 -0.0147439 -0.06229 -0.251445 0.119812 -0.00248148 -0.217993 0.164386 -0.0230317 -0.219955 0.159637 -0.0164559 -0.247054 0.116213 -0.0279367 -0.184632 0.18485 -0.0417781 -0.227313 0.148605 -0.00242669 -0.0915855 0.196299 -0.0309002 -0.093871 0.194149 -0.0320478 -0.121617 0.200444 -0.0901877 -0.125713 0.159377 -0.0288467 -0.0696875 0.181811 -0.0557507 -0.101253 0.186532 0.0598453 -0.24774 0.123472 0.0492813 -0.236885 0.137541 0.0342164 -0.259731 0.102621 0.0576058 -0.283641 0.0626222 0.0637844 -0.283292 0.0771546 0.0444383 -0.301616 0.056148 0.0789008 -0.255287 0.0909923 0.0664947 -0.275167 0.0922158 0.0906571 -0.169584 0.0916868 0.0976302 -0.163068 0.10818 0.0957247 -0.193565 0.107563 0.0608591 -0.203718 0.159259 0.0353753 -0.226641 0.15082 0.069377 -0.082305 0.168311 0.070471 -0.111445 0.179019 0.0502998 -0.0986613 0.190231 0.08506 -0.122665 0.164263 0.0702097 -0.141277 0.181867 0.0961058 -0.131233 0.104047 0.0989695 -0.150042 0.126943 0.0416597 -0.273614 0.0416593 0.065512 -0.16969 0.0655118 -0.0255823 -0.0378802 0.14989 0.060831 -0.0476894 0.139463 0.0853821 -0.0830625 0.0904934 + diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3dwithaxis.png b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3dwithaxis.png Binary files differnew file mode 100644 index 00000000000..641676cfd4d --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/risingdrop3dwithaxis.png diff --git a/Master/texmf-dist/doc/latex/pgfplots/plotdata/smithchart_data.dat b/Master/texmf-dist/doc/latex/pgfplots/plotdata/smithchart_data.dat new file mode 100644 index 00000000000..0bd16fb9d91 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/plotdata/smithchart_data.dat @@ -0,0 +1,201 @@ +0.78395 -0.40845 +0.78165 -0.41147 +0.77934 -0.41466 +0.77774 -0.41869 +0.77664 -0.42274 +0.77479 -0.4262 +0.77351 -0.43157 +0.77099 -0.43494 +0.7686 -0.4386 +0.76688 -0.44362 +0.76374 -0.44737 +0.76032 -0.4519 +0.75789 -0.45573 +0.75526 -0.46064 +0.75108 -0.4635 +0.74933 -0.46682 +0.74593 -0.47132 +0.74186 -0.476 +0.73976 -0.48052 +0.73586 -0.48495 +0.73195 -0.48899 +0.72894 -0.49371 +0.72496 -0.49819 +0.72147 -0.50343 +0.71745 -0.50742 +0.71321 -0.51345 +0.70918 -0.5174 +0.70448 -0.52151 +0.69899 -0.52708 +0.6949 -0.53197 +0.69122 -0.53812 +0.68591 -0.54129 +0.68155 -0.54783 +0.67645 -0.55354 +0.6724 -0.55881 +0.66645 -0.56233 +0.66089 -0.56799 +0.65509 -0.57374 +0.65096 -0.57768 +0.64476 -0.58369 +0.63846 -0.58822 +0.63153 -0.59302 +0.62622 -0.59941 +0.6187 -0.60404 +0.61272 -0.60735 +0.60753 -0.61228 +0.6005 -0.61733 +0.59408 -0.62406 +0.58691 -0.62928 +0.57872 -0.6344 +0.57202 -0.6388 +0.56527 -0.64426 +0.55794 -0.6498 +0.55067 -0.6546 +0.54337 -0.65805 +0.53695 -0.6641 +0.52825 -0.66723 +0.52109 -0.66984 +0.51419 -0.67411 +0.50621 -0.6788 +0.4984 -0.68219 +0.49189 -0.6865 +0.48263 -0.68999 +0.47555 -0.69495 +0.46772 -0.69769 +0.45873 -0.70069 +0.45101 -0.70451 +0.44518 -0.70966 +0.4355 -0.71151 +0.42664 -0.71508 +0.41978 -0.71727 +0.4107 -0.72093 +0.40312 -0.72332 +0.39675 -0.72517 +0.38711 -0.727 +0.37981 -0.72957 +0.37302 -0.72936 +0.36573 -0.73119 +0.35814 -0.73099 +0.35194 -0.73164 +0.3452 -0.73189 +0.33721 -0.73208 +0.3325 -0.73088 +0.32889 -0.73172 +0.32477 -0.73145 +0.3191 -0.73008 +0.31416 -0.7301 +0.31197 -0.72928 +0.30759 -0.72899 +0.30485 -0.72947 +0.30249 -0.73145 +0.30145 -0.73268 +0.29992 -0.73442 +0.29858 -0.73702 +0.29706 -0.74128 +0.29431 -0.74418 +0.29347 -0.7476 +0.29042 -0.75297 +0.28705 -0.75749 +0.28572 -0.75977 +0.28089 -0.76504 +0.27763 -0.768 +0.27332 -0.77261 +0.2683 -0.77649 +0.26521 -0.78043 +0.26191 -0.78401 +0.25629 -0.78877 +0.25006 -0.79254 +0.2439 -0.7957 +0.23651 -0.79998 +0.2317 -0.80254 +0.22465 -0.80563 +0.21842 -0.80893 +0.21162 -0.81033 +0.20428 -0.81449 +0.19798 -0.81521 +0.19119 -0.81589 +0.18624 -0.81545 +0.17889 -0.81556 +0.17311 -0.81544 +0.16737 -0.81462 +0.16209 -0.81398 +0.15674 -0.81433 +0.15082 -0.81487 +0.14599 -0.81515 +0.14109 -0.81315 +0.13585 -0.81331 +0.12861 -0.81116 +0.12218 -0.80962 +0.11604 -0.80785 +0.10951 -0.80735 +0.10382 -0.80552 +0.096305 -0.80533 +0.090966 -0.80247 +0.085856 -0.79991 +0.079806 -0.79877 +0.074081 -0.79594 +0.06851 -0.79191 +0.062524 -0.7896 +0.056191 -0.78655 +0.049907 -0.78363 +0.044379 -0.77955 +0.038231 -0.77654 +0.032841 -0.77204 +0.027977 -0.76849 +0.021199 -0.76421 +0.01462 -0.76116 +0.0078701 -0.75624 +0.00051921 -0.74869 +-0.0073556 -0.74336 +-0.014869 -0.7357 +-0.023077 -0.72898 +-0.02686 -0.72143 +-0.033676 -0.71371 +-0.038756 -0.70624 +-0.044389 -0.69599 +-0.050065 -0.68645 +-0.053116 -0.67502 +-0.056127 -0.66353 +-0.05737 -0.65302 +-0.057083 -0.643 +-0.057316 -0.63119 +-0.05481 -0.62067 +-0.049879 -0.60962 +-0.044578 -0.60079 +-0.037123 -0.59195 +-0.028835 -0.58642 +-0.020012 -0.58312 +-0.010839 -0.58178 +-0.0029084 -0.58392 +0.004376 -0.5892 +0.012155 -0.5962 +0.016133 -0.60579 +0.016604 -0.61785 +0.014435 -0.62774 +0.011662 -0.64187 +0.0053539 -0.65356 +-0.0053847 -0.66556 +-0.015504 -0.67866 +-0.029418 -0.68861 +-0.044567 -0.69777 +-0.063037 -0.70678 +-0.082112 -0.71394 +-0.10023 -0.71725 +-0.12144 -0.7193 +-0.14263 -0.72129 +-0.16489 -0.72027 +-0.18695 -0.71862 +-0.21021 -0.71395 +-0.23361 -0.70819 +-0.25601 -0.70151 +-0.27782 -0.69419 +-0.30083 -0.68306 +-0.32215 -0.67404 +-0.34383 -0.65943 +-0.36383 -0.64798 +-0.38309 -0.63265 +-0.40227 -0.61884 +-0.42055 -0.60301 +-0.43872 -0.58624 +-0.45369 -0.56954 diff --git a/Master/texmf-dist/doc/latex/pgfplots/todo.archive.txt b/Master/texmf-dist/doc/latex/pgfplots/todo.archive.txt new file mode 100644 index 00000000000..01760a95199 --- /dev/null +++ b/Master/texmf-dist/doc/latex/pgfplots/todo.archive.txt @@ -0,0 +1,1276 @@ +------------------------------------------------ +BUGS +------------------------------------------------ + ++ mark position clipping may fail: see + \begin{tikzpicture} + \begin{axis} + \addplot3[surf,shader=faceted, + scatter,mark=*, + samples=10,domain=0:1] + {x^2*y}; + \end{axis} +\end{tikzpicture} + in the manual (shader docs) + ++ patch plots: type rectangle & shader=interp & mesh input=patches doesn't work + correctly as it seems. + ++ \ref{} legends for 'surf' in unstable version do not work properly + ++ plot graphics braucht + every legend image post/.append style={sharp plot} ++ extra ticks need a scope to enable drawing options: + \begin{axis}[ + extra x ticks={0.7}, + extra x tick style={ + line width=3mm, + color=red, + tickwidth=3mm, % <-- only thing applied + }, + ] + \addplot coordinates { (0,0) (1,1) }; + \end{axis} + + ++ new coordmath framework is broken for log basis. + TODO: 1. the functions must be parameterized with A) the coordmath class *and* + B) the coordmathid. + For example 'pgfmath,x' and 'pgfmath,y'. Everything else doesn't work... + ++ \ref and detached legends/colorbars do NOT work with external library and + convert with system call. + -> provide special handling! + ++ providing 'thick' to linespecifications causes problems during the survey + phase: \pgfmathsetlength{} will use the FPU. ++ contour external: the \jobname dependend auto-file name will make problems + together with the external lib (the numbers won't be unique). + Perhaps I can fix that by using the external figure name instead? Or does that + already work? + ++ stack plots + log scale is wrong: it stacks visually, but that's more or less + meaningless. Try + ++ polar axes: + + \pgfplotspointouternormalvectorofaxis + is not good enough; it needs the coordinate on that axis to work. + -> IDEA: provide a further variable which fixes the 'v' direction of + that axis. + + axis lines should use the recently introduced framework for grid lines: + draw them as grid lines at upper/lower limits + -> will work automatically for polar axes. + ++ colormap={mymap}{[0.5cm] rgb(0cm)=(0,0,1); rgb(10cm)=(1,0,0); rgb(11cm)=(0,1,0) } + is ok, [1cm] is also ok. But [0.1cm] doesn't work and produces + Sorry, non-uniform colormaps are only partially imple mented, yet: the + provided points must be multiples of the mesh width h=2.84544p t. Perhaps it + helps to provide the mesh widths as argument as in {<name>}{[1cm] <color + arguments>}? + -> BTW: error message could be improved somehow! + + ++ plot handlers should be allowed to overwrite + \pgfplots@plothandler@unbounded@visualize@jump + --> mesh already does it. + ++ the 'enlarge x limits={abs=3}' key doesn't work: it increases the lower + limits, but it doesn't draw any tick labels (neither major nor minor) + ++ nodes near coords and ybar stacked do not work + ++ nodes near coords,ybar and a scale inside of nodes near coords doesn't work + \begin{tikzpicture} + \begin{axis}[ybar, width=\linewidth, xtick=data, font=\tiny, ymax=950, minor y tick num=1, nodes near coords, point meta=y-901, every node near coord/.append style={scale=0.7,anchor=south, inner xsep=0pt}, nodes near coords align={above}] + % VSM + \addplot+[mark=*] coordinates {(0,896) (1,700) (2,845) (3,834) (4,921) (5,921) (6,917)}; + % BM25 + \addplot+[mark=*] coordinates {(0,833) (1,641) (2,844) (3,820) (4,904) (5,919) (6,914)}; + % LM + \addplot+[mark=*] coordinates {(0,703) (1,601) (2,654) (3,661) (4,901) (5,904) (6,901)}; + \draw[gray, dashed] (axis cs:0, 901) -- (axis cs: 6, 901); + \end{axis} + \end{tikzpicture} + ++ portability of externalized \label commands: define \tikzifinpicture which + should be part of the external separate package (in which case it is always + false). ++ the 'colorbar sampled line' and 'colorbar left' styles are incompatible: + there are no tick lines. + +X bug in linux printer drivers: colorbar shadings are not interpolated + correctly, the interp shadings work (also the colormap sampled style). + Version: + Linux 2.6.24-26-generic #1 SMP Tue Dec 1 17:55:03 UTC 2009 x86_64 GNU/Linux + + ++ the colorbar with surf mode is too short; the 3D colorbar axis won't be scaled correctly + ++ the 'at' key appears to be broken. It happens if + - pgf 2.00 is used, + - at=(anode) is used where (anode) was originally in a different axis + ++ gnuplot compatibility is broken since gnuplot 4.4 changed its table format for + logscale. Excellent. + ++ the \pgfplots@ifgridlines@onorientedsurf@should@be@drawn#1#2 is WRONG. + It works ONLY for boxed axes. All others need special handling... + ++ table package: + using a non-trivial 'every table' style combined with + \pgfplotstabletypeset[begin table/.add={}{}] + yields a bug: the .add is invoked twice (since the 'every table' stuff is + invoked twice). + ++ in tick label reference: the example with \nicefrac has ymajorgrids, but + doesn't display them! Check! + ++ parametric gnuplot plots do not work correctly (see mail of Gabriel Lera) + -> require user interface method to set 'variable' and 'variable y' for this case. + Default should be 't' and 'u,v' ! + ++ the tick pos stuff works (puh!) + However, there is an inconsistency with the axis lines stuff: + 'axis lines=left,tick pos=right' + will yield almost the same effect as 'axis lines=right'. However, the + 'axislinesnum' still assumes it is at the left. + Thus, there are potentially some inconsistencies... + -> BUT THAT'S LOW PRIORITY + ++ tick align=outside doesn't seem to affect the ticklabel cs although it + probably should (tests in pgfplotstest.axislines.tex). + -> check also display styles for labels! + ++ manual: 'label style' and 'xticklabel style' are not auto-crossrefed + ++ extra ticks do not work with '3d box=complete' + ++ I had just a problem with 'log basis y=2' : the x axis also used basis 2, but minor ticks basis 10. + It was the second plot; the first had also log basis x=2 + -> the problem is the 'log basis ticks' style which changes 'log number + format code' globally for the axis. + ++ reversed axes: + + color bars can't be reversed; the shading disappears + + reversed axes and centered axis lines: + the label placement style is incompatible. + - axis lines=center + reversed axes: the tick labels are placed somewhat + too near the axis... see the test in alignment subsection of testcases + -> perhaps the "normal vector" points into the wrong direction? + -> It is the tick@offset computed in the tick label placement + routines. I have implemented special handling for this case, but I + do not really understand the problem. + FIXME + - tickpos is wrong + ++ coordinate filters for log axis are not as documented: the 'unbounded coords' key won't be processed correctly. + ++ axis line variations: they pose problems for + a) 3d axes + b) reversed axes. + + ++ The Adobe Reader crashes on p 68 of the manual (while Foxit shows and +prints without complaint). 27.11.2009 reported by J. Goebel + ++ check the old code with 'pgfplotsautoanchor' for tick labels. + Is that still up-to-date? NO + Perhaps it should be replaced with something better? YES + ++ recently, I used \pgfplots@command@to@string. But: for arguments like `\table' this yields `\table ' including a space. Check if that poses harm. + ++ the pretty printer appends '{}' to known csnames. ++ the pretty printer appends ')' to |(| ++ the xref to |scatter src| is broken... why? + ++ \thisrow inside of column creation does not respect aliases + ++ the \pgfplotsretval key is uses globally and locally. Fix that. + There is also \pgfplotslocretval which should be eliminated. + Better: use \pgfplotsretval for local ret vals and + \pgfplotsglobretval for global ones. Better still: avoid global return values if possible. + + ++ 3D and special axis lines doesn't work at all. + ++ sanitize 'plot file' by appending '0' coordinates at the end of the current line + ++ the 'z buffer=auto' key in every mesh is stupid. What if I don't want it!? + ++ allocate a \newread for input files to avoid compatibility problems with other packages. ++ scatter/pre mark styles should OVERWRITE the current setting instead of append. Provide additional keys with suffix '*' which provide the "append" feature. + ++ if view leads to ||e_i| == 0, this results in an error somewhere (infty + occurs) + +X change UI of ticklabel cs: provide an option 'ticklabel cs:[<interpreter>]<coord>,<dist>' which specifies how to understand "<coord>". Choices: + - 'display' + - 'rel coord' + - 'abs coord' + is that really useful ? + ++ plot3 table: the scanline detection does not always work (seems to need an empty line as last line) + ++ the \pgfplotsdeclareborderanchorforticklabelaxis does not work if someone changes the shape! The shape changes occur AFTER my command. + -> solution idea: implement some sort of "unknown shape handler"! + ++ 3D: very long labels are not completely correct: they may run into the axis. + ++ the 'check tick show thing doesn't work for non-boxed axes! + ++ BUG IN \jobname with " --->> IS INVALID ++ there is 'samples y' and 'variable y' but 'y domain'! + ++ ich habe gerade das Problem, dass ich fuer einen Plot nur eine + y Achse moechte. Ich habe "axis y line=right" gesetzt. Nur sobald + ich "axis x line=none" einfuege, verschwinden die Tickmarken an + der y Achse... + ++ provide a meaningful error message when mesh plots fail due to unbounded + coords - I don't want to waste time with checks. (could I optimize the + checks??) + ++ I have removed the 'surf' option from \addplot3 {...}; -> check it ! it + should be moved to some default style; maybe cycle list or so? + ++ the auto z buffer may lead to errors if cols and/or rows is empty. + ++ FPU and '<' operator didn't work!? + ++ the 'prepare@#1coord' doesn't check for unbounded coords. Besides, it appears + to be wrong - maybe I should rewrite it. + ++ one my recent changes leads to 'meta data 25.000' is unbounded for whatever + reasons. Furthermore, \addplot3 {x^2}; lead to a bunch or error messages. + ++ forget plot and legends do not work + ++ providing 'ybar stacked' to the axis and 'ybar' to each plot seems to cause + problems (see test case per Mail) + -> that's because the '\addplot' ybar can't distinguish between /tikz and + /pgfplots paths! + + To stay compatible, I need to make sure that \addplot[ybar] actually uses + \addplot[/tikz/ybar]. That's how it is documented. + ++ colorbar impl: + + determine correct height such that it has the same as its parent. + + determine all styles which need to be inherited. + + fix the style-restore routine! It eats too many '#' chars! + + ++ the 'plot table' detection of gnuplot files is buggy - it can fail for example + if there are 2 comment lines and 3 columns (with headers) + ++ the xtick=data feature doesn't check for double occurances. + ++ It appears the (new) placement of tick scale labels is wrong for 2d axes. + ++ the '[xyz]ticklabels' key does NOT work any longer! It fails if some of the + ticks fall outside of limits. + ++ the meta stuff is not sanitized: check for NaN or INF. + ++ z buffer=sort does not respect LOG axes properly! + ++ z buffer=auto should be added. + ++ table package and unbalanced columns appears to be buggy. + -> need use 'nan' + ++ I observed problems with the 'title' placement in 3D plots!? + ++ something is wrong with the log basis stuff. Did I mess something up!? + + fix this! For reasons of compatibility, it might suffice to modify the + clickable lib since the display of the plots is correct (base 10). Any + internal UI special cases might still rely on base e (and it might be more + efficient to rescale just tick labels!) + - document that special handling to reduce confusion! + ++ context incompatibility: \definecolor is defined differently in context, leading to bugs (occurs for 'mapped color') + ++ + \pgfplotsset{every axis/.append style={font=\footnotesize}, + tick label style={/pgf/number format/1000 sep=}, + xticklabel={\pgfkeys{/pgf/fpu}% + \pgfmathparse{round(exp(\tick))}% + \pgfmathprintnumber{\pgfmathresult}}} + + to see the real tick numbers in a semilogxaxis, but when I use the former + fake plot as the first of my plots, it behaves as if I hadn't used these + options. When written in any other position it works as expected. + + More specifically, this only happens when using xtick=data. If the ticks are + specified as a list, the bug doesn't show up. + ++ there is 'ticklabel dist' and 'label shift'. Use the same naming convention! + ++ 'shader=interp' still does not support 'ordering=colwise' + ++ 'view={0}{90}' does not set label styles correctly + ++ BUG: empty axes and one of my newer changes (bblowerleft) conflicts. + ++ the clickable lib output is shifted somehow (at least for log plots). It + appears it does not respect the new alignment stuff properly. + ++ the 3d labels still need a good initial style - and a user interface to set + it. + idea: 'every 3d axis' is a style which can set axis descriptions or tikz keys. + + all descriptions styles need to be set up before they are used. + + changes to these styles may only be done when the axis' dimension (d=2 or + d=3) is clear - and the associated initial styles are installed. Then, + modifications may be applied. + Idea: implement all that stuff when 'every axis' is used. But that has + '/tikz/' has default search path... + ++ I fear plot gnuplot may not reflect the latest changes - at least not for 3D! + + log basis + + plots R^1 -> R^3 (parametric) + + plots R^2 -> R^3 (parametric) + -> may require 'u' and 'v' + + using other variable names (see 'set dummy') + + ydomain is not set + ++ the \x, \y, \z etc. macros in the table expression plotter should be + eliminated! They pose name conflicts. + ++ the '/tikz/variable' key can't be provided as argument to an axis (missing + family) + ++ the tick scale labels need to be placed with 'ticklabel cs'. That's difficult, + but necessary. + + 2D + needs to be improved! + + 3D + ++ the color bar is an "axis description" -- but it can't be placed like other + axis descriptions! + + ++ I need a solution to rotate labels correctly and make alignment in a good way + -> probably the "sloped" method of pgf? + + ++ I fear the 'plot gnuplot[<opts>]' thing does not properly process <opts>. + ++ what happens if 'point meta [min,max]' is provided inside of \addplot? + ++ it appears the recent changes update the bounding box - disabling overlay for + tick labels + ++ the 'legend image code' is again buggy! Try ybar! This here is the reason: one + can't set draw/fill mode from within a scope! + \begin{tikzpicture} + \scope[fill=blue,draw=red] + \path (0,0) circle (10pt); + \endscope + \end{tikzpicture} + + ++ the 'x={(x1,x2)}' option(s) are buggy: the complete vector length needs to be + scaled by the datascaling routine, not the single components. + ++ ticklabel interval stuff doesn't work properly + ++ potential problem with stacked y bar and semilogyaxis, see bug report per Mail + ++ stacked plots do not sanitize the input arguments: it may happen that too few + (or too much) coordinates are given. + ++ axis y line=right, FAILS to produce correctly placed tick + labels -> only in manual!? + ++ ymin=0.9 is ok while ymin=.9 is not ok -- update number parser. + ++ legends are currently broken! + ++ the tick labels on axis boundaries are often missing. I suppose this is due to + rounding inaccuracies or '<' instead of '<='. check that! + ++ new alignment: origin anchors for unfinished axis is not updated. + +X perhaps the ASCIIHexEncode would be a useful addition for the pdftex driver of + surfshading as well...? + no, it isn't. pdf2ps still generates huge sampled postscript files. + ++ check for the @non@legend@options - I suppose they are deprecated now and + waste computation time. + ++ the new key processing which skips every /tikz option in \addplot might not be + correct - there are several plot related exceptions like /tikz/id etc which + SHOULD be processed. Make sure I have all of them. + Besides: what happens if someone uses /tikz/draw explicitly? I am not sure if + that hurts... ++ the recent search path construction WILL also set tikz options during + \addplot. + There won't be any paths during \addplot - but I am not sure if there can be + any scoping problems related to the graphics state. + -> that stuff produces problems with /tikz/ybar vs. /pgfplots/ybar! + + + ++ the view argument should be similar to gnuplot /matlab. I fear I have + exchanged some of the directions. + In matlab, the argument is '{yaw}{pitch}' instead of '{pitch}{yaw}' + Furthermore, the rotation axes are different. view={0}{0} in matlab shows + the x axis horizontally and the z axis vertically - the view direction is + (0,1,0) -- for me, this would be (0,0,1). + ++ pdf2ps still fails for interp shader - it has a limitcheck exception. Perhaps + the number of bits is too large for ps? + -> a very small stupid test with 8 bits per coordinate and 8 bits per cdata + worked + ++ clickable plot lib produces visual artefacts in acroread + -> the 'hidden' flag appears to be incompatible with figure environments!? + - fixed in recent hyperref drivers of pdftex; was actually a bug of hyperref + ++ the 'current axis' node is not defined until the first axis descriptions are + drawn. That should be fixed by defining the low-weight shape before processing + the stored path commands. + ++ The following fails: + \addplot+[ + black] plot coordinates { (0,0) (1,1) }; + ++ the \ref command should be \protect'ed in LaTeX captions + ++ the ticklable dist feature NEEDS anchors. + + ++ provide example for colormap changes - that should also verify the correctness + of the method + ++ provide sanity checking in scatter plots - for example missing explicit + scatter src. + ++ improve docs for scatter plots: + + 'only marks' is also a scatter plot! + ++ something with the table package appears to be buggy!? + ++ the plot table[] search path is not good - it should include /pgfplots + ++ introduce backwards compatibility with old pgfmathfloat.code.tex file + [ not interesting for pgfplots 1.2, only for pgfplots 1.1 !] + ++ there is a bug related with empty axes - I suppose in conjunction with the + tickmin/max feature (it won't be reset properly) + + +X there is a space too much in some behavior messages (occured in test + processing) + +X introduce backwards compatibility with old pgfmathfloat.code.tex file + ++ the auto-generated tick labels for non-unit-distance log axes could be better. + ++ verify that the domain key always accepts the extended data range + ++ I observed problems with opacity set for just one plot which was used for + every plot in the axes!? + + ++ the stacked plots impl is not yet in logical coords - that means it + won't work with non-standard unit vectors! + ++ The floating point math routines should be put into a separate library. + Provide compatibility support for that in pgfplots! + ++ empty plots cause bugs. ++ empty plots and the named nodes may not work correctly -> check that + ++ newlines in plot coordinates cause an error. + + provide sanity checking and correct error messages! + ++ 'domain' can't be used to increase the data range, even when combined with fp. ++ huge 'domain' arguments for 'plot function' lead to an 'dimension too large' error + although everything works fine + ++ the float math methods should be affected by the fixedpoint library, but they + are (because the underlying pgf math routines are exchanged). + +X scaled ticks is not properly implemented for log axes + + it is not available for log axes, so that's ok + ++ pgfplotstable and \rowcolor and 'sci sep align' in conjunction produces + overwritten digits! The color seems to be on top of the numbers left of the + sci separator. + -> This is caused by the left/right overhang of the colortbl package and my + implementation of 'sci sep align' as an extra column. That's bad. + -> Idea: + - manually overwrite \rowcolor/\columncolor/\cellcolor in a portable way such + that overhangs are made properly. + Maybe there is a macro in colortbl? + [fixed for \rowcolor] + + ++ stacked plots + error bars don't work correctly together: I need to shift the + error bars + ++ error bars should be drawn on top of the plot to avoid conflicts with filling. + ++ [xy]ticklabel pos values 'top' and 'bottom' are somewhat inconsistent with + the actual placement + ++ the auto-disable-feature for logarithmic minor ticks can be overruled (of + minor grid lines) which should not be possible + -> provide a good policy how to deal with user inputs: + 1. draw minor tick/grids if requested + 2. provide error message + ++ scatter is disabled if no default mark has been set. + ++ filter warnings are broken because they don't output the input coordinates + ++ tick align=center is broken since last revision. Possibly tick align=outside + as well. + ++ clickable lib is broken somehow + ++ check for clickable lib if multiple axes are in the same tikzpicture + -> doesn't work. Why!? + - I can't reproduce that bug. Maybe it is fixed in the meantime? + ++ the case + ymin=629.65, + ymax=629.70, + FAILS with math errors because the affine data transformation is deactivated + for the automatic tick computation! Providing tick labels manually works. + -> FIX THAT! Ticks should be computed without this restriction (if necessary, + in float arithmetics)! + ++ it is not possible to provide '[xy]mode' in styles. + -> ok, provided error message. + ++ check whether there are any plots before processing something like + 'xtick=data' or so + ++ the clipping of tick/grid lines is currently disabled due to the change to + logical coordinates and needs attention. + ++ 3D case : which hyperplane gets tick LABELS? + The current implementation based on '[xzy]ticklabel pos' is not sufficient + ++ 3D case: something fails with disabledatascaling + ++ '\coordinate (<aname>) at (axis cs:0,0);' does NOT work; + '\node[name=<aname>] at ... ' DOES work. + -> I can't hook into the 'at' syntax; I can only override the 'name' + key. + ++ check whether the \label/\ref construction requires \protect\tikz and + \protect\path etc. if it is placed inside of \caption... + -> no; it has catcode 12 + ++ check whether named nodes are still ok. Since the 'fill opacity' bugfix, these + may be broken... + maybe the scoping needs to be improved + -> there is still need for scopes in case 'clip markers'! + ++ error messages if the PGF version is wrong should be added + -> check for \pgfkeys + -> I should also check whether the float routines are available! + Maybe they will migrate to a tikz library someday. + + ++ \addplot [fill opacity=...] is not scoped properly! ++ I suppose the same problem holds true for dotted line styles. ++ setting mark options to dashed also changes the legend's appearance + ++ renormalization bug in + log(9.999998e-01) = 4.70201 != 0 + +X Bug in table input: if colnames contain (some?) UTF8 characters, \csname <colname>\endcsname FAILS. + That means table column names can't use UTF8 characters. + Possible solution: for each character in <colname>, check whether it is active. If yes, change its meaning. + I am not sure if that's acceptable... + +X error recovery: it is sometimes almost impossible to find errors in + key-value-settings because \end{axis} or \pgfplotstabletypesetfile does not + is NOT the correct context. + -> possibly with \errorcontextlines=10? + ++ the error message for gnuplot invocation is wrong; gnuplot should be called on + the '.gnuplot' file instead of the '.table' file + ++ there are still plain TeX loops in the legend code!? + ++ javascript stuff is incompatible with a lot of active characters, + for example the german package: + + bug in insdljs: workaround introduced. + + bug in my code fixed + ++ to check: it *could* be possible that errorbars + stacked plots are + incompatible. + ++ the 'alias' and 'create on use' features may lead to errors. Check it! + ++ variables which are used both globally and locally seem to fill TeX's save + stack to due retained restores + ++ I have introduced incompatiblities with the 'log identify minor ticks' option. + Check how to solve that. Side conditions: + - compatibility with the modified log tick labels for small range + - compatibility with extra ticks + - compatibility with the manual + ++ check whether 'clip limits' works properly if only one data point falls into + the final region + ++ add '-halt-on-error' to externalize command + ++ handle rare case that auto limit computation leads to min > max (only possible + for clip limits=false) + ++ evaluate 'every axis plot' inside of \addplot command, even if that means a + small inefficiency because it is evaluated in the \draw command as well. + -> allows to get id, prefix, samples and other behaviorual options. + -> attention: then, every axis plot would contain BOTH display and behavioral + options; take care with key paths + ++ \addplot plot[#1] does not use /pgfplots as search path ++ 'every axis plot' does not use /pgfplots as search path + + ++ implement partial limit specification, for example 'xmin=5' -> only compute + 'xmax' + ++ check gnuplot on windows - there appear to be semicolon problems!? + ++ again, the disabledatascaletrafo key does not seem to work correctly. Check it! + +X active semicolons may be a problem + ++ [ CF: for tikzlibraryexternal : use double quotes instead of single quotes in + system calls -> win32 doesn't support single quotes ] + ++ problem with context: even simple images do not work correctly. Why does the example work!? + ++ table package: 'array' required for some examples -> document + ++ handle 'nan' and +-inf in plots + ++ 'every axis plot post' is not reflected in legend (at least not properly) + ++ plot function: incompatibility with 'german' package and " catcodes + ++ improve error recovery + ++ grid lines and tick lines can obscure the axis lines, especially when used + with different colors. + -> draw axis lines on top of tick/grid lines!? + Or more generally: change drawing sequence to + 1. grid lines + 2. tick lines + 3. axis lines + 4. tick labels? + ++ eliminate any public reference to the '\\'-lists. They are inconsistent with PGF. + ++ use '{}' for sci 'e' style - looks better + ++ the tick scale labels are inadequate. + 1. Formatting + 2. maybe they should be disabled at all!? + ++ specifying axis limits for X should also limit those for Y (some sort of + clipping) + +X the text height of every axis x tick should be adjusted to allow tick scale + labels on the same vertical alignment + -> bug in pgf: text height does not properly respect to the current font!? + ++ the new \pgfkeys framework: + + I have re-implemented all options with \pgfkeys. + this allows styles and mixing of TikZ/pgfplots options. + + BUG: if someone provides FULL keynames, the method WILL FAIL. + + the style= option fails. + + the 'x=' and 'y=' options fail. + + every option which exists in both, pgf and tikz, will fail! + + 'legend style' fails + + the 'legend style, grid style, x label style etc. options' test fails + ++ axis limits of zero width are not fixed causing division by zero + ++ ytick=\empty is broken again :-( + ++ if a logplot has very small axis ranges, only ONE tick label will be placed. + Thats not enough. + In such a case, tick labels should be placed at MINOR TICKS [2-9]*10^i. + BTW: + if someone places tick marks at [1-9]*10^i, the minor ticks should NOT be + disabled. + Instead, tick positions should be RECOGNISED AS MINOR TICKS (which is not + that simple). + ++ die legend[font=] variable ist doch dasselbe wie in dem tikzstyle zu legenden, + oder? warum funktioniert es dann anders? + ++ implementiere enlargelimits fuer log-achsen + ++ markers werden rausgeclipped, wenn die achsen TIGHT sind. + ++ man kann keine leeren listen an tick labels uebergeben! + ++ width/height produziert NICHT die gewuenschte breite. + Man sollte ne zusatzoption haben, die die labels grundsaetzlich NICHT + beruecksichtigt. + +X Fix the scaling estimations. + Problem: I don't know sizes of labels, legends, titles and tick labels. + Idea: + -Create a temporary picture + \hbox{% + \begin{tikzpicture}[xshift=...,yshift=...] % skaliere auf (0,0)--(1,1) + \draw (0,0) rectangle (1,1) + plaziere labels + legende + vllt. ein tick auf jede achse (?) + \end{tikzpicture} + }% + - measure and remember its size + - throw it away + -> 9.2.2008: + ATTEMPT FAILED. + Reasons: + 1. it is not possible to place a tikzpicture into a tikzpicture. + And it can't be because Tikz updates bounding box parameters GLOBALLY. + 2. I could use a combination of + - scope, + - the 'current bounding box' node, + - \pgfpointanchor{current bounding box}{ anchor name }, + - drawing commands for labels,legend etc. + Effect: bounding box is determined correctly. BUT: + - bounding box of real picture may be affected, + - every output is drawn because nodes can't be 'thrown away'. + At least I do not know how. + + ++ enlargelimits muss RELATIV nicht ABSOLUT gemacht werden. + ++ es gibt einen fehler in der achsen skalierung, wenn + man sehr grosse limits hat (normale achsen) + ++ default ticks muessen besser an achsenlimits angepasst werden + -> bei sehr grossen oder sehr kleinen limits schlaegt die derzeitige + einschraenkung der step sizes fehl + ++ addplot plot coordinates { (235 , 43252) } + ^ + funzt nicht wegen dem leerzeichen vor dem komma + +X verschiebung des ylabels ist komisch, wegen der rotate option + ++ that first/last coord detection doesn't work for 3D + + +------------------------------------------------ +FEATURES +------------------------------------------------ ++ allow to advance cycle list(s) manually + +X automatically choose a predefined scaling style depending on width/height (?) + ++ implement 'point meta=symbolic command:<cmd>' and 'point meta=command:<cmd>' + the command should assign '\pgfplotsretval' + ++ It would be a valueable addition if the external lib would be available for the next stable release. + ++ the scatter/classes feature needs a legend. + ++ provide a '3d box' boolean which draws the full box. + -> should use the correct drawing sequence (foreground/backgraound) + -> should use the decoration things + ++ there is no possibility to provide a background color for the axis only + (should be a fill/draw style for the clip area). + ++ -> perhaps 'plot box aspect ratio=<x> <y> <z>' ? + And I still have the stretch-to-fill thing as in matlab. + ++ finish the 'unbounded coords=jump' method. + ++ I have the following request. Is it possible to also provide a domain +key for file and table plots. I have a file containing data points +where only the points in a certain range shall be plotted. I first +thought that filters might be a solution, but it seems that they apply +to the whole axis, not only to one specific plot. + ++ the UI to provide point meta is complicated. + ++ provide a possibility to get the maximum tick width (for use in ticklabel cs) + ++ provide a possibility to draw gaps. Maybe using nan or inf coordinates? + ++ provide a 'y variable' key? + ++ provide other log bases + ++ implement colorbars. I have a running prototype; it just needs some tuning. + +X 3D: assume default plot type when used with \addplot3 without plot style + (perhaps a special cycle list) + ++ allow to anchor an axis at any labeled node inside of it (like for a matrix) + ++ legendfromname etc: allow usage via \ref{}. + + ++When working with markers on the plots, the nomenclature is inconsistent. There +is 'mark size', 'mark=*' and 'only marks', but 'no markers'. + ++I created several cycle lists to be consistent in different types of plots. For +example I have a cycle list with markers and no lines for raw data points and a +cycle list with only lines in corresponding color. Now if I want to have raw +data points and fits in one axis, I cannot use these. Ok, I could make a +cyclelist where raw data and fit styles take turns, but this would break down +when I have more than one fit for a set of raw data. This is probably something +that has to go into pgf, but would it be possible to add a easy way ++ to switch to different cycle list between two addplots, ++ and to navigate in it (go to a specific position in the cycle list, go n steps back/forth)? + ++When I first tried to combine plots with only symbols and plots with only a +line in one plot, I had difficulties to figure out how to do it. Having worked +with pgf before, I intuitively tried to activate no marks/only marks for the +whole axis and then override it explicitly for some plots, by adding [only +marks/no marks] to addplot. + ++ I would find it convenient, if there was a key to indicate legend placement, +for example 'legend position=south west' as shorthand for 'legend +style={at={(0.05,0.05)},anchor=south west}' or something similar. + + ++ provide a simpler method to replace the '\cdot' in tick scale labels with a + different sign, for example '\times'. + ++ provide a feature for bar plots which add the bar value as node on top of the + bar. + ++ use the new \pgfplotspointoutsideofticklabelaxis things to place axis labels. + -> this needs a further variant which allows 'relative' axis coordinates + (0=lower limits, 1=upper limit and everything between) + ++ I need a clean interface to distinguish between R^1 -> R^3 and R^2 -> R^3 visualization. + ++ allow changes to `legend image code' in plot styles. Maybe the 'legend image + code' or some other preparation commands can be remembered explicitly such + that they are set before 'legend image code' is already running? + ++ legends need a better key path to process pgfplots plot handlers. ++ I need legends for mesh/surface plots. + ++ provide the axis bounding box as coordinate system (for description placement). + + ++ write public interface \pgfplotsdepthofxyz#1#2#3 ++ consider renaming that one to pgfmath... or pgfplotsmath... ? + ++ reverse legend + -> CF: implementation of Tom Cashman per mail + ++ what about in-text-input of tables like + \pgfplotstableread\data{<data>....<data>}{\macro} + \pgfplotstableread\data{<data>....<data>} to listener \listener + ++ I have just added '* expr' for plot table. + ideas todo: + + implement it for plot table structure as well, + X document plot file such that users know how to add expressions, or, even + better, automatically switch to plot table if someone uses x expr.. + +X optimize the z buffer=sort impl of mesh mode: use preallocation (doesn't yield + much, but at least a bit) + ++ it could be interesting to provide customizations to the cube marker. For + example different lengths for each side... could be used as basis for a 3D bar + plot implementation. + ++ there are applications in which BOTH untransformed meta AND transformed meta + are required. In this case, the untransformed meta should be provided in a + more convenient way - perhaps as fixed point number? + +X in scatter point public interface: it would be interesting to know if we are + currently processing the first/last coordinate. is that information available? + ++ write default styles for "string coordinates" which maps a set of +user defined strings somehow into a numeric range (using a simple +dictionary) + + ++ pdf supports REAL lattice shadings! See pdf reference 1.7, section 4.6.3. + + ++ provide a public basic level API to pgfplotstable: + + access, iterate and read table elements + + manipulate elements + ++ binary input subroutines: + use a simply scaling for dimen registers. The scaling should be such it maps + [-16384,16384] -> <range for N bytes> + properly, i.e. it is just an integer division. The resulting integer can be + encoded using the available linear map functionality. + ++ Notes for how to finish the 3D axes visualisation: + ++ the FPU uninstall command can be assembled ONCE (globally). No need to do that + multiple times. + ++ What about something like '/pgfplots/table/x expr={<math expression>}' ? + -> I could still use the lazy eval framework of pgfplotstable, i.e. + \thisrow{} commands, \pgfplotstablerow, \pgfplotstablecol etc. + The \prevrow and \nextrow features won't be possible (?) + ++ improve support for negative (reversed) axes + + + ++ improve plot expression + + accuracy + + UI + ++ what about an optimized version of plot expression which does not need the + brace hack (\x,{sin(\x r)}) ? + ++ plot expression for log plots would be more valueable, if it could sample + points exponentially, i.e. linear between log(xmin) ... log(xmax): + x_i = exp( log(xmin) + i * ( log(xmax)-log(xmin) )/(N-1) ) + ++ define a 'cycle list' style which simply inserts different colors into the + predefined style (thus, markers are fixed, colors vary). One could also think + about a complementary style. + + ++ create public key alias for '/pgfplots/domain' -> '/tikz/domain' + +X the coordinate preparation routines should assign global registers. This would + deal properly with grouped '\addplot' commands and it allows several + optimizations in the coordinate processing (elimination of list allocations). + ++ document line styles with arrows + + ++ provide 'only each nth coordinate' or so as style on top of 'x filter'. + ++ think about quiver plots + + ++ implement simply style 'scatter classes'. + + sanity checking feature: try if 'pgfmathfloattofixed' results in a known + class! -> but catch exceptions if the value is no number! + ++ allow symbolic meta data + ++ provide input options for 'meta' data + + plot file + + plot table + + plot coordinates + - document that stuff + +X I could extend the clickable library such that a click into a TABLE + opens a marker into one (or more) designated plots. + + ++ optimize the new code by re-defining \pgfqpointxy for the case of scaled + standard unit vectors. + +X perhaps I can use pdf line annotations to improve clickable lib? + -> no: there are right restrictions when using latex. + + ++ I could optimize the number parser with '\csname ...#1\endcsname' + constructions where '#1' is the currently identified character. + If #1 in {0-9,e,E,+-} etc., I could save a lot of macro assignments and + \ifx character comparisons. + ++ Speaking about optimiziation: I always wanted to test \pgfmathln inside of the + log code (combined with float support). + ++ the 1000sep character should be placed for numbers >= 10000, not before. + ++ improve scaled ticks: allow manual control over the automatic tick scaling. + ++ it would be interesting to get an high-level coordinate mapping + ++ a scatter plot feature in which each mark gets its own set of options would be nice. + + ++ styles are named very unintuitively. I should add something more convenient + (for example like the 'legend style={}' command). Idea: use the *same* name + as the options which are affected, + 'xlabel style' 'title style' etc. My current naming scheme used the name of + the 'every style' which suffer from backwards compatibility with xkeyval... + :-( + +X maybe it is possible to eliminate a lot of key macros to save string space? + Those family macros can be optimized (sure ?). + ++ axis equal option + ++ consider 'plot image[xmin=,xmax=,ymin=,ymax=] {<graphics>}; + -> load external plot image!? Only useful for matlab, if matlab would allow 100% + control over bounding box. Unfortunately, it doesn't. + ++ allow extended <col name> arguments inside of create column + ++ is it possible to create a *real* linked list? It should have the following + features: + 1. O(1) push/pop operations + 2. O(N) copy() + 3. O(N) convert to macro list + 4. O(N) traversal/loop + ++ introduce \label and \ref for legend entries? + ++ optimize tikz-interface + ++ optimize macro-append issue from O(N^2) time to O(N) + ++ create a \pgfmathfloattosci method and use that for the numerics in table package + +X re-implement 'dec sep align' of table package natively, not as high-level + style. ++ It is not (easily) possible to replace single entries of tables with '-'. + (for example: gradient columns) + ++ create a \pgfmathfloattosci method and use that for the numerics in table package + +X check whether the new floating point routines can be used to + REALLY setup a linear map DATA RANGE -> DISPLAY RANGE + Technical thing: map the CLIPPED data range or the TOTAL data range? + What advantages/disadvantes appear? + ++ [Tikz] document how to use internal registers can be used in libraries. + ++ [Tikz] add an 'every plot mark' option and adjust 'mark options' accordingly + ++ document the 'external' library of tikz (CVS only). + ++ group 'All supported styles' section by content + + ++ allow arrow heads or other axis line styles + + styles for axis lines are missing + + for outer axis lines: introduce option 'separate axis line paths' + if one wants to use arrow heads + ++ set default styles for non-boxed axis labels + + label positions for centered axis lines + + tick scale labels + + tick align versus label positions + + think about axis label placement. Possibilities: + - on the same side as tick labels. + -> should be move away in normal direction + -> should avoid problems with tick scale labels + - opposite of tick labels + + ++ the table package could use some sort of multicolumn feature which + allows something like 'columns={A,B,A,B,A,B}' and distributes entries of input + columns A and B equally to output columns. + ++ automatic disabling of enlargelimits when axis lines are not drawn as a box + ++ copy my personal' homepages short images to pgfplots website + ++ interrupt single plots at discontinuities (for example tan(x)) + -> don't draw from +infty to -infty + ++ optimize plot expression + ++ optimize tick generation code for speed + ++ alias 'axis x line=middle' and 'axis x line=center' + ++ an option which contains legend ENTRIES? + ++ the non-boxed axis lines are placed at 'ZERO'. Maybe this zero level should + get an anchor!? -> allows to place axis labels above it + ++ default style for grid lines to: {thin, black!25} ? + + +X implement an axis as path-command + ++ implement proper anchors + ++ provide simple options for useful bounding box truncations + + ++ Maybe I could perform a restore of the current bounding box at the END of an + axis. Restore means: restore to the setting BEFORE the axis. + ++ I could create a node which can be referenced and which has the axis' size + [ That touches another open problem, see below] + ++ I could use the new 'local bounding box' option of PGF to restrict the + bounding box to the axis' size + ++ I also need some sort of number style for log-tick-labels. + ++ move math mode shifts into \prettyprintnumber implementation. + ++ allow the '-plot' commands. + It would be a cool feature if '(FIRST_X,0)' could be inserted as move-to + operation before every plot. + -> one could make funny features with 'fill' in plot styles. + +X make the legend code more general: allow + \addformattedlegendentry{ \node{hallo} \nextcell \node{foo} \nextcell #1} + where #1 is the auto-generated small plot-spec image. One could also provide + '#2' as just the current plot spec OPTIONS. + + + ++ document 'legend plot pos' option + ++ there are some clipping paths in the tick-placement loop which can be + replacement with simple \ifdim's. + I guess clipping is not the cheapest operation. + + +X remember unfiltered (non-logarithmized) input ticks with \listnew and provide + them like '\tick' during ticklabel typesetting + + ++ improve tick placement (more) systematically + ++ provide auto tick labels at 5*i if appropriate + ++ implement the legend as tikz-matrix + -> width computation works correctly (there is a bug with font scaling) + ++ provide tick labels as a list like + axis[tick labels={A,B,1,4,5,$\frac 12$}] + -> convert to \listnew, use listpopfront to access elements + + ++ provide options for log plot tick formatting: + 10^0.703 vs fixed point format + ++ I could provide a global coordinate transformation + ++ I could try to use the plot-stream framework of PGF directly instead of using + the 'plot coordinates' command of tikz. + Advantage: would be faster. And the additional features can't be used anyway + because of my own number parsing routines... + ++ rename manual.pdf to pgfplots.pdf -> allows texdoc pgfplots + + ++ alignment: vertikal kann ich jetzt mit baseline. Kann ich horizontales + alignment an (0,0) hinbekommen? + ++ axis hide option ? macht das sinn? + ++ legende anders formatierbar? + - ausserhalb des (und isoliert von dem) plots? + + horizontal? + ++ grid lines + + minor + + major + -> einfach als verlaengerung der kleinen tick lines + +X es gibt scheinbar in PDF viewern die moeglichkeit, fuer den Druck ein anderes + dokument/dokumentteile zu verwenden als fuers Bildschirmbetrachten + (draft-package bspw?). + Kann man das nutzen, um sowohl farbige als auch S/W-plots zu generieren? + -> pruefe draftcopy paket + + ++ koennte man den kram auch aus (grossen) tabellen rauslesen? Also sowas wie + "plot X versus Y aus file Z"? +-> DEBUG! + Ideen: + + abstrakte datenstruktur als liste von spalten, eine spalte ist ne liste + von nummern + + einlesen: + + zeilenweise, haengt an die jeweiligen spalten mit \listpushback + coordinaten dran + + read first line as header (optionally my $flags line for column + formatting advice) + + read just strings, no parsing + - optimal: '\t' as separator. How can I teach TeX to use '\t' as + separator!? + + would allow + + \addplot plot table[x=X,y=Z] {\table} + and + + \typesettable[columns=...,format=sci,...,formatting options=...] {\table} + + implementation: simple run through column lists + -> CONSISTENT data representation, powerful display options + + + ++ man sollte \addplot mit '+[OPTIONEN]' starten koennen. + ++ ich sollte das enlargelimits deaktivierbar machen! vllt. auch ne option 'tight' + ++ automatisches tick-platzieren koennte verbessert werden + -> insbesondere fuer normale plots + ++ fehlerbars waeren nett + + ++ baseline option, die die linke unter ecke als '(0,0)' koordinate annimmt. + Wuerde generell sinn machen, oder? + ++ ich haette sehr gerne ein Skript, dass zu jeder figure ein eps und/oder pdf + macht, dass dann bitte schoen ordentlich includiert wird. + -> see tikzexternal june 2008 + + ++ passe bounding box und x/y-skalierung "sinnvoll" an. + + mache ne option "width=" die die GESAMTbreite angibt. + + mache "height" option + + belege width und height defaultmaessig sinnvoll + + ueberlege ein sinnvolles gesamt-skalierungs-konzept. + Das, was ich jetzt gebaut habe, mit 'x=SCALE' und/oder 'y=SCALE' + ist nicht ausgereift und eher verwirrend. sowas macht man wohl besser mit + pgf-skalierungen! + + Die 'x=' und 'y=' optionen sollten direkt in setxvec reingeschrieben werden, + ohne schwachfug mit skalierung! + + wenn ich 'width=BLA' angebe, wird automatisch 'y=1cm' angenommen. Das + ist unintuitiv; man erwartet eher, dass defaultheight im aspect ratio + mitskaliert wird. + + Nur mit der 'x=' bzw. 'y=' option sollte es NACH AUSSEN moeglich sein, + direkt einfluss auf die koordinaten zu nehmen. + ++ entscheide automatisch, ob der abstand zwischen ticks an die skalierung + angepasst werden sollte. + ++ [xy]min = auto + -> berechne die werte numerisch + Ideen: + + verzoegere das malen der Achse bis \end{axis} + + in jedem \addplot: + ich koennte irgendwie pruefen, ob ich 'plot coordinates' habe. + Sobald ich diesen modus erkannt hab, kann ich koordinate fuer koordinate + parsen und jeweils min/max bilden. + + ich muesste dann noch den befehl in einem makro konserieren, sodass er + spaeter, nach dem verzoegerten achsen malen kommt. + + OFFEN: was passiert, wenn NICHT plot coordinates benutzt wird? Vllt. die + 'domain' variable abfragen? + -> jedenfalls koennte ich mir da durchaus was ueberlegen! + ++ [xy]tick = auto + in abhaengigkeit von [xy]mode: zeige ticks von floor(xmin)...ceil(xmax) + ++ mache styles: + + every plot + + every axis (?) + ++ gebe eine liste von verfuegbaren linestyles an, durch die mit jedem + plot-befehl durchgecykled werden kann + ++ option, minor ticks ein/auszuschalten + ++ option, die X/Y-Achsen anders zu formatieren. Moeglichkeiten: + + Kasten drumrum + + je eine Linie mit Pfeil am Ende + + Achse nach rechts oder so + ++ aendere die das \addplot makro derart, dass beliebige plot-moeglichkeiten + folgen koennen + \addplot[OPTIONS] plot coordinates {...}; + -> das \addplot ersetzt gewissermaßen das \draw + diff --git a/Master/texmf-dist/doc/plain/pgfplots/pgfplotsexample.pdf b/Master/texmf-dist/doc/plain/pgfplots/pgfplotsexample.pdf Binary files differindex 763f8e2f590..17af938bab2 100644 --- a/Master/texmf-dist/doc/plain/pgfplots/pgfplotsexample.pdf +++ b/Master/texmf-dist/doc/plain/pgfplots/pgfplotsexample.pdf diff --git a/Master/texmf-dist/scripts/pgfplots/matlab2pgfplots.sh b/Master/texmf-dist/scripts/pgfplots/matlab2pgfplots.sh index 9bc84642506..c8211719402 100755 --- a/Master/texmf-dist/scripts/pgfplots/matlab2pgfplots.sh +++ b/Master/texmf-dist/scripts/pgfplots/matlab2pgfplots.sh @@ -6,15 +6,14 @@ CONVERT_AXES=1 OUTFILE="" MAXPOINTS=100000 -function echoHelp() +echoHelp() { - echo -e \ - "matlab2pgfplots.sh [--maxpoints N] [--styles [0|1] ] [ --axes [0|1] ] [ -o OUTFILE ] INFILE ...\n"\ - "converts Matlab figures (.fig-files) to pgfplots-files (.pgf-files).\n"\ - "This script is a front-end for matlab2pgfplots.m (which needs to be in matlab's search path)\n"\ - "type\n"\ - " >> help matlab2pgfplots\n"\ - "at your matlab prompt for more information.\n" + echo "matlab2pgfplots.sh [--maxpoints N] [--styles [0|1] ] [ --axes [0|1] ] [ -o OUTFILE ] INFILE ..." + echo "converts Matlab figures (.fig-files) to pgfplots-files (.pgf-files)." + echo "This script is a front-end for matlab2pgfplots.m (which needs to be in matlab's search path)" + echo "type" + echo " >> help matlab2pgfplots" + echo "at your matlab prompt for more information." exit 0 } diff --git a/Master/texmf-dist/source/context/third/pgfplots/pgfplotstests.zip b/Master/texmf-dist/source/context/third/pgfplots/pgfplotstests.zip Binary files differindex af58ca49530..e36fc2c6909 100644 --- a/Master/texmf-dist/source/context/third/pgfplots/pgfplotstests.zip +++ b/Master/texmf-dist/source/context/third/pgfplots/pgfplotstests.zip diff --git a/Master/texmf-dist/source/latex/pgfplots/pgfplotstests.zip b/Master/texmf-dist/source/latex/pgfplots/pgfplotstests.zip Binary files differindex a971a5963ee..7894d56f7c9 100644 --- a/Master/texmf-dist/source/latex/pgfplots/pgfplotstests.zip +++ b/Master/texmf-dist/source/latex/pgfplots/pgfplotstests.zip diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading.code.tex index 58664dc323d..c45b5a613f0 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/pgflibrarypgfplots.surfshading.code.tex @@ -55,6 +55,7 @@ /pgfplots/surf shading/south west corner/.initial={\pgfpointorigin},% /pgfplots/surf shading/north east corner/.initial={\pgfqpoint{6cm}{6cm}},% /pgfplots/surf shading/anchor/.initial=\pgfpointorigin,% + /pgfplots/surf shading/shading type/.initial=5,% triangles in form of lattice /pgfplots/surf shading/precision/.is choice, /pgfplots/surf shading/precision/pdf/.code={% % Lossless coordinate output. @@ -77,6 +78,7 @@ /pgfplots/surf shading/precision/ps},% /pgfplots/surf shading/precision/ps,% /pgfplots/surf shading/cols/.initial=,% + /pgfplots/surf shading/colorspace/.initial=rgb,% rgb or cmyk /pgfplots/surf shading/colormap/.initial={% << /FunctionType 2 @@ -124,22 +126,57 @@ 0 \pgfplotscolormappdfmax % map [0,2^BitsPerComponent-1] linearly to [0 1] for parametric color data }% \def\pgfplotslibrarysurf@count{0}% +\newcount\c@pgfplotslibrarysurf@no % driver specific: \def\pgfplotslibrarysurf@initstream{} \def\pgfplotslibrarysurf@advancestreamlen#1{}% \def\pgfplotslibrarysurfstreamstart{% - \pgfplotsapplistXnewempty\pgfplotslibrarysurf@binarystream@accum + \pgfplotslibrarysurf@translate@colorspace + \let\pgfplotslibrarysurf@colorspace=\pgfplotsretval + \pgfkeysgetvalue{/pgfplots/surf shading/shading type}\pgfplotslibrarysurf@type + \pgfplotsapplistXglobalnewempty\pgfplotslibrarysurf@binarystream@accum \pgfplotslibrarysurf@initstream \ifx\pgfplotslibrarysurf@filter@encode\pgfutil@empty \else \pgfkeysalso{/pgfplots/bin/\pgfplotslibrarysurf@filter@encode}% \fi + \ifcase\pgfplotslibrarysurf@type\relax + % 0 + \pgfplotslibrarysurf@initstream@wrongtype + \or% 1 + \pgfplotslibrarysurf@initstream@wrongtype + \or% 2 + \pgfplotslibrarysurf@initstream@wrongtype + \or% 3 + \or% 4 + % ok, triangle meshes. + \def\pgfplotslibrarysurf@edgeflag{\pgfplotscharno{0}}% + \or% 5 triangles in lattice form. disable edge flag: + \let\pgfplotslibrarysurf@edgeflag=\pgfutil@empty + \or% 6 coons patches: + \global\let\pgfplotslibrarysurf@cubicpatch@cdata=\pgfutil@empty + \global\c@pgfplotslibrarysurf@no=0 + \def\pgfplotslibrarysurf@cubicpatch@numverts{12}% + \let\pgfplotslibrarysurfstreamcoord=\pgfplotslibrarysurfstreamcoord@cubicpatch + \def\pgfplotslibrarysurf@edgeflag{\pgfplotscharno{0}}% + \or% 7 full tensor product cubic bezier patches: + \global\let\pgfplotslibrarysurf@cubicpatch@cdata=\pgfutil@empty + \global\c@pgfplotslibrarysurf@no=0 + \def\pgfplotslibrarysurf@cubicpatch@numverts{16}% + \let\pgfplotslibrarysurfstreamcoord=\pgfplotslibrarysurfstreamcoord@cubicpatch + \def\pgfplotslibrarysurf@edgeflag{\pgfplotscharno{0}}% + \else + \pgfplotslibrarysurf@initstream@wrongtype + \fi +}% +\def\pgfplotslibrarysurf@initstream@wrongtype{% + \pgfplots@error{CRITICAL: shader=interp: got unsupported pdf shading type '\pgfplotslibrarysurf@type'. This may correct your pdf!}% }% \def\pgfplotslibrarysurfstreamend{% - \pgfplotsapplistXlet\pgfplotslibrarysurf@binarystream=\pgfplotslibrarysurf@binarystream@accum - \pgfplotsapplistXnewempty\pgfplotslibrarysurf@binarystream@accum + \pgfplotsapplistXgloballet\pgfplotslibrarysurf@binarystream=\pgfplotslibrarysurf@binarystream@accum + \pgfplotsapplistXglobalnewempty\pgfplotslibrarysurf@binarystream@accum }% % #1: a pgf point. @@ -195,11 +232,131 @@ \pgfplotsbinaryencodeunsigned\pgfplots@glob@TMPa %\message{\pgfplotsbinaryresult.}% \t@pgfplots@tokc=\expandafter{\pgfplotsbinaryresult}% - \edef\pgfplots@loc@TMPa{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}% - \expandafter\pgfplotsapplistXpushback\pgfplots@loc@TMPa\to\pgfplotslibrarysurf@binarystream@accum + \edef\pgfplots@loc@TMPa{\pgfplotslibrarysurf@edgeflag\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}% + \expandafter\pgfplotsapplistXglobalpushback\pgfplots@loc@TMPa\to\pgfplotslibrarysurf@binarystream@accum \pgfplotslibrarysurf@advancestreamlen{10}% } +\def\pgfplotslibrarysurf@translate@colorspace{% + \pgfkeysgetvalue{/pgfplots/surf shading/colorspace}\pgfplots@loc@TMPd + \edef\pgfplots@loc@TMPd{\pgfplots@loc@TMPd}% + \def\pgfplots@loc@TMPa{rgb}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPd + \def\pgfplotsretval{RGB}% + \else + \def\pgfplots@loc@TMPa{cmyk}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPd + \def\pgfplotsretval{CMYK}% + \else + \def\pgfplots@loc@TMPa{cmy}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPd + \def\pgfplotsretval{CMY}% + \else + \pgfplots@error{Sorry, the 'surfshading' lib failed to recognise the '/pgfplots/surf shading=\pgfplots@loc@TMPd\space choice... maybe you misspelled it?}% + \def\pgfplotsretval{RGB}% + \fi + \fi + \fi +}% + +% special routine for coons type patches and cubic tensor product type +% patches. It has FIRST all vertices, +% THEN the cdata. Furthermore, it only has 4 CDATA points, but a total +% of 12 vertices. +% +% #1: a pgf point. +% #2: a color coordinate in the range [0,1000] +\def\pgfplotslibrarysurfstreamcoord@cubicpatch#1#2{% + \pgfplotsbinarysetbytes\pgfplotslibrarysurf@bytespercoordinate% + %\pgf@process{#1}% this here causes `{retaining \pgf@x}' messages and pollutes the save stack! Avoid it. See \tracingrestores=2 + #1% + % The idea is to map + % the low-level point coordinates LINEARLY into [0,2^{8*<bytes>}]. + % + % This is what the pdf standard expects for surface shadings. + % + % To do that, we simply map + % [-16384,16384] linearly into [0,2^{32}] + % and write the resulting integer in big endian binary format to + % the pdf low level stream. + % + % The decode procedure tells the pdf viewer how to invert that + % stuff. + % + \pgf@xa=\pgf@x + \pgf@sys@bp@correct\pgf@xa% + \pgfplotsbinaryencodedimenmaplinearly\pgf@xa +%\message{POINT \the\c@pgfplots@scanlineindex: ENCODING(x=\the\pgf@x)=\pgfplotsbinaryresult.}\advance\c@pgfplots@scanlineindex by1 + \t@pgfplots@toka=\expandafter{\pgfplotsbinaryresult}% + \pgf@ya=\pgf@y + \pgf@sys@bp@correct\pgf@ya% + \pgfplotsbinaryencodedimenmaplinearly\pgf@ya +%\message{ENCODING(y=\the\pgf@y)=\pgfplotsbinaryresult.}% + \t@pgfplots@tokb=\expandafter{\pgfplotsbinaryresult}% + \def\pgfplotslibrarysurf@cubicpatch@hascdata{0}% + \ifnum\c@pgfplotslibrarysurf@no=0 + \def\pgfplotslibrarysurf@cubicpatch@hascdata{1}% + % prepend edge flag. it is a new patch. + \t@pgfplots@toka=\expandafter{\expandafter\pgfplotslibrarysurf@edgeflag\the\t@pgfplots@toka}% + \else + \ifnum\c@pgfplotslibrarysurf@no=3 + \def\pgfplotslibrarysurf@cubicpatch@hascdata{1}% + \else + \ifnum\c@pgfplotslibrarysurf@no=6 + \def\pgfplotslibrarysurf@cubicpatch@hascdata{1}% + \else + \ifnum\c@pgfplotslibrarysurf@no=9 + \def\pgfplotslibrarysurf@cubicpatch@hascdata{1}% + \fi + \fi + \fi + \fi + \if1\pgfplotslibrarysurf@cubicpatch@hascdata + {% + % read fixed point input (in the range [0,1000]). + \pgf@xa=#2pt + % convert to integer (= *65536): + \c@pgf@counta=\pgf@xa + % provide map [0,1000] -> [0,2^16-1] + \divide\c@pgf@counta by1000 + % now, we have \c@pgf@counta in [0,2^16]. Simply strip it into + % the required range, that's ok. + \ifnum\c@pgf@counta<0 + \c@pgf@counta=0 + \else + \ifnum\c@pgf@counta>65535 + \c@pgf@counta=65535 + \fi + \fi + % Now, we have CDATA in the range [0,65535] + \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}% + %\message{ENCODING(C=\pgfplots@glob@TMPa\space for \the\pgf@xa)=}% + }% + \pgfplotsbinarysetbytes2% + \pgfplotsbinaryencodeunsigned\pgfplots@glob@TMPa + %\message{\pgfplotsbinaryresult.}% + \t@pgfplots@tokc=\expandafter{\pgfplotslibrarysurf@cubicpatch@cdata}% + \xdef\pgfplotslibrarysurf@cubicpatch@cdata{% + \the\t@pgfplots@tokc + \pgfplotsbinaryresult + }% + \fi + \global\advance\c@pgfplotslibrarysurf@no by1 + % + \ifnum\pgfplotslibrarysurf@cubicpatch@numverts=\c@pgfplotslibrarysurf@no %finalize patch. + \t@pgfplots@tokc=\expandafter{\pgfplotslibrarysurf@cubicpatch@cdata}% + \global\let\pgfplotslibrarysurf@cubicpatch@cdata=\pgfutil@empty + \global\c@pgfplotslibrarysurf@no=0 + \else + \t@pgfplots@tokc={}% + \fi + % edge flag is already in \t@pgfplots@toka (if this is the first + % vertex) + \edef\pgfplots@loc@TMPa{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}% + \expandafter\pgfplotsapplistXglobalpushback\pgfplots@loc@TMPa\to\pgfplotslibrarysurf@binarystream@accum + %\pgfplotslibrarysurf@advancestreamlen{10}% +} + \def\pgfplotslibrarysurfactivateshadefill{% \pgfplotssys@do@surfshading@fillpaths\pgfplots@loc@TMPa% \expandafter\pgfutil@addpdfresource@patterns\expandafter{\pgfplots@loc@TMPa}%% diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex index 06bade77b9e..4f414535eec 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/pgfplotslibrary.code.tex @@ -36,18 +36,22 @@ \def\use@@pgfplotslibrary#1{% \edef\pgf@list{#1}% \pgfutil@for\pgf@temp:=\pgf@list\do{% - \expandafter\ifx\csname pgfp@library@\pgf@temp @loaded\endcsname\relax% - \expandafter\global\expandafter\let\csname pgfp@library@\pgf@temp @loaded\endcsname=\pgfutil@empty% - \expandafter\edef\csname tikz@library@#1@atcode\endcsname{\the\catcode`\@} - \expandafter\edef\csname tikz@library@#1@barcode\endcsname{\the\catcode`\|} - \catcode`\@=11 - \catcode`\|=12 - \pgfplots@iffileexists{tikzlibrarypgfplots.\pgf@temp.code.tex}{% - \input tikzlibrarypgfplots.\pgf@temp.code.tex}{% - \input pgflibrarypgfplots.\pgf@temp.code.tex}% - \catcode`\@=\csname tikz@library@#1@atcode\endcsname - \catcode`\|=\csname tikz@library@#1@barcode\endcsname - \fi% + \expandafter\pgfkeys@spdef\expandafter\pgf@temp\expandafter{\pgf@temp}% + \ifx\pgf@temp\pgfutil@empty + \else + \expandafter\ifx\csname pgfp@library@\pgf@temp @loaded\endcsname\relax% + \expandafter\global\expandafter\let\csname pgfp@library@\pgf@temp @loaded\endcsname=\pgfutil@empty% + \expandafter\edef\csname tikz@library@#1@atcode\endcsname{\the\catcode`\@} + \expandafter\edef\csname tikz@library@#1@barcode\endcsname{\the\catcode`\|} + \catcode`\@=11 + \catcode`\|=12 + \pgfplots@iffileexists{tikzlibrarypgfplots.\pgf@temp.code.tex}{% + \input tikzlibrarypgfplots.\pgf@temp.code.tex}{% + \input pgflibrarypgfplots.\pgf@temp.code.tex}% + \catcode`\@=\csname tikz@library@#1@atcode\endcsname + \catcode`\|=\csname tikz@library@#1@barcode\endcsname + \fi% + \fi }% } diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.colormaps.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.colormaps.code.tex new file mode 100644 index 00000000000..d6060e15e2b --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.colormaps.code.tex @@ -0,0 +1,99 @@ +%-------------------------------------------- +% +% Package pgfplots, library for additional colormaps, especially those +% related to matlab (tm). +% +% Copyright 2011 by Christian Feuersänger and Patrick Häcker. +% +% 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/>. +% +% + +\pgfplotsset{ + /pgfplots/colormap/autumn/.style={ + /pgfplots/colormap={autumn}{rgb255=(255,0,0) rgb255=(255,255,0)} + }, + /pgfplots/colormap/bled/.style={ + /pgfplots/colormap={bled}{rgb255=(0,0,0) rgb255=(43,43,0) rgb255=(0,85,0) rgb255=(0,128,128) rgb255=(0,0,170) rgb255=(213,0,213) rgb255=(255,0,0)} + }, + /pgfplots/colormap/bright/.style={ + /pgfplots/colormap={bright}{rgb255=(0,0,0) rgb255=(78,3,100) rgb255=(2,74,255) rgb255=(255,21,181) rgb255=(255,113,26) rgb255=(147,213,114) rgb255=(230,255,0) rgb255=(255,255,255)} + }, + /pgfplots/colormap/cold/.style={ + /pgfplots/colormap={cold}{rgb255=(0,0,0) rgb255=(0,0,255) rgb255=(0,255,255) rgb255=(255,255,255)} + }, + /pgfplots/colormap/copper/.style={ + /pgfplots/colormap={copper}{[1cm]rgb255(0cm)=(0,0,0) rgb255(4cm)=(255,159,101) rgb255(5cm)=(255,199,127)} + }, + /pgfplots/colormap/copper2/.style={ + /pgfplots/colormap={copper2}{rgb255=(0,0,0) rgb255=(68,62,63) rgb255=(170,112,95) rgb255=(207,194,138) rgb255=(255,255,255)} + }, + /pgfplots/colormap/earth/.style={ + /pgfplots/colormap={earth}{rgb255=(0,0,0) rgb255=(0,28,15) rgb255=(42,39,6) rgb255=(28,73,33) rgb255=(67,85,24) rgb255=(68,112,46) rgb255=(81,129,83) rgb255=(124,137,87) rgb255=(153,147,122) rgb255=(145,173,164) rgb255=(144,202,180) rgb255=(171,220,177) rgb255=(218,229,168) rgb255=(255,235,199) rgb255=(255,255,255)} + }, + /pgfplots/colormap/gray/.style={ + /pgfplots/colormap={gray}{rgb255=(0,0,0) rgb255=(255,255,255)} + }, + /pgfplots/colormap/hsv/.style={ + /pgfplots/colormap={hsv}{rgb255=(255,0,0) rgb255=(255,255,0) rgb255=(0,255,0) rgb255=(0,255,255) rgb255=(0,0,255) rgb255=(255,0,255) rgb255=(255,0,0)} + }, + /pgfplots/colormap/hsv2/.style={ + /pgfplots/colormap={hsv2}{rgb255=(0,0,0) rgb255=(128,0,128) rgb255=(0,0,230) rgb255=(0,255,255) rgb255=(0,255,0) rgb255=(255,255,0) rgb255=(255,0,0)} + }, + /pgfplots/colormap/pastel/.style={ + /pgfplots/colormap={pastel}{rgb255=(0,0,0) rgb255=(120,0,5) rgb255=(0,91,172) rgb255=(215,35,217) rgb255=(120,172,78) rgb255=(255,176,24) rgb255=(230,255,0) rgb255=(255,255,255)} + }, + /pgfplots/colormap/pink/.style={ + /pgfplots/colormap={pink}{rgb255=(0,0,0) rgb255=(12,16,46) rgb255=(62,22,43) rgb255=(53,53,65) rgb255=(79,72,58) rgb255=(122,80,67) rgb255=(147,91,102) rgb255=(147,115,140) rgb255=(144,145,154) rgb255=(173,163,146) rgb255=(216,171,149) rgb255=(250,179,179) rgb255=(255,198,227) rgb255=(246,229,255) rgb255=(255,255,255)} + }, + /pgfplots/colormap/sepia/.style={ + /pgfplots/colormap={sepia}{rgb255(0cm)=(0,0,0) rgb255(1cm)=(26,13,0) rgb255(18cm)=(255,230,204) rgb255(20cm)=(255,255,255)} + }, + /pgfplots/colormap/bone/.style={ + /pgfplots/colormap={bone}{[1cm]rgb255(0cm)=(0,0,0) rgb255(3cm)=(84,84,116) rgb255(6cm)=(167,199,199) rgb255(8cm)=(255,255,255)} +}, + %-------------------------------------------------- + % % mesh width is too fine for these: + % /pgfplots/colormap/dusk/.style={ + % /pgfplots/colormap={dusk}{ + % [1cm]rgb255(0cm)=(0,0,0) + % rgb255(114cm)=(0,0,128) rgb255(701cm)=(0,128,128) + % rgb255(1000cm)=(128,128,128) rgb255(1299cm)=(255,128,128) + % rgb255(1886cm)=(255,255,128) rgb255(2000cm)=(255,255,255)} + % }, + % /pgfplots/colormap/hicontrast/.style={ + % /pgfplots/colormap={hicontrast}{ + % [1cm]rgb255(0cm)=(0,0,0) rgb255(114cm)=(0,0,255) rgb255(299cm)=(255,0,0) rgb255(413cm)=(255,0,255) + % rgb255(587cm)=(0,255,0) rgb255(701cm)=(0,255,255) rgb255(886cm)=(255,255,0) + % rgb255(1000cm)=(255,255,255)} + % }, + %-------------------------------------------------- + /pgfplots/colormap/spring/.style={ + /pgfplots/colormap={spring}{rgb255=(255,0,255) rgb255=(255,255,0)} + }, + /pgfplots/colormap/summer/.style={ + /pgfplots/colormap={summer}{rgb255=(0,128,102) rgb255=(255,255,102)} + }, + /pgfplots/colormap/temp/.style={ + /pgfplots/colormap={temp}{rgb255=(36,0,217) rgb255=(25,29,247) rgb255=(41,87,255) rgb255=(61,135,255) rgb255=(87,176,255) rgb255=(117,211,255) rgb255=(153,235,255) rgb255=(189,249,255) rgb255=(235,255,255) rgb255=(255,255,235) rgb255=(255,242,189) rgb255=(255,214,153) rgb255=(255,172,117) rgb255=(255,120,87) rgb255=(255,61,61) rgb255=(247,40,54) rgb255=(217,22,48) rgb255=(166,0,33)} + }, + /pgfplots/colormap/thermal/.style={ + /pgfplots/colormap={thermal}{rgb255=(0,0,0) rgb255=(77,0,179) rgb255=(255,51,0) rgb255=(255,255,0) rgb255=(255,255,255)} + }, + /pgfplots/colormap/winter/.style={ + /pgfplots/colormap={winter}{rgb255=(0,0,255) rgb255=(0,255,128)} + }, +} + +\endinput diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.dateplot.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.dateplot.code.tex index 8ac9a7631c0..7e7e5232fc0 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.dateplot.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.dateplot.code.tex @@ -52,6 +52,12 @@ \advance\pgf@xa by-\the\c@pgf@countb pt \ifdim\pgf@xa>0.5pt \advance\c@pgf@countb by1 + \ifnum\c@pgf@countb=60 + \c@pgf@countb=#4 % + \advance\c@pgf@countb by1 + \edef#4{\the\c@pgf@countb}% + \c@pgf@countb=0 + \fi \fi \edef#5{\the\c@pgf@countb}% } @@ -94,8 +100,8 @@ \let\pgfplots@calender@ZEROSHIFT=\pgfmathresult }, date ZERO=2006-01-01, - /pgfplots/date coordinates in/.style={ - /pgfplots/#1 coord trafo/.code={% + /pgfplots/date coordinates in/.code={% + \pgfkeysdef{/pgfplots/#1 coord trafo}{% \begingroup \edef\pgfplotstempjuliandate{##1}% % check if we also have a TIME like '2006-01-01 11:21' @@ -126,8 +132,8 @@ \fi \pgfmath@smuggleone\pgfmathresult \endgroup - }, - /pgfplots/#1 coord inv trafo/.code={% + }% + \pgfkeysdef{/pgfplots/#1 coord inv trafo}{% \begingroup \pgfplotslibdateplot@number@to@julian@and@time##1\julianto{\c@pgf@counta}\hourto\Hour\minuteto\Minute% \advance\c@pgf@counta by\pgfplots@calender@ZEROSHIFT\relax @@ -152,12 +158,43 @@ \def\Second{0}% \def\second{00}% \edef\lowlevel{##1}% - \edef\pgfmathresult{\year-\month-\day}% - }, - /pgfplots/#1ticklabel={\tick},% - /pgfplots/scaled #1 ticks=false, - /pgfplots/plot coordinates/math parser=false,% + \pgfkeysifdefined{/pgfplots/date default inv/#1}{% + \edef\pgfmathresult{\pgfkeysvalueof{/pgfplots/date default inv/#1}}% + }{% + \edef\pgfmathresult{\year-\month-\day\space\hour:\minute:\second}% + }% + }% + \pgfkeysifdefined{/pgfplots/#1ticklabel/.@cmd}{% + \pgfkeysalso{% + /pgfplots/#1ticklabel={\tick},% + /pgfplots/scaled #1 ticks=false,% + /pgfplots/plot coordinates/math parser=false,% + }% + }{% + % OK. The style can be used for other coordinates as well + % (like hist/data) + }% + % + \pgfkeysifdefined{/pgfplots/#1 is expr}{% + \pgfkeyssetvalue{/pgfplots/#1 is expr}{0}% + }{}% + % + % Allow a callback (optional) + \pgfkeysifdefined{/pgfplots/#1/@execute on coord trafo changed/.@cmd}{% + \pgfkeysalso {/pgfplots/#1/@execute on coord trafo changed}% + }{}% }, /pgfplots/date coordinates in/.value required, + % + % #1: the argument for 'data coordinates in={#1} + % #2: the default for the inverse transformation. If there is + % none, a default will be chosen automatically (with full + % information) + /pgfplots/date coordinates default inverse/.style 2 args={% + /pgfplots/date default inv/#1/.initial=#2, + }, + /pgfplots/date coordinates default inverse={x}{\year-\month-\day}, + /pgfplots/date coordinates default inverse={y}{\year-\month-\day}, + /pgfplots/date coordinates default inverse={z}{\year-\month-\day}, } diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.groupplots.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.groupplots.code.tex index 5086fef9d47..32b0e5f32ee 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.groupplots.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.groupplots.code.tex @@ -56,38 +56,58 @@ /pgfplots/group/shared labels=false, /pgfplots/group/xticklabels at/.is choice, /pgfplots/group/xticklabels at/all/.code=\def\pgfplots@group@xticklabels{all}, - /pgfplots/group/xticklabels at/edge top/.code=\def\pgfplots@group@xticklabels{upper}, + /pgfplots/group/xticklabels at/edge top/.code=\def\pgfplots@group@xticklabels{top}, /pgfplots/group/xticklabels at/edge bottom/.code=\def\pgfplots@group@xticklabels{lower}, + /pgfplots/group/xticklabels at/edge left/.code=\def\pgfplots@group@xticklabels{left}, % TODO + /pgfplots/group/xticklabels at/edge right/.code=\def\pgfplots@group@xticklabels{right}, % TODO /pgfplots/group/xticklabels at=all, /pgfplots/group/yticklabels at/.is choice, /pgfplots/group/yticklabels at/all/.code=\def\pgfplots@group@yticklabels{all}, /pgfplots/group/yticklabels at/edge left/.code=\def\pgfplots@group@yticklabels{left}, /pgfplots/group/yticklabels at/edge right/.code=\def\pgfplots@group@yticklabels{right}, + /pgfplots/group/yticklabels at/edge top/.code=\def\pgfplots@group@yticklabels{top}, % TODO + /pgfplots/group/yticklabels at/edge bottom/.code=\def\pgfplots@group@yticklabels{bottom}, % TODO /pgfplots/group/yticklabels at=all, /pgfplots/group/xlabels at/.is choice, /pgfplots/group/xlabels at/all/.code=\def\pgfplots@group@xlabels{all}, - /pgfplots/group/xlabels at/edge top/.code=\def\pgfplots@group@xlabels{upper}, + /pgfplots/group/xlabels at/edge top/.code=\def\pgfplots@group@xlabels{top}, /pgfplots/group/xlabels at/edge bottom/.code=\def\pgfplots@group@xlabels{lower}, + /pgfplots/group/xlabels at/edge right/.code=\def\pgfplots@group@xlabels{right}, % TODO + /pgfplots/group/xlabels at/edge left/.code=\def\pgfplots@group@xlabels{left},% TODO /pgfplots/group/xlabels at=all, /pgfplots/group/ylabels at/.is choice, /pgfplots/group/ylabels at/all/.code=\def\pgfplots@group@ylabels{all}, /pgfplots/group/ylabels at/edge left/.code=\def\pgfplots@group@ylabels{left}, /pgfplots/group/ylabels at/edge right/.code=\def\pgfplots@group@ylabels{right}, + /pgfplots/group/ylabels at/edge top/.code=\def\pgfplots@group@ylabels{top}, % TODO + /pgfplots/group/ylabels at/edge bottom/.code=\def\pgfplots@group@ylabels{bottom}, % TODO /pgfplots/group/ylabels at=all, /pgfplots/group/x descriptions at/.is choice, - /pgfplots/group/x descriptions at/all/.style= - {/pgfplots/group/xlabels at=all,/pgfplots/group/xticklabels at=all}, - /pgfplots/group/x descriptions at/edge bottom/.style= - {/pgfplots/group/xlabels at=edge bottom, /pgfplots/group/xticklabels at=edge bottom}, - /pgfplots/group/x descriptions at/edge top/.style= - {/pgfplots/group/xlabels at=edge top, /pgfplots/group/xticklabels at=edge top}, + /pgfplots/group/x descriptions at/all/.style={ + /pgfplots/group/xlabels at=all, + /pgfplots/group/xticklabels at=all + }, + /pgfplots/group/x descriptions at/edge bottom/.style={ + /pgfplots/group/xlabels at=edge bottom, + /pgfplots/group/xticklabels at=edge bottom + }, + /pgfplots/group/x descriptions at/edge top/.style={ + /pgfplots/group/xlabels at=edge top, + /pgfplots/group/xticklabels at=edge top + }, /pgfplots/group/y descriptions at/.is choice, - /pgfplots/group/y descriptions at/all/.style= - {/pgfplots/group/ylabels at=all, /pgfplots/group/yticklabels at=all}, - /pgfplots/group/y descriptions at/edge left/.style= - {/pgfplots/group/ylabels at=edge left, /pgfplots/group/yticklabels at=edge left}, - /pgfplots/group/y descriptions at/edge right/.style= - {/pgfplots/group/ylabels at=edge right, /pgfplots/group/yticklabels at=edge right}, + /pgfplots/group/y descriptions at/all/.style={ + /pgfplots/group/ylabels at=all, + /pgfplots/group/yticklabels at=all + }, + /pgfplots/group/y descriptions at/edge left/.style={ + /pgfplots/group/ylabels at=edge left, + /pgfplots/group/yticklabels at=edge left + }, + /pgfplots/group/y descriptions at/edge right/.style={ + /pgfplots/group/ylabels at=edge right, + /pgfplots/group/yticklabels at=edge right + }, /pgfplots/group/group name/.store in=\pgfplots@group@name, /pgfplots/group/empty plot/.style={/pgfplots/hide axis=true}, } @@ -200,9 +220,9 @@ }% \fi% \else - \def\pgfplots@loc@TMPb{upper}% + \def\pgfplots@loc@TMPb{top}% \ifx\pgfplots@loc@TMPb\pgfplots@group@xlabels% - % xlabels at=upper + % xlabels at=top \ifnum1<\pgfplots@group@rows\relax \foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {% \foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {% @@ -264,7 +284,7 @@ % \def\pgfplots@group@determine@ticklabels{% \def\pgfplots@loc@TMPa{all} - \def\pgfplots@loc@TMPb{upper} + \def\pgfplots@loc@TMPb{top} \def\pgfplots@loc@TMPc{lower} \ifx\pgfplots@loc@TMPa\pgfplots@group@xticklabels% % Do nothing as all should have xticklabels diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.patchplots.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.patchplots.code.tex new file mode 100644 index 00000000000..4076e37281c --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.patchplots.code.tex @@ -0,0 +1,1783 @@ +%-------------------------------------------- +% +% Package pgfplots, library for higher order patch plots. +% It contains advanced patch plots like quadratic triangles, +% biquadratic quadrilaterals, coons patches and others. +% The basic implementation for patches supports already line, triangle +% and rectangle (=2 triangles) patches. +% +% Copyright 2007/2008/2009 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/>. +% +%-------------------------------------------- + + % NOTES: + % In general, a Bezier spline C:[0,1] -> \R of order n fulfills + % C'(0) = n ( P_1 - P_0 ), + % C'(1) = n ( P_n - P_{n-1} ). + % For n=3 and given P_0 and P_3, I can directly compute P_1 and P_2 once I know + % the derivatives at t=0 and t=1. + % + % + % +%-------------------------------------------------- +% 4-point Lagrange interpolation on {0,1/3,2/3,1}: +% C(x) = +% a * (1/3 - x)/(1/3) * (2/3-x)/(2/3) * (1-x) + +% b * (0 - x)/(0 - 1/3) * (2/3-x)/(2/3-1/3) * (1-x)/(1-1/3) + +% c * (0 - x)/(0 - 2/3) * (1/3-x)/(1/3-2/3) * (1-x)/(1-2/3) + +% d * (0 - x)/(0 - 1) * (1/3-x)/(1/3-1) * (2/3-x) /(2/3-1) +% +% +% Derivative: +% +% (-9*c + 2*d + 72*c*x - 18*d*x - 81*c*x^2 + 27*d*x^2 + +% a*(-11 + 36*x - 27*x^2) + 9*b*(2 - 10*x + 9*x^2))/2 +% +% bezier control points are +% P1 = (-5*a)/6 + 3*b - (3*c)/2 + d/3 +% = -0.833333 a + 3. b - 1.5 c + 0.333333 d +% +% P2 = 0.333333 (0.5 (2. a - 9. b + 18. c - 11. d) + 3. d) +% = 0.333333 a - 1.5 b + 3. c - 0.833333 d +%-------------------------------------------------- + + + +\pgfplotsdeclarepatchclass{quadratic spline}{% + allow matrix=0, + uses view depth=0, + new=\def\pgfplotspatchclass@qspline@no{A}, + set next vertex={% + % EXPECTED ORDERING: first 2 corners, then 1 mid nodes + % (interpolatory). + % defines \pgfplotspatchclass@qspline@A ... \pgfplotspatchclass@qspline@C (3 points) + \expandafter\edef\csname pgfplotspatchclass@qspline@\pgfplotspatchclass@qspline@no\endcsname{#1}% + \if C\pgfplotspatchclass@qspline@no + \def\pgfplotspatchclass@qspline@no{A}% + \pgfplotspatchready + \else + \expandafter\let\expandafter\pgfplotspatchclass@qspline@no\csname pgfpptchindexnext@\pgfplotspatchclass@qspline@no\endcsname + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@qspline@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qspline@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qspline@B\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qspline@C\endvertex #1% + }, + fill path={% + \begingroup + % Draw the patch boundary using a bezier curves. + % + % Since I have lagrange points to describe the patch (i.e. + % points the patch passes through), I have to convert the + % lagrange representation to bezier. + % + % Furthermore, I convert to *cubic* bezier since pdf only + % supports cubic curves. + % + % See the docs for 'biquadratic::fill path' for more details, + % in does the same. + \def\pgfplots@edge{% + \ifx\pgfplotspatchclass@qspline@A\PA + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\PA\endvertex}% + \fi + \pgfpathcurveto {% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}% + }{% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}% + }{% + \expandafter\pgfplotspointpatchvertex\PC\endvertex + }% + }% + \let\PA=\pgfplotspatchclass@qspline@A + \let\PB=\pgfplotspatchclass@qspline@C + \let\PC=\pgfplotspatchclass@qspline@B + \pgfplots@edge + \endgroup + }, + triangulate class=line, + triangulate={% + \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass + \def\pgfplotsplothandlermesh@patchclass{line}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@B}% + \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@ + },% + recursive refine@={% + \pgfplotspatchclass{\pgfplotspatchclassname}{new}% + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@A\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@B\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@C\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qspline@AC + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@AC}% + #1% + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@A\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@B\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qspline@C\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qspline@CB + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@B}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qspline@CB}% + #1% + % + },% + get pdf shading type=0, + get num vertices=3, +}% + +\pgfplotsdeclarepatchclass{cubic spline}{% + allow matrix=0, + uses view depth=0, + new=\def\pgfplotspatchclass@cspline@no{A}, + set next vertex={% + % EXPECTED ORDERING: first 2 corners, then 1 mid nodes + % (interpolatory). + % defines \pgfplotspatchclass@cspline@A ... \pgfplotspatchclass@cspline@D (4 points) + \expandafter\edef\csname pgfplotspatchclass@cspline@\pgfplotspatchclass@cspline@no\endcsname{#1}% + \if D\pgfplotspatchclass@cspline@no + \def\pgfplotspatchclass@cspline@no{A}% + \pgfplotspatchready + \else + \expandafter\let\expandafter\pgfplotspatchclass@cspline@no\csname pgfpptchindexnext@\pgfplotspatchclass@cspline@no\endcsname + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@B\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@C\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@cspline@D\endvertex #1% + }, + fill path={% + % Draw the patch boundary using a bezier curve. + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@cspline@A\endvertex}% + % switch basis from lagrange to bezier (see formular on top of + % this file) + \pgfpathcurveto {% + \begingroup + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@cspline@A\times{-0.833333}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@cspline@C\times{3}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@cspline@D\times{-1.5}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@cspline@B\times{0.3333333}% + \pgfplotspatchvertexfinish\pgfplots@loc@TMPa + \expandafter\pgfplotspointpatchvertex\pgfplots@loc@TMPa\endvertex + \endgroup + }{% + \begingroup + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@cspline@A\times{0.333333}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@cspline@C\times{-1.5}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@cspline@D\times{3}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@cspline@B\times{-0.833333}% + \pgfplotspatchvertexfinish\pgfplots@loc@TMPa + \expandafter\pgfplotspointpatchvertex\pgfplots@loc@TMPa\endvertex + \endgroup + }{% + \expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@cspline@B\endvertex + }% + }, + triangulate class=line, + triangulate={% + \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass + \def\pgfplotsplothandlermesh@patchclass{line}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@B}% + \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@ + },% + recursive refine@={% + % The 4-point lagrangian interpolation formular is shown on + % the top of this page. What I do here is simply to evaluate + % C(i*1/9) for i =0,...,9: + % 0 + % 0.493827 A +0.740741 C -0.296296 D +0.0617284 B + % 0.17284 A +1.03704 C -0.259259 D +0.0493827 B + % 1/3 + % -0.0617284 A +0.740741 C +0.37037 D -0.0493827 B + % -0.0493827 A +0.37037 C +0.740741 D -0.0617284 B + % 2/3 + % 0.0493827 A -0.259259 C +1.03704 D +0.17284 B + % 0.0617284 A -0.296296 C +0.740741 D +0.493827 B + % 1 + \pgfplotspatchclass{\pgfplotspatchclassname}{new}% + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{0.493827}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{0.0617284}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{0.740741}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{-0.296296}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AA + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{0.17284}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{0.0493827}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{1.03704}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{-0.259259}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AB + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AA}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AB}% + #1% + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{-0.0617284}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{-0.0493827}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{0.740741}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{0.37037}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AA + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{-0.0493827}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{-0.0617284}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{0.37037}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{0.740741}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AB + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AA}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AB}% + #1% + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{0.0493827}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{0.17284}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{-0.259259}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{+1.03704}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AA + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@A\times{0.0617284}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@B\times{0.493827}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@C\times{-0.296296}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@cspline@D\times{0.740741}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@cspline@AB + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@B}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AA}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@cspline@AB}% + #1% + }, + get pdf shading type=0, + get num vertices=4, +}% + +% make a linearized sequence around the edge of the quad.triangle. +% note the ordering: first 3 corners, then 3 mid nodes: +\def\pgfplots@qtri@next@A{D}% +\def\pgfplots@qtri@next@B{E}% +\def\pgfplots@qtri@next@C{F}% +\def\pgfplots@qtri@next@D{B}% +\def\pgfplots@qtri@next@E{C}% +\def\pgfplots@qtri@next@F{A}% + +\def\pgfplots@qtri@rnext@A{F}% +\def\pgfplots@qtri@rnext@B{D}% +\def\pgfplots@qtri@rnext@C{E}% +\def\pgfplots@qtri@rnext@D{A}% +\def\pgfplots@qtri@rnext@E{B}% +\def\pgfplots@qtri@rnext@F{C}% + +\def\pgfplotspatchclass@qtri@recursiverefine@newnames{% + \let\pgfplotspatchclass@qtri@A@=\pgfplotspatchclass@qtri@A% + \let\pgfplotspatchclass@qtri@B@=\pgfplotspatchclass@qtri@B% + \let\pgfplotspatchclass@qtri@C@=\pgfplotspatchclass@qtri@C% + \let\pgfplotspatchclass@qtri@D@=\pgfplotspatchclass@qtri@D% + \let\pgfplotspatchclass@qtri@E@=\pgfplotspatchclass@qtri@E% + \let\pgfplotspatchclass@qtri@F@=\pgfplotspatchclass@qtri@F% +}% + + +% A 3-point interpolatory patch which draws quadratic polynomial +% splines (functions f(x), x 1d). +\pgfplotsdeclarepatchclass{triangle quadr}{% + allow matrix=0, + uses view depth=1, + new=\def\pgfplotspatchclass@qtri@no{A}\let\pgfplotspatchclass@qtrie@AB\relax, + set next vertex={% + % EXPECTED ORDERING: first 3 corners, then 3 mid nodes. + % defines \pgfplotspatchclass@qtri@A ... \pgfplotspatchclass@qtri@F (6 points) + \expandafter\edef\csname pgfplotspatchclass@qtri@\pgfplotspatchclass@qtri@no\endcsname{#1}% + \if F\pgfplotspatchclass@qtri@no + \def\pgfplotspatchclass@qtri@no{A}% + \pgfplotspatchready + \else + \expandafter\let\expandafter\pgfplotspatchclass@qtri@no\csname pgfpptchindexnext@\pgfplotspatchclass@qtri@no\endcsname + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@B\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@C\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@D\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@E\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@F\endvertex #1% + }, + fill path={% + \begingroup + % Draw the patch boundary using three bezier curves. + % + % Since I have lagrange points to describe the patch (i.e. + % points the patch passes through), I have to convert the + % lagrange representation to bezier. + % + % Furthermore, I convert to *cubic* bezier since pdf only + % supports cubic curves. + % + % See the docs for 'biquadratic::fill path' for more details, + % in does the same. + \def\pgfplots@edge{% + \ifx\pgfplotspatchclass@qtri@A\PA + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\PA\endvertex}% + \fi + \pgfpathcurveto {% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}% + }{% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}% + }{% + \expandafter\pgfplotspointpatchvertex\PC\endvertex + }% + }% + \let\PA=\pgfplotspatchclass@qtri@A + \let\PB=\pgfplotspatchclass@qtri@D + \let\PC=\pgfplotspatchclass@qtri@B + \pgfplots@edge + % + \let\PA=\pgfplotspatchclass@qtri@B + \let\PB=\pgfplotspatchclass@qtri@E + \let\PC=\pgfplotspatchclass@qtri@C + \pgfplots@edge + % + \let\PA=\pgfplotspatchclass@qtri@C + \let\PB=\pgfplotspatchclass@qtri@F + \let\PC=\pgfplotspatchclass@qtri@A + \pgfplots@edge + \endgroup + \pgfpathclose + }, + %-------------------------------------------------- + % stroke path={% + % \ifx\pgfplotspatchclass@qtrie@AB\relax + % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@A\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@B\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@C\endvertex}% + % \pgfpathclose + % \else + % \if1\pgfplotspatchclass@qtrie@AB + % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@A\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@B\endvertex}% + % \fi + % \if1\pgfplotspatchclass@qtrie@BC + % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@B\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@C\endvertex}% + % \fi + % \if1\pgfplotspatchclass@qtrie@CA + % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@C\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@qtri@A\endvertex}% + % \fi + % \fi + % }, + %-------------------------------------------------- + stream to shader={% + % create a degenerate coons patch: + \begingroup +%\message{EDGE INIT^^J}% + % this defines \Pcur and \Pnextseq : + \pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth + % + \pgfutil@namelet{Pstart}{pgfplotspatchclass@qtri@\Pcur}% + % + % see the docus for "fill path" about these 1.33333 and -0.33333 factors + \def\pgfplots@coonsedge{% +%\message{EDGE \Pcur^^J}% + \expandafter\let\expandafter\PA\csname pgfplotspatchclass@qtri@\Pcur\endcsname + \edef\Pcur{\csname pgfplots@qtri@\Pnextseq next@\Pcur\endcsname}% +%\message{---> \Pcur^^J}% + \expandafter\let\expandafter\PB\csname pgfplotspatchclass@qtri@\Pcur\endcsname + \edef\Pcur{\csname pgfplots@qtri@\Pnextseq next@\Pcur\endcsname}% +%\message{---> \Pcur^^J}% + \expandafter\let\expandafter\PC\csname pgfplotspatchclass@qtri@\Pcur\endcsname + \ifx\PA\Pstart + \expandafter\pgfplotspatchvertex\PA\endvertex + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}% + % degenerate: the "edge" \PA -- \PA collabses into one + % point. + % Per construction, the "edge" is the FOREGROUND. +%\message{STREAMING COLLAPSED EDGE AT START POINT^^J}% + \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}% + \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}% + \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}% + \fi + \pgfplotslibrarysurfstreamcoord{% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}% + }{}% + \pgfplotslibrarysurfstreamcoord{% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}% + }{}% + \ifx\PC\Pstart + \else + \expandafter\pgfplotspatchvertex\PC\endvertex + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}% + \fi + }% + \pgfplots@coonsedge + % + \pgfplots@coonsedge + % + \pgfplots@coonsedge + % + % + \endgroup + },% + triangulate={% + \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass + \def\pgfplotsplothandlermesh@patchclass{triangle}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}11% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}20% + % Ok. Now create 4 triangles. The ordering is not arbitrary + % (unless z buffer=sort is in effect). Let's assume that the + % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then + % this sequence here should have approximately the same depth + % ordering: + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D}% + % + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}00% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}10% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E}% + % + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}11% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@B}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F}% + \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@ + },% + set edge visible={% + \ifcase#1 + \edef\pgfplotspatchclass@qtrie@AB{#2}% + \or + \edef\pgfplotspatchclass@qtrie@BC{#2}% + \or + \edef\pgfplotspatchclass@qtrie@CA{#2}% + \fi + }, + serialize except vertices={% + \ifx\pgfplotspatchclass@qtrie@AB\relax + \let\pgfplotsretval\pgfutil@empty% + \else + \edef\pgfplotsretval{% + \noexpand\def\noexpand\pgfplotspatchclass@qtrie@AB{\pgfplotspatchclass@qtrie@AB}% + \noexpand\def\noexpand\pgfplotspatchclass@qtrie@BC{\pgfplotspatchclass@qtrie@BC}% + \noexpand\def\noexpand\pgfplotspatchclass@qtrie@CA{\pgfplotspatchclass@qtrie@CA}% + }% + \fi + },% + deserialize except vertices=% + \let\pgfplotspatchclass@qtrie@AB\relax + #1, + recursive refine@={% + \pgfplotspatchclass@qtri@recursiverefine@newnames + % + \pgfplotspatchclass{\pgfplotspatchclassname}{new}% + %-------------------------------------------------- + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}01% + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}11% + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}20% + %-------------------------------------------------- + % The ordering is not arbitrary + % (unless z buffer=sort is in effect). Let's assume that the + % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then + % this sequence here should have approximately the same depth + % ordering: + % + % I used the reference triangle and shape functions as listed in + % http://www.colorado.edu/engineering/CAS/courses.d/IFEM.d/ + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@AD + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.25}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DF + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@AF + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@A@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@AF}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@AD}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DF}% + % + #1\pgfplotspatchclass@qtri@recursiverefine@newnames + % + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.25}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DF + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.25}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DE + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.25}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@EF + % + % + %-------------------------------------------------- + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}00% + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}10% + %-------------------------------------------------- + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DF}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DE}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@EF}% + % % + % %-------------------------------------------------- + % % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}01% + % % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}11% + % %-------------------------------------------------- + #1\pgfplotspatchclass@qtri@recursiverefine@newnames + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DB + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.25}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@DE + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@BE + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@D@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@B@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DB}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@BE}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@DE}% + % + #1\pgfplotspatchclass@qtri@recursiverefine@newnames + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@EC + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@B\times{-.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@D\times{0.25}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@E\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@EF + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@A\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@C\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@qtri@F\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@qtri@CF + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@E@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@C@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@F@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@EC}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@CF}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@qtri@EF}% + % + #1% + % + },% + get pdf shading type=6, + get num vertices=6, +}% + + +% see +% \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth +% and its documentation. +% +% POSTCONDITION: +% \Pcur and \Pnextseq are defined. +\def\pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth{% + \def\Pcur{A}% + \def\Pnextseq{}% + % + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@A\endvertex + \ifx\pgfplotspatchvertexdepth\pgfutil@empty + \else + % ah. We have view depth. Use it! + % The idea here is as follows. + % According to pdf standard, the COONS Shading is + % generated in the unit cube and then mapped to the + % shading. If u,v in [0,1] are the coordinates in the unit + % cube, pixel values for v=1 overwrite values for v=0. + % If pixel values have the same v, u=1 overwrites u=0. + % In other words, the loop is + % for v= 0 to Nv + % for u = 0 to Nu + % shade pixel for (u,v) + % + % BB-------CC <--v=1 + % | | + % | | + % | | + % AA-------DD <--v=0 + % | | + % u=0 u=1 + % + % + % IDEA: re-order the sequence of vertices such that z + % buffering is obtained. + % + % APPROACH: + % the edge BB--CC collapses into just one point, namely + % the FOREGROUND point (i.e. it is drawn on top of + % everything else). + % + % The AA point is the second nearest foreground point. + % The sequence is chosen such that AA,BB is the first + % edge. + % + % What is to do (besides determining the vertices for AA + % and BB)? Well, make sure, that we can arrange them in + % the desired order. This involves a periodic "next vertex" + % algorithm which might either go forward + % or backward. + % + % sort according to depth. + % To do so, prepare macros \PA,\PB,\PC for use in + % \pgfplotsutilsortthree. FORMAT: + % \PA={<sortkey>pt <originalindex>} + \edef\PA{\pgfplotspatchvertexdepth pt A}% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@B\endvertex + \edef\PB{\pgfplotspatchvertexdepth pt B}% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@qtri@C\endvertex + \edef\PC{\pgfplotspatchvertexdepth pt C}% + \pgfplotsutilsortthree\PA\PB\PC + \def\toCHAR##1pt ##2{##2}% get original index + % + \edef\Pcur{\expandafter\toCHAR\PB}%% + \edef\Pnext{\csname pgfplots@qtri@next@\Pcur\endcsname}% + \edef\Pnext{\csname pgfplots@qtri@next@\Pnext\endcsname}% + \if\Pnext\PA + % ok, next(next(AA)) = BB. + % that means we have to advance forward. + \def\Pnextseq{}% + \else + % well, since we have a triangle, there only remains + % the backwards direction. + \def\Pnextseq{r}% + \fi +%\message{FOREGROUND VERTEX = \PA.^^J}% +%\message{SECOND NEAREST VERTEX = \PB.^^J}% + \fi +} +\def\pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth@no@op{% + \def\Pcur{A}% + \def\Pnextseq{}% +} + +% bilinear is the same as 'rectangle', but it uses a different shader. +\pgfplotsdeclarepatchclass{bilinear}{% + allow matrix=1, + new=\def\pgfplotspatchclass@rect@no{0}, + set next vertex={% + \ifcase\pgfplotspatchclass@rect@no\relax + \edef\pgfplotspatchclass@rect@A{#1}% + \def\pgfplotspatchclass@rect@no{1}% + \or + \edef\pgfplotspatchclass@rect@B{#1}% + \def\pgfplotspatchclass@rect@no{2}% + \or + \edef\pgfplotspatchclass@rect@C{#1}% + \def\pgfplotspatchclass@rect@no{3}% + \or + \edef\pgfplotspatchclass@rect@D{#1}% + \def\pgfplotspatchclass@rect@no{0}% + \pgfplotspatchready% + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@B\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@C\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@D\endvertex #1% + }, + stream to shader={% + % create a coons patch: + \begingroup + \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth + {pgfplotspatchclass@rect@}{\Pcur}{\Pnextseq}% + % + \pgfutil@namelet{Pstart}{pgfplotspatchclass@rect@\Pcur}% + \def\pgfplots@coonsedge{% +%\message{EDGE \Pcur^^J}% + \expandafter\let\expandafter\PA\csname pgfplotspatchclass@rect@\Pcur\endcsname + \edef\Pcur{\csname pgfplots@rect@\Pnextseq next@\Pcur\endcsname}% +%\message{---> \Pcur^^J}% + \expandafter\let\expandafter\PB\csname pgfplotspatchclass@rect@\Pcur\endcsname + \ifx\PA\Pstart + \expandafter\pgfplotspatchvertex\PA\endvertex + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}% + \fi + % + % CONTROL POINT A+1/3(B-A) + \pgfplotslibrarysurfstreamcoord{% + \pgfpointadd + {\pgfqpointscale{0.6666666}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}% + {\pgfqpointscale{0.3333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + }{}% + % CONTROL POINT A+2/3(B-A) + \pgfplotslibrarysurfstreamcoord{% + \pgfpointadd + {\pgfqpointscale{0.3333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}% + {\pgfqpointscale{0.6666666}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + }{}% + \ifx\PB\Pstart + \else + \expandafter\pgfplotspatchvertex\PB\endvertex + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}% + \fi + }% + % + \pgfplots@coonsedge + % + \pgfplots@coonsedge + % + \pgfplots@coonsedge + % + \pgfplots@coonsedge + % + \endgroup + },% + fill path={% + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@A\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@B\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@C\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@D\endvertex}% + \pgfpathclose + }, + triangulate={% + \pgfplotscoordmath{meta}{parsenumber}{0.25}% + \let\pgfplots@loc@scale=\pgfmathresult + % + \pgf@xa=0pt + \pgf@ya=0pt + \pgf@yb=0pt + \pgfplotscoordmath{meta}{zero}% + \def\pgfplots@loc@accum@mean{% + \advance\pgf@xa by\pgfplotspatchvertexx\relax + \advance\pgf@ya by\pgfplotspatchvertexy\relax + \pgfplotscoordmath{meta}{op}{add}{{\pgfmathresult}{\pgfplotspatchvertexmeta}}% + \ifx\pgfplotspatchvertexdepth\pgfutil@empty + \else + \advance\pgf@yb by\pgfplotspatchvertexdepth pt\relax + \fi + }% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex \pgfplots@loc@accum@mean% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@B\endvertex \pgfplots@loc@accum@mean% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@C\endvertex \pgfplots@loc@accum@mean% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@D\endvertex \pgfplots@loc@accum@mean% + % + \divide\pgf@xa by4 + \divide\pgf@ya by4 + \divide\pgf@yb by4 + \pgfplotscoordmath{meta}{op}{multiply}{{\pgfmathresult}{\pgfplots@loc@scale}}% + \edef\pgfplotspatchclass@rect@M{{\the\pgf@xa}{\the\pgf@ya}{\pgfmathresult}\ifx\pgfplotspatchvertexdepth\pgfutil@empty\else \pgf@sys@tonumber\pgf@yb\fi}% + % + \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass + \def\pgfplotsplothandlermesh@patchclass{triangle}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}10% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}20% + % Ok. Now create 4 triangles. The ordering is not arbitrary + % (unless z buffer=sort is in effect). Let's assume that the + % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then + % this sequence here should have approximately the same depth + % ordering: + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@M}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@M}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@M}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@M}% + \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@ + },% + recursive refine@={% + \pgfplotspatchclass@rect@refine@{#1}% + },% + serialize except vertices=\let\pgfplotsretval\pgfutil@empty,% + deserialize except vertices=, + get pdf shading type=6, + get num vertices=4, +}% + +\pgfplotsdeclarepatchclass{rectangle}{% + recursive refine@={% + \pgfplotspatchclass@rect@refine@{#1}% + },% +} +\def\pgfplotspatchclass@rect@refine@#1{% + \pgfplotspatchclass@rect@recursiverefine@newnames + % + \pgfplotspatchclass{\pgfplotspatchclassname}{new}% + %-------------------------------------------------- + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}01% + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}11% + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}20% + %-------------------------------------------------- + % The ordering is not arbitrary + % (unless z buffer=sort is in effect). Let's assume that the + % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then + % this sequence here should have approximately the same depth + % ordering: + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.25}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.25}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.25}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.25}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@M + % + \expandafter\pgfplotspatchclass@rect@refine@@\expandafter{\pgfplotspatchclass@rect@M}{#1}% +} +\def\pgfplotspatchclass@rect@refine@@#1#2{% + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@AB + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@DA + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@A@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@AB}% + \pgfplotsplothandlermesh@setnextvertex{#1}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@DA}% + #2\pgfplotspatchclass@rect@recursiverefine@newnames + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@AB + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@BC + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@AB}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@BC}% + \pgfplotsplothandlermesh@setnextvertex{#1}% + #2\pgfplotspatchclass@rect@recursiverefine@newnames + % + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@CD + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@B\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@BC + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@BC}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@C@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@CD}% + \pgfplotsplothandlermesh@setnextvertex{#1}% + #2\pgfplotspatchclass@rect@recursiverefine@newnames + % + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@C\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@CD + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@D\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@rect@A\times{0.5}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@rect@DA + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@CD}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@DA}% + \pgfplotsplothandlermesh@setnextvertex{#1}% + #2\pgfplotspatchclass@rect@recursiverefine@newnames + % +}% + +\def\pgfplotspatchclass@rect@recursiverefine@newnames{% + \let\pgfplotspatchclass@rect@A@=\pgfplotspatchclass@rect@A% + \let\pgfplotspatchclass@rect@B@=\pgfplotspatchclass@rect@B% + \let\pgfplotspatchclass@rect@C@=\pgfplotspatchclass@rect@C% + \let\pgfplotspatchclass@rect@D@=\pgfplotspatchclass@rect@D% +}% + +\def\pgfplots@biquad@next@A{E} +\def\pgfplots@biquad@next@B{F} +\def\pgfplots@biquad@next@C{G} +\def\pgfplots@biquad@next@D{H} +\def\pgfplots@biquad@next@E{B} +\def\pgfplots@biquad@next@F{C} +\def\pgfplots@biquad@next@G{D} +\def\pgfplots@biquad@next@H{A} + + +\def\pgfplots@biquad@rnext@A{H} +\def\pgfplots@biquad@rnext@B{E} +\def\pgfplots@biquad@rnext@C{F} +\def\pgfplots@biquad@rnext@D{G} +\def\pgfplots@biquad@rnext@E{A} +\def\pgfplots@biquad@rnext@F{B} +\def\pgfplots@biquad@rnext@G{C} +\def\pgfplots@biquad@rnext@H{D} + +\def\pgfplotspatchclass@biquad@recursiverefine@newnames{% + \let\pgfplotspatchclass@biquad@A@=\pgfplotspatchclass@biquad@A% + \let\pgfplotspatchclass@biquad@B@=\pgfplotspatchclass@biquad@B% + \let\pgfplotspatchclass@biquad@C@=\pgfplotspatchclass@biquad@C% + \let\pgfplotspatchclass@biquad@D@=\pgfplotspatchclass@biquad@D% + \let\pgfplotspatchclass@biquad@E@=\pgfplotspatchclass@biquad@E% + \let\pgfplotspatchclass@biquad@F@=\pgfplotspatchclass@biquad@F% + \let\pgfplotspatchclass@biquad@G@=\pgfplotspatchclass@biquad@G% + \let\pgfplotspatchclass@biquad@H@=\pgfplotspatchclass@biquad@H% + \let\pgfplotspatchclass@biquad@I@=\pgfplotspatchclass@biquad@I% +}% + + +% mathematica shape functions parameterized in +% (xi,eta) in [-1,1]x[-1,1]: +%f[xi_, eta_] = +% a*1/4*(1 - xi) (1 - eta) xi*eta + +% b 1/4 (-1 - xi) (1 - eta) xi*eta + +% c* 1/4 (-1 - xi) (-1 - eta) xi*eta + +% d *1/4 (1 - xi) (-1 - eta) xi*eta + +% e * 1/2 (xi^2 - 1) (1 - eta) eta + +% f*1/2 (-1 - xi) (eta^2 - 1) xi + +% g* -1/2 (1 - xi^2) (-1 - eta) eta + +% h* -1/2 (1 - xi) (1 - eta^2) xi + +% i*(1 - xi^2) (1 - eta^2) +% here, a,b,...,i are the 9 nodes. +\pgfplotsdeclarepatchclass{biquadratic}{% + allow matrix=0, + new=\def\pgfplotspatchclass@biquad@no{A}\let\pgfplotspatchclass@biquade@AB\relax, + set next vertex={% + % defines \pgfplotspatchclass@biquad@A ... \pgfplotspatchclass@biquad@I (9 points) + \expandafter\edef\csname pgfplotspatchclass@biquad@\pgfplotspatchclass@biquad@no\endcsname{#1}% + \if I\pgfplotspatchclass@biquad@no + \def\pgfplotspatchclass@biquad@no{A}% + \pgfplotspatchready + \else + \expandafter\let\expandafter\pgfplotspatchclass@biquad@no\csname pgfpptchindexnext@\pgfplotspatchclass@biquad@no\endcsname + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@B\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@C\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@D\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@E\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@F\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@G\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@H\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@biquad@I\endvertex #1% + }, + fill path={% + \begingroup + % Visualize the patch boundary using four bezier curves. + % + % This involves a change from Lagrange to bezier + % representation of the boundary curves. + % + % Furthermore, pdf supports only **cubic** bezier curves. What + % I am doing here is + % a) change of basis from 3-point lagrange ---> 3 point quadratic bezier + % b) expression 3 point quadratic bezier ----> 4 point cubic bezier + % + % INPUT: + % 3 langrange points (i.e. the patch passes through them) + % \PA,\PB,\PC (start,middle,end) + % + % OUTPUT: + % \PA,bezier control 1, bezier control 2, \PC. + % + \def\pgfplots@edge{% + \ifx\pgfplotspatchclass@biquad@A\PA + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\PA\endvertex}% + \fi + \pgfpathcurveto {% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}% + }{% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}% + }{% + \expandafter\pgfplotspointpatchvertex\PC\endvertex + }% + }% + \let\PA=\pgfplotspatchclass@biquad@A + \let\PB=\pgfplotspatchclass@biquad@E + \let\PC=\pgfplotspatchclass@biquad@B + \pgfplots@edge + % + \let\PA=\pgfplotspatchclass@biquad@B + \let\PB=\pgfplotspatchclass@biquad@F + \let\PC=\pgfplotspatchclass@biquad@C + \pgfplots@edge + % + \let\PA=\pgfplotspatchclass@biquad@C + \let\PB=\pgfplotspatchclass@biquad@G + \let\PC=\pgfplotspatchclass@biquad@D + \pgfplots@edge + % + \let\PA=\pgfplotspatchclass@biquad@D + \let\PB=\pgfplotspatchclass@biquad@H + \let\PC=\pgfplotspatchclass@biquad@A + \pgfplots@edge + \endgroup + \pgfpathclose + }, + %-------------------------------------------------- + % stroke path={% + % \ifx\pgfplotspatchclass@biquade@AB\relax + % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@A\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@B\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@C\endvertex}% + % \pgfpathclose + % \else + % \if1\pgfplotspatchclass@biquade@AB + % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@A\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@B\endvertex}% + % \fi + % \if1\pgfplotspatchclass@biquade@BC + % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@B\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@C\endvertex}% + % \fi + % \if1\pgfplotspatchclass@biquade@CA + % \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@C\endvertex}% + % \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@biquad@A\endvertex}% + % \fi + % \fi + % }, + %-------------------------------------------------- + stream to shader={% + \begingroup + \pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth + {pgfplotspatchclass@biquad@}{\Pcur}{\Pnextseq}% + % + \let\Pstartidx\Pcur% + \pgfutil@namelet{Pstart}{pgfplotspatchclass@biquad@\Pcur}% + % + % create a tensor cubic bezier patch. + % + % Again, the outer boundary involves a map from 3 point lagrange + % representation to 4 point cubic bezier. + % + % The main complication arises to support the INNER node (\pgfplotspatchclass@biquad@I) . + % We need the four inner bezier control points to get it + % correctly. + % + % this here handles only the OUTER shaper. It is the same as + % for 'fill path'. + % See 'fill path' for docs. + % + \pgfplotspatchclass@biquad@coonsedge + % + \pgfplotspatchclass@biquad@coonsedge + % + \pgfplotspatchclass@biquad@coonsedge + % + \pgfplotspatchclass@biquad@coonsedge + % + % FIXME: + % \pgfplotspatchclass@biquad@innercontrolpoints + % + \endgroup + },% + triangulate={% + \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass + \def\pgfplotsplothandlermesh@patchclass{triangle}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}10% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}20% + % Ok. Now create 4 triangles. The ordering is not arbitrary + % (unless z buffer=sort is in effect). Let's assume that the + % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then + % this sequence here should have approximately the same depth + % ordering: + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@E}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@H}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@E}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@B}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@B}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@F}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@H}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@G}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@G}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}% + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@F}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I}% + \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@ + },% + %-------------------------------------------------- + % set edge visible={% + % \ifcase#1 + % \edef\pgfplotspatchclass@biquade@AB{#2}% + % \or + % \edef\pgfplotspatchclass@biquade@BC{#2}% + % \or + % \edef\pgfplotspatchclass@biquade@CA{#2}% + % \fi + % }, + %-------------------------------------------------- + serialize except vertices={% + \ifx\pgfplotspatchclass@biquade@AB\relax + \let\pgfplotsretval\pgfutil@empty% + \else + \edef\pgfplotsretval{% + \noexpand\def\noexpand\pgfplotspatchclass@biquade@AB{\pgfplotspatchclass@biquade@AB}% + \noexpand\def\noexpand\pgfplotspatchclass@biquade@BC{\pgfplotspatchclass@biquade@BC}% + \noexpand\def\noexpand\pgfplotspatchclass@biquade@CA{\pgfplotspatchclass@biquade@CA}% + }% + \fi + },% + deserialize except vertices=% + \let\pgfplotspatchclass@biquade@AB\relax + #1, + recursive refine@={% + \pgfplotspatchclass@biquad@recursiverefine@newnames + % + \pgfplotspatchclass{\pgfplotspatchclassname}{new}% + %-------------------------------------------------- + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}01% + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}11% + % \pgfplotspatchclass{\pgfplotspatchclassname}{set edge visible}20% + %-------------------------------------------------- + % The ordering is not arbitrary + % (unless z buffer=sort is in effect). Let's assume that the + % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then + % this sequence here should have approximately the same depth + % ordering: + % + % I used the reference triangle and shape functions as listed in + % http://www.colorado.edu/engineering/CAS/courses.d/IFEM.d/, + % see above for the definition of f[xi,eta] + % + % N[{f[-1/2, -1], f[0, -1/2], f[-1/2, 0], f[-1, -1/2], f[-1/2, -1/2]}] + % {0.375` a - 0.125` b + 0.75` e, + % 0.375` e - 0.125` g + 0.75` i, + % -0.125` f + 0.375` h + 0.75` i, + % 0.375` a - 0.125` d + 0.75` h, + % 0.140625` a - 0.046875` b + 0.015625` c - 0.046875` d + + % 0.28125` e - 0.09375` f - 0.09375` g + 0.28125` h + + % 0.5625` i} + %-------------------------------------------------- + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@AE + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@EI + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@HI + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@AH + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{0.140625}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{-0.046875}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{0.015625}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{-0.046875}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.28125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{-0.09375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{-0.09375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.28125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.5625}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@AEIH + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@A@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@E@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@H@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@AE}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@EI}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@HI}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@AH}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@AEIH}% + % + #1\pgfplotspatchclass@biquad@recursiverefine@newnames + % + % N[{f[1/2, -1], f[1, -1/2], f[1/2, 0], f[1/2, -1/2]}] + % {-0.125` a + 0.375` b + 0.75` e, + % 0.375` b - 0.125` c + 0.75` f, + % 0.375` f - 0.125` h + 0.75` i, + % -0.046875 a + 0.140625 b - 0.046875 c + 0.015625 d + 0.28125 e + 0.28125 f - 0.09375 g - 0.09375 h + 0.5625 i} + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@EB + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@BF + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@FI + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@EI + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{-0.046875}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{0.140625}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{-0.046875}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{0.015625}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{0.28125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.28125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{-0.09375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{-0.09375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.5625}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@EBFI + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@E@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@B@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@F@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@EB}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@BF}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@FI}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@EI}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@EBFI}% + % + #1\pgfplotspatchclass@biquad@recursiverefine@newnames + % + % + % N[ {f[1, 1/2], f[1/2, 1], f[0, 1/2], f[1/2, 1/2]}] + % {-0.125` b + 0.375` c + 0.75` f, + % 0.375` c - 0.125` d + 0.75` g, + % -0.125` e + 0.375` g + 0.75` i, + % 0.015625` a - 0.046875` b + 0.140625` c - 0.046875` d - 0.09375` e + 0.28125` f + 0.28125` g - 0.09375` h + 0.5625` i} + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@FC + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@CG + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@GI + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@FI + % + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{0.015625}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{-0.046875}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{0.140625}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{-0.046875}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{-0.09375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{0.28125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.28125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{-0.09375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.5625}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@IFCG + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@F@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@C@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@G@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@FI}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@FC}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@CG}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@GI}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@IFCG}% + % + #1\pgfplotspatchclass@biquad@recursiverefine@newnames + % + % + % N[{f[-1/2, 1], f[-1, 1/2], f[-1/2, 1/2]}] + % {-0.125 c + 0.375 d + 0.75 g, + % -0.125 a + 0.375 d + 0.75 h, + % -0.046875 a + 0.015625 b - 0.046875 c + 0.140625 d - 0.09375 e - 0.09375 f + 0.28125 g + 0.28125 h + 0.5625 i} + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@GD + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@DH + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@GI + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{-0.125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@HI + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@A\times{-0.046875}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@B\times{0.015625}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@C\times{-0.046875}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@D\times{0.140625}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@E\times{-0.09375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@F\times{-0.09375}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@G\times{0.28125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@H\times{0.28125}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@biquad@I\times{0.5625}% + \pgfplotspatchvertexfinish\pgfplotspatchclass@biquad@HIGD + % + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@H@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@I@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@G@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@D@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@HI}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@GI}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@GD}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@DH}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@biquad@HIGD}% + % + #1% + % + },% + get pdf shading type=6, + get num vertices=9, +}% + +% see docs in 'biquadratic::stream to shader' for details. +% PRECONDITION: to be used inside of 'stream to shader'. +\def\pgfplotspatchclass@biquad@coonsedge{% +%\message{EDGE \Pcur^^J}% + \expandafter\let\expandafter\PA\csname pgfplotspatchclass@biquad@\Pcur\endcsname + \edef\Pcur{\csname pgfplots@biquad@\Pnextseq next@\Pcur\endcsname}% + \expandafter\let\expandafter\PB\csname pgfplotspatchclass@biquad@\Pcur\endcsname +%\message{---> \Pcur^^J}% + \edef\Pcur{\csname pgfplots@biquad@\Pnextseq next@\Pcur\endcsname}% + \expandafter\let\expandafter\PC\csname pgfplotspatchclass@biquad@\Pcur\endcsname +%\message{---> \Pcur^^J}% + \ifx\PA\Pstart + \expandafter\pgfplotspatchvertex\PA\endvertex + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}% + \fi + \pgfplotslibrarysurfstreamcoord{% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}% + }{}% + \pgfplotslibrarysurfstreamcoord{% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}% + }{}% + \ifx\PC\Pstart + \else + \expandafter\pgfplotspatchvertex\PC\endvertex + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotslibrarysurfstreamcoord{\pgfqpoint\pgfplotspatchvertexx\pgfplotspatchvertexy}{\pgfplotspointmetatransformed}% + \fi +}% +\def\pgfplotspatchclass@biquad@innercontrolpoints{% + \begingroup + % + % This here computes the FOUR INNER CONTROL POINTS of a tensor + % cubic bezier patch (Shading Type 7). + % + % + % the following point coordinates have been acquired from + % biquadratic::recursive refine. See above for documentation. + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@A\times{0.375}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@B\times{-0.125}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@E\times{0.75}% + \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@AE + % + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@F\times{-0.125}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@H\times{0.375}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@HI + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@A\times{-0.125}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@B\times{0.375}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@E\times{0.75}% + \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@EB + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@F\times{0.375}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@H\times{-0.125}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@I\times{0.75}% + \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@FI + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@C\times{0.375}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@D\times{-0.125}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@G\times{0.75}% + \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@CG + % + \pgfplotspatchvertexaccumstart + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@C\times{-0.125}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@D\times{0.375}% + \expandafter\pgfplotspatchvertexaddXY\pgfplotspatchclass@biquad@G\times{0.75}% + \pgfplotspatchvertexfinishXY\pgfplotspatchclass@biquad@GD + % + % + \let\PA=\pgfplotspatchclass@biquad@AE + \let\PB=\pgfplotspatchclass@biquad@HI + \let\PC=\pgfplotspatchclass@biquad@GD + \pgfplotspatchclass@biquad@innercontrolpoints@PREPARE\pgfplotspatchclass@biquad@@A\pgfplotspatchclass@biquad@@D + % + \let\PA=\pgfplotspatchclass@biquad@EB + \let\PB=\pgfplotspatchclass@biquad@FI + \let\PC=\pgfplotspatchclass@biquad@CG + \pgfplotspatchclass@biquad@innercontrolpoints@PREPARE\pgfplotspatchclass@biquad@@B\pgfplotspatchclass@biquad@@C + % + % + \let\Pcur=\Pstartidx + \pgfplotslibrarysurfstreamcoord{\csname pgfplotspatchclass@biquad@@\Pcur\endcsname}{}% + % + \edef\Pcur{\csname pgfplots@rect@\Pnextseq next@\Pcur\endcsname}% + \pgfplotslibrarysurfstreamcoord{\csname pgfplotspatchclass@biquad@@\Pcur\endcsname}{}% + % + \edef\Pcur{\csname pgfplots@rect@\Pnextseq next@\Pcur\endcsname}% + \pgfplotslibrarysurfstreamcoord{\csname pgfplotspatchclass@biquad@@\Pcur\endcsname}{}% + % + \edef\Pcur{\csname pgfplots@rect@\Pnextseq next@\Pcur\endcsname}% + \pgfplotslibrarysurfstreamcoord{\csname pgfplotspatchclass@biquad@@\Pcur\endcsname}{}% + \endgroup +}% +\def\pgfplotspatchclass@biquad@innercontrolpoints@PREPARE#1#2{% + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}}% + \edef#1{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% + % + \pgfpointadd + {\pgfqpointscale{1.333333}{\expandafter\pgfplotspointpatchvertex\PB\endvertex}}% + {\pgfqpointscale{-0.333333}{\expandafter\pgfplotspointpatchvertex\PA\endvertex}}% + \edef#2{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% + % +\pgfpathcircle{\expandafter\pgfplotspointpatchvertex\PA\endvertex}{1pt}\pgfusepath{fill}% +\pgfpathcircle{\expandafter\pgfplotspointpatchvertex\PB\endvertex}{1pt}\pgfusepath{fill}% +\pgfpathcircle{\expandafter\pgfplotspointpatchvertex\PC\endvertex}{1pt}\pgfusepath{fill}% +\pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\PA\endvertex}% +\pgfpathcurveto{#1}{#2}{\expandafter\pgfplotspointpatchvertex\PC\endvertex}% +\pgfusepath{stroke}% +} + +% Direct interface to coons patches (pdf shading type 6). +% See manual and/or pdf reference +\pgfplotsdeclarepatchclass{coons}{% + allow matrix=0, + new=\def\pgfplotspatchclass@coons@no{A}, + set next vertex={% + % defines \pgfplotspatchclass@coons@A ... \pgfplotspatchclass@coons@L (12 points) + \expandafter\edef\csname pgfplotspatchclass@coons@\pgfplotspatchclass@coons@no\endcsname{#1}% + \if L\pgfplotspatchclass@coons@no + \def\pgfplotspatchclass@coons@no{A}% + \pgfplotspatchready + \else + \expandafter\let\expandafter\pgfplotspatchclass@coons@no\csname pgfpptchindexnext@\pgfplotspatchclass@coons@no\endcsname + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@B\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@C\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@D\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@E\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@F\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@G\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@H\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@I\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@J\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@K\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@L\endvertex #1% + }, + foreach cdata vertex={% + % 0, 3, 6, 9 + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@D\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@G\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@coons@J\endvertex #1% + }, + fill path={% + \pgfpathmoveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@A\endvertex}% + \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@B\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@C\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@D\endvertex}% + \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@E\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@F\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@G\endvertex}% + \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@H\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@I\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@J\endvertex}% + \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@K\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@L\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@coons@A\endvertex}% + \pgfpathclose + }, + serialize except vertices=\let\pgfplotsretval\pgfutil@empty,% + deserialize except vertices=, + get pdf shading type=6, + get num vertices=12, + get num cdata vertices=4, +}% + +% Direct interface to tensor product bezier patches (pdf shading type 7). +% See manual and/or pdf reference +\pgfplotsdeclarepatchclass{tensor bezier}{% + allow matrix=0, + new=\def\pgfplotspatchclass@tensor@no{A}, + set next vertex={% + % defines \pgfplotspatchclass@tensor@A ... \pgfplotspatchclass@tensor@P (16 points) + \expandafter\edef\csname pgfplotspatchclass@tensor@\pgfplotspatchclass@tensor@no\endcsname{#1}% + \if P\pgfplotspatchclass@tensor@no + \def\pgfplotspatchclass@tensor@no{A}% + \pgfplotspatchready + \else + \expandafter\let\expandafter\pgfplotspatchclass@tensor@no\csname pgfpptchindexnext@\pgfplotspatchclass@tensor@no\endcsname + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@B\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@C\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@D\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@E\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@F\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@G\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@H\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@I\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@J\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@K\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@L\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@M\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@N\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@O\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@P\endvertex #1% + }, + foreach cdata vertex={% + % 0, 3, 6, 9 + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@D\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@G\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tensor@J\endvertex #1% + }, + fill path={% + \pgfpathmoveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@A\endvertex}% + \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@B\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@C\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@D\endvertex}% + \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@E\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@F\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@G\endvertex}% + \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@H\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@I\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@J\endvertex}% + \pgfpathcurveto {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@K\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@L\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tensor@A\endvertex}% + \pgfpathclose + }, + serialize except vertices=\let\pgfplotsretval\pgfutil@empty,% + deserialize except vertices=, + get pdf shading type=7, + get num vertices=16, + get num cdata vertices=4, +}% diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.polar.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.polar.code.tex new file mode 100644 index 00000000000..7502dac1c36 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.polar.code.tex @@ -0,0 +1,733 @@ +%-------------------------------------------- +% +% Package pgfplots, library for polar coordinates. +% +% Copyright 2010 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/>. +% +% A polar axis lives in (ANGLE,LENGTH). +% That is +% x == ANGLE +% y == LENGTH +% +% + +\pgfplotsdefineaxistype[polar]{polar}{% + \pgfplots@polaraxis@activate +}% + +\newif\ifpgfplots@polaraxis@rellimits + +\pgfplotsset{ + /pgfplots/every polar axis/.style={ + grid=major, + xtick pos=right, + ytick pos=right, + every axis title shift=1.2\baselineskip, + legend style={anchor=center}, + }, + /pgfplots/xticklabel in circle/.style={ + xtick align=inside, + xticklabel style={ + rotate=90, + sloped like x axis={% + execute for upside down={\tikzset{anchor=north east}}, + %allow upside down, + reset nontranslations=false}, + anchor=south west, + %font=\tiny, + } + }, +} + +\def\pgfplots@polaraxis@activate{% + \let\pgfplotsqpointxy@cart=\pgfplotsqpointxy + \let\pgfplotsqpointxy=\pgfplotsqpointxy@polaraxis + \let\pgfplotsqpointxy@orthogonal=\pgfplotsqpointxy +% \def\pgfplotsqpointxyz##1##2##3{\pgfplotsqpointxy{##1}{##2}}% FIXME + \let\pgfplotspointouternormalvectorofaxis@=\pgfplotspointouternormalvectorofaxis@polaraxis + \def\pgfplotspointouternormalvectorofaxis@ifdependson@v##1##2##3{##2}% + \def\pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf##1{}% + \let\pgfplots@clippath@prepare@for@axistype=\pgfplots@clippath@prepare@for@axistype@polaraxis + \let\pgfplots@handle@invalid@range@defaultlimits=\pgfplots@handle@invalid@range@defaultlimits@polar% + \let\pgfplots@check@invalid@range=\pgfplots@check@invalid@range@polar + \let\pgfplotspointonorientedsurfaceabwithbshift=\pgfplotspointonorientedsurfaceabwithbshift@polaraxis + \let\pgfplots@drawgridlines@onorientedsurf@fromto=\pgfplots@drawgridlines@onorientedsurf@fromto@polar + \let\pgfplotspoint@initialisation@axes=\pgfplotspoint@initialisation@axes@polar% + \let\pgfplotspoint@initialisation@units=\pgfplotspoint@initialisation@units@polar + \let\pgfplotsaxisifcontainspoint=\pgfplotsaxisifcontainspoint@polar + \let\pgfplots@prepare@axis@API=\pgfplots@prepare@axis@API@polar + \def\axisdefaultheight{\axisdefaultwidth}% + \let\pgfplots@initsizes=\pgfplots@initsizes@polar + \let\pgfplots@limits@ready=\pgfplots@limits@ready@polar + \let\pgfplots@assign@default@tick@foraxis@normalizetickdist=\pgfplots@assign@default@tick@foraxis@normalizetickdist@polar + \let\pgfplots@show@ticklabel@=\pgfplots@show@ticklabel@@polar + \let\pgfplots@enlarge@limit@for=\pgfplots@enlarge@limit@for@polar + \def\pgfplots@xtick@disable@last@tick{0}% + \let\pgfplots@xtick@check@tickshow=\pgfplots@xtick@check@tickshow@polar% + \let\pgfplots@set@options@sanitize=\relax + \let\pgfplots@set@options@sanitizemode=\relax + \let\pgfplotscoordmathnotifydatascalesetfor=\pgfplotscoordmathnotifydatascalesetfor@polar + % + % this here is set *before* 'every polar axis' is invoked. + \pgfplotsset{ + enlarge x limits=false, + }% + \expandafter\def\expandafter\pgfplots@notify@options@are@set\expandafter{% + \pgfplots@notify@options@are@set + \pgfplotsset{separate axis lines}% + }% + \def\pgfplots@xticklabel@pos{}% + \def\pgfplots@yticklabel@pos{}% + \def\pgfplots@zticklabel@pos{}% + \def\pgfplots@init@ticklabelaxisspecfor##1##2{}% + \def\pgfplots@init@ticklabelaxisspec@twodim@for##1##2{}% + \def\pgfplots@xticklabelaxisspec{v10}% + \def\pgfplots@yticklabelaxisspec{0v0}% + \def\pgfplots@zticklabelaxisspec{00v}% + % + % cartesian cs + \tikzdeclarecoordinatesystem{cartesian}{\edef\pgfplots@loc@TMPa{##1}\expandafter\pgfplotspointcartesian@\pgfplots@loc@TMPa\pgfplots@coord@end}% + % +}% + +\let\pgfplots@prepare@axis@API@orig=\pgfplots@prepare@axis@API +\def\pgfplots@prepare@axis@API@polar{% + \pgfplots@prepare@axis@API@orig + \let\pgfplotsaxisupdatelimitsforcoordinatetwodim=\pgfplotsaxisupdatelimitsforcoordinatetwodim@polar + \let\pgfplotsaxisupdatelimitsforcoordinatethreedim=\pgfplotsaxisupdatelimitsforcoordinatetwodim@polar +}% + +\def\pgfplotsaxisupdatelimitsforcoordinatetwodim@polar#1#2#3{% + % + % + % Update limits: + % I do not respect x limits (since they are periodic). + % Consequently, I do not respect the clip limits options here (I + % suppose it is useless) + % + % for y (radius) limits, I always use the ABSOLUTE value: + \pgfmathfloatabs@{#2}% + \let\pgfplots@loc@limit=\pgfmathresult + % + \ifpgfplots@autocompute@ymax + \ifpgfplots@yislinear + \pgfplotsmathfloatmax{\pgfplots@ymax}{\pgfplots@loc@limit}% + \global\let\pgfplots@ymax=\pgfmathresult + \else + \pgfplotsmathmax{\pgfplots@ymax}{\pgfplots@loc@limit}% + \global\let\pgfplots@ymax=\pgfmathresult + \fi + \fi + % + % Compute data range: + \pgfplotsmathfloatmin{\pgfplots@data@xmin}{#1}% + \global\let\pgfplots@data@xmin=\pgfmathresult + \pgfplotsmathfloatmax{\pgfplots@data@xmax}{#1}% + \global\let\pgfplots@data@xmax=\pgfmathresult + \pgfplotsmathfloatmin{\pgfplots@data@ymin}{#2}% + \global\let\pgfplots@data@ymin=\pgfmathresult + \pgfplotsmathfloatmax{\pgfplots@data@ymax}{#2}% + \global\let\pgfplots@data@ymax=\pgfmathresult +%\pgfplots@message{Updated limits: (\pgfplots@xmin,\pgfplots@ymin) rectangle (\pgfplots@xmax,\pgfplots@ymax).}% +% +%\tracingmacros=0\tracingcommands=0 +}% +\def\pgfplotsaxisifcontainspoint@polar#1#2{% + \pgfmath@basic@mod@{\pgfplots@current@point@x}{360}% + \pgf@xa=\pgfmathresult pt % + % + \pgf@ya=\pgfplots@current@point@y pt % + \ifdim\pgf@ya<0pt + % absolute value: + \pgf@ya=-\pgf@ya + \fi + % + % I assume that \pgfplots@[xyz]min@reg and min@reg are registers + % containing the limits. + \pgfplots@loop@CONTINUEfalse + \ifdim\pgf@ya<\pgfplots@ymin@reg + \else + \ifdim\pgf@ya>\pgfplots@ymax@reg + \else + \if1\b@pgfplots@polar@limit@around@zero + % check condition + % x <= max || x >= min + % <=> ! (x > max && x < min) + \pgfplots@loop@CONTINUEtrue + \ifdim\pgf@xa>\pgfplots@xmax@mod pt % + \ifdim\pgf@xa<\pgfplots@xmin@mod pt % + \pgfplots@loop@CONTINUEfalse + \fi + \fi + \else + \ifdim\pgf@xa<\pgfplots@xmin@mod pt % + \else + \ifdim\pgf@xa>\pgfplots@xmax@mod pt % + \else + \pgfplots@loop@CONTINUEtrue + \fi + \fi + \fi + \fi + \fi + \ifpgfplots@loop@CONTINUE + \def\pgfplots@loc@TMPa{#1}% + \else + \def\pgfplots@loc@TMPa{#2}% + \fi + \pgfplots@loc@TMPa% +} + +\def\pgfplots@check@invalid@range@polar{% + % + % A polar axis allows \addplot3, but it ignores the third + % coordinate. + \pgfplots@threedimfalse + % + \pgfplots@limits@are@computedtrue + \ifx\pgfplots@xmin\pgfplots@invalidrange@xmin + \pgfplotscoordmath{x}{zero}% + \let\pgfplots@xmin=\pgfmathresult + \fi + \ifx\pgfplots@xmax\pgfplots@invalidrange@xmax + \pgfplotscoordmath{x}{parsenumber}{360}% + \let\pgfplots@xmax=\pgfmathresult + \fi + \ifx\pgfplots@ymin\pgfplots@invalidrange@ymin + \pgfplotscoordmath{y}{zero}% + \let\pgfplots@ymin=\pgfmathresult + \fi + \ifx\pgfplots@ymax\pgfplots@invalidrange@ymax + \pgfplots@limits@are@computedfalse + \fi + \ifpgfplots@limits@are@computed + \ifx\pgfplots@data@xmin\pgfplots@invalidrange@xmin + \global\let\pgfplots@data@xmin=\pgfplots@xmin + \fi + \ifx\pgfplots@data@xmin\pgfplots@invalidrange@xmax + \global\let\pgfplots@data@xmax=\pgfplots@xmax + \fi + \ifx\pgfplots@data@ymin\pgfplots@invalidrange@ymin + \global\let\pgfplots@data@ymin=\pgfplots@ymin + \fi + \ifx\pgfplots@data@ymin\pgfplots@invalidrange@ymax + \global\let\pgfplots@data@ymax=\pgfplots@ymax + \fi + \ifpgfplots@clip@limits + \else + % there is a rare change that min > max. + % Handle that ... + \pgfplotscoordmath{x}{min}{\pgfplots@xmin}{\pgfplots@xmax}% + \global\let\pgfplots@xmin=\pgfmathresult + \pgfplotscoordmath{x}{max}{\pgfplots@xmin}{\pgfplots@xmax}% + \global\let\pgfplots@xmax=\pgfmathresult + % + \pgfplotscoordmath{y}{min}{\pgfplots@ymin}{\pgfplots@ymax}% + \global\let\pgfplots@ymin=\pgfmathresult + \pgfplotscoordmath{y}{max}{\pgfplots@ymin}{\pgfplots@ymax}% + \global\let\pgfplots@ymax=\pgfmathresult + % + \ifpgfplots@threedim + \pgfplotscoordmath{z}{min}{\pgfplots@zmin}{\pgfplots@zmax}% + \global\let\pgfplots@zmin=\pgfmathresult + \pgfplotscoordmath{z}{max}{\pgfplots@zmin}{\pgfplots@zmax}% + \global\let\pgfplots@zmax=\pgfmathresult + \fi + \fi + \else + \pgfplots@handle@invalid@range + \fi +}% + +\def\pgfplotspointcartesian@#1,#2\pgfplots@coord@end{% + \pgfpointxy@orig{#1}{#2}% +}% +\def\pgfplotscoordmathnotifydatascalesetfor@polar#1{% + \def\pgfplotscoordmathnotifydatascalesetfor##1{}% + \edef\pgfplotscoordmathnotifydatascalesetfor@{#1}% + \def\pgfplotscoordmathnotifydatascalesetfor@@{x}% + \ifx\pgfplotscoordmathnotifydatascalesetfor@@\pgfplotscoordmathnotifydatascalesetfor@ + \pgfplotscoordmath{#1}{datascaletrafo set params}{0}{0}% + \else + \def\pgfplotscoordmathnotifydatascalesetfor@@{y}% + \ifx\pgfplotscoordmathnotifydatascalesetfor@@\pgfplotscoordmathnotifydatascalesetfor@ + \pgfplotscoordmath{#1}{datascaletrafo set shift}{0}% + \fi + \fi + \let\pgfplotscoordmathnotifydatascalesetfor=\pgfplotscoordmathnotifydatascalesetfor@polar +}% + +% #1: the "a" value on the oriented surf +% #2: the "b" value. +% #3: the shift along the normal. +% +\def\pgfplotspointonorientedsurfaceabwithbshift@polaraxis#1#2#3{% + % implement the shift in "b" direction explicitly: + % + \pgfplotspointonorientedsurfaceab{#1}{#2}% + \edef\pgfplots@loc@TMPe{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% + \pgfpointadd + {\pgfplots@loc@TMPe}% + {% + \begingroup + % I need a '-' here because for polaraxis axes, the "b" axis + % points to the *outside* instead of the inside. + \pgf@xa=-#3\relax + \if r\pgfkeysvalueof{/pgfplots/\pgfplotspointonorientedsurfaceB\space dir/value}% + % oh. a reversed axis. + \pgf@xa=-\pgf@xa + \fi + \edef\pgfmathresult{\pgf@sys@tonumber\pgf@xa}% + \pgfmath@smuggleone\pgfmathresult + \endgroup + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfqpointscale{\pgfplots@loc@TMPa}{% + \if x\pgfplotspointonorientedsurfaceB + % the angle. + % FIXME : datascaling! + % FIXME : aspect ratios! + \pgfmath@basic@sin@{#2}% + \pgf@x=-\pgfmathresult pt + \pgfmath@basic@cos@{#2}% + \pgf@y=\pgfmathresult pt + \else + % the length. + % FIXME : datascaling! + % FIXME : aspect ratios! + % perhaps pgfpointpolarxy? + \if y\pgfplotspointonorientedsurfaceB + \pgfqpointpolar{#1}{1pt}% + \else + \pgfpointorigin + \fi + \fi + }% + }% +} + + +\def\pgfplotsqpointxy@polaraxis#1#2{% + \pgf@process{% + \pgfplotsmathpoltocartbasic{#1}{#2}\x\y + \pgfqpointxy@orig\x\y +%\message{pgfplotsqpointxy{#1}{#2} ---> (\x,\y) ---> (\the\pgf@x,\the\pgf@y)}% + }% +}% +\def\pgfplots@clippath@prepare@for@axistype@polaraxis{% + \def\pgfplots@clippath@install##1{% + \pgfpathmoveto + {\pgfplotsqpointxy\pgfplots@xmin\pgfplots@ymax}% + \pgfpatharcaxes{\pgfplots@xmin}{\pgfplots@xmax} + {\pgfqpointxy@orig{\pgfplots@ymax}{0}}% + {\pgfqpointxy@orig{0}{\pgfplots@ymax}}% + \if1\pgfplots@xtick@disable@last@tick + % we have min angle = max angle. + \ifdim\pgfplots@ymin pt=0pt + \else + \pgfseteorule + \pgfpathmoveto + {\pgfplotsqpointxy\pgfplots@xmin\pgfplots@ymin}% + \pgfpatharcaxes{\pgfplots@xmin}{\pgfplots@xmax} + {\pgfqpointxy@orig{\pgfplots@ymin}{0}}% + {\pgfqpointxy@orig{0}{\pgfplots@ymin}}% + \fi + \else + % we have min angle != max angle. + \ifdim\pgfplots@ymin pt=0pt + % Ok, then pass through origin: + \pgfpathlineto\pgfplotspointaxisorigin + \else + % complicated special case. + \pgfpathlineto + {\pgfplotsqpointxy\pgfplots@xmax\pgfplots@ymin}% + \pgfpatharcaxes{\pgfplots@xmax}{\pgfplots@xmin} + {\pgfqpointxy@orig{\pgfplots@ymin}{0}}% + {\pgfqpointxy@orig{0}{\pgfplots@ymin}}% + \fi + \pgfpathclose + \fi + \pgfplots@clippath@use@{##1}% + }% +}% + +\def\pgfplotspointouternormalvectorofaxis@polaraxis#1#2#3\relax{% + \if v#1% + \pgfplotspointouternormalvectorofaxisgetv{#1#2#3}% + % in direction of the length. + \ifx\pgfplotsretval\pgfutil@empty + \def\pgfplotsretval{0}% + \fi + % FIXME : datascaling! + % FIXME : aspect ratios! + % perhaps pgfpointpolarxy? + \pgfqpointpolar{\pgfplotsretval}{1pt}% + \else + \if v#2% + \if#10% + \def\pgfplotsretval{\pgfplots@xmin}% + \else + \def\pgfplotsretval{\pgfplots@xmax}% + \fi + % in direction of the angle. + % FIXME : datascaling! + % FIXME : aspect ratios! + \pgfmath@basic@sin@{\pgfplotsretval}% + \pgf@x=-\pgfmathresult pt + \pgfmath@basic@cos@{\pgfplotsretval}% + \pgf@y=\pgfmathresult pt + \else + \pgfqpoint{0pt}{1pt}% + \fi + \fi + %\pgf@process{\pgfpointnormalised{}}% + \pgf@process{}% + \endgroup +}% + +\def\pgfplotspoint@initialisation@axes@polar{% + % + \begingroup + \pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}% + \xdef\pgfplotspointminminmin{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + % + \pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}% + \xdef\pgfplotspointxaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + % + % the length of the "angle" axis is 2*pi*r . + % The radius, however, is the length of (0,ymax) which is (0pt,\pgf@xx*ymax): + \pgfmath@basic@multiply@{\pgf@sys@tonumber\pgf@xx}{\pgfplots@ymax}% + \pgfmathmultiply@{\pgfmathresult}{6.28318530717959}% 2*pi * r + \if0\pgfplots@xtick@disable@last@tick + % oh: minangle != maxangle. We have a partial circle. + % compute the arc length (<360 deg) + \pgf@xa=\pgfplots@xmax pt + \advance\pgf@xa by-\pgfplots@xmin pt + \divide\pgf@xa by360 + \ifdim\pgf@xa<1pt + \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber\pgf@xa}% + \pgfmathmultiply@{\pgfmathresult}{\pgfplots@loc@TMPa}% + \fi + \fi + \xdef\pgfplotspointxaxislength{\pgfmathresult pt}% + % + \pgfpointdiff + {\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}% + {\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}% + \xdef\pgfplotspointyaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \pgfmathveclen{\pgf@x}{\pgf@y}% + \xdef\pgfplotspointyaxislength{\pgfmathresult pt}% + % + \global\let\pgfplotspointzaxis=\pgfpointorigin + \gdef\pgfplotspointzaxislength{0pt}% + \endgroup + % +} +\let\pgfplotspoint@initialisation@units@orig=\pgfplotspoint@initialisation@units +\def\pgfplotspoint@initialisation@units@polar{% + \def\pgfplotspointunitx{% + \pgfplotspointouternormalvectorofaxisgetv{v10}% angle varying, radius at outer pos + \ifx\pgfplotsretval\pgfutil@empty + \def\pgfplotsretval{0}% + \fi + \pgfmath@basic@sin@{\pgfplotsretval}% + \pgf@x=-\pgfmathresult pt + \pgfmath@basic@cos@{\pgfplotsretval}% + \pgf@y=\pgfmathresult pt + }% + \def\pgfplotsunitxlength{1}% + \def\pgfplotsunitxinvlength{1}% + % + \def\pgfplotspointunity{% + \pgfqpointpolar{\pgfplots@xmin}{1pt}% + }% + \def\pgfplotsunitylength{1}% + \def\pgfplotsunityinvlength{1}% +}% + +\def\pgfplots@drawgridlines@onorientedsurf@fromto@polar#1{% + \if x\pgfplotspointonorientedsurfaceA + \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}}% + \pgfpathlineto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}}% + \else + \if y\pgfplotspointonorientedsurfaceA\relax + \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}}% + \pgf@x=#1\pgf@xx + \pgf@y=#1\pgf@yy + \edef\pgfplots@loc@TMPa{\the\pgf@x\space and \the\pgf@y}% + \def\pgfplots@loc@TMPb{\pgfpatharc{\pgfplots@xmin}{\pgfplots@xmax}}% + \expandafter\pgfplots@loc@TMPb\expandafter{\pgfplots@loc@TMPa}% + \else + \fi + \fi +}% + +\def\pgfplots@initsizes@polar{% + % I copy-pasted most of this code, up to just one position where + % I introduced the modified scaling for polar axes + %---------------------------------- + % INIT. + % + % + \pgfmath@basic@mod@{\pgfplots@xmin}{360}% + \let\pgfplots@xmin@mod=\pgfmathresult + \pgfmath@basic@mod@{\pgfplots@xmax}{360}% + \let\pgfplots@xmax@mod=\pgfmathresult + \ifdim\pgfplots@xmax@mod pt<\pgfplots@xmin@mod pt + \def\b@pgfplots@polar@limit@around@zero{1}% + \else + \def\b@pgfplots@polar@limit@around@zero{0}% + \fi + % + \pgfplots@xmin@reg=\pgfplots@xmin pt % + \pgfplots@xmax@reg=\pgfplots@xmax pt % + % + % + \pgfplots@ymin@reg=\pgfplots@ymin pt % + \pgfplots@ymax@reg=\pgfplots@ymax pt % + \ifpgfplots@threedim + \pgfplots@zmin@reg=\pgfplots@zmin pt % + \pgfplots@zmax@reg=\pgfplots@zmax pt % + \fi + % + % + %----------------------------------------- + % PROCESS THE 'width' and 'height' options + %----------------------------------------- + % + % + \pgfkeysgetvalue{/pgfplots/view/az}{\pgfplots@view@az}% + \pgfkeysgetvalue{/pgfplots/view/el}{\pgfplots@view@el}% + \ifpgfplots@threedim + \def\pgfplots@tmpZscale{1pt}% + \else + \def\pgfplots@tmpZscale{0pt}% + \let\pgfplots@view@el=\pgfutil@empty + \let\pgfplots@view@az=\pgfutil@empty + \fi + \ifx\pgfplots@view@az\pgfutil@empty + %\let\pgfplots@rectangle@width=\pgfutil@empty + %\let\pgfplots@rectangle@height=\pgfutil@empty + \def\pgfplots@view@dir@threedim@x{0}% + \def\pgfplots@view@dir@threedim@y{0}% + \def\pgfplots@view@dir@threedim@z{1}% + % + % FIXME HERE COMES THE polar MODIFICATION + %-------------------------------------------------- + % \pgfpointdiff + % {\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}} + % {\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}% + %-------------------------------------------------- + % instead of scaling from (min) (max), we only need the UPPER + % bound -- in both, x and y directions (since we have a cycle. + % Furthermore, we need it twice since we are interested in the + % diameter, not the radius. + \global\pgf@x=\pgfplots@ymax pt % radius + \global\multiply\pgf@x by2 % diameter + \global\pgf@y=\pgf@x % same for y + % + % only used temporarily in this macro to compute the correct + % length for unit vectors: + \edef\pgfplots@initsizes@axisdiag@x{\the\pgf@x}% + \edef\pgfplots@initsizes@axisdiag@y{\the\pgf@y}% + % + \ifx\pgfplots@x\pgfutil@empty + \ifx\pgfplots@width\pgfutil@empty + \pgfplots@error{INTERNAL LOGIC ERROR! WIDTH NOT SET}% + \fi + \pgfplots@initsizes@getXscale\pgfplots@initsizes@axisdiag@x\into\pgfplots@tmpXscale + %\ifpgfplots@scale@only@axis + % \let\pgfplots@rectangle@width=\pgfplots@width + %\fi + \else + \def\pgfplots@tmpXscale{1}% + \fi + % + \ifx\pgfplots@y\pgfutil@empty + \ifx\pgfplots@height\pgfutil@empty + \pgfplots@error{INTERNAL LOGIC ERROR! HEIGHT NOT SET}% + \fi + \pgfplots@initsizes@getYscale\pgfplots@initsizes@axisdiag@y\into\pgfplots@tmpYscale + %\ifpgfplots@scale@only@axis + % \let\pgfplots@rectangle@height=\pgfplots@height + %\fi + \else + \def\pgfplots@tmpYscale{1}% + \fi + % + \edef\pgfplots@tmpXscale{\pgfplots@tmpXscale pt}% + \edef\pgfplots@tmpYscale{\pgfplots@tmpYscale pt}% + % + \pgfplots@initsizes@setunitvector{x}{0}{\pgfplots@tmpXscale}{\pgfplots@tmp@xisaxisparallel}% + \pgfplots@initsizes@setunitvector{y}{1}{\pgfplots@tmpYscale}{\pgfplots@tmp@yisaxisparallel}% + \pgfplots@initsizes@setunitvector{z}{2}{\pgfplots@tmpZscale}{\pgfplots@loc@TMPc}% + \else + % 3D case is currently always initialised by `view': + \let\pgfplots@x=\pgfutil@empty + \let\pgfplots@y=\pgfutil@empty + \let\pgfplots@z=\pgfutil@empty + \pgfplotssetaxesfromazel{\pgfplots@view@az}{\pgfplots@view@el}{\pgfplots@tmp@xisaxisparallel}% + \if1\pgfplots@tmp@xisaxisparallel% + \def\pgfplots@tmp@yisaxisparallel{1}% + \fi + \fi +%\message{Pgfplots debug: initialised unit vectors to x=(\the\pgf@xx,\the\pgf@xy), y=(\the\pgf@yx,\the\pgf@yy), z=(\the\pgf@zx,\the\pgf@zy). }% + % + \let\pgfplotsmathfloatviewdepthxyz@=\pgfplotsmathfloatviewdepthxyz@infigure + \let\pgfplotsmathviewdepthxyz@=\pgfplotsmathviewdepthxyz@infigure + % + \pgfplotsmath@ifzero{\pgfplots@x@veclength}{\pgfplots@hide@xtrue\pgfplots@shownothingof@xtrue}{}% + \pgfplotsmath@ifzero{\pgfplots@y@veclength}{\pgfplots@hide@ytrue\pgfplots@shownothingof@ytrue}{}% + \ifpgfplots@threedim + \pgfplotsmath@ifzero{\pgfplots@z@veclength}{\pgfplots@hide@ztrue\pgfplots@shownothingof@ztrue}{}% + \else + \if1\pgfplots@tmp@xisaxisparallel% + \if1\pgfplots@tmp@yisaxisparallel% + % Optimize for axis-parallel case! + % puh. Did not make any measureable difference!? Ok... + \let\pgfplotsqpointxy=\pgfplotsqpointxy@orthogonal + \fi + \fi + \fi + % + % FIXME : unit vector ratio / axis equal +} + +\def\pgfplots@handle@invalid@range@defaultlimits@polar{% + \def\pgfplots@loc@TMPa{0}% + \ifx\pgfplots@xmin\pgfplots@invalidrange@xmin + \def\pgfplots@loc@TMPa{1}% + \fi + \ifx\pgfplots@xmax\pgfplots@invalidrange@xmax + \def\pgfplots@loc@TMPa{1}% + \fi + \if\pgfplots@loc@TMPa1% + \pgfplotscoordmath{x}{parsenumber}{0}% + \global\let\pgfplots@xmin=\pgfmathresult + \pgfplotscoordmath{x}{parsenumber}{360}% + \global\let\pgfplots@xmax=\pgfmathresult + \global\let\pgfplots@data@xmin=\pgfplots@xmin + \global\let\pgfplots@data@xmax=\pgfplots@xmax + \fi + % + \pgfplotscoordmath{y}{parsenumber}{0}% + \global\let\pgfplots@ymin=\pgfmathresult + \pgfplotscoordmath{y}{parsenumber}{1}% + \global\let\pgfplots@ymax=\pgfmathresult + \global\let\pgfplots@data@ymin=\pgfplots@ymin + \global\let\pgfplots@data@ymax=\pgfplots@ymax +} + +\let\pgfplots@show@ticklabel@@orig=\pgfplots@show@ticklabel@ +\def\pgfplots@show@ticklabel@@polar#1#2{% + \def\pgfmathresult{#2}% + \if#1x% + \ifdim#2pt>360pt + \pgfmath@basic@mod@{#2}{360}% + \fi + \fi + \def\pgfplots@loc@TMPa{\pgfplots@show@ticklabel@@orig{#1}}% + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}% +}% + +\let\pgfplots@xtick@check@tickshow@orig=\pgfplots@xtick@check@tickshow% +\def\pgfplots@xtick@check@tickshow@polar{% + \if1\pgfplots@xtick@disable@last@tick + \pgfplotsmath@ifapproxequal@dim + {\pgfplots@tmpa}{\pgfplots@xmax pt} + {\pgfplots@loc@tick@placement@tolerance} + {% + \pgfplots@tickshowfalse + }{% + \pgfplots@xtick@check@tickshow@orig + }% + \else + \pgfplots@xtick@check@tickshow@orig + \fi +} + +\let\pgfplots@enlarge@limit@for@orig=\pgfplots@enlarge@limit@for +\def\pgfplots@enlarge@limit@for@polar#1{% + \if#1x% + % ignore 'enlarge x limits' (degrees). + \else + % allow 'enlarge y limits', but only for UPPER radius + \def\bool@pgfplots@loc@enlargelimits@min{0}% + \pgfplots@enlarge@limit@for@orig{#1}% + \fi +}% + +\let\pgfplots@assign@default@tick@foraxis@normalizetickdist@orig=\pgfplots@assign@default@tick@foraxis@normalizetickdist +\def\pgfplots@assign@default@tick@foraxis@normalizetickdist@polar#1#2{% + \if#1x% + % special handling for the angles: + \begingroup + \pgfmathfloattofixed{#2}% + \let\H=\pgf@xb + \H=\pgfmathresult pt + % only allow step sizes of + % 90, 45, 30, 15, 10, 5. + % + % Prefer the LARGER step size during the snap-to-nearest. + % The following decision boundaries are heuristics and have no + % mathematical foundation. + \ifdim\H>67pt + \H=90pt + \else + \ifdim\H>30pt + \H=45pt + \else + \ifdim\H>18pt + \H=30pt + \else + \ifdim\H>10pt + \H=15pt + \else + \ifdim\H>6pt + \H=10pt + \else + \H=5pt + \fi + \fi + \fi + \fi + \fi + \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber\H}% + \pgfmathfloatparsenumber{\pgfplots@loc@TMPa}% + \pgfmath@smuggleone\pgfmathresult + \endgroup + \else + \pgfplots@assign@default@tick@foraxis@normalizetickdist@orig{#1}{#2}% + \fi +}% + +\let\pgfplots@limits@ready@orig=\pgfplots@limits@ready +\def\pgfplots@limits@ready@polar{% + \pgfplots@limits@ready@orig + % + % Avoid tick labels at upper *and* lower angle range if both are the + % same: + \pgfmath@basic@subtract@{\pgfplots@xmax}{\pgfplots@xmin}% + \pgfmath@basic@mod@{\pgfmathresult}{360}% + \pgfplotsmath@ifapproxequal@dim + {\pgfmathresult pt}{0pt}% + {0.002pt} + {% + \def\pgfplots@xtick@disable@last@tick{1}% + }{% + }% + % +}% +\endinput diff --git a/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.smithchart.code.tex b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.smithchart.code.tex new file mode 100644 index 00000000000..7d24c53216d --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.smithchart.code.tex @@ -0,0 +1,1761 @@ +%-------------------------------------------- +% +% Package pgfplots, library for smith charts. +% +% Copyright 2010 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/>. +% +% A smithchart maps the complex halfplane +% H subset \C, +% H := [0,infty] x [-infty,infty] +% =~ \{ z = a+ j *b | a >=0, b \in \R } +% +% to the unit circle. +% +% A number z = a+jb is mapped to r(z) = (z-1) / (z+1) which is, per +% definition, in the 2d unit circle. +% +% Grid lines (i.e. a==const or b==const) are mapped on circles. +% +% In PGFPlots, the a=Re(z) is the x axis and b = Im(z) is the y axis. +% +% - CARTESIAN INPUT +% - tick/grid coordinates are from +% - input coordinates can be either from H or (perhaps preferred) from +% the unit circle. +% this "preferred" needs to be discussed. +% - the transformed data range is the unit circle (or a sequeezed variant) +% - in order to compute limits etc., I should accept data in H. this +% should simplify the logic to determine ticks etc considerably. +% problem: this transformation appears to be quite difficult (?) +% -> r(z) = (z-1)/(z+1) +% in complex arithmetics (but the G-tutorial.pdf says something +% about these circle equations!?) +% +% www.amanogawa.com/archive/docs/G-tutorial.pdf +% +% +% Idea: +% - work on H +% - transform whereever necessary +% - implement all pgfplots wrinkles in analogy to polar axes +% - provide support for normalized input coords (combined with +% untransformed limits or something like that) + +\pgfplotsdefineaxistype{smithchart}{% + \pgfplots@smithchartaxis@activate +}% + +\newif\ifpgfplotspointisinsmithchartCS +\newif\ifpgfplots@smithchart@showorigin +\newif\ifpgfplots@smithchart@mirrored + +\pgfplotsset{ + /pgfplots/xgrid each nth passes y/.initial=,% format: CSV list, each entry of the form '<at> | <at> ':' <eachnth> | <at> 'if <' <xvalue> | <at> ':' <eachnth> 'if <' <xvalue>' + /pgfplots/xgrid each nth passes y start/.initial=0, + /pgfplots/ygrid each nth passes x/.initial=, + /pgfplots/ygrid each nth passes x start/.initial=0, + % + /pgfplots/xgrid stop at y/.initial=,% individual stop map of the form '<xpos> ':' <stopaty>', separated by white space + /pgfplots/ygrid stop at x/.initial=, + % + % FIXME : this is undocumented: + /pgfplots/smithchart mirrored/.is if=pgfplots@smithchart@mirrored, + /pgfplots/smithchart mirrored/.default=true, + % + % this boolean may only be used inside of \addplot. It will be + % ignored otherwise. + /pgfplots/is smithchart cs/.is if=pgfplotspointisinsmithchartCS, + /pgfplots/is smithchart cs/.default=true, + /pgfplots/show origin/.is if=pgfplots@smithchart@showorigin, + /pgfplots/show origin/.default=true, + /pgfplots/show origin code/.code={% + \path[draw=black,fill=white] (0pt,0pt) circle (2.5pt); + \path[fill=black] (0pt,0pt) circle (0.5pt); + }, + /pgfplots/every smithchart axis/.style={ + grid=both, + xmin=0, + xmax=16000,% FIXME : more is not possible because some code uses the \pgfplots@xmin@reg registers... (ticks) + ymin=-16000,ymax=16000, + scaled ticks=false, % never draw the \cdot 10^4 labels + major tick style={draw=black}, + xtick align=center, + ytick align=center, + every axis title shift=1.2\baselineskip, + legend style={anchor=center}, + }, + /pgfplots/default smithchart xtick/.code=, + /pgfplots/default smithchart ytick/.code=, + /pgfplots/default smithchart xytick/.code=, + /pgfplots/smithchart ticks by size/.code 2 args={% + \ifdim#1<14cm + \pgfkeysalso{/pgfplots/few smithchart ticks}% + \else + \ifdim#1<20cm + \pgfkeysalso{/pgfplots/many smithchart ticks}% + \else + \pgfkeysalso{/pgfplots/dense smithchart ticks}% + \fi + \fi + }, + /pgfplots/few smithchart ticks*/.style={ + default smithchart xtick/.style={ + xtick={0.2,0.5,1,2,5}, + }, + default smithchart ytick/.style={ + ytick={% + 0,% + 0.2, 0.5, 1, 2, 5,% + -0.2,-0.5,-1,-2,-5}, + }, + default smithchart xytick/.style={ + xgrid each nth passes y={2}, + ygrid each nth passes x={2}, + }, + }, + /pgfplots/few smithchart ticks/.style={/pgfplots/few smithchart ticks*}, + /pgfplots/few smithchart ticks*,% use it as initial config + /pgfplots/many smithchart ticks*/.style={ + default smithchart xtick/.style={ + xtick={ + 0.1,0.2,0.3,0.4,0.5,1,1.5,2,3,4,5,10,20% + }, + minor xtick={0.6,0.7,0.8,0.9,1.1,1.2,1.3,1.4,1.6,1.7,1.8,1.9,2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50}, + }, + default smithchart ytick/.style={ + ytick={% + 0,% + 0.1,0.2,...,1,1.5,2,3,4,5,10,20,% + -0.1,-0.2,...,-1,-1.5,-2,-3,-4,-5,-10,-20% + }, + minor ytick={% + 1.1,1.2,1.3,1.4,1.6,1.7,1.8,1.9,2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50,% + -1.1,-1.2,-1.3,-1.4,-1.6,-1.7,-1.8,-1.9,-2.2,-2.4,-2.6,-2.8,-3.2,-3.4,-3.6,-3.8,-4.5,-6,-7,-8,-9,-50% + }, + }, + default smithchart xytick/.style={ + xgrid each nth passes y={1,2,4,5,10,20}, + ygrid each nth passes x={1,2,3,5,10:3,20:3}, + }, + }, + /pgfplots/many smithchart ticks/.style={ + many smithchart ticks*, + every axis title shift=6pt, + yticklabel in circle, + show origin=true, + }, + /pgfplots/dense smithchart ticks*/.style={ + default smithchart xtick/.style={ + %ygrid each nth passes x start=0, + xtick={ + 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.2,1.4,1.6,1.8,2,3,4,5,10,20% + }, + minor xtick={% + 0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,% + 0.22,0.24,0.26,0.28,0.32,0.34,0.36,0.38,0.42,0.44,0.46,0.48,% + 0.52,% + 0.55,0.65,0.75,0.85,0.95,% + %0.6,0.7,0.8,0.9,% + 1.1,1.3,1.5,1.7,1.9,% + 2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50}, + }, + default smithchart ytick/.style={ + ytick={% + 0,% + 0.1,0.2,...,1,1.2,1.4,1.6,1.8,2,3,4,5,10,20,% + -0.1,-0.2,...,-1,-1.2,-1.4,-1.6,-1.8,-2,-3,-4,-5,-10,-20% + }, + minor ytick={% + 0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,% + 0.22,0.24,0.26,0.28,0.32,0.34,0.36,0.38,0.42,0.44,0.46,0.48,% + 0.55,0.65,0.75,0.85,0.95,% + 1.1,1.3,1.5,1.7,1.9,2.2,2.4,2.6,2.8,3.2,3.4,3.6,3.8,4.5,6,7,8,9,50,% + -0.01,-0.02,-0.03,-0.04,-0.05,-0.06,-0.07,-0.08,-0.09,-0.11,-0.12,-0.13,-0.14,-0.15,-0.16,-0.17,-0.18,-0.19,% + -0.22,-0.24,-0.26,-0.28,-0.32,-0.34,-0.36,-0.38,-0.42,-0.44,-0.46,-0.48,% + -0.55,-0.65,-0.75,-0.85,-0.95,% + -1.1,-1.3,-1.5,-1.7,-1.9,-2.2,-2.4,-2.6,-2.8,-3.2,-3.4,-3.6,-3.8,-4.5,-6,-7,-8,-9,-50% + }, + }, + default smithchart xytick/.style={ + xgrid each nth passes y={0.2 if < 0.2001,0.5 if < 0.50001,1 if < 1.001,2,4,5,10,20}, + ygrid each nth passes x={0.2 if < 0.2001,0.52 if < 0.52001,1 if < 1.001,2,3,5,10:3,20:3}, + }, + }, + /pgfplots/dense smithchart ticks/.style={ + yticklabel in circle, + every axis title shift=6pt, + dense smithchart ticks*, + show origin=true, + every major grid/.style={black!60}, + }, + /pgfplots/yticklabel in circle/.style={ + ytick align=inside, + yticklabel style={ + rotate=90, + sloped like y axis={% + execute for upside down={\tikzset{anchor=north east}}, + %allow upside down, + reset nontranslations=false}, + anchor=south west, + %font=\tiny, + } + }, +} + +\def\pgfplots@smithchartaxis@activate{% + \def\axisdefaultwidth{207pt}% + \def\axisdefaultheight{207pt}% + \let\pgfplotsqpointxy@cart=\pgfplotsqpointxy + \let\pgfplotsqpointxy=\pgfplotsqpointxy@smithchartaxis + \let\pgfplotsqpointxy@orthogonal=\pgfplotsqpointxy + \def\pgfplotsqpointxyz##1##2##3{\pgfplotsqpointxy{##1}{##2}}% FIXME + \let\pgfplotspointouternormalvectorofaxis@=\pgfplotspointouternormalvectorofaxis@smithchartaxis + \def\pgfplotspointouternormalvectorofaxis@ifdependson@v##1##2##3{##2}% + \def\pgfplots@drawticklines@INSTALLCLIP@onorientedsurf##1{}% + \let\pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf=\pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf@smithchartaxis + \def\pgfplots@visphase@notify@changeofcanvaslimits##1{}% + \def\pgfplots@avoid@empty@axis@range@for##1{}% + \def\pgfplotsaxisifcontainspoint##1##2{##1}% + \let\pgfplots@set@default@size@options=\pgfplots@set@default@size@options@smithchart% + % + \def\b@pgfplots@smithchart@defaultticks@x{0}% + \def\b@pgfplots@smithchart@defaultticks@y{0}% + \let\pgfplots@assign@default@tick@foraxis=\pgfplots@assign@default@tick@foraxis@smithchart + \def\pgfplots@checkisuniformLINEARtick##1##2{% + % don't do anything here. I suppose it is useless and is a + % waste of time for many ticks. + \global\pgfplots@isuniformtickfalse + }% + \let\pgfplots@clippath@prepare@for@axistype=\pgfplots@clippath@prepare@for@axistype@smithchartaxis + % + % invalid range: do not clear plots. simply assign default limits. + \let\pgfplots@handle@invalid@range@defaultlimits=\pgfplots@handle@invalid@range@defaultlimits@smithchart% + \def\pgfplots@handle@invalid@range{\pgfplots@handle@invalid@range@defaultlimits}% + % + \let\pgfplotspointonorientedsurfaceabwithbshift=\pgfplotspointonorientedsurfaceabwithbshift@smithchartaxis + \let\pgfplots@draw@axis@is@prepared=\pgfplots@draw@axis@is@prepared@smithchartaxis + \let\pgfplots@drawgridlines@onorientedsurf@fromto=\pgfplots@drawgridlines@onorientedsurf@fromto@smithchart + \let\pgfplots@drawaxis@innerlines@onorientedsurf=\pgfplots@drawaxis@innerlines@onorientedsurf@smithchart + \let\pgfplots@drawaxis@outerlines@separate@onorientedsurf=\pgfplots@drawaxis@outerlines@separate@onorientedsurf@smithchartaxis + \let\pgfplotspoint@initialisation@axes=\pgfplotspoint@initialisation@axes@smithchart% + \let\pgfplotspoint@initialisation@units=\pgfplotspoint@initialisation@units@smithchart + \expandafter\def\expandafter\pgfplots@create@axis@descriptions@\expandafter{% + \pgfplots@create@axis@descriptions@ + \ifpgfplots@smithchart@showorigin + \pgfkeysvalueof{/pgfplots/show origin code/.@cmd}\pgfeov% + \fi + }% + \def\axisdefaultheight{\axisdefaultwidth}% + \let\pgfplots@initsizes=\pgfplots@initsizes@smithchart + %\let\pgfplots@limits@ready=\pgfplots@limits@ready@smithchart + %\let\pgfplots@show@ticklabel@=\pgfplots@show@ticklabel@@smithchart + %\def\pgfplots@xtick@disable@last@tick{0}% + \let\pgfplots@xtick@check@tickshow=\pgfplots@xtick@check@tickshow@smithchart% + \let\pgfplots@ytick@check@tickshow=\pgfplots@ytick@check@tickshow@smithchart% + \let\pgfplots@set@options@sanitize=\relax + \let\pgfplots@set@options@sanitizemode=\relax + \let\pgfplotscoordmathnotifydatascalesetfor=\pgfplotscoordmathnotifydatascalesetfor@smithchart + % + \expandafter\def\expandafter\pgfplots@notify@options@are@set\expandafter{% + \pgfplots@notify@options@are@set + \pgfplotsset{% + separate axis lines,% + is smithchart cs=false,% + xtick pos=left, + ytick pos=left, + axis x line*=center, + disabledatascaling, + }% + \def\pgfplots@xtickposnum{2}% + % + \ifx\pgfplots@xtick\pgfutil@empty + \def\b@pgfplots@smithchart@defaultticks@x{1}% + \fi + \ifx\pgfplots@ytick\pgfutil@empty + \def\b@pgfplots@smithchart@defaultticks@y{1}% + \fi + \pgfplotscoordmath{default}{parsenumber}{0.002}% + \let\pgfplots@almost@zero@thresh=\pgfmathresult + }% + \def\pgfplots@xticklabel@pos{}% + \def\pgfplots@yticklabel@pos{}% + \def\pgfplots@zticklabel@pos{}% + \def\pgfplots@init@ticklabelaxisspecfor##1##2{}% + \def\pgfplots@init@ticklabelaxisspec@twodim@for##1##2{}% + \def\pgfplotspointonorientedsurfaceabmatchaxisline@warn##1{}% clear warning. It works for smith charts. + \def\pgfplots@xticklabelaxisspec{v20}% + \def\pgfplots@yticklabelaxisspec{0v0}% + \def\pgfplots@zticklabelaxisspec{00v}% + % + % cartesian cs + \tikzdeclarecoordinatesystem{cartesian}{\edef\pgfplots@loc@TMPa{##1}\expandafter\pgfplotspointcartesian@\pgfplots@loc@TMPa\pgfplots@coord@end}% + % + % + % Special treatment for + % \pgfplots@prepare@tick@coordlists@for: make sure we don't need + % to use the register arithmetics in \pgfplots@xmin@reg and its + % variants! I want an UNRESTRICTED max data range! + \def\pgfplots@prepare@tick@coordlists@for@assign##1=##2{\edef##1{##2}}% + \def\pgfplots@prepare@tick@coordlists@for@advance##1by##2{% + % THIS IS NEVER USED (at the time of this writing). + \edef\pgfplots@loc@TMPa{##2}% + \pgfplotscoordmath{default}{parsenumber}{##1}% + \pgfplotscoordmath{default}{op}{add}{{\pgfmathresult}{\pgfplots@loc@TMPa}}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \let##1=\pgfmathresult + }% + \def\pgfplots@prepare@tick@coordlists@for@tofixed##1{\edef\pgfmathresult{##1}}% + \def\pgfplots@prepare@tick@coordlists@for@handletolerance##1{}% does not apply to smithcharts. + \def\pgfplots@prepare@tick@coordlists@for@checktickmin##1{% + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tmpa}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@##1tickmin\endcsname}% + \let\pgfplots@loc@TMPb=\pgfmathresult + \pgfplotscoordmath{default}{if less than}{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}{% + \pgfplots@tickshowfalse + }{% + }% + }% + \def\pgfplots@prepare@tick@coordlists@for@checktickmax##1{% + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tmpa}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@##1tickmin\endcsname}% + \let\pgfplots@loc@TMPb=\pgfmathresult + \pgfplotscoordmath{default}{if less than}{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPa}{% + \pgfplots@tickshowfalse + }{% + }% + }% + \def\pgfplots@prepare@tick@coordlists@for@checkdatalimits##1{}% I won't do this here. Smithcharts are somewhat special. +}% + +\def\pgfplotspointcartesian@#1,#2\pgfplots@coord@end{% + \pgfpointxy@orig{#1}{#2}% +}% +\def\pgfplotscoordmathnotifydatascalesetfor@smithchart#1{% + \def\pgfplotscoordmathnotifydatascalesetfor##1{}% + \edef\pgfplotscoordmathnotifydatascalesetfor@{#1}% + \def\pgfplotscoordmathnotifydatascalesetfor@@{x}% + \ifx\pgfplotscoordmathnotifydatascalesetfor@@\pgfplotscoordmathnotifydatascalesetfor@ + \pgfplotscoordmath{#1}{datascaletrafo set params}{0}{0}% + \else + \def\pgfplotscoordmathnotifydatascalesetfor@@{y}% + \ifx\pgfplotscoordmathnotifydatascalesetfor@@\pgfplotscoordmathnotifydatascalesetfor@ + \pgfplotscoordmath{#1}{datascaletrafo set shift}{0}% + \fi + \fi + \let\pgfplotscoordmathnotifydatascalesetfor=\pgfplotscoordmathnotifydatascalesetfor@smithchart +}% + +% #1: the "a" value on the oriented surf +% #2: the "b" value. +% #3: the shift along the normal. +% +\def\pgfplotspointonorientedsurfaceabwithbshift@smithchartaxis#1#2#3{% + % implement the shift in "b" direction explicitly: + \pgfpointadd + {\pgfplotspointonorientedsurfaceab{#1}{#2}}% + {% + \pgfplotspointonorientedsurfaceabtolinespec{v}{0}% + \afterassignment\pgfplots@gobble@until@relax + \pgf@xa=-#3\relax + \edef\pgfplots@shift@no@unit{\pgf@sys@tonumber\pgf@xa}% + \pgfqpointscale + {\pgfplots@shift@no@unit} + {\expandafter\pgfplotspointouternormalvectorofaxis\expandafter{\pgfplotsretval}}% + }% +} + + +% Computes the complex division +% (A + j B) / (C + j D) = (A C + B D + j (B C - A D) ) / (C^2 + D^2) +% and assigns the result to \pgfmathresult and \pgfmathresultim . Here +% 'j = sqrt{-1}' is the imaginary unit. +% +% #1 : A +% #2 : B +% #3 : C +% #4 : D +% +% The arithmetics is performed in \pgfplotscoordmath{default} (which +% uses the floating point unit in the initial configuration) +% +% Numbers are expected to be already parsed (i.e. you need to invoke +% \pgfplotscoordmath{default}{parsenumber}{#1}% +% \let\A=\pgfmathresult +% before) +\def\pgfplotscoordmathcomplexdivision#1#2#3#4{% + \begingroup + \edef\pgfplots@A{#1}% + \edef\pgfplots@B{#2}% + \edef\pgfplots@C{#3}% + \edef\pgfplots@D{#4}% + % + % + % ok, compute it: + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@A}{\pgfplots@C}}% + \let\pgfplots@AC=\pgfmathresult + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@A}{\pgfplots@D}}% + \let\pgfplots@AD=\pgfmathresult + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@B}{\pgfplots@D}}% + \let\pgfplots@BD=\pgfmathresult + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@B}{\pgfplots@C}}% + \let\pgfplots@BC=\pgfmathresult + % + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@C}{\pgfplots@C}}% + \let\pgfplots@CC=\pgfmathresult + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplots@D}{\pgfplots@D}}% + \let\pgfplots@DD=\pgfmathresult + \pgfplotscoordmath{default}{op}{add}{{\pgfplots@CC}{\pgfplots@DD}}% + \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfmathresult}}% + \let\pgfplots@scale=\pgfmathresult + % + % + \pgfplotscoordmath{default}{op}{add}{{\pgfplots@AC}{\pgfplots@BD}}% + \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplots@scale}}% + \let\pgfplots@x=\pgfmathresult + % + \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@BC}{\pgfplots@AD}}% + \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplots@scale}}% + \let\pgfplots@y=\pgfmathresult + % + \xdef\pgfplots@glob@TMPa{% + \noexpand\def\noexpand\pgfmathresult{\pgfplots@x}% + \noexpand\def\noexpand\pgfmathresultim{\pgfplots@y}% + }% + \endgroup + \pgfplots@glob@TMPa +}% + +\def\pgfplotsqpointxy@smithchartaxis#1#2{% + \pgf@process{% + \ifpgfplotspointisinsmithchartCS + \def\pgfplots@x{#1}% + \def\pgfplots@y{#2}% + \else + % compute rx + j* ry = (#1 + j * #2 -1) / (#1 + j*#2 + 1) + % + % I write + % #1 - 1 + j * #2 = A + j * B + % 1 + #1 + j * #2 = C + j * D + % + % -> rx + j * ry = (A + j B) / (C + j D) = (A C + B D + j (B C - A D) ) / (C^2 + D^2) + \pgfplotscoordmath{default}{parsenumber}{#1}% + \let\pgfplots@x=\pgfmathresult + % + \pgfplotscoordmath{default}{parsenumber}{#2}% + \let\pgfplots@D=\pgfmathresult + % + \pgfplotscoordmath{default}{one}% + \let\pgfplots@one=\pgfmathresult + % + \pgfplotscoordmath{default}{op}{add}{{\pgfplots@one}{\pgfplots@x}}% + \let\pgfplots@C=\pgfmathresult + % + \pgfplotscoordmath{default}{op}{subtract}{{\pgfplots@x}{\pgfplots@one}}% + \let\pgfplots@A=\pgfmathresult + % + \let\pgfplots@B=\pgfplots@D + % + \pgfplotscoordmathcomplexdivision\pgfplots@A\pgfplots@B\pgfplots@C\pgfplots@D + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \let\pgfplots@x=\pgfmathresult + \pgfplotscoordmath{default}{tofixed}{\pgfmathresultim}% + \let\pgfplots@y=\pgfmathresult + \fi + % + \pgfplotsqpointxy@smithchart@canvas\pgfplots@x\pgfplots@y +%\message{pgfplotsqpointxy{#1}{#2} ---> (\pgfplots@x,\pgfplots@y) ---> (\the\pgf@x,\the\pgf@y)}% + }% +}% + +\def\pgfplotsqpointxy@smithchart@canvas#1#2{% + \ifpgfplots@smithchart@mirrored + \pgfqpointxy@orig{-#1}{#2}% + \else + \pgfqpointxy@orig{#1}{#2}% + \fi +}% + +\def\pgfplots@clippath@prepare@for@axistype@smithchartaxis{% + \def\pgfplots@clippath@install##1{% + \pgfpathellipse + {\pgfplotsqpointxy@smithchart@canvas{0}{0}} + {\pgfplotsqpointxy@smithchart@canvas{1}{0}} + {\pgfplotsqpointxy@smithchart@canvas{0}{1}}% + \pgfplots@clippath@use@{##1}% + }% +}% + +\def\pgfplotspointouternormalvectorofaxis@smithchartaxis#1#2#3\relax{% + \if v#1% + \pgfqpoint{0pt}{1pt}% + \else + \if v#2% + \pgfplotspointouternormalvectorofaxisgetv{#1#2#3}% + \ifx\pgfplotsretval\pgfutil@empty + \def\pgfplotsretval{0}% + \fi + \pgfpointdiff + {\pgfplotsqpointxy@smithchart@canvas{0}{0}}% + {\pgfplotsqpointxy{0}{\pgfplotsretval}}% + \pgfpointnormalised{}% + \else + \pgfqpoint{0pt}{1pt}% + \fi + \fi + \pgf@process{}% + \endgroup +}% + +\def\pgfplotspoint@initialisation@axes@smithchart{% + \begingroup + %\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}% + \gdef\pgfplotspointminminmin{\pgfplotsqpointxy@smithchart@canvas{0}{0}}% + % + % the "x" axis is the diameter of the circle (for fixed y=0) + \pgf@x=2\pgf@xx + \pgf@y=0pt + \xdef\pgfplotspointxaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \pgfmathveclen{\pgf@x}{\pgf@y}% + \xdef\pgfplotspointxaxislength{\pgfmathresult pt}% + % + \pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}% + \xdef\pgfplotspointyaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + % + % the length of the "y" axis is 2*pi*r (for fixed x=0, the outer + % circle). + % The radius is the length of (0,1) which is (0pt,\pgf@xx1): + \pgfmath@basic@multiply@{\pgf@sys@tonumber\pgf@xx}{1}% + \pgfmathmultiply@{\pgfmathresult}{6.28318530717959}% 2*pi * r + \xdef\pgfplotspointyaxislength{\pgfmathresult pt}% + % + \global\let\pgfplotspointzaxis=\pgfpointorigin + \gdef\pgfplotspointzaxislength{0pt}% + \endgroup + % + \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber\pgf@xx}% + \pgfmathdivide@{16000}{\pgfplots@loc@TMPa}% + \let\pgfplots@smithchart@axis@max@xradius@for@ycircle=\pgfmathresult + % + \ifdim\pgf@xx=\pgf@yy + \def\pgfplots@smithchart@axis@ratioxy{1}% + \def\pgfplots@smithchart@axis@ratioyx{1}% + \let\pgfplots@smithchart@axis@max@yradius@for@ycircle=\pgfplots@smithchart@axis@max@xradius@for@ycircle + \else + \edef\pgfplots@loc@TMPb{\pgf@sys@tonumber\pgf@yy}% + \pgfmathdivide@\pgfplots@loc@TMPa\pgfplots@loc@TMPb + \let\pgfplots@smithchart@axis@ratioxy=\pgfmathresult + \pgfmathdivide@\pgfplots@loc@TMPb\pgfplots@loc@TMPa + \let\pgfplots@smithchart@axis@ratioyx=\pgfmathresult + % + \pgfmathdivide@{16000}{\pgfplots@loc@TMPb}% + \let\pgfplots@smithchart@axis@max@yradius@for@ycircle=\pgfmathresult + \fi +} +\let\pgfplotspoint@initialisation@units@orig=\pgfplotspoint@initialisation@units +\def\pgfplotspoint@initialisation@units@smithchart{% + \pgfplotspoint@initialisation@units@orig + \def\pgfplotspointunity{% + \pgfplotspointouternormalvectorofaxisgetv{0v0}% x=0 (outer circle) and v varies (the yticks) + \ifx\pgfplotsretval\pgfutil@empty + \def\pgfplotsretval{0}% + \fi + \pgfpointnormalised{\pgfplotsqpointxy{0}{\ifx\pgfplotsretval\pgfutil@empty 0\else\pgfplotsretval\fi}}% + \pgf@xa=-\pgf@y + \global\pgf@y=\pgf@x + \global\pgf@x=\pgf@xa + }% + \def\pgfplotsunitylength{1}% + \def\pgfplotsunityinvlength{1}% +}% + +\def\pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf@smithchartaxis#1{% + %\pgfplots@clippath@install{\pgfusepath{clip}}% +}% + +% At this time, the minor/major tick lists are initialised. +\def\pgfplots@draw@axis@is@prepared@smithchartaxis{% + \pgfplots@gridlines@init@grid@stop@points@for xy% + \pgfplots@gridlines@init@grid@stop@points@for yx% + % + % and finalize x: + \def\pgfplots@finalize@constraints{1}% + \pgfplots@gridlines@init@grid@stop@points@for@computethem{x}{y}{\pgfplots@finalize@constraints}% +}% + + +% Initialises the '#1grid each nth passes #2' and '#1grid stop at #2' +% features. All it does is to prepare the +% method \pgfplots@get@current@grid@stop@point. +% +% The method is quite involved. Please refer to the manual for what it +% is supposed to do, and refer to the code comments below for +% implementational details. +% +% #1 either x or y +% #2 either x or y +\def\pgfplots@gridlines@init@grid@stop@points@for#1#2{% + % + \expandafter\let\csname pgfplots@#1grid@stop@points\endcsname=\relax + % + \pgfkeysgetvalue{/pgfplots/#1grid each nth passes #2}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + % we have no "xticknum -> xtickpos" lookup table yet. + \expandafter\def\csname b@pgfplots@#2ticknum@to@pos@lookup\endcsname{0}% + % + \pgfplotslistnewempty\pgfplots@loc@TMPd + % normalise the argument for 'ygrid each nth passes x': each list element + % should be of the form '<xtickpos>:<n>' where <n> means that each + % <n>th arc can pass. + \expandafter\pgfplotsutilforeachcommasep\pgfplots@loc@TMPa\as\entry{% + \expandafter\pgfplots@gridlines@init@grid@stop@points@for@normalise\entry\relax#1#2% + \expandafter\pgfplotslistpushback\entry\to\pgfplots@loc@TMPd + }% + \expandafter\let\csname pgfplots@#1grid@stop@points\endcsname=\pgfplots@loc@TMPd + % + % Ok. + % + % Now, the 'ygrid each nth passes x' feature relies *crucially* on grid line + % indices (for the 'each nth' feature). + % + % I sort the arcs according to their absolute magnitude and assign + % indices into the resulting arrays to normalize that stuff. + % + % The array is of the form + % A[i] = entry of \pgfplots@prepared@tick@positions@* + % and contains *both*, major and minor grid lines. + \pgfplotsarraynewempty\pgfplots@gridlines + \pgfplotscoordmath{default}{zero}% + \edef\elem{{-1}{\pgfmathresult}}% require 0 to be zero for symmetry even if there is no such tick pos + \expandafter\pgfplotsarraypushback\elem\to\pgfplots@gridlines + \pgfplots@if{pgfplots@#1majorgrids}{% + % insert all major tick positions, using their absolute value. + \expandafter + \pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@major@#1\endcsname\as\elem{% + \expandafter\pgfplots@prepared@tick@pos@unpack\elem + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tick}% + \pgfplotscoordmath{default}{op}{abs}{{\pgfmathresult}}% + \edef\elem{{\pgfplots@ticknum}{\pgfmathresult}}% + \expandafter\pgfplotsarraypushback\elem\to\pgfplots@gridlines + }% + }{}% + \pgfplots@if{pgfplots@#1minorgrids}{% + % now the same for minor grid positions: + \expandafter + \pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@minor@#1\endcsname\as\elem{% + \expandafter\pgfplots@prepared@tick@pos@unpack\elem + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tick}% + \pgfplotscoordmath{default}{op}{abs}{{\pgfmathresult}}% + \edef\elem{{\pgfplots@ticknum}{\pgfmathresult}}% + \expandafter\pgfplotsarraypushback\elem\to\pgfplots@gridlines + }% + }{}% + % sort the array! + \pgfkeysgetvalue{/pgfplots/smithchart@sortlt/.@cmd}\pgfplots@loc@TMPa + \pgfkeyslet{/pgfplots/iflessthan/.@cmd}\pgfplots@loc@TMPa + \pgfplotsarraysort\pgfplots@gridlines + % + % ok. Now it is sorted. + % + % I finally need a lookup + % \pgfplots@ticknum --> sort index. + % If the associated values have the same absolute value, the same + % sort index should be assigned. + % + % For example, the array might be associated to the following tick + % positions, sorted by absolute value: + % 0.0, 1.0, -1.0, 3.0, -3.0, 4.0, -4.0, 5.0, -5.0 + % What I want is that + % 0.0 gets sort index 0 + % 1.0 and -1.0 get sort index 1 + % 3.0 and -3.0 get sort index 2 + % 4.0 and -4.0 get sort index 3 + % and so on. The array contains only absolute values, so that's + % not too difficult to check. + % + % Since each of the tick positions can be (uniquely) identified by + % its associated \pgfplots@ticknum value, I map \pgfplots@ticknum + % to the sort index. + \countdef\c@sortindex=\c@pgf@counta + \c@sortindex=\pgfkeysvalueof{/pgfplots/#1grid each nth passes #2 start} % this is assigned to the '0.0' gridline (if any) + \def\pgfplots@lasttickpos{}% + \pgfplotsarrayforeachungrouped\pgfplots@gridlines\as\elem{% + \expandafter\pgfplots@prepared@tick@pos@unpack\elem + \ifx\pgfplots@lasttickpos\pgfutil@empty + \else + \ifx\pgfplots@lasttickpos\pgfplots@tick + \else + \advance\c@sortindex by1 + \fi + \fi + \expandafter\edef\csname pgfplots@#1tickpos@to@sortidx@\pgfplots@ticknum\endcsname{\the\c@sortindex}% +%\message{\pgfplots@ticknum\space(abs(tickpos) = \pgfplots@tick)---> sort index \csname pgfplots@#1tickpos@to@sortidx@\pgfplots@ticknum\endcsname^^J}% + \let\pgfplots@lasttickpos=\pgfplots@tick + }% + % + % unfortunately, I can't free the \pgfplots@gridlines array + % without extensive overhead :-( + \fi + % + \expandafter\let\csname b@pgfplots@#1gridline@stopmap\endcsname\relax + \pgfkeysgetvalue{/pgfplots/#1grid stop at #2}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa,}% this inserts the final comma and handles any active ':' sign (for french babel) + \def\pgfplots@loc@TMPb{\pgfplots@gridlines@init@stop@maps #1#2}% + \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\pgfplots@EOI% + \fi + % + % + % Now, compute all final stop positions. Also prepare the cross + % dependencies between x grids and y grids here (such that there + % is no grid line stopping in white space) + % + \if#1x% + \def\pgfplots@finalize@constraints{0}% we have to wait until y stop points are known. + \else + \def\pgfplots@finalize@constraints{1}% + \fi + \pgfplots@gridlines@init@grid@stop@points@for@computethem{#1}{#2}{\pgfplots@finalize@constraints}% +}% +% #1,#2,#3 the arguments for +% \pgfplots@gridlines@preparation@get@current@grid@stop@point +\def\pgfplots@gridlines@init@grid@stop@points@for@computethem#1#2#3{% + % + \expandafter\pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@major@#1\endcsname\as\elem{% + \expandafter\pgfplots@prepared@tick@pos@unpack\elem + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tick}\let\pgfplots@tick=\pgfmathresult + \pgfplots@gridlines@preparation@get@current@grid@stop@point{#1}{#2}{\pgfplots@tick}{#3}% + \if1#3% + \pgfplots@gridlines@let{#1}{\pgfplots@tick@prepared}=\pgfplotsretval + \fi + }% + \expandafter\pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@minor@#1\endcsname\as\elem{% + \expandafter\pgfplots@prepared@tick@pos@unpack\elem + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@tick}\let\pgfplots@tick=\pgfmathresult + \pgfplots@gridlines@preparation@get@current@grid@stop@point{#1}{#2}{\pgfplots@tick}{#3}% + \if1#3% + \pgfplots@gridlines@let{#1}{\pgfplots@tick@prepared}=\pgfplotsretval + \fi + }% + \expandafter\def\csname b@pgfplots@#1gridline@stopmap\endcsname{1}% +} + +\def\pgfplots@gridlines@init@stop@maps#1#2{% + \pgfutil@ifnextchar\pgfplots@EOI{% + \pgfutil@gobble + }{% + \pgfutil@ifnextchar,{% + \pgfplots@gridlines@init@stop@maps@next@@#1#2% + }{% + \pgfplots@gridlines@init@stop@maps@next#1#2% + }% + }% +}% +\def\pgfplots@gridlines@init@stop@maps@next#1#2#3:#4,{% + \pgfplotscoordmath{default}{parsenumber}{#4}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplots@gridlines@stopmap@prepare{#3}% + \pgfplots@gridlines@let{#1}{\pgfmathresult}=\pgfplots@loc@TMPa + \expandafter\def\csname b@pgfplots@#1gridline@stopmap\endcsname{1}% + % + \pgfplots@gridlines@init@stop@maps #1#2% +} +% just eat one empty comma: +\def\pgfplots@gridlines@init@stop@maps@next@@#1#2,{\pgfplots@gridlines@init@stop@maps #1#2}% +\def\pgfplots@gridlines@let#1#2=#3{% + \expandafter\let\csname pgfplots@#1gridline@stopmap@#2\endcsname=#3% + \if#1y% + % support symmetry: + % add -\pgfmathresult to the map. + % To disable this symmetry, use 'ygrid stop at x={0.2:4 -0.2:5} + % you can also use an empty value '-0.2:{}', that's also ok. + \expandafter\let\csname pgfplots@#1gridline@stopmap@-#2\endcsname=#3% + \fi +}% + +\def\pgfplots@gridlines@stopmap@prepare@digits{2}% +\def\pgfplots@gridlines@stopmap@prepare#1{% + \begingroup + \pgfmathfloatparsenumber{#1}% + \let\pgfmathfloat@round@precision=\pgfplots@gridlines@stopmap@prepare@digits% + \pgfmathfloatroundzerofill\pgfmathresult + \pgfmath@smuggleone\pgfmathresult + \endgroup +}% +\def\pgfplots@gridlines@stopmap@trunc@#1.#2#3#4\relax{% + \def\pgfmathresult{#1.#2#3}% +}% + +\pgfkeysdefargs{/pgfplots/smithchart@sortlt}{#1#2#3#4}{% + \expandafter\pgfplots@prepared@tick@pos@unpack#1% + \let\pgfplots@A=\pgfplots@tick + \expandafter\pgfplots@prepared@tick@pos@unpack#2% + \let\pgfplots@B=\pgfplots@tick + \pgfplotscoordmath{default}{if less than}{\pgfplots@A}{\pgfplots@B}{#3}{#4}% +}% + +% initialise a lookuptable from ticknumber -> tick position (sort +% of an array) +% +% This is only invoked if it is needed (if 'arc +% limits={[index]4,[index]2}' or something like that is used, see the +% manual). +% +% #1 either x or y +% #2 either x or y +\def\pgfplots@gridlines@init@grid@stop@points@for@init@ticknum@lookup#1#2{% + \c@pgf@counta=0 + \pgfplots@if{pgfplots@#1majorgrids}{% + \expandafter + \pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@major@#2\endcsname\as\elem{% + \expandafter\pgfplots@prepared@tick@pos@unpack\elem + \expandafter\let\csname pgfplots@#2tick@num@to@pos@\the\c@pgf@counta\endcsname=\pgfplots@tick + \advance\c@pgf@counta by1 + }% + }{}% + \pgfplots@if{pgfplots@#1minorgrids}{% + \expandafter + \pgfplotslistforeachungrouped\csname pgfplots@prepared@tick@positions@minor@#2\endcsname\as\elem{% + \expandafter\pgfplots@prepared@tick@pos@unpack\elem + \expandafter\let\csname pgfplots@#2tick@num@to@pos@\the\c@pgf@counta\endcsname=\pgfplots@tick + \advance\c@pgf@counta by1 + }% + }{}% + \expandafter\def\csname b@pgfplots@#2ticknum@to@pos@lookup\endcsname{1}% +}% +\def\pgfplots@gridlines@init@grid@stop@points@for@normalise#1\relax#2#3{% + \def\b@pgfplots@haslt{0}% + % + \pgfutil@in@{if <}{#1}% + \ifpgfutil@in@ + % strip the white space between 'if' and '<': + \def\pgfplots@loc@TMPa##1if <##2\relax{\edef\entry{##1if<##2}}% + \expandafter\pgfplots@loc@TMPa\entry\relax + \def\b@pgfplots@haslt{1}% + \fi + % + \pgfutil@in@{if<}{#1}% + \ifpgfutil@in@ + \def\b@pgfplots@haslt{1}% + \fi + % + \pgfutil@in@:{#1}% + \ifpgfutil@in@ + \def\b@pgfplots@hascolon{1}% + \else + \def\b@pgfplots@hascolon{0}% + \fi + % + \if1\b@pgfplots@hascolon + \edef\entry{\entry\if0\b@pgfplots@haslt if<\fi}% + \else + \if1\b@pgfplots@haslt + \expandafter\pgfplots@gridlines@stop@at@unpack@@@\entry\relax + \edef\entry{\pgfplots@grid@stop@at:2if<\pgfplots@grid@stop@at@iflt}% + \else + \edef\entry{\entry:2if<}% + \fi% + \fi% + % + \pgfutil@in@{[index]}{#1}% + \ifpgfutil@in@ + \if0\csname b@pgfplots@#3ticknum@to@pos@lookup\endcsname + \pgfplots@gridlines@init@grid@stop@points@for@init@ticknum@lookup#2#3% + \fi + \expandafter\pgfplots@gridlines@stop@at@unpack\entry\relax + \pgfutil@ifundefined{pgfplots@#3tick@num@to@pos@\pgfplots@grid@stop@at}{% + \pgfplots@warning{There is no #3tick with index '\pgfplots@grid@stop@at'. Skipping it.}% + \let\entry=\pgfutil@empty + }{% + \edef\entry{\csname pgfplots@#3tick@num@to@pos@\pgfplots@grid@stop@at\endcsname:\pgfplots@grid@stop@at@eachnth}% + }% + \fi + % + \expandafter\pgfplots@gridlines@stop@at@unpack\entry\relax + \pgfplotscoordmath{default}{parsenumber}\pgfplots@grid@stop@at + \let\pgfplots@grid@stop@at=\pgfmathresult + \ifx\pgfplots@grid@stop@at@iflt\pgfutil@empty + \else + \pgfplotscoordmath{default}{parsenumber}\pgfplots@grid@stop@at@iflt + \let\pgfplots@grid@stop@at@iflt=\pgfmathresult + \fi + \edef\entry{\pgfplots@grid@stop@at:\pgfplots@grid@stop@at@eachnth if<\pgfplots@grid@stop@at@iflt}% +}% +\def\pgfplots@gridlines@stop@at@unpack@@@#1if<#2\relax{% + \def\pgfplots@grid@stop@at{#1}% + \def\pgfplots@grid@stop@at@iflt{#2}% +}% +\def\pgfplots@gridlines@stop@at@unpack#1:#2if<#3\relax{% + \def\pgfplots@grid@stop@at{#1}% + \def\pgfplots@grid@stop@at@eachnth{#2}% + \def\pgfplots@grid@stop@at@iflt{#3}% +}% + +% Returns the xtick position which should end the current arc. +% +% This is an INTERNAL preparation method. See +% \pgfplots@get@current@grid@stop@point for the final one. +% +% Note that arcs correspond to ygrid lines. +% +% #1 either x or y +% #2 either x or y +% #3 the value of the current grid line +% #4 a boolean which expands either to 0 or to 1. +% The \pgfplots@get@current@grid@stop@point@handle@constraints method +% will be invoked if and only if #4=1 +% +% @POSTCONDITION On output, +% - \pgfplotsretval will be filled with the +% result. If the result is empty, no restriction is imposed. +% Otherwise, it contains the #2tick value at which the current #1grid shall end. +% The result is already processed with +% \pgfplotscoordmath{default}{parsenumber}{<value>} +% - \pgfplots@tick@prepared contains a rounded representation of #3. +% +% The method relies on the 'ygrid each nth passes x' feature, more specifically the +% stuff prepared by \pgfplots@gridlines@init@grid@stop@points@for +\def\pgfplots@gridlines@preparation@get@current@grid@stop@point#1#2#3#4{% + \def\pgfplotsretval{}% + % + \pgfplots@gridlines@stopmap@prepare{#3}% + \let\pgfplots@tick@prepared=\pgfmathresult + \pgfmathfloatabs@\pgfplots@tick@prepared + \let\pgfplots@tick@prepared@abs=\pgfmathresult + % + \pgfplotscoordmath{default}{op}{abs}{{#3}}% + \let\pgfplots@tick@abs=\pgfmathresult + % + % first: check the '#1grid stop at #2': + \expandafter\ifx\csname b@pgfplots@#1gridline@stopmap\endcsname\relax% + % ok. there is no such thing. + \else + % ah - process it! + \pgfutil@ifundefined{pgfplots@#1gridline@stopmap@\pgfplots@tick@prepared}{% + }{% + \edef\pgfplotsretval{\csname pgfplots@#1gridline@stopmap@\pgfplots@tick@prepared\endcsname}% + }% + \fi + % + \ifx\pgfplotsretval\pgfutil@empty + % the individual map failed. Ok, then check for the '#1grid each nth passes #2' + \expandafter\ifx\csname pgfplots@#1grid@stop@points\endcsname\relax + \else + % \pgfplots@ticknum is defined in this context here. + \pgfutil@ifundefined{pgfplots@#1tickpos@to@sortidx@\pgfplots@ticknum}{% + \pgfplots@warning{Sorry, I can't get the current arc limit for #1grid no \#\pgfplots@ticknum\space(value \pgfplots@tick). This seems like an internal error!?}% + }{% + % get the sort index for the current tick (which is + % uniquely identified by its \pgfplots@ticknum) + \expandafter\let\expandafter\pgfplots@k\csname pgfplots@#1tickpos@to@sortidx@\pgfplots@ticknum\endcsname + % + \expandafter\pgfplotslistforeachungrouped\csname pgfplots@#1grid@stop@points\endcsname\as\pgfplots@loc@TMPa{% + \ifx\pgfplotsretval\pgfutil@empty + % we found no final limit so far. proceed. + \expandafter\pgfplots@gridlines@stop@at@unpack\pgfplots@loc@TMPa\relax + \ifx\pgfplots@grid@stop@at@iflt\pgfutil@empty + \pgfplots@loop@CONTINUEtrue + \else + \pgfplotscoordmath{default}{if less than}{\pgfplots@tick@abs}{\pgfplots@grid@stop@at@iflt}{% + \pgfplots@loop@CONTINUEtrue + }{% + \pgfplots@loop@CONTINUEfalse + }% + \fi + % + \ifpgfplots@loop@CONTINUE + \pgfplotsmathmodint\pgfplots@k\pgfplots@grid@stop@at@eachnth + \ifnum\pgfmathresult=0 + \c@pgf@counta=\pgfplots@k + \divide\c@pgf@counta by\pgfplots@grid@stop@at@eachnth\relax + \edef\pgfplots@k{\the\c@pgf@counta}% + \else + % found the final limit. + % + % Now, check the constraints which couple + % X and Y. + \let\pgfplotsretval=\pgfplots@grid@stop@at + \if1#4% + \pgfplots@get@current@grid@stop@point@handle@constraints #1#2{#3}% + \fi + \fi + \fi + \fi + }% + }% + \fi + \fi + \ifx\pgfplotsretval\pgfutil@empty + \else + \expandafter\let\csname pgfplots@final@stop@point@for@#1tick@\pgfplots@tick@prepared\endcsname=\pgfplotsretval +%\message{#1 grid line: storing end value for '#3' END[\pgfplots@tick@prepared] = \pgfplotsretval.^^J}% + \fi +}% + +% PRECONDITION +% \pgfplotsretval contains a non-zero constraint for the ygrid at #1. +% +% POSTCONDITION +% either \pgfplotsretval is unchanged, or it is reset to +% \pgfutil@empty if constraints are violated. +% +% The constraints are ONLY effective if BOTH, incomplete x- and y grid +% lines are in effect. In that case, it should never happen that a +% single grid line ends in a dead-end somewhere in white space. +% +% I enforce two constraints which apply only to ygrid to fix this +% issue (this may be improved later). +% +% The idea is simple: +% 1. suppose the grid line 'x=1' stops at 'y=5'. +% Suppose further that the y grid line 'y=0.95' should stop at 'x=1'. +% Is that acceptable? Yes, because |y| < 5. +% Now, suppose an y grid line with |y| > 5 should stop at 'x=1'. +% Is this allowed? NO! Because it would become a dead end since +% the 'x=1' line ends at 'y=5'! +% +% So, whenever we consider ygrids and stop point candidates "x=X", +% acquire the value Q where the x (!) grid line "x=X" stops. +% If |y| > Q, the candidate "x=X" is rejected. +% +% 2. There might still be the case that x grid lines have dead-ends. +% The current solution applies the idea first to all y grid lines, +% and once the y grid lines are ready, it applies the same idea to +% x grid lines. +% +% Uncomment the routine(s) and run the test cases to see what happens. +\def\pgfplots@get@current@grid@stop@point@handle@constraints#1#2#3{% + \ifx\pgfplotsretval\pgfutil@empty + \else + \pgfplots@gridlines@stopmap@prepare{\pgfplotsretval}% + \let\pgfplots@loc@TMPa=\pgfmathresult + % +%\message{checking ending '#1=#3' at '#2=\pgfplotsretval'. '#2=\pgfplots@loc@TMPa' stops}% + \pgfutil@ifundefined{pgfplots@final@stop@point@for@#2tick@\pgfplots@loc@TMPa}{% + % no constraint. Ok. +%\message{ nowhere. No constraint.^^J}% + }{% +%\message{ at \pgfplots@loc@TMPa. Feasible: }% + % Oh, a constraint. That means + % further work. + \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@final@stop@point@for@#2tick@\pgfmathresult\endcsname + \pgfplotscoordmath{default}{op}{abs}{{#3}}% + \pgfplotscoordmath{default}{if less than}{\pgfmathresult}{\pgfplots@loc@TMPa}{% + % ok, we can use the found + % stop value. +%\message{YES.^^J}% + }{% +%\message{NO.^^J}% + % no, the stop value is + % invalid; it would stop in + % white space! + \let\pgfplotsretval=\pgfutil@empty + }% + }% + \fi +}% + +% Returns the xtick position which should end the current arc. +% +% Note that arcs correspond to ygrid lines. +% +% #1 either x or y +% #2 either x or y +% #3 the value of the current grid line +% +% @POSTCONDITION On output, \pgfplotsretval will be filled with the +% result. If the result is empty, no restriction is imposed. +% Otherwise, it contains the #2tick value at which the current #1grid shall end. +% The result is already processed with +% \pgfplotscoordmath{default}{parsenumber}{<value>} +% +% The method relies on the 'ygrid each nth passes x' feature, more specifically the +% stuff prepared by \pgfplots@gridlines@init@grid@stop@points@for +% +% Note that all work has already been done by +% \pgfplots@gridlines@init@grid@stop@points@for. We only need to query +% the result at this point. +% @see \pgfplots@gridlines@init@grid@stop@points@for +% @see \pgfplots@gridlines@preparation@get@current@grid@stop@point +\def\pgfplots@get@current@grid@stop@point#1#2#3{% + \def\pgfplotsretval{}% + % + % check the '#1grid stop at #2': + \expandafter\ifx\csname b@pgfplots@#1gridline@stopmap\endcsname\relax% + % ok. there is no such thing. + \else + % + \pgfplots@gridlines@stopmap@prepare{#3}% + \let\pgfplots@tick@prepared=\pgfmathresult + \pgfmathfloatabs@\pgfplots@tick@prepared + \let\pgfplots@tick@prepared@abs=\pgfmathresult + % + % ah - process it! + \pgfutil@ifundefined{pgfplots@#1gridline@stopmap@\pgfplots@tick@prepared}{% + \let\pgfplotsretval\pgfutil@empty + }{% + \edef\pgfplotsretval{\csname pgfplots@#1gridline@stopmap@\pgfplots@tick@prepared\endcsname}% + }% + \fi + % +}% + + +\def\pgfplots@smithchart@draw@xcircle#1{% + \pgfplotscoordmath{default}{one}% + \let\pgfplots@loc@TMPa=\pgfmathresult + % + \pgfplotscoordmath{default}{parsenumber}{#1}% + \let\pgfplots@x=\pgfmathresult + % + \pgfplotscoordmath{default}{op}{add}{{\pgfplots@loc@TMPa}{\pgfplots@x}}% + \let\pgfplots@radius@inverse=\pgfmathresult + \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfmathresult}}% + \let\pgfplots@radius=\pgfmathresult + \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplots@x}}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \let\pgfplots@center=\pgfmathresult + % + \pgfplotscoordmath{default}{tofixed}{\pgfplots@radius}% + \let\pgfplots@radius=\pgfmathresult + % + \pgfplotscoordmath{default}{tofixed}{\pgfplots@radius@inverse}% + \let\pgfplots@radius@inverse=\pgfmathresult + % + % This here would suffice in case 'xgrid each nth passes y={}': +% \pgfpathellipse +% {\pgfplotsqpointxy@smithchart@canvas{\pgfplots@center}{0}} +% {\pgfplotsqpointxy@smithchart@canvas{\pgfplots@radius}{0}} +% {\pgfplotsqpointxy@smithchart@canvas{0}{\pgfplots@radius}}% + % + % but we also check for the 'xgrid each nth passes y' feature: + \pgfplots@get@current@grid@stop@point xy{\pgfplots@x}% + \let\pgfplots@arc@ends@at@y@arc@value\pgfplotsretval% + % + \ifx\pgfplots@arc@ends@at@y@arc@value\pgfutil@empty + % Ok. There is no specific end point -- simply use the + % (1,0) point (i.e. draw the full circle). + % + \pgfmathadd@{\pgfplots@center}{\pgfplots@radius}% + \let\pgfplots@start=\pgfmathresult% + \def\pgfplots@startim{0}% + \def\pgfplots@startangle{0}% + \let\pgfplots@end=\pgfplots@start + \let\pgfplots@endim=\pgfplots@startim + \def\pgfplots@endangle{360}% + \else + % Ok. The arc should end before it reaches the (1,0) + % point. Determine the exact position and the + % corresponding arc end angle. + % + % In general, the intersection between the circle for + % fixed x=A and fixed y=B is given by + % + % p + j * q = (A + j * B -1 ) / ( A + j*B +1) + % see http://www.siart.de/lehre/tutorien.xhtml#smishort + \pgfplotscoordmath{default}{one}% + \let\pgfplots@one=\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{-1}% + \let\pgfplots@mone=\pgfmathresult + \pgfplotscoordmath{default}{op}{add}{{\pgfplots@x}{\pgfplots@mone}}% + \let\pgfplots@A@mone=\pgfmathresult + \pgfplotscoordmath{default}{op}{add}{{\pgfplots@x}{\pgfplots@one}}% + \let\pgfplots@A@one=\pgfmathresult + % oh - we should only draw a partial arc. + % Well, then compute its end point and the + % corresponding end angle. + \pgfplotscoordmathcomplexdivision + {\pgfplots@A@mone}{\pgfplots@arc@ends@at@y@arc@value}% + {\pgfplots@A@one}{\pgfplots@arc@ends@at@y@arc@value}% + \let\pgfplots@start=\pgfmathresult + \let\pgfplots@startim=\pgfmathresultim + \pgfplotscoordmath{default}{tofixed}{\pgfplots@start}% + \let\pgfplots@start=\pgfmathresult + \pgfplotscoordmath{default}{tofixed}{\pgfplots@startim}% + \let\pgfplots@startim=\pgfmathresult + % + \pgfplots@compute@angle@of@point@in@circle\pgfplots@start\pgfplots@startim{\pgfplots@center}{\pgfplots@radius}{\pgfplots@radius@inverse}% + \let\pgfplots@startangle=\pgfmathresult + \pgfmathsubtract@{360}{\pgfplots@startangle}% + \let\pgfplots@endangle=\pgfmathresult + \let\pgfplots@end=\pgfplots@start + \edef\pgfplots@endim{-\pgfplots@startim}% + \ifdim\pgfplots@startangle pt>\pgfplots@endangle pt + \let\pgfplots@loc@TMPa=\pgfplots@startangle + \let\pgfplots@startangle=\pgfplots@endangle + \let\pgfplots@endangle=\pgfplots@loc@TMPa + \fi + \fi + % +%\message{X grid line \#\csname pgfplots@ticknum\endcsname \space at '#1': center = (\pgfplots@center,0); radius = \pgfplots@radius\space(start angle \pgfplots@startangle, end angle = \pgfplots@endangle; stops at y = \pgfplots@arc@ends@at@y@arc@value).^^J}% + % + % Now, compute the arc. + % + % first, compute the absolute x/y radii: + \pgf@xa=\pgfplots@radius\pgf@xx + \pgf@xb=\pgfplots@radius\pgf@yy + \edef\pgfplots@mirror@sign{\ifpgfplots@smithchart@mirrored -\fi}% + \pgfpathmoveto{\pgfplotsqpointxy@smithchart@canvas{\pgfplots@start}{\pgfplots@startim}}% + % note that the case startangle > endangle is + % automatically correct; patharc handles that. + %\edef\pgfplots@loc@TMPa{{\pgfplots@startangle}{\pgfplots@endangle}{\pgfplots@mirror@sign\the\pgf@xa\space and \the\pgf@xb}}% + %\expandafter\pgfpatharc\pgfplots@loc@TMPa + % + % prefer \pgfpatharctoprecomputed. It is faster and more accurate + \edef\pgfplots@loc@TMPa{% + {\noexpand\pgfplotsqpointxy@smithchart@canvas{\pgfplots@center}{0}}% + {\pgfplots@startangle}% + {\pgfplots@endangle}% + {\noexpand\pgfplotsqpointxy@smithchart@canvas{\pgfplots@end}{\pgfplots@endim}}% + {\pgfplots@mirror@sign\the\pgf@xa}% + {\the\pgf@xb}% + {\pgfplots@mirror@sign\pgfplots@smithchart@axis@ratioxy}% + {\pgfplots@mirror@sign\pgfplots@smithchart@axis@ratioyx}% + }% + \expandafter\pgfpatharctoprecomputed\pgfplots@loc@TMPa +} + +\def\pgfplots@smithchart@draw@yarc#1{% + \pgfplotscoordmath{default}{parsenumber}{#1}% + \let\pgfplots@y\pgfmathresult + \pgfplotscoordmath{default}{op}{abs}{{\pgfplots@y}}% + \pgfplotscoordmath{default}{if less than}{\pgfmathresult}{\pgfplots@almost@zero@thresh}{% + \pgfpathmoveto{\pgfplotsqpointxy@smithchart@canvas{-1}{0}}% + \pgfpathlineto{\pgfplotsqpointxy@smithchart@canvas{1}{0}}% + }{% + \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfplots@y}}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \let\pgfplots@signedradius=\pgfmathresult + % + \pgfplotscoordmath{default}{tofixed}{\pgfplots@y}% + \ifdim\pgfplots@signedradius pt<0pt + \def\pgfplots@radius@sign{-}% + \edef\pgfplots@radius@inverse{-\pgfmathresult}% + \edef\pgfplots@radius{-\pgfplots@signedradius}% + \else + \def\pgfplots@radius@sign{}% + \edef\pgfplots@radius@inverse{\pgfmathresult}% + \let\pgfplots@radius=\pgfplots@signedradius + \fi + % this here is the correct, complete circle -- together + % with a clip path, you get what you want: + %\pgfpathellipse + % {\pgfplotsqpointxy@smithchart@canvas{1}{\pgfplots@signedradius}} + % {\pgfplotsqpointxy@smithchart@canvas{\pgfplots@signedradius}{0}} + % {\pgfplotsqpointxy@smithchart@canvas{0}{\pgfplots@signedradius}}% + % But I only want the arc (probably stopped earlier to + % improve qualtity of the chart) + % + % compute start point for the arc. + % + % To do so, we need to compute the intersection between + % the circle for fixed x=0 and the circle for y=#1. + % + % In general, the intersection between the circle for + % fixed x=A and fixed y=B is given by + % + % p + j * q = (A + j * B -1 ) / ( A + j*B +1) + % see http://www.siart.de/lehre/tutorien.xhtml#smishort + % + % inserting A = 0 and B = #1 yields the result + % p=\pgfplots@start + % q=\pgfplots@startim + % as follows: + \pgfplotscoordmath{default}{one}% + \let\pgfplots@one=\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{-1}% + \let\pgfplots@mone=\pgfmathresult + \pgfplotscoordmathcomplexdivision{\pgfplots@mone}{\pgfplots@y}{\pgfplots@one}{\pgfplots@y}% + \let\pgfplots@start=\pgfmathresult + \let\pgfplots@startim=\pgfmathresultim + \pgfplotscoordmath{default}{tofixed}{\pgfplots@start}% + \let\pgfplots@start=\pgfmathresult + \pgfplotscoordmath{default}{tofixed}{\pgfplots@startim}% + \let\pgfplots@startim=\pgfmathresult + % + \pgfplots@compute@angle@of@point@in@circle\pgfplots@start\pgfplots@startim{1}{\pgfplots@signedradius}{\pgfplots@radius@inverse}% + \let\pgfplots@startangle=\pgfmathresult + % + % + % compute end angle. + \pgfplots@get@current@grid@stop@point yx{\pgfplots@y}% + \let\pgfplots@arc@ends@at@x@circle@value\pgfplotsretval% + % + \ifx\pgfplots@arc@ends@at@x@circle@value\pgfutil@empty + % Ok. There is no specific end point -- simply use the + % (1,0) point (i.e. draw the full arc). + % + % The "0 degree" angle in my circles is in the direction + % of (1,0) . + \ifdim\pgfplots@startim pt>0pt + % ok; this arc belongs to the upper hemisphere. + \def\pgfplots@endangle{270}% + \else + % ok; this arc belongs to the lower hemisphere. + \def\pgfplots@endangle{90}% + \fi + \def\pgfplots@end{1}% + \def\pgfplots@endim{0}% + \else + % Ok. The arc should end before it reaches the (1,0) + % point. Determine the exact position and the + % corresponding arc end angle. + \pgfplotscoordmath{default}{op}{add}{{\pgfplots@arc@ends@at@x@circle@value}{\pgfplots@mone}}% + \let\pgfplots@A@mone=\pgfmathresult + \pgfplotscoordmath{default}{op}{add}{{\pgfplots@arc@ends@at@x@circle@value}{\pgfplots@one}}% + \let\pgfplots@A@one=\pgfmathresult + % oh - we should only draw a partial arc. + % Well, then compute its end point and the + % corresponding end angle. + \pgfplotscoordmathcomplexdivision{\pgfplots@A@mone}{\pgfplots@y}{\pgfplots@A@one}{\pgfplots@y}% + \let\pgfplots@end=\pgfmathresult + \let\pgfplots@endim=\pgfmathresultim + \pgfplotscoordmath{default}{tofixed}{\pgfplots@end}% + \let\pgfplots@end=\pgfmathresult + \pgfplotscoordmath{default}{tofixed}{\pgfplots@endim}% + \let\pgfplots@endim=\pgfmathresult + % + \pgfplots@compute@angle@of@point@in@circle\pgfplots@end\pgfplots@endim{1}{\pgfplots@signedradius}{\pgfplots@radius@inverse}% + \let\pgfplots@endangle=\pgfmathresult + \fi + % + % + % + % Now, compute the arc. + % + % first, compute the absolute x/y radii: + % + % Note that for small y (like y=0.01), the arc is almost a + % straight line. Consequently, the ellipsis radius will be much larger + % than 16000, violating TeX's number range. + % + % To avoid that, I clip it to the highest allowed value. + % The final radius is + % \pgfplots@radius * \pgf@xx and \pgfplots@radius * \pgf@yy. + % the clipped value thus needs to respect the magnitude of \pgf@xx and \pgf@yy. + \ifdim\pgfplots@radius pt<\pgfplots@smithchart@axis@max@xradius@for@ycircle pt + \let\pgfplots@radius@x\pgfplots@radius + \else + \let\pgfplots@radius@x=\pgfplots@smithchart@axis@max@xradius@for@ycircle + \fi + \ifdim\pgfplots@radius pt<\pgfplots@smithchart@axis@max@yradius@for@ycircle pt + \let\pgfplots@radius@y\pgfplots@radius + \else + \let\pgfplots@radius@y=\pgfplots@smithchart@axis@max@yradius@for@ycircle + \fi +%\message{Y grid line \#\csname pgfplots@ticknum\endcsname\space at '#1': center = (1,\pgfplots@signedradius); signedradius = \pgfplots@signedradius\space clipped radii = \pgfplots@radius@x*\the\pgf@xx\space and \pgfplots@radius@y*\the\pgf@yy\space ( start angle \pgfplots@startangle, end angle \pgfplots@endangle, arc limit: \ifx\pgfplots@arc@ends@at@x@circle@value\pgfutil@empty NONE\else \pgfplots@arc@ends@at@x@circle@value\fi)^^J}% + \pgf@xa=\pgfplots@radius@x\pgf@xx + \pgf@xb=\pgfplots@radius@y\pgf@yy + \edef\pgfplots@mirror@sign{\ifpgfplots@smithchart@mirrored -\fi}% + \pgfpathmoveto{\pgfplotsqpointxy@smithchart@canvas{\pgfplots@start}{\pgfplots@startim}}% + % note that the case startangle > endangle is + % automatically correct; patharc handles that. + %\edef\pgfplots@loc@TMPa{{\pgfplots@startangle}{\pgfplots@endangle}{\pgfplots@mirror@sign\the\pgf@xa\space and \the\pgf@xb}}% + %\expandafter\pgfpatharc\pgfplots@loc@TMPa + % + % prefer \pgfpatharctoprecomputed. It is faster and more accurate + \ifdim\pgfplots@startangle pt>\pgfplots@endangle pt + \let\pgfplots@loc@TMPa=\pgfplots@startangle +% \let\pgfplots@startangle=\pgfplots@endangle +% \let\pgfplots@endangle=\pgfplots@loc@TMPa + \fi + \edef\pgfplots@loc@TMPa{% + {\noexpand\pgfplotsqpointxy@smithchart@canvas{1}{\pgfplots@radius@sign\pgfplots@radius@y}}% + {\pgfplots@startangle}% + {\pgfplots@endangle}% + {\noexpand\pgfplotsqpointxy@smithchart@canvas{\pgfplots@end}{\pgfplots@endim}}% + {\pgfplots@mirror@sign\the\pgf@xa}% + {\the\pgf@xb}% + {\pgfplots@mirror@sign\pgfplots@smithchart@axis@ratioxy}% + {\pgfplots@mirror@sign\pgfplots@smithchart@axis@ratioyx}% + }% + \expandafter\pgfpatharctoprecomputed\pgfplots@loc@TMPa + }% +} + +\def\pgfplots@drawgridlines@onorientedsurf@fromto@smithchart#1{% + \if x\pgfplotspointonorientedsurfaceA + \pgfplots@smithchart@draw@xcircle{#1}% + \else + \pgfplots@smithchart@draw@yarc{#1}% + \fi +}% + +% Given a circle with center point (#3,#4), we search for the angle +% of the point (#1,#2). The point is expected to be on the circle. +% The resulting angle is returned in \pgfmathresult +% +% #1 x coordinate of the point for which an angle is searched +% #2 y coordinate of the point for which an angle is searched +% #3 x coordinate of the circle's center point +% #4 y coordinate of the circle's center point +% #5 is either empty or it is expected to contain the inverse radius, 1/r +% this information is available in my context, so I don't recompute +% it. +% +% All coordinates are expected in standard TeX precision (numbers +% without unit) +\def\pgfplots@compute@angle@of@point@in@circle#1#2#3#4#5{% + % + % 1. compute diff vector from center=(1,\pgfplots@signedradius) to start: + \pgfmathsubtract@{#1}{#3}% + \let\pgfplots@D\pgfmathresult + \pgfmathsubtract@{#2}{#4}% + \let\pgfplots@Dim\pgfmathresult + % + % 2. compute the start angle. + % It is related to the angle between the point (1,0) and + % diff, which, in turn is given by + % < (1,0), (D,Dim) > = cos(alpha) ||(D,Dim)|| + % < (1,0), (D,Dim) > = D + % + % Note that ||(D,Dim)|| = r, the radius of the involved circle + % around (#3,#4). If 1/r is already available, use it! Saves a lot + % of time. + % + \def\pgfplots@loc@TMPa{#5}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \pgfmathveclen\pgfplots@D\pgfplots@Dim + \let\pgfplots@veclen=\pgfmathresult + \pgfmathreciprocal@\pgfplots@veclen + \let\pgfplots@inverseveclen=\pgfmathresult + \else + % oh, good -- we already have 1/||(D,Dim)||. Use it. + \def\pgfplots@inverseveclen{#5}% +%\message{using already available inverseveclen '#5' }% + \fi + \pgfmathmultiply@{\pgfplots@D}{\pgfplots@inverseveclen}% +%\message{D= (\pgfplots@D,\pgfplots@Dim).. acos(\pgfplots@D * \pgfplots@inverseveclen) = acos(\pgfmathresult)}% + \pgfmathacos@{\pgfmathresult}% the '-' comes from D<0 . +%\message{= \pgfmathresult^^J}% + \let\pgfplots@tmpangle\pgfmathresult% + % ok. tmpangle is per definition less than 180; it is the + % smaller angle between (1,0) and (D,Dim). + % + % compute the angle relative to (1,0): + \ifdim\pgfplots@Dim pt<0pt + \pgfmathsubtract@{360}{\pgfplots@tmpangle}% + \fi +}% + +\def\pgfplots@drawaxis@innerlines@onorientedsurf@smithchart#1#2#3{% + \if2\csname pgfplots@#1axislinesnum\endcsname + \draw[/pgfplots/every inner #1 axis line,% + decorate,% + #1discont,% + decoration={pre length=\csname #1disstart\endcsname, post length=\csname #1disend\endcsname}] + \pgfextra + \csname pgfplotspointonorientedsurfaceabsetupforset#3\endcsname{\csname pgfplots@logical@ZERO@#3\endcsname}{2}% + \if#1x% + \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}% + \pgfplots@drawgridlines@onorientedsurf@fromto{0}% + \else + \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1min\endcsname}{\csname pgfplots@logical@ZERO@#2\endcsname}}% + \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1max\endcsname}{\csname pgfplots@logical@ZERO@#2\endcsname}}% + \fi + \endpgfextra + ; + \fi +}% +\def\pgfplots@drawaxis@outerlines@separate@onorientedsurf@smithchartaxis#1#2{% + \if2\csname pgfplots@#1axislinesnum\endcsname + % centered axis lines handled elsewhere. + \else + \scope[/pgfplots/every outer #1 axis line, + #1discont,decoration={pre length=\csname #1disstart\endcsname, post length=\csname #1disend\endcsname}] + \if#1x + \draw decorate { + \pgfextra + % exchange roles of A <-> B axes: + \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}% + \pgfplots@drawgridlines@onorientedsurf@fromto{0}% + \endpgfextra + }; + \else + \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{0}{% + \draw decorate { + \pgfextra + % exchange roles of A <-> B axes: + \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}% + \pgfplots@drawgridlines@onorientedsurf@fromto{\csname pgfplots@#2min\endcsname}% + \endpgfextra + }; + }{}% + %-------------------------------------------------- + % \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{1}{% + % \draw decorate { + % \pgfextra + % % exchange roles of A <-> B axes: + % \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}% + % \pgfplots@drawgridlines@onorientedsurf@fromto{\csname pgfplots@#2max\endcsname}% + % \endpgfextra + % }; + % }{}% + %-------------------------------------------------- + \fi + \endscope + \fi +}% + +\def\pgfplots@initsizes@smithchart{% + % I copy-pasted most of this code, up to just one position where + % I introduced the modified scaling for smithchart axes + %---------------------------------- + % INIT. + % + % + \def\pgfplots@minmax@reg@forbidden{\pgfplots@error{Sorry, an internal logic error occured during smithchart processing (a routine tried to access \string\pgfplots@xmin@reg\space or its variants). Please report this as bug, sorry}}% + \iffalse + \pgfplots@xmin@reg=\pgfplots@xmin pt % + \pgfplots@xmax@reg=\pgfplots@xmax pt % + \pgfplots@ymin@reg=\pgfplots@ymin pt % + \pgfplots@ymax@reg=\pgfplots@ymax pt % + \ifpgfplots@threedim + \pgfplots@zmin@reg=\pgfplots@zmin pt % + \pgfplots@zmax@reg=\pgfplots@zmax pt % + \fi + \else + \let\pgfplots@xmin@reg=\pgfplots@minmax@reg@forbidden + \let\pgfplots@xmax@reg=\pgfplots@minmax@reg@forbidden + \let\pgfplots@ymin@reg=\pgfplots@minmax@reg@forbidden + \let\pgfplots@ymax@reg=\pgfplots@minmax@reg@forbidden + \let\pgfplots@zmin@reg=\pgfplots@minmax@reg@forbidden + \let\pgfplots@zmax@reg=\pgfplots@minmax@reg@forbidden + \fi + % + % + %----------------------------------------- + % PROCESS THE 'width' and 'height' options + %----------------------------------------- + % + % + \pgfkeysgetvalue{/pgfplots/view/az}{\pgfplots@view@az}% + \pgfkeysgetvalue{/pgfplots/view/el}{\pgfplots@view@el}% + \ifpgfplots@threedim + \def\pgfplots@tmpZscale{1pt}% + \else + \def\pgfplots@tmpZscale{0pt}% + \let\pgfplots@view@el=\pgfutil@empty + \let\pgfplots@view@az=\pgfutil@empty + \fi + \ifx\pgfplots@view@az\pgfutil@empty + %\let\pgfplots@rectangle@width=\pgfutil@empty + %\let\pgfplots@rectangle@height=\pgfutil@empty + \def\pgfplots@view@dir@threedim@x{0}% + \def\pgfplots@view@dir@threedim@y{0}% + \def\pgfplots@view@dir@threedim@z{1}% + % + % FIXME HERE COMES THE smithchart MODIFICATION + %-------------------------------------------------- + % \pgfpointdiff + % {\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}} + % {\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}% + %-------------------------------------------------- + % instead of scaling from (min) (max), we only need the UPPER + % bound -- in both, x and y directions (since we have a cycle. + % Furthermore, we need it twice since we are interested in the + % diameter, not the radius. + \global\pgf@x=2 pt % radius + \global\pgf@y=\pgf@x % same for y + % + % only used temporarily in this macro to compute the correct + % length for unit vectors: + \edef\pgfplots@initsizes@axisdiag@x{\the\pgf@x}% + \edef\pgfplots@initsizes@axisdiag@y{\the\pgf@y}% + % + \ifx\pgfplots@x\pgfutil@empty + \ifx\pgfplots@width\pgfutil@empty + \pgfplots@error{INTERNAL LOGIC ERROR! WIDTH NOT SET}% + \fi + \pgfplots@initsizes@getXscale\pgfplots@initsizes@axisdiag@x\into\pgfplots@tmpXscale + %\ifpgfplots@scale@only@axis + % \let\pgfplots@rectangle@width=\pgfplots@width + %\fi + \else + \def\pgfplots@tmpXscale{1}% + \fi + % + \ifx\pgfplots@y\pgfutil@empty + \ifx\pgfplots@height\pgfutil@empty + \pgfplots@error{INTERNAL LOGIC ERROR! HEIGHT NOT SET}% + \fi + \pgfplots@initsizes@getYscale\pgfplots@initsizes@axisdiag@y\into\pgfplots@tmpYscale + %\ifpgfplots@scale@only@axis + % \let\pgfplots@rectangle@height=\pgfplots@height + %\fi + \else + \def\pgfplots@tmpYscale{1}% + \fi + % + \edef\pgfplots@tmpXscale{\pgfplots@tmpXscale pt}% + \edef\pgfplots@tmpYscale{\pgfplots@tmpYscale pt}% + % + \pgfplots@initsizes@setunitvector{x}{0}{\pgfplots@tmpXscale}{\pgfplots@tmp@xisaxisparallel}% + \pgfplots@initsizes@setunitvector{y}{1}{\pgfplots@tmpYscale}{\pgfplots@tmp@yisaxisparallel}% + \pgfplots@initsizes@setunitvector{z}{2}{\pgfplots@tmpZscale}{\pgfplots@loc@TMPc}% + \else + % 3D case is currently always initialised by `view': + \let\pgfplots@x=\pgfutil@empty + \let\pgfplots@y=\pgfutil@empty + \let\pgfplots@z=\pgfutil@empty + \pgfplotssetaxesfromazel{\pgfplots@view@az}{\pgfplots@view@el}{\pgfplots@tmp@xisaxisparallel}% + \if1\pgfplots@tmp@xisaxisparallel% + \def\pgfplots@tmp@yisaxisparallel{1}% + \fi + \fi +%\message{Pgfplots debug: initialised unit vectors to x=(\the\pgf@xx,\the\pgf@xy), y=(\the\pgf@yx,\the\pgf@yy), z=(\the\pgf@zx,\the\pgf@zy). }% + % + \let\pgfplotsmathfloatviewdepthxyz@=\pgfplotsmathfloatviewdepthxyz@infigure + \let\pgfplotsmathviewdepthxyz@=\pgfplotsmathviewdepthxyz@infigure + % + \pgfplotsmath@ifzero{\pgfplots@x@veclength}{\pgfplots@hide@xtrue\pgfplots@shownothingof@xtrue}{}% + \pgfplotsmath@ifzero{\pgfplots@y@veclength}{\pgfplots@hide@ytrue\pgfplots@shownothingof@ytrue}{}% + \ifpgfplots@threedim + \pgfplotsmath@ifzero{\pgfplots@z@veclength}{\pgfplots@hide@ztrue\pgfplots@shownothingof@ztrue}{}% + \else + \if1\pgfplots@tmp@xisaxisparallel% + \if1\pgfplots@tmp@yisaxisparallel% + % Optimize for axis-parallel case! + % puh. Did not make any measureable difference!? Ok... + \let\pgfplotsqpointxy=\pgfplotsqpointxy@orthogonal + \fi + \fi + \fi + % + % FIXME : unit vector ratio / axis equal + % +} + +\def\pgfplots@handle@invalid@range@defaultlimits@smithchart{% + \pgfplotscoordmath{x}{parsenumber}{0}% + \global\let\pgfplots@xmin=\pgfmathresult + \pgfplotscoordmath{x}{parsenumber}{16000}% + \global\let\pgfplots@xmax=\pgfmathresult + \global\let\pgfplots@data@xmin=\pgfplots@xmin + \global\let\pgfplots@data@xmax=\pgfplots@xmax + % + \pgfplotscoordmath{y}{parsenumber}{0}% + \global\let\pgfplots@ymin=\pgfmathresult + \pgfplotscoordmath{y}{parsenumber}{16000}% + \global\let\pgfplots@ymax=\pgfmathresult + \global\let\pgfplots@data@ymin=\pgfplots@ymin + \global\let\pgfplots@data@ymax=\pgfplots@ymax + \pgfplotsset{enlargelimits=false}% +} + +\let\pgfplots@set@default@size@options@standard=\pgfplots@set@default@size@options +\def\pgfplots@set@default@size@options@smithchart{% + \pgfplots@set@default@size@options@standard + \pgfplotsset{smithchart ticks by size={\pgfkeysvalueof{/pgfplots/width}}{\pgfkeysvalueof{/pgfplots/height}}}% + % + \if1\b@pgfplots@smithchart@defaultticks@x + \if1\b@pgfplots@smithchart@defaultticks@y + \pgfplotsset{default smithchart xytick}% + \fi + \fi +} +\def\pgfplots@assign@default@tick@foraxis@smithchart#1{% + % do nothing here. I don't know the algorithm yet... but for + % smithcharts, it may be sufficient to simply predefine several + % sets of ticks, depending on the final size. + % + % This is realized in + % \pgfplots@set@default@size@options@smithchart (which is invoked + % before the ticks are processed). + \pgfplots@determinedefaultvalues@needs@check@uniformtickfalse + \expandafter\let\csname pgfplots@tick@distance@#1\endcsname=\pgfutil@empty + % + \pgfplotsset{default smithchart #1tick}% + % ok, I expect the '#1tick' key to be set now. Process it. + % Note that the earlier processing of pgfplots has been bypassed + % at this point -- we need to preprocess the tick list *here*: + \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tick\endcsname + \expandafter\pgfplots@assign@default@tick@foraxis@smithchart@\expandafter{\pgfplots@loc@TMPa}% + \expandafter\let\csname pgfplots@#1tick\endcsname=\pgfplotsretval + % + \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + \expandafter\pgfplots@assign@default@tick@foraxis@smithchart@\expandafter{\pgfplots@loc@TMPa}% + \pgfkeyslet{/pgfplots/minor #1tick}\pgfplotsretval + \fi + % +}% +% #1: a \foreach list +% on output, \pgfplotsretval contains a parsed list of positions +\def\pgfplots@assign@default@tick@foraxis@smithchart@#1{% + \pgfplotsapplistXXglobalnewempty + \gdef\pgfplots@loc@TMPd{1}% + \foreach \pgfplots@loc@TMPb in {#1} {% + \ifx\pgfplots@loc@TMPb\pgfutil@empty + \else + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@loc@TMPb}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% per convention... + \edef\pgfmathresult{\if0\pgfplots@loc@TMPd,\fi\pgfmathresult}% + \gdef\pgfplots@loc@TMPd{0}% + \expandafter\pgfplotsapplistXXglobalpushback\expandafter{\pgfmathresult}% + \fi + }% + \pgfplotsapplistXXgloballet\pgfplotsretval + \pgfplotsapplistXXglobalclear +}% + +\let\pgfplots@show@ticklabel@@orig=\pgfplots@show@ticklabel@ +\def\pgfplots@show@ticklabel@@smithchart#1#2{% + \def\pgfmathresult{#2}% + \if#1x% + \ifdim#2pt>360pt + \pgfmath@basic@mod@{#2}{360}% + \fi + \fi + \def\pgfplots@loc@TMPa{\pgfplots@show@ticklabel@@orig{#1}}% + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}% +}% + +\def\pgfplots@xtick@check@tickshow@smithchart{% + \pgfplots@tickshowtrue +} +\def\pgfplots@ytick@check@tickshow@smithchart{% + \pgfplots@tickshowtrue +} + +\let\pgfplots@limits@ready@orig=\pgfplots@limits@ready +\def\pgfplots@limits@ready@smithchart{% + \pgfplots@limits@ready@orig + % + % Avoid tick labels at upper *and* lower angle range if both are the + % same: + \pgfmath@basic@sin@{\pgfplots@xmin}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfmath@basic@sin@{\pgfplots@xmax}% + \pgfplotsmath@ifapproxequal@dim + {\pgfmathresult pt}{\pgfplots@loc@TMPa pt}% + {0.002pt} + {% + \def\pgfplots@xtick@disable@last@tick{1}% + }{% + }% +}% + +\def\smithchart{\smithchartaxis} +\def\endsmithchart{\endsmithchartaxis} + +\def\startsmithchart{\smithchart}% +\def\stopsmithchart{\endsmithchart}% +\endinput 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 new file mode 100644 index 00000000000..dfb520af190 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/libs/tikzlibrarypgfplots.ternary.code.tex @@ -0,0 +1,904 @@ +%-------------------------------------------- +% +% Package pgfplots, library for ternary plots (triangular axes). +% +% Copyright 2010 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/>. +% +% +% This is a library to draw ternary diagrams. +% +% A ternary diagram visualizes percentages of three components in a +% triangle. +% +% Sometimes there is also contour data drawn on top of the ternary +% diagram, i.e. data (x,y,z, T(x,y,z) ), but I can't do that yet. +% +% How to read a ternary diagram: http://csmres.jmu.edu/geollab/fichter/SedRx/readternary.html +% +% Another usage example: http://www.sv.vt.edu/classes/MSE2094_NoteBook/96ClassProj/experimental/ternary2.html +% +% Drawing ternary diagrams: http://staff.aist.go.jp/a.noda/programs/ternary/ternary-en.html +% +% computing these coordinates: http://www.gamedev.net/community/forums/topic.asp?topic_id=451357 +% + +\pgfplotsdefineaxistype{ternary}{% + \pgfplots@ternary@activate +}% + +\newif\ifpgfplots@ternary@rellimits + + +\pgfplotsset{ + /pgfplots/ternary limits relative/.is if=pgfplots@ternary@rellimits, + /pgfplots/ternary limits relative=true, + /pgfplots/ternary limits relative/.default=true, + /pgfplots/ternary relative limits/.style={/pgfplots/ternary limits relative=#1}, + /pgfplots/ternary start x/.initial=, % FIXME : implement + /pgfplots/ternary start y/.initial=, + /pgfplots/ternary start z/.initial=, + /pgfplots/every ternary axis/.style={ + /pgfplots/tick align=outside, + grid=major, + xticklabel style={anchor=west}, + % yticklabel style={anchor=south east}, + % zticklabel style={anchor=north}, + /pgfplots/every 3d description/.style={}, + /pgfplots/every axis x label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},% + /pgfplots/every axis y label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},% + /pgfplots/every axis z label/.style={at={(ticklabel cs:0.5)},anchor=near ticklabel},% + /pgfplots/every x tick scale label/.style={at={(xticklabel cs:0.95,5pt)},anchor=near xticklabel,inner sep=0pt}, + /pgfplots/every y tick scale label/.style={at={(yticklabel cs:0.95,5pt)},anchor=near yticklabel,inner sep=0pt}, + /pgfplots/every z tick scale label/.style={at={(yticklabel cs:0.95,5pt)},anchor=near yticklabel,inner sep=0pt}, + /pgfplots/every axis title shift=15pt, + /pgfplots/every axis legend/.style={% + cells={anchor=center}, + inner xsep=3pt,inner ysep=2pt,nodes={inner sep=2pt,text depth=0.15em}, + shape=rectangle,% + fill=white,% + draw=black, + at={(1.03,1.03)}, + anchor=north west,% + }, + annot/point format 3d/.initial={(\%.2f, \%.2f, \%.2f)}, + }, +} + +\def\pgfplots@ternary@activate{% + \let\pgfplotsqpointxy=\pgfplotsqpointxy@ternary + \let\pgfplotsqpointxy@orthogonal=\pgfplotsqpointxy + \let\pgfplotsqpointxyz=\pgfplotsqpointxyz@ternary + \let\pgfplots@draw@axis=\pgfplots@draw@axis@ternary + \def\pgfplots@drawaxis@outerlines@separate@onorientedsurf##1##2{}% + \def\pgfplots@drawaxis@innerlines@onorientedsurf##1##2##3{}% + \let\pgfplots@draw@axis@post=\pgfplots@draw@axis@post@ternary + \let\pgfplots@initsizes=\pgfplots@initsizes@ternary + \let\pgfplotspoint@initialisation@axes=\pgfplotspoint@initialisation@axes@ternary + \let\pgfplotspoint@initialisation@units=\pgfplotspoint@initialisation@units@ternary + \let\pgfplots@initsizes@setunitvector=\pgfplots@initsizes@setunitvector@ternary + \let\pgfplotspointouternormalvectorofaxis@=\pgfplotspointouternormalvectorofaxis@ternary + \let\pgfplots@prepare@ZERO@coordinates=\pgfplots@prepare@ZERO@coordinates@ternary + \let\pgfplotsgetnormalforcurrentview=\relax + \def\pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf##1{}% + \let\pgfplots@clippath@prepare@for@axistype=\pgfplots@clippath@prepare@for@axistype@ternary + % + \pgfkeys{/pgfplots/oriented surf installed/.add={}{% + \let\pgfplotspointonorientedsurfaceab@ternary@orig=\pgfplotspointonorientedsurfaceab + \let\pgfplotspointonorientedsurfaceab=\pgfplotspointonorientedsurfaceab@ternary + }}% + \let\pgfplotspointonorientedsurfaceabwithbshift=\pgfplotspointonorientedsurfaceabwithbshift@ternary + \pgfkeyssetvalue{/pgfplots/view/az}{}% + \pgfkeyssetvalue{/pgfplots/view/el}{}% + \let\pgfplots@set@options@sanitize=\relax + \let\pgfplots@set@options@sanitizemode=\relax + % + \expandafter\def\expandafter\pgfplots@notify@options@are@set\expandafter{\pgfplots@notify@options@are@set + \ifpgfplots@ternary@rellimits + \pgfplotsset{scaled ticks=false,ticklabel style={/pgf/number format/precision=0}}% + \let\pgfplots@show@ticklabel@orig=\pgfplots@show@ticklabel@ + \let\pgfplots@show@ticklabel@=\pgfplots@show@ticklabel@ternary@relative + \fi + }% + % + % this here is set *before* 'every ternary axis' is invoked. + \pgfplotsset{ + /pgfplots/footnotesize/.append style= {/pgfplots/every axis title shift=15pt},% + /pgfplots/tiny/.append style= {/pgfplots/every axis title shift=15pt},% + enlargelimits=false, + xmin=0,xmax=1, + ymin=0,ymax=1, + zmin=0,zmax=1, + annot/point format/.style={/pgfplots/annot/point format 3d={##1}}, + }% + \def\pgfplots@xticklabel@pos{}% + \def\pgfplots@yticklabel@pos{}% + \def\pgfplots@zticklabel@pos{}% + %\def\pgfplots@xaxislinesnum{1}% + %\def\pgfplots@yaxislinesnum{3}% + %\def\pgfplots@zaxislinesnum{3}% + \def\pgfplotsifaxissurfaceisforeground##1##2##3{##2}% + \def\pgfplots@init@ticklabelaxisspecfor##1##2{}% + \def\pgfplots@xticklabelaxisspec{v00}% + \def\pgfplots@yticklabelaxisspec{0v0}% + \def\pgfplots@zticklabelaxisspec{00v}% + \def\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@##1##2##3{% + \pgfplotspointonorientedsurfaceabtolinespec v##1% + \edef\pgfplots@loc@TMPe{\csname pgfplots@\pgfplotspointonorientedsurfaceA ticklabelaxisspec\endcsname}% + \ifx\pgfplots@loc@TMPe\pgfplotsretval +%\message{pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@{##1}---> TRUE.}% + ##2% + \else +%\message{pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@{##1}---> FALSE.}% + ##3% + \fi + }% + \def\pgfplots@ifgridlines@onorientedsurf@should@be@drawn##1##2{% + ##1% FIXME + }% + \def\pgfplotspointonorientedsurfaceabmatchaxisline##1##2{% + \pgfplotspointonorientedsurfaceabtolinespec v0% FIXME that's just a bad guess! + \edef\pgfplots@loc@TMPe{##1}% + \ifx\pgfplots@loc@TMPe\pgfplotsretval + \def##2{0}% + \else + \def##2{}% + \fi + }% + \let\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn=\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@% + % + % + % cartesian cs + \tikzdeclarecoordinatesystem{cartesian}{\edef\pgfplots@loc@TMPa{##1}\expandafter\pgfplotspointcartesian@\pgfplots@loc@TMPa\pgfplots@coord@end} +}% + +\def\pgfplots@show@ticklabel@ternary@relative#1#2{% + \csname pgfplots@ternary@map@to@unit@#1\endcsname{#2}% + \pgfmathfloatparsenumber\pgfmathresult + \pgfmathfloatshift@\pgfmathresult{2}% + \let\tick=\pgfmathresult +}% + +\def\pgfplotspointcartesian@#1,#2\pgfplots@coord@end{% + \pgfpointxy@orig{#1}{#2}% +}% + +% This here is *the* key point why ternary axes can be processed with +% almost the same code as rectangular axes. +% +% Recall that rectangular axes are drawn using "oriented surfaces", +% the complete code is based on them. The "a" axis is the direction in +% which we have tick positions and the "b" axis is the direction in +% which tick lines (or grid lines) shall be drawn). +% +% Now, ternary axes do not directly fit into the "oriented surface" +% framework. But they have a lot of structure which allows to use it +% with a specialed "pointonorientedsurfaceab" routine: by noting that +% - there are only three axes, +% - the axis containing tick lines (and grid lines) *always* has one +% component set to 0 (lower limit), and the remaining two components +% sum to 1. Thus, we can simply use one value (for example the "a" +% value) and compute the remaining one, +% - \pgfplotspointonorientedsurfaceab is *always* invoked with +% b set to either the lower or the upper limit. +% The lower limit is easy, see above. The upper limit is mainly used +% for grid lines, more precisely it denotes the target point of the grid line. +% I use special handling to find this target point (by exchanging +% coordinate components, see the implementation). +% +% #1: the "a" value on the oriented surf +% #2: the "b" value. Note that *only* the lower *or* the upper limit +% on the "b" axis are supported here! +% +\def\pgfplotspointonorientedsurfaceab@ternary#1#2{% + \let\pgfplotspointonorientedsurfaceab@ternary@fixedx=\pgfplotspointonorientedsurfaceabsetupfor@fixedx + \let\pgfplotspointonorientedsurfaceab@ternary@fixedy=\pgfplotspointonorientedsurfaceabsetupfor@fixedy + \let\pgfplotspointonorientedsurfaceab@ternary@fixedz=\pgfplotspointonorientedsurfaceabsetupfor@fixedz + % +%\message{\string\pgfplotspointonorientedsurfaceab{#1}{#2} -----> }% + \ifpgfplots@ternary@next@is@unitinterval + \edef\pgfplotspointonorientedsurfaceab@ternary@A{#1}% + \edef\pgfplotspointonorientedsurfaceab@ternary@B{#2}% + \else + \csname pgfplots@ternary@map@to@unit@\pgfplotspointonorientedsurfaceA\endcsname{#1}% + \let\pgfplotspointonorientedsurfaceab@ternary@A=\pgfmathresult + % + \csname pgfplots@ternary@map@to@unit@\pgfplotspointonorientedsurfaceB\endcsname{#2}% + \let\pgfplotspointonorientedsurfaceab@ternary@B=\pgfmathresult + \fi + \if0\pgfplotspointonorientedsurfacespecsymbol + \else + \pgfplots@error{Internal processing error: only \string\pgfplotspointonorientedsurfaceab\space for ternary axes works only for oriented surfs fixed to LOWER or UPPER axis limits.}% + \fi +%\message{A=\pgfplotspointonorientedsurfaceab@ternary@A; B=\pgfplotspointonorientedsurfaceab@ternary@B -----> }% + \ifdim\pgfplotspointonorientedsurfaceab@ternary@B pt=0pt + \pgfmath@basic@subtract@{1}{\pgfplotspointonorientedsurfaceab@ternary@A}% + \let\pgfplotspointonorientedsurfaceab@ternary@B=\pgfmathresult + \expandafter\def\csname pgfplotspointonorientedsurfaceabsetupfor@fixed\pgfplotspointonorientedsurfaceN\endcsname{0}% + \else + %\let\pgfplots@loc@TMPa=\pgfplotspointonorientedsurfaceab@ternary@A + %\pgfmath@basic@subtract@{1}{\pgfplotspointonorientedsurfaceab@ternary@A}% + %\let\pgfplotspointonorientedsurfaceab@ternary@A=\pgfmathresult + %\let\pgfplotspointonorientedsurfaceab@ternary@B=\pgfplots@loc@TMPa + \pgfmath@basic@subtract@{1}{\pgfplotspointonorientedsurfaceab@ternary@A}% + \def\pgfplotspointonorientedsurfaceab@ternary@B{0}% + \expandafter\let\csname pgfplotspointonorientedsurfaceabsetupfor@fixed\pgfplotspointonorientedsurfaceN\endcsname=\pgfmathresult% + \fi + % + \global\pgfplots@ternary@next@is@unitintervaltrue +%\message{\string\pgfplotspointonorientedsurfaceab@orig{\pgfplotspointonorientedsurfaceab@ternary@A}{\pgfplotspointonorientedsurfaceab@ternary@B}[fixedsymbol=\pgfplotspointonorientedsurfacespecsymbol; a=\pgfplotspointonorientedsurfaceA,b=\pgfplotspointonorientedsurfaceB.]}% + \pgfplotspointonorientedsurfaceab@ternary@orig + {\pgfplotspointonorientedsurfaceab@ternary@A}% + {\pgfplotspointonorientedsurfaceab@ternary@B}% + % + \let\pgfplotspointonorientedsurfaceabsetupfor@fixedx=\pgfplotspointonorientedsurfaceab@ternary@fixedx + \let\pgfplotspointonorientedsurfaceabsetupfor@fixedy=\pgfplotspointonorientedsurfaceab@ternary@fixedy + \let\pgfplotspointonorientedsurfaceabsetupfor@fixedz=\pgfplotspointonorientedsurfaceab@ternary@fixedz +}% + +\def\pgfplotspointonorientedsurfaceabwithbshift@ternary#1#2#3{% + % implement the shift in "b" direction explicitly: + % + \pgfplotspointonorientedsurfaceab@ternary{#1}{#2}% + \edef\pgfplots@loc@TMPe{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% + \pgfpointadd + {\pgfplots@loc@TMPe}% + {% + \begingroup + % I need a '-' here because for ternary axes, the "b" axis + % points to the *outside* instead of the inside. + \pgf@xa=-#3\relax + \if r\pgfkeysvalueof{/pgfplots/\pgfplotspointonorientedsurfaceB\space dir/value}% + % oh. a reversed axis. + \pgf@xa=-\pgf@xa + \fi + \edef\pgfplots@loc@TMPa{\pgf@sys@tonumber\pgf@xa}% + \pgfmath@basic@multiply@{\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname}{\pgfplots@loc@TMPa}% + \pgfmath@smuggleone\pgfmathresult + \endgroup + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfqpointscale{\pgfplots@loc@TMPa}{\csname pgfplotspointunit\pgfplotspointonorientedsurfaceB\endcsname}% + }% +} + + +\let\pgfplots@initsizes@ternary@orig=\pgfplots@initsizes +\def\pgfplots@initsizes@ternary{% + \ifpgfplots@threedim + \else + \pgfplots@error{Sorry, 'axis type=ternary' needs a three dimensional axes. Make sure you supplied three dimensional coordinates (using \string\addplot3, for example). This error is critical; I can't recover}% + \fi +%\message{ternary with limits x=[\pgfplots@xmin:\pgfplots@xmax], y=[\pgfplots@ymin:\pgfplots@ymax]; z=[\pgfplots@zmin:\pgfplots@zmax].}% + \pgfplots@ternary@init@map@to@unit x + \pgfplots@ternary@init@map@to@unit y + \pgfplots@ternary@init@map@to@unit z + % + \pgfplots@initsizes@get@width@withoutlabels + \pgf@x=\pgfmathresult + \edef\pgfplots@width@ternary{\pgf@sys@tonumber\pgf@x}% + % + \pgfplots@initsizes@ternary@orig + % +}% + +\def\pgfplots@ternary@init@map@to@unit#1{% + \begingroup + \pgfmath@basic@subtract@ + {\csname pgfplots@#1max\endcsname} + {\csname pgfplots@#1min\endcsname}% + \pgfmath@basic@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}% + }% + \endgroup +} + +\def\pgfplots@initsizes@setunitvector@ternary#1#2#3#4{% + % ternary axis are DIFFERENT here. + % They don't use the (xx,xy), (yx,yy), (zx,zy) vectors, so we can + % use them to realize *cartesian* coordinates. + % + % Thus, any \draw (0,0) inside of a ternary axis will yield + % cartesian coordinates. + % + % The relevant quantities to *draw* the diagram are the three + % axis, they are also prepared here. + % + \def#4{0}% whether we have (#1,0) or (0,#1) + \ifcase#2% + \pgfsetxvec{% + \pgfqpoint{\pgfplots@width@ternary pt}{0pt}% + }% + \pgfpointdiff + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary001} + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary100}% + \or + \pgfsetyvec{% + \pgfqpoint{0pt}{\pgfplots@width@ternary pt}% + }% + \pgfpointdiff + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary100} + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary010}% + \or + \pgfsetzvec{% + \pgfpointorigin + }% + \pgfpointdiff + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary010} + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary001}% + \fi + \expandafter\xdef\csname pgfplotspoint#1axis\endcsname{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \pgfmathveclen{\pgf@x}{\pgf@y}% + \expandafter\let\csname pgfplots@#1@veclength\endcsname=\pgfmathresult + \pgfplotsmath@ifzero{\pgfmathresult}{% + \expandafter\def\csname pgfplots@#1@inverseveclength\endcsname{infty}% + }{% + \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}% + \expandafter\let\csname pgfplots@#1@inverseveclength\endcsname=\pgfmathresult + }% + \expandafter\xdef\csname pgfplotspoint#1axislength\endcsname{\pgfplots@x@veclength pt}% + % +%\message{-> got unitvector(#1) = (\the\csname pgf@#1x\endcsname, \the\csname pgf@#1y\endcsname).}% +}% + +\newif\ifpgfplots@ternary@next@is@unitinterval + +% Deduce z = 1-x-y after transformation to relative coordinates. +\def\pgfplotsqpointxy@ternary#1#2{% + \pgf@process{% + \ifpgfplots@ternary@next@is@unitinterval + \dimen1=#1pt + \dimen2=#2pt + \else + \pgfplots@ternary@map@to@unit@x{#1}% + \dimen1=\pgfmathresult pt + % + \pgfplots@ternary@map@to@unit@y{#2}% + \dimen2=\pgfmathresult pt + \fi + \dimen4=\dimen1 + \advance\dimen4 by\dimen2 + \dimen3=1pt + \advance\dimen3 by-\dimen4 + % + \global\pgfplots@ternary@next@is@unitintervalfalse + \pgfplotsqpointxyz@ternary@ + }% +}% +% gx(x,y,z) = 0.5 * (x + 2*z)/(x+y+z) +% gy(x,y,z) = (sqrt(3) / 2) * x / (x+y+z) +\def\pgfplotsqpointxyz@ternary#1#2#3{% + \pgf@process{% + \ifpgfplots@ternary@next@is@unitinterval + \dimen1=#1pt + \dimen2=#2pt + \dimen3=#3pt + \else + \pgfplots@ternary@map@to@unit@x{#1}% + \dimen1=\pgfmathresult pt + % + \pgfplots@ternary@map@to@unit@y{#2}% + \dimen2=\pgfmathresult pt + % + \pgfplots@ternary@map@to@unit@z{#3}% + \dimen3=\pgfmathresult pt + \fi + \global\pgfplots@ternary@next@is@unitintervalfalse + % + \pgfplotsqpointxyz@ternary@ + }% +}% +\def\pgfplotsqpointxyz@ternary@{% + %\dimen1=#1 + %\dimen2=#2 + %\dimen3=#3 + % FIXME . I didn't understand that stuff. + \if r\pgfkeysvalueof{/pgfplots/x dir/value}% reversed + %\multiply\dimen1 by-1 + %\advance\dimen1 by1pt + %\dimen1=#2 + %\dimen2=#3 + %\dimen3=#1 + \fi + %-------------------------------------------------- + % \if r\pgfkeysvalueof{/pgfplots/y dir/value}% reversed + % \multiply\dimen2 by-1 + % \advance\dimen2 by1pt + % \fi + % \if r\pgfkeysvalueof{/pgfplots/z dir/value}% reversed + % \multiply\dimen3 by-1 + % \advance\dimen3 by1pt + % \fi + %-------------------------------------------------- + \pgfplotsqpointxyz@ternary@@% +}% +\def\pgfplotsqpointxyz@ternary@@{% + % Disable renormalization!? + %\dimen4=\dimen1 + %\advance\dimen4 by\dimen2 + %\advance\dimen4 by\dimen3 + %\edef\pgfplots@ternary@sum{\pgf@sys@tonumber{\dimen4}}% + %\pgfmathapproxequalto@{1}{\pgfplots@ternary@sum}% + \pgfmathcomparisontrue + \ifpgfmathcomparison + \let\pgfplots@ternary@scale=\pgfplots@width@ternary + \else + \pgfmath@basic@divide@ + {\pgfplots@width@ternary}% + {\pgfplots@ternary@sum}% + \let\pgfplots@ternary@scale=\pgfmathresult + \fi + % + \dimen4=2\dimen3 + \advance\dimen4 by \dimen1 + \divide\dimen4 by2 + \pgf@x=\pgfplots@ternary@scale\dimen4 + % + \dimen4=\dimen1 + \dimen4=0.866025403784\dimen4 % *= sqrt(3)/2 + \pgf@y=\pgfplots@ternary@scale\dimen4 + % +}% +\def\pgfplotspoint@initialisation@units@ternary{% + \let\pgfplotspointunitx\pgfplotspointxaxis + \let\pgfplotspointunity\pgfplotspointyaxis + \let\pgfplotsunitxlength=\pgfplots@x@veclength + \let\pgfplotsunitylength=\pgfplots@y@veclength + \let\pgfplotsunitxinvlength=\pgfplots@x@inverseveclength + \let\pgfplotsunityinvlength=\pgfplots@y@inverseveclength + \ifpgfplots@threedim + \let\pgfplotspointunitz=\pgfplotspointzaxis + \let\pgfplotsunitzlength=\pgfplots@z@veclength + \let\pgfplotsunitzinvlength=\pgfplots@z@inverseveclength + \fi +}% + +% POSTCONDITION: the macros +% \pgfplotspointminminmin +% \pgfplotspoint[xyz]axis +% \pgfplotspoint[xyz]axislength +% are defined (globally). +\def\pgfplotspoint@initialisation@axes@ternary{% + \xdef\pgfplotspointminminmin{\noexpand\pgfpointorigin}% + % + \pgfpointdiff + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary001} + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary100}% + \if r\pgfkeysvalueof{/pgfplots/x dir/value}% reverse + \pgfqpointscale{-1}{}% + \fi + \xdef\pgfplotspointxaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \pgfmathveclen{\pgf@x}{\pgf@y}% + \expandafter\let\csname pgfplots@x@veclength\endcsname=\pgfmathresult + \pgfplotsmath@ifzero{\pgfmathresult}{% + \expandafter\def\csname pgfplots@x@inverseveclength\endcsname{infty}% + }{% + \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}% + \expandafter\let\csname pgfplots@x@inverseveclength\endcsname=\pgfmathresult + }% + \xdef\pgfplotspointxaxislength{\pgfplots@x@veclength pt}% + % + \pgfpointdiff + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary100} + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary010}% + \if r\pgfkeysvalueof{/pgfplots/y dir/value}% reverse + \pgfqpointscale{-1}{}% + \fi + \xdef\pgfplotspointyaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \pgfmathveclen{\pgf@x}{\pgf@y}% + \expandafter\let\csname pgfplots@y@veclength\endcsname=\pgfmathresult + \pgfplotsmath@ifzero{\pgfmathresult}{% + \expandafter\def\csname pgfplots@y@inverseveclength\endcsname{infty}% + }{% + \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}% + \expandafter\let\csname pgfplots@y@inverseveclength\endcsname=\pgfmathresult + }% + \xdef\pgfplotspointyaxislength{\pgfplots@y@veclength pt}% + % + \pgfpointdiff + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary010} + {\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz@ternary001}% + \if r\pgfkeysvalueof{/pgfplots/z dir/value}% reverse + \pgfqpointscale{-1}{}% + \fi + \xdef\pgfplotspointzaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \pgfmathveclen{\pgf@x}{\pgf@y}% + \expandafter\let\csname pgfplots@z@veclength\endcsname=\pgfmathresult + \pgfplotsmath@ifzero{\pgfmathresult}{% + \expandafter\def\csname pgfplots@z@inverseveclength\endcsname{infty}% + }{% + \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}% + \expandafter\let\csname pgfplots@z@inverseveclength\endcsname=\pgfmathresult + }% + \xdef\pgfplotspointzaxislength{\pgfplots@z@veclength pt}% + % +} +\def\pgfplots@prepare@ZERO@coordinates@ternary{% + \ifpgfplots@xislinear + \ifpgfplots@apply@datatrafo@x + \pgfplotscoordmath{x}{parsenumber}{0}% + \pgfplotscoordmath{x}{datascaletrafo}{\pgfmathresult}% + \global\let\pgfplots@logical@ZERO@x=\pgfmathresult + \else + \gdef\pgfplots@logical@ZERO@x{0}% + \fi + \pgfplotsmathmax{\pgfplots@logical@ZERO@x}{\pgfplots@xmin}% + \global\let\pgfplots@logical@ZERO@x=\pgfmathresult + \pgfplotsmathmin{\pgfplots@logical@ZERO@x}{\pgfplots@xmax}% + \global\let\pgfplots@logical@ZERO@x=\pgfmathresult + \else + \global\let\pgfplots@logical@ZERO@x=\pgfplots@xmin% + \fi + % + \ifpgfplots@yislinear + \ifpgfplots@apply@datatrafo@y + \pgfplotscoordmath{y}{parsenumber}{0}% + \pgfplotscoordmath{y}{datascaletrafo}{\pgfmathresult}% + \global\let\pgfplots@logical@ZERO@y=\pgfmathresult + \else + \gdef\pgfplots@logical@ZERO@y{0}% + \fi + \pgfplotsmathmax{\pgfplots@logical@ZERO@y}{\pgfplots@ymin}% + \global\let\pgfplots@logical@ZERO@y=\pgfmathresult + \pgfplotsmathmin{\pgfplots@logical@ZERO@y}{\pgfplots@ymax}% + \global\let\pgfplots@logical@ZERO@y=\pgfmathresult + \else + \global\let\pgfplots@logical@ZERO@y=\pgfplots@ymin% + \fi + % + \ifpgfplots@threedim + \ifpgfplots@zislinear + \ifpgfplots@apply@datatrafo@z + \pgfplotscoordmath{z}{parsenumber}{0}% + \pgfplotscoordmath{z}{datascaletrafo}{\pgfmathresult}% + \global\let\pgfplots@logical@ZERO@z=\pgfmathresult + \else + \gdef\pgfplots@logical@ZERO@z{0}% + \fi + \pgfplotsmathmax{\pgfplots@logical@ZERO@z}{\pgfplots@zmin}% + \global\let\pgfplots@logical@ZERO@z=\pgfmathresult + \pgfplotsmathmin{\pgfplots@logical@ZERO@z}{\pgfplots@zmax}% + \global\let\pgfplots@logical@ZERO@z=\pgfmathresult + \else + \global\let\pgfplots@logical@ZERO@z=\pgfplots@zmin% + \fi + \fi + % + % + \global\pgfplots@ternary@next@is@unitintervaltrue + \pgfplotsqpointxyz100% + \xdef\pgfplots@ZERO@x{\the\pgf@x}% + \xdef\pgfplots@ZERO@y{\the\pgf@y}% + \xdef\pgfplotspointaxisorigin{\noexpand\pgf@x=\pgfplots@ZERO@x\space\noexpand\pgf@y=\pgfplots@ZERO@y\space}% +}% + + +\def\pgfplots@draw@axis@ternary{% + % + % this should become the line for varying y: + \pgfplotspointonorientedsurfaceabsetupforsetz{\pgfplots@zmin}{0}% + \pgfplots@draw@axis@insurface yxz + % + % this should become the line for varying z: + \pgfplotspointonorientedsurfaceabsetupforsetx{\pgfplots@xmin}{0}% + \pgfplots@draw@axis@insurface zyx + % + % + % this should become the line for varying x: + \pgfplotspointonorientedsurfaceabsetupforsety{\pgfplots@ymin}{0}% + \pgfplots@draw@axis@insurface xzy + % + \pgfplots@ternary@draw@axislines +}% +\def\pgfplots@ternary@draw@axislines{% + \if r\pgfkeysvalueof{/pgfplots/x dir/value}% reverse + \pgfplots@separate@axis@linestrue + \fi + \if r\pgfkeysvalueof{/pgfplots/y dir/value}% reverse + \pgfplots@separate@axis@linestrue + \fi + \if r\pgfkeysvalueof{/pgfplots/z dir/value}% reverse + \pgfplots@separate@axis@linestrue + \fi + \ifpgfplots@separate@axis@lines + \scope[/pgfplots/every outer x axis line, + xdiscont,decoration={pre length=\csname xdisstart\endcsname, post length=\csname xdisend\endcsname}] + \draw decorate { + \pgfextra + \if r\pgfkeysvalueof{/pgfplots/x dir/value}% reverse + \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}% + \else + \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}% + \fi + \endpgfextra + }; + \endscope + % + \scope[/pgfplots/every outer y axis line, + ydiscont,decoration={pre length=\csname ydisstart\endcsname, post length=\csname ydisend\endcsname}] + \draw decorate { + \pgfextra + \if r\pgfkeysvalueof{/pgfplots/y dir/value}% reverse + \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}% + \else + \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}% + \fi + \endpgfextra + }; + \endscope + % + \scope[/pgfplots/every outer z axis line, + zdiscont,decoration={pre length=\csname zdisstart\endcsname, post length=\csname zdisend\endcsname}] + \draw decorate { + \pgfextra + \if r\pgfkeysvalueof{/pgfplots/z dir/value}% reverse + \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}% + \else + \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}% + \fi + \endpgfextra + }; + \endscope + \else + \draw[ + /pgfplots/every outer x axis line, % FIXME! these outer styles need much more attention :-( + /pgfplots/every outer y axis line] + \pgfextra{% + \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}% + \pgfpathclose + }; + \fi +}% +\def\pgfplots@clippath@prepare@for@axistype@ternary{% + \def\pgfplots@clippath@install##1{% + \pgfpathmoveto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz001}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz100}% + \pgfpathlineto{\global\pgfplots@ternary@next@is@unitintervaltrue\pgfplotsqpointxyz010}% + \pgfpathclose + \pgfplots@clippath@use@{##1}% + }% +}% + +\def\pgfplots@draw@axis@post@ternary{% + % do nothing. There is no 3d box to draw here. +}% + +\def\pgfplotspointouternormalvectorofaxis@ternary#1#2#3\relax{% + \edef\pgfplots@loc@TMPa{\if r\pgfkeysvalueof{/pgfplots/x dir/value}-\fi}% reverse + \edef\pgfplots@loc@TMPb{\if r\pgfkeysvalueof{/pgfplots/y dir/value}-\fi}% reverse + \edef\pgfplots@loc@TMPc{\if r\pgfkeysvalueof{/pgfplots/z dir/value}-\fi}% reverse + \if v#1% + \pgfpointadd + {\pgfqpointscale{\pgfplots@loc@TMPb-1}{\pgfplotspointyaxis}}% + {\pgfqpointscale{\pgfplots@loc@TMPc}{\pgfplotspointzaxis}}% + \else + \if v#2% + \pgfpointadd + {\pgfqpointscale{\pgfplots@loc@TMPa}{\pgfplotspointxaxis}}% + {\pgfqpointscale{\pgfplots@loc@TMPc-1}{\pgfplotspointzaxis}}% + \else + \pgfpointadd + {\pgfqpointscale{\pgfplots@loc@TMPa-1}{\pgfplotspointxaxis}}% + {\pgfqpointscale{\pgfplots@loc@TMPb}{\pgfplotspointyaxis}}% + \fi + \fi + \pgf@process{\pgfpointnormalised{}}% + \endgroup +}% + + +\def\pgfplotsclickable@check@enable@axistype@ternaryaxis{% + \def\pgfplotsretval{1}% +}% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 +% tieline plots +% +\pgfplotsset{ + tieline/.code={% + \let\tikz@plot@handler=\pgfplotsplothandlertieline + \pgfkeysifdefined{/pgfplots/table/tie end x}{}{% + % provide these keys locally: + \pgfkeyslet{/pgfplots/table/tie end x}\pgfutil@empty% + \pgfkeyslet{/pgfplots/table/tie end y}\pgfutil@empty% + \pgfkeyslet{/pgfplots/table/tie end z}\pgfutil@empty% + \pgfkeyslet{/pgfplots/table/tie end x index}\pgfutil@empty% + \pgfkeyslet{/pgfplots/table/tie end y index}\pgfutil@empty% + \pgfkeyslet{/pgfplots/table/tie end z index}\pgfutil@empty% + }% + \pgfqkeys{/pgfplots/tieline}{#1}% + }, + tieline/every tieline/.style={}, + tieline/tieline style/.style={/pgfplots/tieline/every tieline/.append style={#1}}, + tieline/every curve/.style={}, + tieline/curve style/.style={/pgfplots/tieline/every curve/.append style={#1}}, + tieline/each nth tie/.initial=, +} +\def\pgfplotsplothandlertieline{% + \pgfplotsresetplothandler + \let\pgf@plotstreamstart=\pgfplotsplothandlervisbegin@tieline + \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@tieline + \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@tieline + \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@tieline +}% +\def\pgfplotsplothandlervisbegin@tieline{% + \pgfplotsapplistXnewempty\pgfp@binodal@A + \pgfplotsapplistXnewempty\pgfp@ties + \pgfplotsprependlistXnewempty{pgfp@binodal@B@reverse} + \def\b@pgfplotsplothandlersurveystart@tieline@even{1}% + % + \global\let\pgf@plotstreampoint=\pgfplotsplothandlervis@streampoint@tieline + \global\let\pgf@plotstreamend=\pgfplotsplothandlervis@streamend@tieline + % + \pgfkeysgetvalue{/pgfplots/tieline/each nth tie}\pgfplots@eachnth@tie + \ifx\pgfplots@eachnth@tie\pgfutil@empty + \def\pgfplots@eachnth@tie{1}% + \fi + \let\c@pgfplots@tiecounter=\c@pgfplotstable@counta + \c@pgfplots@tiecounter=0 +}% +\def\pgfplotsplothandlervis@streampoint@tieline#1{% + \pgf@process{#1}% + \edef\pgfplots@loc@TMPa{% + \noexpand\pgfplots@stream@withmeta@ + {\pgfplots@current@point@coordindex}% + {\the\pgf@x}{\the\pgf@y}% + {\pgfplots@current@point@meta}% + }% + \if1\b@pgfplotsplothandlersurveystart@tieline@even + \let\pgfplotsplothandlervis@streampoint@tieline@last=\pgfplots@loc@TMPa + \expandafter\pgfplotsapplistXpushback\pgfplots@loc@TMPa\to\pgfp@binodal@A + \def\b@pgfplotsplothandlersurveystart@tieline@even{0}% + \else + \expandafter\pgfplotsprependlistXpushfront\pgfplots@loc@TMPa\to{pgfp@binodal@B@reverse}% + % + \advance\c@pgfplots@tiecounter by1 + \ifnum\pgfplots@eachnth@tie=\c@pgfplots@tiecounter + \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa}% + \t@pgfplots@tokb=\expandafter{\pgfplotsplothandlervis@streampoint@tieline@last}% + \edef\pgfplots@loc@TMPa{\the\t@pgfplots@toka\the\t@pgfplots@tokb\noexpand\pgfplotsplothandlertieline@finishtie}% + \expandafter\pgfplotsapplistXpushback\pgfplots@loc@TMPa\to\pgfp@ties + \c@pgfplots@tiecounter=0 + \fi + % + \def\b@pgfplotsplothandlersurveystart@tieline@even{1}% + \fi +}% +\def\pgfplotsplothandlervis@streamend@tieline{% + \begingroup + \pgfplots@drawmodes@appendtrue + \path[/pgfplots/tieline/every curve]% + \pgfextra + \ifx\tikz@plot@handler\pgfplotsplothandlertieline + \let\tikz@plot@handler\pgfplothandlerlineto + \fi + \pgfplotsresetplothandler + \tikz@plot@handler + \pgf@plotstreamstart + % + \pgfplotsapplistXlet\pgfplots@loc@TMPa=\pgfp@binodal@A + \pgfplots@loc@TMPa + \pgfplotsapplistXnewempty\pgfp@binodal@A + \pgfplotsprependlistXlet\pgfplots@loc@TMPa={pgfp@binodal@B@reverse}% + \pgfplots@loc@TMPa + \pgfplotsprependlistXnewempty{pgfp@binodal@B@reverse}% + % + \pgf@plotstreamend + \endpgfextra; + \endgroup + % + % + \pgfplotsset{/pgfplots/tieline/every tieline}% + \ifx\tikz@plot@handler\pgfplotsplothandlertieline + \let\tikz@plot@handler\pgfplothandlerlineto + \fi + \pgfplotsresetplothandler + \tikz@plot@handler + \pgf@plotstreamstart + % + \def\pgfplotsplothandlertieline@finishtie{% + \pgfplotsplothandlervisualizejump + }% + \pgfplotsapplistXlet\pgfplots@loc@TMPa=\pgfp@ties + \pgfplots@loc@TMPa + \pgfplotsapplistXnewempty\pgfp@ties + % + \pgf@plotstreamend +}% + +\def\pgfplotsplothandlersurveystart@tieline{% + \def\pgfplots@loc@TMPa{table}% + \ifx\pgfplotssurveyphaseinputclass\pgfplots@loc@TMPa + \else + \pgfplots@error{Sorry, 'tieline' plots are currently only supported for \string\addplot\space table}% + \fi + \def\b@pgfplotsplothandlersurveystart@tieline@init{0}% +}% +\def\pgfplotsplothandlersurveyend@tieline{% +}% + +\def\pgfplotsplothandlersurveypoint@tieline@init{% + \pgfplotsplothandlersurveypoint@tieline@init@find@tieendcolfor x\pgfplotsplothandlertieline@Bx + \pgfplotsplothandlersurveypoint@tieline@init@find@tieendcolfor y\pgfplotsplothandlertieline@By + \ifpgfplots@curplot@threedim + \pgfplotsplothandlersurveypoint@tieline@init@find@tieendcolfor z\pgfplotsplothandlertieline@Bz + \fi + % + \def\b@pgfplotsplothandlersurveystart@tieline@init{1}% +}% +\def\pgfplotsplothandlersurveypoint@tieline@init@find@tieendcolfor#1#2{% + \let#2=\relax + \pgfkeysgetvalue{/pgfplots/table/tie end #1}{\pgfplots@loc@TMPa}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \pgfkeysgetvalue{/pgfplots/table/tie end #1 index}{\pgfplots@loc@TMPa}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + \edef#2{\noexpand\getthisrowno{\pgfplots@loc@TMPa}\noexpand\pgfmathresult}% + \fi + \else + \edef#2{\noexpand\getthisrow{\pgfplots@loc@TMPa}\noexpand\pgfmathresult}% + \fi + \ifx#2\relax + \pgfplotsplothandlersurveypoint@tieline@init@find@colindex@for #1\pgfplots@loc@ind + \c@pgf@countd=\pgfplots@loc@ind\relax + \advance\c@pgf@countd by3 + \ifnum\c@pgf@countd<\pgfplotstablecols\relax + \else + \c@pgf@countd=0 + \pgfplots@error{Sorry, I can't find the 'tie end #1 index' automatically. Please provide 'table[tie end #1={<colname>}]' or 'table[tie end #1 index=<col index>]' manually and verify the all, x,y and z components are correct}% + \fi + \edef\pgfplots@loc@ind{\the\c@pgf@countd}% + \pgfkeyslet{/pgfplots/table/tie end #1 index}\pgfplots@loc@ind + \edef#2{\noexpand\getthisrowno{\pgfplots@loc@ind}\noexpand\pgfmathresult}% + \fi +}% + +\def\pgfplotsplothandlersurveypoint@tieline@init@find@colindex@for#1#2{% + \pgfkeysgetvalue{/pgfplots/table/#1}{\pgfplots@loc@TMPa}% + \pgfkeysgetvalue{/pgfplots/table/#1 index}{\pgfplots@loc@TMPb}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \let#2=\pgfplots@loc@TMPb + \else + \def\pgfplots@loc@TMPb{\expandafter\pgfplotstablegetcolumnindexforname\expandafter{\pgfplots@loc@TMPa}\of}% + \expandafter\pgfplots@loc@TMPb\pgfplotstablename\to#2% + \fi +}% + +\def\pgfplotsplothandlersurveypoint@tieline{% + \if0\b@pgfplotsplothandlersurveystart@tieline@init + \pgfplotsplothandlersurveypoint@tieline@init + \fi + \pgfplotsplothandlersurveypoint@default + % + \pgfplotsplothandlertieline@Bx\let\pgfplots@current@point@x=\pgfmathresult + \pgfplotsplothandlertieline@By\let\pgfplots@current@point@y=\pgfmathresult + \ifpgfplots@curplot@threedim + \pgfplotsplothandlertieline@Bz\let\pgfplots@current@point@z=\pgfmathresult + \fi + \pgfplotsplothandlersurveypoint@default +}% +\endinput diff --git a/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.tex b/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.tex index 1a0ce28dc03..59b69da9712 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsarray.code.tex @@ -58,10 +58,12 @@ % % the elements won't be initialised. Use 'set' for each element. \def\pgfplotsarrayresize#1#2{% - \pgfplotsarray@@edef{#1@size}{#2}% + \c@pgfplotsarray@tmp=#2 + \pgfplotsarray@@edef{#1@size}{\the\c@pgfplotsarray@tmp}% } \def\pgfplotsarrayresizeglobal#1#2{% - \expandafter\xdef\csname\string#1@size\endcsname{#2}% + \c@pgfplotsarray@tmp=#2 + \expandafter\xdef\csname\string#1@size\endcsname{\the\c@pgfplotsarray@tmp}% } % Invokes code '#2' if the array named '#1' exists and '#3' if it does @@ -136,7 +138,7 @@ \def\pgfplotsarray@@let#1=#2{% \def\pgfplotsarray@TMP@@{\expandafter\let\csname\string#1\endcsname}% - \expandafter\pgfplotsarray@TMP@@\expandafter=\csname\string#2\endcsname + \expandafter\pgfplotsarray@TMP@@\csname\string#2\endcsname }% \def\pgfplotsarray@@#1#2{% @@ -178,6 +180,12 @@ \advance\c@pgfplotsarray@tmp by1 \pgfplotsarray@@edef{#2@size}{\the\c@pgfplotsarray@tmp}% } +\long\def\pgfplotsarraypushbackglobal#1\to#2{% + \pgfplotsarraysize{#2}\to\c@pgfplotsarray@tmp + \pgfplotsarray@@\gdef{#2@\the\c@pgfplotsarray@tmp}{#1}% + \advance\c@pgfplotsarray@tmp by1 + \pgfplotsarray@@\xdef{#2@size}{\the\c@pgfplotsarray@tmp}% +} \long\def\pgfplotsarraypushbackglobal#1\to#2{% \pgfplotsarraysize{#2}\to\c@pgfplotsarray@tmp @@ -245,6 +253,23 @@ \expandafter\global\expandafter\let\csname\string#2@\the\c@pgfplotsarray@tmp\endcsname=#3\relax } +% Defines \pgfplotsretval to be a text-representation of the array. +% It will contain \t to separate cells. +% +\def\pgfplotsarraytotext#1{% + \begingroup + \pgfplotsapplistXnewempty\pgfplotsretval@ + \pgfplotsarrayforeachungrouped#1\as\entry{% + \pgfmathfloatparsenumber\entry + \pgfmathfloattosci\pgfmathresult + \edef\entry{\pgfmathresult\noexpand\t}% + \expandafter\pgfplotsapplistXpushback\entry\to\pgfplotsretval@ + }% + \pgfplotsapplistXlet\pgfplotsretval=\pgfplotsretval@ + \pgfmath@smuggleone\pgfplotsretval + \endgroup +} + % Sets the boolean \ifpgfplotsarrayempty depending on whether array #1 is empty % or not. % Example: @@ -296,11 +321,19 @@ \pgfplotsarray@@getsizeto{#1}{\pgfplotsarray@TMP}% \c@pgfplotsarray@tmp=0\relax \def\pgfplotsarrayforeachindex{\the\c@pgfplotsarray@tmp}% - \long\def\pgfplotsarray@TMPb{#3}% \pgfutil@loop \ifnum\c@pgfplotsarray@tmp<\pgfplotsarray@TMP\relax \expandafter\let\expandafter#2\expandafter=\csname\string#1@\the\c@pgfplotsarray@tmp\endcsname% - \pgfplotsarray@TMPb + \begingroup + \toks0={#3}% + \xdef\pgfplotsarray@glob@TMP{% + \the\toks0 % + % restore loop state: + \c@pgfplotsarray@tmp=\the\c@pgfplotsarray@tmp\space + \noexpand\def\noexpand\pgfplotsarray@TMP{\pgfplotsarray@TMP}% + }% + \endgroup + \pgfplotsarray@glob@TMP \advance\c@pgfplotsarray@tmp by1 \pgfutil@repeat \let\pgfplotsarrayforeachindex=\relax% @@ -417,6 +450,9 @@ % [\pgfplotsarrayforeach\testarray\as\elem{\elem\space}] % %-------------------------------------------------- +% +% @see \pgfplotsutilsortthree +% @see \pgfplotsutilsortfour \def\pgfplotsarraysort{% \pgfutil@ifnextchar[{\pgfplotsarraysort@opt}{\pgfplotsarraysort@opt[]}% }% @@ -570,3 +606,64 @@ \pgfplotsarray@mergesort{#1}{#2}{#3}% \pgfplotsarray@mergesort{#1}{#4}{#5}% } + + +% A simple, ungrouped insert sort algorithm for small arrays. +% +% for i := 1; i < N; ++i do +% begin +% value := A[i]; +% j := i - 1; +% done := false; +% repeat +% if A[j] > value then +% begin +% A[j + 1] := A[j]; +% j := j - 1; +% if j < 0 then +% done := true; +% end +% else +% done := true; +% until done; +% A[j + 1] := value; +% end; +\def\pgfplotsarrayinsertionsort#1{% + \pgfkeysgetvalue{/pgfplots/iflessthan/.@cmd}\pgfplotsarraysort@iflt + \pgfplotsarraysizetomacro#1\to\pgfplotsarrayinsertionsort@N + \c@pgf@countd=1 + \pgfplotsarrayinsertionsort@{#1}% +}% +\def\pgfplotsarrayinsertionsort@#1{% + \ifnum\c@pgf@countd<\pgfplotsarrayinsertionsort@N\relax + \pgfplotsarrayselect\c@pgf@countd\of#1\to\pgfplotsarrayinsertionsort@v + % + \c@pgf@countb=\c@pgf@countd + \advance\c@pgf@countb by-1 + % + \pgfplotsarrayinsertionsort@@{#1}% + \advance\c@pgf@countb by1 + \pgfplotsarrayletentry\c@pgf@countb\of#1=\pgfplotsarrayinsertionsort@v + % + \advance\c@pgf@countd by1 + \expandafter\pgfplotsarrayinsertionsort@\expandafter#1% + \fi +} +\def\pgfplotsarrayinsertionsort@@#1{% + \pgfplotsarrayselect\c@pgf@countb\of#1\to\pgfplotsarrayinsertionsort@j + \pgfplotsarraysort@iflt{\pgfplotsarrayinsertionsort@v}{\pgfplotsarrayinsertionsort@j} + {% + \advance\c@pgf@countb by1 + \pgfplotsarrayletentry\c@pgf@countb\of#1=\pgfplotsarrayinsertionsort@j + \advance\c@pgf@countb by-2 + \ifnum\c@pgf@countb<0 + \let\pgfplotsarrayinsertionsort@@next\relax% + \else + \def\pgfplotsarrayinsertionsort@@next{\pgfplotsarrayinsertionsort@@#1}% + \fi + }{% + \let\pgfplotsarrayinsertionsort@@next\relax% + }\pgfeov% + \pgfplotsarrayinsertionsort@@next +}% + diff --git a/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure.code.tex b/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure.code.tex index b60ff65c4f7..34cb67bfe02 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructure.code.tex @@ -384,7 +384,9 @@ % Each single element will be grouped with TeX groups. \long\def\pgfplotslistforeach#1\as#2#3{% \begingroup - \long\def\pgfpl@@##1{\def#2{##1}% + \long\def\pgfpl@@##1{% + \t@pgfplots@tokc={##1}% this allows '#' inside of '##1' + \edef#2{\the\t@pgfplots@tokc}% \begingroup #3\endgroup}% #1\relax \endgroup @@ -415,13 +417,14 @@ % -> iterate through argument until \pgfplotslistforeachungrouped@EOI % comes. \long\def\pgfplotslistforeachungrouped@#1#2\pgfpl@@#3{% - \def\pgfplots@loc@TMPa{#3}% - \ifx\pgfplots@loc@TMPa\pgfplotslistforeachungrouped@EOI + \def\pgfplotslist@loc@TMPa{#3}% + \ifx\pgfplotslist@loc@TMPa\pgfplotslistforeachungrouped@EOI % ok, terminate loop. \let\pgfplotslistforeachungrouped@next=\relax \else % perform loop iteration ... - \def#1{#3}% + \t@pgfplots@tokc={#3}% + \edef#1{\the\t@pgfplots@tokc}% this allows '#' inside of '#3' #2\relax % and continue iterating. \def\pgfplotslistforeachungrouped@next{\pgfplotslistforeachungrouped@{#1}{#2}}% diff --git a/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructureext.code.tex b/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructureext.code.tex index bea65490068..fa90ea613f6 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructureext.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsliststructureext.code.tex @@ -72,6 +72,8 @@ % - it requires O(N) different macros. % - it ***can't*** be copied outside of the current TeX group! % +% I have never used it (besides early tests) +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -132,6 +134,9 @@ % LOCAL, however: 'to global' is to be used inside of a local % group such that the final result, when all buffers are flushed, % is assigned globally. +% +% ATTENTION: maybe that [to global] thing is useless. +% Consider using the \pgfplotsapplistXglobal list (see below) \def\pgfplotsapplistXnewempty{% \pgfutil@ifnextchar[{% \pgfplotsapplistXnewempty@opt @@ -526,3 +531,85 @@ \def\pgfplotsapplistXXglobalexecute#1{% \pgfplotsapplistXXglobalflushbuffers #1}% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \pgfplotsapplistXglobalnewempty --> same as \pgfplotsapplistX, but +% it always assigns everything *globally*. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\pgfplotsgloballet{\global\let}% + +% Usage: +% \pgfplotsapplistXglobalnewempty\macro +% \pgfplotsapplistXglobalnewempty[to global]\macro +% +% The 'to global' flag will configure the list such that all +% assignments to \macro are global. The list accumulation is +% LOCAL, however: 'to global' is to be used inside of a local +% group such that the final result, when all buffers are flushed, +% is assigned globally. +\def\pgfplotsapplistXglobalnewempty#1{% + \pgfplotsgloballet#1=\pgfutil@empty + \expandafter\pgfplotsgloballet\csname\string#1@smallbuf\endcsname=\pgfutil@empty + \expandafter\pgfplotsgloballet\csname\string#1@bigbuf\endcsname=\pgfutil@empty + \expandafter\gdef\csname\string#1@smallbuf@c\endcsname{0}% + \expandafter\gdef\csname\string#1@bigbuf@c\endcsname{0}% +}% + +% #1: the item to append +% #2: the list as macro name +\long\def\pgfplotsapplistXglobalpushback#1\to#2{% + \begingroup + \c@pgf@counta=\csname\string#2@smallbuf@c\endcsname\relax + \advance\c@pgf@counta by1 + \expandafter\xdef\csname\string#2@smallbuf@c\endcsname{\the\c@pgf@counta}% + \endgroup + \ifnum\csname\string#2@smallbuf@c\endcsname<40 + \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}% + \expandafter\xdef\csname\string#2@smallbuf\endcsname{\the\t@pgfplots@toka}% + \else + \pgfplotsapplistXglobalpushback@smallbufoverfl{#1}{#2}% + \fi +}% +\long\def\pgfplotsapplistXglobalpushback@smallbufoverfl#1#2{% + \begingroup + \c@pgf@counta=\csname\string#2@bigbuf@c\endcsname\relax + \advance\c@pgf@counta by1 + \expandafter\xdef\csname\string#2@bigbuf@c\endcsname{\the\c@pgf@counta}% + \endgroup + % + \ifnum\csname\string#2@bigbuf@c\endcsname<30 + \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}% + \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}% + \expandafter\xdef\csname\string#2@bigbuf\endcsname{\the\t@pgfplots@toka\the\t@pgfplots@tokb}% + \expandafter\pgfplotsgloballet\csname\string#2@smallbuf\endcsname=\pgfutil@empty + \expandafter\gdef\csname\string#2@smallbuf@c\endcsname{0}% + \else% + \t@pgfplots@toka=\expandafter{#2}% + \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#2@bigbuf\endcsname}% + \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#2@smallbuf\endcsname#1}% + \xdef#2{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}% + \expandafter\pgfplotsgloballet\csname\string#2@smallbuf\endcsname=\pgfutil@empty + \expandafter\gdef\csname\string#2@smallbuf@c\endcsname{0}% + \expandafter\pgfplotsgloballet\csname\string#2@bigbuf\endcsname=\pgfutil@empty + \expandafter\gdef\csname\string#2@bigbuf@c\endcsname{0}% + \fi% +}% +\def\pgfplotsapplistXglobalflushbuffers#1{% + \t@pgfplots@toka=\expandafter{#1}% + \t@pgfplots@tokb=\expandafter\expandafter\expandafter{\csname\string#1@bigbuf\endcsname}% + \t@pgfplots@tokc=\expandafter\expandafter\expandafter{\csname\string#1@smallbuf\endcsname}% + \xdef#1{\the\t@pgfplots@toka\the\t@pgfplots@tokb\the\t@pgfplots@tokc}% + \expandafter\pgfplotsgloballet\csname\string#1@smallbuf\endcsname=\pgfutil@empty + \expandafter\gdef\csname\string#1@smallbuf@c\endcsname{0}% + \expandafter\pgfplotsgloballet\csname\string#1@bigbuf\endcsname=\pgfutil@empty + \expandafter\gdef\csname\string#1@bigbuf@c\endcsname{0}% +}% + + +\def\pgfplotsapplistXgloballet#1=#2{% + \pgfplotsapplistXglobalflushbuffers#2% + \let#1=#2} diff --git a/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.tex b/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.tex new file mode 100644 index 00000000000..abc273378e0 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/liststructure/pgfplotsmatrix.code.tex @@ -0,0 +1,544 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% This is a helper package with an elementary (full) matrix datastructure, +% featuring O(1) index access and O(N) creation, deletion, copy. +% +% The following macros are supplied: +% +% \pgfplotsmatrixnewempty +% \pgfplotsmatrixresize +% \pgfplotsmatrixsize +% \pgfplotsmatrixselect +% \pgfplotsmatrixset +% \pgfplotsmatrixletentry +% \pgfplotsmatrixforeach +% \pgfplotsmatrixLUdecomp +% \pgfplotsmatrixLUsolve +% +% +% Copyright 2007/2008 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/>. +% +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Creates a new, empty matrix. +\def\pgfplotsmatrixnewempty#1{% + \pgfplotsarray@@def{#1@rows}{0}% + \pgfplotsarray@@def{#1@cols}{1}% +} + +% resizes (truncates) matrix #1 to #2 rows and #3 cols. +% +% the elements won't be initialised. Use 'set' for each element. +\def\pgfplotsmatrixresize#1#2#3{% + \pgfplotsarray@@edef{#1@rows}{#2}% + \pgfplotsarray@@edef{#1@cols}{#3}% +} + +% Invokes code '#2' if the matrix named '#1' exists and '#3' if it does +% not exist. +\def\pgfplotsmatrixifdefined#1#2#3{% + \pgfutil@ifundefined{#1@rows}{#3}{#2}% +}% + + + +% Counts the number of rows/cols in matrix #1, storing it into the count +% registers #2, #3. +% Example: +% \pgfplotsmatrixsize\foo\to{\count0}{\count1}% +% \the\count0, \the\count1 +\long\def\pgfplotsmatrixsize#1\to#2#3{% + #2=\csname\string#1@rows\endcsname\relax + #3=\csname\string#1@cols\endcsname\relax +} + +\long\def\pgfplotsmatrixsizetomacro#1\to#2#3{% + \expandafter\let\expandafter#2\csname\string#1@rows\endcsname + \expandafter\let\expandafter#3\csname\string#1@cols\endcsname +} + + +% Returns the (#1,#2) element of matrix #3 into macro #4 +% Arguments: +% #1: a row index 0,...,N-1 where N is rowcount. +% #1 must expand to an integer. +% #2: a col index 0,...,N-1 where N is colcount. +% #2 must expand to an integer. +% #3: a matrix +% #4: a macro name +% Example: +% Element 0: +% \pgfplotsmatrixselect0,1\of\foo\to\elem +% \elem +% Element \count1: +% \pgfplotsmatrixselect\count1,2\of\foo\to\elem +\def\pgfplotsmatrixselect#1,#2\of#3\to#4{% + \expandafter\let\expandafter#4\csname\string#3@#1,#2\endcsname% + \ifx#4\relax + \pgfplotsthrow{no such element}{#1,#2}{No such element: \string\pgfplotsmatrixselect#1,#2\string\of{\string#3}}\pgfeov% + \fi +} + +% Expands to the value (#1,#2) of matrix #3. +% #1: a row index (not a register) +% #2: a col index +% #3: a matrix +\def\pgfplotsmatrixvalueofelem#1,#2\of#3{\csname\string#3@#1,#2\endcsname}% + +% Sets element '#1,#2' of matrix '#3' to '#4'. +\def\pgfplotsmatrixset#1,#2\of#3\to#4{% + \pgfutil@namedef{\string#3@#1,#2}{#4}% +} +\long\def\pgfplotsmatrixletentry#1,#2\of#3=#4{% + \expandafter\let\csname\string#3@#1,#2\endcsname=#4\relax +} + +% During the loop, \pgfplotsmatrixforeachrowindex expands to the +% current row index and \pgfplotsmatrixforeachcolindex to the actual +% col index. It invokes \pgfplotsmatrixforeachrowend after each +% complete row. +% +% This macro uses +% \c@pgf@counta,\c@pgf@countb,\c@pgf@countc,\c@pgf@countd +\long\def\pgfplotsmatrixforeach#1\as#2#3{% + \pgfplotsmatrixsize#1\to\c@pgf@countc\c@pgf@countd + \long\def\pgfplotsmatrixforeach@{#3}% + \def\pgfplotsmatrixforeach@assign##1{\def#2{##1}}% + \def\pgfplotsmat@select##1,##2\to{\pgfplotsmatrixselect##1,##2\of#1\to}% + \def\pgfplotsmatrixforeachrowindex{\the\c@pgf@counta}% + \def\pgfplotsmatrixforeachcolindex{\the\c@pgf@countb}% + \c@pgf@counta=0 + \pgfplotsmatrixforeach@loop + \let\pgfplotsmatrixforeachcolindex\relax + \let\pgfplotsmatrixforeachrowindex\relax% +}% +\let\pgfplotsmatrixforeachrowend=\relax +\def\pgfplotsmatrixforeach@loop{% + \ifnum\c@pgf@counta<\c@pgf@countc + \c@pgf@countb=0 + \pgfplotsmatrixforeach@loop@ + % + \pgfplotsmatrixforeachrowend + % + \advance\c@pgf@counta by1 + \expandafter\pgfplotsmatrixforeach@loop + \fi +}% +\def\pgfplotsmatrixforeach@loop@{% + \ifnum\c@pgf@countb<\c@pgf@countd + \pgfplotsmat@select\the\c@pgf@counta,\the\c@pgf@countb\to\pgfplotsmat@Aij + \expandafter\pgfplotsmatrixforeach@assign\expandafter{\pgfplotsmat@Aij}% + \pgfplotsmatrixforeach@ + % + \advance\c@pgf@countb by1 + \expandafter\pgfplotsmatrixforeach@loop@ + \fi +}% + +% Defines \pgfplotsretval to be a text-representation of the matrix. +% It will contain '\n' as newline macro and \t to separate cells. +% +\def\pgfplotsmatrixtotext#1{% + \begingroup + \pgfplotsapplistXnewempty\pgfplotsretval@ + \def\pgfplotsmatrixforeachrowend{% + \pgfplotsapplistXpushback\n\to\pgfplotsretval@ + }% + \pgfplotsmatrixforeach#1\as\entry{% + \pgfmathfloatparsenumber\entry + \pgfmathfloattosci\pgfmathresult + \edef\entry{\pgfmathresult\noexpand\t}% + \expandafter\pgfplotsapplistXpushback\entry\to\pgfplotsretval@ + }% + \pgfplotsapplistXlet\pgfplotsretval=\pgfplotsretval@ + \pgfmath@smuggleone\pgfplotsretval + \endgroup +} + +% Takes a matrix #1 and replaces it by its LU decomposition. +% The LU decomposition uses implicit pivoting; the pivoting +% information is stored in a permutation array #2 and a sign macro #3. +% +% It is to be used together with \pgfplotsmatrixsolveLEQS. +% +% #1: the input matrix (square size) +% #2: a macro name; will be used to store the permutation array for +% the pivoting. +% #3: a macro name, will contain the sign of the permutation (either +% +1 or -1). +% +% The algorithm has been converted from Numerical Recipes in C (I did +% not copy the comments, though). You find the complete reference in +% Chapter 2 of Numerical Recipes. +% +% If the matrix is singular, an exception will be raised. +% If the matrix is singular up to working precision, +% \pgfplotsmatrixLUdecompwarnsingular will be invoked and the +% algorithm continues with a small threshold. +% +% All arithmetics is computed with \pgfplotscoordmath{default} (which +% is float in the initial configuration). Use +% \pgfplotssetcoordmathfor{default}{pgfbasic} to switch it to standard +% pgf arithmetics. +% +% ATTENTION. This routine re-uses the four counters +% \c@pgf@counta,...\c@pgf@countd. +% Furthermore, it does not free any memory. +% Make sure you use it inside of local scopes. +\def\pgfplotsmatrixLUdecomp#1\perm#2\sign#3{% + \let\pgfplotsmat@i=\c@pgf@counta + \let\pgfplotsmat@imax=\c@pgf@countb + \let\pgfplotsmat@j=\c@pgf@countc + \let\pgfplotsmat@k=\c@pgf@countd + \countdef\pgfplotsmat@n=0 + \let\pgfplotsmat@big=\pgfutil@empty + \let\pgfplotsmat@dum=\pgfutil@empty + \let\pgfplotsmat@sum=\pgfutil@empty + \let\pgfplotsmat@temp=\pgfutil@empty + \pgfplotsmatrixsize#1\to\pgfplotsmat@n\c@pgf@countd + \ifnum\c@pgf@countd=\pgfplotsmat@n + \else + \pgfplots@error{Sorry, \string\pgfplotsmatrixLUdecomp\space expected an n x n matrix, but got \the\pgfplotsmat@n\space x \the\c@pgf@countd.}% + \fi + \pgfplotsarraynewempty\pgfplotsmat@vv + \pgfplotsarrayresize\pgfplotsmat@vv\pgfplotsmat@n + \pgfplotsarrayresize#2\pgfplotsmat@n + \def\pgfplotsmat@parity{1}% + \def\pgfplotsmat@select##1,##2\to{\pgfplotsmatrixselect##1,##2\of#1\to}% + \def\pgfplotsmat@letentry##1,##2={\pgfplotsmatrixletentry##1,##2\of#1=}% + \def\pgfplotsmat@letpermentry##1={\pgfplotsarrayletentry##1\of#2=}% + % + \pgfplotsmat@i=0 + \pgfplotsmatrixLUdecomp@scalingloop + % + \ifnum\pgfplotsmat@n>0 % this is used for error recovery. + % + \pgfplotsmat@j=0 + \pgfplotsmatrixLUdecomp@mainloop@j + % + \let#3=\pgfplotsmat@parity + \fi +}% +\def\pgfplotsmatrixLUdecomp@scalingloop{% + \ifnum\pgfplotsmat@i<\pgfplotsmat@n + \pgfplotscoordmath{default}{zero}% + \let\pgfplotsmat@big=\pgfmathresult + % + \pgfplotsmat@j=0 + \pgfplotsmatrixLUdecomp@scalingloop@ + % + \pgfplotscoordmath{default}{if is}{\pgfplotsmat@big}{0}{% + \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Singular matrix in \string\pgfplotsmatrixLUdecomp}\pgfeov% + \pgfplotsmat@n=-1 + }{% + \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfplotsmat@big}}% + \pgfplotsarrayletentry\pgfplotsmat@i\of\pgfplotsmat@vv=\pgfmathresult + }% + % + \advance\pgfplotsmat@i by1 + \expandafter\pgfplotsmatrixLUdecomp@scalingloop + \fi +}% +\def\pgfplotsmatrixLUdecomp@scalingloop@{% + \ifnum\pgfplotsmat@j<\pgfplotsmat@n + % + \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@Aij + \pgfplotscoordmath{default}{parsenumber}{\pgfplotsmat@Aij}% + \let\pgfplotsmat@Aij=\pgfmathresult + \pgfplotsmat@letentry\the\pgfplotsmat@i,\the\pgfplotsmat@j=\pgfplotsmat@Aij + % + \pgfplotscoordmath{default}{op}{abs}{{\pgfplotsmat@Aij}}% + \let\pgfplotsmat@temp=\pgfmathresult + \pgfplotscoordmath{default}{max}{\pgfplotsmat@temp}{\pgfplotsmat@big}% + \let\pgfplotsmat@big=\pgfmathresult + % + \advance\pgfplotsmat@j by1 + \expandafter\pgfplotsmatrixLUdecomp@scalingloop@ + \fi +}% + +\def\pgfplotsmatrixLUdecomp@mainloop@j{% + \ifnum\pgfplotsmat@j<\pgfplotsmat@n + % + \pgfplotsmat@i=0 + \pgfplotsmatrixLUdecomp@mainloop@j@i + % + \pgfplotscoordmath{default}{zero}% + \let\pgfplotsmat@big=\pgfmathresult + % + \pgfplotsmat@i=\pgfplotsmat@j + \pgfplotsmatrixLUdecomp@mainloop@j@i@second + % + \ifnum\pgfplotsmat@j=\pgfplotsmat@imax + \else + % interchange rows... + \pgfplotsmat@k=0 + \pgfplotsmatrixLUdecomp@mainloop@j@k + % + \c@pgfplotsarray@tmp=-\pgfplotsmat@parity\relax% + \edef\pgfplotsmat@parity{\the\c@pgfplotsarray@tmp}% + % + % FIXME : this here is DIFFERENT. Seems there is something + % missing in Numerical Recipes book + \pgfplotsarrayselect\pgfplotsmat@j\of\pgfplotsmat@vv\to\pgfplotsmat@dum + %\pgfplotsarrayselect\pgfplotsmat@imax\of\pgfplotsmat@vv\to\pgfplotsmat@temp + %\pgfplotsarrayletentry\pgfplotsmat@j\of\pgfplotsmat@vv=\pgfplotsmat@temp + \pgfplotsarrayletentry\pgfplotsmat@imax\of\pgfplotsmat@vv=\pgfplotsmat@dum + \fi + % + \edef\pgfplotsmat@dum{\the\pgfplotsmat@imax}% + \pgfplotsmat@letpermentry\pgfplotsmat@j=\pgfplotsmat@dum + % + \pgfplotsmat@select\the\pgfplotsmat@j,\the\pgfplotsmat@j\to\pgfplotsmat@Ajj + \pgfplotscoordmath{default}{if is}{\pgfplotsmat@Ajj}{0}{% + \pgfplotscoordmath{default}{parsenumber}{1e-15}% + \pgfplotsmatrixLUdecompwarnsingular + \pgfplotsmat@letentry\the\pgfplotsmat@j,\the\pgfplotsmat@j=\pgfmathresult + }{% + }% + % + % + \advance\pgfplotsmat@j by1 + \ifnum\pgfplotsmat@j=\pgfplotsmat@n + \advance\pgfplotsmat@j by-1 + \else + \advance\pgfplotsmat@j by-1 + \pgfplotsmat@select\the\pgfplotsmat@j,\the\pgfplotsmat@j\to\pgfplotsmat@Ajj + \pgfplotscoordmath{default}{op}{reciprocal}{{\pgfplotsmat@Ajj}}% + \let\pgfplotsmat@dum=\pgfmathresult + \pgfplotsmat@i=\pgfplotsmat@j + \advance\pgfplotsmat@i by1 + \pgfplotsmatrixLUdecomp@mainloop@j@i@final + \fi + \advance\pgfplotsmat@j by1 + \expandafter\pgfplotsmatrixLUdecomp@mainloop@j + \fi +}% +\def\pgfplotsmatrixLUdecompwarnsingular{% + \pgfplots@warning{Linear system is singular up to machine precision! Continuing with small threshold.}% +}% +\def\pgfplotsmatrixLUdecomp@mainloop@j@i{% + \ifnum\pgfplotsmat@i<\pgfplotsmat@j + % + \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@sum + \pgfplotsmat@k=0 + \pgfplotsmatrixLUdecomp@mainloop@j@i@k + \pgfplotsmat@letentry\the\pgfplotsmat@i,\the\pgfplotsmat@j=\pgfplotsmat@sum + % + \advance\pgfplotsmat@i by1 + \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i + \fi +}% +\def\pgfplotsmatrixLUdecomp@mainloop@j@i@k{% + \ifnum\pgfplotsmat@k<\pgfplotsmat@i + % + \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@k\to\pgfplotsmat@Aik + \pgfplotsmat@select\the\pgfplotsmat@k,\the\pgfplotsmat@j\to\pgfplotsmat@Akj + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@Aik}{\pgfplotsmat@Akj}}% + \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotsmat@sum}{\pgfmathresult}}% + \let\pgfplotsmat@sum=\pgfmathresult + % + \advance\pgfplotsmat@k by1 + \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i@k + \fi +} +\def\pgfplotsmatrixLUdecomp@mainloop@j@i@second{% + \ifnum\pgfplotsmat@i<\pgfplotsmat@n + % + \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@sum + % + \pgfplotsmat@k=0 + \pgfplotsmatrixLUdecomp@mainloop@j@i@second@k + \pgfplotsmat@letentry\the\pgfplotsmat@i,\the\pgfplotsmat@j=\pgfplotsmat@sum + % + \pgfplotscoordmath{default}{op}{abs}{{\pgfplotsmat@sum}}% + \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplotsarrayvalueofelem\the\pgfplotsmat@i\of\pgfplotsmat@vv}}% + \let\pgfplotsmat@dum=\pgfmathresult + \pgfplotscoordmath{default}{if less than}{\pgfplotsmat@dum}{\pgfplotsmat@big}{% + }{% + \let\pgfplotsmat@big=\pgfplotsmat@dum + \pgfplotsmat@imax=\pgfplotsmat@i + }% + % + \advance\pgfplotsmat@i by1 + \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i@second + \fi +}% +\def\pgfplotsmatrixLUdecomp@mainloop@j@i@second@k{% + \ifnum\pgfplotsmat@k<\pgfplotsmat@j + % + \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@k\to\pgfplotsmat@Aik + \pgfplotsmat@select\the\pgfplotsmat@k,\the\pgfplotsmat@j\to\pgfplotsmat@Akj + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@Aik}{\pgfplotsmat@Akj}}% + \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotsmat@sum}{\pgfmathresult}}% + \let\pgfplotsmat@sum=\pgfmathresult + % + \advance\pgfplotsmat@k by1 + \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i@second@k + \fi +}% + +\def\pgfplotsmatrixLUdecomp@mainloop@j@k{% + \ifnum\pgfplotsmat@k<\pgfplotsmat@n + % + \pgfplotsmat@select\the\pgfplotsmat@imax,\the\pgfplotsmat@k\to\pgfplotsmat@dum + \pgfplotsmat@select\the\pgfplotsmat@j,\the\pgfplotsmat@k\to\pgfplotsmat@Ajk + \pgfplotsmat@letentry\the\pgfplotsmat@imax,\the\pgfplotsmat@k=\pgfplotsmat@Ajk + \pgfplotsmat@letentry\the\pgfplotsmat@j,\the\pgfplotsmat@k=\pgfplotsmat@dum + % + \advance\pgfplotsmat@k by1 + \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@k + \fi +} +\def\pgfplotsmatrixLUdecomp@mainloop@j@i@final{% + \ifnum\pgfplotsmat@i<\pgfplotsmat@n + % + \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@Aij + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@Aij}{\pgfplotsmat@dum}}% + \pgfplotsmat@letentry\the\pgfplotsmat@i,\the\pgfplotsmat@j=\pgfmathresult + % + \advance\pgfplotsmat@i by1 + \expandafter\pgfplotsmatrixLUdecomp@mainloop@j@i@final + \fi +} + + + +% Solves the set of n linear equations Ax = b where A = LU is given in +% (#1,#2) and b = #3. +% +% #1: is a result of \pgfplotsmatrixLUdecomp +% #2: is the permutation vector returned by \pgfplotsmatrixLUdecomp +% #3: the right hand side. On output, it will be *overwritten* with +% the solution. +% +% The algorithm has been converted from Numerical Recipes in C (I did +% not copy the comments, though). You find the complete reference in +% Chapter 2 of Numerical Recipes. +\def\pgfplotsmatrixLUbacksubst#1\perm#2\inout#3{% + \let\pgfplotsmat@i=\c@pgf@counta + \let\pgfplotsmat@ii=\c@pgf@countb + \let\pgfplotsmat@j=\c@pgf@countc + \let\pgfplotsmat@n=\c@pgf@countd + \let\pgfplotsmat@sum=\pgfutil@empty + \pgfplotsmatrixsize#1\to\pgfplotsmat@n\c@pgf@counta + \pgfplotsarraysize#3\to\c@pgf@counta + \ifnum\c@pgf@counta=\pgfplotsmat@n + \def\pgfplotsmat@select##1,##2\to{\pgfplotsmatrixselect##1,##2\of#1\to}% + \def\pgfplotsmat@selectperm##1\to{\pgfplotsarrayselect##1\of#2\to}% + \def\pgfplotsmat@selectb##1\to{\pgfplotsarrayselect##1\of#3\to}% + \def\pgfplotsmat@letresult##1={\pgfplotsarrayletentry##1\of#3=}% + % + \pgfplotsmat@ii=-1 + \pgfplotsmat@i=0 + \pgfplotsmatrixLUbacksubst@loop@i + % + \pgfplotsmat@i=\pgfplotsmat@n + \advance\pgfplotsmat@i by-1 + \pgfplotsmatrixLUbacksubst@loop@i@backw + \else + \pgfplots@error{Sorry, \string\pgfplotsmatrixLUbacksubst\space expected a vector of length \the\pgfplotsmat@n\space, not \the\c@pgf@counta}% + \fi +}% +\def\pgfplotsmatrixLUbacksubst@loop@i{% + \ifnum\pgfplotsmat@i<\pgfplotsmat@n + % + \pgfplotsmat@selectperm\pgfplotsmat@i\to\pgfplotsmat@ip + \pgfplotsmat@selectb\pgfplotsmat@ip\to\pgfplotsmat@sum + \pgfplotsmat@selectb\pgfplotsmat@i\to\pgfplotsmat@temp + % + \pgfplotscoordmath{default}{parsenumber}{\pgfplotsmat@sum}% + \let\pgfplotsmat@sum=\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{\pgfplotsmat@temp}% + \let\pgfplotsmat@temp=\pgfmathresult + % + \pgfplotsmat@letresult\pgfplotsmat@ip=\pgfplotsmat@temp + % + \ifnum\pgfplotsmat@ii<0 + \pgfplotscoordmath{default}{if is}{\pgfplotsmat@sum}{0}{% + }{% + \pgfplotsmat@ii=\pgfplotsmat@i + }% + \else + \pgfplotsmat@j=\pgfplotsmat@ii + \pgfplotsmatrixLUbacksubst@loop@i@j + \fi + \pgfplotsmat@letresult\pgfplotsmat@i=\pgfplotsmat@sum + % + \advance\pgfplotsmat@i by1 + \expandafter\pgfplotsmatrixLUbacksubst@loop@i + \fi +}% +\def\pgfplotsmatrixLUbacksubst@loop@i@j{% + \ifnum\pgfplotsmat@j<\pgfplotsmat@i + % + \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@Aij + \pgfplotsmat@selectb\pgfplotsmat@j\to\pgfplotsmat@temp + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@temp}{\pgfplotsmat@Aij}}% + \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotsmat@sum}{\pgfmathresult}}% + \let\pgfplotsmat@sum=\pgfmathresult + % + \advance\pgfplotsmat@j by1 + \expandafter\pgfplotsmatrixLUbacksubst@loop@i@j + \fi +}% + +\def\pgfplotsmatrixLUbacksubst@loop@i@backw{% + \ifnum\pgfplotsmat@i<0 + \else + % + \pgfplotsmat@selectb\pgfplotsmat@i\to\pgfplotsmat@sum + \pgfplotsmat@j=\pgfplotsmat@i + \advance\pgfplotsmat@j by1 + \pgfplotsmatrixLUbacksubst@loop@i@backw@j + % + \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@i\to\pgfplotsmat@Aii + \pgfplotscoordmath{default}{op}{divide}{{\pgfplotsmat@sum}{\pgfplotsmat@Aii}}% + \pgfplotsmat@letresult\pgfplotsmat@i=\pgfmathresult + % + \advance\pgfplotsmat@i by-1 + \expandafter\pgfplotsmatrixLUbacksubst@loop@i@backw + \fi +}% +\def\pgfplotsmatrixLUbacksubst@loop@i@backw@j{% + \ifnum\pgfplotsmat@j<\pgfplotsmat@n + % + \pgfplotsmat@select\the\pgfplotsmat@i,\the\pgfplotsmat@j\to\pgfplotsmat@Aij + \pgfplotsmat@selectb\pgfplotsmat@j\to\pgfplotsmat@temp + \pgfplotscoordmath{default}{op}{multiply}{{\pgfplotsmat@temp}{\pgfplotsmat@Aij}}% + \pgfplotscoordmath{default}{op}{subtract}{{\pgfplotsmat@sum}{\pgfmathresult}}% + \let\pgfplotsmat@sum=\pgfmathresult + % + \advance\pgfplotsmat@j by1 + \expandafter\pgfplotsmatrixLUbacksubst@loop@i@backw@j + \fi +}% + +% Solves the linear equation system Ax = b. +% #1: the matrix A +% #2: the right-hand-side b. On output, #2 will contain the solution +% and A will be overwritten. +% +% ATTENTION. This routine re-uses the four counters +% \c@pgf@counta,...\c@pgf@countd. +% Furthermore, it does not free any memory. +% Make sure you use it inside of local scopes. +\def\pgfplotsmatrixsolveLEQS#1=#2{% + \pgfplotsmatrixLUdecomp#1\perm\pgfplotsmatrix@perm\sign\pgfplotsmatrix@sign + \pgfplotsmatrixLUbacksubst#1\perm\pgfplotsmatrix@perm\inout#2% +}% 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 b2c3d7bf946..b5480f58b5b 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstable.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstable.code.tex @@ -44,6 +44,7 @@ \newif\ifpgfplotstabletypeset@force@remake \newif\ifpgfplotstable@disable@rowcolstyles +\let\pgfplotstable@outfile=\w@pgf@writea \input pgfplotstable.coltype.code.tex @@ -341,6 +342,12 @@ /pgfplots/table/every last column/.style={}, /pgfplots/table/every even column/.style={}, /pgfplots/table/every odd column/.style={}, + /pgfplots/table/every nth row/.code 2 args={% + \pgfplotstabletypeset@append@every@nth@row{#1}{#2}% + }, + /pgfplots/table/every nth row/.style 2 args/.code 2 args={% + \pgfplotstabletypeset@append@every@nth@row{#1}{#2}% + }, /pgfplots/table/before row/.initial=, /pgfplots/table/after row/.initial=, /pgfplots/table/begin table/.initial={\begin{tabular}}, @@ -464,6 +471,14 @@ \fi } }, + /pgfplots/table/string replace*/.style 2 args={% + /pgfplots/table/preproc cell content/.append code={% + \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult + \def\pgfplots@loc@TMPa{\pgfplotsutilstrreplace{#1}{#2}}% + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}% + \pgfkeyslet{/pgfplots/table/@cell content}{\pgfplotsretval}% + } + }, /pgfplots/table/preproc/expr/.code={% \ifpgfplots@usefpu \pgfkeysalso{/pgf/fpu=true,/pgf/fpu/output format=sci}% @@ -501,7 +516,8 @@ \fi } }, - /pgfplots/table/multiply with/.code={% + /pgfplots/table/multiply with/.style={/pgfplots/table/multiply by={#1}},% + /pgfplots/table/multiply by/.code={% \pgfmathfloatparsenumber{#1}% \let\pgfplotstable@scale=\pgfmathresult \pgfkeysalso{ @@ -519,7 +535,7 @@ }% }, /pgfplots/table/divide by/.code={% - \pgfkeysalso{/pgfplots/table/multiply with=#1}% + \pgfkeysalso{/pgfplots/table/multiply by=#1}% \let\pgfplotstable@divisor=\pgfplotstable@scale \pgfmathfloatcreate{1}{1.0}{0}% \let\pgfplotstable@ONE=\pgfmathresult @@ -1349,13 +1365,36 @@ %%%%%%%%%%%%%%% +% #1: the original value +% #2: the output macro \long\def\pgfplotstabletypeset@getfinalentry#1#2{% \begingroup + \def\pgfkeysdefaultpath{/pgfplots/table/}% \def\pgfplotstablepartno{0}% \pgfkeyssetvalue{/pgfplots/table/@cell content}{#1}% \pgfkeyssetvalue{/pgfplots/table/@unprocessed cell content}{#1}% + \ifpgfplotstable@disable@rowcolstyles + \else + \def\pgfplots@loc@TMPb##1{% + \edef\pgfplotstable@loc@TMPa{/pgfplots/table/every row ##1\pgfplotstablerow\space column ##1\pgfplotstablecol}% + \pgfkeysifdefined{\pgfplotstable@loc@TMPa/.@cmd}{% + \expandafter\pgfplotstableset\expandafter{\pgfplotstable@loc@TMPa}% + }{}% + \edef\pgfplotstable@loc@TMPa{/pgfplots/table/every row ##1\pgfplotstablerow\space column \pgfplotstable@colname@for@styles}% + \pgfkeysifdefined{\pgfplotstable@loc@TMPa/.@cmd}{% + \expandafter\pgfplotstableset\expandafter{\pgfplotstable@loc@TMPa}% + }{}% + }% + \pgfplots@loc@TMPb{}% + % also accept the same with the 'row no' style: + \pgfplots@loc@TMPb{no }% + \pgfplotstable@debug@notify@cellcontent@afterrowcolstyles% + \fi \pgfplotstable@debug@notify@cellcontent% - \pgfkeysvalueof{/pgfplots/table/preproc cell content/.@cmd}#1\pgfeov + \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult% + \pgfkeyslet{/pgfplots/table/@cell content after rowcol styles}\pgfmathresult% + \pgfkeysgetvalue{/pgfplots/table/preproc cell content/.@cmd}\pgfplotstable@assigncell + \expandafter\pgfplotstable@assigncell\pgfmathresult\pgfeov \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult% \pgfkeyslet{/pgfplots/table/@preprocessed cell content}\pgfmathresult% \pgfplotstable@debug@notify@cellcontent@preprocessed% @@ -1391,6 +1430,7 @@ \def\pgfplotstable@debug@notify@cellcontent{}% \def\pgfplotstable@debug@notify@cellcontent@preprocessed{}% +\def\pgfplotstable@debug@notify@cellcontent@afterrowcolstyles{}% \def\pgfplotstable@debug@notify@cellcontent@assigned{}% \def\pgfplotstable@debug@notify@cellcontent@postprocessed{}% \def\pgfplotstable@debug@notify@preprocess@incol#1{}% @@ -1412,6 +1452,13 @@ \immediate\write16{Row \pgfplotstablerow/out \the\c@pgfplotstable@counta: After '@preproc cell content : `\the\toks0'}% \endgroup }% +\def\pgfplotstable@debug@notify@cellcontent@afterrowcolstyles@ACTIVE{% + \begingroup + \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult% + \toks0=\expandafter{\pgfmathresult}% + \immediate\write16{Row \pgfplotstablerow/out \the\c@pgfplotstable@counta: After applying 'every row * column [no] *' styles : `\the\toks0'}% + \endgroup +}% \def\pgfplotstable@debug@notify@cellcontent@assigned@ACTIVE{% \begingroup \pgfkeysgetvalue{/pgfplots/table/@cell content}\pgfmathresult% @@ -1454,6 +1501,7 @@ \let\pgfplotstable@debug@notify@preprocessed@col=\pgfplotstable@debug@notify@preprocessed@col@ACTIVE \let\pgfplotstable@debug@notify@cellcontent=\pgfplotstable@debug@notify@cellcontent@ACTIVE \let\pgfplotstable@debug@notify@cellcontent@preprocessed=\pgfplotstable@debug@notify@cellcontent@preprocessed@ACTIVE + \let\pgfplotstable@debug@notify@cellcontent@afterrowcolstyles=\pgfplotstable@debug@notify@cellcontent@afterrowcolstyles@ACTIVE \let\pgfplotstable@debug@notify@cellcontent@assigned=\pgfplotstable@debug@notify@cellcontent@assigned@ACTIVE \let\pgfplotstable@debug@notify@cellcontent@postprocessed=\pgfplotstable@debug@notify@cellcontent@postprocessed@ACTIVE \let\pgfplotstable@debug@notify@balancingcell=\pgfplotstable@debug@notify@balancingcell@ACTIVE @@ -1506,6 +1554,60 @@ \fi }% +% Upon execution, \pgfplotsretval contains a set of /pgfplots/table +% keys from 'every nth row' styles. +% +% @PRECONDITION this macro assumes it is run in \pgfplotstabletypeset. +\def\pgfplots@each@nth@styles{\let\pgfplotsretval\pgfutil@empty}% + +% Defines an 'every nth row' style for an integer #1. +% +% #1: integer +% #2: style arguments +% +% All these styles are accumulated into the macro +% \pgfplots@each@nth@styles. +\def\pgfplotstabletypeset@append@every@nth@row#1#2{% + \edef\pgfplots@loc@TMPa{#1}% + % chech for the special 'each nth row={3[+1]}{...} format: + \expandafter\pgfutil@in@\expandafter[\expandafter{\pgfplots@loc@TMPa}% + \ifpgfutil@in@ + \expandafter\pgfplotstabletypeset@append@every@nth@row@getshift\pgfplots@loc@TMPa% + \t@pgfplots@toka={#2}% + \edef\pgfplots@loc@TMPa{% + \noexpand\pgfplotstabletypeset@append@every@nth@row@{\pgfplots@loc@TMPa}{\the\t@pgfplots@toka}{\pgfplots@loc@TMPb}% + }% + \pgfplots@loc@TMPa + \else + \expandafter\pgfplotstabletypeset@append@every@nth@row@\expandafter{\pgfplots@loc@TMPa}{#2}{0}% + \fi +}% +\def\pgfplotstabletypeset@append@every@nth@row@getshift#1[#2]{% + \def\pgfplots@loc@TMPa{#1}% + \ifnum#2<0 + \c@pgf@countc=#1\relax + \advance\c@pgf@countc by#2 + \edef\pgfplots@loc@TMPb{\the\c@pgf@countc}% + \else + \def\pgfplots@loc@TMPb{#2}% + \fi +}% +% #3 is an additional shift. It is usually 0 +\def\pgfplotstabletypeset@append@every@nth@row@#1#2#3{% + \expandafter\def\expandafter\pgfplots@each@nth@styles\expandafter{% + \pgfplots@each@nth@styles + \expandafter\pgfplotsmathmodint\expandafter{\the\c@pgfplotstable@rowindex}{#1}% + \ifnum\pgfmathresult=#3\relax + \ifx\pgfplotsretval\pgfutil@empty + \def\pgfplotsretval{#2}% + \else + \expandafter\def\expandafter\pgfplotsretval\expandafter{\pgfplotsretval,% + #2}% + \fi + \fi + }% +} + \def\pgfplotstable@insertemptycells@forbalance{% \pgfutil@loop \ifnum\c@pgfplotstable@counta<\pgfplotstable@firstnumrows\relax @@ -1529,7 +1631,7 @@ % \pgfplotslistnewempty#2 % }{}% %-------------------------------------------------- - \def\pgfplotstablename{#2}% + \def\pgfplotstablename{#2}% the name of the actual table struct \def\pgfplotstablecolname{\pgfplotstable@colname}% \def\pgfplotstablecol{\the\c@pgfplotstable@colindex}% \def\pgfplotstablerow{\the\c@pgfplotstable@rowindex}% @@ -1702,10 +1804,11 @@ \t@pgfplots@tokb=\expandafter{\pgfplotstable@colname}% \expandafter\pgfplotstable@checkspecialchars@pgfkeys\the\t@pgfplots@tokb\pgfplotstable@EOI \ifpgfutil@in@ - \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka,columns/{\the\t@pgfplots@tokb}/.try}% + \edef\pgfplotstable@colname@for@styles{{\the\t@pgfplots@tokb}}% \else - \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka,columns/\the\t@pgfplots@tokb/.try}% + \edef\pgfplotstable@colname@for@styles{\the\t@pgfplots@tokb}% \fi + \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka,columns/\pgfplotstable@colname@for@styles/.try}% \t@pgfplots@toka=\expandafter{\pgfplotstable@loc@TMPa}% \t@pgfplots@tokb=\expandafter{\pgfplotstable@displaycolkey}% \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka,\the\t@pgfplots@tokb}% @@ -1901,6 +2004,21 @@ \else \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka,every row no \the\c@pgfplotstable@rowindex/.try}% \t@pgfplots@toka=\expandafter{\pgfplotstable@loc@TMPa}% + % + \ifnum\c@pgfplotstable@rowindex=0\relax + \else + % process 'every nth row' styles: + \begingroup + \pgfplots@each@nth@styles + \pgfmath@smuggleone\pgfplotsretval + \endgroup + \ifx\pgfplotsretval\pgfutil@empty + \else + \t@pgfplots@tokb=\expandafter{\pgfplotsretval}% + \edef\pgfplotstable@loc@TMPa{\the\t@pgfplots@toka,\the\t@pgfplots@tokb}% + \t@pgfplots@toka=\expandafter{\pgfplotstable@loc@TMPa}% + \fi + \fi \fi % misuse as temporary variable: \c@pgfplotstable@colindex=\c@pgfplotstable@rowindex @@ -1987,13 +2105,14 @@ \pgfplots@glob@TMPa% execute 'write to macro' if set. }% + \newif\ifpgfplotstable@isfirstrow \newif\ifpgfplotstable@islastrow \newif\ifpgfplotstablecreatecol@isreallynew \def\pgfplotstablecreatecol@opt[#1]#2#3{% \begingroup - \def\pgfplotstablename{#3}% + \def\pgfplotstablename{#3}% the name of the table struct \pgfplotstableset{columns=,#1,% /pgf/fpu/handlers/empty number/.code 2 args={% \pgfmathfloatcreate{0}{0.0}{0}% @@ -2525,7 +2644,7 @@ \pgfkeysgetvalue{/pgfplots/table/create col/linear regression/variance src}{\pgfplotstable@variance@table}% % \ifx\pgfplotstable@table\pgfutil@empty - \pgfutil@ifundefined{pgfplotstablename}{}{% + \pgfutil@ifundefined{pgfplotstablename}{}{% query the name of the actual table struct \let\pgfplotstable@table=\pgfplotstablename }% \fi 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 4a31f8fc84d..37eed5ad6ce 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/numtable/pgfplotstableshared.code.tex @@ -56,7 +56,6 @@ \newif\ifpgfplotstable@firstline@is@header \newcount\c@pgfplotstable@counta \newtoks\t@pgfplotstable@a -\newwrite\pgfplotstable@outfile \newif\ifpgfplots@addplotimpl@readcompletely % should always be false; use only in grouped internal macros \newif\ifpgfplots@table@options@areset @@ -97,6 +96,8 @@ /pgfplots/table/z error expr/.initial=, /pgfplots/table/ignore chars/.initial=, /pgfplots/table/white space chars/.initial=, + /pgfplots/table/comment chars/.initial=, + /pgfplots/table/skip first n/.initial=0, /pgfplots/table/trim cells/.is if=pgfplotstable@trimcells, /pgfplots/table/trim cells/.default=true, /pgfplots/table/read completely/.is choice, @@ -481,9 +482,31 @@ \expandafter\pgfplotstablegetcolumnbyname\pgfplotstable@loc@TMPc\of#2\to{#3}% }% +% Defines #3 to be the column name of the column with index '#1'. +% +% #1: a column index (starting with 0) +% #2: a loaded table structure +% #3: an output macro name. \def\pgfplotstablegetcolumnnamebyindex#1\of#2\to#3{% \pgfplotslistselect#1\of#2\to#3\relax }% + +% Defines #3 to be the column index of the column with name '#1'. +% +% #1: a column name +% #2: a loaded table structure +% #3: an output macro name which will be filled with the index (or -1 +% if there is no such index) +\def\pgfplotstablegetcolumnindexforname#1\of#2\to#3{% + \def#3{-1}% + \edef\pgfplotstablegetcolumnindexforname@@{#1}% + \pgfplotstableforeachcolumn{#2}\as\pgfplotstablegetcolumnindexforname@{% + \relax + \ifx\pgfplotstablegetcolumnindexforname@\pgfplotstablegetcolumnindexforname@@ + \edef#3{\pgfplotstablecol}% + \fi + }% +}% \def\pgfplotstablegetcolumnbyindex#1\of#2\to#3{% \pgfplotslistselect#1\of#2\to#3\relax \expandafter\pgfplotstablegetcolumnbyname#3\of#2\to{#3}% @@ -664,7 +687,7 @@ }% }% \long\def\pgfplotstableread@impl@collectfirstarg#1#2{% - \pgfutil@ifnextchar t{% + \pgfplotsutil@ifnextchar t{% \pgfplotstableread@impl@@{#1}{#2}% }{% \pgfplotstableread@impl@{#1}{#2}% @@ -752,6 +775,15 @@ \pgfplotstableread@inlinefalse \fi % + % optimizations: + \pgfkeysgetvalue{/pgfplots/table/comment chars}\pgfplots@loc@TMPd + \ifx\pgfplots@loc@TMPd\pgfutil@empty + \let\pgfplotstableread@checkspecial@line@default=\relax + \fi + \pgfkeysgetvalue{/pgfplots/table/skip first n}\pgfplots@loc@TMPd + \ifx\pgfplots@loc@TMPd\pgfutil@empty \let\pgfplotstableread@check@skipfirstn=\relax \fi + \ifnum\pgfplots@loc@TMPd=0 \let\pgfplotstableread@check@skipfirstn=\relax \fi + % \ifpgfplotstableread@inline \def\pgfplotstableread@impl@fCLOSE{}% \let\pgfplotstableread@loop@over@lines=\pgfplotstableread@loop@over@lines@frominline% @@ -877,6 +909,8 @@ \pgfplotstableset@every@table{#2}{#1}% \fi % + \def\pgfplotstablename{\pgfplotstable@colnames@glob}% provide the name of the actual table struct (during \pgfplotstableread, only partial functionality is available!) + % % local counter definitions: \ifpgfplots@tableread@use@begingroup \let\pgfplotstableread@lineno=\c@pgf@counta @@ -1024,10 +1058,17 @@ }% }% +\def\pgfplotstableread@check@skipfirstn{% + \ifnum\pgfplotstableread@lineno<\pgfkeysvalueof{/pgfplots/table/skip first n} % + \pgfplotstableread@skiplinetrue + \fi +}% + % PRECONDITION: % \pgfplotstable@LINE contains the current input line. \def\pgfplotstableread@loop@processnextline{% \expandafter\pgfplotstableread@checkspecial@line\pgfplotstable@LINE\pgfplotstable@EOI + \pgfplotstableread@check@skipfirstn \ifpgfplotstableread@skipline \def\pgfplotstableread@gnuplotcheck{####x y type}% \ifx\pgfplotstableread@gnuplotcheck\pgfplotstable@LINE @@ -1055,6 +1096,7 @@ \fi \pgfplotstableread@impl@DO\pgfplotstableread@impl@countcols@and@identifynames@NEXT\pgfplotstable@LINE \pgfplotstableread@countset\pgfplotstableread@numcols{\pgfplotstableread@curcol}% + \edef\pgfplotstablecols{\thepgfplotstableread@numcols}% \pgfplotstableread@countreset\pgfplotstableread@curcol % Create empty column lists: \pgfplotstableread@create@column@lists @@ -1109,30 +1151,78 @@ % WARNING: this routine is also used in pgfplots.code.tex ... \def\pgfplotstableread@checkspecial@line{% - \pgfutil@ifnextchar##{% + \futurelet\pgfplotstableread@tmp\pgfplotstableread@checkspecial@line@ +}% +\def\pgfplotstableread@checkspecial@line@{% + \pgfplotstableread@skiplinefalse + \let\pgfplotstableread@checkspecial@line@@\pgfplotstableread@impl@gobble% + % + \let\pgfplotstableread@tmpb=##% + \ifx\pgfplotstableread@tmp\pgfplotstableread@tmpb \pgfplotstableread@skiplinetrue - \pgfplotstableread@impl@gobble - }{% - \pgfutil@ifnextchar${% - \pgfplotstableread@process@flags@line - }{% - \pgfutil@ifnextchar\pgfplotstable@EOI{% + \else + \let\pgfplotstableread@tmpb=$% + \ifx\pgfplotstableread@tmp\pgfplotstableread@tmpb + \let\pgfplotstableread@checkspecial@line@@=\pgfplotstableread@process@flags@line + \else + \let\pgfplotstableread@tmpb=\pgfplotstable@EOI% + \ifx\pgfplotstableread@tmp\pgfplotstableread@tmpb \pgfplotstableread@skiplinetrue \pgfplotsscanlinecomplete% the line is empty; same as \par! - \pgfplotstableread@impl@gobble - }{% - \pgfutil@ifnextchar\par{% + \else + \let\pgfplotstableread@tmpb=\par% + \ifx\pgfplotstableread@tmp\pgfplotstableread@tmpb \pgfplotstableread@skiplinetrue - \pgfplotsscanlinecomplete - \pgfplotstableread@impl@gobble - }{% - \pgfplotstableread@skiplinefalse - \pgfplotstableread@impl@gobble - }% - }% + \pgfplotsscanlinecomplete% the line is empty; + \else + \pgfplotstableread@checkspecial@line@default% + \fi + \fi + \fi + \fi + \pgfplotstableread@checkspecial@line@@ +}% +\def\pgfplotstableread@checkspecial@line@default{% + % this routine can be optimized away + \pgfkeysgetvalue{/pgfplots/table/comment chars}\pgfplots@loc@TMPd + \ifx\pgfplots@loc@TMPd\pgfutil@empty + \else + \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplots@loc@TMPd}\as\pgfplots@loc@TMPd{% + \expandafter\let\expandafter\pgfplotstableread@tmpb\pgfplots@loc@TMPd + \ifx\pgfplotstableread@tmp\pgfplotstableread@tmpb + \pgfplotstableread@skiplinetrue + \fi }% - }% -} + \fi +}% + +%-------------------------------------------------- +% \def\pgfplotstableread@checkspecial@line{% +% \pgfutil@ifnextchar##{% +% \pgfplotstableread@skiplinetrue +% \pgfplotstableread@impl@gobble +% }{% +% \pgfutil@ifnextchar${% +% \pgfplotstableread@process@flags@line +% }{% +% \pgfutil@ifnextchar\pgfplotstable@EOI{% +% \pgfplotstableread@skiplinetrue +% \pgfplotsscanlinecomplete% the line is empty; same as \par! +% \pgfplotstableread@impl@gobble +% }{% +% \pgfutil@ifnextchar\par{% +% \pgfplotstableread@skiplinetrue +% \pgfplotsscanlinecomplete +% \pgfplotstableread@impl@gobble +% }{% +% \pgfplotstableread@skiplinefalse +% \pgfplotstableread@impl@gobble +% }% +% }% +% }% +% }% +% } +%-------------------------------------------------- \long\def\pgfplotstableread@process@flags@line$flags {% %\pgfplots@message{Ignoring flags line ...}% @@ -1435,7 +1525,7 @@ \else \begingroup \t@pgfplots@tokc={#1}% - \pgfplotstable@error{Table '\pgfplotstableread@filename' has too much columns in line \thepgfplotstableread@lineno: Ignoring '\the\t@pgfplots@tokc'. Please verify that every cell entry is separated correctly (use braces {<cell entry>} if necessary). This error is not critical}% + \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}% \endgroup \fi } @@ -1648,17 +1738,14 @@ }% \let\pgfplotstablecol=\relax }% +\let\pgfplotstableforeachcolumn@orig=\pgfplotstableforeachcolumn + % A variant of \pgfplotstableforeachcolumn which is used inside of % \pgfplotstableread to listener. % % It is used as \pgfplotstableforeachcolumn\as\cur{<do something with \cur>} -\long\def\pgfplotstableforeachcolumn@listener\as#1#2{% - \def\pgfplotstablecol{0}% - \pgfplotslistforeachungrouped\pgfplotstable@colnames@glob\as#1{% - #2\relax% - \pgfplotsutil@advancestringcounter\pgfplotstablecol - }% - \let\pgfplotstablecol=\relax +\long\def\pgfplotstableforeachcolumn@listener#1\as#2#3{% + \pgfplotstableforeachcolumn@orig\pgfplotstable@colnames@glob\as{#2}{#3}% }% % Reports every element t_{ij} for a fixed column j (in read-only diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_loader.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_loader.code.tex index 180ca8ce195..42499218fef 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_loader.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_loader.code.tex @@ -17,7 +17,7 @@ % #2: for normal processing. \def\pgfplots@ifneedspgfcompabitibilitycode#1#2{% %\pgfkeysifdefined{/pgf/number format/sci precision/.@cmd}{#2}{#1}% - \pgfutil@ifundefined{tikzifinpicture}{#1}{#2}% + \pgfutil@ifundefined{pgfmath@tonumber@notrailingzero}{#1}{#2}% }% \pgfplots@ifneedspgfcompabitibilitycode @@ -45,4 +45,6 @@ } {}% + + \endinput diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_misc.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_misc.code.tex index 12d308255bd..dad89e7c7e1 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_misc.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_misc.code.tex @@ -2,13 +2,14 @@ % ====================================================== % compatibility with PGF 2.0 % ====================================================== +\def\pgfutil@gobble@until@relax#1\relax{} \expandafter\ifx\csname w@pgf@writea\endcsname\relax -\newwrite\w@pgf@writea +\csname newwrite\endcsname\w@pgf@writea \fi \expandafter\ifx\csname r@pgf@reada\endcsname\relax -\newread\r@pgf@reada +\csname newread\endcsname\r@pgf@reada \fi \let\pgfutil@inputcheck=\r@pgf@reada @@ -442,3 +443,333 @@ \global\pgf@picmaxy=-16000pt\relax% \global\pgf@picminy=16000pt\relax% }% + +% from pgfcorepathconstruct.code.tex: + + +\def\pgfpatharctomaxstepsize{45} + +% A specialized arc operation for an arc on an (axis--parallel) ellipse. +% +% In contrast to \pgfpatharc, it explicitly interpolates start- and end points. +% +% In contrast to \pgfpatharcto, this routine is numerically stable and +% quite fast since it relies on a lot of precomputed information. +% +% #1 center of ellipse +% #2 angle of last path position inside of the ellipse +% #3 end angle +% #4 end point (a \pgfpoint) +% #5 xradius +% #6 yradius +% #7 the ratio xradius/yradius of the ellipse +% #8 the ratio yradius/xradius of the ellipse +% Example: +% \def\cx{1cm}% center x +% \def\cy{1cm}% center y +% \def\startangle{0}% +% \def\endangle{45}% +% \def\a{5cm}% xradius +% \def\b{10cm}% yradius +% \pgfmathparse{\a/\b}\let\abratio=\pgfmathresult +% \pgfmathparse{\b/\a}\let\baratio=\pgfmathresult +% +% \pgfpathmoveto{\pgfpoint{\cx+\a*cos(\startangle)}{\cy+\b*sin(\startangle)}}% +% \pgfpatharctoprecomputed +% {\pgfpoint{\cx}{\cy}} +% {\startangle} +% {\endangle} +% {\pgfpoint{\cx+\a*cos(\endangle)}{\cy+\b*sin(\endangle)}}% +% {\a} +% {\b} +% {\abratio} +% {\baratio} +% +\def\pgfpatharctoprecomputed#1#2#3#4#5#6#7#8{% + \begingroup + % Implementation idea: + % + % let + % m = center (#1) + % \gamma_0 = start angle + % \gamma_1 = end angle + % a = x radius + % b = y radius + % + % an axis parallel ellipse is parameterized by + % C(\gamma) = m + ( a cos(\gamma), b sin(\gamma) ), \gamma in [0,360]. + % + % Now, consider the segment \gamma(t), + % \gamma:[0,1] -> [\gamma_0,\gamma_1], + % t -> \gamma_0 + t(\gamma_1 - \gamma_0) + % and + % C(\gamma(t)) which is defined on [0,1]. + % + % I'd like to approximate the arc by one or more cubic bezier + % splines which interpolate through the last and first provided + % points. + % + % In general, a Bezier spline C:[0,1] -> \R of order n fulfills + % C'(0) = n ( P_1 - P_0 ), + % C'(1) = n ( P_n - P_{n-1} ). + % For n=3 and given P_0 and P_3, I can directly compute P_1 and P_2 once I know + % the derivatives at t=0 and t=1. + % + % The derivatives in our case are + % ( C \circ \gamma )'(t) = C'[\gamma(t)] * \gamma'(t) + % = ( -a pi/180 sin(\gamma(t)), b pi/180 cos(\gamma(t)) ) * (\gamma_1 - \gamma_0). + % The pi/180 comes into play since we are working with degrees. + % + % Expression (C\circ\gamma)'(0) using P_0 and (C \circ \gamma)'(1) + % using P_3 yields the expressions + % (C \circ \gamma)'(0) = + % pi/180 * (\gamma_1 - \gamma_0)* [ - a/b(P_0^y - my), b/a (P_0^x - mx) ] + % (C \circ \gamma)'(1) = + % pi/180 * (\gamma_1 - \gamma_0)* [ - a/b(P_3^y - my), b/a (P_3^x - mx) ] + % + % defining + % scaleA = a/b * pi / (3*180) * (\gamma_1 - \gamma_0) + % and + % scaleB = b/a * pi / (3*180) * (\gamma_1 - \gamma_0) + % yields the direct expressions for the intermediate bezier + % control points + % + % P_1 = [ + % P_0^x - scaleA* ( P_0^y -my), + % P_0^y + scaleB* ( P_0^x -mx) ] + % and + % P_2 = [ + % P_3^x + scaleA* ( P_3^y -my), + % P_3^y - scaleB* ( P_3^x -mx) ]. + % + % This works fast, with few operations, if + % - a/b and b/a are known in advance + % - P_0 and P_3 are known in advance + % - \gamma_0 and \gamma_1 are known. + % + % It is also reliable if (\gamma_1 - \gamma_0) is small + % + \pgf@process{#1}% + \edef\pgfpath@center@x{\the\pgf@x}% + \edef\pgfpath@center@y{\the\pgf@y}% + \def\pgfpath@completearcend{#4}% + % compute scale (#3-#2) * pi/(3*180) = (#3 - #2) * pi/27 * 1/20 + % splitting pi/(3*180) into two scales has higher TeX accuracy + \pgf@xa=#2pt + \pgf@xb=#3pt + \edef\pgfpath@startangle{#2pt}% + \edef\pgfpath@endangle{\pgf@sys@tonumber\pgf@xb}% + % + \pgf@ya=\pgf@xb + \advance\pgf@ya by-\pgf@xa + % + \ifx\pgfpatharctomaxstepsize\pgfutil@empty + \def\pgfpath@N{1}% + \pgf@xc=\pgf@ya + \else + \pgf@xc=\pgf@ya% compute N = floor((gamma_1 - gamma_0) / max) +1 + \ifdim\pgf@xc<0pt + \multiply\pgf@xc by-1 + \fi + \divide\pgf@xc by\pgfpatharctomaxstepsize\relax + \afterassignment\pgfutil@gobble@until@relax + \c@pgf@counta=\the\pgf@xc\relax + \advance\c@pgf@counta by1 + \edef\pgfpath@N{\the\c@pgf@counta}% + % + \pgf@xc=\pgf@ya + \divide\pgf@xc by\c@pgf@counta + \fi + % + \edef\pgfpath@h{\pgf@sys@tonumber\pgf@xc}% + % +%\message{pgfpathellipse: using N =\pgfpath@N\space spline points y0 = \pgfpath@startangle, y0+i*h, yN=\pgfpath@endangle, i=1,...,(\pgfpath@N-1), with h=\pgfpath@h\space mesh width (total arc angle \pgf@sys@tonumber\pgf@ya).}% + % + % + \pgf@xc=0.116355283466289\pgf@xc % pi/27 + \divide\pgf@xc by20 + \pgf@xa=#7\pgf@xc + \edef\pgfpath@scale@A{\pgf@sys@tonumber\pgf@xa}% + \pgf@xa=#8\pgf@xc + \edef\pgfpath@scale@B{\pgf@sys@tonumber\pgf@xa}% + % + % compute intermediate spline segments for + % i = 1,...,N-1 + % this is a no-op for N=1. + \c@pgf@countd=1 + \pgfutil@loop + \ifnum\c@pgf@countd<\pgfpath@N\relax + % + \pgf@xa=\pgfpath@startangle % compute \pgf@xa = y_0 + i*h + \pgf@xb=\pgfpath@h pt + \multiply\pgf@xb by\c@pgf@countd + \advance\pgf@xa by\pgf@xb + \edef\pgfpath@angle@i{\pgf@sys@tonumber\pgf@xa}% +%\message{angle \the\c@pgf@countd: \pgfpath@angle@i...}% + % + \pgfpatharcofellipse@{% + \pgfpoint + {\pgfpath@center@x + #5*cos(\pgfpath@angle@i)} + {\pgfpath@center@y + #6*sin(\pgfpath@angle@i)} + }% + % + \advance\c@pgf@countd by1 + \pgfutil@repeat + % + % compute final spline segment. It only differs insofar as the + % final point is already known explicitly and should be + % interpolated without additional math error. +%\message{angle \pgfpath@N: \pgfpath@endangle...}% + \pgfpatharcofellipse@{\pgfpath@completearcend}% + \endgroup +}% +\def\pgfpatharcofellipse@#1{% + \begingroup + \pgf@process{#1}% + \edef\pgfpath@endpt{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% + % + \pgfpathcurveto{ + \begingroup + \global\pgf@x=\pgf@path@lastx + \global\pgf@y=\pgf@path@lasty + \pgf@xa=\pgf@x \advance\pgf@xa by-\pgfpath@center@x + \pgf@ya=\pgf@y \advance\pgf@ya by-\pgfpath@center@y + \global\advance\pgf@x by-\pgfpath@scale@A\pgf@ya + \global\advance\pgf@y by \pgfpath@scale@B\pgf@xa + \endgroup + }{% + \begingroup + \pgfpath@endpt + \pgf@xa=\pgf@x \advance\pgf@xa by-\pgfpath@center@x + \pgf@ya=\pgf@y \advance\pgf@ya by-\pgfpath@center@y + \global\advance\pgf@x by \pgfpath@scale@A\pgf@ya + \global\advance\pgf@y by-\pgfpath@scale@B\pgf@xa + \endgroup + }{% + \pgfpath@endpt + }% + \endgroup +} + +% bugfix for pgf 2.10, pgfmathfunctions.basic.code.tex : +% +\newif\ifpgfmath@divide@period +\def\pgfmathdivide@#1#2{% + \begingroup% + \pgfmath@x=#1pt\relax% + \pgfmath@y=#2pt\relax% + \let\pgfmath@sign=\pgfmath@empty% + \ifdim0pt=\pgfmath@y% + \pgfmath@error{You've asked me to divide `#1' by `#2', % + but I cannot divide any number by `#2'}% + \fi% + \afterassignment\pgfmath@xa% + \c@pgfmath@counta\the\pgfmath@y\relax% + \ifdim0pt=\pgfmath@xa% + \divide\pgfmath@x by\c@pgfmath@counta% + \else% + \ifdim0pt>\pgfmath@x% + \def\pgfmath@sign{-}% + \pgfmath@x=-\pgfmath@x% + \fi% + \ifdim0pt>\pgfmath@y% + \expandafter\def\expandafter\pgfmath@sign\expandafter{\pgfmath@sign-}% + \pgfmath@y=-\pgfmath@y% + \fi% + \ifdim1pt>\pgfmath@y% + \pgfmathreciprocal@{\pgfmath@tonumber{\pgfmath@y}}% + \pgfmath@x=\pgfmath@sign\pgfmathresult\pgfmath@x% + \else% + \def\pgfmathresult{0}% + \pgfmath@divide@periodtrue% + \c@pgfmath@counta=0\relax% + \pgfmathdivide@@% + \pgfmath@x=\pgfmath@sign\pgfmathresult pt\relax% + \fi% + \fi% + \pgfmath@returnone\pgfmath@x% + \endgroup% +} +\def\pgfmath@small@number{0.00002} +\def\pgfmathdivide@@{% + \let\pgfmath@next=\relax% + \ifdim\pgfmath@small@number pt<\pgfmath@x% + \ifdim\pgfmath@small@number pt<\pgfmath@y% + \ifdim\pgfmath@y>\pgfmath@x% + \ifpgfmath@divide@period% + \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult.}% + \pgfmath@divide@periodfalse% + \fi% + \pgfmathdivide@dimenbyten\pgfmath@y% + \ifdim\pgfmath@y>\pgfmath@x% + \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult0}% + \fi% + \else% + \c@pgfmath@counta=\pgfmath@x% + \c@pgfmath@countb=\pgfmath@y% + \divide\c@pgfmath@counta by\c@pgfmath@countb% + \pgfmath@ya=\c@pgfmath@counta\pgfmath@y% + \advance\pgfmath@x by-\pgfmath@ya% + \def\pgfmath@next{% + \toks0=\expandafter{\pgfmathresult}% + \edef\pgfmathresult{\the\toks0 \the\c@pgfmath@counta}% + }% + \ifpgfmath@divide@period + \else + % we are behind the period. It may happen that the + % result is more than one digit - in that case, + % introduce special handling: + \ifnum\c@pgfmath@counta>9 % + \expandafter\pgfmathdivide@advance@last@digit\pgfmathresult CCCCC\@@ + \advance\c@pgfmath@counta by-10 % + \ifnum\c@pgfmath@counta=0 + \let\pgfmath@next=\relax + \fi + \fi + \fi + \pgfmath@next + \fi% + \let\pgfmath@next=\pgfmathdivide@@% + \fi% + \fi% + \pgfmath@next% +} + +% advances the last digit found in the number. Any missing digits are +% supposed to be filled with 'C'. +\def\pgfmathdivide@advance@last@digit#1.#2#3#4#5#6#7\@@{% + \pgfmath@ya=\pgfmathresult pt % + \if#2C% + \pgfmath@xa=1pt % + \else + \if#3C% + \pgfmath@xa=0.1pt % + \else + \if#4C% + \pgfmath@xa=0.01pt % + \else + \if#5C% + \pgfmath@xa=0.001pt % + \else + \if#6C% + \pgfmath@xa=0.0001pt % + \else + \pgfmath@xa=0.00001pt % + \fi + \fi + \fi + \fi + \fi + \advance\pgfmath@ya by\pgfmath@xa + \edef\pgfmathresult{\pgfmath@tonumber@notrailingzero\pgfmath@ya}% +}% + +{ +\catcode`\p=12 +\catcode`\t=12 +\gdef\Pgf@geT@NO@TRAILING@ZERO#1.#2pt{% + #1.% + \ifnum#2=0 \else #2\fi +} +} +\def\pgfmath@tonumber@notrailingzero#1{\expandafter\Pgf@geT@NO@TRAILING@ZERO\the#1} diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfcoreexternal.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfcoreexternal.code.tex index 8f769db849b..5b9be1a3087 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfcoreexternal.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfcoreexternal.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% @@ -27,16 +27,30 @@ % % See the file doc/generic/pgf/licenses/LICENSE for more details. -\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/basiclayer/pgfcoreexternal.code.tex,v 1.9 2010/07/14 19:32:13 ludewich Exp $ +\ProvidesFileRCS $Header: /cvsroot/pgf/pgf/generic/pgf/basiclayer/pgfcoreexternal.code.tex,v 1.17 2010/09/01 08:56:40 ludewich Exp $ \newif\ifpgfexternal@aux@in@dpth +\newif\ifpgfexternal@info \pgfkeys{ - /pgf/images/include external/.code={\pgfimage{#1}}, - /pgf/images/aux in dpth/.is if=pgfexternal@aux@in@dpth, - /pgf/images/aux in dpth/.default=true + /pgf/images/include external/.code={\pgfimage{#1}}, + /pgf/images/aux in dpth/.is if=pgfexternal@aux@in@dpth, + /pgf/images/aux in dpth/.default=true, + /pgf/images/trim external/.code n args={4}{% + \def\pgf@external@kern@left{#1}% + \def\pgf@external@kern@bottom{#2}% + \def\pgf@external@kern@right{#3}% + \def\pgf@external@kern@top{#4}% + \ifx\pgf@external@kern@left\pgfutil@empty\def\pgf@external@kern@left{0sp}\fi% + \ifx\pgf@external@kern@bottom\pgfutil@empty\def\pgf@external@kern@bottom{0sp}\fi% + \ifx\pgf@external@kern@right\pgfutil@empty\def\pgf@external@kern@right{0sp}\fi% + \ifx\pgf@external@kern@top\pgfutil@empty\def\pgf@external@kern@top{0sp}\fi% + }, + /pgf/images/trim external={1truein}{1truein}{1truein}{1truein}, + /pgf/images/external info/.is if=pgfexternal@info, + /pgf/images/external info/.default=true, } % The external read/write mechanism is used as follows: @@ -103,68 +117,68 @@ \ifx\pgf@tempa\pgf@tempb% \else% \pgf@external@grabshipouttrue% - \pgfexternal@nofiles% see also \pgf@external@init@aux@in@dpth - \ifpgfexternalreadmainaux - % and reset the jobname. This should allow to handle any - % \label/\ref constructions which are stored in \jobname.aux (and - % which won't be found otherwise) - \gdef\jobname{#1}% - \fi - \ifpgfexternal@aux@in@dpth - \csname newwrite\endcsname\w@pgfexternal@auxout - \fi + \pgfexternal@nofiles% see also \pgf@external@init@aux@in@dpth + \ifpgfexternalreadmainaux + % and reset the jobname. This should allow to handle any + % \label/\ref constructions which are stored in \jobname.aux (and + % which won't be found otherwise) + \gdef\jobname{#1}% + \fi + \ifpgfexternal@aux@in@dpth + \csname newwrite\endcsname\w@pgfexternal@auxout + \fi \fi% \gdef\pgfrealjobname##1{}% avoid multiple calls. } \def\pgfexternal@nofiles{% - % replace \relax. The \nofiles macros does - % \let\makeglossary=\relax - % but the glossary.sty calls \renewcommand\makeglossary (which - % will fail if \makeglossary=\relax). Stupid, but it works. - \let\pgfexternal@nofiles@=\relax - \def\relax{\relax}% - % - % suppress generation of LaTeX .aux, .toc etc files. - % generation of these files is not thread-safe. - % the \csname \endcsname yields \relax if \nofiles doesn't exist. - \csname nofiles\endcsname - % - \let\relax=\pgfexternal@nofiles@ + % replace \relax. The \nofiles macros does + % \let\makeglossary=\relax + % but the glossary.sty calls \renewcommand\makeglossary (which + % will fail if \makeglossary=\relax). Stupid, but it works. + \let\pgfexternal@nofiles@=\relax + \def\relax{\relax}% + % + % suppress generation of LaTeX .aux, .toc etc files. + % generation of these files is not thread-safe. + % the \csname \endcsname yields \relax if \nofiles doesn't exist. + \csname nofiles\endcsname + % + \let\relax=\pgfexternal@nofiles@ }% \newif\ifpgf@external@grabshipout \newbox\pgfexternal@startupbox \pgfutil@ifundefined{AtBeginDocument}{}{% - \AtBeginDocument{% - \ifpgf@external@grabshipout% - \global\let\pgfexternal@originalshipout=\shipout% - \global\def\shipout{\setbox\pgfpic=}% - \maxdeadcycles=10000% - % Ok, gather everything we have seen up to now in a box. This box - % will contain any specials that have been used. - {% - \output{\global\setbox\pgfexternal@startupbox=\vbox{\csname @begindvi\endcsname\unvbox255}}% - \hbox{}\eject% - }% - \fi% - } + \AtBeginDocument{% + \ifpgf@external@grabshipout% + \global\let\pgfexternal@originalshipout=\shipout% + \global\def\shipout{\setbox\pgfpic=}% + \maxdeadcycles=10000% + % Ok, gather everything we have seen up to now in a box. This box + % will contain any specials that have been used. + {% + \output{\global\setbox\pgfexternal@startupbox=\vbox{\csname @begindvi\endcsname\unvbox255}}% + \hbox{}\eject% + }% + \fi% + } }% \pgfutil@ifundefined{AtEndDocument}{}{% - \AtEndDocument{% - \ifpgf@external@grabshipout - \pgfutil@ifundefined{pgfexternal@did@a@shipout}{% - \pgfexternal@error@no@shipout - }{}% - \fi - }% + \AtEndDocument{% + \ifpgf@external@grabshipout + \pgfutil@ifundefined{pgfexternal@did@a@shipout}{% + \pgfexternal@error@no@shipout + }{}% + \fi + }% } % This will be overwritten by the tikz external lib if it is loaded. \def\pgfexternal@error@no@shipout{% - \PackageError{pgf}{Sorry, image externalization failed: the resulting image was EMPTY. I tried to externalize '\pgfactualjobname'. Perhaps there was a typo somewhere? Please check that your document contains '\string\beginpgfgraphicnamed{\pgfactualjobname} ... \string\endpgfgraphicnamed'}% + \PackageError{pgf}{Sorry, image externalization failed: the resulting image was EMPTY. I tried to externalize '\pgfactualjobname'. Perhaps there was a typo somewhere? Please check that your document contains '\string\beginpgfgraphicnamed{\pgfactualjobname} ... \string\endpgfgraphicnamed'}% }% @@ -215,7 +229,7 @@ } \long\def\pgf@replacepicturebygraphic#1\endpgfgraphicnamed{% - \expandafter\pgfincludeexternalgraphics\expandafter{\pgf@filename}\unskip + \expandafter\pgfincludeexternalgraphics\expandafter{\pgf@filename}\unskip } % This is almost the same as \includegraphics{#1}, but it checks @@ -226,22 +240,22 @@ % collected for the external graphics (references). They start after % the first line (if any). \def\pgfincludeexternalgraphics#1{% - \begingroup - \pgfexternalreaddpth{#1}% - \pgfkeysifdefined{/pgf/images/include external/#1/.@cmd}{% - \pgfkeysgetvalue{/pgf/images/include external/#1/.@cmd}\pgf@tempa - \pgfkeysgetlet{/pgf/images/include external/.@cmd}\pgf@tempa - }{}% - \setbox1=\hbox{\pgfkeysvalueof{/pgf/images/include external/.@cmd}{#1}\pgfeov}% - \ifdim\pgfexternaltrimleft=0sp \else \kern\pgfexternaltrimleft\relax \fi - \ifdim\pgfexternaldepth=0pt - \box1 - \else - \dimen0=\pgfexternaldepth\relax - \hbox{\lower\dimen0 \box1 }% - \fi - \ifdim\pgfexternaltrimright=0sp \else \kern\pgfexternaltrimright\relax \fi - \endgroup + \begingroup + \pgfexternalreaddpth{#1}% + \pgfkeysifdefined{/pgf/images/include external/#1/.@cmd}{% + \pgfkeysgetvalue{/pgf/images/include external/#1/.@cmd}\pgf@tempa + \pgfkeyslet{/pgf/images/include external/.@cmd}\pgf@tempa + }{}% + \setbox1=\hbox{\pgfkeysvalueof{/pgf/images/include external/.@cmd}{#1}\pgfeov}% + \ifdim\pgfexternaltrimleft=0sp \else \kern\pgfexternaltrimleft\relax \fi + \ifdim\pgfexternaldepth=0pt + \box1 + \else + \dimen0=\pgfexternaldepth\relax + \hbox{\lower\dimen0 \box1 }% + \fi + \ifdim\pgfexternaltrimright=0sp \else \kern\pgfexternaltrimright\relax \fi + \endgroup } % Defines \pgfexternaldepth to be the depth of the external picture @@ -252,81 +266,88 @@ % .dpth file (it appends it to the main aux file). % \def\pgfexternalreaddpth#1{% - % no \begingroup. Handle that manually: - \edef\pgfexternalreaddpth@restore{% - \noexpand\endlinechar=\the\endlinechar\space - \noexpand\catcode`\noexpand\@=\the\catcode`\@\space - }% - % - \def\pgfexternaldepth{0sp}% - \def\pgfexternaltrimleft{0sp}% - \def\pgfexternaltrimright{0sp}% - \endlinechar=-1 % suppress white space at end - \catcode`\@=11 - \openin\r@pgf@reada=#1.dpth - \pgfincludeexternalgraphics@read@dpth - % - \pgfexternalreaddpth@restore + % no \begingroup. Handle that manually: + \edef\pgfexternalreaddpth@restore{% + \noexpand\endlinechar=\the\endlinechar\space + \noexpand\catcode`\noexpand\@=\the\catcode`\@\space + }% + % + \def\pgfexternaldepth{0sp}% + \def\pgfexternaltrimleft{0sp}% + \def\pgfexternaltrimright{0sp}% + \endlinechar=-1 % suppress white space at end + \catcode`\@=11 + \openin\r@pgf@reada=#1.dpth + \pgfincludeexternalgraphics@read@dpth + % + \pgfexternalreaddpth@restore }% % % The .dpth consists of 0-N lines, where each is either a single % dimension (the box' depth) or something which belongs to the .aux % file (such lines will always start with a macro). \def\pgfincludeexternalgraphics@read@dpth{% - \ifeof\r@pgf@reada - \closein\r@pgf@reada - \else - \read\r@pgf@reada to\pgfincludeexternalgraphics@auxline - \ifx\pgfincludeexternalgraphics@auxline\pgfutil@empty - \else - \expandafter\pgfincludeexternalgraphics@read@dpth@line\pgfincludeexternalgraphics@auxline\pgfincludeexternalgraphics@read@dpth@line@EOI - \fi - \expandafter\pgfincludeexternalgraphics@read@dpth - \fi + \ifeof\r@pgf@reada + \closein\r@pgf@reada + \else + \read\r@pgf@reada to\pgfincludeexternalgraphics@auxline + \ifx\pgfincludeexternalgraphics@auxline\pgfutil@empty + \else + \expandafter\pgfincludeexternalgraphics@read@dpth@line\pgfincludeexternalgraphics@auxline\pgfincludeexternalgraphics@read@dpth@line@EOI + \fi + \expandafter\pgfincludeexternalgraphics@read@dpth + \fi }% -\def\pgfexternal@restore#1{}% - -\long\def\pgfincludeexternalgraphics@read@dpth@line#1#2\pgfincludeexternalgraphics@read@dpth@line@EOI{% - \ifcat\noexpand#1\relax - % Ah -- the first token is a control sequence. It belongs to - % the .aux file. - % - \ifx#1\pgfexternal@restore - #2% - \else - % do NOT execute #1#2! many LaTeX commands don't support it (\label for example) - \pgfutil@ifundefined{if@filesw}{% - % sorry, .aux file support only for latex - }{% - % append to main .aux file (for forward references) - \if@filesw - {% - \toks0={#1#2}% - % believe it or not, but the - % \def\dpthimport{...}\dpthimport *makes* a - % difference! In ensures any occuring `##' characters are properly expanded to `#'. - \immediate\write\@auxout{\noexpand\def\noexpand\dpthimport{\the\toks0 }\noexpand\dpthimport }% - }% - \fi - }% - \fi - \else% it is the depth (which is simply a number for backwards compatibility) - \def\pgfexternaldepth{#1#2}% - \fi +\def\pgfexternal@restore#1{#1}% + +\long\def\pgfincludeexternalgraphics@read@dpth@line@getfirst#1#2\pgfincludeexternalgraphics@read@dpth@line@EOI{% + \def\pgf@first{#1}% +}% +\long\def\pgfincludeexternalgraphics@read@dpth@line#1\pgfincludeexternalgraphics@read@dpth@line@EOI{% + \pgfincludeexternalgraphics@read@dpth@line@getfirst#1\pgfincludeexternalgraphics@read@dpth@line@EOI + \expandafter\ifcat\expandafter\noexpand\pgf@first\relax + % Ah -- the first token is a control sequence. It belongs to + % the .aux file. + % + \expandafter\ifx\pgf@first\pgfexternal@restore + #1% + \else + % do NOT execute #1! many LaTeX commands don't support it (\label for example) + \pgfutil@ifundefined{if@filesw}{% + % sorry, .aux file support only for latex + }{% + % append to main .aux file (for forward references) + \if@filesw + {% + \toks0={#1}% + % believe it or not, but the + % \def\dpthimport{...}\dpthimport *makes* a + % difference! In ensures any occuring `##' characters are properly expanded to `#'. + \immediate\write\@auxout{% + \noexpand\def\noexpand\dpthimport{\the\toks0}\noexpand\dpthimport}% + }% + \fi + }% + \fi + \else% it is the depth (which is simply a number for backwards compatibility) + \def\pgfexternaldepth{#1}% + \fi }% -% Stores '#1' into (expanded!) into the .dpth file of the currently +% Stores '#1' (expanded!) into the .dpth file of the currently % exported image. % -% Just before the image is included into the main document, '#1' will be -% invoked. -% % This command has only an effect if an image is being exported. +% +% The stored contents will be read in the context where +% /pgf/images/include external is active (i.e. by +% \pgfexternalreaddpth). +% \def\pgfexternalstorecommand#1{% }% \def\pgfexternalstorecommand@isexporting#1{% - \immediate\write\w@pgfexternal@auxout{\noexpand\pgfexternal@restore{#1}}% + \immediate\write\w@pgfexternal@auxout{\noexpand\pgfexternal@restore{#1}}% }% @@ -337,10 +358,10 @@ % this method is also invoked from within the tikz external library. \def\pgf@external@grab#1{% \def\pgf@filename{#1}% - \ifpgfexternal@aux@in@dpth - \begingroup - \pgf@external@init@aux@in@dpth - \let\G@refundefinedtrue=\pgf@external@grab@refundefinedtrue + \ifpgfexternal@aux@in@dpth + \begingroup + \pgf@external@init@aux@in@dpth + \let\G@refundefinedtrue=\pgf@external@grab@refundefinedtrue \fi \gdef\pgf@trimleft@final{0sp}% \gdef\pgf@trimright@final{0sp}% @@ -353,99 +374,115 @@ \expandafter\let\expandafter\pgf@external@grab@refundefinedtrue@orig\csname G@refundefinedtrue\endcsname \def\pgf@external@grab@refundefinedtrue{% - \pgf@external@grab@refundefinedtrue@orig - \begingroup - \def\n{\pgfexternal@hat\pgfexternal@hat J}% - \pgfexternalstorecommand{% - \noexpand\immediate\noexpand\write16{\pgf@external@grab@refundefinedtrue@warning}% - \noexpand\G@refundefinedtrue - }% - \endgroup + \pgf@external@grab@refundefinedtrue@orig + \begingroup + \def\n{\pgfexternal@hat\pgfexternal@hat J}% + \pgfexternalstorecommand{% + \noexpand\immediate\noexpand\write16{\pgf@external@grab@refundefinedtrue@warning}% + \noexpand\G@refundefinedtrue + }% + \endgroup }% \def\pgf@external@grab@refundefinedtrue@warning{% - LaTeX Warning: External picture `\pgfactualjobname' contains undefined references\noexpand\on@line.\n + LaTeX Warning: External picture `\pgfactualjobname' contains undefined references\noexpand\on@line.\n }% \let\pgf@external@@protected@write@orig=\protected@write \long\def\pgf@external@@protected@write@immediate#1#2#3{% - \begingroup - \let\pgf@write@=\write - \def\write{\noexpand\immediate\pgf@write@}% - \pgf@external@@protected@write@orig{#1}{#2}{#3}% - \endgroup + \begingroup + \let\pgf@write@=\write + \def\write{\noexpand\immediate\pgf@write@}% + \pgf@external@@protected@write@orig{#1}{#2}{#3}% + \endgroup }% \def\pgf@external@init@aux@in@dpth{% - \let\pgfexternalstorecommand=\pgfexternalstorecommand@isexporting - % - % tell LaTeX to write aux files... - \csname @fileswtrue\endcsname - % ... but redirect output to the .dpth file! - \immediate\openout\w@pgfexternal@auxout=\pgf@filename.dpth - \let\@auxout=\w@pgfexternal@auxout - % ... and disable the correct page numbers. I can't get that - % (because the correct page number is only available in the - % shipout routine). Use immediate output: - \let\protected@write=\pgf@external@@protected@write@immediate + \let\pgfexternalstorecommand=\pgfexternalstorecommand@isexporting + % + % tell LaTeX to write aux files... + \csname @fileswtrue\endcsname + % ... but redirect output to the .dpth file! + \immediate\openout\w@pgfexternal@auxout=\pgf@filename.dpth + \let\@auxout=\w@pgfexternal@auxout + % ... and disable the correct page numbers. I can't get that + % (because the correct page number is only available in the + % shipout routine). Use immediate output: + \let\protected@write=\pgf@external@@protected@write@immediate }% \def\pgf@externalend@storeshifts#1{% - \immediate\write#1{\the\dp\pgfpic}% - \ifx\pgf@trimleft@final\pgfutil@empty\else - \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternaltrimleft{\pgf@trimleft@final}}}% - \fi - \ifx\pgf@trimright@final\pgfutil@empty\else - \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternaltrimright{\pgf@trimright@final}}}% - \fi + \immediate\write#1{\the\dp\pgfpic}% store the depth simply as number for backw. compat. + \ifx\pgf@trimleft@final\pgfutil@empty\else + \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternaltrimleft{\pgf@trimleft@final}}}% + \fi + \ifx\pgf@trimright@final\pgfutil@empty\else + \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternaltrimright{\pgf@trimright@final}}}% + \fi + \ifpgfexternal@info + \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternalwidth{\the\wd\pgfpic}}}% + \immediate\write#1{\noexpand\pgfexternal@restore{\noexpand\def\noexpand\pgfexternalheight{\the\dimen0}}}% + \fi } % REMARK: % this method is also invoked from within the tikz external library. \def\pgf@externalend{% \unskip\egroup\egroup% {% - \def\pgf@external@trim{0}% - \def\pgf@external@store@dpth{0}% - % - \ifdim\pgf@trimleft@final=0sp \gdef\pgf@trimleft@final{} \else\def\pgf@external@trim{1}\fi - \ifdim\pgf@trimright@final=0sp \gdef\pgf@trimright@final{} \else\def\pgf@external@trim{1}\fi - \if1\pgf@external@trim - % UNDO the trimming! export to pdf doesn't supported trimmed - % bounding boxes (has to do with the mediabox/trimbox etc). - % I'll keep the bounding box intact and store the trim information - % into the .dpth file. - \setbox\pgfpic=\hbox{% - \ifx\pgf@trimleft@final\pgfutil@empty\else\kern-\pgf@trimleft@final\fi - \box\pgfpic - \ifx\pgf@trimright@final\pgfutil@empty\else\kern-\pgf@trimright@final\fi - }% - \def\pgf@external@store@dpth{1}% - \fi - % + \def\pgf@external@trim{0}% + \def\pgf@external@store@dpth{0}% + % + \ifpgf@trim@lowlevel + \gdef\pgf@trimleft@final{}% + \gdef\pgf@trimright@final{}% + \else + \ifdim\pgf@trimleft@final=0sp \gdef\pgf@trimleft@final{} \else\def\pgf@external@trim{1}\fi + \ifdim\pgf@trimright@final=0sp \gdef\pgf@trimright@final{} \else\def\pgf@external@trim{1}\fi + \if1\pgf@external@trim + % UNDO the trimming! export to pdf doesn't supported trimmed + % bounding boxes (has to do with the mediabox/trimbox etc). + % I'll keep the bounding box intact and store the trim information + % into the .dpth file. + \setbox\pgfpic=\hbox{% + \ifx\pgf@trimleft@final\pgfutil@empty\else\kern-\pgf@trimleft@final\fi + \box\pgfpic + \ifx\pgf@trimright@final\pgfutil@empty\else\kern-\pgf@trimright@final\fi + }% + \def\pgf@external@store@dpth{1}% + \fi + \fi + % \parindent0pt % leave the space % \leftmargin0pt% % \rightmargin0pt% + \hoffset=0pt % reset to default + \voffset=0pt \dimen0\ht\pgfpic% \advance\dimen0\dp\pgfpic% - \ifdim\dp\pgfpic=0pt\relax - \else% store the picture's depth. Otherwise, it would be lost. - \def\pgf@external@store@dpth{1}% - \fi - % - \if1\pgf@external@store@dpth - \ifpgfexternal@aux@in@dpth - \pgf@externalend@storeshifts\@auxout - \immediate\closeout\@auxout - \else - \immediate\openout\pgf@plotwrite=\pgf@filename.dpth - \pgf@externalend@storeshifts\pgf@plotwrite - \immediate\closeout\pgf@plotwrite - \fi - \fi + \ifdim\dp\pgfpic=0pt\relax + \else% store the picture's depth. Otherwise, it would be lost. + \def\pgf@external@store@dpth{1}% + \fi + \ifpgfexternal@info + \def\pgf@external@store@dpth{1}% + \fi + % + \if1\pgf@external@store@dpth + \ifpgfexternal@aux@in@dpth + \pgf@externalend@storeshifts\@auxout + \immediate\closeout\@auxout + \else + \immediate\openout\pgf@plotwrite=\pgf@filename.dpth + \pgf@externalend@storeshifts\pgf@plotwrite + \immediate\closeout\pgf@plotwrite + \fi + \fi \pgfsys@papersize{\the\wd\pgfpic}{\the\dimen0}% + % \setbox0=\vbox{% - \kern -1truein % + % I admit that I don't know why there is this kerning: + \kern -\pgf@external@kern@top\relax% \hbox{% - \kern -1truein % + \kern -\pgf@external@kern@left\relax% \hbox to0pt{% \wd\pgfexternal@startupbox=0pt % \ht\pgfexternal@startupbox=0pt % @@ -453,29 +490,32 @@ \box\pgfexternal@startupbox% \pgfsys@atbegindocument\hss}% \box\pgfpic% - \kern 1truein }% - \kern1truein }% - % - % compatibility with eso-pic package: \nointerlineskip is not - % allowed here, but the eso-pic package uses \nointerlineskip in - % its shipout routine. - \let\pgfexternal@nointerlineskip@orig=\nointerlineskip - \let\nointerlineskip=\pgfexternal@nointerlineskip - % + \kern\pgf@external@kern@right\relax% + }% + \kern\pgf@external@kern@bottom\relax% + }% + % + % compatibility with eso-pic package: \nointerlineskip is not + % allowed here, but the eso-pic package uses \nointerlineskip in + % its shipout routine. + \let\pgfexternal@nointerlineskip@orig=\nointerlineskip + \let\nointerlineskip=\pgfexternal@nointerlineskip + % \pgfexternal@originalshipout\box0 % - \gdef\pgfexternal@did@a@shipout{1}% + \gdef\pgfexternal@did@a@shipout{1}% }% \ifpgfexternal@aux@in@dpth - \endgroup + \endgroup \fi } \def\pgfexternal@nointerlineskip{% - \ifvmode - \pgfexternal@nointerlineskip@orig - \else - \relax% \nointerlineskip in horizontal mode not allowed. Silently ignore the error message. - \fi + \ifvmode + \pgfexternal@nointerlineskip@orig + \else + \relax% \nointerlineskip in horizontal mode not allowed. Silently ignore the error message. + \fi }% \endinput +% vi: tabstop=4 shiftwidth=2 expandtab diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfkeys.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfkeys.code.tex index a1410e84a0f..59688c15a67 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfkeys.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfkeys.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% @@ -773,6 +773,7 @@ \pgfkeys{/handlers/.style args/.code 2 args=\pgfkeys{\pgfkeyscurrentpath/.code args={#1}{\pgfkeysalso{#2}}}} \pgfkeys{/handlers/.estyle args/.code 2 args=\pgfkeys{\pgfkeyscurrentpath/.ecode args={#1}{\noexpand\pgfkeysalso{#2}}}} \pgfkeys{/handlers/.style 2 args/.code=\pgfkeys{\pgfkeyscurrentpath/.code 2 args=\pgfkeysalso{#1}}} +\pgfkeys{/handlers/.style n args/.code 2 args=\pgfkeys{\pgfkeyscurrentpath/.code n args={#1}{\pgfkeysalso{#2}}}} % Adding to a style @@ -924,7 +925,7 @@ \pgfkeys{/handlers/.expand twice/.code=\expandafter\expandafter\expandafter\pgfkeys@exp@call\expandafter\expandafter\expandafter{#1}} \pgfkeys{/handlers/.expanded/.code=\edef\pgfkeys@temp{#1}\expandafter\pgfkeys@exp@call\expandafter{\pgfkeys@temp}} -\def\pgfkeys@exp@call#1{\pgfkeysalso{\pgfkeyscurrentpath={#1}}} +\long\def\pgfkeys@exp@call#1{\pgfkeysalso{\pgfkeyscurrentpath={#1}}} % Try to set a key and do nothing if not define diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfkeysfiltered.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfkeysfiltered.code.tex index 82fb11cd2e9..0094344d89b 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfkeysfiltered.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfkeysfiltered.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgflibraryfpu.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgflibraryfpu.code.tex index 39c273655bf..c08f7dee2fe 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgflibraryfpu.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgflibraryfpu.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% @@ -750,7 +750,7 @@ % 100 <= m < 1000 % instead of 1 <= m < 10. % -% The 'extended precision' means we have higher accuracy when we apply pgfmath operations to mantisses. +% The 'extended precision' means we have higher accuracy when we apply pgfmath operations to mantissas. % % The input argument is expected to be a normalized floating point number; the output argument is a non-normalized floating point number (well, normalized to extended precision). % diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex index 054598b052e..1cb2e67de17 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.code.tex index 79d03962283..cabffe11ba6 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.pdflinks.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.pdflinks.code.tex index 366a3212cba..380a696a1df 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.pdflinks.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.pdflinks.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% @@ -143,6 +143,11 @@ /pdflinks/internal link prefix/.initial=pgf, } +\begingroup + \catcode`\_=12 + \gdef\pgfmanualpdf@underscore{_}% +\endgroup + \gdef\pgfmanualpdf@installreplacements{% \def\marg##1{{##1}}% \def\oarg##1{[##1]}% @@ -156,6 +161,7 @@ \def\printanat{@}% \def\protect{}% \def\textasciicircum{o}% + \def\_{\pgfmanualpdf@underscore}% \expandafter\edef\pgfmanual@verb@activebar{\pgfmanual@verb@bar}% }% diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.prettyprinter.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.prettyprinter.code.tex index dc5c3867277..b6ca2c4e2e0 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.prettyprinter.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmanual.prettyprinter.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmathfloat.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmathfloat.code.tex index b8d956b6054..6ef0b8f63ff 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmathfloat.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmathfloat.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% @@ -54,6 +54,13 @@ % can be changed with options. \def\pgfmathfloat@round@precision{2} +% I introduced this to acces the "original" precision in case a +% formatted changes it locally... in this case, the formatter may +% overwrite \pgfmathfloat@round@precision@orig to provide the original +% one. +% The default implementation here does nothing: +\def\pgfmathfloat@round@precision@orig{\pgfmathfloat@round@precision}% + \gdef\pgfmathfloat@glob@TMP{} @@ -63,7 +70,7 @@ % meaning % [+-]X.XXXXXXX*10^C % where -% X.XXXXXX is a mantisse with first number != 0, C is an integer and +% X.XXXXXX is a mantissa with first number != 0, C is an integer and % FLAGS contains the sign and some other special cases. % % This method does NOT use TeX Registers to represent the numbers! The @@ -124,13 +131,13 @@ \let\pgfmathfloatqparsenumber=\pgfmathfloatparsenumber % Takes a floating point number #1 as input and writes flags to count -% register #2, mantisse to dimen register #3 and exponent to count +% register #2, mantissa to dimen register #3 and exponent to count % register #4. \def\pgfmathfloattoregisters#1#2#3#4{% \expandafter\pgfmathfloat@decompose#1\relax{#2}{#3}{#4}% } -% the same, but writes the mantisse into a token register. +% the same, but writes the mantissa into a token register. \def\pgfmathfloattoregisterstok#1#2#3#4{% \expandafter\pgfmathfloat@decompose@tok#1\relax{#2}{#3}{#4}% } @@ -144,14 +151,16 @@ \expandafter\pgfmathfloat@decompose@Fmacro#1\relax{#2}% }% -% Extracts the mantisse of #1 into the dimen register #2. -\def\pgfmathfloatgetmantisse#1#2{% +% Extracts the mantissa of #1 into the dimen register #2. +\def\pgfmathfloatgetmantissa#1#2{% \expandafter\pgfmathfloat@decompose@M#1\relax{#2}% } -% Extracts the mantisse of #1 into the token register #2. -\def\pgfmathfloatgetmantissetok#1#2{% +\let\pgfmathfloatgetmantisse=\pgfmathfloatgetmantissa +% Extracts the mantissa of #1 into the token register #2. +\def\pgfmathfloatgetmantissatok#1#2{% \expandafter\pgfmathfloat@decompose@Mtok#1\relax{#2}% } +\let\pgfmathfloatgetmantissetok=\pgfmathfloatgetmantissatok % Extracts the exponent of #1 into the count register #2. \def\pgfmathfloatgetexponent#1#2{% \expandafter\pgfmathfloat@decompose@E#1\relax{#2}% @@ -189,14 +198,14 @@ % decomposes a lowlevel floating point representation into flags, -% mantisse and exponent. +% mantissa and exponent. % % #4: integer register for the flags. -% #5: dimen registers for the mantisse. +% #5: dimen registers for the mantissa. % #6: integer register for the exponent. % % \expandafter\pgfmathfloat@decompose\pgfmathresult\relax\pgfmathfloat@a@S\pgfmathfloat@a@M\pgfmathfloat@a@E -% -> the three temp registers contain flags, mantisse and exponent +% -> the three temp registers contain flags, mantissa and exponent \def\pgfmathfloat@decompose#1#2{% sanitize! \ifx#2Y% \expandafter\pgfmathfloat@decompose@% @@ -211,11 +220,11 @@ #6=#3\relax% } -% overloaded, #5 needs to be a token register for the mantisse. +% overloaded, #5 needs to be a token register for the mantissa. % @see also \pgfmathfloatvalueof which does also employ the load % level repr. % \expandafter\pgfmathfloat@decompose@tok\pgfmathresult\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E -% -> the three temp registers contain flags, mantisse and exponent +% -> the three temp registers contain flags, mantissa and exponent \def\pgfmathfloat@decompose@tok#1#2{% \ifx#2Y% \expandafter\pgfmathfloat@decompose@tok@% @@ -329,7 +338,7 @@ \pgfmathfloat@decompose@TMP }% % Takes a floating point number #1 as input and writes flags to macro -% #2, mantisse to macro #3 and exponent to macro #4. +% #2, mantissa to macro #3 and exponent to macro #4. \def\pgfmathfloattomacro#1#2#3#4{% \begingroup \expandafter\pgfmathfloat@decompose@tok#1\relax\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E @@ -344,7 +353,7 @@ % Defines \pgfmathresult as the floating point number encoded by -% the flags #1, mantisse #2 and exponent #3. +% the flags #1, mantissa #2 and exponent #3. % % All arguments are characters and will be expanded using '\edef'. \def\pgfmathfloatcreate#1#2#3{% @@ -490,7 +499,7 @@ \pgfkeysgetvalue{/pgf/number format/set decimal separator}\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP \pgfkeysgetvalue{/pgf/number format/@dec sep mark}\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP@MARK \pgfkeysgetvalue{/pgf/number format/set thousands separator}\pgfmathprintnumber@fixed@styleDEFAULT@THOUSAND@SEP - \c@pgf@counta=#4\relax + \c@pgf@counta=#4\relax % it is the exponent here. \ifnum#2=0 \c@pgf@counta=0 \fi @@ -529,20 +538,30 @@ \else \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod#1\pgfmathfloat@EOI\pgfmathfloat@EOI\pgfmathfloat@EOI \fi + \ifpgfmathprintnumber@thousand@sep@in@fractional + \let\pgfmathresultfractional\pgfutil@empty% + \pgfmathprintnumber@thousand@sep@in@fractional#2MMMM\@@ + \else + \def\pgfmathresultfractional{#2}% + \fi \begingroup \toks0=\expandafter{\pgfmathresult}% \toks1=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP@MARK}% - \toks2=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP #2}% - \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 \the\toks2 }% + \toks2=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@DEC@SEP}% + \toks3=\expandafter{\pgfmathresultfractional}% + \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 \the\toks2 \the\toks3 }% \endgroup \let\pgfmathresult=\pgfmathfloat@glob@TMP }% + +% assigns \pgfmathresult such that it contains the formatted result. +% It assumes that none of the following tokens contains a period. \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod{% \ifx\pgfmathprintnumber@fixed@styleDEFAULT@THOUSAND@SEP\pgfutil@empty \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{% \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printall}% \else - \ifnum\c@pgf@counta<0\relax + \ifnum\c@pgf@counta<0\relax % exponent of the number in this context \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{% \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printall}% \else @@ -579,7 +598,7 @@ \fi \fi \fi - \ifnum\c@pgf@counta>0 + \ifnum\c@pgf@counta>0 % \c@pgf@counta = N MOD 3 in this context \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{% \expandafter\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printtrailingdigits\pgfmathfloat@loc@TMPb }% @@ -591,7 +610,8 @@ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT } \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printtrailingdigits#1#2{% - \ifcase\c@pgf@counta + \ifcase\c@pgf@counta % = N MOD 3 in this context + % does not happen per construction \or \expandafter\def\expandafter\pgfmathresult\expandafter{\pgfmathresult #1}% \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT{% @@ -603,7 +623,7 @@ \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@counteverythird% }% \fi - \ifnum\c@pgf@countb>0\relax + \ifnum\c@pgf@countb>0\relax % \c@pgf@countb = N DIV 3 in this context \begingroup \toks0=\expandafter{\pgfmathresult}% \toks1=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@THOUSAND@SEP}% @@ -643,6 +663,32 @@ \fi \pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@NEXT } + +% \pgfmathprintnumber@thousand@sep@in@fractional 01234525MMMM\@@ +% -> +% 012<sep>345<sep>25 +\def\pgfmathprintnumber@thousand@sep@in@fractional#1#2#3#4{% + \if#4M% + % Ok, no further separator + \def\pgfmathprint@next{\pgfmathprintnumber@thousand@sep@in@fractional@finish#1#2#3#4}% + \else + \begingroup + \toks0=\expandafter{\pgfmathresultfractional}% + \toks1={#1#2#3}% + \toks2=\expandafter{\pgfmathprintnumber@fixed@styleDEFAULT@THOUSAND@SEP}% + \xdef\pgfmathfloat@glob@TMP{\the\toks0 \the\toks1 \the\toks2 }% + \endgroup + \let\pgfmathresultfractional=\pgfmathfloat@glob@TMP + \def\pgfmathprint@next{\pgfmathprintnumber@thousand@sep@in@fractional#4}% + \fi + \pgfmathprint@next +}% +\def\pgfmathprintnumber@thousand@sep@in@fractional@finish#1M{% + \expandafter\def\expandafter\pgfmathresultfractional\expandafter{\pgfmathresultfractional #1}% + \pgfmathprintnumber@thousand@sep@in@fractional@finish@ +}% +\def\pgfmathprintnumber@thousand@sep@in@fractional@finish@#1\@@{}% + \def\pgfmathprintnumber@fixed@styleDEFAULT@impl@noperiod@printall#1{% \def\pgfmathfloat@loc@TMPb{#1}% \let\pgfmathfloat@loc@TMPc=\pgfutil@empty @@ -680,7 +726,7 @@ % The default style to display fixed point numbers. % -% It does not apply numerics, but it is responsable to typeset the +% It does not apply numerics, but it is responsable for typesetting the % rounded number. % It can access the \ifpgfmathfloatroundhasperiod boolean. % @@ -699,12 +745,12 @@ % Rounds a normalized floating point number to \pgfmathfloat@round@precision % digits precision and writes the result to \pgfmathresult. % -% This method uses \pgfmathroundto for the mantisse. +% This method uses \pgfmathroundto for the mantissa. % % @see pgfmathfloatroundzerofill % % SIDE EFFECT: the global variable \ifpgfmathfloatroundhasperiod will be set to -% whether the final mantisse #5 has a period or not. +% whether the final mantissa #5 has a period or not. \def\pgfmathfloatround#1{% \pgfmathfloatroundhasperiodtrue \begingroup @@ -717,13 +763,13 @@ % Overload. % -% This method uses a fixed width for the mantisse and fills in zeros +% This method uses a fixed width for the mantissa and fills in zeros % if necessary. % -% This method uses \pgfmathroundtozerofill for the mantisse. +% This method uses \pgfmathroundtozerofill for the mantissa. % % SIDE EFFECT: the global variable \ifpgfmathfloatroundhasperiod will be set to -% whether the final mantisse #5 has a period or not. +% whether the final mantissa #5 has a period or not. \def\pgfmathfloatroundzerofill#1{% \pgfmathfloatroundhasperiodtrue \begingroup @@ -734,16 +780,16 @@ \endgroup } -\newif\ifpgfmathfloatround@allow@empty@mantisse -\def\pgfmathfloatround@mantisse@ONE{1.0}% +\newif\ifpgfmathfloatround@allow@empty@mantissa +\def\pgfmathfloatround@mantissa@ONE{1.0}% % #1: sign -% #2: mantisse +% #2: mantissa % #3: exponent -% #4: CODE to display if the mantisse is drawn. +% #4: CODE to display if the mantissa is drawn. % This code will be shown just before the exponent. % Example: #4=\cdot -% #5: CODE to display if the mantisse is NOT draw. (unused currently) +% #5: CODE to display if the mantissa is NOT draw. (unused currently) % Might be used to display '10^1' instead of '1*10^1'. % #6: CODE to display the exponent. \def\pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\relax#4#5#6{% @@ -828,11 +874,11 @@ \def\pgfmathfloatrounddisplaystyle@generic#1#2e#3\relax{% \begingroup \pgfkeysvalueof {/pgf/number format/sci generic/@/.@cmd}{#3}{#1}{#2}\pgfeov - \pgfkeysgetvalue{/pgf/number format/sci generic/mantisse sep}\pgfmathdisplay@aftermantisse - \pgfkeysgetvalue{/pgf/number format/sci generic/empty mantisse sep}\pgfmathdisplay@nomantisse + \pgfkeysgetvalue{/pgf/number format/sci generic/mantissa sep}\pgfmathdisplay@aftermantissa + \pgfkeysgetvalue{/pgf/number format/sci generic/empty mantissa sep}\pgfmathdisplay@nomantissa \pgfkeysgetvalue{/pgf/number format/sci generic/exponent}\pgfmathdisplay@e - \toks0=\expandafter{\pgfmathdisplay@aftermantisse}% - \toks1=\expandafter{\pgfmathdisplay@nomantisse}% + \toks0=\expandafter{\pgfmathdisplay@aftermantissa}% + \toks1=\expandafter{\pgfmathdisplay@nomantissa}% \toks2=\expandafter{\pgfmathdisplay@e}% \xdef\pgfmathfloat@glob@TMP{\noexpand\pgfmathfloatrounddisplaystyle@shared@impl#1#2e#3\noexpand\relax{\the\toks0}{\the\toks1}{\the\toks2}}% \endgroup @@ -845,7 +891,7 @@ % % PRECONDITION: % the floating point number has already been rounded properly and -% the mantisse has been rounded correcty. +% the mantissa has been rounded correcty. % % The argument needs to be in the format returned by % \pgfmathfloat@to@FMeE@style and terminated by '\relax'. @@ -859,6 +905,7 @@ \long\def\pgfmathfloatfrac@verbatim#1#2{#1/#2}% +\newif\ifpgfmathprintnumber@thousand@sep@in@fractional \pgfkeys{% /pgf/number format/.is family, /pgf/number format, @@ -866,6 +913,10 @@ sci/.code= \pgfmath@set@number@printer{pgfmathprintnumber@SCI}, std/.code= {\pgfmath@set@number@printer{pgfmathprintnumber@STD}\pgfmathprintnumber@STD@setparam{#1}}, std/.default=,% + % relative={<exponent base 10>} + relative/.code= {\pgfmath@set@number@printer{pgfmathprintnumber@RELATIVE}\def\pgfmathprintnumber@RELATIVE@param{#1}},% + relative/.value required, + every relative/.style=std, int detect/.code= \pgfmath@set@number@printer{pgfmathprintnumber@INT@DETECT}, int trunc/.code= \pgfmath@set@number@printer{pgfmathprintnumber@INT@TRUNC}, frac/.code= \pgfmath@set@number@printer{pgfmathprintnumber@frac},% @@ -902,6 +953,8 @@ @dec sep mark/.initial=, @sci exponent mark/.initial=, set thousands separator/.initial=, + 1000 sep in fractionals/.is if=pgfmathprintnumber@thousand@sep@in@fractional, + 1000 sep in fractionals/.default=true, 1000 sep/.style={/pgf/number format/set thousands separator=#1}, min exponent for 1000 sep/.initial=0, use period/.style= {/pgf/number format/set decimal separator={.},/pgf/number format/set thousands separator={{{,}}}}, @@ -926,13 +979,15 @@ {##1##2##3}% {\pgfqkeys{/pgf/number format/sci generic}{#1}}% }, - sci generic/mantisse sep/.initial=,% - sci generic/empty mantisse sep/.initial=,% + sci generic/mantissa sep/.initial=,% + sci generic/empty mantissa sep/.initial=,% + sci generic/mantisse sep/.style={/pgf/number format/sci generic/mantissa sep={#1}},% + sci generic/empty mantisse sep/.style={/pgf/number format/sci generic/empty mantissa sep={#1}},% sci generic/exponent/.initial=,% sci generic/.value required, verbatim/.code={% \pgfqkeys{/pgf/number format}{% - sci generic={mantisse sep=,exponent={e##1}}, + sci generic={mantissa sep=,exponent={e##1}}, 1000 sep=, skip 0.=false, print sign=false, @@ -944,8 +999,8 @@ @sci exponent mark=, }% }, -% sci may skip mantisse/.is if=pgfmathfloatround@allow@empty@mantisse, -% sci may skip mantisse/.default=true, +% sci may skip mantissa/.is if=pgfmathfloatround@allow@empty@mantissa, +% sci may skip mantissa/.default=true, } @@ -962,7 +1017,7 @@ \ifx\pgfmathfloat@loc@TMPb\pgfutil@empty % DEFAULT for lower and upper bound. \def\pgfmathprintnumber@STD@getlowerbound{% - \c@pgf@counta=\pgfmathfloat@round@precision\relax + \c@pgf@counta=\pgfmathfloat@round@precision@orig\relax \divide\c@pgf@counta by-2\relax }% \def\pgfmathprintnumber@STD@upperbound{4}% @@ -1008,6 +1063,55 @@ \fi } +\def\pgfmathprintnumber@RELATIVE#1{% + % parse the input: + \pgfmathfloatparsenumber{#1}% + \pgfmathfloat@to@FMeE@style\pgfmathresult + \expandafter\pgfmathprintnumber@RELATIVE@issci\pgfmathresult\relax +} + +\def\pgfmathprintnumber@RELATIVE@issci#1#2e#3\relax{% + \begingroup + % format X / 10^{relative}: + \c@pgf@counta=#3\relax + \advance\c@pgf@counta by-\pgfmathprintnumber@RELATIVE@param\relax + \pgfmathfloatcreate{#1}{#2}{\the\c@pgf@counta}% + % OK, round it to the desired precision: + \ifnum\c@pgf@counta>0 + % hm. for positive exponents, we should round the + % mantissa rather than only the fractional part. + \expandafter\pgfmathfloatround\expandafter{\pgfmathresult}% + \else + % negative exponent -> round fixed representation: + \pgfmathfloattofixed\pgfmathresult + \expandafter\pgfmathroundto\expandafter{\pgfmathresult}% + \pgfmathfloatparsenumber{\pgfmathresult}% + \pgfmathfloatroundhasperiodtrue% make sure the code below works: + \fi + % Now, compute result * 10^{relative} and format the result: + \pgfmathfloattoregisterstok\pgfmathresult\pgfmathfloat@a@S\pgfmathfloat@a@Mtok\pgfmathfloat@a@E + \ifnum\pgfmathfloat@a@S=0 + \pgfmathfloat@a@E=\pgfmathfloat@a@S % avoid 0 * 10^8 + \else + \advance\pgfmathfloat@a@E by+\pgfmathprintnumber@RELATIVE@param\relax + \fi + \edef\pgfmathresultX{% + \the\pgfmathfloat@a@S + \the\pgfmathfloat@a@Mtok + \ifpgfmathfloatroundhasperiod\else.0\fi + e\the\pgfmathfloat@a@E}% + % call another formatter for the result (but avoid rounding inside of it): + \pgfqkeys{/pgf/number format}{/pgf/number format/every relative}% + \ifx\pgfmathprintnumber@issci\pgfmathprintnumber@RELATIVE@issci + \pgfmath@error{The '/pgf/number format/every relative' style should set a valid display style}% + \fi + \let\pgfmathfloat@round@precision@orig=\pgfmathfloat@round@precision + \def\pgfmathfloat@round@precision{9999}% + \expandafter\pgfmathprintnumber@issci\pgfmathresultX\relax% + \pgfmath@smuggleone\pgfmathresult + \endgroup +} + \def\pgfmathprintnumber@frac#1{% % parse the input: \pgfmathfloatparsenumber{#1}% @@ -1106,8 +1210,8 @@ \fi % \def\pgfmathfloat@loc@TMPa##1.##2\relax{% - \def\pgfmathfloat@mantisse@first{##1}% - \def\pgfmathfloat@mantisse@ltone{0.##2}% + \def\pgfmathfloat@mantissa@first{##1}% + \def\pgfmathfloat@mantissa@ltone{0.##2}% }% \expandafter\pgfmathfloat@loc@TMPa\the\pgfmathfloat@a@Mtok\relax % @@ -1126,7 +1230,7 @@ \ifx\pgfmath@target@denominator\pgfutil@empty % \pgfmathfloat@a@E=-\pgfmathfloat@a@E - \ifdim\pgfmathfloat@mantisse@ltone pt=0pt + \ifdim\pgfmathfloat@mantissa@ltone pt=0pt \def\pgfmathfloat@factor{1}% \edef\pgfmathfloat@scaled@numerator{\the\pgfmathfloat@a@Mtok}% \else @@ -1135,14 +1239,14 @@ % The errors of 1/r are magnified by 10^k which % doesn't work. \pgfutil@ifundefined{FPdiv}{% - \pgfmathfloatparsenumber{\pgfmathfloat@mantisse@ltone}% + \pgfmathfloatparsenumber{\pgfmathfloat@mantissa@ltone}% \pgfmathfloatreciprocal@{\pgfmathresult}% }{% % \usepackage{fp}. % yields higher absolute precision. \FPmessagesfalse% \FPdebugfalse% - \FPdiv\pgfmathresult{1}{\pgfmathfloat@mantisse@ltone}% + \FPdiv\pgfmathresult{1}{\pgfmathfloat@mantissa@ltone}% \pgfmathfloatparsenumber{\pgfmathresult}% }% \let\pgfmathfloat@inv=\pgfmathresult @@ -1519,7 +1623,7 @@ % % Let 'k' be the desired precision. % -% Please note that pgfmathroundto rounds the mantisse, that means |abs(x)|. +% Please note that pgfmathroundto rounds the mantissa, that means |abs(x)|. % % There are exactly TWO cases: % 1. The case with p<=k and x_{-p-1} = end of input. @@ -1864,7 +1968,7 @@ %-------------------------------------------- -% flags, mantisse and exponent has already been stored into +% flags, mantissa and exponent has already been stored into % \pgfmathfloat@a@* [using ...@Mtok] % % PRECONDITION: @@ -1895,7 +1999,7 @@ -% ATTENTION: this thing REQUIRES a period in the mantisse! +% ATTENTION: this thing REQUIRES a period in the mantissa! % collects everything into \pgfmathresult \def\pgfmathfloattofixed@impl#1.#2\relax{% \ifnum\pgfmathfloat@a@E<0 @@ -1942,7 +2046,7 @@ % \edef\pgfmathresult{#1.#2}% % \else % \pgfmathfloat@a@Mtok={#1}% - % \pgfmathfloattofixed@impl@collectmantisse#2\count\pgfmathfloat@a@E + % \pgfmathfloattofixed@impl@collectmantissa#2\count\pgfmathfloat@a@E % \edef\pgfmathresult{\the\pgfmathfloat@a@Mtok}% % \fi %-------------------------------------------------- @@ -1976,11 +2080,11 @@ \else%>=9 \pgfmathfloat@a@Mtok\expandafter{\the\pgfmathfloat@a@Mtok #1#2#3#4#5#6#7#8}% \advance\pgfmathfloat@a@E by-8 - \pgfmathfloattofixed@impl@collectmantisse#9\count\pgfmathfloat@a@E + \pgfmathfloattofixed@impl@collectmantissa#9\count\pgfmathfloat@a@E \fi }% -\def\pgfmathfloattofixed@impl@collectmantisse#1#2\count#3{% +\def\pgfmathfloattofixed@impl@collectmantissa#1#2\count#3{% \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok #1}% \advance\pgfmathfloat@a@E by-1% \def\pgfmathfloat@loc@TMPb{#2}% @@ -1995,7 +2099,7 @@ \ifnum\pgfmathfloat@a@E=0 \pgfmathfloat@a@Mtok=\expandafter{\the\pgfmathfloat@a@Mtok .#2}% \else - \pgfmathfloattofixed@impl@collectmantisse#2\count#3% + \pgfmathfloattofixed@impl@collectmantissa#2\count#3% \fi \fi } diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmathparse.opt.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmathparse.opt.code.tex deleted file mode 100644 index e74d47c814e..00000000000 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_pgfmathparse.opt.code.tex +++ /dev/null @@ -1,122 +0,0 @@ -% A small optimization package which provides -% -% \beginpgfmathparsecheckfornumber -% ... -% \endpgfmathparsecheckfornumber -% -% in order to optimize \pgfmathparse. It works as follows: inside of -% the environment (which doesn't use scopes), \pgfmathparse is -% *replaced* by a different method which uses an extremely fast check -% to decide whether the input is a number number. Is so, it returns -% the number. Otherwise, it invokes the standard math parser. -% It is about 400% faster than \pgfmathparse if the argument *is* a -% number. -% -% The \endpgfmathparsecheckfornumber is optional (no groups are -% introduced) -% -% Copyright 2010 by Christian Feuersänger. -% -% Replaces \pgfmathparse by the fast number checker. -\def\beginpgfmathparsecheckfornumber{% - \let\pgfmathparse=\pgfmathparsehashedcheck -}% -\def\endpgfmathparsecheckfornumber{% - \let\pgfmathparse=\pgfmathparsehashedcheck@orig -}% - -\def\pgfmp@EOI{\pgfmp@EOI}% -\def\pgfmathparsehashedcheck@isnumber@gobble#1\pgfmp@EOI{} - -\newdimen\r@pgfmathparse@hashedcheck@ -\newcount\c@pgfmathparse@hashedcheck@ -\let\pgfmathparsehashedcheck@orig=\pgfmathparse - -\def\pgfmathparsehashedcheck#1{% - \edef\pgfmathparse@temp{#1}% - \expandafter\pgfmathparsehashedcheck@isnumber@loop\pgfmathparse@temp\pgfmp@EOI - \pgfmathparsehashedcheck@finalize{#1}% -}% -\def\pgfmathparsehashedcheck@finalize@isnonumber#1{% - \pgfmathparsehashedcheck@orig{#1}% - \let\pgfmathparsehashedcheck@finalize\pgfmathparsehashedcheck@finalize@isnumber -}% -\def\pgfmathparsehashedcheck@finalize@isnumber#1{% - \r@pgfmathparse@hashedcheck@=#1pt - \expandafter\pgfmathparsehashed@assign\the\r@pgfmathparse@hashedcheck@ - %-------------------------------------------------- - % % - % \let\KKK=\pgfmathresult - % \pgfmathparsehashedcheck@orig{#1}% - % \ifx\KKK\pgfmathresult - % \else - % \pgfplots@error{FAILED FOR #1: expected `\pgfmathresult'; got `\KKK' (temp = \pgf@temp)}% - % \fi - %-------------------------------------------------- -}% -{\catcode`\p=12\catcode`\t=12\gdef\PGF@TEMP{pt}} -\expandafter\def\expandafter\pgfmathparsehashed@assign\expandafter#\expandafter1\expandafter.\expandafter#\expandafter2\PGF@TEMP{% - \def\pgf@temp{#2}% - \ifx\pgf@temp0% - \def\pgfmathresult{#1}% - \else - \def\pgfmathresult{#1.#2}% - \fi -}% -\let\pgfmathparsehashedcheck@finalize\pgfmathparsehashedcheck@finalize@isnumber - -\expandafter\def\csname pgf@pp+\endcsname{1} -\expandafter\def\csname pgf@pp-\endcsname{1} -\expandafter\def\csname pgf@p0\endcsname{1} -\expandafter\def\csname pgf@p1\endcsname{1} -\expandafter\def\csname pgf@p2\endcsname{1} -\expandafter\def\csname pgf@p3\endcsname{1} -\expandafter\def\csname pgf@p4\endcsname{1} -\expandafter\def\csname pgf@p5\endcsname{1} -\expandafter\def\csname pgf@p6\endcsname{1} -\expandafter\def\csname pgf@p7\endcsname{1} -\expandafter\def\csname pgf@p8\endcsname{1} -\expandafter\def\csname pgf@p9\endcsname{1} -\expandafter\def\csname pgf@p.\endcsname{1} - -\pgfutil@ifundefined{ifcsname}{% - \def\pgfmathparsehashedcheck@isnumber@loop#1{% - \expandafter\ifx\csname pgf@pp\string#1\endcsname\relax - \expandafter\pgfmathparsehashedcheck@isnumber@loop - \else - \expandafter\pgfmathparsehashedcheck@isnumber@loop@\expandafter#1% - \fi - }% - \def\pgfmathparsehashedcheck@isnumber@loop@#1{% - \expandafter\ifx\csname pgf@p\string#1\endcsname\relax - \expandafter\pgfmathparsehashedcheck@isnumber@loop@ - \else - \expandafter\pgfmathparsehashedcheck@isnumber@endfalse\expandafter#1% - \fi - }% -}{% - \def\pgfmathparsehashedcheck@isnumber@loop#1{% - \ifcsname pgf@pp\string#1\endcsname - \expandafter\pgfmathparsehashedcheck@isnumber@loop - \else - \expandafter\pgfmathparsehashedcheck@isnumber@loop@\expandafter#1% - \fi - }% - \def\pgfmathparsehashedcheck@isnumber@loop@#1{% - \ifcsname pgf@p\string#1\endcsname - \expandafter\pgfmathparsehashedcheck@isnumber@loop@ - \else - \expandafter\pgfmathparsehashedcheck@isnumber@endfalse\expandafter#1% - \fi - }% -}% -\def\pgfmathparsehashedcheck@isnumber@endfalse#1{% - \ifx#1\pgfmp@EOI - \else - \let\pgfmathparsehashedcheck@finalize=\pgfmathparsehashedcheck@finalize@isnonumber - \expandafter\pgfmathparsehashedcheck@isnumber@gobble - \fi -}% - - -\endinput diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzexternal.sty b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzexternal.sty index 9025de703be..7dc97116753 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzexternal.sty +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzexternal.sty @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzexternalshared.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzexternalshared.code.tex index 757439ed17f..2d7a81b2bf5 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzexternalshared.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzexternalshared.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% @@ -46,7 +46,6 @@ \toksdef\t@tikzexternal@tmpa=0 \toksdef\t@tikzexternal@tmpb=1 -\newwrite\tikzexternal@outfile \newif\iftikzexternal@nestedflag \newif\iftikzexternal@verboseio \newif\iftikzexternal@genfigurelist @@ -132,6 +131,9 @@ \pgfqkeys{/tikz/external}{ figure list/.is if=tikzexternal@genfigurelist, aux in dpth/.style={/pgf/images/aux in dpth=#1},% + disable dependency files/.code={% + \let\tikzexternalfiledependsonfile@ACTIVE=\tikzexternalfiledependsonfile + }, % 'mode' applies only if \jobname==real job name. mode/.is choice, mode/only graphics/.code = {% @@ -175,7 +177,7 @@ shell escape/.initial=-shell-escape, read main aux/.is if=pgfexternalreadmainaux, image discarded text/.initial={% - [[ {\sc Image Discarded Due To} {\tt`/tikz/external/% + [[ \textsc{Image Discarded Due To} \texttt{`/tikz/external/% \ifcase\tikzexternal@opmode\relax mode=only graphics% \or @@ -215,6 +217,7 @@ \tikzexternal@optimize@RESTORE },% optimize=true, + optimize away text/.code={[ \textsc{\string#1\ optimized away because it does not contribute to exported PDF}]}, optimize/install/.code={},% optimize/restore/.code={},% % Expects two arguments, the command name and (optionally) a count @@ -332,7 +335,7 @@ \tikzexternalenable \def\tikzexternal@determineimgextension##1:##2\relax{\gdef\tikzexternalimgextension{##1}}% \xdef\pgf@tempa{\pgfsys@imagesuffixlist}% - \expandafter\tikzexternal@determineimgextension\pgf@tempa\relax + \expandafter\tikzexternal@determineimgextension\pgf@tempa:\relax \pgfutil@ifundefined{includegraphics}{% \let\tikzexternal@orig@includegraphics=\relax }{% @@ -344,6 +347,14 @@ } \def\tikzexternalize@hasbeencalled{0}% +\def\tikzifexternalizehasbeencalled#1#2{% + \if1\tikzexternalize@hasbeencalled + #1% + \else + #2% + \fi +}% + % If mode=`convert with system call', the boolean \ifpgfexternalreadmainaux % will be set depending on the current lock file. % @@ -459,27 +470,40 @@ \else \ifx#1\@EOI \else - \expandafter\let\csname tikzexternalauxlock@handleref@orig@\string#1\endcsname=#1% - \def#1{\tikzexternalauxlock@handleref@repl{#1}}% + {% + % strip the leading '\' + % this allows proper \protect ion when you write + % \caption{...\cite{..}} and #1=\cite + \escapechar=-1 + \xdef\pgf@temp{\string#1}% + }% + \expandafter\let\csname tikzexternalauxlock@handleref@orig@\pgf@temp\endcsname=#1% + \edef#1{\noexpand\pgf@texdist@protect\noexpand\tikzexternalauxlock@handleref@repl{\pgf@temp}}% \expandafter\expandafter\expandafter\tikzexternalauxlock@handleref@loop \fi \fi }% \def\tikzexternalauxlock@handleref@repl#1{\pgfutil@ifnextchar[{\tikzexternalauxlock@handleref@repl@{#1}}{\tikzexternalauxlock@handleref@repl@{#1}[]}}% \def\tikzexternalauxlock@handleref@repl@#1[#2]#3{% - \csname tikzexternalauxlock@handleref@orig@\string#1\endcsname{#3}% - \begingroup - \def\n{\pgfexternal@hat\pgfexternal@hat J}% - \tikzexternal@assemble@systemcall{\pgfactualjobname}{\pgf@tempa}% - \def\space{\noexpand\space}% - \pgfexternalstorecommand{% - \noexpand\begingroup - \noexpand\toks0={\pgf@tempa}% - \noexpand\immediate\noexpand\write16{\tikzexternalauxlock@handleref@warning{#3}{\noexpand\the\noexpand\toks0}}% - \noexpand\G@refundefinedtrue - \noexpand\endgroup + \tikzifexternalizingcurrent{% + % note that '#1' is NO control sequence! it is a protected string + \csname tikzexternalauxlock@handleref@orig@#1\endcsname{#3}% + \begingroup + \def\n{\pgfexternal@hat\pgfexternal@hat J}% + \tikzexternal@assemble@systemcall{\pgfactualjobname}{\pgf@tempa}% + \def\space{\noexpand\space}% + \pgfexternalstorecommand{% + \noexpand\begingroup + \noexpand\toks0={\pgf@tempa}% + \noexpand\immediate\noexpand\write16{\tikzexternalauxlock@handleref@warning{#3}{\noexpand\the\noexpand\toks0}}% + \noexpand\G@refundefinedtrue + \noexpand\endgroup + }% + \endgroup + }{% + % ok. We are not externalizing this part of the document. + % Throw the citation away without further notice. }% - \endgroup }% \def\tikzexternalauxlock@handleref@warning#1#2{% \n @@ -798,6 +822,11 @@ \else \pgfutil@ifundefined{tikzexternal@listmode@openedfile}{% \message{Opening '\tikzexternal@realjob.figlist' for writing.}% + \begingroup + \globaldefs=1 + % this gets round '\outer\newwrite' in plain TeX: + \csname newwrite\endcsname\tikzexternal@outfile + \endgroup \immediate\openout\tikzexternal@outfile=\tikzexternal@realjob.figlist\relax \gdef\tikzexternal@listmode@openedfile{1}% \if\tikzexternal@opmode5% mode='list and make' @@ -818,6 +847,9 @@ \def\tikzexternal@list@and@make@gentarget#1{% \tikzexternal@assemble@systemcall{#1}{\pgf@tempa}% + \def\tikzexternal@tempb{\pgfutilstrreplace{^^J}{^^J\tikzexternal@TABchar}}% + \expandafter\tikzexternal@tempb\expandafter{\pgf@tempa}% + \let\pgf@tempa=\pgfretval \iftikzexternal@verboseio \immediate\write16{Writing '#1' to '\tikzexternal@realjob.makefile'.}% \fi @@ -862,6 +894,7 @@ \def\tikzexternalmakefiledefaultdeprule{% \immediate\write\tikzexternal@outmakefile{\tikzexternal@PERCENTchar.\tikzexternaldepext:}% + \immediate\write\tikzexternal@outmakefile{\tikzexternal@TABchar mkdir -p $(dir $@)}% \immediate\write\tikzexternal@outmakefile{\tikzexternal@TABchar touch $@ \tikzexternal@HASHchar\space will be filled later.}% }% @@ -1056,7 +1089,9 @@ \iftikzexternal@verbose@optimize \immediate\write16{The command '\the\toks0' has been optimized away. Use '/tikz/external/optimize=false' to disable this.}% \fi - [ {\sc \string#1\ optimized away because it does not contribute to exported PDF}]% + \endgroup + \begingroup + \pgfkeysvalueof{/tikz/external/optimize away text/.@cmd}#1\pgfeov% \endgroup }% diff --git a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex index 42056506818..badd22fd89d 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/oldpgfcompatib/pgfplotsoldpgfsupp_tikzlibraryexternal.code.tex @@ -14,7 +14,7 @@ %%% - nested \input commands have been updated %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% Date of this copy: Do 5. Aug 20:33:50 CEST 2010 %%% +%%% Date of this copy: Sa 30. Apr 21:00:37 CEST 2011 %%% diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex index 14e4d2e9c3d..bca33bab29e 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.code.tex @@ -33,6 +33,7 @@ \input pgfplotsutil.code.tex \input pgfplotscolormap.code.tex \input pgfplotsstackedplots.code.tex +\input pgfplotsplothandlers.code.tex \input pgfplotscoordprocessing.code.tex \input pgfplotsticks.code.tex @@ -47,12 +48,12 @@ \newif\ifpgfplots@has@label@information \newif\ifpgfplots@yislinear \newif\ifpgfplots@zislinear -\newif\ifpgfplots@axis@equal -\newif\ifpgfplots@axis@equal@image +\newif\ifpgfplots@unit@vector@rescale@keep@size \newif\ifpgfplots@reverse@legend \newif\ifpgfplots@transpose@legend \newif\ifpgfplots@allow@reversal@of@rel@axis@cs \newif\ifpgfplots@scanline@verbose +\newif\ifpgfplots@plot@graphics@autoadjustaxis \newcount\pgfplots@numplots \newdimen\pgfplots@xmin@reg \newdimen\pgfplots@xmax@reg @@ -109,6 +110,7 @@ \newif\ifpgfplots@stacked@plus \newif\ifpgfplots@plot@file@skipfirst \newif\ifpgfplots@threedim +\newif\ifpgfplots@curplot@threedim \newif\ifpgfplotsthreedim \newif\ifpgfplots@curplot@isirrelevant \newif\ifpgfplots@colorbar @@ -116,6 +118,8 @@ \newif\ifpgfplots@translategnuplot \pgfplots@translategnuplottrue \let\pgfnodepartimagebox=\pgfnodeparttextbox +\newif\ifpgfplotsplothandlermesh@internaldepth +\newif\ifpgfplotsplothandlermesh@hide@refined@edges \newif\ifpgfplots@collect@firstplot@astick \newif\ifpgfplots@units@use @@ -127,6 +131,8 @@ \def\axisdefaultwidth{240pt} \def\axisdefaultheight{207pt} +\def\pgfplotsifaxisthreedim#1#2{\ifpgfplots@threedim #1\else #2\fi}% +\def\pgfplotsifcurplotthreedim#1#2{\ifpgfplots@curplot@threedim #1\else #2\fi}% % Invokes '#2' if a cycle list named '#1' exists and '#3' if not. \long\def\pgfplotsifcyclelistexists#1#2#3{% @@ -167,19 +173,34 @@ red,densely dashed,every mark/.append style={solid,fill=red!80!black},mark=diamond*\\% } \pgfplotscreateplotcyclelist{linestyles}{solid,dashed,dotted} +\pgfplotscreateplotcyclelist{linestyles*}{solid,dashed,dotted,dashdotted,dashdotdotted} \pgfplotscreateplotcyclelist{color list}{red,blue,black,yellow,brown,teal,orange,violet,cyan,green!70!black,magenta,gray} \pgfplotscreateplotcyclelist{mark list}{% - every mark/.append style={fill=.!80!black},mark=*\\% - every mark/.append style={fill=.!80!black},mark=square*\\% - every mark/.append style={fill=.!80!black},mark=triangle*\\% - mark=star\\% - every mark/.append style={fill=.!80!black},mark=diamond*\\% - every mark/.append style={fill=.!80!black},mark=otimes*\\% - mark=|\\% - every mark/.append style={fill=.!80!black},mark=pentagon*\\% - mark=text,text mark=p\\% - mark=text,text mark=a\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=square*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=triangle*\\% + every mark/.append style={solid},mark=star\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=diamond*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill!40},mark=otimes*\\% + every mark/.append style={solid},mark=|\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=pentagon*\\% + every mark/.append style={solid},mark=text,text mark=p\\% + every mark/.append style={solid},mark=text,text mark=a\\% +} +\pgfplotscreateplotcyclelist{mark list*}{% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=square*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=triangle*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=halfsquare*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=pentagon*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=halfcircle*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill,rotate=180},mark=halfdiamond*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill!40},mark=otimes*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=diamond*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=halfsquare right*\\% + every mark/.append style={solid,fill=\pgfplots@mark@list@fill},mark=halfsquare left*\\% } +\def\pgfplots@mark@list@fill{\pgfkeysvalueof{/pgfplots/mark list fill}} \pgfplotscreateplotcyclelist{exotic}{% teal,every mark/.append style={fill=teal!80!black},mark=*\\% orange,every mark/.append style={fill=orange!80!black},mark=square*\\% @@ -200,8 +221,6 @@ \pgfplots@letcsname{pgfp@cyclist@\string\coloredplotspeclist @}={pgfp@cyclist@color@}% %%%% -\def\pgfplotsset#{\pgfqkeys{/pgfplots}} - \def\pgfplotsdeprecatedstylecheck#1{% \pgfkeysifdefined{#1/.@cmd}{% \begingroup @@ -568,12 +587,12 @@ }, /pgfplots/outer axis line style/.style={ /pgfplots/every outer x axis line/.append style={#1}, - /pgfplots/every outer y axis line/.append style={#1}% + /pgfplots/every outer y axis line/.append style={#1},% /pgfplots/every outer z axis line/.append style={#1}% }, /pgfplots/inner axis line style/.style={ /pgfplots/every inner x axis line/.append style={#1}, - /pgfplots/every inner y axis line/.append style={#1}% + /pgfplots/every inner y axis line/.append style={#1},% /pgfplots/every inner z axis line/.append style={#1}% }, /pgfplots/axis line style/.style={ @@ -717,6 +736,15 @@ /pgfplots/every axis legend/.append code={\pgfplotsdeprecatedstylecheck{/tikz/every axis legend}}, /pgfplots/every axis legend/.belongs to family=/pgfplots/style commands, % + % axis type: + /pgfplots/axis type/.initial=rectangle, + /pgfplots/axis type/.belongs to family=/pgfplots/scale, + /pgfplots/@expected axis cs/.initial=cart, + /pgfplots/every rectangle axis/.style={}, + % + % see \pgfplotsdefinecstransform{<from>}{<to>}{<code>} + /pgfplots/data cs/.initial=cart,% the coordinate system of provided data. Will be transformed to the axis' internal coordinate system (@expected axis cs). + % % Colorbar interface: /pgfplots/colorbar/.is if=pgfplots@colorbar, /pgfplots/colorbar/.default=true, @@ -838,13 +866,6 @@ /pgfplots/colorbar/width/.initial=0.5cm, /pgfplots/colorbar addplot/.initial=\addplot graphics {};, /pgfplots/colorbar/draw/.code={% - % FIXME : the semicolon after ';' has a fixed catcode, namely - % the one assigned while pgfplots.code.tex has been read. - % - % The \pgfplots@checkandpreparefor@active@semicolon gets - % confused if the catcodes change... this here is a - % work-around for babel support. - \let\pgfplots@checkandpreparefor@active@semicolon=\relax \axis[every colorbar,colorbar shift,colorbar=false] \pgfkeysvalueof{/pgfplots/colorbar addplot}% \endaxis @@ -1101,6 +1122,17 @@ /pgfplots/minor z tick num=#1, }, /pgfplots/minor tick num/.belongs to family=/pgfplots/tick, + /pgfplots/minor xtick/.initial=, + /pgfplots/minor xtick/.belongs to family=/pgfplots/tick, + /pgfplots/minor ytick/.initial=, + /pgfplots/minor ytick/.belongs to family=/pgfplots/tick, + /pgfplots/minor ztick/.initial=, + /pgfplots/minor ztick/.belongs to family=/pgfplots/tick, + /pgfplots/minor tick/.style={ + /pgfplots/minor xtick={#1}, + /pgfplots/minor ytick={#1}, + /pgfplots/minor ztick={#1}, + }, /pgfplots/minor tick length/.estore in=\pgfplots@subtickwidth, /pgfplots/minor tick length/.belongs to family=/pgfplots/tick, /pgfplots/major tick length/.estore in=\pgfplots@tickwidth, @@ -1285,6 +1317,21 @@ /pgfplots/anchor/.belongs to family=/pgfplots, /pgfplots/anchor/.store in= \pgfplots@anchorname, /pgfplots/anchor=south west, + /pgfplots/log origin x/.is choice, + /pgfplots/log origin x/infty/.code={\def\pgfplots@log@origin@choice@x{0}}, + /pgfplots/log origin x/0/.code={\def\pgfplots@log@origin@choice@x{1}}, + /pgfplots/log origin y/.is choice, + /pgfplots/log origin y/infty/.code={\def\pgfplots@log@origin@choice@y{0}}, + /pgfplots/log origin y/0/.code={\def\pgfplots@log@origin@choice@y{1}}, + /pgfplots/log origin z/.is choice, + /pgfplots/log origin z/infty/.code={\def\pgfplots@log@origin@choice@z{0}}, + /pgfplots/log origin z/0/.code={\def\pgfplots@log@origin@choice@z{1}}, + /pgfplots/log origin/.style={% + /pgfplots/log origin x={#1}, + /pgfplots/log origin y={#1}, + /pgfplots/log origin z={#1}, + }, + /pgfplots/log origin=0, % tick options: /pgfplots/ticks/.is choice, /pgfplots/ticks/.belongs to family=/pgfplots/tick, @@ -1462,8 +1509,6 @@ /pgfplots/ylabel shift={#1}, /pgfplots/zlabel shift={#1}, },% - /pgfplots/before end axis/.code=, - /pgfplots/after end axis/.code=, /pgfplots/extra description/.code=, % axis options: /pgfplots/at/.code={% @@ -1493,9 +1538,36 @@ /pgfplots/clip/.is if=pgfplots@clip, % will be used if it exists: %/pgfplots/axis background/.style={}, - /pgfplots/axis equal/.is if=pgfplots@axis@equal, + % + % 2d: 'unit vector ratio=2 1 is relative to y axis (x is twice as large as y) + % 3d: 'unit vector ratio=2 2 1 is relative to z axis (x and y are both twice as large as z) + % missing values are assumed to be 1. + /pgfplots/unit vector ratio/.initial=,% empty means 'disable rescale'. + /pgfplots/unit vector ratio axis/.initial=,% DEBUG. This is the reference axis which won't be scaled down. This key might vanish. + /pgfplots/unit vector ratio*/.style={% + /pgfplots/unit vector ratio={#1}, + /pgfplots/unit rescale keep size=false, + }, + /pgfplots/unit rescale keep size/.is if=pgfplots@unit@vector@rescale@keep@size, + /pgfplots/unit rescale keep size/.default=true, + /pgfplots/unit rescale keep size=true, + /pgfplots/axis equal/.is choice, + /pgfplots/axis equal/true/.style={ + /pgfplots/unit vector ratio=1 1 1, + /pgfplots/unit rescale keep size=true + }, + /pgfplots/axis equal/false/.style={ + /pgfplots/unit vector ratio=, + }, /pgfplots/axis equal/.default=true, - /pgfplots/axis equal image/.is if=pgfplots@axis@equal@image, + /pgfplots/axis equal image/.is choice, + /pgfplots/axis equal image/true/.style={% + /pgfplots/unit vector ratio=1 1 1, + /pgfplots/unit rescale keep size=false + }, + /pgfplots/axis equal image/false/.style={% + /pgfplots/unit vector ratio=, + }, /pgfplots/axis equal image/.default=true, /pgfplots/xmin/.initial=, /pgfplots/xmax/.initial=, @@ -1503,6 +1575,8 @@ /pgfplots/ymax/.initial=, /pgfplots/zmin/.initial=, /pgfplots/zmax/.initial=, + /pgfplots/min/.style={xmin={#1},ymin={#1},zmin={#1}}, + /pgfplots/max/.style={xmax={#1},ymax={#1},zmax={#1}}, /pgfplots/xtickmin/.initial=, /pgfplots/xtickmax/.initial=, /pgfplots/ytickmin/.initial=, @@ -1533,6 +1607,7 @@ /pgfplots/stack dir=plus, /pgfplots/filter discard warning/.is if=pgfplots@warn@for@filter@discards, /pgfplots/filter discard warning=true, + /pgfplots/pre filter/.code={}, /pgfplots/x filter/.code={}, /pgfplots/x filter/.belongs to family=/pgfplots, /pgfplots/y filter/.code={}, @@ -1548,9 +1623,9 @@ /pgfplots/restrict y to domain*/.style={/pgfplots/@restrict to domain={y}{}{#1}{1}},% /pgfplots/restrict z to domain*/.style={/pgfplots/@restrict to domain={z}{}{#1}{1}},% /pgfplots/restrict expr to domain*/.style 2 args={/pgfplots/@restrict to domain={x}{#1}{#2}{1}},% - % '#1': the filter to install + % '#1': the filter to install (like 'x', 'y', or even 'hist/data') % '#2': a mathematical expression (or empty) - % '#3': the interval. must be numeric currently. + % '#3': the interval. must be numeric currently, and of the form min:max % '#4': bAssignLimits=0|1. if #4=1, any coordinate outside of the % allowed domain will take the domain boundary as value. If #4=0, % any coordinate outside of the allowed domain will get 'inf' or @@ -1567,31 +1642,31 @@ \def\pgfplots@restrict@to@domain@tmp{#2}% \ifx\pgfplots@restrict@to@domain@tmp\pgfutil@empty % we don't have an expression. - \pgfmathfloatparsenumber{\pgfmathresult}% \else % evaluate the expression! \pgfmathparse{#2}% \fi + \pgfplotscoordmath{default}{parsenumber}{\pgfmathresult}% \let\pgfplots@restrict@to@domain@tmp=\pgfmathresult - \pgfmathfloatlessthan@{\pgfplots@restrict@to@domain@tmp}{##1}% ##1 is the lower argument - \ifpgfmathfloatcomparison - \edef\pgfmathresult{\if0#4inf\else ##1\fi}% - \else - \pgfmathfloatgreaterthan@{\pgfplots@restrict@to@domain@tmp}{##2}% - \ifpgfmathfloatcomparison - \edef\pgfmathresult{\if0#4-inf\else ##2\fi}% - \else - \let\pgfmathresult=\pgfplots@restrict@to@domain@orig - \fi - \fi + % + \pgfplotscoordmath{default}{if less than} + {\pgfplots@restrict@to@domain@tmp}{##1}% ##1 is the lower argument + {% + \edef\pgfmathresult{\if0#4inf\else ##1\fi}% + }{% + \pgfplotscoordmath{default}{if less than} + {##2}{\pgfplots@restrict@to@domain@tmp} + {\edef\pgfmathresult{\if0#4-inf\else ##2\fi}} + {\let\pgfmathresult=\pgfplots@restrict@to@domain@orig}% + }% }% }% }% % when invoked, ##1 and ##2 will be the user-supplied args. \def\pgfplots@loc@TMPc##1:##2\relax{% - \pgfmathfloatparsenumber{##1}% + \pgfplotscoordmath{default}{parsenumber}{##1}% \let\pgfplots@rangea=\pgfmathresult - \pgfmathfloatparsenumber{##2}% + \pgfplotscoordmath{default}{parsenumber}{##2}% \edef\pgfplots@loc@TMPc{\pgfplots@rangea:\pgfmathresult}% \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPc\relax }% @@ -1599,11 +1674,14 @@ \expandafter\pgfplots@loc@TMPc\pgfplots@loc@TMPa\relax },% % -> keeps only the nth point, all other ones will get ''. - /pgfplots/each nth point/.style={% - /pgfplots/x filter/.append code={% + /pgfplots/each nth point/.style={/pgfplots/each nth point*={x}{#1}},% + % #1: the filter name: x, y, z, or something exotic like hist/data + % #2: the N of 'each nth' + /pgfplots/each nth point*/.style 2 args={% + /pgfplots/#1 filter/.append code={% \ifnum\coordindex=0 \def\c@pgfplots@eachnthpoint@xfilter{0}% - \edef\c@pgfplots@eachnthpoint@xfilter@cmp{#1}% + \edef\c@pgfplots@eachnthpoint@xfilter@cmp{#2}% \else \pgfplotsutil@advancestringcounter\c@pgfplots@eachnthpoint@xfilter \ifx\c@pgfplots@eachnthpoint@xfilter@cmp\c@pgfplots@eachnthpoint@xfilter @@ -1614,11 +1692,14 @@ \fi }% }, - /pgfplots/skip coords between index/.style 2 args={% - /pgfplots/x filter/.append code={% - \ifnum\coordindex<#1\relax + /pgfplots/skip coords between index/.style 2 args={/pgfplots/skip coords between index*={x}{#1}{#2}},% + % #1: the filter name + % #2,#3: from 'skip coords between index' + /pgfplots/skip coords between index*/.style n args={3}{% + /pgfplots/#1 filter/.append code={% + \ifnum\coordindex<#2\relax \else - \ifnum\coordindex<#2\relax + \ifnum\coordindex<#3\relax \let\pgfmathresult=\pgfutil@empty \fi \fi} @@ -1647,6 +1728,7 @@ /pgfplots/samples y/.initial=,% empty -> use the same as 'samples'. For use in mesh plots. /pgfplots/variable/.code={\pgfkeysalso{/tikz/variable={#1}}}, /pgfplots/variable y/.initial=\y,% + /pgfplots/sample dim/.initial=auto, % and provide aliases in the '/pgfplots/' tree to avoid % search path problems just for the following options: /pgfplots/name/.code={\pgfkeysalso{/tikz/name={#1}}}, @@ -1662,9 +1744,17 @@ /pgfplots/height/.initial=,% /pgfplots/height/.belongs to family=/pgfplots, /pgfplots/execute at begin plot/.initial=, + /pgfplots/execute at begin plot visualization/.initial=, /pgfplots/execute at begin plot@@/.initial=,% an internal variant /pgfplots/execute at end plot/.initial=, + /pgfplots/execute at end plot visualization/.initial=, /pgfplots/execute at end plot@@/.initial=,% an internal variant + /pgfplots/execute at end survey/.initial=,% + /pgfplots/execute at begin axis/.initial=, + /pgfplots/execute at end axis/.initial=, + /pgfplots/execute for finished point/.initial=, + /pgfplots/before end axis/.code=, + /pgfplots/after end axis/.code=, /pgfplots/enlarge x limits/.initial=auto, /pgfplots/enlarge x limits/.default=true, /pgfplots/enlarge y limits/.initial=auto, @@ -1684,16 +1774,31 @@ /pgfplots/y/.belongs to family=/pgfplots, /pgfplots/z/.initial=, /pgfplots/z/.belongs to family=/pgfplots, + /pgfplots/view dir/.initial=,% DEBUG /pgfplots/x dir/.code={\pgfplots@setkey@axisdir@for x{#1}},% /pgfplots/y dir/.code={\pgfplots@setkey@axisdir@for y{#1}},% /pgfplots/z dir/.code={\pgfplots@setkey@axisdir@for z{#1}},% /pgfplots/x dir=normal,% /pgfplots/y dir=normal,% /pgfplots/z dir=normal,% + /pgfplots/x post scale/.initial=, + /pgfplots/y post scale/.initial=, + /pgfplots/z post scale/.initial=, + /pgfplots/scale/.style={% + /pgfplots/x post scale={#1},% + /pgfplots/y post scale={#1},% + /pgfplots/z post scale={#1},% + }, + /pgfplots/scale mode/.is choice, + /pgfplots/scale mode/auto/.code={\def\pgfplots@scale@mode@choice{0}}, + /pgfplots/scale mode/none/.code={\def\pgfplots@scale@mode@choice{1}}, + /pgfplots/scale mode/stretch to fill/.code={\def\pgfplots@scale@mode@choice{2}}, + /pgfplots/scale mode/scale uniformly/.code={\def\pgfplots@scale@mode@choice{3}}, + /pgfplots/scale mode/auto, /pgfplots/allow reversal of rel axis cs/.is if=pgfplots@allow@reversal@of@rel@axis@cs,% /pgfplots/allow reversal of rel axis cs/.default=true,% /pgfplots/allow reversal of rel axis cs=true,% - /pgfplots/plot box ratio/.initial={1}{1}{1},% + /pgfplots/plot box ratio/.initial=1 1 1,% /pgfplots/view/az/.initial=25,% /pgfplots/view/h/.code={\pgfkeyssetvalue{/pgfplots/view/az}{#1}},% /pgfplots/view/el/.initial=30,% @@ -1720,6 +1825,7 @@ /pgfplots/cycle list name/.belongs to family=/pgfplots, /pgfplots/cycle list name=color, /pgfplots/cycle list shift/.initial=, + /pgfplots/mark list fill/.initial=.!80!black, % accepts arguments of the form % <first list spec>\nextlist <second list spec>\nextlist .... % where each list spec is EITHER a cycle list name OR a cycle list @@ -2278,7 +2384,7 @@ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname% \def\pgfplots@nodes@near@coords@align{above}% \else - \pgfmathfloatifflags{\pgfplotspointmeta}{2}{% + \pgfplotscoordmath{meta}{if is}{\pgfplotspointmeta}{-}{% % \pgfplotspointmeta < 0 \def\pgfplots@nodes@near@coords@align{left}% }{% @@ -2292,7 +2398,7 @@ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname% \def\pgfplots@nodes@near@coords@align{above}% \else - \pgfmathfloatifflags{\pgfplotspointmeta}{2}{% + \pgfplotscoordmath{meta}{if is}{\pgfplotspointmeta}{-}{% % \pgfplotspointmeta < 0 \def\pgfplots@nodes@near@coords@align{below}% }{% @@ -2333,11 +2439,17 @@ },% },% /pgfplots/nodes near coords*/.default={\pgfmathprintnumber\pgfplotspointmeta}, + /pgfplots/visualization depends on/list/.initial=,% + /pgfplots/visualization depends on/.style={% + /pgfplots/visualization depends on/list/.add={}{,{#1}}% + }, /pgfplots/bar cycle list/.style={/pgfplots/cycle list={% {blue,fill=blue!30!white,mark=none},% {red,fill=red!30!white,mark=none},% {brown!60!black,fill=brown!30!white,mark=none},% {black,fill=gray,mark=none},% + {violet!80!black,fill=violet,mark=none},% + {green,fill=green!80!black,mark=none}% } }, /pgfplots/area cycle list/.style={bar cycle list}, @@ -2354,6 +2466,9 @@ /pgfplots/ybar legend/.style={ /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt] plot coordinates {(0cm,0.8em) (2*\pgfplotbarwidth,0.6em)};}, }, + /pgfplots/single ybar legend/.style={ + /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,bar width=6pt,yshift=-0.2em,bar shift=0pt] plot coordinates {(0pt,0.8em)};}, + }, /pgfplots/ybar/.style={ bar cycle list, xtick align=outside, @@ -2383,6 +2498,9 @@ /pgfplots/xbar legend/.style={ /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,bar width=3pt,yshift=-0.2em,bar shift=0pt] plot coordinates {(0cm,0.8em) (2*\pgfplotbarwidth,0.6em)};}, }, + /pgfplots/single xbar legend/.style={ + /pgfplots/legend image code/.code={\draw[##1,/tikz/.cd,bar width=6pt,yshift=-0.2em,bar shift=0pt] plot coordinates {(0pt,0.8em)};}, + }, /pgfplots/xbar/.style={ bar cycle list, ytick align=outside, @@ -2444,6 +2562,7 @@ /pgfplots/xbar stacked/.style={ /pgfplots/set point meta if empty=x,% bar cycle list, + single xbar legend, stack plots=x, stack dir=#1, /tikz/xbar, @@ -2452,6 +2571,7 @@ /pgfplots/ybar stacked/.style={ /pgfplots/set point meta if empty=f(x),% bar cycle list, + single ybar legend, stack plots=y, stack dir=#1, /tikz/ybar, @@ -2460,6 +2580,7 @@ /pgfplots/xbar interval stacked/.style={ /pgfplots/set point meta if empty=x,% bar cycle list, + single xbar legend, stack plots=x, stack dir=#1, /tikz/xbar interval, @@ -2468,6 +2589,7 @@ /pgfplots/ybar interval stacked/.style={ /pgfplots/set point meta if empty=f(x),% bar cycle list, + single ybar legend, stack plots=y, stack dir=#1, /tikz/ybar interval, @@ -2496,6 +2618,29 @@ /pgfplots/plot graphics/ymax/.initial=, /pgfplots/plot graphics/zmin/.initial=, /pgfplots/plot graphics/zmax/.initial=, + % + % a) to provide a bounding box: points={(0,1) (0,2)} + % or b) to squeeze the graphics into internal image coordinates: + % points={(0,1,0) => (0,4) (0,0,1) => (40,600)} + % or c) both of them. + /pgfplots/plot graphics/points/.initial=, + /pgfplots/plot graphics/auto adjust axis/.is if=pgfplots@plot@graphics@autoadjustaxis, + /pgfplots/plot graphics/auto adjust axis=true, + /pgfplots/plot graphics/snap z/.initial=0.02, + /pgfplots/plot graphics/debug/.initial=, + /pgfplots/plot graphics/debug/.default=true, + /pgfplots/plot graphics/squeeze tol/.initial=2pt, + % + % this command key should defined \pgfmathresult to be + % \pgfmathresult -> {{<wd>}{<ht>}} + % where <wd> is the natural width of the input image and + % <ht> is the natural height. + % The input image file name is available as 'plot graphics/src'. + % The default implementation invoked 'lowlevel draw={}{}' and + % measures the resulting dimensions. + /pgfplots/plot graphics/lowlevel get natural size/.code={% + \pgfplots@plot@handler@graphics@getnaturalsize + }, /pgfplots/plot graphics/lowlevel draw/.code 2 args={% \pgfplots@plot@handler@graphics@DRAW{#1}{#2}% },% @@ -2508,6 +2653,9 @@ at={(0pt,0pt)}, rectangle }, + % empty line=none|auto|scanline|nan|jump + % nan and jump is the same. + /pgfplots/empty line/.initial=auto, % 'mesh' plots. % The macro \pgfplots@meshmode is % n if meshmode == false, @@ -2531,6 +2679,44 @@ \pgfkeysalso{/pgfplots/mesh=#1}% \def\pgfplots@meshmode{s}% },% + /pgfplots/patch/.code={% + \pgfkeysalso{/pgfplots/surf=#1,/pgfplots/mesh input=patches,/pgfplots/every patch}% + },% + /pgfplots/every patch/.style={miter limit=1}, + /pgfplots/patch table/value/.initial=, + /pgfplots/patch table/.code={ + \pgfkeyssetvalue{/pgfplots/patch table/value}{#1}% + \pgfplotsplothandlermesh@patchtable@hascdatafalse + }, + /pgfplots/patch table with point meta/.code={% + \pgfkeyssetvalue{/pgfplots/patch table/value}{#1}% + \pgfplotsplothandlermesh@patchtable@hascdatatrue + \pgfplotsplothandlermesh@patchtable@cdata@individualfalse + \pgfkeysalso{/pgfplots/point meta/explicit}% + }, + /pgfplots/patch table with individual point meta/.code={% + \pgfkeyssetvalue{/pgfplots/patch table/value}{#1}% + \pgfplotsplothandlermesh@patchtable@hascdatatrue + \pgfplotsplothandlermesh@patchtable@cdata@individualtrue + \pgfkeysalso{/pgfplots/point meta/explicit}% + }, + /pgfplots/patch type/.initial=, + /pgfplots/patch internal depth/.is if=pgfplotsplothandlermesh@internaldepth, + /pgfplots/patch internal depth=true, + /pgfplots/patch to triangles/.is choice, + /pgfplots/patch to triangles/false/.code= {\def\pgfplotsplothandlermesh@triangulate{0}}, + /pgfplots/patch to triangles/true/.code= {\def\pgfplotsplothandlermesh@triangulate{1}}, + /pgfplots/patch to triangles/true with edges/.code= {\def\pgfplotsplothandlermesh@triangulate{2}}, + /pgfplots/patch to triangles=false, + /pgfplots/patch to triangles/.default=true, + /pgfplots/mesh input/.is choice, + /pgfplots/mesh input/lattice/.code= {\def\pgfplotsplothandlermesh@matrixinput{1}}, + /pgfplots/mesh input/patches/.code= {\def\pgfplotsplothandlermesh@matrixinput{0}}, + /pgfplots/mesh input/lattice, + /pgfplots/patch refines/.initial=0, + /pgfplots/hide refined edges/.is if=pgfplotsplothandlermesh@hide@refined@edges, + /pgfplots/hide refined edges/.default=true, + /pgfplots/mesh/refines/.style={/pgfplots/patch refines={#1}}, /pgfplots/mesh/rows/.initial=, /pgfplots/mesh/cols/.initial=, /pgfplots/mesh/scanline verbose/.is if=pgfplots@scanline@verbose,% @@ -2566,7 +2752,7 @@ \pgfplotsplothandlermesh@defaultlegend@img{##1}% }% }, - /pgfplots/mesh/num points/.initial=\numcoords,% this is NOT part of the public interface. Don't change it. + /pgfplots/mesh/num points/.initial=,%\numcoords,% this is NOT part of the public interface. Don't change it. /pgfplots/z buffer/.is choice,% /pgfplots/z buffer/none/.code={\def\pgfplotsplothandlermesh@zbuffer@choice{0}},% /pgfplots/z buffer/reverse x seq/.code={\def\pgfplotsplothandlermesh@zbuffer@choice{1}},% @@ -2592,6 +2778,7 @@ /pgfplots/shader/flat/.style={/pgfplots/shader/flat mean},% /pgfplots/shader/faceted/.code={\def\pgfplotsplothandlermesh@shader{1}}, /pgfplots/shader/interp/.code={\def\pgfplotsplothandlermesh@shader{2}}, + /pgfplots/shader/faceted interp/.code={\def\pgfplotsplothandlermesh@shader{3}}, /pgfplots/shader/faceted, /pgfplots/faceted color/.initial=mapped color!80!black, /pgfplots/clip marker paths/.is if=pgfplots@clip@marker@paths, @@ -2636,19 +2823,22 @@ /pgfplots/z coord trafo/.code={}, /pgfplots/z coord inv trafo/.code={}, % - % #1 = {<symbol1>,<symbol2>,....<symboln>} + % #1 : the coordinate in question. Can be x,y,z, or even hist/data + % or similar constructs. + % #2 : {<symbol1>,<symbol2>,....<symboln>} /pgfplots/symbolic coords/.code 2 args={% - \pgfplotsarraynew\pgfplots@symbolic@coords@inverse{#2}% - \pgfplotsarrayforeachungrouped\pgfplots@symbolic@coords@inverse\as\pgfplots@loc@TMPa{% - \expandafter\edef\csname pgfp@symb@coords@\pgfplots@loc@TMPa\endcsname{\pgfplotsarrayforeachindex}% + \expandafter\pgfplotsarraynew\csname pgfplots@symbolic@coords@#1@inverse\endcsname{#2}% + \expandafter\pgfplotsarrayforeachungrouped\csname pgfplots@symbolic@coords@#1@inverse\endcsname\as\pgfplots@loc@TMPa{% + \expandafter\edef\csname pgfp@symb@coords@#1@\pgfplots@loc@TMPa\endcsname{\pgfplotsarrayforeachindex}% }% \pgfkeysdef{/pgfplots/#1 coord trafo}{% - \pgfutil@ifundefined{pgfp@symb@coords@##1}{% + \pgfutil@ifundefined{pgfp@symb@coords@#1@##1}{% \pgfplots@error{Sorry, the input coordinate `##1' has not been defined with 'symbolic #1 coords={#2}... Maybe it has been misspelled?}% \def\pgfmathresult{0}% }{% - \edef\pgfmathresult{\csname pgfp@symb@coords@##1\endcsname}% + \edef\pgfmathresult{\csname pgfp@symb@coords@#1@##1\endcsname}% }% +%\message{#1 coord trafo{##1} --> \pgfmathresult^^J}% }% \pgfkeysdef{/pgfplots/#1 coord inv trafo}{% \begingroup @@ -2659,22 +2849,38 @@ \ifnum\count0<0 \count0=0 \else - \count1=\pgfplotsarraysizeof\pgfplots@symbolic@coords@inverse\relax + \edef\pgfplots@loc@TMPa{\expandafter\pgfplotsarraysizeof\csname pgfplots@symbolic@coords@#1@inverse\endcsname}% + \count1=\pgfplots@loc@TMPa\relax \ifnum\count0<\count1 \else \count0=\count1 \advance\count0 by-1 \fi \fi - \pgfplotsarrayselect\count0 \of\pgfplots@symbolic@coords@inverse\to\pgfmathresult + \expandafter\pgfplotsarrayselect\expandafter\count\expandafter0\expandafter\of\csname pgfplots@symbolic@coords@#1@inverse\endcsname\to\pgfmathresult +%\message{#1 coord inv trafo{##1} -->\the\count0 --> \pgfmathresult^^J}% \pgfmath@smuggleone\pgfmathresult \endgroup }% - \pgfkeysalso{% - /pgfplots/#1ticklabel={\tick},% - /pgfplots/scaled #1 ticks=false,% - /pgfplots/plot coordinates/math parser=false,% + \pgfkeysifdefined{/pgfplots/#1ticklabel/.@cmd}{% + \pgfkeysalso{% + /pgfplots/#1ticklabel={\tick},% + /pgfplots/scaled #1 ticks=false,% + /pgfplots/plot coordinates/math parser=false,% + }% + }{% + % OK. The style can be used for other coordinates as well + % (like hist/data) }% + % + \pgfkeysifdefined{/pgfplots/#1 is expr}{% + \pgfkeyssetvalue{/pgfplots/#1 is expr}{0}% + }{}% + % + % Allow a callback (optional) + \pgfkeysifdefined{/pgfplots/#1/@execute on coord trafo changed/.@cmd}{% + \pgfkeysalso {/pgfplots/#1/@execute on coord trafo changed}% + }{}% },% /pgfplots/symbolic x coords/.style={symbolic coords={x}{#1}},% /pgfplots/symbolic y coords/.style={symbolic coords={y}{#1}},% @@ -2712,6 +2918,7 @@ /pgfplots/colormap access/direct/.code={\def\pgfplots@colormap@access{d}},% /pgfplots/colormap access/map/.code={\def\pgfplots@colormap@access{m}},% /pgfplots/colormap access/map,% + %/pgfplots/colormap default colorspace/.initial=auto,% declared in pgfplotscolormap.code.tex /pgfplots/colormap/.code 2 args={% \pgfplotscreatecolormap{#1}{#2}% \pgfkeysalso{/pgfplots/colormap name=#1}% @@ -2719,6 +2926,9 @@ /pgfplots/colormap/hot/.style={ colormap name=hot }, + /pgfplots/colormap/hot2/.style={ + /pgfplots/colormap={hot2}{[1cm]rgb255(0cm)=(0,0,0) rgb255(3cm)=(255,0,0) rgb255(6cm)=(255,255,0) rgb255(8cm)=(255,255,255)} + }, /pgfplots/colormap/bluered/.style={ /pgfplots/colormap={bluered}{rgb255(0cm)=(0,0,180); rgb255(1cm)=(0,255,255); rgb255(2cm)=(100,255,0); rgb255(3cm)=(255,255,0); rgb255(4cm)=(255,0,0); rgb255(5cm)=(128,0,0)} }, @@ -2737,6 +2947,12 @@ /pgfplots/colormap/violet/.style={ colormap={violet}{rgb255=(25,25,122) color=(white) rgb255=(238,140,238)} }, + /pgfplots/colormap/jet/.style={ + /pgfplots/colormap={jet}{rgb255(0cm)=(0,0,128) rgb255(1cm)=(0,0,255) rgb255(3cm)=(0,255,255) rgb255(5cm)=(255,255,0) rgb255(7cm)=(255,0,0) rgb255(8cm)=(128,0,0)} + }, + % + % + %% /pgfplots/scatter/.is choice, /pgfplots/scatter/false/.code={% \pgfplots@scatterplotenabledfalse @@ -2909,8 +3125,18 @@ /pgfplots/compat/anchors/pre 1.3/.code={\pgfplots@deprecated@anchorstrue},% FIXME: WAS \global /pgfplots/compat/anchors/1.3/.code= {\pgfplots@deprecated@anchorsfalse},% /pgfplots/compat/anchors/1.4/.style= {/pgfplots/compat/anchors/1.3},% + /pgfplots/compat/anchors/1.5/.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},% + % + /pgfplots/compat/empty line/.is choice, + /pgfplots/compat/empty line/pre 1.3/.code={\pgfplots@emptyline@compattrue},% FIXME: WAS \global + /pgfplots/compat/empty line/1.3/.style= {/pgfplots/compat/empty line/pre 1.3},% + /pgfplots/compat/empty line/1.4/.code= {\pgfplots@emptyline@compatfalse},% + /pgfplots/compat/empty line/1.5/.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},% + % /pgfplots/compat/labels/.is choice, /pgfplots/compat/labels/pre 1.3/.style={% /pgfplots/xlabel absolute, @@ -2919,14 +3145,41 @@ /pgfplots/xlabel near ticks, /pgfplots/ylabel near ticks},% /pgfplots/compat/labels/1.4/.style= {/pgfplots/compat/labels/1.3},% + /pgfplots/compat/labels/1.5/.style= {/pgfplots/compat/labels/1.3},% /pgfplots/compat/labels/newest/.style= {/pgfplots/compat/labels/1.3},% /pgfplots/compat/labels/default/.style= {/pgfplots/compat/labels/pre 1.3},% maintain backwards compatibility for labels :-( + % + % search for the \pgfplots@compat@scaling@coordmath -- using float + % is much more accurate. But it changes the spacing slightly. + /pgfplots/compat/scaling/.is choice, + /pgfplots/compat/scaling/pre 1.3/.code={% + \def\pgfplots@compat@scaling@zunitfix@enable{0}% + \def\pgfplots@compat@scaling@coordmath{pgfbasic}}, + /pgfplots/compat/scaling/1.3/.style={/pgfplots/compat/scaling/pre 1.3}, + /pgfplots/compat/scaling/1.4/.code={% + \def\pgfplots@compat@scaling@zunitfix@enable{1}% + \def\pgfplots@compat@scaling@coordmath{float}}, + /pgfplots/compat/scaling/1.5/.style={/pgfplots/compat/scaling/1.4}, + /pgfplots/compat/scaling/newest/.style={/pgfplots/compat/scaling/1.4}, + /pgfplots/compat/scaling/default/.style={/pgfplots/compat/scaling/1.4}, + /pgfplots/compat/general/.is choice, + /pgfplots/compat/general/pre 1.3/.style={/pgfplots/log origin=infty},% + /pgfplots/compat/general/1.3/.style={/pgfplots/compat/general/pre 1.3}, + /pgfplots/compat/general/1.4/.style={/pgfplots/compat/general/pre 1.3},% + /pgfplots/compat/general/1.5/.style={/pgfplots/compat/general/newest},% + /pgfplots/compat/general/newest/.style={/pgfplots/log origin=0}, + /pgfplots/compat/general/default/.style={/pgfplots/compat/general/newest}, /pgfplots/compat/.style={% + % ATTENTION: *every* /pgfplots/compat/ setting needs to accept + % the same choices due to this construction: /pgfplots/compat/anchors=#1,% /pgfplots/compat/labels=#1,% + /pgfplots/compat/empty line=#1,% + /pgfplots/compat/scaling=#1,% + /pgfplots/compat/general=#1,% },% - /pgfplots/compat/.default=pre 1.3,% - /pgfplots/compat=default,% + /pgfplots/compat/.default=pre 1.3,% this is used if you type '\pgfplotsset{compat}' without value + /pgfplots/compat=default,% this is the initial config. % /pgfplots/show outer normals/.style={% extra description/.append code={ @@ -3004,6 +3257,8 @@ },% } +\pgfkeysgetvalue{/pgfplots/colorbar/draw/.@cmd}\pgfplots@colorbar@draw@defaultimpl + % call % \pgfkeyslet{.../.@cmd}\pgfplots@cant@set@in@this@context % to replace a key with a generic error message. @@ -3014,10 +3269,10 @@ { -\pgfkeysdef{/pgfplots/empty command key}{}% -\pgfkeysgetvalue{/pgfplots/empty command key/.@cmd}\pgfplots@loc@TMPa +\pgfkeysdef{/empty}{}% +\pgfkeysgetvalue{/empty/.@cmd}\pgfplots@loc@TMPa \global\let\pgfplots@empty@command@key=\pgfplots@loc@TMPa - +% \pgfkeys{/empty/.style={}}% \pgfkeysgetvalue{/empty/.@cmd}\pgfplots@loc@TMPa \global\let\pgfplots@empty@style@key=\pgfplots@loc@TMPa @@ -3138,7 +3393,7 @@ % \pgfkeysgetvalue{/tikz/sloped/.@cmd}\pgfplots@loc@TMPa \pgfkeyslet{/tikz/sloped/orig/.@cmd}\pgfplots@loc@TMPa - \pgfkeysdef{/tikz/sloped}{\pgfkeysalso{/tikz/sloped like #1 axis}}% + \pgfkeysdef{/tikz/sloped}{\pgfkeysalso{/tikz/sloped like #1 axis={##1}}}% % \node [/pgfplots/every axis label,% @@ -3186,16 +3441,18 @@ \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{0}{% \draw decorate { \pgfextra - \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1min\endcsname}{\csname pgfplots@#2min\endcsname}}% - \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1max\endcsname}{\csname pgfplots@#2min\endcsname}}% + % exchange roles of A <-> B axes: + \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}% + \pgfplots@drawgridlines@onorientedsurf@fromto{\csname pgfplots@#2min\endcsname}% \endpgfextra }; }{}% \pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn{1}{% \draw decorate { \pgfextra - \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1min\endcsname}{\csname pgfplots@#2max\endcsname}}% - \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1max\endcsname}{\csname pgfplots@#2max\endcsname}}% + % exchange roles of A <-> B axes: + \pgfplotspointonorientedsurfaceabsetupfor{#2}{#1}{\pgfplotspointonorientedsurfaceN}% + \pgfplots@drawgridlines@onorientedsurf@fromto{\csname pgfplots@#2max\endcsname}% \endpgfextra }; }{}% @@ -3215,52 +3472,50 @@ % drawn as box. \def\pgfplots@drawaxis@outerlines@cycledpath{% \draw[ - /pgfplots/every outer x axis line, % FIXME! these outer styles need much more attention :-( + /pgfplots/every outer x axis line, % using these outer styles is only useful in conjunction with 'separate axis lines=true' /pgfplots/every outer y axis line] - % FIXME : replace this here with basic layer! This should also - % allow closed paths: - (\pgfplots@xmin, \pgfplots@ymin) + \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}}\endpgfextra \ifpgfplots@hide@y - { (\pgfplots@xmin, \pgfplots@ymax) } + { \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}\endpgfextra } \else - \ifcase\pgfplots@yaxislinesnum - decorate [ydiscont,decoration={pre length=\ydisstart, post length=\ydisend}] { -- (\pgfplots@xmin, \pgfplots@ymax) } - \or decorate [ydiscont,decoration={pre length=\ydisstart, post length=\ydisend}] { -- (\pgfplots@xmin, \pgfplots@ymax) } - \or { (\pgfplots@xmin, \pgfplots@ymax) } - \or { (\pgfplots@xmin, \pgfplots@ymax) } - \fi + decorate [ydiscont,decoration={pre length=\ydisstart, post length=\ydisend}] + % { -- (\pgfplots@xmin, \pgfplots@ymax) } + { \pgfextra\pgfpathlineto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}\endpgfextra } \fi \ifpgfplots@hide@x - { (\pgfplots@xmax, \pgfplots@ymax) } + %{ (\pgfplots@xmax, \pgfplots@ymax) } + { \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}\endpgfextra } \else - \ifcase\pgfplots@xaxislinesnum - decorate [xdiscont,decoration={pre length=\xdisstart, post length=\xdisend}] { -- (\pgfplots@xmax, \pgfplots@ymax) } - \or { (\pgfplots@xmax, \pgfplots@ymax) } - \or { (\pgfplots@xmax, \pgfplots@ymax) } - \or decorate [xdiscont,decoration={pre length=\xdisstart, post length=\xdisend}] { -- (\pgfplots@xmax, \pgfplots@ymax) } - \fi + decorate [xdiscont,decoration={pre length=\xdisstart, post length=\xdisend}] + %{ -- (\pgfplots@xmax, \pgfplots@ymax) } + { \pgfextra\pgfpathlineto{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}\endpgfextra } \fi \ifpgfplots@hide@y - { (\pgfplots@xmax, \pgfplots@ymin) } + %{ (\pgfplots@xmax, \pgfplots@ymin) } + { \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}\endpgfextra } \else - \ifcase\pgfplots@yaxislinesnum - decorate [ydiscont,decoration={pre length=\ydisend, post length=\ydisstart}] { -- (\pgfplots@xmax, \pgfplots@ymin) } - \or { (\pgfplots@xmax, \pgfplots@ymin) } - \or { (\pgfplots@xmax, \pgfplots@ymin) } - \or decorate [ydiscont,decoration={pre length=\ydisend, post length=\ydisstart}] { -- (\pgfplots@xmax, \pgfplots@ymin) } - \fi + decorate [ydiscont,decoration={pre length=\ydisend, post length=\ydisstart}] + %{ -- (\pgfplots@xmax, \pgfplots@ymin) } + { \pgfextra\pgfpathlineto{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}\endpgfextra } \fi \ifpgfplots@hide@x - { (\pgfplots@xmin, \pgfplots@ymin) } + %{ (\pgfplots@xmin, \pgfplots@ymin) } + { \pgfextra\pgfpathmoveto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}}\endpgfextra } \else - \ifcase\pgfplots@xaxislinesnum - decorate [xdiscont,decoration={pre length=\xdisend, post length=\xdisstart}] { -- (\pgfplots@xmin, \pgfplots@ymin) } - \or decorate [xdiscont,decoration={pre length=\xdisend, post length=\xdisstart}] { -- (\pgfplots@xmin, \pgfplots@ymin) } - \or { (\pgfplots@xmin, \pgfplots@ymin) } - \or { (\pgfplots@xmin, \pgfplots@ymin) } - \fi% can't use cycle here! + decorate [xdiscont,decoration={pre length=\xdisend, post length=\xdisstart}] + %{ -- (\pgfplots@xmin, \pgfplots@ymin) } + { \pgfextra\pgfpathlineto{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}}\endpgfextra } \fi - ; % -- cycle; + % make sure that we do not have any of the axis discontinuities + % here - they should not be closed. + \if0\pgfplots@xaxisdiscontnum + \else + \if0\pgfplots@yaxisdiscontnum + \else + -- cycle + \fi + \fi + ;% }% % Assigns the macros @@ -3311,12 +3566,13 @@ \fi }% -\def\pgfplots@rememberplotspec@for@label{\pgfutil@ifnextchar[{\pgfplots@rememberplotspec@for@label@}{\pgfplots@rememberplotspec@for@label@[]}}% +\def\pgfplots@rememberplotspec@for@label{\pgfplotsutil@ifnextchar[{\pgfplots@rememberplotspec@for@label@}{\pgfplots@rememberplotspec@for@label@[]}}% \def\pgfplots@rememberplotspec@for@label@[#1]#2{% - \expandafter\gdef\csname pgfplots@last@plot@style@#1\endcsname{#2}% + \t@pgfplots@tokc={#2}% this token register stuff allows '#' inside of '#2' + \expandafter\xdef\csname pgfplots@last@plot@style@#1\endcsname{\the\t@pgfplots@tokc}% \global\pgfplots@has@label@informationtrue }% -\def\pgfplots@rememberplotspec{\pgfutil@ifnextchar[{\pgfplots@rememberplotspec@opt}{\pgfplots@rememberplotspec@opt[]}}% +\def\pgfplots@rememberplotspec{\pgfplotsutil@ifnextchar[{\pgfplots@rememberplotspec@opt}{\pgfplots@rememberplotspec@opt[]}}% \def\pgfplots@rememberplotspec@opt[#1]#2{% \pgfplots@rememberplotspec@for@label[#1]{#2}% \pgfplotslistpushbackglobal{#2}\to\pgfplots@plotspeclist @@ -3410,8 +3666,19 @@ \axispath\path#1;% } \def\pgfplots@replacement@for@scope{\pgfutil@ifnextchar[{\pgfplots@replacement@for@scope@}{\pgfplots@replacement@for@scope@[]}}% -\def\pgfplots@replacement@for@scope@[#1]{\pgfplotsextra{\scope[#1]}}% -\def\pgfplots@replacement@for@endscope{\pgfplotsextra\endscope}% +\def\pgfplots@replacement@for@scope@[#1]{% + \pgfplotsextra{\scope[#1]}% + \begingroup + % I need to apply anything which might be relevant for \addplot + % here. + % But I do NOT want \scope since this might already affect the low + % level output. Try this: + \tikzset{#1}% +}% +\def\pgfplots@replacement@for@endscope{% + \endgroup + \pgfplotsextra\endscope% +}% { % A block which handles active semicolons. @@ -3463,23 +3730,54 @@ % Remembers the plotting command #2 and '#3=plot coordinates {...} ...'; % for later postprocessing of the coordinates. % -% #1: commands which should be executed before issueing the plotting +% #1: pre-commands which should be executed before issueing the plotting % command #2 #3. -% #2: -% the command which is responsable for drawing. +% #2: the drawing-command. % - If #2 is NOT '\pgfutil@empty', we expect #3 to contain only % EXPANDABLE DATA. % That's important for postponed floating point arithmetics in #3. % - If #2='\pgfutil@empty', we don't make any assumption about #3 % and process it as-is. % -% #3: see above. +% #3: the plot data. If #2 is empty, this can be any command. % % #4: commands which should be executed after '#2 #3'. % \long\def\pgfplots@path@enqueue@coords#1#2#3#4{% - \pgfplotslistpushbackglobal{#1}{#2}{#3}{#4}\to\pgfplots@stored@plotlist + \begingroup + \def\pgfplots@loc@TMPa{#2}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \def\pgfplots@stored@current@precmd{#1}% + \def\pgfplots@stored@current@cmd{#2}% + \def\pgfplots@stored@current@data{#3}% + \def\pgfplots@stored@current@postcmd{#4}% + \ifx\pgfplots@stored@current@precmd\pgfutil@empty + \else + \pgfplots@wrong@plotlist@format@error + \fi + \ifx\pgfplots@stored@current@postcmd\pgfutil@empty + \else + \pgfplots@wrong@plotlist@format@error + \fi + \pgfplotslistpushbackglobal{#1}{#2}{#3}{#4}\to\pgfplots@stored@plotlist + \else + \pgfkeysgetvalue{/pgfplots/execute at begin plot visualization}\pgfplots@loc@TMPa + \pgfkeysgetvalue{/pgfplots/execute at end plot visualization}\pgfplots@loc@TMPb + \t@pgfplots@toka={#1}% + \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}% + \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPb}% + \edef\pgfplots@loc@TMPa{% + \noexpand\pgfkeyssetvalue{/pgfplots/execute at begin plot visualization}{\the\t@pgfplots@tokb}% + \noexpand\pgfkeyssetvalue{/pgfplots/execute at end plot visualization}{\the\t@pgfplots@tokc}% + \the\t@pgfplots@toka + }% + \expandafter\pgfplotslistpushbackglobal\expandafter{\pgfplots@loc@TMPa}{#2}{#3}{#4}\to\pgfplots@stored@plotlist + \fi + \endgroup } +\def\pgfplots@wrong@plotlist@format@error{% + \pgfplots@error{Internal logic error: someone used \string \pgfplots@path@enqueue@coords\space in an unexpected way: if the second argument is empty, ONLY the third argument should be non-empty.^^J I found: pre command (1st arg): \meaning\pgfplots@stored@current@precmd;^^J command (2nd arg): \meaning\pgfplots@stored@current@cmd;^^J data (3rd arg): \meaning\pgfplots@stored@current@data^^J; post cmd (4th arg): \meaning\pgfplots@stored@current@postcmd^^J}% +}% % this was formerly slightly different than % \pgfplots@path@enqueue@coords, but it is now the same. @@ -3909,16 +4207,24 @@ {\tikz[/pgfplots/every legend to name picture/.try]{\pgfplots@legend@to@name}}% \t@pgfplots@tokc=\expandafter{\pgfplotsretval}% % + \begingroup + \pgfkeysgetvalue{/pgfplots/every legend image post/.@cmd}\pgfplots@loc@TMPa + % steal \toks0 temporarily. Within this group, it won't be + % used by any LaTeX code: + \toks0=\expandafter{\pgfplots@loc@TMPa\pgfeov}% + % \expandafter\xdef\csname pgfplots@legend@to@name@\pgfplots@createlegend@toname\endcsname{% \noexpand\begingroup \noexpand\def\noexpand\pgfplots@legend@to@name{% \noexpand\pgfkeysdef{/pgfplots/every axis legend}{\the\t@pgfplots@tokb}% + \noexpand\pgfkeysdef{/pgfplots/every legend image post}{\the\toks0 }% \noexpand\def\noexpand\numplots{\numplots}% \the\t@pgfplots@toka }% \the\t@pgfplots@tokc \noexpand\endgroup }% + \endgroup \t@pgfplots@toka=\expandafter\expandafter\expandafter{\csname pgfplots@legend@to@name@\pgfplots@createlegend@toname\endcsname}% \pgfplots@auxwrite{% \noexpand\expandafter @@ -3934,22 +4240,41 @@ \fi } +\pgfutil@ifundefined{AtBeginDocument}{}{% + \AtBeginDocument{% + \let\pgfplots@original@LaTeX@label@loadtime=\label + }% +} + % Defines a new \label{#1}. When \ref{#1} is used, the code -% \csname #2#1\endcsname +% \csname #3#2\endcsname % will be invoked. -\def\pgfplots@label#1#2{% +% \pgfplots@label[<optional prefix>]{<label name>}{<command prefix>} +% invokes +% \label<optional prefix>{<label name>} +\def\pgfplots@label{\pgfutil@ifnextchar[{\pgfplots@label@@}{\pgfplots@label@@[]}}% +\def\pgfplots@label@@[#1]#2#3{% \begingroup \edef\@currentlabel{% \string\expandafter \string\protect - \string\csname\space #2#1\string\endcsname + \string\csname\space #3#2\string\endcsname }% \pgfutil@ifundefined{hyper@makecurrent}{}{% \hyper@makecurrent{pgfplotslink}% \hyper@anchorstart{\@currentHref}{}\hyper@anchorend \pgfplotsutil@advancestringcounter@global\c@pgfplots@label }% - \expandafter\label\expandafter{#1}% + % + % this is a work-around to support the memoir class (it overwrites + % \label in sub + \let\sf@@memsub@label=\pgfplots@original@LaTeX@label@loadtime + % + \pgfutil@ifundefined{label}{% + }{% + \def\pgfplots@loc@TMPa{\label #1}% + \expandafter\pgfplots@loc@TMPa\expandafter{#2}% the \expandafter is a convenience method; the name should be expandable anyway + }% \endgroup }% \gdef\c@pgfplots@label{0}% @@ -3988,6 +4313,22 @@ }% }% +\def\pgfplotsplotfromname#1{% + \pgfplots@texdist@protect\pgfplotsplotfromname@{#1}% +}% +\def\pgfplotsplotfromname@#1{% + \pgfutil@ifundefined{pgfplots@show@ref@#1}{% + \pgfutil@ifundefined{ref}{% + \pgfplots@warning{There is no \string\addplot\space label `#1', sorry. I am skipping it}% + \string\pgfplotsplotfromname{#1}: ??% + }{% + \ref{\string\pgfplotsplotfromname{#1}}% + }% + }{% + \csname pgfplots@show@ref@#1\endcsname + }% +}% + \def\pgfplots@ifintikzpicture#1#2{% \pgfutil@ifundefined{filldraw}{#2}{#1}% }% @@ -4011,6 +4352,8 @@ } % Simply divides #1 by log(10). +% ATTENTION: in order to implement per-axis log basis, this will be +% OVERWRITTEN in pgfplotsticks.code.tex ! \def\pgfmathlogtologten@#1{% \pgfmathmultiply@{#1}\reciproclogten% }% @@ -4073,7 +4416,7 @@ \pgfkeysdef{/pgfplots/@enlargelimits/rel}{\pgfkeysalso{true,value={#1}}}% \pgfkeysdef{/pgfplots/@enlargelimits/abs value}{% \begingroup - \pgfutil@namelet{pgfplots@datascaletrafo@\pgfplots@enlargelimits@curaxis}{pgfplots@datascaletrafo@\pgfplots@enlargelimits@curaxis @noshift}% + \pgfplotscoordmath{\pgfplots@enlargelimits@curaxis}{datascaletrafo set shift}{0}% \expandafter\csname pgfplotstransformcoordinate\pgfplots@enlargelimits@curaxis\endcsname{#1}% \pgfmath@smuggleone\pgfmathresult \endgroup @@ -4163,7 +4506,8 @@ % helper for \pgfplots@check@and@apply@datatrafo@for. % \def\pgfplots@compute@number@order@for@trafo@isfloat#1\tocount#2{% - \expandafter\pgfmathfloat@decompose@E#1\relax#2\relax + \pgfmathfloatparsenumber{#1}% + \expandafter\pgfmathfloat@decompose@E\pgfmathresult\relax#2\relax \advance#2 by1\relax } @@ -4187,167 +4531,177 @@ % initialise data scale transformation % T(x) = 10^{q-m} * x % - \begingroup - \let\data@max@order=\c@pgf@counta - \let\data@cur@order=\c@pgf@countb - \let\data@dimen=\pgf@xa - \let\data@tmp=\pgf@xb - \let\data@dimen@order=\c@pgf@countc - \let\data@EXPONENT=\c@pgf@countd - \expandafter\let\expandafter\pgfplots@display@min@float\csname pgfplots@#1min\endcsname - \expandafter\let\expandafter\pgfplots@display@max@float\csname pgfplots@#1max\endcsname - \expandafter\let\expandafter\pgfplots@data@min@float\csname pgfplots@data@#1min\endcsname - \expandafter\let\expandafter\pgfplots@data@max@float\csname pgfplots@data@#1max\endcsname - \expandafter\let\expandafter\pgfplots@actual@trafo\csname pgfplots@datascaletrafo@#1\endcsname - \ifpgfplots@autocompute@all@limits - \else - \pgfplotsmathfloatmax{\pgfplots@display@max@float}{\pgfplots@data@max@float}% - \let\pgfplots@data@max@float=\pgfmathresult - \pgfplotsmathfloatmin{\pgfplots@display@min@float}{\pgfplots@data@min@float}% - \let\pgfplots@data@min@float=\pgfmathresult - \fi - % - % 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@compute@number@order@for@trafo@isfloat - \pgfplots@data@max@float - \tocount\data@cur@order - % - \ifnum\data@cur@order>\data@max@order + \ifpgfplots@disabledatascaling + % this here is a waste of time, I know it. One could really + % safe a lot of CPU time when disabledatascaling is enabled... + % but it requires so much extra cases; I really don't want + % that! + \gdef\pgfplots@glob@TMPa{0}% + \gdef\pgfplots@glob@TMPb{0}% + \else + \begingroup + \let\data@max@order=\c@pgf@counta + \let\data@cur@order=\c@pgf@countb + \let\data@dimen=\pgf@xa + \let\data@tmp=\pgf@xb + \let\data@dimen@order=\c@pgf@countc + \let\data@EXPONENT=\c@pgf@countd + \expandafter\let\expandafter\pgfplots@display@min@float\csname pgfplots@#1min\endcsname + \expandafter\let\expandafter\pgfplots@display@max@float\csname pgfplots@#1max\endcsname + \expandafter\let\expandafter\pgfplots@data@min@float\csname pgfplots@data@#1min\endcsname + \expandafter\let\expandafter\pgfplots@data@max@float\csname pgfplots@data@#1max\endcsname + \ifpgfplots@autocompute@all@limits + \else + \pgfplotscoordmath{#1}{max}{\pgfplots@display@max@float}{\pgfplots@data@max@float}% + \let\pgfplots@data@max@float=\pgfmathresult + \pgfplotscoordmath{#1}{min}{\pgfplots@display@min@float}{\pgfplots@data@min@float}% + \let\pgfplots@data@min@float=\pgfmathresult + \fi + % +%\message{minmax = [\pgfplots@data@min@float,\pgfplots@data@max@float]}% + % 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 - \fi - % - % Step 2: compute 'q', the #1-size of the axis. - \expandafter\ifx\csname pgfplots@#1\endcsname\pgfutil@empty - % We have 'width' or 'height'. % - % Use the order of these parameters. - \def\pgfplots@loc@TMPa{#1}% - \def\pgfplots@loc@TMPb{x}% - \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb - \data@dimen=\pgfplots@width\relax - \else - \def\pgfplots@loc@TMPb{y}% + \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 + % We have 'width' or 'height' (I always have them). + % + % Use the order of these parameters. + \def\pgfplots@loc@TMPa{#1}% + \def\pgfplots@loc@TMPb{x}% \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb - \data@dimen=\pgfplots@height\relax + \data@dimen=\pgfplots@width\relax + \else + \if1\pgfplots@compat@scaling@zunitfix@enable + \data@dimen=\pgfplots@height\relax + \else + % this code here belongs to versions up to + % 1.3.1. + % It is now deprecated and produces small + % pixel differences. + \def\pgfplots@loc@TMPb{y}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + \data@dimen=\pgfplots@height\relax + \else + \data@dimen=42pt % this is actually different from 1.3.1: there, it was UNDEFINED. + \fi + \fi \fi - \fi - \pgfplots@compute@number@order@for@trafo@isdimen - \data@dimen - \tocount\data@dimen@order - % This here is to avoid inaccuracies in the final - % axis rectangle size, see \pgfplots@initsizes: - %\advance\data@dimen@order by-1 - \else - % FIXME: - % we have either the 'x=1cm' or 'y=1cm' option! - % How should I initialise the trafo!? - \data@dimen@order=3 - \fi - % + \pgfplots@compute@number@order@for@trafo@isdimen + \data@dimen + \tocount\data@dimen@order + % This here is to avoid inaccuracies in the final + % axis rectangle size, see \pgfplots@initsizes: + %\advance\data@dimen@order by-1 + %\else + % FIXME: + % we have either the 'x=1cm' or 'y=1cm' option! + % How should I initialise the trafo!? + % \data@dimen@order=3 + %\fi + % %\message{Direction #1: data max order=\the\data@max@order; data dimen order=\the\data@dimen@order. }% - \data@EXPONENT=\data@dimen@order - \advance\data@EXPONENT by-\data@max@order - % Now, I introduce a loop which shall avoid cancellation of - % significant digits. - % - % Harmless Example: - % if we have data shift = -3 and - % max = 2e6, min = 1e6, then max-min = 1e6; T(max)-T(min) = 1e3 which is ok. - % In this case, the loop won't change anything. - % - % Critical Example: - % if we have data shift = -3 and - % max = 1980, min = 1930 then - % T(max) = 1.98 and T(min) = 1.93 - % and thus T(max)-T(min) = 0.05 . - % Considering that this is the axis range - % in which tick labels and plot points need to be computed, we - % only have two or three digits left! That happens because the - % prefix '19' is common and is cancelled in the subtraction. - % Idea: while T(max)-T(min) < O(10^2) -> increase shift by +1 - % (and make sure that T(max) < MAX_VALID_TEX_NUMBER). - % - \pgfplots@loop@CONTINUEtrue - \expandafter\edef\csname pgfplots@data@scale@trafo@SHIFT@#1\endcsname{0}% - \pgfutil@loop - \expandafter\edef\csname pgfplots@data@scale@trafo@EXPONENT@#1\endcsname{\the\data@EXPONENT}% - \pgfplots@actual@trafo{\pgfplots@data@min@float}% - \let\pgfplots@min@fixed=\pgfmathresult - \ifpgfplots@loop@CONTINUE - \pgfplots@actual@trafo{\pgfplots@data@max@float}% - \let\pgfplots@max@fixed=\pgfmathresult - \expandafter\data@tmp\pgfplots@max@fixed pt + \data@EXPONENT=\data@dimen@order + \advance\data@EXPONENT by-\data@max@order + % Now, I introduce a loop which shall avoid cancellation of + % significant digits. + % + % Harmless Example: + % if we have data shift = -3 and + % max = 2e6, min = 1e6, then max-min = 1e6; T(max)-T(min) = 1e3 which is ok. + % In this case, the loop won't change anything. + % + % Critical Example: + % if we have data shift = -3 and + % max = 1980, min = 1930 then + % T(max) = 1.98 and T(min) = 1.93 + % and thus T(max)-T(min) = 0.05 . + % Considering that this is the axis range + % in which tick labels and plot points need to be computed, we + % only have two or three digits left! That happens because the + % prefix '19' is common and is cancelled in the subtraction. + % Idea: while T(max)-T(min) < O(10^2) -> increase shift by +1 + % (and make sure that T(max) < MAX_VALID_TEX_NUMBER). + % + \def\pgfplotscoordmathnotifydatascalesetfor##1{}% disable temporarily. We are just testing it. + \pgfplots@loop@CONTINUEtrue + \pgfutil@loop + \pgfplotscoordmath{#1}{datascaletrafo set params}{\the\data@EXPONENT}{0}% + \pgfplotscoordmath{#1}{datascaletrafo}{\pgfplots@data@min@float}% + \let\pgfplots@min@fixed=\pgfmathresult + \ifpgfplots@loop@CONTINUE + \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...}% - \ifdim\data@tmp<0pt - % I need absolute values here: - \multiply\data@tmp by-1\relax - \fi - \pgfmathsubtract@{\pgfplots@max@fixed}{\pgfplots@min@fixed}% - \expandafter\data@dimen\pgfmathresult pt - \pgfplots@loop@CONTINUEfalse - \ifdim\data@tmp<1500pt % a multiplication with '10' results in max = 15000 which is the upper limit. - \ifdim\data@dimen<100pt % I guess if max-min = O(100), we have quite good accuracy - \ifdim\data@dimen<0.0001pt - \else - \advance\data@EXPONENT by1 - \pgfplots@loop@CONTINUEtrue + \ifdim\data@tmp<0pt + % I need absolute values here: + \multiply\data@tmp by-1\relax + \fi + \pgfmathsubtract@{\pgfplots@max@fixed}{\pgfplots@min@fixed}% + \data@dimen=\pgfmathresult pt + \pgfplots@loop@CONTINUEfalse + \ifdim\data@tmp<1500pt % a multiplication with '10' results in max = 15000 which is the upper limit. + \ifdim\data@dimen<100pt % I guess if max-min = O(100), we have quite good accuracy + \ifdim\data@dimen<0.0001pt + \else + \advance\data@EXPONENT by1 + \pgfplots@loop@CONTINUEtrue + \fi \fi \fi - \fi - %-------------------------------------------------- - % \ifdim\data@dimen>1200pt% FIXME : is this here ok!? CHECK IT! - % \ifdim\data@dimen>7999pt - % \advance\data@EXPONENT by-2 - % \else - % \advance\data@EXPONENT by-1 - % \fi - % \pgfplots@loop@CONTINUEfalse - % \fi - %-------------------------------------------------- - \pgfutil@repeat - \xdef\pgfplots@glob@TMPa{\csname pgfplots@data@scale@trafo@EXPONENT@#1\endcsname}% - \xdef\pgfplots@glob@TMPb{\pgfplots@min@fixed}% - \endgroup -%\message{Initialising the data scale transformation in direction #1 to 10^\pgfplots@glob@TMPa*#1 - \pgfplots@glob@TMPb...}% - % COMPLETE INITIALISATION: - \ifpgfplots@disabledatascaling - % this here is a waste of time, I know it. One could really - % safe a lot of CPU time when disabledatascaling is enabled... - % but it requires so much extra cases; I really don't want - % that! - \gdef\pgfplots@glob@TMPa{0}% - \gdef\pgfplots@glob@TMPb{0}% + %-------------------------------------------------- + % \ifdim\data@dimen>1200pt% FIXME : is this here ok!? CHECK IT! + % \ifdim\data@dimen>7999pt + % \advance\data@EXPONENT by-2 + % \else + % \advance\data@EXPONENT by-1 + % \fi + % \pgfplots@loop@CONTINUEfalse + % \fi + %-------------------------------------------------- + \pgfutil@repeat + \xdef\pgfplots@glob@TMPa{\the\data@EXPONENT}% + \xdef\pgfplots@glob@TMPb{\pgfplots@min@fixed}% + \endgroup \fi - \expandafter\let\csname pgfplots@data@scale@trafo@EXPONENT@#1\endcsname\pgfplots@glob@TMPa - \expandafter\let\csname pgfplots@data@scale@trafo@SHIFT@#1\endcsname\pgfplots@glob@TMPb% + % COMPLETE INITIALISATION: +%\message{Initialising the data scale transformation in direction #1 to 10^\pgfplots@glob@TMPa*#1 - \pgfplots@glob@TMPb...}% + \pgfplotscoordmath{#1}{datascaletrafo set params}{\pgfplots@glob@TMPa}{\pgfplots@glob@TMPb}% % % ... and apply transformation to any user input % % Transform axis limits: %\message{#1- display limits BEFORE data transformation: [\csname pgfplots@#1min\endcsname:\csname pgfplots@#1max\endcsname]}% - \expandafter\expandafter\csname pgfplots@datascaletrafo@#1\endcsname\expandafter{\csname pgfplots@#1min\endcsname}% + \pgfplotscoordmath{#1}{datascaletrafo}{\csname pgfplots@#1min\endcsname}% \expandafter\global\expandafter\let\csname pgfplots@#1min\endcsname=\pgfmathresult % - \expandafter\expandafter\csname pgfplots@datascaletrafo@#1\endcsname\expandafter{\csname pgfplots@#1max\endcsname}% + \pgfplotscoordmath{#1}{datascaletrafo}{\csname pgfplots@#1max\endcsname}% \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult %\message{#1- display limits after data transformation: [\csname pgfplots@#1min\endcsname:\csname pgfplots@#1max\endcsname]}% % Transform tick limits (if they are set): %\message{#1- display tick limits BEFORE data transformation: [\csname pgfplots@#1tickmin\endcsname:\csname pgfplots@#1tickmax\endcsname]}% \expandafter\ifx\csname pgfplots@#1tickmin\endcsname\pgfutil@empty \else - \expandafter\expandafter\csname pgfplots@datascaletrafo@#1\endcsname\expandafter{\csname pgfplots@#1tickmin\endcsname}% + \pgfplotscoordmath{#1}{datascaletrafo}{\csname pgfplots@#1tickmin\endcsname}% \expandafter\global\expandafter\let\csname pgfplots@#1tickmin\endcsname=\pgfmathresult \fi % \expandafter\ifx\csname pgfplots@#1tickmax\endcsname\pgfutil@empty \else - \expandafter\expandafter\csname pgfplots@datascaletrafo@#1\endcsname\expandafter{\csname pgfplots@#1tickmax\endcsname}% + \pgfplotscoordmath{#1}{datascaletrafo}{\csname pgfplots@#1tickmax\endcsname}% \expandafter\global\expandafter\let\csname pgfplots@#1tickmax\endcsname=\pgfmathresult \fi %\message{#1- display tick limits after data transformation: [\csname pgfplots@#1tickmin\endcsname:\csname pgfplots@#1tickmax\endcsname]}% @@ -4357,7 +4711,6 @@ % this here should also work with 'xtick=\pgfutil@empty', the "No tick" command. \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \t@pgfplots@tokc=\expandafter{\csname pgfplots@datascaletrafo@#1\endcsname}% \def\pgfplots@loc@TMPb{data}% \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb % we have #1tick = data @@ -4367,15 +4720,19 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@firstplot@coords@#1\endcsname \expandafter\pgfplotsutil@unify@short@csv@list\expandafter{\pgfplots@loc@TMPa}% \t@pgfplots@toka=\expandafter{\pgfplotsretval}% - \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@toka}\the\t@pgfplots@tokc}% - \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks@isfloat\pgfplots@loc@TMPa\to\pgfplots@loc@TMPc + \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@toka}}% + \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks@isfloat\pgfplots@loc@TMPa + {\pgfplotscoordmath{#1}{datascaletrafo}}% + \to\pgfplots@loc@TMPc % clear structure: \expandafter\global\expandafter\let\csname pgfplots@firstplot@coords@#1\endcsname=\pgfutil@empty \else \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPa}% %\message{Converting #1tick='\csname pgfplots@#1tick\endcsname'}% - \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@toka}\the\t@pgfplots@tokc}% - \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks\pgfplots@loc@TMPa\to\pgfplots@loc@TMPc + \edef\pgfplots@loc@TMPa{{\the\t@pgfplots@toka}}% + \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks\pgfplots@loc@TMPa + {\pgfplotscoordmath{#1}{datascaletrafo}}% + \to\pgfplots@loc@TMPc \fi \expandafter\let\csname pgfplots@#1tick\endcsname=\pgfplots@loc@TMPc \fi @@ -4384,17 +4741,29 @@ \edef\pgfplots@loc@TMPa{\csname pgfplots@extra@#1tick\endcsname}% \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \t@pgfplots@tokc=\expandafter{\csname pgfplots@datascaletrafo@#1\endcsname}% - \edef\pgfplots@loc@TMPa{{\csname pgfplots@extra@#1tick\endcsname}\the\t@pgfplots@tokc}% - \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks\pgfplots@loc@TMPa\to\pgfplots@loc@TMPc + \edef\pgfplots@loc@TMPa{{\csname pgfplots@extra@#1tick\endcsname}}% + \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks\pgfplots@loc@TMPa + {\pgfplotscoordmath{#1}{datascaletrafo}}% + \to\pgfplots@loc@TMPc \expandafter\let\csname pgfplots@extra@#1tick\endcsname=\pgfplots@loc@TMPc \fi % + % Convert any minor tick lists in the same way. + \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + \edef\pgfplots@loc@TMPa{{\pgfplots@loc@TMPa}}% + \expandafter\pgfplots@apply@data@scale@trafo@to@user@ticks\pgfplots@loc@TMPa + {\pgfplotscoordmath{#1}{datascaletrafo}}% + \to\pgfplots@loc@TMPc + \pgfkeyslet{/pgfplots/minor #1tick}\pgfplots@loc@TMPc + \fi + % % Transform any explicit axis unit scalings: % WILL BE DONE LATER! }{% % case apply trafo == false: - \expandafter\def\csname pgfplots@data@scale@trafo@SHIFT@#1\endcsname{0}% + \pgfplotscoordmath{#1}{datascaletrafo set params}{0}{0}% \def\pgfplots@loc@TMPb{data}% \expandafter\ifx\csname pgfplots@#1tick\endcsname\pgfplots@loc@TMPb \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@firstplot@coords@#1\endcsname @@ -4412,31 +4781,26 @@ \newif\ifpgfplots@determinedefaultvalues@needs@check@uniformtick \newif\ifpgfplots@limits@are@computed +\def\pgfplots@handle@invalid@range@defaultlimits{% + \pgfplotscoordmath{x}{parsenumber}{0}% + \global\let\pgfplots@xmin=\pgfmathresult + \pgfplotscoordmath{x}{parsenumber}{1}% + \global\let\pgfplots@xmax=\pgfmathresult + \global\let\pgfplots@data@xmin=\pgfplots@xmin + \global\let\pgfplots@data@xmax=\pgfplots@xmax + % + \pgfplotscoordmath{y}{parsenumber}{0}% + \global\let\pgfplots@ymin=\pgfmathresult + \pgfplotscoordmath{y}{parsenumber}{1}% + \global\let\pgfplots@ymax=\pgfmathresult + \global\let\pgfplots@data@ymin=\pgfplots@ymin + \global\let\pgfplots@data@ymax=\pgfplots@ymax +} \def\pgfplots@handle@invalid@range{% % COMPLETELY EMPTY AXIS: \pgfplots@warning{You have an axis with empty range. Replacing it with a default range and clearing all plots.}% - \ifpgfplots@xislinear - \pgfmathfloatcreate{0}{0.0}{0}% - \global\let\pgfplots@xmin=\pgfmathresult - \pgfmathfloatcreate{1}{1.0}{0}% - \global\let\pgfplots@xmax=\pgfmathresult - \global\let\pgfplots@data@xmin=\pgfplots@xmin - \global\let\pgfplots@data@xmax=\pgfplots@xmax - \else - \gdef\pgfplots@xmin{0}% - \gdef\pgfplots@xmax{1}% - \fi - \ifpgfplots@yislinear - \pgfmathfloatcreate{0}{0.0}{0}% - \global\let\pgfplots@ymin=\pgfmathresult - \pgfmathfloatcreate{1}{1.0}{0}% - \global\let\pgfplots@ymax=\pgfmathresult - \global\let\pgfplots@data@ymin=\pgfplots@ymin - \global\let\pgfplots@data@ymax=\pgfplots@ymax - \else - \gdef\pgfplots@ymin{0}% - \gdef\pgfplots@ymax{1}% - \fi + \pgfplots@handle@invalid@range@defaultlimits + % \pgfplots@threedimfalse \def\pgfplots@xtick{}% \def\pgfplots@ytick{}% @@ -4492,20 +4856,20 @@ \else % there is a rare change that min > max. % Handle that ... - \pgfplotsmathfloatmin{\pgfplots@xmin}{\pgfplots@xmax}% + \pgfplotscoordmath{x}{min}{\pgfplots@xmin}{\pgfplots@xmax}% \global\let\pgfplots@xmin=\pgfmathresult - \pgfplotsmathfloatmax{\pgfplots@xmin}{\pgfplots@xmax}% + \pgfplotscoordmath{x}{max}{\pgfplots@xmin}{\pgfplots@xmax}% \global\let\pgfplots@xmax=\pgfmathresult % - \pgfplotsmathfloatmin{\pgfplots@ymin}{\pgfplots@ymax}% + \pgfplotscoordmath{y}{min}{\pgfplots@ymin}{\pgfplots@ymax}% \global\let\pgfplots@ymin=\pgfmathresult - \pgfplotsmathfloatmax{\pgfplots@ymin}{\pgfplots@ymax}% + \pgfplotscoordmath{y}{max}{\pgfplots@ymin}{\pgfplots@ymax}% \global\let\pgfplots@ymax=\pgfmathresult % \ifpgfplots@threedim - \pgfplotsmathfloatmin{\pgfplots@zmin}{\pgfplots@zmax}% + \pgfplotscoordmath{z}{min}{\pgfplots@zmin}{\pgfplots@zmax}% \global\let\pgfplots@zmin=\pgfmathresult - \pgfplotsmathfloatmax{\pgfplots@zmin}{\pgfplots@zmax}% + \pgfplotscoordmath{z}{max}{\pgfplots@zmin}{\pgfplots@zmax}% \global\let\pgfplots@zmax=\pgfmathresult \fi \fi @@ -4532,31 +4896,6 @@ \def\pgfplots@determinedefaultvalues{% \pgfplots@check@invalid@range % - %-------------------------------------------------- - %FIXME - % \ifpgfplots@float@numerics@mode@x - % \pgfplotsmathfloatmin{\pgfplots@xmin}{\pgfplots@xmax}% - % \let\pgfplots@xmin=\pgfmathresult - % \pgfplotsmathfloatmax{\pgfplots@xmin}{\pgfplots@xmax}% - % \let\pgfplots@xmax=\pgfmathresult - % \else - % \pgfplotsmathmin{\pgfplots@xmin}{\pgfplots@xmax}% - % \let\pgfplots@xmin=\pgfmathresult - % \pgfplotsmathmax{\pgfplots@xmin}{\pgfplots@xmax}% - % \let\pgfplots@xmax=\pgfmathresult - % \fi - % \ifpgfplots@float@numerics@mode@y - % \pgfplotsmathfloatmin{\pgfplots@ymin}{\pgfplots@ymax}% - % \let\pgfplots@ymin=\pgfmathresult - % \pgfplotsmathfloatmax{\pgfplots@ymin}{\pgfplots@ymax}% - % \let\pgfplots@ymax=\pgfmathresult - % \else - % \pgfplotsmathmin{\pgfplots@ymin}{\pgfplots@ymax}% - % \let\pgfplots@ymin=\pgfmathresult - % \pgfplotsmathmax{\pgfplots@ymin}{\pgfplots@ymax}% - % \let\pgfplots@ymax=\pgfmathresult - % \fi - %-------------------------------------------------- %\message{untransformed: x = [\pgfplots@xmin:\pgfplots@xmax] y = [\pgfplots@ymin:\pgfplots@ymax]. }% % % @@ -4578,200 +4917,146 @@ % % From now on, we can always work with pgfmath. % We simply need to apply the data scaling trafo before doing so. - \pgfkeysgetvalue{/pgfplots/minor x tick num}\pgfplots@minor@xtick@num - \ifpgfplots@xislinear - \ifnum\pgfplots@minor@xtick@num=0\relax - \pgfplots@xminorticksfalse - \pgfplots@xminorgridsfalse - \else - \pgfplots@xminortickstrue - \fi - \fi - % \pgfplots@enlarge@limit@ifconfigured x \pgfplots@avoid@empty@axis@range@for x% % - \pgfkeysgetvalue{/pgfplots/minor y tick num}\pgfplots@minor@ytick@num - \ifpgfplots@yislinear - \ifnum\pgfplots@minor@ytick@num=0\relax - \pgfplots@yminorticksfalse - \pgfplots@yminorgridsfalse - \else - \pgfplots@yminortickstrue - \fi - \fi \pgfplots@enlarge@limit@ifconfigured y \pgfplots@avoid@empty@axis@range@for y% \ifpgfplots@threedim - \pgfkeysgetvalue{/pgfplots/minor z tick num}\pgfplots@minor@ztick@num - \ifpgfplots@zislinear - \ifnum\pgfplots@minor@ztick@num=0\relax - \pgfplots@zminorticksfalse - \pgfplots@zminorgridsfalse - \else - \pgfplots@zminortickstrue - \fi - \fi \pgfplots@enlarge@limit@ifconfigured z \pgfplots@avoid@empty@axis@range@for z% \fi % - % \pgfplots@initsizes % + \pgfplots@limits@ready + \pgfplotspoint@initialisation + % % \pgfplots@BEGIN@prepare@description@styles % % + \pgfplots@init@ticks@for x% + \pgfplots@init@ticks@for y% + \ifpgfplots@threedim + \pgfplots@init@ticks@for z% + \fi + \pgfplots@init@ticks@ready + % + % + \pgfplots@prepare@ZERO@coordinates % + \pgfplots@decide@which@figure@surfaces@are@drawn + \pgfplots@init@ticklabelaxisspec + % + \pgfplots@define@threedim@marks + % + \pgfplots@clippath@prepare + % + \pgfplots@ticklabel@maxtickdimen@reset x% + \pgfplots@ticklabel@maxtickdimen@reset y% + \pgfplots@ticklabel@maxtickdimen@reset z% +} +\def\pgfplots@init@ticks@ready{}% +\def\pgfplots@init@ticks@for#1{% \pgfplots@isuniformticktrue \pgfplots@determinedefaultvalues@needs@check@uniformticktrue - \ifx\pgfplots@xtick\pgfutil@empty - \pgfplots@assign@default@tick@foraxis{x}% + \expandafter\ifx\csname pgfplots@#1tick\endcsname\pgfutil@empty + \pgfplots@assign@default@tick@foraxis{#1}% \fi \ifpgfplots@determinedefaultvalues@needs@check@uniformtick - \ifpgfplots@xislinear - \expandafter\pgfplots@checkisuniformLINEARtick\expandafter{\pgfplots@xtick}{\pgfplots@tick@distance@x}% - \else - \expandafter\pgfplots@checkisuniformLOGtick\expandafter{\pgfplots@xtick}% - \fi + \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tick\endcsname + \pgfplots@if{pgfplots@#1islinear}{% + \def\pgfplots@loc@TMPb{\expandafter\pgfplots@checkisuniformLINEARtick\expandafter{\pgfplots@loc@TMPa}}% + \expandafter\pgfplots@loc@TMPb\csname pgfplots@tick@distance@#1\endcsname% + }{% + \expandafter\pgfplots@checkisuniformLOGtick\expandafter{\pgfplots@loc@TMPa}% + }% \fi + \pgfplots@check@for@minor@ticks{#1}% \ifpgfplots@isuniformtick \else - \pgfplots@xminorticksfalse - \pgfplots@xminorgridsfalse + \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPb + \ifx\pgfplots@loc@TMPb\pgfutil@empty + \csname pgfplots@#1minorticksfalse\endcsname + \csname pgfplots@#1minorgridsfalse\endcsname + \fi \fi % - \if0\pgfplots@xaxislinesnum\else - % axis x line* != box - \let\pgfplots@xticklabel@pos=\pgfutil@empty - \fi - \if0\pgfplots@yaxislinesnum\else - % axis y line* != box - \let\pgfplots@yticklabel@pos=\pgfutil@empty + \expandafter\ifx\csname pgfplots@#1ticklabel\endcsname\pgfutil@empty + \pgfplots@if{pgfplots@#1islinear}{% + \expandafter\def\csname pgfplots@#1ticklabel\endcsname{\axisdefaultticklabel}% + }{% + \expandafter\def\csname pgfplots@#1ticklabel\endcsname{\axisdefaultticklabellog}% + }% \fi - \if0\pgfplots@zaxislinesnum\else - % axis y line* != box - \let\pgfplots@zticklabel@pos=\pgfutil@empty + \expandafter\ifx\csname pgfplots@extra@#1ticklabel\endcsname\pgfutil@empty + \pgfutil@namelet{pgfplots@extra@#1ticklabel}{pgfplots@#1ticklabel}% \fi % - \ifx\pgfplots@xticklabel@pos\pgfutil@empty - \def\pgfplots@xticklabel@pos{% - \if3\pgfplots@xtickposnum% right - u% - \else - l% - \fi - }% + \if0\csname pgfplots@#1axislinesnum\endcsname\else + % axis x line* != box + \expandafter\let\csname pgfplots@#1ticklabel@pos\endcsname=\pgfutil@empty \fi - \ifx\pgfplots@yticklabel@pos\pgfutil@empty - \def\pgfplots@yticklabel@pos{% - \if3\pgfplots@ytickposnum% right + \expandafter\ifx\csname pgfplots@#1ticklabel@pos\endcsname\pgfutil@empty + \expandafter\def\csname pgfplots@#1ticklabel@pos\endcsname{% + \if3\csname pgfplots@#1tickposnum\endcsname% right u% \else l% \fi }% \fi - \ifx\pgfplots@zticklabel@pos\pgfutil@empty - \def\pgfplots@zticklabel@pos{% - \if3\pgfplots@ztickposnum% right - u% - \else - l% +}% + +\def\pgfplots@check@for@minor@ticks#1{% + \pgfkeysgetvalue{/pgfplots/minor #1 tick num}\pgfplots@loc@TMPa + \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPb + \pgfplots@if{pgfplots@#1islinear}{% + \ifnum\pgfplots@loc@TMPa=0\relax + \ifx\pgfplots@loc@TMPb\pgfutil@empty + \csname pgfplots@#1minorticksfalse\endcsname + \csname pgfplots@#1minorgridsfalse\endcsname \fi - }% - \fi - % - \ifx\pgfplots@xticklabel\pgfutil@empty - \ifpgfplots@xislinear - \def\pgfplots@xticklabel{\axisdefaultticklabel}% \else - \def\pgfplots@xticklabel{\axisdefaultticklabellog}% + \csname pgfplots@#1minortickstrue\endcsname \fi - \fi - \ifx\pgfplots@extra@xticklabel\pgfutil@empty - \let\pgfplots@extra@xticklabel=\pgfplots@xticklabel - \fi - % - % - % - \pgfplots@isuniformticktrue - \pgfplots@determinedefaultvalues@needs@check@uniformticktrue - \ifx\pgfplots@ytick\pgfutil@empty - \pgfplots@assign@default@tick@foraxis{y}% - \fi - \ifpgfplots@determinedefaultvalues@needs@check@uniformtick - \ifpgfplots@yislinear - \expandafter\pgfplots@checkisuniformLINEARtick\expandafter{\pgfplots@ytick}{\pgfplots@tick@distance@y}% - \else - \expandafter\pgfplots@checkisuniformLOGtick\expandafter{\pgfplots@ytick}% - \fi - \fi - \ifpgfplots@isuniformtick + }{% + }% + \ifx\pgfplots@loc@TMPb\pgfutil@empty \else - \pgfplots@yminorticksfalse - \pgfplots@yminorgridsfalse - \fi - % - \ifx\pgfplots@yticklabel\pgfutil@empty - \ifpgfplots@yislinear - \def\pgfplots@yticklabel{\axisdefaultticklabel}% - \else - \def\pgfplots@yticklabel{\axisdefaultticklabellog}% - \fi - \fi - \ifx\pgfplots@extra@yticklabel\pgfutil@empty - \let\pgfplots@extra@yticklabel=\pgfplots@yticklabel + \csname pgfplots@#1minortickstrue\endcsname \fi - % +} + +% Invoked as soon as all axis limits are ready and final (in TeX +% number range, all data scaling is applied at this point). +\def\pgfplots@limits@ready{% + \pgfplots@limits@ready@tostring{x}{min}% + \pgfplots@limits@ready@tostring{x}{max}% + \pgfplots@limits@ready@tostring{y}{min}% + \pgfplots@limits@ready@tostring{y}{max}% \ifpgfplots@threedim - \pgfplots@isuniformticktrue - \pgfplots@determinedefaultvalues@needs@check@uniformticktrue - \ifx\pgfplots@ztick\pgfutil@empty - \pgfplots@assign@default@tick@foraxis{z}% - \fi - \ifpgfplots@determinedefaultvalues@needs@check@uniformtick - \ifpgfplots@zislinear - \expandafter\pgfplots@checkisuniformLINEARtick\expandafter{\pgfplots@ztick}{\pgfplots@tick@distance@z}% - \else - \expandafter\pgfplots@checkisuniformLOGtick\expandafter{\pgfplots@ztick}% - \fi - \fi - \ifpgfplots@isuniformtick - \else - \pgfplots@zminorticksfalse - \pgfplots@zminorgridsfalse - \fi - % - \ifx\pgfplots@zticklabel\pgfutil@empty - \ifpgfplots@zislinear - \def\pgfplots@zticklabel{\axisdefaultticklabel}% - \else - \def\pgfplots@zticklabel{\axisdefaultticklabellog}% - \fi - \fi - \ifx\pgfplots@extra@zticklabel\pgfutil@empty - \let\pgfplots@extra@zticklabel=\pgfplots@zticklabel - \fi + \pgfplots@limits@ready@tostring{z}{min}% + \pgfplots@limits@ready@tostring{z}{max}% \fi - % - % - \pgfplots@prepare@ZERO@coordinates - % - \pgfplotspoint@initialisation - % - \pgfplots@decide@which@figure@surfaces@are@drawn - % - \pgfplots@define@threedim@marks - % - \pgfplots@clippath@prepare - % - \pgfplots@ticklabel@maxtickdimen@reset x% - \pgfplots@ticklabel@maxtickdimen@reset y% - \pgfplots@ticklabel@maxtickdimen@reset z% -} +}% + +% write a limit into /pgfplots/#1#2 +% #1: either x,y or z +% #2: either 'min' or 'max' +% +% \pgfplots@limits@ready@tostring{x}{min} +\def\pgfplots@limits@ready@tostring#1#2{% + \pgfplots@if{pgfplots@apply@datatrafo@#1}{% + \pgfplotscoordmath{#1}{datascaletrafo inverse}{\csname pgfplots@#1#2\endcsname}% + }{% + \edef\pgfmathresult{\csname pgfplots@#1#2\endcsname}% + }% + \pgfplotscoordmath{#1}{tostring}{\pgfmathresult}% + \pgfkeyslet{/pgfplots/#1#2}\pgfmathresult +}% % Defines \pgfmathresult to be the desired width without axis labels. % @@ -4833,11 +5118,13 @@ {\pgf@sys@tonumber\pgf@xa}% {\pgf@sys@tonumber\pgf@xb}% }% -%\pgfplots@message{pgfplots.sty: Computing 'x' such that 'width = c + x*(xmax-xmin)'; -% c=estimated, -% width-c =\the\pgf@xa, -% x*(xmax[=\the\pgfplots@xcoordmaxTEX] - xmin[=\the\pgfplots@xcoordminTEX)]) = \the\pgf@xb -% -> x-scale =#2 }% +%-------------------------------------------------- +% \message{pgfplots.sty: Computing 'x' such that 'width = c + x*(xmax-xmin)'; +% c=estimated, +% width-c =\the\pgf@xa, +% x*(xmax - xmin)]) = \the\pgf@xb +% -> x-scale =\pgfmathresult }% +%-------------------------------------------------- \pgfmath@smuggleone\pgfmathresult \endgroup \let#2=\pgfmathresult @@ -4900,7 +5187,7 @@ \fi \fi \ifpgfplots@avoid@emptyrange@@range@is@approx@equal - \pgfplots@warning{Axis range for axis #1 is approximately empty; enlargeing it.}% + \pgfplots@warning{Axis range for axis #1 is approximately empty; enlarging it.}% % the case \pgfplots@@min ~= \pgfplots@@max % % enlarge \pgfplots@@max and shrink \min: @@ -4930,39 +5217,45 @@ % -> we need to enlarge limits in floating % point arithmetics. % - \pgfmathfloatcreate{0}{0.0}{0}% + \pgfplotscoordmath{#1}{parsenumber}{0}% \let\pgfplotsmath@zero=\pgfmathresult % \ifx\max@unscaled\pgfplotsmath@zero % max == 0 - \pgfmathfloatcreate{1}{1.0}{0}% + \pgfplotscoordmath{#1}{parsenumber}{1}% \let\max@unscaled=\pgfmathresult - \pgfmathfloatcreate{2}{1.0}{0}% + \pgfplotscoordmath{#1}{parsenumber}{-1}% \let\min@unscaled=\pgfmathresult \else % - \pgfmathfloatcreate{1}{1.2}{0}% + \pgfplotscoordmath{#1}{parsenumber}{1.2}% \let\pgfplotsmath@scalea=\pgfmathresult - \pgfmathfloatcreate{1}{8.0}{-1}% + \pgfplotscoordmath{#1}{parsenumber}{8e-1}% \let\pgfplotsmath@scaleb=\pgfmathresult % - \pgfmathfloatlessthan@{\pgfplotsmath@zero}{\max@unscaled}% - \ifpgfmathfloatcomparison - % 0 < max - \pgfmathfloatmultiply@{\max@unscaled}{\pgfplotsmath@scalea}% - \let\max@unscaled=\pgfmathresult - \pgfmathfloatmultiply@{\min@unscaled}{\pgfplotsmath@scaleb}% - \let\min@unscaled=\pgfmathresult - \else - \pgfmathfloatmultiply@{\max@unscaled}{\pgfplotsmath@scaleb}% - \let\max@unscaled=\pgfmathresult - \pgfmathfloatmultiply@{\min@unscaled}{\pgfplotsmath@scalea}% - \let\min@unscaled=\pgfmathresult - \fi + \pgfplotscoordmath{#1}{if less than} + {\pgfplotsmath@zero}{\max@unscaled}% + {% + % 0 < max + \pgfplotscoordmath{#1}{op}{multiply} + {{\max@unscaled}{\pgfplotsmath@scalea}}% + \let\max@unscaled=\pgfmathresult + \pgfplotscoordmath{#1}{op}{multiply} + {{\min@unscaled}{\pgfplotsmath@scaleb}}% + \let\min@unscaled=\pgfmathresult + }% + {% + \pgfplotscoordmath{#1}{op}{multiply} + {{\max@unscaled}{\pgfplotsmath@scaleb}}% + \let\max@unscaled=\pgfmathresult + \pgfplotscoordmath{#1}{op}{multiply} + {{\min@unscaled}{\pgfplotsmath@scalea}}% + \let\min@unscaled=\pgfmathresult + }% \fi - \csname pgfplots@datascaletrafo@#1\endcsname{\min@unscaled}% + \pgfplotscoordmath{#1}{datascaletrafo}{\min@unscaled}% \let\pgfplots@@min=\pgfmathresult - \csname pgfplots@datascaletrafo@#1\endcsname{\max@unscaled}% + \pgfplotscoordmath{#1}{datascaletrafo}{\max@unscaled}% \let\pgfplots@@max=\pgfmathresult \min@d=\pgfplots@@min pt \max@d=\pgfplots@@max pt @@ -5013,89 +5306,102 @@ \pgfkeysgetvalue{/pgfplots/x}{\pgfplots@x}% \pgfkeysgetvalue{/pgfplots/y}{\pgfplots@y}% \pgfkeysgetvalue{/pgfplots/z}{\pgfplots@z}% + %\pgfkeysgetvalue{/pgfplots/viewdir}{\pgfplots@viewdir}% \pgfkeysgetvalue{/pgfplots/width}{\pgfplots@width}% \pgfkeysgetvalue{/pgfplots/height}{\pgfplots@height}% \ifx\pgfplots@width\pgfutil@empty + \def\pgfplots@user@provided@width{0}% \else + \def\pgfplots@user@provided@width{1}% \pgfmathparse{\pgfplots@width}% \edef\pgfplots@width{\pgfmathresult pt}% \fi \ifx\pgfplots@height\pgfutil@empty + \def\pgfplots@user@provided@height{0}% \else + \def\pgfplots@user@provided@height{1}% \pgfmathparse{\pgfplots@height}% \edef\pgfplots@height{\pgfmathresult pt}% \fi % % CASES: - % hasx := 'x' option non-empty - % hasy := 'y' option non-empty % W := 'width' option non-empty % H := 'height' option non-empty % - % hasx = 1 -> width is not interesting; we use 'x' option. - % hasx = 0 -> determine final width: % W H % 0 0 -> \axisdefaultwidth % 0 1 -> determine width out of H and the default aspect ratio % 1 X -> ok, use the user parameter. - % - % hasy = 1 -> height is not interesting, we use 'y' option. - % hasy = 0 -> determine final height: - % W H - % 0 0 -> \axisdefaultheight - % X 1 -> ok, use the user parameter - % 1 0 -> determine height out of W and the default aspect ratio - % - \ifx\pgfplots@x\pgfutil@empty - \ifx\pgfplots@y\pgfutil@empty - % hasx=0, hasy=0 - % - % -> KEEP ASPECT RATIO if just one W, or H is given! - \ifx\pgfplots@width\pgfutil@empty - \ifx\pgfplots@height\pgfutil@empty - % The case hasx=0, hasy=0, W=0 H=0: - \let\pgfplots@width=\axisdefaultwidth - \let\pgfplots@height=\axisdefaultheight - \else - % The case hasx=0, hasy=0, W=0 H=1: - \pgfplots@compute@default@aspect@ratio - \expandafter\pgfmath@y\pgfplots@height - \pgfmathlog@invoke@expanded\pgfmathmultiply@{% - {\pgf@sys@tonumber{\pgfmath@y}}% - {\pgfplots@default@aspect@ratio}% - }% - \edef\pgfplots@width{\pgfmathresult pt}% - \fi - \else - \ifx\pgfplots@height\pgfutil@empty - % The case hasx=0, hasy=0, W=1 H=0: - \pgfplots@compute@default@aspect@ratio - \expandafter\pgfmath@x\pgfplots@width - \pgfmathlog@invoke@expanded\pgfmathdivide@{% - {\pgf@sys@tonumber{\pgfmath@x}}% - {\pgfplots@default@aspect@ratio}% - }% - \edef\pgfplots@height{\pgfmathresult pt}% - \else - % The case hasx=0, hasy=0, W=1 H=1: - \fi - \fi + % -> KEEP ASPECT RATIO if just one W, or H is given! + \ifx\pgfplots@width\pgfutil@empty + \ifx\pgfplots@height\pgfutil@empty + % The case W=0 H=0: + \let\pgfplots@width=\axisdefaultwidth + \let\pgfplots@height=\axisdefaultheight \else - % hasx=0, hasy=1, W=0: - \ifx\pgfplots@width\pgfutil@empty - \let\pgfplots@width=\axisdefaultwidth - \fi + % The case W=0 H=1: + \pgfplots@compute@default@aspect@ratio + \expandafter\pgfmath@y\pgfplots@height + \pgfmathlog@invoke@expanded\pgfmathmultiply@{% + {\pgf@sys@tonumber{\pgfmath@y}}% + {\pgfplots@default@aspect@ratio}% + }% + \edef\pgfplots@width{\pgfmathresult pt}% \fi \else - \ifx\pgfplots@y\pgfutil@empty - % hasx=1, hasy=0, H=0 - \ifx\pgfplots@height\pgfutil@empty - \let\pgfplots@height=\axisdefaultheight - \fi + \ifx\pgfplots@height\pgfutil@empty + % The case W=1 H=0: + \pgfplots@compute@default@aspect@ratio + \expandafter\pgfmath@x\pgfplots@width + \pgfmathlog@invoke@expanded\pgfmathdivide@{% + {\pgf@sys@tonumber{\pgfmath@x}}% + {\pgfplots@default@aspect@ratio}% + }% + \edef\pgfplots@height{\pgfmathresult pt}% + \else + % The case W=1 H=1: \fi \fi \pgfkeyslet{/pgfplots/width}{\pgfplots@width}% \pgfkeyslet{/pgfplots/height}{\pgfplots@height}% + % + \ifpgfplots@threedim + \pgfplots@set@default@size@options@threedim + \fi +} +\def\pgfplots@set@default@size@options@threedim{% + \pgfplots@loc@tmpfalse + \ifx\pgfplots@x\pgfutil@empty + \else + \pgfplots@loc@tmptrue + \fi + \ifx\pgfplots@y\pgfutil@empty + \else + \pgfplots@loc@tmptrue + \fi + \ifx\pgfplots@z\pgfutil@empty + \else + \pgfplots@loc@tmptrue + \fi + \ifpgfplots@loc@tmp + % oh - we have at least one of the [xyz] unit vectors! + % make sure all of them are there + \ifx\pgfplots@x\pgfutil@empty + \pgfplots@set@default@size@options@threedim@{x}{(1pt,0pt)}% + \fi + \ifx\pgfplots@y\pgfutil@empty + \pgfplots@set@default@size@options@threedim@{y}{(0pt,1pt)}% + \fi + \ifx\pgfplots@z\pgfutil@empty + \pgfplots@set@default@size@options@threedim@{z}{(0pt,1pt)}% + \fi + \pgfkeyslet{/pgfplots/view/az}\pgfutil@empty + \pgfkeyslet{/pgfplots/view/el}\pgfutil@empty + \fi +} +\def\pgfplots@set@default@size@options@threedim@#1#2{% + \pgfplots@error{Sorry, a 3D axis needs either NONE or ALL of "x,y,z". I found partial information, but (at least) '#1' is lacking... please add '#1'}% + \expandafter\def\csname pgfplots@#1\endcsname{#2}% } % A helper method for \pgfplots@initsizes which @@ -5138,7 +5444,11 @@ \ifdim\pgfplots@loc@TMPa=0pt \def\pgfmathresult{0}% \else - \pgfmathveclen{\csname pgf@#1x\endcsname}{\csname pgf@#1y\endcsname}% + \edef\pgf@marshal{% + {\expandafter\pgf@sys@tonumber\csname pgf@#1x\endcsname}% + {\expandafter\pgf@sys@tonumber\csname pgf@#1y\endcsname}% + }% + \expandafter\pgfmathveclen\pgf@marshal \fi \fi % The numbers 1/||e_x|| and 1/||e_y|| are used by the tick @@ -5170,17 +5480,18 @@ \def#4{0}% we DON'T have (#1,0) or (0,#1). At least I think so. % %\message{Setting unitvector(#1) to non-standard \csname pgfplots@#1\endcsname ...}% - % FIXME : that's wrong for 3D axes! \def\pgfplots@loc@TMPa(##1,##2){% - \pgfmathparse{##1}% + \pgfplotscoordmath{default}{parse}{##1}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% \let\pgfplots@loc@TMPb=\pgfmathresult - \pgfmathparse{##2}% + \pgfplotscoordmath{default}{parse}{##2}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% \let\pgfplots@loc@TMPc=\pgfmathresult % \pgfplots@if{pgfplots@apply@datatrafo@#1}{% - \csname pgfplots@inverse@datascaletrafo@tofixed@#1@noshift\endcsname{\pgfplots@loc@TMPb}% + \pgfplotscoordmath{#1}{datascaletrafo noshift inverse to fixed}{\pgfplots@loc@TMPb}% \let\pgfplots@loc@TMPb=\pgfmathresult - \csname pgfplots@inverse@datascaletrafo@tofixed@#1@noshift\endcsname{\pgfplots@loc@TMPc}% + \pgfplotscoordmath{#1}{datascaletrafo noshift inverse to fixed}{\pgfplots@loc@TMPc}% \let\pgfplots@loc@TMPc=\pgfmathresult }{}% \csname pgfset#1vec\endcsname{% @@ -5190,12 +5501,17 @@ }% \expandafter\pgfplots@loc@TMPa\pgfplots@loc@TMPb% % - \pgfmathveclen{\csname pgf@#1x\endcsname}{\csname pgf@#1y\endcsname}% + \edef\pgf@marshal{% + {\expandafter\pgf@sys@tonumber\csname pgf@#1x\endcsname}% + {\expandafter\pgf@sys@tonumber\csname pgf@#1y\endcsname}% + }% + \expandafter\pgfmath@basic@veclen@\pgf@marshal + % \expandafter\let\csname pgfplots@#1@veclength\endcsname=\pgfmathresult \pgfplotsmath@ifzero{\pgfmathresult}{% \expandafter\def\csname pgfplots@#1@inverseveclength\endcsname{infty}% }{% - \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}% + \expandafter\pgfmath@basic@reciprocal@\expandafter{\pgfmathresult}% \expandafter\let\csname pgfplots@#1@inverseveclength\endcsname=\pgfmathresult }% \else @@ -5203,8 +5519,9 @@ \def#4{1}% we have (#1,0) or (0,#1) %\message{Setting unitvector(#1) to \csname pgfplots@#1\endcsname * e_{#2}...}% \pgfplots@if{pgfplots@apply@datatrafo@#1}{% - \pgfmathparse{\csname pgfplots@#1\endcsname}% - \expandafter\expandafter\csname pgfplots@inverse@datascaletrafo@tofixed@#1@noshift\endcsname\expandafter{\pgfmathresult}% + \pgfplotscoordmath{default}{parse}{\csname pgfplots@#1\endcsname}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \pgfplotscoordmath{#1}{datascaletrafo noshift inverse to fixed}{\pgfmathresult}% \edef\pgfplots@loc@TMPb{\pgfmathresult pt}% }{\relax}% \begingroup @@ -5216,28 +5533,32 @@ \endgroup \ifcase#2\relax \pgfsetxvec{\pgfqpoint{\pgfplots@loc@TMPb}{0pt}}% - \pgfmathabs@{\pgfplots@glob@TMPb}% + \pgfmath@basic@abs@{\pgfplots@glob@TMPb}% \or \pgfsetyvec{\pgfqpoint{0pt}{\pgfplots@loc@TMPb}}% - \pgfmathabs@{\pgfplots@glob@TMPb}% + \pgfmath@basic@abs@{\pgfplots@glob@TMPb}% \or \pgfsetzvec{\pgfqpoint{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPb}}% \ifdim\pgfplots@loc@TMPb=0pt \def\pgfmathresult{0}% \else - \pgfmathveclen{\csname pgf@#1x\endcsname}{\csname pgf@#1y\endcsname}% + \edef\pgf@marshal{% + {\expandafter\pgf@sys@tonumber\csname pgf@#1x\endcsname}% + {\expandafter\pgf@sys@tonumber\csname pgf@#1y\endcsname}% + }% + \expandafter\pgfmath@basic@veclen@\pgf@marshal \fi \fi \expandafter\let\csname pgfplots@#1@veclength\endcsname=\pgfmathresult \pgfplotsmath@ifzero{\pgfmathresult}{% \expandafter\def\csname pgfplots@#1@inverseveclength\endcsname{infty}% }{% - \expandafter\pgfmathreciprocal@\expandafter{\pgfmathresult}% + \expandafter\pgfmath@basic@reciprocal@\expandafter{\pgfmathresult}% \expandafter\let\csname pgfplots@#1@inverseveclength\endcsname=\pgfmathresult }% \fi \fi -%\message{-> got unitvector(#1) = (\the\csname pgf@#1x\endcsname, \the\csname pgf@#1y\endcsname).}% +%\message{-> got unitvector(#1) = (\the\csname pgf@#1x\endcsname, \the\csname pgf@#1y\endcsname).^^J}% }% % Applies the 'axis equal' feature. @@ -5256,142 +5577,337 @@ % transformation. All unit vector length above are only meaningful in % the UNTRANSFORMED range, so we have to mingle with the scaling % transformation. -\def\pgfplots@axis@equal@apply{% - % Step 1: compute the unit vector which STAYS CONSTANT. - % - % All other ones will be scaled to fit its length. - \ifpgfplots@threedim - \def\pgfplots@axis@equal@apply@reference{x}% - \pgfplots@if@unitveclenlessthan@untransformed xy{% - \pgfplots@if@unitveclenlessthan@untransformed xz{% - \def\pgfplots@axis@equal@apply@reference{x}% - }{}% - }{}% - \pgfplots@if@unitveclenlessthan@untransformed yx{% - \pgfplots@if@unitveclenlessthan@untransformed yz{% - \def\pgfplots@axis@equal@apply@reference{y}% - }{}% - }{}% - \pgfplots@if@unitveclenlessthan@untransformed zx{% - \pgfplots@if@unitveclenlessthan@untransformed zy{% - \def\pgfplots@axis@equal@apply@reference{z}% - }{}% - }{}% +\def\pgfplots@apply@unit@ratio{% + \pgfkeysgetvalue{/pgfplots/unit vector ratio}\pgfplots@unit@vector@ratio + \ifx\pgfplots@unit@vector@ratio\pgfutil@empty \else - \pgfplots@if@unitveclenlessthan@untransformed xy{% - \def\pgfplots@axis@equal@apply@reference{x}% - }{% - \def\pgfplots@axis@equal@apply@reference{y}% - }% - \fi -%\message{USING REFERENCE UNIT VECTOR FROM \pgfplots@axis@equal@apply@reference.}% - \if x\pgfplots@axis@equal@apply@reference - \else - \pgfplots@axis@equal@apply@for x - \fi - \if y\pgfplots@axis@equal@apply@reference - \else - \pgfplots@axis@equal@apply@for y - \fi - \ifpgfplots@threedim - \if z\pgfplots@axis@equal@apply@reference - \else - \pgfplots@axis@equal@apply@for z + \edef\pgfplots@unit@vector@ratio{\pgfplots@unit@vector@ratio\space1 1 }% + % + % Step 1: compute the unit vector which STAYS CONSTANT. + % + \pgfkeysgetvalue{/pgfplots/unit vector ratio axis}\pgfplots@apply@unit@ratio@reference + \ifx\pgfplots@apply@unit@ratio@reference\pgfutil@empty + \pgfplots@apply@unit@ratio@find@reference% + \fi + % + % FIXME : I could spent some attention here to save work: + % both, unit ratios and the resulting scales are computed at + % least twice (once in \pgfplots@apply@unit@ratio@find@reference and once in the + % following). + \expandafter\pgfplots@apply@unit@ratio@prepareratios\pgfplots@unit@vector@ratio\pgfplots@EOI + % +%\message{USING REFERENCE UNIT VECTOR FROM \pgfplots@apply@unit@ratio@reference; ratio \pgfplots@unit@ratio@x\space \pgfplots@unit@ratio@y\space \pgfplots@unit@ratio@z.^^J}% + % + % Step 2: apply the scaling: + \pgfplots@rescale@unit@vector@reltoreference{x}{\pgfplots@unit@ratio@x}% + \pgfplots@rescale@unit@vector@reltoreference{y}{\pgfplots@unit@ratio@y}% + \ifpgfplots@threedim + \pgfplots@rescale@unit@vector@reltoreference{z}{\pgfplots@unit@ratio@z}% \fi \fi }% -% Scales unit vector '#1' such that it has the same length as the unit -% vector in direction \pgfplots@axis@equal@apply@reference. +% This macro determines the reference axis for unit vector rescaling. +% The reference axis remains unscaled (it gets scaling factor 1 if you +% want it this way). +% +% The other axes are scaled such that the desired unit vector ratios +% are fulfilled. % -% The data limits for '#1' will be enlarged as well (for 'axis -% equal'). -\def\pgfplots@axis@equal@apply@for#1{% - \pgfmathmultiply@ - {\csname pgfplots@\pgfplots@axis@equal@apply@reference @veclength\endcsname} - {\csname pgfplots@#1@inverseveclength\endcsname}% - \global\let\pgfplots@glob@TMPa=\pgfmathresult - \pgfmathmultiply@ - {\csname pgfplots@\pgfplots@axis@equal@apply@reference @inverseveclength\endcsname} - {\csname pgfplots@#1@veclength\endcsname}% - \global\let\pgfplots@glob@TMPb=\pgfmathresult - % - % If the datascaling transformation is active (which is almost - % everytime the case here), we need to respect it here. +% The idea to select a reference axis is as follows: +% 1. Every unit vector scaling factor s should fulfill s <= 1. +% 2. Choose the reference axis such that the minimal amount of scaling +% is performed. +% +% The motivation for (1) is: if all involved scaling factors are at +% most 1, the resulting picture will only become *smaller*. +% Consequently, we can simply enlarge axis limits to restore the +% original width/height! +% +% The motivation for (2) is: a huge amount of scaling might reduce the +% size of the image too much. Of course, the figure will be enlarged +% to fit the original width/height, but most of it will be empty. So, +% use the smallest scaling. +% +% @POSTCONDITION The reference axis is stored in +% \pgfplots@apply@unit@ratio@reference . +% +% @see the key 'unit vector ratio axis=y' which allows to manually +% select the reference axis. This will illustrate what happens here. +\def\pgfplots@apply@unit@ratio@find@reference{% % - % We only need to respect the SCALING, translations (shifts) are - % not interesting. + \begingroup + \let\pgfplots@ONE=\pgf@x + \global\pgfplots@ONE=1.002pt % - % We want that || T^{-1} e_ref || = || T^{-1} E_#1 ||. + \def\pgfplots@optimum@sofar@axis{}% + \let\pgfplots@optimum@sofar@value=\pgf@y + \global\pgfplots@optimum@sofar@value=16000pt % - % So: T^{-1} E_#1 := s* T^{-1} e_#1 where - % s = ||T^{-1} e_ref|| / || T^{-1} e_#1 || - % = |10^{scale_ref}| / |10^{scale_#1}| * || e_ref|| / ||e_#1||. - % - % Then, E_#1 = T ( T^{-1} E_#1 ) = s * e_#1. + %\pgfplots@apply@unit@ratio@find@reference@checkexplicitlimits % - % -> compute 's'! We already have the quotient of unit vectors. - % Now, acquire the scale quotients. + \ifx\pgfplots@optimum@sofar@axis\pgfutil@empty + \ifpgfplots@threedim + % 3D is more complicated than 2D: + % for every fixed reference axis, we have to check *two* + % scaling factors. + % + % Furthermore, the optimality condition (2) needs to be + % performed on the maximum max{1-s_a, 1-s_b} provided both of + % these numbers are positive. + % + \def\pgfplots@check@##1##2{% + % PRECONDITION: \pgfplots@apply@unit@ratio@reference is defined. + % + % renormalize \pgfplots@unit@[xyz] : + \expandafter\pgfplots@apply@unit@ratio@prepareratios\pgfplots@unit@vector@ratio\pgfplots@EOI + % + % compute s_a : + \pgfplots@getscale@unit@vector@reltoreference ##1{\csname pgfplots@unit@ratio@##1\endcsname}% + \let\pgfplots@scale@a=\pgfmathresult + % + % compute s_b : + \pgfplots@getscale@unit@vector@reltoreference ##2{\csname pgfplots@unit@ratio@##2\endcsname}% + \let\pgfplots@scale@b=\pgfmathresult + % + % check if the actual choice of + % \pgfplots@apply@unit@ratio@reference is FEASIBLE. + % That is the case if s_a <= 1 && s_b <= 1. + % We check + % (1 - s_a >= 0 ) && ( 1 - s_b >= 0 ) + % instead, since I need the value + % max( 1-s_a, 1-s_b ) + % anyway. + \def\pgfplots@ref@is@feasible{1}% + \pgf@xa=\pgfplots@ONE \advance\pgf@xa by-\pgfplots@scale@a pt + \ifdim\pgf@xa<0sp + \def\pgfplots@ref@is@feasible{0}% + \else + \pgf@xb=\pgfplots@ONE \advance\pgf@xb by-\pgfplots@scale@b pt + \ifdim\pgf@xb<0sp + \def\pgfplots@ref@is@feasible{0}% + \fi + \fi + % compute max(1-s_a,1-s_b) into \pgf@xa: + % pgf@xa= max(pgf@xa,pgf@xb): + \ifdim\pgf@xb>\pgf@xa \pgf@xa=\pgf@xb \fi + \if1\pgfplots@ref@is@feasible + \ifdim\pgf@xa<\pgfplots@optimum@sofar@value + % Ah, ok. The actual choice is BETTER as it + % involves less scaling. + % + % Remember it! + \let\pgfplots@optimum@sofar@axis=\pgfplots@apply@unit@ratio@reference + \global\pgfplots@optimum@sofar@value=\pgf@xa + \fi + \fi +%\message{^^Junit vector ratio 3D searching reference: checking \pgfplots@apply@unit@ratio@reference. feasable=\pgfplots@ref@is@feasible. \if1\pgfplots@ref@is@feasible max=\the\pgf@xa. \fi Optimum so far: value =\the\pgfplots@optimum@sofar@value\space for axis \pgfplots@optimum@sofar@axis.^^J}% + }% + % + % Check 'x' as reference : + \def\pgfplots@apply@unit@ratio@reference{x}% + \pgfplots@check@ yz% + % + % Check 'y' as reference : + \def\pgfplots@apply@unit@ratio@reference{y}% + \pgfplots@check@ xz% + % + % Check 'z' as reference : + \def\pgfplots@apply@unit@ratio@reference{z}% + \pgfplots@check@ xy% + % + \else + % 2D is much simpler: find the scale s which fulfills s <= 1. + % One of them MUST fulfill it. + % + % try 'x' axis as reference: + \def\pgfplots@apply@unit@ratio@reference{x}% + % + % renormalize: + \expandafter\pgfplots@apply@unit@ratio@prepareratios\pgfplots@unit@vector@ratio\pgfplots@EOI + % + % compute scaling factor: + \pgfplots@getscale@unit@vector@reltoreference y\pgfplots@unit@ratio@y% + % +%\message{^^Junit vector ratio 2D searching reference: checking \pgfplots@apply@unit@ratio@reference. feasable=\pgfmathresult < 1: \ifdim\pgfmathresult pt <\pgfplots@ONE YES-> use x\else NO->use y\fi^^J}% + % and check (1). The condition (2) is irrelevant; it is met + % anyway. + \ifdim\pgfmathresult pt<\pgfplots@ONE + \def\pgfplots@optimum@sofar@axis{x}% + \else + \def\pgfplots@optimum@sofar@axis{y}% + \fi + \fi + \else +%\message{^^Junit vector ratio chose \pgfplots@optimum@sofar@axis\space to fulfill explicitly provided limits (at least partially).^^J}% + \fi % - \begingroup - \def\pgfplots@tmp@exponentref{0}% - \def\pgfplots@tmp@exponentK{0}% - \pgfplots@if{pgfplots@apply@datatrafo@\pgfplots@axis@equal@apply@reference}{% - \pgfplots@letcsname{pgfplots@tmp@exponentref}={pgfplots@data@scale@trafo@EXPONENT@\pgfplots@axis@equal@apply@reference}% - }{}% - \pgfplots@if{pgfplots@apply@datatrafo@#1}{% - \pgfplots@letcsname{pgfplots@tmp@exponentK}={pgfplots@data@scale@trafo@EXPONENT@#1}% - }{}% - \c@pgf@counta=\pgfplots@tmp@exponentref - \advance\c@pgf@counta by-\pgfplots@tmp@exponentK - \ifnum\c@pgf@counta=0 + \ifx\pgfplots@optimum@sofar@axis\pgfutil@empty + \ifpgfplots@threedim + \def\pgfplots@optimum@sofar@axis{z}% \else - \pgfplotsmathmultiplypowten@{\pgfplots@glob@TMPa}{\c@pgf@counta}% - \global\let\pgfplots@glob@TMPa=\pgfmathresult - \pgfplotsmathmultiplypowten@{\pgfplots@glob@TMPb}{-\c@pgf@counta}% - \global\let\pgfplots@glob@TMPb=\pgfmathresult + \def\pgfplots@optimum@sofar@axis{y}% \fi - \xdef\pgfplots@glob@TMPc{\the\c@pgf@counta}% + \pgfplots@warning{The algorithm to realize 'unit vector ratio' failed! It could not determine the axis which shall be scaled and decided to use 'unit vector ratio axis=\pgfplots@optimum@sofar@axis'.}% + \fi + \let\pgfplots@apply@unit@ratio@reference=\pgfplots@optimum@sofar@axis + \pgfmath@smuggleone\pgfplots@apply@unit@ratio@reference \endgroup +}% +\def\pgfplots@apply@unit@ratio@find@reference@checkexplicitlimits{% + \ifpgfplots@autocompute@ymax \else \def\pgfplots@optimum@sofar@axis{y}\fi + \ifpgfplots@autocompute@ymin \else \def\pgfplots@optimum@sofar@axis{y}\fi + \ifpgfplots@autocompute@xmax \else \def\pgfplots@optimum@sofar@axis{x}\fi + \ifpgfplots@autocompute@xmin \else \def\pgfplots@optimum@sofar@axis{x}\fi + \ifpgfplots@threedim + \ifpgfplots@autocompute@zmax \else \def\pgfplots@optimum@sofar@axis{z}\fi + \ifpgfplots@autocompute@zmin \else \def\pgfplots@optimum@sofar@axis{z}\fi + \fi +}% + +\def\pgfplots@apply@unit@ratio@prepareratios#1 #2 #3 #4\pgfplots@EOI{% + \def\pgfplots@unit@ratio@x{#1}% + \def\pgfplots@unit@ratio@y{#2}% + \def\pgfplots@unit@ratio@z{#3}% % - \if x#1 - \pgfsetxvec{\pgfplotsqpointxy{\pgfplots@glob@TMPa}{0}}% + % 'unit vector ratio' is measured relative to the y axis for 2d + % and relative to the z axis for 3d plots. + % renormalize such that it is relative to + % \pgfplots@apply@unit@ratio@reference. + % + % Furthermore, renormalize such that + % unit@ratio@\pgfplots@apply@unit@ratio@reference is 1. + \pgfmathreciprocal@{\csname pgfplots@unit@ratio@\pgfplots@apply@unit@ratio@reference\endcsname}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \ifpgfplots@threedim + \if z\pgfplots@apply@unit@ratio@reference + \else + \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@z}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \fi + % + \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@x}% + \let\pgfplots@unit@ratio@x=\pgfmathresult + % + \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@y}% + \let\pgfplots@unit@ratio@y=\pgfmathresult + % + \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@z}% + \let\pgfplots@unit@ratio@z=\pgfmathresult \else - \if y#1 - \pgfsetyvec{\pgfplotsqpointxy{0}{\pgfplots@glob@TMPa}}% + \if y\pgfplots@apply@unit@ratio@reference \else - \if z#1 - \pgfsetzvec{\pgfplotsqpointxyz{0}{0}{\pgfplots@glob@TMPa}}% - \fi + \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@y}% + \let\pgfplots@loc@TMPa=\pgfmathresult \fi + % + \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@x}% + \let\pgfplots@unit@ratio@x=\pgfmathresult + % + \pgfmathmultiply@{\pgfplots@loc@TMPa}{\pgfplots@unit@ratio@y}% + \let\pgfplots@unit@ratio@y=\pgfmathresult + % + \def\pgfplots@unit@ratio@z{<unused>}% \fi % - % - % Update auxiliary data members: - % This is only complicated due to the scaling transformation. If we would not have the scaling trafo, the following - % code would simply copy the vector length and inverse vectors length from the reference axis. - \pgfplotsmathmultiplypowten@{\csname pgfplots@\pgfplots@axis@equal@apply@reference @veclength\endcsname}{\pgfplots@glob@TMPc}% - \expandafter\let\csname pgfplots@#1@veclength\endcsname=\pgfmathresult - \pgfplotsmathmultiplypowten@{\csname pgfplots@\pgfplots@axis@equal@apply@reference @inverseveclength\endcsname}{-\pgfplots@glob@TMPc}% - \expandafter\let\csname pgfplots@#1@inverseveclength\endcsname=\pgfmathresult - % - % - \ifpgfplots@axis@equal@image +}% + + +% Computes a new unit vector E_#1 for direction #1 such that +% ||E_#1|| = #2 * ||e_reference||. +% Here, #2 is a scaling factor and e_reference is a reference axis. +% The reference axis is stored in +% \pgfplots@apply@unit@ratio@reference, the macro contains one of +% {x,y,z}. +% +% The data limits for '#1' will be enlarged as well (for 'unit rescale +% keep size'). +% +% #1 is the axis which should be scaled (i.e. #1 in {x,y,z}). +% It is allowed if #1 = \pgfplots@apply@unit@ratio@reference. In this +% case, you can provide a scale '#2' to rescale the axis. +% +% #2 is a desired scale, relative to +% \pgfplots@apply@unit@ratio@reference. #2 should be a number without +% unit. +% +% The parameter \pgfplots@apply@unit@ratio@reference is also one of +% {x,y,z}. +% +\def\pgfplots@rescale@unit@vector@reltoreference#1#2{% + \def\pgfplots@loc@TMPa{0}% + \if#1\pgfplots@apply@unit@ratio@reference + \pgfplotsmath@ifapproxequal@dim{#2pt}{1pt}{0.0002pt}{% + }{% + \def\pgfplots@loc@TMPa{1}% + }% \else + \def\pgfplots@loc@TMPa{1}% + \fi + \if1\pgfplots@loc@TMPa % - % Ok, now update the axis limits such that the axis' dimensions - % stay the same. + \pgfplots@getscale@unit@vector@reltoreference{#1}{#2}% + \global\let\pgfplots@glob@TMPa=\pgfmathresult % - % My idea is to add half of the new range to 'max' and - % subtract the other half from 'min': - % 1/s( xmax - xmin) = (xmax+0.5d) - (xmin-0.5d) = xmax - xmin +d - % with d = 1/s (xmax-xmin) - (xmax-xmin) = (1/s - 1) (xmax-xmin) +%\message{Rescaling '#1' by \pgfplots@glob@TMPa.^^J}% + \if x#1 + \pgfsetxvec{\pgfplotsqpointxy{\pgfplots@glob@TMPa}{0}}% + \else + \if y#1 + \pgfsetyvec{\pgfplotsqpointxy{0}{\pgfplots@glob@TMPa}}% + \else + \if z#1 + \pgfsetzvec{\pgfplotsqpointxyz{0}{0}{\pgfplots@glob@TMPa}}% + \fi + \fi + \fi + % + \pgfmathmultiply@{\csname pgfplots@#1@veclength\endcsname}{\pgfplots@glob@TMPa}% + \expandafter\let\csname pgfplots@#1@veclength\endcsname=\pgfmathresult + % + \pgfmathreciprocal@\pgfplots@glob@TMPa + \global\let\pgfplots@glob@TMPb=\pgfmathresult + % + \pgfmathmultiply@{\csname pgfplots@#1@inverseveclength\endcsname}{\pgfplots@glob@TMPb}% + \expandafter\let\csname pgfplots@#1@inverseveclength\endcsname=\pgfmathresult % -%\message{'axis equal': Resizing data range for #1: from \csname pgfplots@#1min\endcsname:\csname pgfplots@#1max\endcsname\ to}% + % + \pgfplots@apply@unit@vector@rescale@keep@size{#1}{\pgfplots@glob@TMPb}% + % + \fi +} + +% Updates the #1 axis limits such that the axis' dimensions +% stay the same after scaling the #1 unit vector by a scale 's'. +% +% PRECONDITION: +% - the #1 unit vector has been rescaled by a factor s. +% For example, e_xnew := e_x * 0.5 . +% +% POSTCONDITION: +% - the axis limits are enlarged by a factor 1/s such that +% 1/s (#1max - #1min) * e_xnew = (#1max- #1min) * e_x. +% +% In other words, the unit vector rescale is componensated by +% modifying the axis limits. +% +% My idea is to add half of the new range to 'max' and +% subtract the other half from 'min': +% 1/s( xmax - xmin) = (xmax+0.5d) - (xmin-0.5d) = xmax - xmin +d +% with d = 1/s (xmax-xmin) - (xmax-xmin) = (1/s - 1) (xmax-xmin) +% +% #1: either x, y or z. It denotes the direction which has been +% modified. +% #2: the INVERSE of the scaling factor, #2 = 1/s . +% +\def\pgfplots@apply@unit@vector@rescale@keep@size#1#2{% + \ifpgfplots@unit@vector@rescale@keep@size + % +%\message{'unit rescale keep size': Resizing data range for #1: from \csname pgfplots@#1min\endcsname:\csname pgfplots@#1max\endcsname\ to}% \pgfmathsubtract@{\csname pgfplots@#1max\endcsname}{\csname pgfplots@#1min\endcsname}% \begingroup \pgf@xa=\pgfmathresult pt - \pgfmathsubtract@{\pgfplots@glob@TMPb}{1.0}% + \pgfmathsubtract@{#2}{1.0}% \pgf@xa=\pgfmathresult \pgf@xa \divide\pgf@xa by2 \xdef\pgfplots@glob@TMPb{\pgf@sys@tonumber{\pgf@xa}}% @@ -5405,6 +5921,85 @@ % Update auxiliary data members: \pgfplots@visphase@notify@changeofcanvaslimits{#1}% \fi +}% + +% #1: an axis which should be scaled +% #2: the desired final ratio ||e_#1||/||e_ref|| +\def\pgfplots@getscale@unit@vector@reltoreference#1#2{% + % + % If the datascaling transformation is active (which is almost + % everytime the case here), we have a transformation + % T^{-1}(x)= 10^scale * x + % with different scales for every axis. + % + % If the datascaling transformation is NOT active, scale is 0 + % and T^{-1} = Identity. + % + % Note that the datascaling transformation also has + % translations (shifts). These are not important here. + % + % Goal: + % compute E_#1 such that + % #2* || T^{-1} e_ref || = || T^{-1} E_#1 || + % where T^{-1} is the data scaling transformation and e_ref the + % reference unit vector. Keep in mind that there are + % *different* data scaling transformations for each axis. + % + % We are given e_ref and e_#1 and the desired aspect ratio + % between e_ref and E_#1, which is available as #2. + % + % So: T^{-1} E_#1 := s* T^{-1} e_#1 where + % s = #2 * ||T^{-1} e_ref|| / || T^{-1} e_#1 || + % = |10^{scale_ref}| / |10^{scale_#1}| * #2 * || e_ref|| / ||e_#1||. + % + % Then, E_#1 = T ( T^{-1} E_#1 ) = s * e_#1. + % + % -> compute 's'! + % + % Part 1: compute + % #2 * ||e_ref|| / ||e_#1||. + % + \pgfmathmultiply@ + {\csname pgfplots@\pgfplots@apply@unit@ratio@reference @veclength\endcsname} + {\csname pgfplots@#1@inverseveclength\endcsname}% + \pgfmathmultiply@ + {\pgfmathresult}% + {#2}% + \global\let\pgfplots@glob@TMPa=\pgfmathresult + % + % also compute 1/s, required as temporary value: + %\pgfmathmultiply@ + % {\csname pgfplots@\pgfplots@apply@unit@ratio@reference @inverseveclength\endcsname} + % {\csname pgfplots@#1@veclength\endcsname}% + %\ifdim#2pt=1pt + %\else + % \pgfmathdivide@{\pgfmathresult}{#2}% + %\fi + %\global\let\pgfplots@glob@TMPb=\pgfmathresult + % + % Part 2: handle data scaling trafo scales: + \begingroup + \def\pgfplots@tmp@exponentref{0}% + \def\pgfplots@tmp@exponentK{0}% + \pgfplots@if{pgfplots@apply@datatrafo@\pgfplots@apply@unit@ratio@reference }{% + \pgfplots@letcsname{pgfplots@tmp@exponentref}={pgfplots@data@scale@trafo@EXPONENT@\pgfplots@apply@unit@ratio@reference }% + }{}% + \pgfplots@if{pgfplots@apply@datatrafo@#1}{% + \pgfplots@letcsname{pgfplots@tmp@exponentK}={pgfplots@data@scale@trafo@EXPONENT@#1}% + }{}% + \c@pgf@counta=\pgfplots@tmp@exponentref\relax + \advance\c@pgf@counta by-\pgfplots@tmp@exponentK\relax + \ifnum\c@pgf@counta=0 + \else + \pgfplotsmathmultiplypowten@{\pgfplots@glob@TMPa}{\c@pgf@counta}% + \global\let\pgfplots@glob@TMPa=\pgfmathresult + % \pgfplotsmathmultiplypowten@{\pgfplots@glob@TMPb}{-\c@pgf@counta}% + % \global\let\pgfplots@glob@TMPb=\pgfmathresult + \fi + \xdef\pgfplots@glob@TMPc{\the\c@pgf@counta}% + \endgroup + \let\pgfmathresult=\pgfplots@glob@TMPa +%\message{\string\pgfplots@getscale@unit@vector@reltoreference{#1}{#2} (reference \pgfplots@apply@unit@ratio@reference) = \pgfmathresult.^^J}% } % should be invoked whenever \pgfplots@#1min or \pgfplots@#1max have @@ -5414,18 +6009,32 @@ \csname pgfplots@#1min@reg\endcsname=\csname pgfplots@#1min\endcsname pt % \csname pgfplots@#1max@reg\endcsname=\csname pgfplots@#1max\endcsname pt % \pgfplots@if{pgfplots@apply@datatrafo@#1}{% - \csname pgfplots@inverse@datascaletrafo@#1\endcsname{\csname pgfplots@#1min\endcsname}% + \pgfplotscoordmath{#1}{datascaletrafo inverse}{\csname pgfplots@#1min\endcsname}% \expandafter\let\csname pgfplots@#1min@unscaled@as@float\endcsname=\pgfmathresult - \csname pgfplots@inverse@datascaletrafo@#1\endcsname{\csname pgfplots@#1max\endcsname}% + \pgfplotscoordmath{#1}{datascaletrafo inverse}{\csname pgfplots@#1max\endcsname}% \expandafter\let\csname pgfplots@#1max@unscaled@as@float\endcsname=\pgfmathresult }{}% }% -% Invokes #3 if +% Invokes #3 if ||D_#1||_CANVAS < ||D_#2||_CANVAS and #4 if that is not the case. +% Here D_x = (1,0,0) , D_y = (0,1,0) and D_z=(0,0,1). +% +% Due to the data scaling transformation, +% ||D_a|| = || T(1) * e_a|| +% where e_x, e_y, e_z are the lowlevel, transformed unit vectors. +% We have +% ||D_a|| = T(1) * veclen_a. +% Note that the shift in T is not of interest, we only deal with +% T_a(x) = 10^{s_a} x. +% +% Thus, this routine invokes #3 if % ( 10^{s1} * veclen1 < 10^{s2} * veclen2 ) % <=> % ( 10^{s1-s2} * veclen1 < veclen2 ). % +% Here s1/s2 are the respective scales of the data scaling +% transformation. +% % If the condition is false, '#4' is invoked. \def\pgfplots@if@unitveclenlessthan@untransformed#1#2#3#4{% \def\pgfplots@loc@TMPa{0}% @@ -5437,15 +6046,19 @@ \pgfplots@letcsname{pgfplots@loc@TMPb}={pgfplots@data@scale@trafo@EXPONENT@#2}% }{}% \begingroup +%\message{[comparison: [#1] < [#2]: 10^\pgfplots@loc@TMPa\space * \csname pgfplots@#1@veclength\endcsname < 10^\pgfplots@loc@TMPb\space * \csname pgfplots@#2@veclength\endcsname]^^J}% \pgf@xb=\csname pgfplots@#2@veclength\endcsname pt + % \c@pgf@counta=\pgfplots@loc@TMPa \advance\c@pgf@counta by-\pgfplots@loc@TMPb + % \ifnum\c@pgf@counta=0 \pgf@xa=\csname pgfplots@#1@veclength\endcsname pt \else \pgfplotsmathmultiplypowten@{\csname pgfplots@#1@veclength\endcsname}{\c@pgf@counta}% \pgf@xa=\pgfmathresult pt \fi + % \ifdim\pgf@xa<\pgf@xb \gdef\pgfplots@glob@TMPc{1}% \else @@ -5483,14 +6096,6 @@ \pgfplots@zmax@reg=\pgfplots@zmax pt % \fi % - \pgfpointdiff - {\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}} - {\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}% - % only used temporarily in this macro to compute the correct - % length for unit vectors: - \edef\pgfplots@initsizes@axisdiag@x{\the\pgf@x}% - \edef\pgfplots@initsizes@axisdiag@y{\the\pgf@y}% - % % %----------------------------------------- % PROCESS THE 'width' and 'height' options @@ -5506,13 +6111,24 @@ % FIXME \let\pgfplots@view@el=\pgfutil@empty \let\pgfplots@view@az=\pgfutil@empty - \def\pgfplots@view@dir@threedim@x{0}% - \def\pgfplots@view@dir@threedim@y{0}% - \def\pgfplots@view@dir@threedim@z{1}% \fi \ifx\pgfplots@view@az\pgfutil@empty + % Note that in presence of "x,y,z" options, the + % \pgfplots@set@default@size@options RESETS /pgfplots/view/az. + % %\let\pgfplots@rectangle@width=\pgfutil@empty %\let\pgfplots@rectangle@height=\pgfutil@empty + \def\pgfplots@view@dir@threedim@x{0}% + \def\pgfplots@view@dir@threedim@y{0}% + \def\pgfplots@view@dir@threedim@z{1}% + % + \pgfpointdiff + {\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}} + {\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}}% + % only used temporarily in this macro to compute the correct + % length for unit vectors: + \edef\pgfplots@initsizes@axisdiag@x{\the\pgf@x}% + \edef\pgfplots@initsizes@axisdiag@y{\the\pgf@y}% % \ifx\pgfplots@x\pgfutil@empty \ifx\pgfplots@width\pgfutil@empty @@ -5545,17 +6161,26 @@ \pgfplots@initsizes@setunitvector{x}{0}{\pgfplots@tmpXscale}{\pgfplots@tmp@xisaxisparallel}% \pgfplots@initsizes@setunitvector{y}{1}{\pgfplots@tmpYscale}{\pgfplots@tmp@yisaxisparallel}% \pgfplots@initsizes@setunitvector{z}{2}{\pgfplots@tmpZscale}{\pgfplots@loc@TMPc}% + \ifcase\pgfplots@scale@mode@choice\relax + % scale mode=auto : do nothing in this context. + \else + \pgfplots@scale@axisbox@to@widthheight + \fi + \ifpgfplots@threedim + \pgfplotsgetnormalforcurrentview + \fi \else - % 3D case is currently always initialised by `view': + % 3D case by `view': \let\pgfplots@x=\pgfutil@empty \let\pgfplots@y=\pgfutil@empty \let\pgfplots@z=\pgfutil@empty + % this invokes \pgfplots@scale@plotbox@to@widthheight automatically. \pgfplotssetaxesfromazel{\pgfplots@view@az}{\pgfplots@view@el}{\pgfplots@tmp@xisaxisparallel}% \if1\pgfplots@tmp@xisaxisparallel% \def\pgfplots@tmp@yisaxisparallel{1}% \fi \fi -%\message{Pgfplots debug: initialised unit vectors to x=(\the\pgf@xx,\the\pgf@xy), y=(\the\pgf@yx,\the\pgf@yy), z=(\the\pgf@zx,\the\pgf@zy). }% +%\message{Pgfplots debug: initialised unit vectors to x=(\the\pgf@xx,\the\pgf@xy), y=(\the\pgf@yx,\the\pgf@yy), z=(\the\pgf@zx,\the\pgf@zy), n = (\pgfplots@view@dir@threedim@x,\pgfplots@view@dir@threedim@y,\pgfplots@view@dir@threedim@z).^^J }% % \let\pgfplotsmathfloatviewdepthxyz@=\pgfplotsmathfloatviewdepthxyz@infigure \let\pgfplotsmathviewdepthxyz@=\pgfplotsmathviewdepthxyz@infigure @@ -5573,124 +6198,33 @@ \fi \fi \fi - \ifpgfplots@axis@equal@image - \pgfplots@axis@equaltrue - \fi - \ifpgfplots@axis@equal - \pgfplots@axis@equal@apply - \fi - % - % Determine final rectangle dimensions. - % There are the following cases: - % 1. the user really wants a fixed dimension, - % i.e. he used 'scale only axis'. - % Then, we have to work to get the correct dimension! - % - % Up to now, the scaling mechanism looses to many significant - % digits such that the final width/height differs by 1-2 pt. - % - % If I am not mistaken, this does ONLY affect the final size, - % not the relative plot precision. - % - % FIXME : really compute the plot precision! - % - % 2. The use specified width and/or height, but not 'scale only - % axis'. Accept inaccurate final widths/heights (see above). - % - % 3. The user supplied 'x' and or 'y'. Simply use them, its - % accurate. + \pgfplots@apply@unit@ratio % - \begingroup + \pgfplots@axis@apply@post@scale x + \pgfplots@axis@apply@post@scale y \ifpgfplots@threedim - \def\pgfplotspointmaxminmin{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmin}}% - \def\pgfplotspointminmaxmin{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmin}}% - \pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmin}% - \else - \def\pgfplotspointmaxminmin{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}% - \def\pgfplotspointminmaxmin{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}% - \pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}% + \pgfplots@axis@apply@post@scale z \fi - \xdef\pgfplotspointminminmin{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% - % ATTENTION: I re-use registers here! Make sure they won't be - % overwritten! \pgfpointdiff and \pgfplotsqpointxy are ok in this respect. - \let\pgfplots@xcoordminTEX=\pgf@xb - \let\pgfplots@ycoordminTEX=\pgf@yb - \pgfplots@xcoordminTEX=\pgf@x - \pgfplots@ycoordminTEX=\pgf@y - % - %-------------------------------------------------- - % FIXME : WHAT IS THIS HERE FOR? - % \pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}% - % \ifx\pgfplots@rectangle@width\pgfutil@empty - % \def\pgfplots@tmp@xmax@ymin{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}% - % \else - % % this 'if' here should only make a difference of about - % % 1-2pt, not more. - % % - % % and I am quite sure that this inaccuracy (and this - % % work-around) only affects the - % % final size, not the relative plot accuracy. - % \pgf@x=\pgfplots@xcoordminTEX - % \advance\pgf@x by\pgfplots@width - % \edef\pgfplots@tmp@xmax@ymin{\noexpand\pgfqpoint{\the\pgf@x}{\noexpand\pgfplots@ycoordminTEX}}% - % \fi - % \ifx\pgfplots@rectangle@height\pgfutil@empty - % \def\pgfplots@tmp@xmin@ymax{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}% - % \else - % \pgf@x=\pgfplots@ycoordminTEX - % \advance\pgf@x\pgfplots@height - % \edef\pgfplots@tmp@xmin@ymax{\noexpand\pgfqpoint{\noexpand\pgfplots@xcoordminTEX}{\the\pgf@x}}% - % \fi - %-------------------------------------------------- - \pgfpointdiff - {\pgfqpoint{\pgfplots@xcoordminTEX}{\pgfplots@ycoordminTEX}} - {\pgfplotspointmaxminmin}% - \xdef\pgfplotspointxaxis{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% - \pgfmathveclen{\pgf@x}{\pgf@y}% - \xdef\pgfplotspointxaxislength{\pgfmathresult pt}% - % - \pgfpointdiff - {\pgfqpoint{\pgfplots@xcoordminTEX}{\pgfplots@ycoordminTEX}} - {\pgfplotspointminmaxmin}% - \xdef\pgfplotspointyaxis{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% - \pgfmathveclen{\pgf@x}{\pgf@y}% - \xdef\pgfplotspointyaxislength{\pgfmathresult pt}% +} +\def\pgfplots@axis@apply@post@scale#1{% % - \ifpgfplots@threedim - \pgfpointdiff - {\pgfqpoint{\pgfplots@xcoordminTEX}{\pgfplots@ycoordminTEX}} - {\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmax}}% - \xdef\pgfplotspointzaxis{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% - \pgfmathveclen{\pgf@x}{\pgf@y}% - \xdef\pgfplotspointzaxislength{\pgfmathresult pt}% - % - \pgfpointscale - {0.5}% - {\pgfplotspointxaxis - \pgf@xa=\pgf@x - \pgf@xb=\pgf@y - \pgfplotspointyaxis% - \advance\pgf@xa by\pgf@x - \advance\pgf@xb by\pgf@y - \pgfplotspointzaxis% - \advance\pgf@xa by\pgf@x - \advance\pgf@xb by\pgf@y - \global\pgf@x=\pgf@xa - \global\pgf@y=\pgf@xb - }% - \xdef\pgfplotspointcenter{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% + \pgfkeysgetvalue{/pgfplots/#1 post scale}\pgfmathresult + \ifx\pgfmathresult\pgfutil@empty \else - \global\let\pgfplotspointzaxis=\pgfpointorigin - \gdef\pgfplotspointzaxislength{0pt}% - \pgfpointscale - {0.5}% - {\pgfpointadd - \pgfplotspointxaxis% - \pgfplotspointyaxis% - }% - \xdef\pgfplotspointcenter{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% + \pgfmathparse{\pgfmathresult}% + \ifdim\pgfmathresult pt=1pt + \else + \let\pgfplots@loc@TMPa=\pgfmathresult + \csname pgf@#1x\endcsname=\pgfmathresult\csname pgf@#1x\endcsname + \csname pgf@#1y\endcsname=\pgfmathresult\csname pgf@#1y\endcsname + % + \pgfmathmultiply@{\csname pgfplots@#1@veclength\endcsname}{\pgfplots@loc@TMPa}% + \expandafter\let\csname pgfplots@#1@veclength\endcsname=\pgfmathresult + % + \pgfmathdivide@{\csname pgfplots@#1@inverseveclength\endcsname}{\pgfplots@loc@TMPa}% + \expandafter\let\csname pgfplots@#1@inverseveclength\endcsname=\pgfmathresult + \fi \fi - \endgroup } % This here is a low-weight node. It can ONLY be used during axis @@ -5980,14 +6514,28 @@ %% %% \anchorborder{% - % Call a function that computes a border point. Since this - % function will modify dimensions like \pgf@x, we must move them to - % other dimensions. - \pgfutil@tempdima=\pgf@x - \pgfutil@tempdimb=\pgf@y - \pgfpointborderrectangle% - {\pgfpoint{\pgfutil@tempdima}{\pgfutil@tempdimb}}% - {\upperrightcorner}% + % remember the input coords: + \edef\pgfplots@loc@TMPa{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% + % + % I want to use \pgfpointborderrectangle which expects that + % (0,0) is the CENTER. + % Ok, then: shift it: + \pgfpointadd + {\lowerleftinnercorner}% + {\pgfpointscale + {0.5} + {\innerdiagonal}}% + \edef\pgfplots@loc@center{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% + \pgfpointadd{% + \pgfpointborderrectangle% + {\pgfplots@loc@TMPa}% + {\pgfpointscale + {0.5} + {\innerdiagonal}}% + }{% + % and add the center to undo the local shift: + \pgfplots@loc@center + }% }% \backgroundpath{% \pgfkeysvalueof{/pgfplots/@backgroundpath@hook/.@cmd}\pgfeov @@ -6249,6 +6797,65 @@ }{}% }% + +% Defines a new axis type `#1' with initialization code `#2'. +% +% The name #1 will be available as value for 'axis type=#1' and +% furthermore, an environment '\begin{#1axis}' will be available. +% +% For ConTeXt, the \start#1axis and \stop#1axis commands will be +% available. +% +% #1: the axis type name +% #2: initialization TeX code. +% +% OPTIONAL: you can provide the expected axis coordinate system in +% square brackets. +% +% \pgfplotsdefineaxistype{rectangle}{...} +% \pgfplotsdefineaxistype[polar]{polar}{...} +\def\pgfplotsdefineaxistype{\pgfutil@ifnextchar[{\pgfplotsdefineaxistype@}{\pgfplotsdefineaxistype@[cart]}}% +\def\pgfplotsdefineaxistype@[#1]#2#3{% + \expandafter\def\csname pgfplots@axistype@#2\endcsname{% + \pgfkeyssetvalue{/pgfplots/@expected axis cs}{#1}% + #3% + }% + \expandafter\def\csname pgfplots@environment@#2axis\endcsname{% + \pgfutil@ifnextchar[% + {\csname pgfplots@environment@#2axis@\endcsname}% + {\csname pgfplots@environment@#2axis@\endcsname[]}% + }% + \expandafter\long\expandafter\def\csname pgfplots@environment@#2axis@\endcsname[##1]{% + \begin{axis}[% + ##1,% + data cs=#1,% assume that coordinates provided by \addplot are in the correct coordsystem + axis type=#2% active the correct axis type + ]% + }% + \expandafter\def\csname endpgfplots@environment@#2axis\endcsname{\end{axis}}% + \edef\pgfplots@glob@TMPc{\expandafter\noexpand\csname #2axis\endcsname\expandafter\noexpand\csname pgfplots@environment@#2axis\endcsname}% + \expandafter + \tikzaddtikzonlycommandshortcutlet\pgfplots@glob@TMPc + % + \edef\pgfplots@glob@TMPc{\expandafter\noexpand\csname end#2axis\endcsname\expandafter\noexpand\csname endpgfplots@environment@#2axis\endcsname}% + \expandafter + \tikzaddtikzonlycommandshortcutlet\pgfplots@glob@TMPc + % + % ConTeXt compatibility: + \t@pgfplots@toka=\expandafter{\csname #2axis\endcsname}% + \t@pgfplots@tokb=\expandafter{\csname end#2axis\endcsname}% + \expandafter\edef\csname start#2axis\endcsname{\the\t@pgfplots@toka}% + \expandafter\edef\csname stop#2axis\endcsname{\the\t@pgfplots@tokb}% +}% + +\def\pgfplotssetaxistype#1{% + \pgfutil@ifundefined{pgfplots@axistype@#1}{% + \pgfplots@error{Sorry, 'axis type=#1' is unknown. Maybe you need to load a proper library first or you misspelled the name? Ignoring it}% + }{% + \csname pgfplots@axistype@#1\endcsname + }% +}% + % A command which has to be invoked BEFORE \pgfplots@draw@axis to % prepare everything. \def\pgfplots@draw@axis@pre{% @@ -6285,6 +6892,8 @@ \fi } +\def\pgfplots@draw@axis@is@prepared{}% + % PRECONDITION: % \pgfplots@draw@axis@pre has been called. \def\pgfplots@draw@axis{% @@ -6341,8 +6950,8 @@ %\fi \else % Just use the 2d-point commands (assuming Z=0) - \let\pgfplotspointonorientedsurfaceabsetupforxyz=\pgfplotspointonorientedsurfaceabsetupforxy - \let\pgfplotspointonorientedsurfaceabsetupforyxz=\pgfplotspointonorientedsurfaceabsetupforyx + \let\pgfplotspointonorientedsurfaceabsetupfor@@xyz=\pgfplotspointonorientedsurfaceabsetupfor@@xy + \let\pgfplotspointonorientedsurfaceabsetupfor@@yxz=\pgfplotspointonorientedsurfaceabsetupfor@@yx \pgfplots@draw@axis@insurface@symmetric xyz \fi }% @@ -6614,10 +7223,33 @@ \expandafter\def\csname pgfplots@surfviewdepth@vv0\endcsname{b}% \expandafter\def\csname pgfplots@surfviewdepth@vv1\endcsname{f}% \fi + \else + % FIXME : it might be better to implement that stuff here + % implicilty using the 3D algorithms. + % + % this here is the only important one: + \expandafter\def\csname pgfplots@surfviewdepth@vv0\endcsname{b}% + % + \expandafter\def\csname pgfplots@surfviewdepth@0vv\endcsname{b}% + \expandafter\def\csname pgfplots@surfviewdepth@1vv\endcsname{f}% + \expandafter\def\csname pgfplots@surfviewdepth@v0v\endcsname{b}% + \expandafter\def\csname pgfplots@surfviewdepth@v1v\endcsname{f}% + \expandafter\def\csname pgfplots@surfviewdepth@vv1\endcsname{f}% + \def\pgfplotsifaxislineisonconvexhull##1##2##3{##2}% ALWAYS TRUE + \def\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@##1##2##3{##2}% ALWAYS TRUE + % + \fi +} + +% Initialises the 'pgfplots@[xyz]ticklabelaxisspecs' macro according to +% the foreground/background situation of the axis and the '[xyz]ticklabel pos' +% keys. +\def\pgfplots@init@ticklabelaxisspec{% + \ifpgfplots@threedim % % % Now, determine which axis line shall get tick labels. - % The strategie is as follows: + % The strategy is as follows: % - only lines on the convex hull of the 2D projected axis % rectangle can get tick labels, % - for each axis, there are two such choices in the general @@ -6635,20 +7267,6 @@ % \pgfplots@init@ticklabelaxisspecfor zx% \else - % FIXME : it might be better to implement that stuff here - % implicilty using the 3D algorithms. - % - % this here is the only important one: - \expandafter\def\csname pgfplots@surfviewdepth@vv0\endcsname{b}% - % - \expandafter\def\csname pgfplots@surfviewdepth@0vv\endcsname{b}% - \expandafter\def\csname pgfplots@surfviewdepth@1vv\endcsname{f}% - \expandafter\def\csname pgfplots@surfviewdepth@v0v\endcsname{b}% - \expandafter\def\csname pgfplots@surfviewdepth@v1v\endcsname{f}% - \expandafter\def\csname pgfplots@surfviewdepth@vv1\endcsname{f}% - \def\pgfplotsifaxislineisonconvexhull##1##2##3{##2}% ALWAYS TRUE - \def\pgfplots@ifaxisline@B@onorientedsurf@should@be@drawn@##1##2##3{##2}% ALWAYS TRUE - % \pgfplotspointcenter \edef\pgfplots@tmp@centerx{\the\pgf@x}% \edef\pgfplots@tmp@centery{\the\pgf@y}% @@ -6657,10 +7275,10 @@ % \pgfplots@init@ticklabelaxisspec@twodim@for yx% \fi -} +}% % A helper method which is to be invoked ONLY inside of -% \pgfplots@decide@which@figure@surfaces@are@drawn. +% \pgfplots@init@ticklabelaxisspec. % It does NOT work outside of it. % % It initialises the 'pgfplots@#1ticklabelaxisspec' macro according to @@ -6677,7 +7295,6 @@ % % POSTCONDITION: % - pgfplots@#1ticklabelaxisspec is set, -% - pgfplots@#1ticklabel@suggested@anchor is set % % @see also \pgfplots@init@ticklabelaxisspec@twodim@for \def\pgfplots@init@ticklabelaxisspecfor#1#2{% @@ -6783,7 +7400,7 @@ % #3 : the direction which is currently fixed. \def\pgfplots@draw@axis@insurface#1#2#3{% \pgfplots@if{pgfplots@hide@#1}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#1#2#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #1#2#3% \pgfplots@drawgridlines@onorientedsurf % \pgfplots@drawticklines@onorientedsurf @@ -6796,7 +7413,7 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#1tick\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \csname pgfplotspointonorientedsurfaceabsetupfor#1#2#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #1#2#3% \expandafter\pgfplots@draw@extra@ticks@onorientedsurf\expandafter{\pgfplots@loc@TMPa}% \fi }% @@ -6808,32 +7425,32 @@ % with slightly optimized execution sequence. \def\pgfplots@draw@axis@insurface@symmetric#1#2#3{% \pgfplots@if{pgfplots@hide@#1}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#1#2#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #1#2#3% \pgfplots@drawgridlines@onorientedsurf }% \pgfplots@if{pgfplots@hide@#2}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#2#1#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #2#1#3% \pgfplots@drawgridlines@onorientedsurf }% % \pgfplots@if{pgfplots@hide@#1}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#1#2#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #1#2#3% \pgfplots@drawticklines@onorientedsurf }% \pgfplots@if{pgfplots@hide@#2}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#2#1#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #2#1#3% \pgfplots@drawticklines@onorientedsurf }% % \ifpgfplots@separate@axis@lines \pgfplots@if{pgfplots@hide@#1}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#1#2#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #1#2#3% \pgfplots@drawaxis@outerlines@separate@onorientedsurf#1#2% \pgfplots@drawaxis@innerlines@onorientedsurf#1#2#3% }% % \pgfplots@if{pgfplots@hide@#2}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#2#1#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #2#1#3% \pgfplots@drawaxis@outerlines@separate@onorientedsurf#2#1% \pgfplots@drawaxis@innerlines@onorientedsurf#2#1#3% }% @@ -6844,11 +7461,11 @@ \fi % \pgfplots@if{pgfplots@hide@#1}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#1#2#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #1#2#3% \pgfplots@drawticklabels@onorientedsurf }% \pgfplots@if{pgfplots@hide@#2}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#2#1#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #2#1#3% \pgfplots@drawticklabels@onorientedsurf }% % @@ -6856,7 +7473,7 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#1tick\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \csname pgfplotspointonorientedsurfaceabsetupfor#1#2#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #1#2#3% \expandafter\pgfplots@draw@extra@ticks@onorientedsurf\expandafter{\pgfplots@loc@TMPa}% \fi }% @@ -6864,7 +7481,7 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#2tick\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \csname pgfplotspointonorientedsurfaceabsetupfor#2#1#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #2#1#3% \expandafter\pgfplots@draw@extra@ticks@onorientedsurf\expandafter{\pgfplots@loc@TMPa}% \fi }% @@ -6872,7 +7489,7 @@ \def\pgfplots@draw@axis@insurface@onlyticksandgrid#1#2#3{% \pgfplots@if{pgfplots@hide@#1}{\relax}{% - \csname pgfplotspointonorientedsurfaceabsetupfor#1#2#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #1#2#3% \pgfplots@drawgridlines@onorientedsurf \pgfplots@drawticklines@onorientedsurf % @@ -6881,7 +7498,7 @@ \else \begingroup \let\pgfplots@drawticklabels@onorientedsurf=\relax - \csname pgfplotspointonorientedsurfaceabsetupfor#1#2#3\endcsname + \pgfplotspointonorientedsurfaceabsetupfor #1#2#3% \expandafter\pgfplots@draw@extra@ticks@onorientedsurf\expandafter{\pgfplots@loc@TMPa}% \endgroup \fi @@ -6944,7 +7561,9 @@ \endgroup \expandafter\pgfsettransformentries\pgfplots@glob@TMPa{0pt}{0pt}% % + % \pgfplots@draw@axis@pre + \pgfplots@draw@axis@is@prepared \scope % \pgfkeysifdefined{/pgfplots/axis background/.@cmd}{% @@ -6962,26 +7581,26 @@ \pgfplotspointbb@assertvaluesexist% } -% Defines \pgfplots@clippath@install. -% @PRECONDITION the axis limits must be ready. -\def\pgfplots@clippath@prepare{% - \def\pgfplots@clippath@use@##1{% - \ifx\pgfplotspoint@bb@@@\relax - % remember the axis dimensions as well: - \ifdim\pgf@pathmaxx=-16000pt - \else - \begingroup - \pgf@xa=\pgf@pathmaxx - \advance\pgf@xa by-\pgf@pathminx - \pgf@ya=\pgf@pathmaxy - \advance\pgf@ya by-\pgf@pathminy - \xdef\pgfplots@glob@TMPa{{\the\pgf@pathminx}{\the\pgf@pathminy}{\the\pgf@xa}{\the\pgf@ya}}% - \endgroup - \global\let\pgfplotspoint@bb@@@=\pgfplots@glob@TMPa - \fi +% something which is invoked after a clippath segment is complete. +% #1 should be something like \pgfusepath{clip} +\def\pgfplots@clippath@use@#1{% + \ifx\pgfplotspoint@bb@@@\relax + % remember the axis dimensions: + \ifdim\pgf@pathmaxx=-16000pt + \else + \begingroup + \pgf@xa=\pgf@pathmaxx + \advance\pgf@xa by-\pgf@pathminx + \pgf@ya=\pgf@pathmaxy + \advance\pgf@ya by-\pgf@pathminy + \xdef\pgfplots@glob@TMPa{{\the\pgf@pathminx}{\the\pgf@pathminy}{\the\pgf@xa}{\the\pgf@ya}}% + \endgroup + \global\let\pgfplotspoint@bb@@@=\pgfplots@glob@TMPa \fi - ##1% - }% + \fi + #1% +}% +\def\pgfplots@clippath@prepare@for@axistype{% \ifpgfplots@threedim % FIXME : this can't be done in three dimensions. :-( % -> for 3d, I need to clip at least the 2d projection. @@ -7212,18 +7831,60 @@ \endgroup \let\pgfplots@clippath@install=\pgfplots@glob@TMPa \fi - % FIXME : workaround clear path sizes at beginning! This shouldn't - % be necessary! - \expandafter\def - \expandafter\pgfplots@clippath@install - \expandafter##% - \expandafter1% - \expandafter{% - \expandafter\pgf@resetpathsizes - \pgfplots@clippath@install{##1}% - }% +}% +% Defines \pgfplots@clippath@install. +% @PRECONDITION the axis limits must be ready. +\def\pgfplots@clippath@prepare{% + \pgfplots@clippath@prepare@for@axistype + % now, the \pgfplots@clippath@install routine should be ready. + % + % it is used to compute the bounding box. prepare that: \global\let\pgfplotspoint@bb@@@=\relax + % + % Now, I SET the clip path temporarily and record the low level + % protocol. + % This low level protocol is used to create a highly optimized + % clip path routine; it will be used quite often. + % + \let\pgfplots@clippath@install@pathcmd=\pgfplots@clippath@install + \pgf@resetpathsizes% FIXME: this here should not be necessary! + \pgfsysprotocol@getcurrentprotocol\pgfplots@loc@TMPa% + \begingroup + % when I do this work, I can as well compute the bounding + % box (done in \pgfplots@clippath@use@) + \pgfinterruptboundingbox + \pgf@relevantforpicturesizetrue + % + \pgfsysprotocol@bufferedtrue% + \pgfsysprotocol@setcurrentprotocol\pgfutil@empty% + % \pgfplots@clippath@install@pathcmd{\pgfusepath{clip}}% + \pgfsysprotocol@getcurrentprotocol\pgfplots@loc@TMPa% + \global\let\pgfplots@glob@TMPa=\pgfplots@loc@TMPa + \endpgfinterruptboundingbox + \endgroup + \let\pgfplots@clippath@install@clip@protocolled=\pgfplots@glob@TMPa + \pgfsysprotocol@setcurrentprotocol\pgfplots@loc@TMPa% + % + % Replace \pgfplots@clippath@install by one which makes use of the + % optimized version (if ##1=\pgfusepath{clip}) + \def\pgfplots@clippath@install##1{% + \def\pgfplots@loc@TMPa{##1}% + \ifx\pgfplots@loc@TMPa\pgfplots@clippath@install@test + % the 'clip' path has been precomputed because it is often + % used: + \expandafter\pgfsys@invoke\expandafter{\pgfplots@clippath@install@clip@protocolled}% + % as far as I can see, this here is the only command which + % can't be protocolled: + \pgf@relevantforpicturesizefalse + \else + \pgf@resetpathsizes% FIXME: this here should not be necessary! + \pgfplots@clippath@install@pathcmd{##1}% + \fi + }% + % }% +\def\pgfplots@clippath@install@test{\pgfusepath{clip}X}% + \def\pgfplotspointbb@assertvaluesexist{% \ifx\pgfplotspoint@bb@@@\relax % (RE)COMPUTE: @@ -7295,7 +7956,7 @@ \def\pgfplots@filter@input@ticks@with@log#1#2{% \let\pgfplots@glob@TMPa=\pgfutil@empty \foreach \pgfplots@loc@TMPb in {#1} {% - \csname pgfplotsmathlog@#2@\endcsname{\pgfplots@loc@TMPb}% + \pgfplotscoordmath{#2}{log}{\pgfplots@loc@TMPb}% \ifx\pgfplots@glob@TMPa\pgfutil@empty \xdef\pgfplots@glob@TMPa{\pgfmathresult}% \else @@ -7321,14 +7982,17 @@ \let\pgfmathresult=\pgfplots@glob@TMPa } +% 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}% +% 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}% +% 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} \def\pgfplots@evalute@tikz@coord@system@interface@axis@description#1,#2\pgfplots@coord@end{\pgfplotspointdescriptionxy{#1}{#2}} @@ -7347,10 +8011,11 @@ \let\pgfplots@loc@TMPc=\pgfmathresult% FIXME: is that necessary? I doubt it... but just to make sure... \csname ifpgfplots@#1islinear\endcsname \pgfplots@if{pgfplots@apply@datatrafo@#1}{% - \csname pgfplots@datascaletrafo@fromfixed@#1\endcsname{\pgfplots@loc@TMPc}% + \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@loc@TMPc}% + \pgfplotscoordmath{#1}{datascaletrafo}{\pgfmathresult}% }{}% \else - \pgfmathlog@{\pgfplots@loc@TMPc}% + \pgfplotscoordmath{#1}{log}{\pgfplots@loc@TMPc}% \fi } @@ -7469,7 +8134,6 @@ % See also: % \pgfplots@check@and@apply@datatrafo@for \def\pgfplots@prepare@coord@filtering@for#1{% - \expandafter\let\csname pgfplotsmathlogtologten@#1@\endcsname=\pgfmathlogtologten@ \pgfkeysgetvalue{/pgfplots/#1 coord trafo/.@cmd}\pgfplots@loc@TMPc \expandafter\let\csname pgfplots@highlevel@trafo@#1\endcsname=\pgfplots@loc@TMPc \ifx\pgfplots@loc@TMPc\pgfplots@empty@command@key @@ -7527,6 +8191,7 @@ \expandafter\edef\csname pgfplots@#1tick\endcsname{\pgfmathresult}% \fi \fi + % \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@extra@#1tick\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else @@ -7534,6 +8199,12 @@ \expandafter\edef\csname pgfplots@extra@#1tick\endcsname{\pgfmathresult}% \fi % + \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + \expandafter\pgfplots@filter@input@ticks@with@highleveltrafo\expandafter{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPc}% + \pgfkeyslet{/pgfplots/minor #1tick}\pgfmathresult + \fi \fi % \pgfkeysgetvalue{/pgfplots/#1filter}\pgfplots@loc@TMPa @@ -7545,6 +8216,7 @@ \pgfkeys{/pgfplots/#1 filter/.code={\csname pgfplots@#1filter@backwcompat\endcsname{##1}\to\pgfmathresult}}% \fi \csname ifpgfplots@#1islinear\endcsname + \pgfplotssetcoordmathfor{#1}{float}% \csname pgfplots@apply@datatrafo@#1true\endcsname \pgfplots@apply@datatrafotrue \ifpgfplots@apply@datatrafo @@ -7552,37 +8224,31 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1min\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \expandafter\pgfmathfloatparsenumber\expandafter{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{parsenumber}{\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 - \expandafter\pgfmathfloatparsenumber\expandafter{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{parsenumber}{\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 - \expandafter\pgfmathfloatparsenumber\expandafter{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{parsenumber}{\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 - \expandafter\pgfmathfloatparsenumber\expandafter{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@loc@TMPa}% \expandafter\global\expandafter\let\csname pgfplots@#1tickmax\endcsname=\pgfmathresult \fi \fi \else - \expandafter\let\csname pgfplotsmathlog@#1@\endcsname=\pgfmathlog@ - \expandafter\let\csname pgfplotsmathlogi@#1\endcsname=\logi - \expandafter\let\csname pgfplotsmathlog@#1@float\endcsname=\pgfmathlog@float - \expandafter\let\csname pgfplots@log@scale@todisplaylog@#1\endcsname=\logten - \expandafter\let\csname pgfplots@log@scale@todisplaylog@#1@inv\endcsname=\reciproclogten - \expandafter\def\csname pgfplotsmathlogscale@#1\endcsname{1}% - \expandafter\def\csname pgfplotsmathlogscale@#1@inv\endcsname{1}% + \pgfplotssetcoordmathfor{#1}{pgfbasic}% % % This here could be done using a high level coord trafo as % well! However, I don't want to risk accidentally overwritten @@ -7596,38 +8262,10 @@ % log basis x={} (initial setting:) \else % use a different basis. - % - % - \pgfmathlog@{\pgfplots@loc@TMPa}% - \let\pgfplots@loc@TMPa=\pgfmathresult - \pgfmathparse{1/\pgfplots@loc@TMPa}% - \expandafter\let\csname pgfplotsmathlogscale@#1\endcsname=\pgfplots@loc@TMPa - \expandafter\let\csname pgfplotsmathlogscale@#1@inv\endcsname=\pgfmathresult - % - \expandafter\edef\csname pgfplotsmathlog@#1@\endcsname##1{% - \noexpand\pgfmathlog@{##1}% - \noexpand\ifx\noexpand\pgfmathresult\noexpand\pgfutil@empty - \noexpand\else - \noexpand\expandafter\noexpand\pgfmath@basic@multiply@\noexpand\expandafter - {\noexpand\pgfmathresult}% - {\pgfmathresult}% - \noexpand\fi - }% - \expandafter\edef\csname pgfplotsmathlog@#1@float\endcsname##1{% - \noexpand\pgfmathlog@float{##1}% - \noexpand\ifx\noexpand\pgfmathresult\noexpand\pgfutil@empty - \noexpand\else - \noexpand\expandafter\noexpand\pgfmath@basic@multiply@\noexpand\expandafter - {\noexpand\pgfmathresult}% - {\pgfmathresult}% - \noexpand\fi - }% + \pgfplotscoordmath{#1}{set log basis}{\pgfplots@loc@TMPa}% % % generate default ticks in the 'log basis', not base 10: - \expandafter\def\csname pgfplots@log@scale@todisplaylog@#1\endcsname{1}% - \expandafter\def\csname pgfplots@log@scale@todisplaylog@#1@inv\endcsname{1}% \pgfplotsset{/pgfplots/log basis ticks=#1}% - % % \ifdim\pgfkeysvalueof{/pgfplots/log basis #1}pt=10pt \else @@ -7638,39 +8276,6 @@ \expandafter\def\csname pgfplots@#1minorgridstrue\endcsname{\pgfplots@error{Sorry, minor grid lines are not supported for this log basis.}}% \fi \pgfkeyslet{/pgfplots/log basis #1/.@cmd}\pgfplots@cant@set@in@this@context - % - % recompute logtologten for this axis: - \pgfmath@basic@multiply@{\reciproclogten}{\pgfplots@loc@TMPa}% - \expandafter\edef\csname pgfplotsmathlogtologten@#1@\endcsname##1{% - \noexpand\pgfmath@basic@multiply@{##1}{\pgfmathresult}% - }% - \begingroup - % recompute \logi for the new basis. - \dimen1=\logi1pt \dimen1=\csname pgfplotsmathlogscale@#1@inv\endcsname\dimen1 - \dimen2=\logi2pt \dimen2=\csname pgfplotsmathlogscale@#1@inv\endcsname\dimen2 - \dimen3=\logi3pt \dimen3=\csname pgfplotsmathlogscale@#1@inv\endcsname\dimen3 - \dimen4=\logi4pt \dimen4=\csname pgfplotsmathlogscale@#1@inv\endcsname\dimen4 - \dimen5=\logi5pt \dimen5=\csname pgfplotsmathlogscale@#1@inv\endcsname\dimen5 - \dimen6=\logi6pt \dimen6=\csname pgfplotsmathlogscale@#1@inv\endcsname\dimen6 - \dimen7=\logi7pt \dimen7=\csname pgfplotsmathlogscale@#1@inv\endcsname\dimen7 - \dimen8=\logi8pt \dimen8=\csname pgfplotsmathlogscale@#1@inv\endcsname\dimen8 - \dimen9=\logi9pt \dimen9=\csname pgfplotsmathlogscale@#1@inv\endcsname\dimen9 - \xdef\pgfplots@glob@TMPa##1{% - \noexpand\ifcase##1 - \noexpand\or0 - \noexpand\or\pgf@sys@tonumber{\dimen1 }% - \noexpand\or\pgf@sys@tonumber{\dimen2 }% - \noexpand\or\pgf@sys@tonumber{\dimen3 }% - \noexpand\or\pgf@sys@tonumber{\dimen4 }% - \noexpand\or\pgf@sys@tonumber{\dimen5 }% - \noexpand\or\pgf@sys@tonumber{\dimen6 }% - \noexpand\or\pgf@sys@tonumber{\dimen7 }% - \noexpand\or\pgf@sys@tonumber{\dimen8 }% - \noexpand\or\pgf@sys@tonumber{\dimen9 }% - \noexpand\fi - }% - \endgroup - \expandafter\let\csname pgfplotsmathlogi@#1\endcsname=\pgfplots@glob@TMPa %%% % Ok, now, I have prepared everything for the new % log basis! @@ -7680,13 +8285,13 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1min\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \csname pgfplotsmathlog@#1@\endcsname{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{log}{\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 - \csname pgfplotsmathlog@#1@\endcsname{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{log}{\pgfplots@loc@TMPa}% \expandafter\global\expandafter\let\csname pgfplots@#1max\endcsname=\pgfmathresult \fi % @@ -7694,13 +8299,13 @@ \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@#1tickmin\endcsname \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \csname pgfplotsmathlog@#1@\endcsname{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{log}{\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 - \csname pgfplotsmathlog@#1@\endcsname{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{log}{\pgfplots@loc@TMPa}% \expandafter\global\expandafter\let\csname pgfplots@#1tickmax\endcsname=\pgfmathresult \fi % @@ -7723,26 +8328,26 @@ \expandafter\edef\csname pgfplots@extra@#1tick\endcsname{\pgfmathresult}% \fi % + \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + \expandafter\pgfplots@filter@input@ticks@with@log\expandafter{\pgfplots@loc@TMPa}{#1}% + \pgfkeyslet{/pgfplots/minor #1tick}\pgfmathresult + \fi + % % append logarithm to prepare coord. % \t@pgfplots@toka={% \ifx\pgfmathresult\pgfutil@empty \else \pgfplots@if{pgfplots@disablelogfilter@#1}{% - \pgfmathfloatparsenumber{\pgfmathresult}% - \expandafter\pgfmathfloat@decompose@F\pgfmathresult\relax\c@pgf@counta - \ifnum\c@pgf@counta>2 % this clears nan, inf and -inf points. - \let\pgfmathresult=\pgfutil@empty - \def\pgfplots@unbounded@dir{#1}% - \else - \pgfmathfloattofixed{\pgfmathresult}% - \fi + \pgfplotscoordmath{#1}{parsenumber}{\pgfmathresult}% + % FIXME : check for unbounded arguments! }{% - \csname pgfplotsmathlog@#1@\endcsname{\pgfmathresult}% - \ifx\pgfmathresult\pgfutil@empty - % detect unbounded coords: + \pgfplotscoordmath{#1}{log}{\pgfmathresult}% + \pgfplotscoordmath{#1}{if is bounded}{\pgfmathresult}{}{% \def\pgfplots@unbounded@dir{#1}% - \fi + }% }% \fi }% @@ -7777,6 +8382,7 @@ } \def\pgfplots@create@axis@descriptions@{% + \begingroup \ifpgfplots@hide@x \else \ifpgfplots@units@use% @@ -7815,6 +8421,7 @@ \fi \fi \fi + \endgroup % \pgfkeysgetvalue{/pgfplots/title}\pgfplots@loc@TMPa \ifx\pgfplots@loc@TMPa\pgfutil@empty @@ -7827,215 +8434,6 @@ % } -\def\pgfplots@datascaletrafo@undoshift@x#1{% - \pgfmathsubtract@{#1}{\pgfplots@data@scale@trafo@SHIFT@x}% -}% -\def\pgfplots@datascaletrafo@redoshift@x#1{% - \pgfmathadd@{#1}{\pgfplots@data@scale@trafo@SHIFT@x}% -}% -\def\pgfplots@datascaletrafo@undoshift@y#1{% - \pgfmathsubtract@{#1}{\pgfplots@data@scale@trafo@SHIFT@y}% -}% -\def\pgfplots@datascaletrafo@redoshift@y#1{% - \pgfmathadd@{#1}{\pgfplots@data@scale@trafo@SHIFT@y}% -}% -\def\pgfplots@datascaletrafo@undoshift@z#1{% - \pgfmathsubtract@{#1}{\pgfplots@data@scale@trafo@SHIFT@z}% -}% -\def\pgfplots@datascaletrafo@redoshift@z#1{% - \pgfmathadd@{#1}{\pgfplots@data@scale@trafo@SHIFT@z}% -}% - -% DATA TRANSFORMATION T(x) = X - xmin -% -% Input: -% a number in the original data range, given in **floating** point representation -% Output: -% a fixed point number in transformed range -% stored in \pgfmathresult -% @see -% \pgfplots@datascaletrafo@fromfixed@x -\def\pgfplots@datascaletrafo@x#1{% - \pgfmathfloatshift@{#1}{\pgfplots@data@scale@trafo@EXPONENT@x}% - \pgfmathfloattofixed{\pgfmathresult}% - \expandafter\pgfmathsubtract@\expandafter{\pgfmathresult}{\pgfplots@data@scale@trafo@SHIFT@x}% -} -\def\pgfplots@datascaletrafo@x@noshift#1{% - \pgfmathfloatshift@{#1}{\pgfplots@data@scale@trafo@EXPONENT@x}% - \pgfmathfloattofixed{\pgfmathresult}% -} - -% Overloaded function. -% Input: -% a FIXED point number instead of a floating point one. -% @see \pgfplots@datascaletrafo@x -\def\pgfplots@datascaletrafo@fromfixed@x#1{% - \pgfmathfloatparsenumber{#1}% - \pgfplots@datascaletrafo@x{\pgfmathresult}% -} - -\def\pgfplots@datascaletrafo@y#1{% - \pgfmathfloatshift@{#1}{\pgfplots@data@scale@trafo@EXPONENT@y}% - \pgfmathfloattofixed{\pgfmathresult}% - \expandafter\pgfmathsubtract@\expandafter{\pgfmathresult}{\pgfplots@data@scale@trafo@SHIFT@y}% -} -\def\pgfplots@datascaletrafo@fromfixed@y#1{% - \pgfmathfloatparsenumber{#1}% - \pgfplots@datascaletrafo@y{\pgfmathresult}% -} -\def\pgfplots@datascaletrafo@y@noshift#1{% - \pgfmathfloatshift@{#1}{\pgfplots@data@scale@trafo@EXPONENT@y}% - \pgfmathfloattofixed{\pgfmathresult}% -} -\def\pgfplots@datascaletrafo@z#1{% - \pgfmathfloatshift@{#1}{\pgfplots@data@scale@trafo@EXPONENT@z}% - \pgfmathfloattofixed{\pgfmathresult}% - \expandafter\pgfmathsubtract@\expandafter{\pgfmathresult}{\pgfplots@data@scale@trafo@SHIFT@z}% -} -\def\pgfplots@datascaletrafo@fromfixed@z#1{% - \pgfmathfloatparsenumber{#1}% - \pgfplots@datascaletrafo@z{\pgfmathresult}% -} -\def\pgfplots@datascaletrafo@z@noshift#1{% - \pgfmathfloatshift@{#1}{\pgfplots@data@scale@trafo@EXPONENT@z}% - \pgfmathfloattofixed{\pgfmathresult}% -} - -% INVERSE transformation x = T^{-1}( X ) -% Input: -% a fixed point number in transformed domain -% Output: -% a number in the data domain, given in floating point -% representation -% -% If the input number is approximately X=0, we will return x=0 as -% well. -% -% This allows to handle rounding inaccuracies and should not pose any -% problems. -\def\pgfplots@inverse@datascaletrafo@x#1{% - \begingroup - \pgfmathadd@{#1}{\pgfplots@data@scale@trafo@SHIFT@x}% - \let\pgfplots@inverse@datascaletrafo@@shifted=\pgfmathresult - \pgfmathapproxequalto@{\pgfplots@inverse@datascaletrafo@@shifted}{0.0}% - \ifpgfmathcomparison - \pgfmathfloatcreate{0}{0.0}{0}% - \else - \pgfmathfloatparsenumber{\pgfplots@inverse@datascaletrafo@@shifted}% - \edef\pgfplots@data@scale@trafo@EXPONENT@x{-\pgfplots@data@scale@trafo@EXPONENT@x}% - \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\pgfplots@data@scale@trafo@EXPONENT@x}% - \fi - \pgfmath@smuggleone\pgfmathresult - \endgroup -} -\def\pgfplots@inverse@datascaletrafo@x@noshift#1{% - \begingroup - \pgfmathapproxequalto@{#1}{0.0}% - \ifpgfmathcomparison - \pgfmathfloatcreate{0}{0.0}{0}% - \else - \pgfmathfloatparsenumber{#1}% - \edef\pgfplots@data@scale@trafo@EXPONENT@x{-\pgfplots@data@scale@trafo@EXPONENT@x}% - \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\pgfplots@data@scale@trafo@EXPONENT@x}% - \fi - \pgfmath@smuggleone\pgfmathresult - \endgroup -} - -\def\pgfplots@inverse@datascaletrafo@y#1{% - \begingroup - \pgfmathadd@{#1}{\pgfplots@data@scale@trafo@SHIFT@y}% - \let\pgfplots@inverse@datascaletrafo@@shifted=\pgfmathresult - \pgfmathapproxequalto@{\pgfplots@inverse@datascaletrafo@@shifted}{0.0}% - \ifpgfmathcomparison - \pgfmathfloatcreate{0}{0.0}{0}% - \else - \pgfmathfloatparsenumber{\pgfplots@inverse@datascaletrafo@@shifted}% - \edef\pgfplots@data@scale@trafo@EXPONENT@y{-\pgfplots@data@scale@trafo@EXPONENT@y}% - \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\pgfplots@data@scale@trafo@EXPONENT@y}% - \fi - \pgfmath@smuggleone\pgfmathresult - \endgroup -} -% Overloaded function. This one does only apply the scaling, no shift. -\def\pgfplots@inverse@datascaletrafo@y@noshift#1{% - \begingroup - \pgfmathapproxequalto@{#1}{0.0}% - \ifpgfmathcomparison - \pgfmathfloatcreate{0}{0.0}{0}% - \else - \pgfmathfloatparsenumber{#1}% - \edef\pgfplots@data@scale@trafo@EXPONENT@y{-\pgfplots@data@scale@trafo@EXPONENT@y}% - \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\pgfplots@data@scale@trafo@EXPONENT@y}% - \fi - \pgfmath@smuggleone\pgfmathresult - \endgroup -} - -\def\pgfplots@inverse@datascaletrafo@z#1{% - \begingroup - \pgfmathadd@{#1}{\pgfplots@data@scale@trafo@SHIFT@z}% - \let\pgfplots@inverse@datascaletrafo@@shifted=\pgfmathresult - \pgfmathapproxequalto@{\pgfplots@inverse@datascaletrafo@@shifted}{0.0}% - \ifpgfmathcomparison - \pgfmathfloatcreate{0}{0.0}{0}% - \else - \pgfmathfloatparsenumber{\pgfplots@inverse@datascaletrafo@@shifted}% - \edef\pgfplots@data@scale@trafo@EXPONENT@z{-\pgfplots@data@scale@trafo@EXPONENT@z}% - \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\pgfplots@data@scale@trafo@EXPONENT@z}% - \fi - \pgfmath@smuggleone\pgfmathresult - \endgroup -} -% Overloaded function. This one does only apply the scaling, no shift. -\def\pgfplots@inverse@datascaletrafo@z@noshift#1{% - \begingroup - \pgfmathapproxequalto@{#1}{0.0}% - \ifpgfmathcomparison - \pgfmathfloatcreate{0}{0.0}{0}% - \else - \pgfmathfloatparsenumber{#1}% - \edef\pgfplots@data@scale@trafo@EXPONENT@z{-\pgfplots@data@scale@trafo@EXPONENT@z}% - \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\pgfplots@data@scale@trafo@EXPONENT@z}% - \fi - \pgfmath@smuggleone\pgfmathresult - \endgroup -} - -% Overloaded function. -% -% In contrast to \pgfplots@inverse@datascaletrafo@x, this method -% returns a number in FIXED point representation. -% @see \pgfplots@inverse@datascaletrafo@x -\def\pgfplots@inverse@datascaletrafo@tofixed@x#1{% - \pgfplots@inverse@datascaletrafo@x{#1}% - \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}% -} -\def\pgfplots@inverse@datascaletrafo@tofixed@y#1{% - \pgfplots@inverse@datascaletrafo@y{#1}% - \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}% -} -\def\pgfplots@inverse@datascaletrafo@tofixed@z#1{% - \pgfplots@inverse@datascaletrafo@z{#1}% - \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}% -} - -% Overloaded function. -% -% This one does only apply the scale, no shift. -\def\pgfplots@inverse@datascaletrafo@tofixed@x@noshift#1{% - \pgfplots@inverse@datascaletrafo@x@noshift{#1}% - \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}% -} -\def\pgfplots@inverse@datascaletrafo@tofixed@y@noshift#1{% - \pgfplots@inverse@datascaletrafo@y@noshift{#1}% - \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}% -} -\def\pgfplots@inverse@datascaletrafo@tofixed@z@noshift#1{% - \pgfplots@inverse@datascaletrafo@z@noshift{#1}% - \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}% -} - % Invokes '#1' foreach key which should be saved by a color bar. % % The current key name is available as '##1', the macro under which @@ -8150,9 +8548,9 @@ \fi % % normalize format: - \pgfmathfloattosci\pgfplots@colorbar@src@metamin + \pgfplotscoordmath{meta}{tostring}{\pgfplots@colorbar@src@metamin}% \global\let\pgfplots@colorbar@src@metamin=\pgfmathresult - \pgfmathfloattosci\pgfplots@colorbar@src@metamax + \pgfplotscoordmath{meta}{tostring}{\pgfplots@colorbar@src@metamax}% \global\let\pgfplots@colorbar@src@metamax=\pgfmathresult % \pgfplots@assemble@ref@picture @@ -8176,9 +8574,12 @@ \noexpand\pgfkeyssetvalue{/pgfplots/parent axis height}{\pgfkeysvalueof{/pgfplots/parent axis height}}% \noexpand\pgfkeyssetvalue{/pgfplots/colorbar/width}{\pgfkeysvalueof{/pgfplots/colorbar/width}}% \noexpand\pgfkeyssetvalue{/pgfplots/colorbar addplot}{\the\toks2 }% + \noexpand\def\noexpand\pgfplots@colormap@access{\pgfplots@colormap@access}% \noexpand\pgfkeyssetvalue{/pgfplots/colorbar pos*}{\pgfkeysvalueof{/pgfplots/colorbar pos*}}% + % just to make sure that colorbar sampled respects it: + \noexpand\pgfkeyssetvalue{/pgfplots/mark list fill}{\pgfkeysvalueof{/pgfplots/mark list fill}}% \noexpand\pgfplots@colorbar@define@hook% - \noexpand\pgfkeysvalueof{/pgfplots/colorbar/draw/.@cmd}\noexpand\pgfeov + \noexpand\pgfplots@colorbar@draw@ \ifx\pgfplots@colorbar@toname\pgfutil@empty \noexpand\pgfnodealias{current colorbar axis}{current axis}% \noexpand\pgfnodealias{current axis}{parent axis}% @@ -8200,6 +8601,44 @@ \pgfplots@label{\pgfplots@colorbar@toname}{pgfplots@colorbar@to@name@}% \fi }% + +\newif\ifpgfplotscolorbarCMYKworkaround +\pgfplotscolorbarCMYKworkaroundtrue + +\def\pgfplots@colorbar@draw@{% + \ifpgfplotscolorbarCMYKworkaround + % the default implementation for colorbars is based on + % \pgfplotscolormaptoshadingspec. + % This, in turn, does NOT work for CMYK. + % + % This here detects that case and switches to the (visually) + % equivalent 'colorbar sampled={surf,shader=interp}' style. + \if1\pgfplotscolormaptoshadingspectorgb + \pgfkeysgetvalue{/pgfplots/colorbar/draw/.@cmd}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfplots@colorbar@draw@defaultimpl + \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@loc@TMPb + \pgfplotscolormapgetcolorspace{\pgfplots@loc@TMPb}% + \def\pgfplots@loc@TMPa{cmyk}% + \ifx\pgfplots@loc@TMPa\pgfplotsretval + \pgfutil@ifundefined{pgfplots@colorbar@CMYK@\pgfplots@loc@TMPb}{% + \pgfplots@warning{colorbar: The colormap '\pgfplots@loc@TMPb' has a CMYK colorspace which is not (yet) supported by PGF. I switched colorbar styles automatically to 'colorbar sampled={surf,shader=interp}' to generate a proper CMYK colorbar. Use \string\pgfplotscolorbarCMYKworkaroundfalse\space to disable this improvement. [This message won't be replicated for '\pgfplots@loc@TMPb']}% + \expandafter\gdef\csname pgfplots@colorbar@CMYK@\pgfplots@loc@TMPb\endcsname{1}% + }{}% + \pgfplotsset{colorbar sampled={surf,shader=interp}}% + \fi + \fi + \fi + \fi + % + % FIXME : the semicolon after ';' has a fixed catcode, namely + % the one assigned while pgfplots.code.tex has been read. + % + % The \pgfplots@checkandpreparefor@active@semicolon gets + % confused if the catcodes change... this here is a + % work-around for babel support. + \let\pgfplots@checkandpreparefor@active@semicolon\relax + \pgfkeysvalueof{/pgfplots/colorbar/draw/.@cmd}\pgfeov +} \pgfkeysdef{/pgfplots/colorbar to name/at}{% % automatically search-and-replace 'parent axis' which % is not defined for a detached colorbar: @@ -8444,6 +8883,8 @@ {#1}% \let\pgfplots@remaining@input=\pgfplots@rmopts % + \pgfplotssetaxistype{\pgfkeysvalueof{/pgfplots/axis type}}% + % % Step 2: parse any pgfplots options out of styles. \pgfkeysactivatefamily{/pgfplots/style commands}% %\pgfkeysinstallkeyfilter{/pgf/key filters/active families or descendants of}{/pgfplots} @@ -8455,6 +8896,8 @@ \pgfplots@set@keys@from@tikz@style{every axis}% \pgfkeysdeactivatefamily{/pgfplots/scale}% % + \pgfplots@set@keys@from@tikz@style@append@to{every \pgfkeysvalueof{/pgfplots/axis type} axis}{every axis}% + % \ifpgfplots@xislinear \ifpgfplots@yislinear \pgfplots@set@keys@from@tikz@style@append@to{every linear axis}{every axis}% @@ -8609,8 +9052,11 @@ \pgfkeysalso{/pgfplots/.search also=/tikz}% % \pgfplots@set@options@sanitize + \pgfplots@notify@options@are@set } +\def\pgfplots@notify@options@are@set{}% + \def\pgfplots@install@abbrev@commands{ \let\pgfplots@orig@path=\path \let\pgfplots@orig@plot=\plot @@ -8639,7 +9085,7 @@ \or2.197224 \fi }% - \def\axisdefaultticklabel{$\pgfmathprintnumber{\tick}$}% + \def\axisdefaultticklabel{\pgfmathprintnumber{\tick}}% \def\axisdefaultticklabellog{% \pgfkeysgetvalue{/pgfplots/log number format code/.@cmd}\pgfplots@log@label@style \expandafter\pgfplots@log@label@style\tick\pgfeov @@ -8651,6 +9097,13 @@ \let\addlegendentryexpanded=\pgfplots@addlegendentryexpanded } +\let\pgfplots@late@options=\pgfutil@empty +\def\pgfplotssetlateoptions#1{% + \t@pgfplots@toka=\expandafter{\pgfplots@late@options}% + \t@pgfplots@tokb={#1}% + \xdef\pgfplots@late@options{\the\t@pgfplots@toka,\the\t@pgfplots@tokb}% +}% + \def\pgfplots@environment{% \pgfutil@ifnextchar[{% \pgfplots@environment@opt @@ -8681,11 +9134,19 @@ % \pgfplots@stored@current@cmd % \pgfplots@stored@current@data % \pgfplots@stored@current@postcmd -\def\pgfplots@stored@plotlist@EXTRACTENTRY#1#2#3#4{% - \def\pgfplots@stored@current@precmd{#1}% - \def\pgfplots@stored@current@cmd{#2}% +\long\def\pgfplots@stored@plotlist@EXTRACTENTRY#1#2#3#4{% + % the token register stuff allows '#' inside of arguments. + \t@pgfplots@tokc={#1}% + \edef\pgfplots@stored@current@precmd{\the\t@pgfplots@tokc}% + % + \t@pgfplots@tokc={#2}% + \edef\pgfplots@stored@current@cmd{\the\t@pgfplots@tokc}% + % \def\pgfplots@stored@current@data{#3}% - \def\pgfplots@stored@current@postcmd{#4}% + % + \t@pgfplots@tokc={#4}% + \edef\pgfplots@stored@current@postcmd{\the\t@pgfplots@tokc}% + % } \def\pgfplots@init@cleared@structures{% @@ -8776,6 +9237,7 @@ \noexpand\def\noexpand\pgfplots@draw@image{% \noexpand\def\noexpand\tikz@plot@handler{\the\toks3}% \noexpand\pgfkeysdef{/pgfplots/legend image code}{\the\toks0}% + \noexpand\pgfkeyssetvalue{/pgfplots/mark list fill}{\pgfkeysvalueof{/pgfplots/mark list fill}}% \ifx\pgfplots@stylekey\pgfutil@empty \else \noexpand\pgfkeysdef{#2}{\the\toks4}% @@ -8803,21 +9265,32 @@ % % THIS IS INCOMPATIBLE WITH plain TeX and ConTeXt! Don't use it, it % doesn't hurt. -\def\pgfplots@plot@label{\pgfutil@ifnextchar[{\pgfplots@plot@label@}{\pgfplots@plot@label@[]}}% -\def\pgfplots@plot@label@[#1]#2{% +\def\pgfplots@plot@label{% + \pgfutil@ifnextchar<{% + \pgfplots@plot@label@beamer@mode + }{% + \pgfutil@ifnextchar[{\pgfplots@plot@label@{}}{\pgfplots@plot@label@{}[]}% + }% +}% +\def\pgfplots@plot@label@beamer@mode<#1>{ + \pgfutil@ifnextchar[{\pgfplots@plot@label@{<#1>}}{\pgfplots@plot@label@{<#1>}[]}% +} +% #1: optional prefix options, used to support +% \label<...>{<name>} of beamer package +\def\pgfplots@plot@label@#1[#2]#3{% \ifpgfplots@has@label@information \begingroup - \expandafter\let\expandafter\pgfplots@loc@TMPb\csname pgfplots@last@plot@style@#1\endcsname + \expandafter\let\expandafter\pgfplots@loc@TMPb\csname pgfplots@last@plot@style@#2\endcsname \expandafter\pgfplots@export@legend@image@to@macro\expandafter{\pgfplots@loc@TMPb}{/pgfplots/every crossref picture}% % \t@pgfplots@toka=\expandafter{\pgfplotsretval}% \t@pgfplots@tokb=\expandafter{\pgfplotsretvalb}% - % 1. prepare /pgfplots/refstyle={#2}: + % 1. prepare /pgfplots/refstyle={#3}: \pgfplots@auxwrite{% \noexpand\expandafter\noexpand\gdef - \noexpand\csname pgfplots@labelstyle@#2\noexpand\endcsname{\the\t@pgfplots@tokb}% + \noexpand\csname pgfplots@labelstyle@#3\noexpand\endcsname{\the\t@pgfplots@tokb}% }% - % 2. prepare \ref{#2} and \pageref{#2}: + % 2. prepare \ref{#3} and \pageref{#3}: % % There are several nasty things to consider: % a) macro expansion. Use \string to allow a safe \write @@ -8827,20 +9300,20 @@ % a "moving argument" like \caption or so, we need to use % proper '\protect'ion. % - % this here is the low-level implementation of \ref{#2}. Write it into + % this here is the low-level implementation of \ref{#3}. Write it into % the .aux file: \pgfplots@auxwrite{% \noexpand\expandafter\noexpand\gdef - \noexpand\csname pgfplots@show@ref@#2\noexpand\endcsname{% + \noexpand\csname pgfplots@show@ref@#3\noexpand\endcsname{% \the\t@pgfplots@toka }% }% % create the \label command: \let\label=\pgfplots@original@LaTeX@label - \pgfplots@label{#2}{pgfplots@show@ref@}% + \pgfplots@label[#1]{#3}{pgfplots@show@ref@}% \endgroup \else - \pgfplots@error{Can't create \string\label{#2}: it needs to be called after \string\addplot.}% + \pgfplots@error{Can't create \string\label{#3}: it needs to be called after \string\addplot.}% \fi }% @@ -8869,6 +9342,8 @@ % \pgfkeysdef{/pgfplots/colorbar source}{}% make it NO-OP here. It has already been processed. % + \pgfplots@install@local@bar@handlers% see its docs. + % % set both, pgfplots and tikz keys: % the draw is important since \addplot visualizes its stuff % with \path coordinates ... @@ -8886,6 +9361,8 @@ \let\pgfplots@drawoptions=\tikz@options \let\pgfplots@drawmodes=\tikz@mode % + \pgfplots@check@for@default@plot@mark% + % % As of February 22, the final plot processing uses % foreach stored \addplot command : % \scope[current plot style] @@ -8901,26 +9378,45 @@ % inside of this scope, so we can check for that particular % case: \pgfkeys{/tikz/every path/.append code={% - \pgfutil@ifundefined{pgfplots@drawmodes}% - {\relax}% - {% - \let\tikz@mode=\pgfplots@drawmodes -% \let\tikz@options=\pgfplots@drawoptions - }% + \pgfplots@restore@drawmodes }% }% }% }% +\newif\ifpgfplots@drawmodes@append + +\def\pgfplots@restore@drawmodes{% + \pgfutil@ifundefined{pgfplots@drawmodes}% + {\relax}% + {% + \ifpgfplots@drawmodes@append + \t@pgfplots@toka=\expandafter{\tikz@mode}% + \t@pgfplots@tokb=\expandafter{\pgfplots@drawmodes}% + \edef\tikz@mode{\the\t@pgfplots@tokb\the\t@pgfplots@toka}% + \else + \let\tikz@mode=\pgfplots@drawmodes + \fi +% \let\tikz@options=\pgfplots@drawoptions + }% +}% + +\long\def\pgfplotsifissurveyphase#1#2{% + \if\pgfplots@phase@name s% + #1\relax + \else + #2\relax + \fi +}% +\long\def\pgfplotsifisvisualizationphase#1#2{\pgfplotsifissurveyphase{#2}{#1}} +\def\pgfplots@phase@name{X} + % Invokes #1 if the statement occurs within \begin{axis}...\end{axis} % and #2 if not. \long\def\pgfplotsifinaxis#1#2{% \pgfutil@ifundefined{pgfplots@is@in@axis}{#2}{#1}% }% -\pgfutil@ifundefined{label}{\relax}{% -}% - % % \begin{axis}[#1] : % @@ -9046,15 +9542,21 @@ % \def\pgfplots@environment@opt[#1]{% \begingroup - \pgfutil@ifundefined{pgfplots@is@in@axis}{}{% + \pgfplotsifinaxis{% \pgfplots@error{% Sorry, nested axis environments are not supported. Please move the inner axis environment below \string\end{axis} and use alignment options (for example named nodes, see manual) to place it at the desired position}% - }% + }{}% \def\pgfplots@is@in@axis{1}% + \let\pgfpointxy@orig=\pgfpointxy + \let\pgfqpointxy@orig=\pgfqpointxy + \let\pgfpointxyz@orig=\pgfpointxyz + \let\pgfqpointxyz@orig=\pgfqpointxyz + \global\let\pgfplots@late@options=\pgfutil@empty \pgfplots@checkandpreparefor@active@semicolon + % \pgfplots@install@abbrev@commands \pgfplots@stacked@initialise % @@ -9072,6 +9574,8 @@ % \pgfplots@set@options{#1}% % + % + % % -------------------- % Allocations: % -------------------- @@ -9089,36 +9593,16 @@ \pgfplots@datascaletrafo@initialisedtrue% there is no trafo. \fi % - \ifpgfplots@xislinear - \pgfmathfloatcreate{1}{1.0}{2147483645}% - \let\pgfplots@invalidrange@xmin=\pgfmathresult - \pgfmathfloatcreate{2}{1.0}{2147483645}% - \let\pgfplots@invalidrange@xmax=\pgfmathresult - \else - \def\pgfplots@invalidrange@xmin{16300}% - \def\pgfplots@invalidrange@xmax{-16300}% - \fi - \ifpgfplots@yislinear - \pgfmathfloatcreate{1}{1.0}{2147483645}% - \let\pgfplots@invalidrange@ymin=\pgfmathresult - \pgfmathfloatcreate{2}{1.0}{2147483645}% - \let\pgfplots@invalidrange@ymax=\pgfmathresult - \else - \def\pgfplots@invalidrange@ymin{16300}% - \def\pgfplots@invalidrange@ymax{-16300}% - \fi - \ifpgfplots@zislinear - \pgfmathfloatcreate{1}{1.0}{2147483645}% - \let\pgfplots@invalidrange@zmin=\pgfmathresult - \pgfmathfloatcreate{2}{1.0}{2147483645}% - \let\pgfplots@invalidrange@zmax=\pgfmathresult - \else - \def\pgfplots@invalidrange@zmin{16300}% - \def\pgfplots@invalidrange@zmax{-16300}% - \fi - \pgfmathfloatcreate{1}{1.0}{2147483645}% + \pgfplotsutilforeachcommasep{x,y,z}\as\pgfplots@loc@TMPa{% + \pgfplotscoordmath \pgfplots@loc@TMPa{min limit}% + \expandafter\let\csname pgfplots@invalidrange@\pgfplots@loc@TMPa max\endcsname=\pgfmathresult + \pgfplotscoordmath \pgfplots@loc@TMPa{max limit}% + \expandafter\let\csname pgfplots@invalidrange@\pgfplots@loc@TMPa min\endcsname=\pgfmathresult + }% + % + \pgfplotscoordmath{meta}{max limit}% \let\pgfplots@invalidrange@metamin=\pgfmathresult - \pgfmathfloatcreate{2}{1.0}{2147483645}% + \pgfplotscoordmath{meta}{min limit}% \let\pgfplots@invalidrange@metamax=\pgfmathresult % % These numbers will ONLY be filled for linear axis! @@ -9179,7 +9663,7 @@ \def\pgfplots@axiswide@metamin@autocompute{1}% \else \def\pgfplots@axiswide@metamin@autocompute{0}% - \expandafter\pgfmathfloatparsenumber\expandafter{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@loc@TMPa}% \global\let\pgfplots@axiswide@metamin=\pgfmathresult \fi \pgfkeysgetvalue{/pgfplots/point meta max}\pgfplots@loc@TMPa @@ -9187,7 +9671,7 @@ \def\pgfplots@axiswide@metamax@autocompute{1}% \else \def\pgfplots@axiswide@metamax@autocompute{0}% - \expandafter\pgfmathfloatparsenumber\expandafter{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@loc@TMPa}% \global\let\pgfplots@axiswide@metamax=\pgfmathresult \fi % @@ -9217,6 +9701,12 @@ % Use \axispath instead: \let\path=\pgfplots@replacement@for@tikz@path \let\closedcycle=\pgfplots@path@closed@cycle + % + % defines \pgfplotsaxisupdatelimitsforcoordinate etc. + \pgfplots@prepare@axis@API + \pgfkeysvalueof{/pgfplots/execute at begin axis}% + \def\pgfplots@phase@name{s}% + % \let\pgfplots@orig@scope=\scope \let\pgfplots@orig@endscope=\endscope \let\scope=\pgfplots@replacement@for@scope @@ -9229,12 +9719,14 @@ % This command actually takes all collected (global) variables, % creates an axis and performs all postponed drawing operations. \def\endpgfplots@environment@opt{% + \def\pgfplots@phase@name{v}% \pgfutil@ifundefined{label}{\relax}{% % restore. \let\label=\pgfplots@original@LaTeX@label }% \xdef\numplots{\the\pgfplots@numplots}% \pgfkeysvalueof{/pgfplots/before end axis/.@cmd}\pgfeov% + \pgfkeysvalueof{/pgfplots/execute at end axis}% % % restore old \path command: \let\path=\pgfplots@orig@path @@ -9244,12 +9736,17 @@ % \pgfplotssurveyphase@setactiveplothandlers % + \expandafter\pgfplotsset\expandafter{\pgfplots@late@options}% + % %\end{axis}: % + \begingroup + \pgfplots@sys@beforenode % create a leight-weight 'current axis' node for anchor references % (which may happen during both, the axis descriptions or any % path/plot commands). \pgfmultipartnode{pgfplots@low@level@shape@INNER}{image}{current axis}{\pgfusepath{discard}}% + \endgroup % % -------------------- % All plotting commands have been read. @@ -9257,23 +9754,30 @@ % -------------------- \pgfplots@BEGIN@init@and@draw@axis \pgfplots@stacked@initialise - \pgfplots@install@local@bar@handlers \global\pgfplotslistnewempty\pgfplots@stored@markerlist \ifpgfplots@stacked@reverse % This here applies any scaling trafos and assembles a % NEW \pgfplots@stored@plotlist! \pgfplots@stacked@finalize@stored@plots \fi - \pgfplotslistforeach\pgfplots@stored@plotlist\as\pgfplots@loc@TMPa{% + \pgfplotslistforeachungrouped\pgfplots@stored@plotlist\as\pgfplots@loc@TMPa{% \expandafter\pgfplots@stored@plotlist@EXTRACTENTRY\pgfplots@loc@TMPa -%\message{Processing stored plot with precommand '\meaning\pgfplots@stored@current@precmd'; pgfplots@plotcmd '\meaning\pgfplots@stored@current@cmd' postcommand '\meaning\pgfplots@stored@current@postcmd'}% +%\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@stored@current@cmd\pgfutil@empty \pgfplots@stored@current@data% \else + \begingroup + % @see the stream preparation routines. + \pgfplots@stored@current@precmd + \pgfkeysvalueof{/pgfplots/execute at begin plot visualization}% + \ifpgfplots@threedim + \else + % axis = 2d and plot=3d is forbidden here. + \pgfplots@curplot@threedimfalse + \fi % % this code here means we REALLY have a plotting % command! @@ -9292,8 +9796,10 @@ \expandafter\pgfplots@coord@stream@finalize@storedcoords@START\pgfplots@stored@current@data\pgfplots@EOI \fi \endscope + \pgfkeysvalueof{/pgfplots/execute at end plot visualization}% + \pgfplots@stored@current@postcmd + \endgroup \fi - \pgfplots@stored@current@postcmd }% \global\pgfplotslistnewempty\pgfplots@stored@plotlist% delete contents. % @@ -9371,12 +9877,16 @@ \def\pgfplots@anchorname{image}% that means: no shift! }{}% % + \begingroup + \pgfplots@sys@beforenode + % \ifpgfplots@deprecated@anchors \pgfplots@restore@deprecated@lowlevel@shape \pgfmultipartnode{\pgfplots@shapename}{\pgfplots@anchorname}{\tikz@fig@name}{\pgfusepath{discard}}% \else \pgfmultipartnode{\pgfplots@shapename}{\pgfplots@anchorname}{\tikz@fig@name}{\pgfusepath{discard}}% \fi + \endgroup \pgfplots@fig@alias \pgfnodealias{current axis}{\tikz@fig@name}% % @@ -9504,5 +10014,8 @@ \tikzaddtikzonlycommandshortcutlet\loglogaxis\pgfplots@environment@loglogaxis \tikzaddtikzonlycommandshortcutlet\endloglogaxis\endpgfplots@environment@loglogaxis +\pgfplotsdefineaxistype{rectangle}{% + % do nothing, this is the default anyway. +}% \catcode`\;=\pgfplots@oldcatcodesemicolon diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex index 6abd1948238..e1bcc0a53d0 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplots.revision.tex @@ -1,3 +1,3 @@ \def\pgfplotsrevision{% -1.4.1-1-g64c9e95 +1.5-1-gcc2f2d2 } diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex index 1331a3f284b..996dce22550 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotscoordprocessing.code.tex @@ -7,7 +7,7 @@ % % It is based on Till Tantau's PGF package. % -% Copyright 2007/2008 by Christian Feuersänger. +% Copyright 2007-2010 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 @@ -63,10 +63,15 @@ \pgf@zx=0pt \pgf@zy=0pt }% - \let\pgfpointxy@orig=\pgfpointxy - \let\pgfqpointxy@orig=\pgfqpointxy - \let\pgfpointxyz@orig=\pgfpointxyz - \let\pgfqpointxyz@orig=\pgfqpointxyz + % + % + \edef\pgfplotsplothandlerpointxyz##1##2##3{% + \ifpgfplots@curplot@threedim + \noexpand\pgfplotsqpointxyz{##1}{##2}{##3}% + \else + \noexpand\pgfplotsqpointxy{##1}{##2}% + \fi + }% % % A point command such that (0,0) is the 'south west' and (1,1) % the 'north east' point of an axis. @@ -97,17 +102,9 @@ {\pgfqpointxy@orig{##1}{##2}}% }% }% - \edef\pgfplotspointunitx{\global\pgf@x=\the\pgf@xx\space\global\pgf@y=\the\pgf@xy\space}% - \edef\pgfplotspointunity{\global\pgf@x=\the\pgf@yx\space\global\pgf@y=\the\pgf@yy\space}% - \let\pgfplotsunitxlength=\pgfplots@x@veclength - \let\pgfplotsunitylength=\pgfplots@y@veclength - \let\pgfplotsunitxinvlength=\pgfplots@x@inverseveclength - \let\pgfplotsunityinvlength=\pgfplots@y@inverseveclength - \ifpgfplots@threedim - \edef\pgfplotspointunitz{\global\pgf@x=\the\pgf@zx\space\global\pgf@y=\the\pgf@zy\space}% - \let\pgfplotsunitzlength=\pgfplots@z@veclength - \let\pgfplotsunitzinvlength=\pgfplots@z@inverseveclength - \fi + \pgfplotspoint@initialisation@axes + \pgfplotspoint@initialisation@units + \pgfplotspoint@initialisation@center % % declare the '[xyz]ticklabel cs' \tikzdeclarecoordinatesystem{xticklabel}{\pgfplotspointticklabelcs{x}{##1}}% @@ -119,12 +116,167 @@ \pgfplotsdeclareborderanchorforticklabelaxis{y}{near yticklabel}% \pgfplotsdeclareborderanchorforticklabelaxis{z}{near zticklabel}% % - \pgfkeysdef{/tikz/sloped like x axis}{\tikz@addtransform{\pgfplotstransformtoaxisdirection{x}}}% - \pgfkeysdef{/tikz/sloped like y axis}{\tikz@addtransform{\pgfplotstransformtoaxisdirection{y}}}% - \pgfkeysdef{/tikz/sloped like z axis}{\tikz@addtransform{\pgfplotstransformtoaxisdirection{z}}}% + \pgfkeysdef{/tikz/sloped like x axis}{\tikz@addtransform{\pgfplotstransformtoaxisdirection[##1]{x}}}% + \pgfkeysdef{/tikz/sloped like y axis}{\tikz@addtransform{\pgfplotstransformtoaxisdirection[##1]{y}}}% + \pgfkeysdef{/tikz/sloped like z axis}{\tikz@addtransform{\pgfplotstransformtoaxisdirection[##1]{z}}}% % }% +% Determine final axes this does also fix the axis' dimension. +% There are the following cases: +% 1. the user really wants a fixed dimension, +% i.e. he used 'scale only axis'. +% Then, we have to work to get the correct dimension! +% +% Up to now, the scaling mechanism looses to many significant +% digits such that the final width/height differs by 1-2 pt. +% +% If I am not mistaken, this does ONLY affect the final size, +% not the relative plot precision. +% +% FIXME : really compute the plot precision! +% +% 2. The use specified width and/or height, but not 'scale only +% axis'. Accept inaccurate final widths/heights (see above). +% +% 3. The user supplied 'x' and or 'y'. Simply use them, its +% accurate. +% POSTCONDITION: the macros +% \pgfplotspointminminmin +% \pgfplotspoint[xyz]axis +% \pgfplotspoint[xyz]axislength +% are defined (globally). +% +\def\pgfplotspoint@initialisation@axes{% + \begingroup + \ifpgfplots@threedim + \def\pgfplotspointmaxminmin{\pgfplotsqpointxyz{\pgfplots@xmax}{\pgfplots@ymin}{\pgfplots@zmin}}% + \def\pgfplotspointminmaxmin{\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymax}{\pgfplots@zmin}}% + \pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmin}% + \else + \def\pgfplotspointmaxminmin{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}% + \def\pgfplotspointminmaxmin{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}% + \pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymin}% + \fi + \xdef\pgfplotspointminminmin{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + % ATTENTION: I re-use registers here! Make sure they won't be + % overwritten! \pgfpointdiff and \pgfplotsqpointxy are ok in this respect. + \let\pgfplots@xcoordminTEX=\pgf@xb + \let\pgfplots@ycoordminTEX=\pgf@yb + \pgfplots@xcoordminTEX=\pgf@x + \pgfplots@ycoordminTEX=\pgf@y + % + %-------------------------------------------------- + % FIXME : WHAT IS THIS HERE FOR? + % \pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymax}% + % \ifx\pgfplots@rectangle@width\pgfutil@empty + % \def\pgfplots@tmp@xmax@ymin{\pgfplotsqpointxy{\pgfplots@xmax}{\pgfplots@ymin}}% + % \else + % % this 'if' here should only make a difference of about + % % 1-2pt, not more. + % % + % % and I am quite sure that this inaccuracy (and this + % % work-around) only affects the + % % final size, not the relative plot accuracy. + % \pgf@x=\pgfplots@xcoordminTEX + % \advance\pgf@x by\pgfplots@width + % \edef\pgfplots@tmp@xmax@ymin{\noexpand\pgfqpoint{\the\pgf@x}{\noexpand\pgfplots@ycoordminTEX}}% + % \fi + % \ifx\pgfplots@rectangle@height\pgfutil@empty + % \def\pgfplots@tmp@xmin@ymax{\pgfplotsqpointxy{\pgfplots@xmin}{\pgfplots@ymax}}% + % \else + % \pgf@x=\pgfplots@ycoordminTEX + % \advance\pgf@x\pgfplots@height + % \edef\pgfplots@tmp@xmin@ymax{\noexpand\pgfqpoint{\noexpand\pgfplots@xcoordminTEX}{\the\pgf@x}}% + % \fi + %-------------------------------------------------- + \pgfpointdiff + {\pgfqpoint{\pgfplots@xcoordminTEX}{\pgfplots@ycoordminTEX}} + {\pgfplotspointmaxminmin}% + \xdef\pgfplotspointxaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \pgfmathveclen{\pgf@x}{\pgf@y}% + \xdef\pgfplotspointxaxislength{\pgfmathresult pt}% + % + \pgfpointdiff + {\pgfqpoint{\pgfplots@xcoordminTEX}{\pgfplots@ycoordminTEX}} + {\pgfplotspointminmaxmin}% + \xdef\pgfplotspointyaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \pgfmathveclen{\pgf@x}{\pgf@y}% + \xdef\pgfplotspointyaxislength{\pgfmathresult pt}% + % + \ifpgfplots@threedim + \pgfpointdiff + {\pgfqpoint{\pgfplots@xcoordminTEX}{\pgfplots@ycoordminTEX}} + {\pgfplotsqpointxyz{\pgfplots@xmin}{\pgfplots@ymin}{\pgfplots@zmax}}% + \xdef\pgfplotspointzaxis{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \pgfmathveclen{\pgf@x}{\pgf@y}% + \xdef\pgfplotspointzaxislength{\pgfmathresult pt}% + \else + \global\let\pgfplotspointzaxis=\pgfpointorigin + \gdef\pgfplotspointzaxislength{0pt}% + \fi + \endgroup + % +} + +% PRECONDITION: called after \pgfplotspoint@initialisation@axes +% POSTCONDITION: +% \pgfplotspointcenter is defined. +\def\pgfplotspoint@initialisation@center{% + \begingroup + % + % + \ifpgfplots@threedim + % + \pgfpointscale + {0.5}% + {\pgfplotspointxaxis + \pgf@xa=\pgf@x + \pgf@xb=\pgf@y + \pgfplotspointyaxis% + \advance\pgf@xa by\pgf@x + \advance\pgf@xb by\pgf@y + \pgfplotspointzaxis% + \advance\pgf@xa by\pgf@x + \advance\pgf@xb by\pgf@y + \pgf@x=\pgf@xa + \pgf@y=\pgf@xb + }% + \xdef\pgfplotspointcenter{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \else + \pgfpointscale + {0.5}% + {\pgfpointadd + \pgfplotspointxaxis% + \pgfplotspointyaxis% + }% + \xdef\pgfplotspointcenter{\noexpand\pgf@x=\the\pgf@x\space\noexpand\pgf@y=\the\pgf@y\space}% + \fi + \endgroup +} + +% PRECONDITION: +% the unit vectors are set up +% +% POSTCONDITION: +% \pgfplotspointunit[xyz] +% \pgfplotspointunit[xyz]length +% \pgfplotspointunit[xyz]invlength +% are all set up. +\def\pgfplotspoint@initialisation@units{% + \edef\pgfplotspointunitx{\pgf@x=\the\pgf@xx\space\pgf@y=\the\pgf@xy\space}% + \edef\pgfplotspointunity{\pgf@x=\the\pgf@yx\space\pgf@y=\the\pgf@yy\space}% + \let\pgfplotsunitxlength=\pgfplots@x@veclength + \let\pgfplotsunitylength=\pgfplots@y@veclength + \let\pgfplotsunitxinvlength=\pgfplots@x@inverseveclength + \let\pgfplotsunityinvlength=\pgfplots@y@inverseveclength + \ifpgfplots@threedim + \edef\pgfplotspointunitz{\pgf@x=\the\pgf@zx\space\pgf@y=\the\pgf@zy\space}% + \let\pgfplotsunitzlength=\pgfplots@z@veclength + \let\pgfplotsunitzinvlength=\pgfplots@z@inverseveclength + \fi +}% + % The idea here is the following: % % 1. A point coordinate (<x>,<y>) without units should use @@ -253,7 +405,7 @@ % \pgfplotspointonorientedsurfaceN. % % Example: -% \pgfplotspointonorientedsurfaceabsetupforxyz +% \pgfplotspointonorientedsurfaceabsetupfor xyz % \pgfplotspointonorientedsurfaceabsetupforsetz{<lower z limit>}{0} % % -> @@ -264,7 +416,7 @@ % \pgfplotspointonorientedsurfacespecunordered = {vv0} % \pgfplotspointonorientedsurfaceab{3}{4} =\pgfqpointxyz{3}{4}{<lower z limit>} % -% \pgfplotspointonorientedsurfaceabsetupforyxz +% \pgfplotspointonorientedsurfaceabsetupfor yxz % \pgfplotspointonorientedsurfaceabsetupforsetz{<lower z limit>}{0} % -> % \pgfplotspointonorientedsurfaceA = y @@ -274,11 +426,32 @@ % \pgfplotspointonorientedsurfacespecunordered = {vv0} % \pgfplotspointonorientedsurfaceab{3}{4} =\pgfqpointxyz{4}{3}{<lower z limit>} % -% @see \pgfplotspointonorientedsurfaceabsetupforxyz +% @see \pgfplotspointonorientedsurfaceabsetupfor xyz \def\pgfplotspointonorientedsurfaceab#1#2{% - \pgfplots@error{Internal logic error: \string\pgfplotspointonorientedsurfaceab\ used although surface has not been declared! You need to call \string\pgfplotspointonorientedsurfaceabsetupforxyz\ or its friends to do so.}% + \pgfplots@error{Internal logic error: \string\pgfplotspointonorientedsurfaceab\ used although surface has not been declared! You need to call \string\pgfplotspointonorientedsurfaceabsetupfor xyz\ or its friends to do so.}% }% +% This is a shortcut for +% \pgfpointadd +% {\pgfplotspointonorientedsurfaceab{#1}{#2}} +% {<shift in B direction of #3>} +% +% where #3 is a dimension (a number with unit). +\def\pgfplotspointonorientedsurfaceabwithbshift#1#2#3{% + \begingroup + \pgf@xa=#3\relax + \ifdim\pgf@xa=0pt + \else + \pgf@xa=\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname\pgf@xa + \fi + \advance\pgf@xa by#2pt + \edef\pgfplots@loc@b{\pgf@sys@tonumber\pgf@xa}% + \pgf@process{\pgfplotspointonorientedsurfaceab{#1}{\pgfplots@loc@b}}% + \endgroup +} + +\pgfkeyssetvalue{/pgfplots/oriented surf installed}{} + % This macro will be defined after % \pgfplotspointonorientedsurfaceabsetupfor... % routines. It expands to a three-character string @@ -308,65 +481,78 @@ % fixed. \def\pgfplotspointonorientedsurfacespecsymbol{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol} +\def\pgfplotspointonorientedsurfaceabsetupfor#1#2#3{% + \pgfutil@ifundefined{pgfplotspointonorientedsurfaceabsetupfor@@#1#2#3}{% + \pgfplots@error{Sorry, \string\pgfplotspointonorientedsurfaceabsetupfor\space#1#2#3 is not yet implemented.}% + }{ + \csname pgfplotspointonorientedsurfaceabsetupfor@@#1#2#3\endcsname + }% +}% +% % Initialises \pgfplotspointonorientedsurfaceab such that 'a' is the x % axis and 'b' is the y axis and the z coordinate has been fixed with % \pgfplotspointonorientedsurfaceabsetupforsetz{}. % % The Z value needs to be fixed with % \pgfplotspointonorientedsurfaceabsetupforsetz . -% -\def\pgfplotspointonorientedsurfaceabsetupforxyz{% - \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##1}{##2}{\pgfplotspointonorientedsurfaceabsetupfor@fixedZ}}% +\def\pgfplotspointonorientedsurfaceabsetupfor@@xyz{% + \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##1}{##2}{\pgfplotspointonorientedsurfaceabsetupfor@fixedz}}% \def\pgfplotspointonorientedsurfaceA{x}% \def\pgfplotspointonorientedsurfaceB{y}% \def\pgfplotspointonorientedsurfaceN{z}% \edef\pgfplotspointonorientedsurfacespec{ab\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}% \edef\pgfplotspointonorientedsurfacespecunordered{vv\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}% + \pgfkeysvalueof{/pgfplots/oriented surf installed}% }% -\def\pgfplotspointonorientedsurfaceabsetupforyxz{% - \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##2}{##1}{\pgfplotspointonorientedsurfaceabsetupfor@fixedZ}}% +\def\pgfplotspointonorientedsurfaceabsetupfor@@yxz{% + \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##2}{##1}{\pgfplotspointonorientedsurfaceabsetupfor@fixedz}}% \def\pgfplotspointonorientedsurfaceA{y}% \def\pgfplotspointonorientedsurfaceB{x}% \def\pgfplotspointonorientedsurfaceN{z}% \edef\pgfplotspointonorientedsurfacespec{ba\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}% \edef\pgfplotspointonorientedsurfacespecunordered{vv\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}% + \pgfkeysvalueof{/pgfplots/oriented surf installed}% }% -\def\pgfplotspointonorientedsurfaceabsetupforxzy{% - \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##1}{\pgfplotspointonorientedsurfaceabsetupfor@fixedY}{##2}}% +\def\pgfplotspointonorientedsurfaceabsetupfor@@xzy{% + \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##1}{\pgfplotspointonorientedsurfaceabsetupfor@fixedy}{##2}}% \def\pgfplotspointonorientedsurfaceA{x}% \def\pgfplotspointonorientedsurfaceB{z}% \def\pgfplotspointonorientedsurfaceN{y}% \edef\pgfplotspointonorientedsurfacespec{a\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol b}% \edef\pgfplotspointonorientedsurfacespecunordered{v\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol v}% + \pgfkeysvalueof{/pgfplots/oriented surf installed}% }% -\def\pgfplotspointonorientedsurfaceabsetupforzxy{% - \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##2}{\pgfplotspointonorientedsurfaceabsetupfor@fixedY}{##1}}% +\def\pgfplotspointonorientedsurfaceabsetupfor@@zxy{% + \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{##2}{\pgfplotspointonorientedsurfaceabsetupfor@fixedy}{##1}}% \def\pgfplotspointonorientedsurfaceA{z}% \def\pgfplotspointonorientedsurfaceB{x}% \def\pgfplotspointonorientedsurfaceN{y}% \edef\pgfplotspointonorientedsurfacespec{b\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol a}% \edef\pgfplotspointonorientedsurfacespecunordered{v\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol v}% + \pgfkeysvalueof{/pgfplots/oriented surf installed}% }% -\def\pgfplotspointonorientedsurfaceabsetupforyzx{% - \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{\pgfplotspointonorientedsurfaceabsetupfor@fixedX}{##1}{##2}}% +\def\pgfplotspointonorientedsurfaceabsetupfor@@yzx{% + \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{\pgfplotspointonorientedsurfaceabsetupfor@fixedx}{##1}{##2}}% \def\pgfplotspointonorientedsurfaceA{y}% \def\pgfplotspointonorientedsurfaceB{z}% \def\pgfplotspointonorientedsurfaceN{x}% \edef\pgfplotspointonorientedsurfacespec{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol ab}% \edef\pgfplotspointonorientedsurfacespecunordered{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol vv}% + \pgfkeysvalueof{/pgfplots/oriented surf installed}% }% -\def\pgfplotspointonorientedsurfaceabsetupforzyx{% - \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{\pgfplotspointonorientedsurfaceabsetupfor@fixedX}{##2}{##1}}% +\def\pgfplotspointonorientedsurfaceabsetupfor@@zyx{% + \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxyz{\pgfplotspointonorientedsurfaceabsetupfor@fixedx}{##2}{##1}}% \def\pgfplotspointonorientedsurfaceA{z}% \def\pgfplotspointonorientedsurfaceB{y}% \def\pgfplotspointonorientedsurfaceN{x}% \edef\pgfplotspointonorientedsurfacespec{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol ba}% \edef\pgfplotspointonorientedsurfacespecunordered{\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol vv}% + \pgfkeysvalueof{/pgfplots/oriented surf installed}% }% % Fixes 'x' to #1 for use in -% \pgfplotspointonorientedsurfaceabsetupforzyx and -% \pgfplotspointonorientedsurfaceabsetupforyzx. +% \pgfplotspointonorientedsurfaceabsetupfor zyx and +% \pgfplotspointonorientedsurfaceabsetupfor yzx. % % #1: The fixed value for 'x' (a coordinate in transformed range). % #2: a one-character symbol describing 'x'. @@ -375,21 +561,21 @@ % 1 : x is the upper x-axis range. % 2 : other. \def\pgfplotspointonorientedsurfaceabsetupforsetx#1#2{% - \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedX{#1}% + \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedx{#1}% \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{#2}% }% \def\pgfplotspointonorientedsurfaceabsetupforsety#1#2{% - \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedY{#1}% + \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedy{#1}% \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{#2}% }% \def\pgfplotspointonorientedsurfaceabsetupforsetz#1#2{% - \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedZ{#1}% + \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedz{#1}% \edef\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{#2}% }% % Helper methods which should be used if no Z component exists (pure % 2d plots). -\def\pgfplotspointonorientedsurfaceabsetupforxy{% +\def\pgfplotspointonorientedsurfaceabsetupfor@@xy{% \def\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{0}% \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxy{##1}{##2}}% \def\pgfplotspointonorientedsurfaceA{x}% @@ -397,8 +583,9 @@ \def\pgfplotspointonorientedsurfaceN{z}% \edef\pgfplotspointonorientedsurfacespec{ab\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}% \edef\pgfplotspointonorientedsurfacespecunordered{vv\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}% + \pgfkeysvalueof{/pgfplots/oriented surf installed}% }% -\def\pgfplotspointonorientedsurfaceabsetupforyx{% +\def\pgfplotspointonorientedsurfaceabsetupfor@@yx{% \def\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol{0}% \def\pgfplotspointonorientedsurfaceab##1##2{\pgfplotsqpointxy{##2}{##1}}% \def\pgfplotspointonorientedsurfaceA{y}% @@ -406,6 +593,7 @@ \def\pgfplotspointonorientedsurfaceN{z}% \edef\pgfplotspointonorientedsurfacespec{ba\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}% \edef\pgfplotspointonorientedsurfacespecunordered{vv\pgfplotspointonorientedsurfaceabsetupfor@fixedsymbol}% + \pgfkeysvalueof{/pgfplots/oriented surf installed}% }% @@ -439,7 +627,7 @@ % (three-char-string). % % Example: -% \pgfplotspointonorientedsurfaceabsetupforxyz +% \pgfplotspointonorientedsurfaceabsetupfor xyz % \pgfplotspointonorientedsurfaceabsetupforsetz{<lower z limit>}{0} % -> the oriented surface is 'ab0' % ... @@ -734,22 +922,22 @@ % % Example: % \pgfplotspointonorientedsurfaceabsetupforsetz{\zmax}{1} -% \pgfplotspointonorientedsurfaceabsetupforyxz +% \pgfplotspointonorientedsurfaceabsetupfor yxz % \pgfplotspointonorientedsurfaceabmatchaxisline{v01}{\result} % -> \result will be 'v' because 'x=v' in '{v01} % % \pgfplotspointonorientedsurfaceabsetupforsety{\ymin}{0} -% \pgfplotspointonorientedsurfaceabsetupforxzy +% \pgfplotspointonorientedsurfaceabsetupfor xzy % \pgfplotspointonorientedsurfaceabmatchaxisline{v01}{\result} % -> \result will be '1' because 'z=1' in '{v01} % % \pgfplotspointonorientedsurfaceabsetupforsety{\ymax}{1} -% \pgfplotspointonorientedsurfaceabsetupforxzy +% \pgfplotspointonorientedsurfaceabsetupfor xzy % \pgfplotspointonorientedsurfaceabmatchaxisline{v01}{\result} % -> \result will be empty because 'y=0' in '{v01} % % \pgfplotspointonorientedsurfaceabsetupforsetx{\xmax}{1} -% \pgfplotspointonorientedsurfaceabsetupforyzx +% \pgfplotspointonorientedsurfaceabsetupfor yzx % \pgfplotspointonorientedsurfaceabmatchaxisline{10v}{\result} % -> \result will be 'v' because 'z=v' in '{10v} \def\pgfplotspointonorientedsurfaceabmatchaxisline#1#2{% @@ -835,11 +1023,17 @@ \let\pgfplots@loc@TMPa=\pgfutil@empty \fi \else - \pgfplots@error{The character '#1' is no valid element for a three-character axis line or surface description!}% + % return TRUE. + % I admit I am not sure at all if this works in all + % cases + \pgfplotspointonorientedsurfaceabmatchaxisline@warn{#1}% \fi \fi \fi }% +\def\pgfplotspointonorientedsurfaceabmatchaxisline@warn#1{% + \pgfplots@warning{The internal implementation is suspicious that something is wrong: \string\pgfplotspointonorientedsurfaceabmatchaxisline@warn: the character '#1' in a three-character axis line or surface description might not be fully supported...}% +}% % Provides a point on an arbitrary axis (identified by a % three-character-string) which can take any value on that axis and @@ -931,7 +1125,17 @@ % % The returned normal vector has length 1 (computed with % \pgfpointnormalised). +% +% NOTE: some specialized axis types support non-linear axes (for +% example, polar axes). In that case, the outer normal vector *varies* +% along the `v' direction (of the three-character-string `#1'). +% The value of `v' can be set using +% \pgfplotspointouternormalvectorofaxissetv{<axis three char string>}{<transformed coordinate>} \def\pgfplotspointouternormalvectorofaxis#1{% + \pgfplotspointouternormalvectorofaxis@ifdependson@v{#1}{% + \expandafter\global\expandafter\let\csname pgfplotspointouternormalvectorofaxis@cache@#1\endcsname\relax + }{% + }% \expandafter\ifx\csname pgfplotspointouternormalvectorofaxis@cache@#1\endcsname\relax \begingroup \edef\pgfplots@loc@TMPa{#1}% @@ -943,6 +1147,60 @@ \fi }% +% Fixes the "v" value for successive calls to +% \pgfplotspointouternormalvectorofaxis{#1}. +% +% #1 the three-character-string of an axis or the empty string. +% If #1 is empty, the actual configuration of oriented surfaces may be +% used to check which normal vector is intented. +% +% #2 the "v" value to store. It should be a transformed coordinate. +\def\pgfplotspointouternormalvectorofaxissetv#1#2{% + \edef\pgfplots@loc@TMPa{#1}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \expandafter\edef\csname pgfplotspointouternormalvectorofaxis@v@\pgfplotspointonorientedsurfaceA\endcsname{#2}% + \else + \expandafter\edef\csname pgfplotspointouternormalvectorofaxis@v@#1\endcsname{#2}% + \fi +}% + +% Defines \pgfplotsretval to contain the 'v' value for an outer normal +% vector (if there is one known). If there is no such value, +% \pgfplotsretval will be empty. +% #1 a three-character-string +\def\pgfplotspointouternormalvectorofaxisgetv#1{% + \edef\pgfplots@loc@TMPa{#1}% + \expandafter\pgfplotspointouternormalvectorofaxisgetv@\pgfplots@loc@TMPa\relax\relax\relax\relax +} +\def\pgfplotspointouternormalvectorofaxisgetv@#1#2#3\relax{% + \pgfutil@ifundefined{pgfplotspointouternormalvectorofaxis@v@#1#2#3}{% + % no value found so far. + \if#1v% + \def\pgfplotsretval{x}% + \else + \if#2v% + \def\pgfplotsretval{y}% + \else + \def\pgfplotsretval{z}% + \fi + \fi + \pgfutil@ifundefined{pgfplotspointouternormalvectorofaxis@v@\pgfplotsretval}{% + \let\pgfplotsretval\pgfutil@empty + }{% + \edef\pgfplotsretval{\csname pgfplotspointouternormalvectorofaxis@v@\pgfplotsretval\endcsname}% + }% + }{% + \edef\pgfplotsretval{\csname pgfplotspointouternormalvectorofaxis@v@#1#2#3\endcsname}% + }% +}% + +% invokes #2 if the outer normal for the axis #1 (identified by a +% three-character-string) depends on a coordinate on that axis and #3 +% otherwise. +% +% Overwrite in subclasses if necessary. +\def\pgfplotspointouternormalvectorofaxis@ifdependson@v#1#2#3{#3} + % FIXME : this doesn't work if one of the three characters is '2' (for % center) \def\pgfplotspointouternormalvectorofaxis@#1#2#3\relax{% @@ -1032,39 +1290,39 @@ % #5: the shift along the outer unit normal. \def\pgfplotspointoutsideofaxis@#1#2#3\relax#4#5{% \if v#1% - \def\pgfplots@loc@point@orthogonal@to@v{% - \pgfplotspointoutsideofaxis@plug@trafo{x}{#4}\let\pgfplots@loc@TMPa=\pgfmathresult - \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@TMPb=\pgfmathresult + \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotspointonorientedsurfaceabsetupforsety{\pgfplots@loc@TMPa}{#2}% + % + \pgfplotspointonorientedsurfaceabsetupfor xzy% + \pgfplotspointoutsideofaxis@plug@trafo{x}{#4}\let\pgfplots@loc@A=\pgfmathresult + \ifpgfplots@threedim + \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@B=\pgfmathresult + \else + \def\pgfplots@loc@B{0}% + \fi + \else + \if v#2% \ifpgfplots@threedim - \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@TMPc=\pgfmathresult + \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@TMPa=\pgfmathresult \else - \def\pgfplots@loc@TMPc{0}% + \def\pgfplots@loc@TMPa{0}% \fi - \pgfplotsqpointxyz{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}% - }% - \else - \if v#2% - \def\pgfplots@loc@point@orthogonal@to@v{% - \pgfplotspointoutsideofaxis@plug@trafo{y}{#4}\let\pgfplots@loc@TMPa=\pgfmathresult - \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@TMPb=\pgfmathresult - \ifpgfplots@threedim - \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@TMPc=\pgfmathresult - \else - \def\pgfplots@loc@TMPc{0}% - \fi - \pgfplotsqpointxyz{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPc}% - }% + \pgfplotspointonorientedsurfaceabsetupforsetz{\pgfplots@loc@TMPa}{#3}% + % + \pgfplotspointonorientedsurfaceabsetupfor yxz% + \pgfplotspointoutsideofaxis@plug@trafo{y}{#4}\let\pgfplots@loc@A=\pgfmathresult + \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@B=\pgfmathresult \else - \def\pgfplots@loc@point@orthogonal@to@v{% - \ifpgfplots@threedim - \pgfplotspointoutsideofaxis@plug@trafo{z}{#4}\let\pgfplots@loc@TMPa=\pgfmathresult - \else - \def\pgfplots@loc@TMPa{0}% - \fi - \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@TMPb=\pgfmathresult - \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@TMPc=\pgfmathresult - \pgfplotsqpointxyz{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}{\pgfplots@loc@TMPa}% - }% + \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotspointonorientedsurfaceabsetupforsetx{\pgfplots@loc@TMPa}{#1}% + % + \pgfplotspointonorientedsurfaceabsetupfor zyx% + \ifpgfplots@threedim + \pgfplotspointoutsideofaxis@plug@trafo{z}{#4}\let\pgfplots@loc@A=\pgfmathresult + \else + \def\pgfplots@loc@A{0}% + \fi + \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@B=\pgfmathresult \fi \fi % @@ -1076,8 +1334,9 @@ % \pgf@process{% \pgfpointadd - {\pgfplots@loc@point@orthogonal@to@v} + {\pgfplotspointonorientedsurfaceab{\pgfplots@loc@A}{\pgfplots@loc@B}} {% + \pgfplotspointouternormalvectorofaxissetv{#1#2#3}{\pgfplots@loc@A}% \pgfqpointscale {\pgfplots@loc@distalong@normal}% {\pgfplotspointouternormalvectorofaxis{#1#2#3}}% @@ -1085,10 +1344,67 @@ }% \endgroup }% +%-------------------------------------------------- +% \def\pgfplotspointoutsideofaxis@#1#2#3\relax#4#5{% +% \if v#1% +% \def\pgfplots@loc@point@orthogonal@to@v{% +% \pgfplotspointoutsideofaxis@plug@trafo{x}{#4}\let\pgfplots@loc@TMPa=\pgfmathresult +% \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@TMPb=\pgfmathresult +% \ifpgfplots@threedim +% \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@TMPc=\pgfmathresult +% \else +% \def\pgfplots@loc@TMPc{0}% +% \fi +% \pgfplotsqpointxyz{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}% +% }% +% \else +% \if v#2% +% \def\pgfplots@loc@point@orthogonal@to@v{% +% \pgfplotspointoutsideofaxis@plug@trafo{y}{#4}\let\pgfplots@loc@TMPa=\pgfmathresult +% \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@TMPb=\pgfmathresult +% \ifpgfplots@threedim +% \pgfplotspointoutsideofaxis@plug@getlimit{z}{#3}\let\pgfplots@loc@TMPc=\pgfmathresult +% \else +% \def\pgfplots@loc@TMPc{0}% +% \fi +% \pgfplotsqpointxyz{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPc}% +% }% +% \else +% \def\pgfplots@loc@point@orthogonal@to@v{% +% \ifpgfplots@threedim +% \pgfplotspointoutsideofaxis@plug@trafo{z}{#4}\let\pgfplots@loc@TMPa=\pgfmathresult +% \else +% \def\pgfplots@loc@TMPa{0}% +% \fi +% \pgfplotspointoutsideofaxis@plug@getlimit{x}{#1}\let\pgfplots@loc@TMPb=\pgfmathresult +% \pgfplotspointoutsideofaxis@plug@getlimit{y}{#2}\let\pgfplots@loc@TMPc=\pgfmathresult +% \pgfplotsqpointxyz{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}{\pgfplots@loc@TMPa}% +% }% +% \fi +% \fi +% % +% % read dimen argument #5: +% \afterassignment\pgfplots@gobble@until@relax +% \pgf@xa=#5pt\relax +% \edef\pgfplots@loc@distalong@normal{\pgf@sys@tonumber\pgf@xa}% +% % +% % +% \pgf@process{% +% \pgfpointadd +% {\pgfplots@loc@point@orthogonal@to@v} +% {% +% \pgfqpointscale +% {\pgfplots@loc@distalong@normal}% +% {\pgfplotspointouternormalvectorofaxis{#1#2#3}}% +% }% +% }% +% \endgroup +% }% +%-------------------------------------------------- % Helper method for \pgfplotsqpointoutsideofaxis and its variants. % #1: an axis (x,y or z) -% #2: one of '0', '1' or '2' where +% #2: o(\pgfplots@loc@TMPa - \pgfplots@loc@TMPb) ne of '0', '1' or '2' where % 0 == add lower #1 axis limit, % 1 == add upper #1 axis limit, % 2 == add nothing. @@ -1103,29 +1419,65 @@ \fi }% +\newif\ifpgfplots@sloped +\pgfplots@slopedtrue % its only purpose is to *DEACTIVATE* the sloped transformation after it has been activated. +\newif\ifpgfplots@sloped@resets@nontranslations +\newif\ifpgfplots@sloped@allowupsidedown +\pgfkeys{ + /pgfplots/sloped/true/.code={\pgfplots@slopedtrue}, + /pgfplots/sloped/false/.code={\pgfplots@slopedfalse}, + /pgfplots/sloped/allow upside down/.is if=pgfplots@sloped@allowupsidedown, + /pgfplots/sloped/allow upside down/.default=true, + /pgfplots/sloped/execute for upside down/.initial=, + /pgfplots/sloped/reset nontranslations/.is if=pgfplots@sloped@resets@nontranslations, + /pgfplots/sloped/reset nontranslations/.default=true, +} % Installs a rotation transformation matrix such that labels or % whatever are aligned precisely in direction of one of the two/three % coordinate directions. % -% #1: the coordinate direction (one of x,y or z) +% \pgfplotstransformtoaxisdirection[<options>]{<axis char>} +% +% <axis char>: the coordinate direction (one of x,y or z) % % The code is pretty much the same as \pgftransformlineattime, except % that the computation is considerably simpler as axis directions are % a well known quantity. % -% This command assumes \ifpgfallowupsidedownattime = false and -% \ifpgfresetnontranslationattime = true -\def\pgfplotstransformtoaxisdirection#1{% - \pgftransformresetnontranslations +% This command uses \ifpgfplots@sloped@allowupsidedown (=false) and +% \ifpgfplots@sloped@resets@nontranslations (= true). The default +% setting is reinitialised before options are processed +\def\pgfplotstransformtoaxisdirection{% + \pgfutil@ifnextchar[{\pgfplotstransformtoaxisdirection@}{\pgfplotstransformtoaxisdirection@[]}% +}% +\def\pgfplotstransformtoaxisdirection@[#1]#2{% + \pgfplots@sloped@allowupsidedownfalse + \pgfplots@sloped@resets@nontranslationstrue + % + \def\pgfplots@loc@TMPa{#1}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + \pgfqkeys{/pgfplots/sloped}{#1}% + \fi + \ifpgfplots@sloped + % + \ifpgfplots@sloped@resets@nontranslations + \pgftransformresetnontranslations + \fi % % compute unit length vector pointing into the direction of % '#1#2#3': - \pgfqpointscale{\csname pgfplotsunit#1invlength\endcsname}{\csname pgfplotspointunit#1\endcsname}% + \pgfqpointscale{\csname pgfplotsunit#2invlength\endcsname}{\csname pgfplotspointunit#2\endcsname}% % - % do not allow upside down labels: \ifdim\pgf@x<0pt% - \global\pgf@x=-\pgf@x% - \global\pgf@y=-\pgf@y% + % oh. upside down. + \pgfkeysvalueof{/pgfplots/sloped/execute for upside down}% + \ifpgfplots@sloped@allowupsidedown + \else + % do not allow upside down labels: + \global\pgf@x=-\pgf@x% + \global\pgf@y=-\pgf@y% + \fi \fi% % \pgf@ya=-\pgf@y% @@ -1136,6 +1488,7 @@ \pgftransformcm% {\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@y}}% {\pgf@sys@tonumber{\pgf@ya}}{\pgf@sys@tonumber{\pgf@x}}{\pgfpointorigin}% + \fi } @@ -1194,6 +1547,10 @@ }% % this does the work for \pgfplotsdeclareborderanchorforaxis. +% +% It depends on \pgfplotspointunit[xyz] and +% \pgfplotspointouternormalvectorofaxis +% % #1: either x,y or z the direction which varies % #2: a three-char-string uniquely identifying the axis line. % The parameter '#1' is redundand: it is the same as the 'v' @@ -1310,31 +1667,48 @@ \pgf@ya=\pgf@y \pgf@pos@transform\pgf@xa\pgf@ya % - \edef\pgfplots@LEQ{% - % solve linear system - {\pgf@sys@tonumber\pgf@xb}{\pgf@sys@tonumber\pgf@xa}% - {\pgf@sys@tonumber\pgf@yb}{\pgf@sys@tonumber\pgf@ya}% - }% - % - % apply inverse matrix to right-hand-side (and compute RHS): - \pgf@sh@reanchor{#3}{center}% - \edef\pgfplots@loc@center{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% - \pgfpointdiff% {<start>}{<end>} -> computes <end> - <start> - {\pgfplots@loc@center}% - {\pgf@sh@reanchor{#3}{\pgfplots@anchor}}% - \edef\pgfplots@RHS{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}% - % - \pgfutilsolvetwotwoleq{\pgfplots@LEQ}{\pgfplots@RHS}% - \def\pgfplots@extract##1##2{% - \def\pgfplots@r{##1}% - }% - \expandafter\pgfplots@extract\pgfmathresult - % GOT IT! - % - % compute x_c + r*n: - \pgfpointadd - {\pgfplots@loc@center}% - {\pgfqpointscale{\pgfplots@r}{\pgfplots@tmp@normaldir}}% + % verify that |n^T d | + \pgf@xc=\pgf@sys@tonumber\pgf@xa\pgf@xb + \advance\pgf@xc by\pgf@sys@tonumber\pgf@ya\pgf@yb + \ifdim\pgf@xc<0pt \pgf@xc=-\pgf@xc \fi + \ifdim\pgf@xc<0.8pt + % ok. 'n' and 'd' are not parallel. + % + \edef\pgfplots@LEQ{% + % solve linear system + % a11 a12 + % a21 a22 + {\pgf@sys@tonumber\pgf@xb}{\pgf@sys@tonumber\pgf@xa}% + {\pgf@sys@tonumber\pgf@yb}{\pgf@sys@tonumber\pgf@ya}% + }% + % + \pgf@sh@reanchor{#3}{center}% + \edef\pgfplots@loc@center{\global\pgf@x=\the\pgf@x\space\global\pgf@y=\the\pgf@y\space}% + % + % apply inverse matrix to right-hand-side (and compute RHS): + \pgfpointdiff% {<start>}{<end>} -> computes <end> - <start> + {\pgfplots@loc@center}% + {\pgf@sh@reanchor{#3}{\pgfplots@anchor}}% + \edef\pgfplots@RHS{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}% + % + \pgfutilsolvetwotwoleq{\pgfplots@LEQ}{\pgfplots@RHS}% + \def\pgfplots@extract##1##2{% + \def\pgfplots@r{##1}% + }% + \expandafter\pgfplots@extract\pgfmathresult + % GOT IT! + % + % compute x_c + r*n: + \pgfpointadd + {\pgfplots@loc@center}% + {\pgfqpointscale{\pgfplots@r}{\pgfplots@tmp@normaldir}}% + \else + \message{^^JPGFPlots warning: The ticklabel anchor cannot be determined, the normal vector -(\the\pgf@xb,\the\pgf@yb) and the unit #1 vector (\the\pgf@xa,\the\pgf@ya) are almost parallel (abs(cos(angle)) = \the\pgf@xc)!^^J}% + % Something went awry: normal and unit#1 are almost parallel!? + % just use the determined anchor. + \def\pgfplots@r{0}% + \pgf@sh@reanchor{#3}{\pgfplots@anchor}% + \fi %\message{==========>>>>>>>>>> I got finally (\the\pgf@x,\the\pgf@y). <<<<<<<<<===================}% \pgf@process{}% <- transport outside of group \endgroup @@ -1439,13 +1813,38 @@ \xdef\pgfplots@glob@TMPc{\noexpand\pgfqpointscale{-1}{\the\t@pgfplots@toka}}% \fi % + % Process 'plot box ratio': \def\pgfplots@extract@plot@box@ratio##1##2##3##4\pgfplots@EOI{% \pgfmathparse{##1}\let\pgfplots@plotboxratio@x=\pgfmathresult \pgfmathparse{##2}\let\pgfplots@plotboxratio@y=\pgfmathresult \pgfmathparse{##3}\let\pgfplots@plotboxratio@z=\pgfmathresult }% + \def\pgfplots@extract@plot@box@ratio@spaces##1 ##2 ##3 ##4\pgfplots@EOI{% + \pgfplots@extract@plot@box@ratio{##1}{##2}{##3}{##4}\pgfplots@EOI + }% \pgfkeysgetvalue{/pgfplots/plot box ratio}\pgfplots@loc@TMPa - \expandafter\pgfplots@extract@plot@box@ratio\pgfplots@loc@TMPa{1}{1}{1}\pgfplots@EOI + % Auto-determine input format which is either '{x}{y}{z}' or 'x y z' + \def\pgfplots@loc@TMPb{% + \pgfutil@ifnextchar\bgroup{% + \pgfplots@loc@tmptrue + \pgfplots@gobble@until@EOI + }{% + \pgfplots@loc@tmpfalse + \pgfplots@gobble@until@EOI + }% + }% + \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPa\pgfplots@EOI + \ifpgfplots@loc@tmp + % Ah- braces format. + \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa{1}{1}{1}}% + \expandafter\pgfplots@extract@plot@box@ratio\pgfplots@loc@TMPa\pgfplots@EOI + \else + % Ah- space-separated + \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa\space 1 1 1}% + \expandafter\pgfplots@extract@plot@box@ratio@spaces\pgfplots@loc@TMPa\pgfplots@EOI + \fi + % + % process it: \ifdim\pgfplots@plotboxratio@x pt=1pt \else \t@pgfplots@toka=\expandafter{\pgfplots@glob@TMPa}% @@ -1468,7 +1867,7 @@ \pgfmathmultiply@{\cosaz}{\cosel}% \xdef\pgfplots@glob@TMPd{{\pgfmathresultNx}{\pgfmathresult}{\sinel}}% \endgroup -%\message{Setting x,y and z from {#1}{#2} to x = \meaning\pgfplots@glob@TMPa, y = \meaning\pgfplots@glob@TMPb, z = \meaning\pgfplots@glob@TMPc...n = \pgfplots@glob@TMPd.}% +%\message{Setting x,y and z from {#1}{#2} to^^J x = \meaning\pgfplots@glob@TMPa,^^J y = \meaning\pgfplots@glob@TMPb,^^J z = \meaning\pgfplots@glob@TMPc,^^J n = \pgfplots@glob@TMPd.^^J}% \pgfsetxvec{\pgfplots@glob@TMPa}% \pgfsetyvec{\pgfplots@glob@TMPb}% \pgfsetzvec{\pgfplots@glob@TMPc}% @@ -1479,16 +1878,60 @@ }% \expandafter\pgfplots@loc@TMPa\pgfplots@glob@TMPd\relax \def#3{0}% + \pgfplots@scale@plotbox@to@widthheight +}% + +\def\message@pgfplots@units{% + \begingroup + \pgfmathparse{veclen(\pgf@zx,\pgf@zy)}\let\Z=\pgfmathresult + \ifdim\Z pt=0pt + \def\Z{1}% + \fi + \pgfmathparse{veclen(\pgf@xx,\pgf@xy)/\Z}\let\X=\pgfmathresult + \pgfmathparse{veclen(\pgf@yx,\pgf@yy)/\Z}\let\Y=\pgfmathresult + \message{^^J + x = (\the\pgf@xx,\the\pgf@xy),^^J + y =(\the\pgf@yx,\the\pgf@yy),^^J + z = (\the\pgf@zx,\the\pgf@zy),^^J + \expandafter\ifx\csname pgfplots@view@dir@threedim@x\endcsname\relax + \else + n = (\pgfplots@view@dir@threedim@x,\pgfplots@view@dir@threedim@y,\pgfplots@view@dir@threedim@z),^^J + \fi + unit vector ratio=[\X\space\Y\space 1],^^J}% + \endgroup +}% + +% Takes the current plot box, defined by the actual PGF x,y and z unit +% vectors, and re-scales it such that it fits into the +% width and height of the axis (as they have been provided by the +% user). +% +% @see \pgfplots@scale@axisbox@to@widthheight +% @see\pgfplots@scaleaxes@to@BB +\def\pgfplots@scale@plotbox@to@widthheight{% \pgfplots@initsizes@get@width@withoutlabels \let\pgfplots@loc@TMPa=\pgfmathresult \pgfplots@initsizes@get@height@withoutlabels \edef\pgfplots@loc@TMPa{{\pgfplots@loc@TMPa}{\pgfmathresult}}% + \let\pgfplots@BB@for@plotbox=\pgfplots@BB@for@plotbox@relative + \let\pgfplots@BB@for@plotbox@compute@post@scales=\pgfplots@BB@for@plotbox@compute@post@scales@relative \expandafter\pgfplots@scaleaxes@to@BB\pgfplots@loc@TMPa -%\message{After scaling: -% x = (\the\pgf@xx,\the\pgf@xy), -% y = (\the\pgf@yx,\the\pgf@yy), -% z = (\the\pgf@zx,\the\pgf@zy).}% -}% +} + + +% A variant of \pgfplots@scale@plotbox@to@widthheight which does not +% use the given x,y,z vectors to define the plot box. Instead, it uses +% the lower and upper axis limits. +\def\pgfplots@scale@axisbox@to@widthheight{% + \pgfplots@initsizes@get@width@withoutlabels + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplots@initsizes@get@height@withoutlabels + \edef\pgfplots@loc@TMPa{{\pgfplots@loc@TMPa}{\pgfmathresult}}% + \let\pgfplots@BB@for@plotbox=\pgfplots@BB@for@plotbox@computelimits + \let\pgfplots@BB@for@plotbox@compute@post@scales=\pgfplots@BB@for@plotbox@compute@post@scales@NOP + \expandafter\pgfplots@scaleaxes@to@BB\pgfplots@loc@TMPa +} + % Takes the current PGF x,y and z unit vectors and scales them such % that the bounding box of the final image has width #1 and height #2. @@ -1513,10 +1956,27 @@ % - the @veclength and @inverseveclength have been re-scaled as % well. \def\pgfplots@scaleaxes@to@BB#1#2{% - \begingroup - \pgfinterruptboundingbox - % STEP 1: compute the bounding box for UNITS. We just need the - % relative sizes: +%\message{before scaling:}\message@pgfplots@units + \if0\pgfplots@scale@mode@choice + % scale mode=auto + \def\pgfplots@scale@mode@choice{2}% stretch to fill + \fi + \if1\pgfplots@scale@mode@choice + % scale mode=none + \else + \pgfplots@scaleaxes@to@BB@{#1}{#2}% + \fi + % FIXME + % I suppose I should call \pgfplotsgetnormalforcurrentview now? + \pgfplots@computeunitvectorlengths +%\message{after scaling:}\message@pgfplots@units +}% +\def\pgfplots@BB@for@plotbox@relative{% + % We just need the + % relative sizes, i.e. + % "0" == lower axis limit + % "1" == upper axis limit + % \ifpgfplots@threedim \pgfpathmoveto{\pgfqpointxyz000}% \pgfpathmoveto{\pgfqpointxyz001}% @@ -1532,6 +1992,63 @@ \pgfpathmoveto{\pgfqpointxy10}% \pgfpathmoveto{\pgfqpointxy11}% \fi +}% +\let\pgfplots@BB@for@plotbox=\pgfplots@BB@for@plotbox@relative +\def\pgfplots@BB@for@plotbox@compute@post@scales@relative#1#2#3{% + % Consequently, we have to multiply with 1/(max-min): + \pgfmathsubtract@{\pgfplots@xmax}{\pgfplots@xmin}% + % compute 1/(xmax - xmin) in float for more recent versions (see /pgfplots/compat/scaling). + % I observed that it is much more accurate + \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{parsenumber}{\pgfmathresult}% + \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{op}{reciprocal}{{\pgfmathresult}}% + \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{tofixed}{\pgfmathresult}% + \let#1=\pgfmathresult + % + \pgfmathsubtract@{\pgfplots@ymax}{\pgfplots@ymin}% + \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{parsenumber}{\pgfmathresult}% + \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{op}{reciprocal}{{\pgfmathresult}}% + \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{tofixed}{\pgfmathresult}% + \let#2=\pgfmathresult + % + \ifpgfplots@threedim + \pgfmathsubtract@{\pgfplots@zmax}{\pgfplots@zmin}% + \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{parsenumber}{\pgfmathresult}% + \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{op}{reciprocal}{{\pgfmathresult}}% + \pgfplotscoordmath{\pgfplots@compat@scaling@coordmath}{tofixed}{\pgfmathresult}% + \else + \def\pgfmathresult{1}% + \fi + \let#3=\pgfmathresult +}% +\let\pgfplots@BB@for@plotbox@compute@post@scales=\pgfplots@BB@for@plotbox@compute@post@scales@relative +\def\pgfplots@BB@for@plotbox@computelimits{% + \ifpgfplots@threedim + \pgfpathmoveto{\pgfqpointxyz\pgfplots@xmin\pgfplots@ymin\pgfplots@zmin}% + \pgfpathmoveto{\pgfqpointxyz\pgfplots@xmin\pgfplots@ymin\pgfplots@zmax}% + \pgfpathmoveto{\pgfqpointxyz\pgfplots@xmin\pgfplots@ymax\pgfplots@zmin}% + \pgfpathmoveto{\pgfqpointxyz\pgfplots@xmin\pgfplots@ymax\pgfplots@zmax}% + \pgfpathmoveto{\pgfqpointxyz\pgfplots@xmax\pgfplots@ymin\pgfplots@zmin}% + \pgfpathmoveto{\pgfqpointxyz\pgfplots@xmax\pgfplots@ymin\pgfplots@zmax}% + \pgfpathmoveto{\pgfqpointxyz\pgfplots@xmax\pgfplots@ymax\pgfplots@zmin}% + \pgfpathmoveto{\pgfqpointxyz\pgfplots@xmax\pgfplots@ymax\pgfplots@zmax}% + \else + \pgfpathmoveto{\pgfqpointxy\pgfplots@xmin\pgfplots@ymin}% + \pgfpathmoveto{\pgfqpointxy\pgfplots@xmin\pgfplots@ymax}% + \pgfpathmoveto{\pgfqpointxy\pgfplots@xmax\pgfplots@ymin}% + \pgfpathmoveto{\pgfqpointxy\pgfplots@xmax\pgfplots@ymax}% + \fi +}% +\def\pgfplots@BB@for@plotbox@compute@post@scales@NOP#1#2#3{% + \let#1=\pgfutil@empty + \let#2=\pgfutil@empty + \let#3=\pgfutil@empty +}% +\def\pgfplots@scaleaxes@to@BB@#1#2{% + \begingroup + \pgfinterruptboundingbox + % STEP 1: compute the bounding box for the plot box. + \pgfplots@BB@for@plotbox + % % TMPa = width \pgf@xa=\pgf@pathmaxx \advance\pgf@xa by-\pgf@pathminx @@ -1541,62 +2058,156 @@ \pgf@ya=#1\relax \pgf@yb=#2\relax %\message{PGFPLOTS: the current unit vectors result in a UNIT BB of (\the\pgf@xa,\the\pgf@xb). Scaling it to (\the\pgf@ya,\the\pgf@yb)...}% - % STEP 2: compute the scales for x and y such - % that the UNIT-BB will have size #1,#2: - \pgfplotsutil@edef@invoke\pgfmathdivide@{% - {\pgf@sys@tonumber\pgf@ya}% - {\pgf@sys@tonumber\pgf@xa}% - }% - % TMPa = scalex - \global\let\pgfplots@glob@TMPa=\pgfmathresult - \pgfplotsutil@edef@invoke\pgfmathdivide@{% - {\pgf@sys@tonumber\pgf@yb}% - {\pgf@sys@tonumber\pgf@xb}% - }% - % TMPb = scaley - \global\let\pgfplots@glob@TMPb=\pgfmathresult + \ifcase\pgfplots@scale@mode@choice + % scale mode=auto does not happen here + \or + % scale mode=none does not happen here + \or + % scale mode=stretch to fill + % Compute individual scaling factors for X and Y + % such that the UNIT-BB will have size #1,#2: + \pgfplotsutil@edef@invoke\pgfmathdivide@{% + {\pgf@sys@tonumber\pgf@ya}% + {\pgf@sys@tonumber\pgf@xa}% + }% + % TMPa = scalex + \global\let\pgfplots@glob@TMPa=\pgfmathresult + \pgfplotsutil@edef@invoke\pgfmathdivide@{% + {\pgf@sys@tonumber\pgf@yb}% + {\pgf@sys@tonumber\pgf@xb}% + }% + % TMPb = scaley + \global\let\pgfplots@glob@TMPb=\pgfmathresult + \global\let\pgfplots@glob@TMPc=\relax + \or + % scale mode=scale uniformly + % compute ONE common scale for both, X and Y. + % + \pgfplotsutil@edef@invoke\pgfmathdivide@{% + {\pgf@sys@tonumber\pgf@ya}% + {\pgf@sys@tonumber\pgf@xa}% + }% + \global\let\pgfplots@glob@TMPa=\pgfmathresult + \global\let\pgfplots@glob@TMPb=\pgfplots@glob@TMPa + \global\let\pgfplots@glob@TMPc=\relax + \ifdim\pgf@zy=0pt + \ifdim\pgf@yx=0pt + \pgfplots@prepare@vertical@rescaling@for@scale@uniformly@in@dir{y}\returninto\pgfplots@glob@TMPc + \else + \pgfplots@error@scale@uniformly@failed + \fi + \else + \ifdim\pgf@zx=0pt + \pgfplots@prepare@vertical@rescaling@for@scale@uniformly@in@dir{z}\returninto\pgfplots@glob@TMPc + \else + \pgfplots@error@scale@uniformly@failed + \fi + \fi + \fi \pgfusepath{discard}% \endpgfinterruptboundingbox \endgroup -%\message{got scalex = \pgfplots@glob@TMPa\space and scaley = \pgfplots@glob@TMPb.}% - \pgfmathsubtract@{\pgfplots@xmax}{\pgfplots@xmin}% - % compute 1/(xmax - xmin) in float. - % I observed that it is much more accurate (lead to scaling differences of up to 10pt!) - \pgfmathfloatparsenumber\pgfmathresult - \pgfmathfloatreciprocal@\pgfmathresult - \pgfmathfloattofixed\pgfmathresult - %\expandafter\pgfmath@basic@reciprocal@\expandafter{\pgfmathresult}% -%\message{and 1/(xmax-xmin) = 1/(\pgfplots@xmax-\pgfplots@xmin) = \pgfmathresult.}% + % Ok, we know the W,H scalings now. + % + % But remember that we have worked with RELATIVE scales up to now. + % We have to convert them now, by interpreting "1 == upper limit" + % and "0 == lower limit" for every direction. + % + \pgfplots@BB@for@plotbox@compute@post@scales{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}% + % + % ok. Now apply all scalings. + % Let's hope all these temporary macros are still valid! +%\message{got scaleW = \pgfplots@glob@TMPa\space and scaleH = \pgfplots@glob@TMPb; scalex=\pgfplots@loc@TMPa, scaley=\pgfplots@loc@TMPb, scalez=\pgfplots@loc@TMPc.}% \pgf@xx=\pgfplots@glob@TMPa\pgf@xx \pgf@xy=\pgfplots@glob@TMPb\pgf@xy - \pgf@xx=\pgfmathresult\pgf@xx - \pgf@xy=\pgfmathresult\pgf@xy + \pgf@xx=\pgfplots@loc@TMPa\pgf@xx + \pgf@xy=\pgfplots@loc@TMPa\pgf@xy % - \pgfmathsubtract@{\pgfplots@ymax}{\pgfplots@ymin}% - \pgfmathfloatparsenumber\pgfmathresult - \pgfmathfloatreciprocal@\pgfmathresult - \pgfmathfloattofixed\pgfmathresult - %\expandafter\pgfmath@basic@reciprocal@\expandafter{\pgfmathresult}% -%\message{and 1/(ymay-ymin) = 1/(\pgfplots@ymax-\pgfplots@ymin) = \pgfmathresult.}% \pgf@yx=\pgfplots@glob@TMPa\pgf@yx \pgf@yy=\pgfplots@glob@TMPb\pgf@yy - \pgf@yx=\pgfmathresult\pgf@yx - \pgf@yy=\pgfmathresult\pgf@yy + \pgf@yx=\pgfplots@loc@TMPb\pgf@yx + \pgf@yy=\pgfplots@loc@TMPb\pgf@yy % \ifpgfplots@threedim - \pgfmathsubtract@{\pgfplots@zmax}{\pgfplots@zmin}% - \pgfmathfloatparsenumber\pgfmathresult - \pgfmathfloatreciprocal@\pgfmathresult - \pgfmathfloattofixed\pgfmathresult - %\expandafter\pgfmath@basic@reciprocal@\expandafter{\pgfmathresult}% -%\message{and 1/(zmaz-zmin) = 1/(\pgfplots@zmax-\pgfplots@zmin) = \pgfmathresult.}% \pgf@zx=\pgfplots@glob@TMPa\pgf@zx \pgf@zy=\pgfplots@glob@TMPb\pgf@zy - \pgf@zx=\pgfmathresult\pgf@zx - \pgf@zy=\pgfmathresult\pgf@zy - \fi - \pgfplots@computeunitvectorlengths -}% + \pgf@zx=\pgfplots@loc@TMPc\pgf@zx + \pgf@zy=\pgfplots@loc@TMPc\pgf@zy + \fi + \pgfplots@glob@TMPc +}% + +\def\pgfplots@error@scale@uniformly@failed{% + \pgfplots@error{Sorry, 'scale uniformly' failed because its actual implementation works only if y_x = 0 (for 2d axes) or if z_x = 0 (for 3d axes). The result will not fill the prescribed dimensions. For 2d axes, you may also want to consider the 'unit vector ratio' key}% +}% +\def\pgfplots@prepare@vertical@rescaling@for@scale@uniformly@in@dir#1\returninto#2{% + % The strategy is as follows: + % 1. I want to fit the axis into width #1 (\pgf@ya) and + % height #1 (\pgf@yb). + % 2. I want to MAINTAIN the unit vector ratio. + % 3. I want to MAINTAIN the unit vector directions. + % + % I already know the scaling factor to fit the width (it + % is stored in \pgfplots@glob@TMPa = \pgfplots@glob@TMPb). + % Let's call it "s". + % + % Consequently, a uniform scaling by "s" leads the image + % height + % h = s* (r_x * e_xy + r_y * e_yy + r_z * e_zy) + % where r_i = (imax - imin). This here is essentially the + % same as the bounding box computation above (at least for + % standart orthographic 3D axes). + % + % What I want now is to enlarge the limits such that I + % have BOTH, width #1 AND height #2, without obscuring the + % unit vector ratio. Recall that width #1 is already + % given. + % + % In my opinion the ONLY way to achieve this goal is to + % modify axis limits for an axis whose unit vector is + % parallel to the canvas y axis, i.e. e_i = (0,*). To see + % this, remember that a rescaling of the other limits will + % also modify the width. + % + % That means I have to introduce a SECOND scale s_z which + % applies only to the Z unit vector (since e_z = (0,*) ). + % If H = #2 is the desired height, I find the target + % equation for s_z, + % + % H = s* r_x e_xy + s * r_y e_yy + s_z * s * r_z * e_zy + % => + % s_z = ( H- s*r_x e_xy - s*r_y e_yy) / ( s * r_z * e_zy). + % + % Remember that + % s = \pgfplots@glob@TMPa + % and + % \pgfplots@glob@TMPa * \pgf@xb = s*h + % + \pgf@xc=\csname pgfplots@#1max\endcsname\csname pgf@#1y\endcsname% FIXME : what if we are working with relative coords? + \advance\pgf@xc by -\csname pgfplots@#1min\endcsname\csname pgf@#1y\endcsname + % + \advance\pgf@xb by-\pgf@xc + \pgf@xb=\pgfplots@glob@TMPa\pgf@xb + \advance\pgf@yb by-\pgf@xb + \pgf@xb=\pgfplots@glob@TMPa\pgf@xc + \pgfplotsutil@edef@invoke\pgfmathdivide@{% + {\pgf@sys@tonumber\pgf@yb}% + {\pgf@sys@tonumber\pgf@xb}% + }% + % Now, s_z = \pgfmathresult . + % + % Now, adjust the z limits. + % Note that \pgfplots@apply@unit@vector@rescale@keep@size + % has a slightly different context; it assumes that the + % unit vector has been rescaled, not the axis limits. + % Consequently, the inverse of the scaling factor enters. + % Since \pgfplots@apply@unit@vector@rescale@keep@size + % expects the inverse of the scale, we can provide + % \pgfmathresult: + \xdef#2{% + \noexpand\pgfplots@apply@unit@vector@rescale@keep@size{#1}{\pgfmathresult}% + }% +} \def\pgfplots@computeunitvectorlengths{% \pgfplotsutil@edef@invoke\pgfmathveclen@{% @@ -1641,6 +2252,746 @@ \fi }% +% Defines \pgfplots@view@dir@threedim@[xyz] according to the actual +% configuration of x,y,z (2d) unit vectors, assuming the associated +% unit vectors form a right-handed-system. +% +% The algorithm works for standard three dimensional axes. It works as +% follows: +% +% First, observe that we have a normal direction N if all its +% multiples are on the mapped onto the same point in 2D canvas +% coordinates. In other words: all 3D coordinates which are mapped +% onto an arbitrary point in 2D canvas coordinates (take, for example, +% the origin (0,0) ) are on a line in direction of N. +% +% We use this observation to compute the normal axis, i.e. we search +% for all points which are mapped onto the 2D canvas coordinate (0,0): +% N_x e_xx + N_y e_yx + N_z e_zx = 0 +% N_x e_xy + N_y e_yy + N_z e_zy = 0. +% All solutions make up a linear space of dimension 1 (up to special +% cases). In the general case, we can chose an arbitrary N_z != 0 +% and reduce the linear system to +% N_x e_xx + N_y e_yx = - N_z e_zx +% N_x e_xy + N_y e_yy = - N_z e_zy. +% Choosing *any* N_z != 0, say, N_z=-1 (which corresponds to view +% from above) will lead to a vector parallel to the normal direction. +% But it might have the wrong sign. +% +% To find the correct sign for N, I have made several case +% distinctions to identify the cases when we have to multiply with -1. +% The key idea is to assume a right-handed-system of unit vectors; +% this is the condition which allows to determine the sign. +% +% Furthermore, I assume that e_z points to the top, i.e. that e_zy >0. +% Then, there are (mainly) four conditions on the signs of e_x and e_y +% which indicate that we are viewing from below and should switch the +% sign of N (keep in mind that our initial choice was N_z =-1, see above). +% +% The conditions can be identified by drawing a 3D box and +% identifying the corner which represents the lower left 3D limits. +% +% You can visualize these cases using +%-------------------------------------------------- +% \pgfplotsset{ +% separate axis lines, +% every outer x axis line/.append style= {-stealth}, +% every outer y axis line/.append style= {-stealth}, +% every outer z axis line/.append style= {-stealth}, +% samples=2,shader=interp,title={view=\h,\v}, +% domain=0:1, +% enlargelimits=false, +% view=\h\v,xlabel=x,ylabel=y, +% extra description/.code={% +% \node[draw,fill=white] at (axis cs:0,0,0) {}; +% }, +% } +% +% \def\v{30} +% \foreach \h in {30,120,210,300} { +% \message{VIEW={\h}{\v}^^J} +% \begin{tikzpicture} +% \begin{axis} +% \addplot3[surf] {x}; +% \end{axis} +% \end{tikzpicture} +% +% } +% +% \def\v{-30} +% \foreach \h in {30,120,210,300} { +% \message{VIEW={\h}{\v}^^J} +% \begin{tikzpicture} +% \begin{axis} +% \addplot3[surf] {x}; +% \end{axis} +% \end{tikzpicture} +% +% } +%-------------------------------------------------- +% The precise formulas can be found below in the source code. +% +% You can override this function by the /pgfplots/view dir key. +\def\pgfplotsgetnormalforcurrentview{% + \pgfkeysgetvalue{/pgfplots/view dir}\pgfplots@loc@TMPc + \ifx\pgfplots@loc@TMPc\pgfutil@empty + \begingroup + \xdef\pgfplots@view@dir@threedim@z{-1}% hold it at some arbitrary value + \pgf@xa=-\pgfplots@view@dir@threedim@z\pgf@zx + \pgf@ya=-\pgfplots@view@dir@threedim@z\pgf@zy + \edef\pgfplots@loc@TMPa{% + {% + {\pgf@sys@tonumber\pgf@xx}{\pgf@sys@tonumber\pgf@yx}% + {\pgf@sys@tonumber\pgf@xy}{\pgf@sys@tonumber\pgf@yy}% + }% + {% + {\pgf@sys@tonumber\pgf@xa}{\pgf@sys@tonumber\pgf@ya}% + }% + }% + \expandafter\pgfutilsolvetwotwoleq\pgfplots@loc@TMPa + \def\pgfplots@loc@TMPb##1##2{% + \xdef\pgfplots@view@dir@threedim@x{##1}% + \xdef\pgfplots@view@dir@threedim@y{##2}% + }% + \expandafter\pgfplots@loc@TMPb\pgfmathresult + % + % Identify if we need to switch the sign. + % To verify that these cases are useful, I suggest visualizing + % that stuff using the TeX code from above... + % + % I guess it is correct up to collapsing views (as you see, I + % did not properly identify the cases with "=0" ) + \def\pgfplots@scale{1}% + \ifdim\pgf@xx>0pt + \ifdim\pgf@yx>0pt + % + \ifdim\pgf@xy>0pt + \ifdim\pgf@yy<0pt + \def\pgfplots@scale{-1}% + \fi + \fi + % + \fi + \else + \ifdim\pgf@xx<0pt + \ifdim\pgf@yx<0pt + % + \ifdim\pgf@xy<0pt + \ifdim\pgf@yy>0pt + \def\pgfplots@scale{-1}% + \fi + \fi + % + \fi + \fi + \fi + \ifdim\pgf@xy>0pt + \ifdim\pgf@yy>0pt + % + \ifdim\pgf@xx<0pt + \ifdim\pgf@yx>0pt + \def\pgfplots@scale{-1}% + \fi + \fi + % + \fi + \else + \ifdim\pgf@xy<0pt + \ifdim\pgf@yy<0pt + % + \ifdim\pgf@xx>0pt + \ifdim\pgf@yx<0pt + \def\pgfplots@scale{-1}% + \fi + \fi + % + \fi + \fi + \fi + \pgfmathmultiply@{\pgfplots@scale}{\pgfplots@view@dir@threedim@x}% + \global\let\pgfplots@view@dir@threedim@x\pgfmathresult + \pgfmathmultiply@{\pgfplots@scale}{\pgfplots@view@dir@threedim@y}% + \global\let\pgfplots@view@dir@threedim@y\pgfmathresult + \pgfmathmultiply@{\pgfplots@scale}{\pgfplots@view@dir@threedim@z}% + \global\let\pgfplots@view@dir@threedim@z\pgfmathresult + \endgroup + \else + \def\pgfplots@loc@TMPb##1##2##3{% + \xdef\pgfplots@view@dir@threedim@x{##1}% + \xdef\pgfplots@view@dir@threedim@y{##2}% + \xdef\pgfplots@view@dir@threedim@z{##3}% + }% + \expandafter\pgfplots@loc@TMPb\pgfplots@loc@TMPc + \fi +%\message{\string\pgfplotsgetnormalforcurrentview: got (\pgfplots@view@dir@threedim@x,\pgfplots@view@dir@threedim@y,\pgfplots@view@dir@threedim@z)^^J}% +}% + +% ================================================================================== +% +% COORDINATE MATH. +% +% ================================================================================== + +% Declares a new "subclass" to perform coordinate math. +% +% Coordinate math usually needs a more powerful number format than the pgf +% basic layer, or at least a powerful mapping into the pgf basic +% layer. Both cases are realized by the coordinate math class. +% +% Different coordinates can use different instances, and it is also +% possible to use yet a further instance for point meta (or whatever). +% +% Coordinate math is used to compute axis limits and to map the range +% into the pgf number format. +% +% It is *not* necessarily used for \pgfmathparse, since switching +% the number format of \pgfmathparse is quite involved (at the time of +% this writing). Instead, it is used for *single* operations (like +% max, min, multiply, add). +% +% #1: the name of the coord math class +% #2: methods to override the default. +% +% The available methods are documented and shown below in the +% \pgfqkeys listing. +% +% @see the predefined examples, also shown below. +\def\pgfplotsdeclarecoordmath#1#2{% + \edef\pgfplotsdeclarecoordmath@{@#1@}% + \pgfqkeys{/pgfplots/@declare coord math}{% + initialise=, + parse=\pgfmathparse{##1}, + parsenumber=\pgfmathfloatparsenumber{##1}\pgfmathfloattofixed{##1},% + zero= \pgfplotscoordmath{\pgfplotscoordmathid}{parsenumber}{0}, + one= \pgfplotscoordmath{\pgfplotscoordmathid}{parsenumber}{1}, + log e= \pgfmathlog@{##1},% + log to display log=\pgfmath@basic@multiply@{##1}{2.3025851},% * log(10) + log from display log=\pgfmath@basic@multiply@{##1}{0.434294},% / log(10) + log unsigned int={% + \edef\pgfmathresult{% + \ifcase##1 + \or0 + \or0.693147 + \or1.098612 + \or1.386294 + \or1.60943791 + \or1.7917594 + \or1.94591014 + \or2.07944154 + \or2.197224 + \fi + }% + }, + set log basis=\edef\pgfmathresult{{#1}{##1}}\expandafter\pgfplotscoordmath@log@set@basis\pgfmathresult, + exp e={% + % make sure the exponential can be represented, i.e. use + % 'float' in the default repr: + \pgfmathfloatparsenumber{##1}% + \pgfmathfloatexp@\pgfmathresult% + \pgfplotscoordmath{\pgfplotscoordmathid}{parsenumber}{\pgfmathresult}% + }, + tofixed= \edef\pgfmathresult{##1},% + tostring= \edef\pgfmathresult{##1},% + max= \pgfplotsmathmax{##1}{##2},% + min= \pgfplotsmathmin{##1}{##2},% + min limit= \def\pgfmathresult{-16300},% + max limit= \def\pgfmathresult{16300},% + if less than= {\pgfplotsmathlessthan{##1}{##2}\ifpgfmathfloatcomparison ##3\else ##4\fi}, + if is= {% + \if##20 + \ifdim##1pt=0pt ##2\else ##3\fi + \else + \if##2+\ifdim##1pt>0pt ##2\else ##3\fi + \else + \if##2-\ifdim##1pt<0pt ##2\else ##3\fi + \else + \def\pgfplots@loc@TMPd{##1}\ifx\pgfplots@loc@TMPd\pgfutil@empty ##2\else ##3\fi + \fi + \fi + \fi + },% + if is bounded=\edef\pgfplotsretval{##1}\ifx\pgfplotsretval\pgfutil@empty ##3\else ##2\fi, + suffix= #1,% + datascaletrafo set params=, + datascaletrafo get params= \def\pgfmathresult{{}{}}, + datascaletrafo= \edef\pgfmathresult{##1}, + datascaletrafo inverse= \edef\pgfmathresult{##1}, + datascaletrafo noshift inverse= \edef\pgfmathresult{##1}, + datascaletrafo inverse to fixed= \edef\pgfmathresult{##1}, + datascaletrafo noshift inverse to fixed= \edef\pgfmathresult{##1}, + datascaletrafo noshift= \edef\pgfmathresult{##1}, + datascaletrafo noshift= \edef\pgfmathresult{##1}, + datascaletrafo undo shift= \edef\pgfmathresult{##1}, + datascaletrafo redo shift= \edef\pgfmathresult{##1}, + #2% + }% + \expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@ op\endcsname##1##2{% + \noexpand\edef\noexpand\pgfplotscoordmath@{##2}% + \noexpand\expandafter\noexpand\expandafter\noexpand\csname pgfmath\csname pgfpmth@#1@suffix\endcsname ##1@\noexpand\endcsname\noexpand\pgfplotscoordmath@ + }% + % + % + % these log function depend on the first argument of + % \pgfplotscoordmath{}, which is available as + % \pgfplotscoordmathid. + \pgfplotsutilforeachcommasep{% + exp,% + log,% + log to display log,% + log from display log,% + log to log 10,% + log unsigned int}\as\pgfplots@loc@TMPa + {% + \expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@\pgfplots@loc@TMPa\endcsname{% + % invoke \pgfpmth@#1@@<name>@<function> + % for example + % \pgfpmth@pgfbasic@@y@log + \noexpand\csname pgfpmth\pgfplotsdeclarecoordmath@ @\noexpand\pgfplotscoordmathid @\pgfplots@loc@TMPa\noexpand\endcsname + }% + }% + % + \pgfutil@ifundefined{pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log}{% + \pgfutil@namelet + {pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log} + {pgfpmth\pgfplotsdeclarecoordmath@ log e}% + }{}% + \pgfutil@ifundefined{pgfpmth\pgfplotsdeclarecoordmath@ tmpl@exp}{% + \pgfutil@namelet + {pgfpmth\pgfplotsdeclarecoordmath@ tmpl@exp} + {pgfpmth\pgfplotsdeclarecoordmath@ exp e}% + }{}% + \pgfplotscoordmath@def@log@to@log@ten{#1}{}{tmpl}% empty arg + % +}% +\pgfqkeys{/pgfplots/@declare coord math}{% + initialise/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ initialise\endcsname{#1% + \pgfplotscoordmath@initialise@logs + }},% + % takes a number literal as input and defines \pgfmathresult to be + % the parsed result. + parsenumber/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ parsenumber\endcsname##1{#1}},% + % + zero/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ zero\endcsname{#1}},% + one/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ one\endcsname{#1}},% + % + % Calls pgfmathparse. Note that this might need to switch to the + % required math library (which is not necessarily cheap) + parse/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ parse\endcsname##1{#1}},% + % + % takes a parsed number and returns a fixed point number: + tofixed/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tofixed\endcsname##1{#1}},% + % + % chooses a human readable string (which can be processed by parsenumber): + tostring/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tostring\endcsname##1{#1}},% + % + % defines a max routine which returns the max of *exactly* two numbers: + max/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ max\endcsname##1##2{#1}},% + % + % counterpart for max: + min/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ min\endcsname##1##2{#1}},% + % + % defines \pgfmathresult to be the largest supported number. + max limit/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ max limit\endcsname{#1}},% + % + % defines \pgfmathresult to be the smallest supported number. + min limit/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ min limit\endcsname{#1}},% + % + % computes ##1 < ##2 and invokes ##3 in the true case and ##4 in + % the false case. + if less than/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ if less than\endcsname##1##2##3##4{#1}},% + % checks if ##1 is 0, positive, negative or unbounded + % ##1: the number to check + % ##2: either 0 or + or - or u (u = unbounded) + % ##3: true code + % ##4: false code + if is/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ if is\endcsname##1##2##3##4{#1}},% + % + % Checks if the argument ##1 is bounded and invokes ##2 in that + % case. IF the argument is unbounded, it invokes #3. + if is bounded/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ if is bounded\endcsname##1##2##3{#1}},% + % + % applies the natural logarithm. If the log is not defined, the + % argument is "unbounded", see 'if is bounded' + % + % 'log' is special in that it accepts a number literal which may + % be OUTSIDE of the accepted number format. The result, however, is + % then in the accepted number format. + log e/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ log e\endcsname##1{#1}},% + % + % Similar, but the log basis can be set with 'set log basis'. + % This allows \pgfplotscoordmath{x}{log}{} to use a different log + % basis thatn \pgfplotscoordmath{y}{log}{} (with special handling) + log/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log\endcsname##1{#1}},% + % applies a *scale* from the actual log basis to the actual + % *display* log basis. The display log basis is usually 10, unless + % the log basis has been changed. + log to display log/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log to display log\endcsname##1{#1}},% + % applies a *scale* from the displau log basis to the actual + % log basis (the inverse of `log to display log'). + log from display log/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log from display log\endcsname##1{#1}},% + log to log 10/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log to log 10\endcsname##1{#1}},% + % returns log(i) where i \in {1,2,3,...,basis-1} + % currently, it is only invoked for log basis 10 + log unsigned int/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log unsigned int\endcsname##1{#1}},% + % sets (changes) the actual log basis. + set log basis/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ set log basis\endcsname##1{#1}},% + % + % The inverse to 'log e '. + exp e/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ exp e\endcsname##1{#1}},% + % + % The inverse to 'log'. It also uses the correct log basis. + exp/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@exp\endcsname##1{#1}},% + % + % A macro taking two parameters: + % #1: the EXPONENT (as integer) + % #2: the SHIFT (as fixed point number) + % + % After any change, \pgfplotscoordmathnotifydatascalesetfor{<id>} will be + % invoked where <id> is the argument to + % \pgfplotscoordmath{<id>}... + datascaletrafo set params/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo set params\endcsname##1##2{% + #1\relax\pgfplotscoordmathnotifydatascalesetfor{\pgfplotscoordmathid}% + }},% + datascaletrafo set shift/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo set shift\endcsname##1{% + #1\relax\pgfplotscoordmathnotifydatascalesetfor{\pgfplotscoordmathid}% + }},% + % + % Defines \pgfmathresult to contain the two parameters required + % for 'datascaletrafo set params'. + datascaletrafo get params/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo get params\endcsname{#1}},% + datascaletrafo/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo\endcsname##1{#1}},% + datascaletrafo inverse/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo inverse\endcsname##1{#1}},% + datascaletrafo noshift inverse/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo noshift inverse\endcsname##1{#1}},% + datascaletrafo inverse to fixed/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo inverse to fixed\endcsname##1{#1}},% + datascaletrafo noshift inverse to fixed/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo noshift inverse to fixed\endcsname##1{#1}},% + datascaletrafo noshift/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo noshift\endcsname##1{#1}},% + datascaletrafo noshift/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo noshift\endcsname##1{#1}},% + datascaletrafo undo shift/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo undo shift\endcsname##1{#1}},% + datascaletrafo redo shift/.code= + {\expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ datascaletrafo redo shift\endcsname##1{#1}},% + % + % defines a suffix such that + % \csname pgfmath<suffix><op>@\endcsname + % exists. Example: <suffix>=float --> \pgfmathfloatmultiply@ for <op>=multiply + suffix/.code= + {\expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@ suffix\endcsname{#1}},% +}% + +\def\pgfplotscoordmath@initialise@logs{% + \edef\pgfplotsdeclarecoordmath@{@\pgfplotscoordmathclassfor{\pgfplotscoordmathid}@}% + \pgfutil@ifundefined{pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log}{% + \pgfplotsutilforeachcommasep{% + exp,% + log,% + log to display log,% + log from display log,% + log to log 10,% + log unsigned int}\as\pgfplots@loc@TMPa + {% + \pgfutil@namelet + {pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @\pgfplots@loc@TMPa} + {pgfpmth\pgfplotsdeclarecoordmath@ tmpl@\pgfplots@loc@TMPa}% + }% + }{}% +}% + +% shared implementation for 'set log basis' It works for every +% subclass. +\def\pgfplotscoordmath@log@set@basis#1#2{% + \edef\pgfplotsdeclarecoordmath@{@#1@}% + % + \pgfplotscoordmath{\pgfplotscoordmathid}{log e}{#2}% + \let\pgfplots@loc@TMPa=\pgfmathresult% TMPa = log_e(#2) + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{reciprocal}{{\pgfmathresult}}% + \let\pgfplots@loc@TMPb=\pgfmathresult% TMPb = 1/log_e(#2) + % + \expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log\endcsname##1{% + \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{log e}{##1}% + \noexpand\ifx\noexpand\pgfmathresult\noexpand\pgfutil@empty + \noexpand\else + \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{% + {\noexpand\pgfmathresult}% + {\pgfplots@loc@TMPb}% + }% + \noexpand\fi + }% + \expandafter\edef\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @exp\endcsname##1{% + \noexpand\edef\noexpand\pgfmathresult{##1}% + \noexpand\ifx\noexpand\pgfmathresult\noexpand\pgfutil@empty + \noexpand\else + \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{% + {\noexpand\pgfmathresult}% + {\pgfplots@loc@TMPa}% + }% + \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{exp e}{\noexpand\pgfmathresult}% + \noexpand\fi + }% + \expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log to display log\endcsname##1{\edef\pgfmathresult{##1}}% + \expandafter\def\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log from display log\endcsname##1{\edef\pgfmathresult{##1}}% + % + % compute 'log unsigned int' for the new basis. + % + % Idea: re-scale the old implementation (of basis e for i = 1,...,9) + % and re-compute i>=10 : + \begingroup + \expandafter\let\expandafter\logi\csname pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log unsigned int\endcsname + \let\logscale=\pgfplots@loc@TMPb + % + \logi{1}% + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}% + \expandafter\let\csname logi@@1\endcsname=\pgfmathresult + % + \logi{2}% + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}% + \expandafter\let\csname logi@@2\endcsname=\pgfmathresult + % + \logi{3}% + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}% + \expandafter\let\csname logi@@3\endcsname=\pgfmathresult + % + \logi{4}% + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}% + \expandafter\let\csname logi@@4\endcsname=\pgfmathresult + % + \logi{5}% + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}% + \expandafter\let\csname logi@@5\endcsname=\pgfmathresult + % + \logi{6}% + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}% + \expandafter\let\csname logi@@6\endcsname=\pgfmathresult + % + \logi{7}% + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}% + \expandafter\let\csname logi@@7\endcsname=\pgfmathresult + % + \logi{8}% + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}% + \expandafter\let\csname logi@@8\endcsname=\pgfmathresult + % + \logi{9}% + \pgfplotscoordmath{\pgfplotscoordmathid}{op}{multiply}{{\pgfmathresult}{\logscale}}% + \expandafter\let\csname logi@@9\endcsname=\pgfmathresult + % + \xdef\pgfplots@glob@TMPa##1{% + \noexpand\ifcase##1 + \noexpand\def\noexpand\pgfmathresult{}% + \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@1\endcsname}% + \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@2\endcsname}% + \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@3\endcsname}% + \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@4\endcsname}% + \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@5\endcsname}% + \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@6\endcsname}% + \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@7\endcsname}% + \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@8\endcsname}% + \noexpand\or\noexpand\def\noexpand\pgfmathresult{\csname logi@@9\endcsname}% + \noexpand\else + \noexpand\pgfplotscoordmath{\pgfplotscoordmathid}{log}{##1}% + \noexpand\fi + }% + \endgroup + \expandafter\let\csname pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log unsigned int\endcsname=\pgfplots@glob@TMPa + \pgfplotscoordmath@def@log@to@log@ten{#1}\pgfplots@loc@TMPa{\pgfplotscoordmathid}% + % + \pgfutil@namelet + {pgfpmth\pgfplotsdeclarecoordmath@ @\pgfplotscoordmathid @log to log 10} + {pgfpmth\pgfplotsdeclarecoordmath@ tmpl@log to log 10}% +}% +% #1: the coord math class +% #2: either empty (basis e) or 1/ln(basis) +% #3: either 'tmpl' or '\pgfplotscoordmathid. It defines the target +% macro name (see the source code) +\def\pgfplotscoordmath@def@log@to@log@ten#1#2#3{% + \csname pgfpmth@#1@parsenumber\endcsname{0.434294}% + \edef\pgfplots@loc@TMPa{#2}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + % log basis e ---> log basis 10 + % log_10 x = log x / log(10) + \else + % log basis a ---> log basis 10 + % + % log_a x = log x / log a + % log_10 x = log_a x * log a / log(10) = log x / log(10) [OK] + \csname pgfpmth@#1@op\endcsname{multiply}{{#2}{\pgfmathresult}}% + \fi + \expandafter\edef\csname pgfpmth@#1@#3@log to log 10\endcsname##1{% + \noexpand\pgfplotscoordmath{\noexpand\pgfplotscoordmathid}{op}{multiply}{{##1}{\pgfmathresult}}% + }% +}% + +\pgfplotsdeclarecoordmath{pgfbasic}{% + parsenumber=\pgfmathfloatparsenumber{#1}\pgfmathfloattofixed\pgfmathresult, + suffix=@basic@, + zero=\def\pgfmathresult{0}, + one=\def\pgfmathresult{1}, +} +\pgfplotsdeclarecoordmath{float}{% + initialise= + \pgfutil@ifundefined{pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid}{% + \expandafter\edef\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname{0}% + \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, + zero=\pgfmathfloatcreate{0}{0.0}{0},% + one=\pgfmathfloatcreate{1}{1.0}{0},% + tofixed=\pgfmathfloattofixed{#1}, + tostring=\pgfmathfloattosci{#1}, + max=\pgfplotsmathfloatmax{#1}{#2},% + min=\pgfplotsmathfloatmin{#1}{#2},% + max limit=\pgfmathfloatcreate{1}{1.0}{2147483645},% + min limit=\pgfmathfloatcreate{2}{1.0}{2147483645},% + log e=\pgfmathfloatparsenumber{#1}\pgfmathfloatln@{\pgfmathresult},% + if less than=\pgfmathfloatlessthan@{#1}{#2}\ifpgfmathfloatcomparison #3\else #4\fi, + if is bounded=% + \expandafter\pgfmathfloatgetflagstomacro\expandafter{#1}\pgfplotsretval + \ifnum\pgfplotsretval>2 #3\else #2\fi, + if is=% + \pgfmathfloatifflags{#1}{#2}{#3}{#4}, + log=\pgfmathlog@float{#1},% + datascaletrafo set params={% + \expandafter\edef\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname{#1}% + \expandafter\edef\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname{#2}% + },% + datascaletrafo set shift={% + \expandafter\edef\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname{#1}% + },% + datascaletrafo get params={% + \edef\pgfmathresult{% + {\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}% + {\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname}% + }% + },% + datascaletrafo={% + \edef\pgfmathresult{#1}% + \pgfmathfloatshift@\pgfmathresult{\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}% + \pgfmathfloattofixed\pgfmathresult + \expandafter\pgfmath@basic@subtract@\expandafter{\pgfmathresult}{\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname}% + },% + datascaletrafo noshift={% + \edef\pgfmathresult{#1}% + \pgfmathfloatshift@\pgfmathresult{\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}% + \pgfmathfloattofixed{\pgfmathresult}% + },% + datascaletrafo undo shift= + \pgfmath@basic@subtract@{#1}{\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname},% + datascaletrafo redo shift=\pgfmath@basic@add@{#1}{\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname},% + datascaletrafo inverse={% + \pgfplotscoordmath@float@datascaletrafo@inverse{#1}% + },% + datascaletrafo inverse to fixed={% + \pgfplotscoordmath@float@datascaletrafo@inverse{#1}% + \pgfmathfloattofixed\pgfmathresult + },% + datascaletrafo noshift inverse={% + \pgfmathfloatparsenumber{#1}% + \pgfmathfloatshift@{\pgfmathresult}{-\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}% + },% + datascaletrafo noshift inverse to fixed={% + \pgfmathfloatparsenumber{#1}% + \pgfmathfloatshift@{\pgfmathresult}{-\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}% + \pgfmathfloattofixed\pgfmathresult + },% +} + +\def\pgfplotscoordmath@float@datascaletrafo@inverse#1{% + \pgfmath@basic@add@{#1}{\csname pgfplots@data@scale@trafo@SHIFT@\pgfplotscoordmathid\endcsname}% + \let\pgfplots@inverse@datascaletrafo@@shifted=\pgfmathresult + \pgfmathapproxequalto@{\pgfplots@inverse@datascaletrafo@@shifted}{0.0}% + \ifpgfmathcomparison + \pgfmathfloatcreate{0}{0.0}{0}% + \else + \pgfmathfloatparsenumber{\pgfplots@inverse@datascaletrafo@@shifted}% + \pgfmathfloatshift@{\pgfmathresult}{-\csname pgfplots@data@scale@trafo@EXPONENT@\pgfplotscoordmathid\endcsname}% + \fi +}% + +% Invokes a coordinate math routine. +% +% #1: the axis (x,y or z) +% #2: a method name declared by \pgfplotsdeclarecoordmath (one of +% 'op', 'parsenumber', 'tofixed' etc) +% #3-#9: any further arguments required to perform the call to '#2'. +% +% \pgfplotscoordmath {x}{op}{multiply}{{<a>}{<b>}} +% \pgfplotscoordmath {x}{parsenumber}{<a>} +\def\pgfplotscoordmath#1#2{% + \edef\pgfplotscoordmathid{#1}% + \csname pgfpmth@\csname pgfcrdmth@#1\endcsname @#2\endcsname}% + +\def\pgfplotscoordmathclassfor#1{\csname pgfcrdmth@#1\endcsname}% + +\def\pgfplotscoordmathnotifydatascalesetfor#1{}% + +% Enables a particular coordinate math class for the label `#1'. +% +% #1 a label (usually x,y or z) +% #2 the coordinate math class (one prepare by +% \pgfplotsdeclarecoordmath) +% +% From this point on, any call to \pgfplotscoordmath{#1}{...} +% will use the selected math class. +\def\pgfplotssetcoordmathfor#1#2{% + \pgfutil@ifundefined{pgfpmth@#2@initialise}{% + \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, \string\pgfplotssetcoordmathfor{#1}{#2} failed since `#2' is unknown. Maybe you misspelled it?}\pgfeov% + }{% + \expandafter\edef\csname pgfcrdmth@#1\endcsname{#2}% + \pgfplotscoordmath{#1}{initialise}% + }% +}% + +% Defines \pgfplotsretval to be the coordmath id for #1 +\def\pgfplotsgetcoordmathfor#1{% + \pgfutil@ifundefined{pgfcrdmth@#1}{% + \pgfplotsthrow{invalid argument}{\pgfplots@loc@TMPa}{Sorry, \string\pgfplotsgetcoordmathfor{#1} failed since `#1' is unknown. Maybe you misspelled it?}\pgfeov% + }{% + \pgfutil@namelet{pgfplotsretval}{pgfcrdmth@#1}% + }% +}% +\pgfplotssetcoordmathfor{pgfbasic}{pgfbasic}% +\pgfplotssetcoordmathfor{float}{float}% +\pgfplotssetcoordmathfor{meta}{float}% +\pgfplotssetcoordmathfor{default}{float}% + + + +% ================================================================================== + + % #1 the name of an input method for point meta. It must have been % declared by \pgfplotsdeclarepointmetasource first. @@ -1654,59 +3005,55 @@ % Expands to the current value of 'point meta'. \def\pgfplotspointmetainputhandler{} +\def\pgfplotsaxisifhaspointmeta#1#2{% + \ifx\pgfplotspointmetainputhandler\pgfutil@empty #2\else #1\fi +}% + +% Invokes '#1' if the axis contains the coordinate designated by +% \pgfplots@current@point@[xyz] and '#2' if not. +\def\pgfplotsaxisifcontainspoint#1#2{% + \pgf@xa=\pgfplots@current@point@x pt % FIXME : SCOPE REGISTERS!? + \pgf@ya=\pgfplots@current@point@y pt % + \ifpgfplots@curplot@threedim + \pgf@yb=\pgfplots@current@point@z pt % + \fi + \def\pgfplots@loc@TMPa{#2}% + % + % I assume that \pgfplots@[xyz]min@reg and min@reg are registers + % containing the limits. + \ifdim\pgf@xa<\pgfplots@xmin@reg + \else + \ifdim\pgf@xa>\pgfplots@xmax@reg + \else + \ifdim\pgf@ya<\pgfplots@ymin@reg + \else + \ifdim\pgf@ya>\pgfplots@ymax@reg + \else + \ifpgfplots@curplot@threedim + \ifdim\pgf@yb<\pgfplots@zmin@reg + \else + \ifdim\pgf@yb>\pgfplots@zmax@reg + \else + \def\pgfplots@loc@TMPa{#1}% + \fi + \fi + \else + \def\pgfplots@loc@TMPa{#1}% + \fi + \fi + \fi + \fi + \fi + \pgfplots@loc@TMPa% +} + % Declares a routine which can be used to get point meta input. % % Such a routine is invoked in a context where point coordinates are % processed, i.e. during 'plot coordinates', 'plot table' or the like. % -% The routine is called `#1'. It consists of several methods: -% - \csname pgfpmeta@#1@assign\endcsname{} -% During the survey phase, this macro is expected to assign -% \pgfplots@current@point@meta -% if it is a numeric input method, it should return a -% floating point number. -% It is allowed to return an empty string to say "there is no point -% meta". -% PRECONDITION for '@assign': -% - the coordinate input method has already assigned its -% '\pgfplots@current@point@meta' (probably as raw input string). -% - the other input coordinates are already read. -% POSTCONDITION for '@assign': -% - \pgfplots@current@point@meta is ready for use: -% - EITHER a parsed floating point number -% - OR an empty string, -% - OR a symbolic string (if the issymbolic boolean is true) -% The default implementation is -% \let\pgfplots@current@point@meta=\pgfutil@empty -% -% - \csname pgfpmeta@#1@issymbolic\endcsname -> expands to either '1' or '0' -% A numeric source will be processed numerically in float -% arithmetics. Thus, the output of the @assign routine should be -% a macro \pgfplots@current@point@meta in float format. -% -% The output of a numeric point meta source will result in meta -% limit updates and the final map to [0,1000] will be -% initialised automatically. -% -% A symbolic input routine won't be processed. -% Default is '0' -% -% - \csname pgfpmeta@#1@explicitinput\endcsname -> expands to either -% '1' or '0'. In case '1', it expects explicit input from the -% coordinate input routines. For example, 'plot file' will look for -% further input after the x,y,z coordinates. -% Default is '0' -% -% - \csname pgfpmeta@#1@initfor\endcsname##1{....} -% a macro used to initialise the point meta source when it is -% selected. -% This macro body is invoked by pgfplots when someone types -% 'point meta=x' -> will invoke 'pgfpmeta@x@initfor{}'. -% The first argument to initfor can be supplied by the user. -% PRECONDITION for 'initfor': -% - it will be invoked just before -% '\pgfplotspointmetainputhandler' will be changed. -% Default is to do nothing. +% The routine is called `#1'. It consists of several methods, which +% are described below, in the key definitions. % % #1: the name of the input routine. % #2: a sequence of key-value pairs which can be used to overwrite @@ -1722,16 +3069,66 @@ \pgfqkeys{/pgfplots/@declare point meta src}{#2}% }% \pgfqkeys{/pgfplots/@declare point meta src}{% - assign/.code= - {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @assign\endcsname{#1}},% + % + % a macro used to initialise the point meta source when it is + % selected. + % This macro body is invoked by pgfplots when someone types + % 'point meta=x' -> will invoke 'pgfpmeta@x@initfor{}'. + % The first argument to initfor can be supplied by the user. + % PRECONDITION for 'initfor': + % - it will be invoked just before + % '\pgfplotspointmetainputhandler' will be changed. + % Default is to do nothing. initfor/.code= {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @initfor\endcsname##1{#1}},% + % % Called during the survey phase before the first 'assign' call. % It is usually empty. activate/.code= {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @activate\endcsname{#1}},% + % + % During the survey phase, this macro is expected to assign + % \pgfplots@current@point@meta + % if it is a numeric input method, it should return a + % floating point number. + % It is allowed to return an empty string to say "there is no point + % meta". + % PRECONDITION for '@assign': + % - the coordinate input method has already assigned its + % '\pgfplots@current@point@meta' (probably as raw input string). + % - the other input coordinates are already read. + % POSTCONDITION for '@assign': + % - \pgfplots@current@point@meta is ready for use: + % - EITHER a parsed floating point number + % - OR an empty string, + % - OR a symbolic string (if the issymbolic boolean is true) + % The default implementation is + % \let\pgfplots@current@point@meta=\pgfutil@empty + % + assign/.code= + {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @assign\endcsname{#1}},% + % + % expands to either '1' or '0' + % A numeric source will be processed numerically in float + % arithmetics. Thus, the output of the @assign routine should be + % a macro \pgfplots@current@point@meta in float format. + % + % The output of a numeric point meta source will result in meta + % limit updates and the final map to [0,1000] will be + % initialised automatically. + % + % A symbolic input routine won't be processed. + % Default is '0' + % issymbolic/.code= {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @issymbolic\endcsname{#1}},% + % + % expands to either + % '1' or '0'. In case '1', it expects explicit input from the + % coordinate input routines. For example, 'plot file' will look for + % further input after the x,y,z coordinates. + % Default is '0' + % explicitinput/.code= {\expandafter\def\csname pgfpmeta@\pgfplotsdeclarepointmetasource@ @explicitinput\endcsname{#1}},% }% @@ -1741,31 +3138,25 @@ \pgfplotsdeclarepointmetasource{}{} \pgfplotsdeclarepointmetasource{x}{assign={% \let\pgfplots@current@point@meta=\pgfplots@current@point@x - \ifpgfplots@xislinear - \else - \pgfmathfloatparsenumber{\pgfplots@current@point@meta}% - \let\pgfplots@current@point@meta=\pgfmathresult - \fi}} + \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@current@point@meta}% + \let\pgfplots@current@point@meta=\pgfmathresult + }} \pgfplotsdeclarepointmetasource{y}{assign={% \let\pgfplots@current@point@meta=\pgfplots@current@point@y - \ifpgfplots@yislinear - \else - \pgfmathfloatparsenumber{\pgfplots@current@point@meta}% - \let\pgfplots@current@point@meta=\pgfmathresult - \fi}} + \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@current@point@meta}% + \let\pgfplots@current@point@meta=\pgfmathresult + }} \pgfplotsdeclarepointmetasource{z}{assign={% \let\pgfplots@current@point@meta=\pgfplots@current@point@z - \ifpgfplots@zislinear - \else - \pgfmathfloatparsenumber{\pgfplots@current@point@meta}% - \let\pgfplots@current@point@meta=\pgfmathresult - \fi}} + \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@current@point@meta}% + \let\pgfplots@current@point@meta=\pgfmathresult + }} \pgfplotsdeclarepointmetasource{explicit}{% assign={% \ifx\pgfplots@current@point@meta\pgfutil@empty \else - \pgfmathfloatparsenumber{\pgfplots@current@point@meta}% + \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@current@point@meta}% \let\pgfplots@current@point@meta=\pgfmathresult \fi }, @@ -1785,6 +3176,7 @@ \ifx\pgfplots@loc@TMPa\pgfutil@empty \else \pgfmathparse{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{meta}{parsenumber}{\pgfmathresult}% \let\pgfplots@current@point@meta=\pgfmathresult \fi },% @@ -1813,13 +3205,12 @@ }, }% - \pgfplotsdeclarepointmetasource{TeX code}{% assign={% \begingroup \let\pgfplotspointmeta=\pgfutil@empty \pgfplots@invoke@pgfkeyscode{/pgfplots/point meta/code/.@cmd}{}% - \pgfmathfloatparsenumber{\pgfplotspointmeta}% + \pgfplotscoordmath{meta}{parsenumber}{\pgfplotspointmeta}% \let\pgfplots@current@point@meta=\pgfmathresult \pgfmath@smuggleone\pgfplots@current@point@meta \endgroup @@ -1859,15 +3250,7 @@ % copy operations. That experiment was not successfull (it was not % faster :-( ). However, the streaming methods still assign their % things globally... -\newif\ifpgfplots@coord@stream@isfirst \def\pgfplots@coord@stream@start{% - \global\pgfplots@coord@stream@isfirsttrue - \global\let\pgfplots@currentplot@firstcoord@x=\pgfutil@empty - \global\let\pgfplots@currentplot@firstcoord@y=\pgfutil@empty - \global\let\pgfplots@currentplot@firstcoord@z=\pgfutil@empty - \global\let\pgfplots@currentplot@lastcoord@x=\pgfutil@empty - \global\let\pgfplots@currentplot@lastcoord@y=\pgfutil@empty - \global\let\pgfplots@currentplot@lastcoord@z=\pgfutil@empty \let\pgfplots@current@point@x=\pgfutil@empty \let\pgfplots@current@point@y=\pgfutil@empty \let\pgfplots@current@point@z=\pgfutil@empty @@ -1888,15 +3271,24 @@ % \pgfplots@current@point@meta \def\pgfplots@coord@stream@coord{% \pgfplots@coord@stream@coord@% +}% +\def\pgfplotscoordstream@firstlast@init{% + \global\let\pgfplots@currentplot@firstcoord@x=\pgfutil@empty + \global\let\pgfplots@currentplot@firstcoord@y=\pgfutil@empty + \global\let\pgfplots@currentplot@firstcoord@z=\pgfutil@empty + \global\let\pgfplots@currentplot@lastcoord@x=\pgfutil@empty + \global\let\pgfplots@currentplot@lastcoord@y=\pgfutil@empty + \global\let\pgfplots@currentplot@lastcoord@z=\pgfutil@empty +}% +\def\pgfplotscoordstream@firstlast@update{% \ifx\pgfplots@current@point@x\pgfutil@empty % only one \if is enough as ONE empty coordinate results all % others to be reset as well. \else - \ifpgfplots@coord@stream@isfirst + \ifx\pgfplots@currentplot@firstcoord@x\pgfutil@empty \global\let\pgfplots@currentplot@firstcoord@x=\pgfplots@current@point@x \global\let\pgfplots@currentplot@firstcoord@y=\pgfplots@current@point@y \global\let\pgfplots@currentplot@firstcoord@z=\pgfplots@current@point@z - \global\pgfplots@coord@stream@isfirstfalse \fi \global\let\pgfplots@currentplot@lastcoord@x=\pgfplots@current@point@x \global\let\pgfplots@currentplot@lastcoord@y=\pgfplots@current@point@y @@ -1906,34 +3298,54 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% Scanline management. The idea is to allow a simple syntax -% to provide matrix input - by means of scanlines. +% Scanline management. The idea is to handle complete sequences of +% input coordinates, which are usually separated by a blank line. +% +% This allows a simple syntax to provide matrix input - by means of scanlines. +% Furthermore, 2d plots can use it to interrupt the display. % % An empty line in 'addplot coordinates {}' indicates the end of a % scan line. Similarly, an empty line in 'addplot file' or 'table' % also indicates the end of a scan line. % -% The following methods allow to update the scanline computation. +% The steps taken whenever a scan line is complete depend on the +% configuration of the /pgfplots/empty line choice key (queried in +% \pgfplotsscanlinelengthinitzero). +% +% +% The following methods constitute the scanline interface. % % Usage: % % \pgfplotsscanlinelengthinitzero % % \pgfplotsscanlinelengthincrease +% <process point> % \pgfplotsscanlinelengthincrease +% <process point> % \pgfplotsscanlinelengthincrease +% <process point> % \pgfplotsscanlinecomplete % \pgfplotsscanlinelengthincrease +% <process point> % \pgfplotsscanlinelengthincrease +% <process point> % \pgfplotsscanlinelengthincrease +% <process point> % \pgfplotsscanlinecomplete % \pgfplotsscanlinelengthincrease +% <process point> % \pgfplotsscanlinelengthincrease +% <process point> % \pgfplotsscanlinelengthincrease +% <process point> % \pgfplotsscanlinecomplete % % \pgfplotsscanlinelengthcleanup % +% In other words, the \pgfplotsscanlinelengthincrease routine is +% invoked *before* the point is processed. That's important. +% % Now, \pgfplotsscanlinelength expands to either % a) a negative number in which case there is no % unique scanline length. @@ -1942,13 +3354,72 @@ % had different lengths. % b) the scanline length. \def\pgfplotsscanlinelengthinitzero{% + \def\pgfplotsscanlinelength{-1}% + \pgfkeysgetvalue{/pgfplots/empty line}\pgfplots@loc@TMPa% + \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}% + \def\pgfplots@loc@TMPb{auto}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + \pgfplotsdetermineemptylinehandler + \pgfkeysgetvalue{/pgfplots/empty line}\pgfplots@loc@TMPa% + \fi + \def\pgfplots@loc@TMPb{jump}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + \def\pgfplots@loc@TMPa{nan}% alias for jump + \fi + \def\pgfplots@loc@TMPb{no op}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + \def\pgfplots@loc@TMPa{none}% alias for no op + \fi + \pgfutil@ifundefined{pgfplotsscanlinelength@\pgfplots@loc@TMPa @initzero}{% + \pgfplots@error{Sorry, the choice `empty line=\pgfkeysvalueof{/pgfplots/empty line}' is unknown. Maybe you misspelled it}% + }{}% + \expandafter\let\expandafter\pgfplotsscanlinelength@initzero \csname pgfplotsscanlinelength@\pgfplots@loc@TMPa @initzero\endcsname + \expandafter\let\expandafter\pgfplotsscanlinelengthincrease \csname pgfplotsscanlinelength@\pgfplots@loc@TMPa @increase\endcsname + \edef\pgfplotsscanlinecomplete{% + \expandafter\noexpand\csname pgfplotsscanlinelength@\pgfplots@loc@TMPa @complete\endcsname + \noexpand\pgfplotsplothandlernotifyscanlinecomplete + }% + \expandafter\let\expandafter\pgfplotsscanlinelengthcleanup \csname pgfplotsscanlinelength@\pgfplots@loc@TMPa @cleanup\endcsname + \pgfplotsscanlinelength@initzero +}% + +\newif\ifpgfplots@emptyline@compat + +% Invoked for 'empty line=auto'. +% +% @POSTCONDITION: '/pgfplots/empty line' is set to something useful +% (not auto) +\def\pgfplotsdetermineemptylinehandler{% + \if n\pgfplots@meshmode + % no mesh/surf plot: + \pgfkeyssetvalue{/pgfplots/empty line}{jump}% + \ifpgfplots@emptyline@compat + \pgfkeyssetvalue{/pgfplots/empty line}{none}% do nothing for backwards compatibility with 2D processing. + \fi + \else + % it is a mesh or surf plot; use scanline: + \pgfkeyssetvalue{/pgfplots/empty line}{scanline}% + \fi +}% +\def\pgfplotsscanlinedisablechanges{% + \let\pgfplotsscanlinecomplete=\relax + \let\pgfplotsscanlinelengthincrease=\relax + \let\pgfplotsscanlinelengthcleanup=\relax + \let\pgfplotsscanlinelengthinitzero=\relax + \let\pgfplotsscanlineendofinput=\relax +}% + +% ------------------------------------------------------------------------------- +% empty line=scanline +% class: +\def\pgfplotsscanlinelength@scanline@initzero{% \c@pgfplots@scanlineindex=0 \def\pgfplots@scanlinelength{-1}% } -\def\pgfplotsscanlinelengthincrease{% +\def\pgfplotsscanlinelength@scanline@increase{% \advance\c@pgfplots@scanlineindex by1 } -\def\pgfplotsscanlinecomplete{% +\def\pgfplotsscanlinelength@scanline@complete{% \ifnum\pgfplots@scanlinelength>0 \ifnum\c@pgfplots@scanlineindex=0 % @@ -1973,7 +3444,7 @@ \fi \c@pgfplots@scanlineindex=0 } -\def\pgfplotsscanlinelengthcleanup{% +\def\pgfplotsscanlinelength@scanline@cleanup{% \ifnum\c@pgfplots@scanlineindex=0 % I assume the last scan line is already complete. \else @@ -1981,12 +3452,58 @@ \fi \let\pgfplotsscanlinelength=\pgfplots@scanlinelength } -\def\pgfplotsscanlinedisablechanges{% - \let\pgfplotsscanlinecomplete=\relax - \let\pgfplotsscanlinelengthincreas=\relax - \let\pgfplotsscanlinelengthcleanup=\relax - \let\pgfplotsscanlinelengthinitzero=\relax +% ------------------------------------------------------------------------------- +% +% empty line=none class: +% +\let\pgfplotsscanlinelength@none@initzero=\pgfutil@empty +\let\pgfplotsscanlinelength@none@increase=\relax +\let\pgfplotsscanlinelength@none@complete=\relax +\let\pgfplotsscanlinelength@none@cleanup=\relax +% ------------------------------------------------------------------------------- +% +% empty line=nan class: +\def\pgfplotsscanlinelength@nan@initzero{% + \def\pgfplotsscanlinelength@nan@isfirst{1}% + \let\pgfplotsscanlinelength@nan@pendingwork=\relax + \pgfplotsifinaxis{}{\let\pgfplotsaxisserializedatapoint=\relax}% +}% +\def\pgfplotsscanlinelength@nan@increase{% + \def\pgfplotsscanlinelength@nan@isfirst{0}% + \pgfplotsscanlinelength@nan@pendingwork +}% +\def\pgfplotsscanlinelength@nan@complete{% + \if1\pgfplotsscanlinelength@nan@isfirst + \else + \def\pgfplotsscanlinelength@nan@pendingwork{% + % this will be executed when the next point has been + % found. + \def\pgfplots@current@point@x{}% + \def\pgfplots@current@point@y{}% + \def\pgfplots@current@point@z{}% + % simply serialize an empty point. That works -- the + % visualization phase checks if the coordinates are empty and + % visualizes them as "jump" + % + % Note that \pgfplotsplothandlersurveypoint is not a good + % choice here unless one employs its 'unbounded coords=jump' + % feature + \def\pgfplotsaxisplothasjumps{1}% + \pgfplotsaxisserializedatapoint + % + \let\pgfplotsscanlinelength@nan@pendingwork=\relax + }% + \fi + \def\pgfplotsscanlinelength@nan@isfirst{1}% }% +\let\pgfplotsscanlinelength@nan@cleanup=\relax +% +% ------------------------------------------------------------------------------- + + +\def\pgfplotsaxisfilteredcoordsaway{0}% +\def\pgfplotsaxisplothasjumps{0}% +\newif\ifpgfplotsaxisparsecoordinateok % Initialises % \pgfplots@coord@stream@start @@ -2046,235 +3563,26 @@ % be as deep as necessary - as long as all operations have the % same level of scoping. % +% @see the detailed documentation in pgfplotsplothandlers.code.tex \long\def\pgfplots@PREPARE@COORD@STREAM#1{% \ifpgfplots@curplot@threedim \global\pgfplots@threedimtrue \fi + \def\pgfplotsaxisfilteredcoordsaway{0}% + \def\pgfplotsaxisplothasjumps{0}% % + \ifpgfplots@curplot@threedim + \let\pgfplotsaxisupdatelimitsforcoordinate=\pgfplotsaxisupdatelimitsforcoordinatethreedim + \let\pgfplotsaxisparsecoordinate=\pgfplotsaxisparsecoordinatethreedim + \else + \let\pgfplotsaxisupdatelimitsforcoordinate=\pgfplotsaxisupdatelimitsforcoordinatetwodim + \let\pgfplotsaxisparsecoordinate=\pgfplotsaxisparsecoordinatetwodim + \fi \begingroup %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \let\E=\noexpand % - % Setup Just-In-Time-Macro Compilation: - % I compile a set of macros which is highly optimized for this - % particular plot. - % - % 1.\pgfplots@update@limits@for@one@point - % Updates the current x and y limits for point (#1,#2). - % - % To eliminate all those case distinctions, it is created with - % 'edef' and a lot of '\noexpand' calls here: - % - % - % The point coordinates may be given in floating point format, see - % below. - % - % Please note that if user specified limits are given, automatic - % limits are only applied to points which fall into the user specified - % clipping region. - % - % PRECONDITIONS: - % - the input coordinates have been parsed correctly (floating point - % format for linear axis, log applied for logarithmic ones) - % - % Arguments: - % \pgfplots@current@point@[xyz] - \xdef\pgfplots@update@limits@for@one@point{% -%\E\tracingmacros=2\E\tracingcommands=2 -%\E\pgfplots@message{Updating limits for (\E\pgfplots@current@point@x,\E\pgfplots@current@point@y) ...}% - % - % VIM SEARCH PATTERN: - % [^E]\zs\\\ze[^E] - % -> this finds '\' which is neither '\E' nor is it prefixed - % by 'E'. - % - % - % - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDfalse - % check whether we need to clip limits: - \ifpgfplots@clip@limits - \ifpgfplots@autocompute@xmin - \else - \ifpgfplots@xislinear - \E\pgfmathfloatlessthan@{\E\pgfplots@current@point@x}{\E\pgfplots@xmin}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \else - \E\pgfplotsmathlessthan{\E\pgfplots@current@point@x}{\E\pgfplots@xmin}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \fi - \fi - \ifpgfplots@autocompute@xmax - \else - \ifpgfplots@xislinear - \E\pgfmathfloatlessthan@{\E\pgfplots@xmax}{\E\pgfplots@current@point@x}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \else - \E\pgfplotsmathlessthan{\E\pgfplots@xmax}{\E\pgfplots@current@point@x}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \fi - \fi - \ifpgfplots@autocompute@ymin - \else - \ifpgfplots@yislinear - \E\pgfmathfloatlessthan@{\E\pgfplots@current@point@y}{\E\pgfplots@ymin}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \else - \E\pgfplotsmathlessthan{\E\pgfplots@current@point@y}{\E\pgfplots@ymin}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \fi - \fi - \ifpgfplots@autocompute@ymax - \else - \ifpgfplots@yislinear - \E\pgfmathfloatlessthan@{\E\pgfplots@ymax}{\E\pgfplots@current@point@y}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \else - \E\pgfplotsmathlessthan{\E\pgfplots@ymax}{\E\pgfplots@current@point@y}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \fi - \fi - \ifpgfplots@curplot@threedim - \ifpgfplots@autocompute@zmin - \else - \ifpgfplots@zislinear - \E\pgfmathfloatlessthan@{\E\pgfplots@current@point@z}{\E\pgfplots@zmin}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \else - \E\pgfplotsmathlessthan{\E\pgfplots@current@point@z}{\E\pgfplots@zmin}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \fi - \fi - \ifpgfplots@autocompute@zmax - \else - \ifpgfplots@zislinear - \E\pgfmathfloatlessthan@{\E\pgfplots@zmax}{\E\pgfplots@current@point@z}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \else - \E\pgfplotsmathlessthan{\E\pgfplots@zmax}{\E\pgfplots@current@point@z}% - \E\ifpgfmathfloatcomparison - \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue - \E\fi - \fi - \fi - \fi - \fi - % - % - % - % Update limits: - \E\ifpgfplots@update@limits@for@one@point@ISCLIPPED - \E\else - \ifpgfplots@autocompute@xmin - \ifpgfplots@xislinear - \E\pgfplotsmathfloatmin{\E\pgfplots@xmin}{\E\pgfplots@current@point@x}% - \E\global\E\let\E\pgfplots@xmin=\E\pgfmathresult - \else - \E\pgfplotsmathmin{\E\pgfplots@xmin}{\E\pgfplots@current@point@x}% - \E\global\E\let\E\pgfplots@xmin=\E\pgfmathresult - \fi - \fi - \ifpgfplots@autocompute@xmax - \ifpgfplots@xislinear - \E\pgfplotsmathfloatmax{\E\pgfplots@xmax}{\E\pgfplots@current@point@x}% - \E\global\E\let\E\pgfplots@xmax=\E\pgfmathresult - \else - \E\pgfplotsmathmax{\E\pgfplots@xmax}{\E\pgfplots@current@point@x}% - \E\global\E\let\E\pgfplots@xmax=\E\pgfmathresult - \fi - \fi - \ifpgfplots@autocompute@ymin - \ifpgfplots@yislinear - \E\pgfplotsmathfloatmin{\E\pgfplots@ymin}{\E\pgfplots@current@point@y}% - \E\global\E\let\E\pgfplots@ymin=\E\pgfmathresult - \else - \E\pgfplotsmathmin{\E\pgfplots@ymin}{\E\pgfplots@current@point@y}% - \E\global\E\let\E\pgfplots@ymin=\E\pgfmathresult - \fi - \fi - \ifpgfplots@autocompute@ymax - \ifpgfplots@yislinear - \E\pgfplotsmathfloatmax{\E\pgfplots@ymax}{\E\pgfplots@current@point@y}% - \E\global\E\let\E\pgfplots@ymax=\E\pgfmathresult - \else - \E\pgfplotsmathmax{\E\pgfplots@ymax}{\E\pgfplots@current@point@y}% - \E\global\E\let\E\pgfplots@ymax=\E\pgfmathresult - \fi - \fi - \ifpgfplots@curplot@threedim - \ifpgfplots@autocompute@zmin - \ifpgfplots@zislinear - \E\pgfplotsmathfloatmin{\E\pgfplots@zmin}{\E\pgfplots@current@point@z}% - \E\global\E\let\E\pgfplots@zmin=\E\pgfmathresult - \else - \E\pgfplotsmathmin{\E\pgfplots@zmin}{\E\pgfplots@current@point@z}% - \E\global\E\let\E\pgfplots@zmin=\E\pgfmathresult - \fi - \fi - \ifpgfplots@autocompute@zmax - \ifpgfplots@zislinear - \E\pgfplotsmathfloatmax{\E\pgfplots@zmax}{\E\pgfplots@current@point@z}% - \E\global\E\let\E\pgfplots@zmax=\E\pgfmathresult - \else - \E\pgfplotsmathmax{\E\pgfplots@zmax}{\E\pgfplots@current@point@z}% - \E\global\E\let\E\pgfplots@zmax=\E\pgfmathresult - \fi - \fi - \fi - \E\fi - % - % Compute data range: - \ifpgfplots@autocompute@all@limits - % the data range will be acquired simply from the axis - % range, see below! - \else - % Attention: it is only done for linear axis! - \ifpgfplots@xislinear - \E\pgfplotsmathfloatmin{\E\pgfplots@data@xmin}{\E\pgfplots@current@point@x}% - \E\global\E\let\E\pgfplots@data@xmin=\E\pgfmathresult - \E\pgfplotsmathfloatmax{\E\pgfplots@data@xmax}{\E\pgfplots@current@point@x}% - \E\global\E\let\E\pgfplots@data@xmax=\E\pgfmathresult - \fi - \ifpgfplots@yislinear - \E\pgfplotsmathfloatmin{\E\pgfplots@data@ymin}{\E\pgfplots@current@point@y}% - \E\global\E\let\E\pgfplots@data@ymin=\E\pgfmathresult - \E\pgfplotsmathfloatmax{\E\pgfplots@data@ymax}{\E\pgfplots@current@point@y}% - \E\global\E\let\E\pgfplots@data@ymax=\E\pgfmathresult - \fi - \ifpgfplots@curplot@threedim - \ifpgfplots@zislinear - \E\pgfplotsmathfloatmin{\E\pgfplots@data@zmin}{\E\pgfplots@current@point@z}% - \E\global\E\let\E\pgfplots@data@zmin=\E\pgfmathresult - \E\pgfplotsmathfloatmax{\E\pgfplots@data@zmax}{\E\pgfplots@current@point@z}% - \E\global\E\let\E\pgfplots@data@zmax=\E\pgfmathresult - \fi - \fi - \fi -%\E\pgfplots@message{Updated limits: (\E\pgfplots@xmin,\E\pgfplots@ymin) rectangle (\E\pgfplots@xmax,\E\pgfplots@ymax).}% -%\E\tracingmacros=0\E\tracingcommands=0 - }% -%\message{Assembled update-limits \ifpgfplots@curplot@threedim 3D\else 2D\fi macro to {\meaning\pgfplots@update@limits@for@one@point}}% +%\message{Assembled update-limits \ifpgfplots@curplot@threedim 3D\else 2D\fi macro to {\meaning\pgfplotsaxisupdatelimitsforcoordinate}}% \ifpgfplots@bb@isactive \else % we are inside of @@ -2282,205 +3590,107 @@ % .. % \endpgfinterruptboundingbox % -> don't change data limits! - \global\let\pgfplots@update@limits@for@one@point=\relax + \gdef\pgfplotsaxisupdatelimitsforcoordinate##1##2##3{}% \fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % - % This here is the MAIN code of \pgfplots@process@one@point . - % It is inserted below into the right, into one of two prepared - % places. - \def\pgfplots@loc@surveypoint{% - \ifpgfplots@apply@datatrafo - \ifpgfplots@datascaletrafo@initialised - % apply data transformation directly. - \ifpgfplots@apply@datatrafo@x - \E\pgfplots@datascaletrafo@x\E\pgfplots@current@point@x - \E\let\E\pgfplots@current@point@x=\E\pgfmathresult - \fi - \ifpgfplots@apply@datatrafo@y - \E\pgfplots@datascaletrafo@y\E\pgfplots@current@point@y - \E\let\E\pgfplots@current@point@y=\E\pgfmathresult - \fi - \ifpgfplots@curplot@threedim - \ifpgfplots@apply@datatrafo@z - \E\pgfplots@datascaletrafo@z\E\pgfplots@current@point@z - \E\let\E\pgfplots@current@point@z=\E\pgfmathresult - \fi - \fi - \fi - \fi - % All following routines (limit updating/stacking/error - % bars) will use float numerics if necessary (controlled - % by ifs). - \ifpgfplots@stackedmode - \E\pgfplots@stacked@preparepoint@inmacro% - \ifpgfplots@datascaletrafo@initialised% is also true if there is no scale trafo. - \E\pgfplots@stacked@finishpoint - \else - % the finishpoint routine will be invoked at - % \endaxis. - \fi - \fi - % - % Prepare \pgfplots@current@point@meta (see the preparation - % routine above): - \E\pgfplots@set@perpointmeta - % - % update also axis / data limits: - % Arguments: \pgfplots@current@point@[xy] - \E\pgfplots@update@limits@for@one@point - \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% - \fi - % - \ifpgfplots@collect@firstplot@astick - \ifnum\pgfplots@numplots=0 - \E\ifx\E\pgfplots@firstplot@coords@x\E\pgfutil@empty - \E\t@pgfplots@tokc={}% - \E\else - \E\t@pgfplots@tokc=\E\expandafter{\E\pgfplots@firstplot@coords@x,}% - \E\fi - \E\xdef\E\pgfplots@firstplot@coords@x{\E\the\E\t@pgfplots@tokc\E\pgfplots@current@point@x}% - \E\ifx\E\pgfplots@firstplot@coords@y\E\pgfutil@empty - \E\t@pgfplots@tokc={}% - \E\else - \E\t@pgfplots@tokc=\E\expandafter{\E\pgfplots@firstplot@coords@y,}% - \E\fi - \E\xdef\E\pgfplots@firstplot@coords@y{\E\the\E\t@pgfplots@tokc\E\pgfplots@current@point@y}% - % - \ifpgfplots@curplot@threedim - \E\ifx\E\pgfplots@firstplot@coords@z\E\pgfutil@empty - \E\t@pgfplots@tokc={}% - \E\else - \E\t@pgfplots@tokc=\E\expandafter{\E\pgfplots@firstplot@coords@z,}% - \E\fi - \E\xdef\E\pgfplots@firstplot@coords@z{\E\the\E\t@pgfplots@tokc\E\pgfplots@current@point@z}% - \fi + % + % Takes a coordinate which is already parsed and applies steps + % such that it becomes its final values. + % + % This implements the stacked plot feature currently. + % + % PRECONDITION: + % \pgfplotsaxisparsecoordinate has already been called. + % + % POSTCONDITION: + % the point has its final coordinates; the axis won't change it + % anymore. + \xdef\pgfplotsaxispreparecoordinate{% + \E\ifpgfplotsaxisparsecoordinateok + % All following routines (limit updating/stacking/error + % bars) will use float numerics if necessary (controlled + % by ifs). + \E\pgfplotsaxistransformfromdatacs + \ifpgfplots@stackedmode + \E\pgfplots@stacked@preparepoint@inmacro% \fi - \fi - % - }% - \def\pgfplots@loc@performserizalization{% - % 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). - \E\edef\E\pgfplots@loc@TMPa{\E\pgfplots@current@point@x,\E\pgfplots@current@point@y,\E\pgfplots@current@point@z,\E\pgfplots@current@point@meta;}% - \E\expandafter\E\pgfplotsapplistXXpushback\E\expandafter{\E\pgfplots@loc@TMPa}% + \E\fi }% - % The following code assembles the command which is executed for - % each coordinate. % - % To eliminate all those case distinctions, it is created with - % 'edef' and a lot of '\noexpand' calls here: + % A macro which should be called once for every data point during the + % survey phase. % - % Arguments: - % \pgfplots@current@point@[xyz] - % \pgfplots@current@point@[xyz]@error (if in argument list) - \xdef\pgfplots@process@one@point{% - % These things are necessary for error bars and are available - % as public results in math parser invocations (for meta and - % filters) - \E\let\E\pgfplots@current@point@x@unfiltered=\E\pgfplots@current@point@x - \E\let\E\pgfplots@current@point@y@unfiltered=\E\pgfplots@current@point@y - \E\let\E\pgfplots@current@point@z@unfiltered=\E\pgfplots@current@point@z - \E\def\E\pgfplots@unbounded@dir{}% - % - \E\pgfplots@prepare@xcoord{\E\pgfplots@current@point@x}% - \E\expandafter\E\pgfplots@invoke@filter\E\expandafter{\E\pgfmathresult}{x}% - \E\let\E\pgfplots@current@point@x=\E\pgfmathresult - % - \E\pgfplots@prepare@ycoord{\E\pgfplots@current@point@y}% - \E\expandafter\E\pgfplots@invoke@filter\E\expandafter{\E\pgfmathresult}{y}% - \E\let\E\pgfplots@current@point@y=\E\pgfmathresult - % - \ifpgfplots@curplot@threedim - \E\pgfplots@prepare@zcoord{\E\pgfplots@current@point@z}% - \E\expandafter\E\pgfplots@invoke@filter\E\expandafter{\E\pgfmathresult}{z}% - \E\let\E\pgfplots@current@point@z=\E\pgfmathresult - \fi - % - \E\pgfplots@invoke@filter@xyz - % - \ifpgfplots@xislinear - % NOTE: this handling of unbounded coords in the case of - % LOG coords is performed directly by - % \pgfplots@prepare@ycoord! - \E\ifx\E\pgfplots@current@point@x\E\pgfutil@empty - \E\else - \E\pgfmathfloatparsenumber{\E\pgfplots@current@point@x}% - \E\expandafter\E\pgfmathfloat@decompose@F\E\pgfmathresult\E\relax\E\c@pgf@counta - \E\ifnum\E\c@pgf@counta>2 % this clears nan, inf and -inf points. - \E\let\E\pgfplots@current@point@x=\E\pgfutil@empty - \E\def\E\pgfplots@unbounded@dir{x}% - \E\else - \E\let\E\pgfplots@current@point@x=\E\pgfmathresult - \E\fi - \E\fi - \fi - % - \ifpgfplots@yislinear - \E\ifx\E\pgfplots@current@point@y\E\pgfutil@empty - \E\else - \E\pgfmathfloatparsenumber{\E\pgfplots@current@point@y}% - \E\expandafter\E\pgfmathfloat@decompose@F\E\pgfmathresult\E\relax\E\c@pgf@counta - \E\ifnum\E\c@pgf@counta>2 - \E\let\E\pgfplots@current@point@y=\E\pgfutil@empty - \E\def\E\pgfplots@unbounded@dir{y}% - \E\else - \E\let\E\pgfplots@current@point@y=\E\pgfmathresult - \E\fi - \E\fi - \fi - % - \ifpgfplots@curplot@threedim + % The caller is the plot handler's point survey routine. + % + % A data point might be a complicated thing which contains + % multiple coordinates. You need to invoke + % \pgfplotsaxisparsecoordinate and + % \pgfplotsaxispreparecoordinate for each of them. But + % \pgfplotsaxisdatapointsurveyed is invoked once for the complete + % set. + % + % @PRECONDITION + % - \pgfplots@current@point@[xyz] contain final coordinates + % (i.e. output of \pgfplotsaxispreparecoordinate) + % + % @POSTCONDITION + % - stacked plot things, + % - error bars, + % - xtick=data + % are all processed. + % + \xdef\pgfplotsaxisdatapointsurveyed{% + \E\ifpgfplotsaxisparsecoordinateok + % All following routines (limit updating/stacking/error + % bars) will use float numerics if necessary (controlled + % by ifs). % - \ifpgfplots@zislinear - \E\ifx\E\pgfplots@current@point@z\E\pgfutil@empty - \E\else - \E\pgfmathfloatparsenumber{\E\pgfplots@current@point@z}% - \E\expandafter\E\pgfmathfloat@decompose@F\E\pgfmathresult\E\relax\E\c@pgf@counta - \E\ifnum\E\c@pgf@counta>2 - \E\let\E\pgfplots@current@point@z=\E\pgfutil@empty - \E\def\E\pgfplots@unbounded@dir{z}% + % Prepare \pgfplots@current@point@meta (see the preparation + % routine above): + \E\pgfplots@set@perpointmeta + % + \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% + \fi + % + \ifpgfplots@collect@firstplot@astick + \ifnum\pgfplots@numplots=0 + \E\ifx\E\pgfplots@firstplot@coords@x\E\pgfutil@empty + \E\t@pgfplots@tokc={}% \E\else - \E\let\E\pgfplots@current@point@z=\E\pgfmathresult + \E\t@pgfplots@tokc=\E\expandafter{\E\pgfplots@firstplot@coords@x,}% \E\fi - \E\fi - \fi - \fi - % - % check if coordinates are bounded: - \E\pgfplots@loc@tmptrue - \E\ifx\E\pgfplots@current@point@x\E\pgfutil@empty - \E\pgfplots@loc@tmpfalse - \E\else - \E\ifx\E\pgfplots@current@point@y\E\pgfutil@empty - \E\pgfplots@loc@tmpfalse - \E\else - \ifpgfplots@curplot@threedim - \E\ifx\E\pgfplots@current@point@z\E\pgfutil@empty - \E\pgfplots@loc@tmpfalse + \E\xdef\E\pgfplots@firstplot@coords@x{\E\the\E\t@pgfplots@tokc\E\pgfplots@current@point@x}% + \E\ifx\E\pgfplots@firstplot@coords@y\E\pgfutil@empty + \E\t@pgfplots@tokc={}% + \E\else + \E\t@pgfplots@tokc=\E\expandafter{\E\pgfplots@firstplot@coords@y,}% \E\fi + \E\xdef\E\pgfplots@firstplot@coords@y{\E\the\E\t@pgfplots@tokc\E\pgfplots@current@point@y}% + % + \ifpgfplots@curplot@threedim + \E\ifx\E\pgfplots@firstplot@coords@z\E\pgfutil@empty + \E\t@pgfplots@tokc={}% + \E\else + \E\t@pgfplots@tokc=\E\expandafter{\E\pgfplots@firstplot@coords@z,}% + \E\fi + \E\xdef\E\pgfplots@firstplot@coords@z{\E\the\E\t@pgfplots@tokc\E\pgfplots@current@point@z}% + \fi \fi - \E\fi - \E\fi - % - \E\ifpgfplots@loc@tmp - % coordinate is bounded AND non-empty, ok. - % insert the main 2d/3d code here: - \pgfplots@loc@surveypoint - \pgfplots@loc@performserizalization + \fi + \E\pgfplotscoordstream@firstlast@update + \E\pgfplotsaxisserializedatapoint \E\else + % COORDINATE HAS BEEN FILTERED AWAY: + % % make ALL empty to simplify special case checking: \E\let\E\pgfplots@current@point@x=\E\pgfutil@empty \E\let\E\pgfplots@current@point@y=\E\pgfutil@empty @@ -2488,6 +3698,7 @@ % check whether we have UNBOUNDED or just unfiltered % coords: \if\pgfplots@unbounded@handler d% unbounded coords=discard + \E\def\E\pgfplotsaxisfilteredcoordsaway{1}% \ifpgfplots@warn@for@filter@discards \E\pgfplots@message{% NOTE: coordinate (\E\pgfplots@current@point@x@unfiltered,\E\pgfplots@current@point@y@unfiltered\ifpgfplots@curplot@threedim,\E\pgfplots@current@point@z@unfiltered\fi) @@ -2502,6 +3713,7 @@ \else % unbounded coords=jump \E\ifx\E\pgfplots@unbounded@dir\E\pgfutil@empty + \E\def\E\pgfplotsaxisfilteredcoordsaway{1}% \ifpgfplots@warn@for@filter@discards \E\pgfplots@message{% NOTE: coordinate (\E\pgfplots@current@point@x@unfiltered,\E\pgfplots@current@point@y@unfiltered\ifpgfplots@curplot@threedim,\E\pgfplots@current@point@z@unfiltered\fi) @@ -2509,7 +3721,8 @@ }% \fi \E\else - \pgfplots@loc@performserizalization + \E\def\E\pgfplotsaxisplothasjumps{1}% + \E\pgfplotsaxisserializedatapoint \E\fi \fi \E\fi @@ -2517,13 +3730,21 @@ % increase \pgfplots@current@point@coordindex: \E\advance\E\c@pgfplots@coordindex by1 }% + % + % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endgroup -%\message{Prepared macro \string\pgfplots@update@limits@for@one@point: {\meaning\pgfplots@update@limits@for@one@point}}% + % + \def\pgfplotsaxissurveysetpointmeta{\pgfplots@set@perpointmeta}% + % +%\message{Prepared macro \string\pgfplots@update@limits@for@one@point: {\meaning\pgfplotsaxisupdatelimitsforcoordinate}}% %\message{Prepared macro \string\pgfplots@process@one@point: {\meaning\pgfplots@process@one@point}}% % \let\pgfplots@coord@stream@start@=\pgfplots@PREPARE@COORD@STREAM@start@ - \let\pgfplots@coord@stream@coord@=\pgfplots@process@one@point + \def\pgfplots@coord@stream@coord@{% + \def\pgfplots@set@perpointmeta@done{0}% + \pgfplotsplothandlersurveypoint + }% \def\pgfplots@coord@stream@end@{\pgfplots@PREPARE@COORD@STREAM@end@{#1}}% }% @@ -2539,6 +3760,16 @@ % optimized 'applistXX' structure: \pgfplotsapplistXXnewempty % + \csname pgfpmeta@\pgfplotspointmetainputhandler @activate\endcsname + \pgfplotsplothandlersurveystart + \pgfplotscoordstream@firstlast@init + % + \pgfkeyssetvalue{/data point/x}{\pgfplots@current@point@x}% + \pgfkeyssetvalue{/data point/y}{\pgfplots@current@point@y}% + \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. @@ -2577,17 +3808,21 @@ \pgfplotsmathdeclarepseudoconstant{meta}{% \let\pgfmathresult=\pgfplots@current@point@meta \ifx\pgfmathresult\pgfutil@empty - \pgfmathfloatcreate{0}{0.0}{0}% + \pgfplotscoordmath{meta}{parsenumber}{0}% \fi }% - \csname pgfpmeta@\pgfplotspointmetainputhandler @activate\endcsname % % %%%%%%%%%%%%%% % % Define \pgfplots@set@perpointmeta properly: \def\pgfplots@set@perpointmeta{% - \csname pgfpmeta@\pgfplotspointmetainputhandler @assign\endcsname + \if0\pgfplots@set@perpointmeta@done + \csname pgfpmeta@\pgfplotspointmetainputhandler @assign\endcsname + \def\pgfplots@set@perpointmeta@done{1}% + \pgfplots@set@perpointmeta@limits + \fi }% + % append limit updating to \pgfplots@set@perpointmeta : \if0\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname % We need to work with per point meta data. % So, also compute the data range on a per-plot basis! @@ -2597,37 +3832,43 @@ \ifx\pgfplots@metamin\pgfutil@empty \global\let\pgfplots@metamin=\pgfplots@invalidrange@metamin \t@pgfplots@tokb=\expandafter{\the\t@pgfplots@tokb - \pgfplotsmathfloatmin{\pgfplots@metamin}{\pgfplots@current@point@meta}% + \pgfplotscoordmath{meta}{min}{\pgfplots@metamin}{\pgfplots@current@point@meta}% \global\let\pgfplots@metamin=\pgfmathresult }% \else - \pgfmathfloatparsenumber{\pgfplots@metamin}% + \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@metamin}% \global\let\pgfplots@metamin=\pgfmathresult \fi \pgfkeysgetvalue{/pgfplots/point meta max}\pgfplots@metamax \ifx\pgfplots@metamax\pgfutil@empty \global\let\pgfplots@metamax=\pgfplots@invalidrange@metamax \t@pgfplots@tokb=\expandafter{\the\t@pgfplots@tokb - \pgfplotsmathfloatmax{\pgfplots@metamax}{\pgfplots@current@point@meta}% + \pgfplotscoordmath{meta}{max}{\pgfplots@metamax}{\pgfplots@current@point@meta}% \global\let\pgfplots@metamax=\pgfmathresult }% \else - \pgfmathfloatparsenumber{\pgfplots@metamax}% + \pgfplotscoordmath{meta}{parsenumber}{\pgfplots@metamax}% \global\let\pgfplots@metamax=\pgfmathresult \fi % - \t@pgfplots@toka=\expandafter{\pgfplots@set@perpointmeta}% - \edef\pgfplots@set@perpointmeta{% - \the\t@pgfplots@toka + \edef\pgfplots@set@perpointmeta@limits{% \noexpand\ifx\noexpand\pgfplots@current@point@meta\noexpand\pgfutil@empty \noexpand\else \the\t@pgfplots@tokb \noexpand\fi }% + \def\pgfplotsaxisupdatelimitsforpointmeta##1{% + \begingroup + \def\pgfplots@current@point@meta{##1}% + \pgfplots@set@perpointmeta@limits + \endgroup + }% \else % there is no point meta: \global\let\pgfplots@metamin=\pgfutil@empty \global\let\pgfplots@metamax=\pgfutil@empty + \let\pgfplots@set@perpointmeta@limits=\relax + \def\pgfplotsaxisupdatelimitsforpointmeta##1{}% \fi }% % This is the \pgfplots@coord@stream@end@ routine which is invoked by @@ -2644,14 +3885,17 @@ % % #1,#2: see \pgfplots@PREPARE@COORD@STREAM \def\pgfplots@PREPARE@COORD@STREAM@end@#1{% + \pgfkeysvalueof{/pgfplots/execute at end survey}% + \pgfkeyssetvalue{/pgfplots/mesh/num points}{\pgfplots@current@point@coordindex}% + \pgfplotsplothandlersurveyend \ifx\pgfplots@metamin\pgfutil@empty \else \if\pgfplots@axiswide@metamin@autocompute1% - \pgfplotsmathfloatmin{\pgfplots@axiswide@metamin}{\pgfplots@metamin}% + \pgfplotscoordmath{meta}{min}{\pgfplots@axiswide@metamin}{\pgfplots@metamin}% \global\let\pgfplots@axiswide@metamin=\pgfmathresult \fi \if\pgfplots@axiswide@metamax@autocompute1% - \pgfplotsmathfloatmax{\pgfplots@axiswide@metamax}{\pgfplots@metamax}% + \pgfplotscoordmath{meta}{max}{\pgfplots@axiswide@metamax}{\pgfplots@metamax}% \global\let\pgfplots@axiswide@metamax=\pgfmathresult \fi \fi @@ -2677,7 +3921,7 @@ \ifpgfplots@stackedmode \pgfplots@stacked@endplot \fi - \ifpgfplots@coord@stream@isfirst + \ifx\pgfplots@currentplot@firstcoord@x\pgfutil@empty \pgfplots@warning{the current plot has no coordinates (or all have been filtered away)}% \else % Idea: use @@ -2688,10 +3932,12 @@ % to share plot specifications between error bars and plot % coordinates. Unfortunately, it is NOT sufficient to use % \tikzset - \pgfkeyssetvalue{/pgfplots/mesh/num points}{\pgfplots@current@point@coordindex}% \pgfplotspreparemeshkeydefaults% \pgfplots@PREPARE@COORD@STREAM@end@determinecoordsorting x% \pgfplots@PREPARE@COORD@STREAM@end@determinecoordsorting y% + \t@pgfplots@tokc=\expandafter{\pgfplots@addplot@survey@@optionlist,% + /pgfplots/.cd,/pgfplots/every axis plot post}% + \edef\pgfplots@addplot@survey@@optionlist{\the\t@pgfplots@tokc}% \ifpgfplots@curplot@isirrelevant % for \label commands: \expandafter\pgfplots@rememberplotspec@for@label\expandafter{\pgfplots@addplot@survey@@optionlist}% @@ -2703,12 +3949,8 @@ \t@pgfplots@toka=\expandafter{\pgfplots@addplot@survey@@optionlist}% % ATTENTION: do NOT call list macros from here on! % - \ifpgfplots@datascaletrafo@initialised - \pgfplots@addplot@get@named@startendpoints@command\pgfplots@loc@TMPa - \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}% - \else - \t@pgfplots@tokc={}% - \fi + \pgfplotsplothandlerserializestateto\pgfplots@loc@TMPa + \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}% % SERIALIZE RESULT: % % everything which has been accumulated so far (including the @@ -2745,18 +3987,21 @@ \noexpand\pgfkeyssetvalue{/pgfplots/samples at}{\pgfplots@plot@samples@at}% \noexpand\pgfkeyssetvalue{/pgfplots/mesh/rows}{\pgfkeysvalueof{/pgfplots/mesh/rows}}% \noexpand\pgfkeyssetvalue{/pgfplots/mesh/cols}{\pgfkeysvalueof{/pgfplots/mesh/cols}}% + \noexpand\pgfkeyssetvalue{/pgfplots/mesh/num points}{\pgfkeysvalueof{/pgfplots/mesh/num points}}% % either '+' or '-' : \noexpand\pgfkeyssetvalue{/pgfplots/x coord sorting}{\pgfkeysvalueof{/pgfplots/x coord sorting}}% \noexpand\pgfkeyssetvalue{/pgfplots/y coord sorting}{\pgfkeysvalueof{/pgfplots/y coord sorting}}% % \noexpand\pgfplots@initzerolevelhandler - \the\t@pgfplots@tokc% named start/end points (if already available) \noexpand\pgfplots@define@currentplotstyle@as{\the\t@pgfplots@toka}% remember 'current plot style' % per-point meta data ranges which apply only to % this plot: \noexpand\xdef\noexpand\pgfplots@metamin{\pgfplots@metamin}% \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\pgfplotsaxisfilteredcoordsaway{\pgfplotsaxisfilteredcoordsaway}% + \noexpand\def\noexpand\pgfplotsaxisplothasjumps{\pgfplotsaxisplothasjumps}% }% {% draw command: \noexpand\path% @@ -2803,234 +4048,363 @@ \pgfplots@end@plot }% -% PRECONDITION: must be called inside of -% \pgfplots@PREPARE@COORD@STREAM@end@. + +% A routine which transforms the current set of +% \pgfplots@current@point@[xyz] values to the coordinate system +% accepted by the actual axis. +\def\pgfplotsaxistransformfromdatacs{% + \pgfkeyslet{/data point/x}\pgfplots@current@point@x + \pgfkeyslet{/data point/y}\pgfplots@current@point@y + \pgfkeyslet{/data point/z}\pgfplots@current@point@z + \pgfplotsaxistransformcs + {\pgfkeysvalueof{/pgfplots/data cs}} + {\pgfkeysvalueof{/pgfplots/@expected axis cs}}% + \pgfkeysgetvalue{/data point/x}\pgfplots@current@point@x + \pgfkeysgetvalue{/data point/y}\pgfplots@current@point@y + \pgfkeysgetvalue{/data point/z}\pgfplots@current@point@z +}% + +% Changes '/data point/[xyz]' to the new coordinate system +% (cs) designated by '#2'. % -% POSTCONDITION: -% assigns '/pgfplots/#1 coord sorting=[+-]' -% i.e. whether #1 (x or y or z) coordinates are in ascending (+) ordering or in -% descending order (-). -\def\pgfplots@PREPARE@COORD@STREAM@end@determinecoordsorting#1{% - \pgfplots@if{pgfplots@#1islinear}{% - \pgfmathfloatlessthan@ - {\csname pgfplots@currentplot@firstcoord@#1\endcsname} - {\csname pgfplots@currentplot@lastcoord@#1\endcsname}% - }{% - \pgfplotsmathlessthan - {\csname pgfplots@currentplot@firstcoord@#1\endcsname} - {\csname pgfplots@currentplot@lastcoord@#1\endcsname}% - }% - \ifpgfmathfloatcomparison - \pgfkeyssetvalue{/pgfplots/#1 coord sorting}{+}% +% #1: the actual coordinate system's name +% #2: the desired coordinate system's name +% +% PRECONDITION: '/data point/[xyz]' contain the current +% point's coordinates in the '#1' system. The z coordinate is ignored for 2d plots (or +% for coordinate systems which are inherently two-dimensional). +% +% POSTCONDITION: 'data point/[xyz]' contain same point as +% before, but represented in the '#2' system. +% +% The coordinate system transformations must be defined, +% see \pgfplotsdefinecstransform. +% +% Example: +% \pgfkeyssetvalue{/data point/x}{90} +% \pgfkeyssetvalue{/data point/y}{1} +% \pgfplotsaxistransformcs{polar}{cart} +% --> +% \pgfkeysvalueof{/data point/x}= 0 +% \pgfkeysvalueof{/data point/y}= 1 +\def\pgfplotsaxistransformcs#1#2{% + \edef\pgfplots@loc@TMPa{#1}% + \edef\pgfplots@loc@TMPb{#2}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + % nothing to do \else - \pgfkeyssetvalue{/pgfplots/#1 coord sorting}{-}% + \pgfutil@ifundefined{pgfp@transform@\pgfplots@loc@TMPa @to@\pgfplots@loc@TMPb}{% + \pgfutil@ifundefined{pgfp@transform@\pgfplots@loc@TMPa @to@cart}{% + \pgfplotsaxistransformcs@error + }{% + \pgfplotsaxistransformcs{#1}{cart}% + \pgfplotsaxistransformcs{cart}{#2}% + }% + }{% + \csname pgfp@transform@\pgfplots@loc@TMPa @to@\pgfplots@loc@TMPb\endcsname + }% \fi }% -% Assigns default values to 'rows' and 'cols' in case -% their values are empty. +% Defines a new coordinate transformation for use in +% \pgfplotsaxistransformcs. +% #1: the source coordinate system +% #2: the target coordinate system +% #3: the transformation code. % -% PRECONDITION: -% The values of -% - '/pgfplots/mesh/rows' -% - '/pgfplots/mesh/cols' -% - '/pgfplots/mesh/num points' -% - \pgfplotsscanlinelength -% - '/pgfplots/mesh/ordering' -% are assigned properly. +% @see \pgfplotsaxistransformcs for what #3 should do. % -% POSTCONDITION: -% 'rows' and 'cols' now incorporates \pgfplotsscanlinelength if -% their values had been empty. However, there may still be empty -% values. -% -% @see \pgfplotsautocompletemeshkeys -\def\pgfplotspreparemeshkeydefaults{% - \pgfplots@autocomplete@meshkeys0% +% This does also declare a coordinate system for use in 'data cs'. +% The minimal requirements are to define the transformations from and +% to "cart" (cartesian coordinates). +% +\def\pgfplotsdefinecstransform#1#2#3{% + \expandafter\def\csname pgfp@transform@#1@to@#2\endcsname{#3}% +}% + +\pgfplotsdefinecstransform{polar}{cart}{% + \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/x}}% + \let\pgfplots@current@point@x=\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/y}}% + \let\pgfplots@current@point@y=\pgfmathresult + \pgfplotsmathpoltocart\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@x@\pgfplots@current@point@y@ + \pgfplotscoordmath{x}{parsenumber}{\pgfplots@current@point@x@}% + \pgfkeyslet{/data point/x}\pgfmathresult + \pgfplotscoordmath{y}{parsenumber}{\pgfplots@current@point@y@}% + \pgfkeyslet{/data point/y}\pgfmathresult +}% +\pgfplotsdefinecstransform{cart}{polar}{% + \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/x}}% + \let\pgfplots@current@point@x=\pgfmathresult + \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/y}}% + \let\pgfplots@current@point@y=\pgfmathresult + \pgfplotsmathcarttopol\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@x@\pgfplots@current@point@y@ + \pgfplotscoordmath{x}{parsenumber}{\pgfplots@current@point@x@}% + \pgfkeyslet{/data point/x}\pgfmathresult + \pgfplotscoordmath{y}{parsenumber}{\pgfplots@current@point@y@}% + \pgfkeyslet{/data point/y}\pgfmathresult +}% + +\pgfplotsdefinecstransform{polarrad}{polar}{% + \pgfplotsgetcoordmathfor{default}\let\pgfplots@coordmath@id=\pgfplotsretval + \pgfutil@ifundefined{pgfp@polarradscale@\pgfplots@coordmath@id}{% + \pgfplotscoordmath{default}{parsenumber}{57.2957795130823}% + \expandafter\global\expandafter\let\csname pgfp@polarradscale@\pgfplots@coordmath@id\endcsname=\pgfmathresult + }{}% + % + \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/x}}% + \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\csname pgfp@polarradscale@\pgfplots@coordmath@id\endcsname}}% + \pgfkeyslet{/data point/x}\pgfmathresult +}% +\pgfplotsdefinecstransform{polar}{polarrad}{% + \pgfplotsgetcoordmathfor{default}\let\pgfplots@coordmath@id=\pgfplotsretval + \pgfutil@ifundefined{pgfp@polarradiscale@\pgfplots@coordmath@id}{% + \pgfplotscoordmath{default}{parsenumber}{0.0174532925199433}% + \expandafter\global\expandafter\let\csname pgfp@polarradiscale@\pgfplots@coordmath@id\endcsname=\pgfmathresult + }{}% + % + \pgfplotscoordmath{default}{parsenumber}{\pgfkeysvalueof{/data point/x}}% + \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\csname pgfp@polarradiscale@\pgfplots@coordmath@id\endcsname}}% +}% +\pgfplotsdefinecstransform{polarrad}{cart}{% + \pgfplotsaxistransformcs{polarrad}{polar}% + \pgfplotsaxistransformcs{polar}{cart}% +}% +\pgfplotsdefinecstransform{cart}{polarrad}{% + \pgfplotsaxistransformcs{cart}{polar}% + \pgfplotsaxistransformcs{polar}{polarrad}% }% -% Completes and sanitizes 'mesh/rows' and 'mesh/cols' such that they -% have useful integer values afterwards. -% -% This method works similarly to \pgfplotspreparemeshkeydefaults. -% However, it really completes values and issues error messages if -% that proves to be impossible. +\def\pgfplotsaxistransformcs@error{% + \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{% + \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}% +}% +\def\pgfplotsaxisserializedatapoint@private{% + \let\pgfplotsretval=\pgfplots@current@point@meta +}% +\def\pgfplotsaxisdeserializedatapointfrom@private#1{% + \def\pgfplots@current@point@meta{#1}% +}% +% Restores the variables serialized in '#1'. % -% PRECONDITION: -% The values of -% - '/pgfplots/mesh/rows' -% - '/pgfplots/mesh/cols' -% - '/pgfplots/mesh/num points' -% - '/pgfplots/mesh/ordering' -% are assigned properly. -% If -% - \pgfplotsscanlinelength -% exists and is positive, it may also be used. +% As a side--effect, the macro +% \pgfplotsaxisdeserializedatapointfrom@private@lastvalue will contain +% the serialized part which is specific to pgfplots (i.e. the private +% parts which can be read with +% \pgfplotsaxisdeserializedatapointfrom@private) +\def\pgfplotsaxisdeserializedatapointfrom#1{% + \expandafter\pgfplotsaxisdeserializedatapointfrom@#1\pgfplots@EOI +}% +\def\pgfplotsaxisdeserializedatapointfrom@#1;#2\pgfplots@EOI{% + \def\pgfplotsaxisdeserializedatapointfrom@private@lastvalue{#1}% + \pgfplotsaxisdeserializedatapointfrom@private{#1}% + \pgfplotsplothandlerdeserializepointfrom{#2}% +}% + +% Handle User-defined parts which should be serialized as well. +% This preparation tool should be called at the start of both, survey +% and visualization phase. +% +% @PRECONDITION +% - the macros +% \pgfplotsaxisserializedatapoint@private +% \pgfplotsaxisdeserializedatapointfrom@private +% are known and valid. +% - '/pgfplots/visualization depends on' contains its correct value. % -% POSTCONDITION: -% 'rows' and 'cols' have useful integer values. -\def\pgfplotsautocompletemeshkeys{% - \pgfplots@autocomplete@meshkeys1% -}% -\def\pgfplots@autocomplete@meshkeys#1{% - \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplotsplothandlermesh@rows - \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplotsplothandlermesh@cols - \pgfkeysgetvalue{/pgfplots/mesh/num points}\pgfplotsplothandlermesh@numpoints - \edef\pgfplotsplothandlermesh@numpoints{\pgfplotsplothandlermesh@numpoints}% - \edef\pgfplotsplothandlermesh@cols{\pgfplotsplothandlermesh@cols}% - \edef\pgfplotsplothandlermesh@rows{\pgfplotsplothandlermesh@rows}% - \ifpgfplots@curplot@threedim - \ifx\pgfplotsplothandlermesh@rows\pgfutil@empty - \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty - \pgfutil@ifundefined{pgfplotsscanlinelength}{\def\pgfplotsscanlinelength{-1}}{}% - \ifpgfplots@scanline@verbose - \ifnum\pgfplotsscanlinelength>0 - % we have scanlinelength set! Use it: - \message{PGFPlots: Scanline length is \pgfplotsscanlinelength.}% - \else - \ifnum\pgfplotsscanlinelength=-2 - \message{PGFPlots: Scanline length could not be determined since multiple, different scan line lengths have been found.}% - \else - \message{PGFPlots: No end-of-scanline marker found in input stream.}% - \fi - \fi - \fi - \ifnum\pgfplotsscanlinelength>0 - % we have scanlinelength set! Use it: - \if\pgfplots@plot@mesh@ordering0% - % ordering = x varies= rowwise -> scanline is cols! - \edef\pgfplotsplothandlermesh@cols{\pgfplotsscanlinelength}% - \else - % ordering = y varies = colwise: scanline is rows! - \edef\pgfplotsplothandlermesh@rows{\pgfplotsscanlinelength}% - \fi - \else - \if1#1% - % try to get reasonable values: - \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty - \pgfplots@error{Sorry, 'plot mesh' needs either '[mesh/rows=<N>]' or '[mesh/cols=<N>]' set - or at least '[mesh/num points=<N>]'. But it did not find any of them...}% - \def\pgfplotsplothandlermesh@cols{5}% - \def\pgfplotsplothandlermesh@rows{5}% - \else - % We don't have rows/cols. Well, try using - % sqrt(num points) for both of them! - \ifnum\pgfplotsplothandlermesh@numpoints<16380 - \pgfmath@basic@sqrt@{\pgfplotsplothandlermesh@numpoints}% - \else - \pgfmathfloatparsenumber{\pgfplotsplothandlermesh@numpoints}% - \pgfmathfloatsqrt@{\pgfmathresult}% - \pgfmathfloattofixed{\pgfmathresult}% - \fi - \begingroup - % Try whether this rows*rows yields numpoints: - \afterassignment\pgfplots@gobble@until@relax - \c@pgf@counta=\pgfmathresult\relax - \c@pgf@countb=\c@pgf@counta - \multiply\c@pgf@counta by\c@pgf@counta - \def\pgfplotsretval{1}% - \ifnum\c@pgf@counta=\pgfplotsplothandlermesh@numpoints\relax - % ok, rows*rows = numpoints. - \xdef\pgfplots@glob@TMPa{\the\c@pgf@countb}% - \else - % oh. Did not work. Check for rounding errors: - \c@pgf@counta=\c@pgf@countb - \advance\c@pgf@counta by1 - \c@pgf@countb=\c@pgf@counta - \multiply\c@pgf@counta by\c@pgf@counta - \ifnum\c@pgf@counta=\pgfplotsplothandlermesh@numpoints - % ok, (rows+1)*(rows+1) = numpoints. - \xdef\pgfplots@glob@TMPa{\the\c@pgf@countb}% - \else - % no... did not work. num points doesn't - % appear to be a squared number. - \def\pgfplotsretval{0}% - \xdef\pgfplots@glob@TMPa{5}% - \fi - \fi - \if\pgfplotsretval1 - \pgfplots@warning{% - 'plot mesh' did not find '[mesh/rows=<N>]' or '[mesh/cols=<N>]'. - Assuming [mesh/rows=\pgfplots@glob@TMPa,mesh/cols=\pgfplots@glob@TMPa] - as sqrt(num points) = sqrt(\pgfplotsplothandlermesh@numpoints) [ = \pgfmathresult].}% - \else - \pgfplots@error{Sorry, 'plot mesh' needs either '[mesh/rows=<N>]' or '[mesh/cols=<N>]' set, - but it did not find any of them. - I also tried rows = sqrt(num points) = sqrt(\pgfplotsplothandlermesh@numpoints) = \pgfmathresult\space without success.}% - \fi - \endgroup - \let\pgfplotsplothandlermesh@rows=\pgfplots@glob@TMPa - \let\pgfplotsplothandlermesh@cols=\pgfplots@glob@TMPa - \fi - \else - % #1=0 -> leave them empty. - \fi - \fi - \fi - \fi - \if1#1% - \ifx\pgfplotsplothandlermesh@rows\pgfutil@empty - \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty - \else - % Compute 'rows' out of 'num points' and 'cols': - \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty - \pgfplots@error{Sorry, matrix input needs a valid '[mesh/num points=<N>]' variable if only one of '[mesh/rows=<N>]' or '[mesh/cols=<N>]' is given.}% - \def\pgfplotsplothandlermesh@numpoints{100}% - \fi - \begingroup - \c@pgf@counta=\pgfplotsplothandlermesh@numpoints\relax - \divide\c@pgf@counta by\pgfplotsplothandlermesh@cols\relax - \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}% - \endgroup - \let\pgfplotsplothandlermesh@rows=\pgfplots@glob@TMPa - \fi +% @POSTCONDITION +% Both, +% \pgfplotsaxisserializedatapoint@private +% and +% \pgfplotsaxisdeserializedatapointfrom@private +% have been patched to incorporate the '/pgfplots/visualization +% depends on' feature. +% +\def\pgfplots@prepare@visualization@dependencies{% + \pgfkeysgetvalue{/pgfplots/visualization depends on/list}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + % SERIALIZATION format: + % visualization depends on={{value1}\as \macro1, {<value2>}\as \macro2,...} + % -> + % {<original private data>}<\macro1>{<value1>}<\macro2>{<value2>}...<\macroN>{<valueN>} + % + % prepare + % \t@pgfplots@tokb={<\macro1>{<value1>}<\macro2>{<value2>}...<\macroN>{<valueN>}} + \t@pgfplots@tokb={}% + % + % prepare + % \t@pgfplots@tokc={<\macro1><\macro2><\macro3>...} + \t@pgfplots@tokc={}% + \expandafter\pgfplotsutilforeachcommasep\expandafter{\pgfplots@loc@TMPa}\as\pgfplots@loc@TMPa{% + \ifx\pgfplots@loc@TMPa\pgfutil@empty \else - \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty - % Compute 'cols' out of 'num points' and 'rows': - \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty - \pgfplots@error{Sorry, matrix input needs a valid '[mesh/num points=<N>]' variable if only one of '[mesh/cols=<N>]' or '[mesh/rows=<N>]' is given.}% - \def\pgfplotsplothandlermesh@numpoints{100}% - \fi + \expandafter\pgfplots@prepare@visualization@depends@on\pgfplots@loc@TMPa\pgfplots@EOI% + \fi + }% + % Step 1: modify the SERIALIZATION method: + \t@pgfplots@toka=\expandafter{\pgfplotsaxisserializedatapoint@private}% + \edef\pgfplotsaxisserializedatapoint@private{% + \the\t@pgfplots@tokc + \the\t@pgfplots@toka + % nothing is expanded here, only \t@pgfplots@tokb + \noexpand\t@pgfplots@toka=\noexpand\expandafter{\noexpand\pgfplotsretval}% + \noexpand\edef\noexpand\pgfplotsretval{{\noexpand\the\t@pgfplots@toka},\the\t@pgfplots@tokb}% + }% + % Step 2: modify the DESERIALIZATION method: + \let\pgfplotsaxisdeserializedatapointfrom@private@orig=\pgfplotsaxisdeserializedatapointfrom@private + \let\pgfplotsaxisdeserializedatapointfrom@private=\pgfplotsaxisdeserializedatapointfrom@private@withdeplist + \fi + % + \pgfkeysgetvalue{/pgfplots/execute for finished point}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key + \else + \expandafter\def\expandafter\pgfplotsaxisserializedatapoint@private\expandafter{% + \pgfplotsaxisserializedatapoint@private + \pgfkeysvalueof{/pgfplots/execute for finished point}% + }% + \fi +}% +\def\pgfplots@prepare@visualization@depends@on#1\pgfplots@EOI{% + \pgfutil@in@\as{#1}% + \ifpgfutil@in@ + % ok, we have the '<content>\as<\macro>' syntax: + \pgfplots@prepare@visualization@depends@on@#1\pgfplots@EOI + \else + \pgfplots@prepare@visualization@depends@on@preparetype@checkvalue#1value\pgfplots@EOI + \ifpgfutil@in@ + % ok, then it should be 'value <\macro>'. + % extract the <\macro>: + \def\pgfplots@loc@TMPa value{\pgfplots@loc@TMPb}% + \def\pgfplots@loc@TMPb##1{\pgfplots@loc@TMPc ##1}% this step should remove leading white spaces + \def\pgfplots@loc@TMPc##1\pgfplots@EOI{% + % sanitize: check if ##1 is a defined macro: + \begingroup + \escapechar=-1 + \xdef\pgfplots@glob@TMPa{\string##1}% + \endgroup + \pgfutil@ifundefined{\pgfplots@glob@TMPa}{% \begingroup - \c@pgf@counta=\pgfplotsplothandlermesh@numpoints\relax - \divide\c@pgf@counta by\pgfplotsplothandlermesh@rows\relax - \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}% + \t@pgfplots@toka={##1}% + \pgfplotsthrow{invalid argument} + {\pgfplots@loc@TMPa}% + {Sorry, `visualization depends on=value <\string\macro>' expected a defined control sequence name instead of `\the\t@pgfplots@toka'. Please make sure `\the\t@pgfplots@toka' is a properly defined macro or use the `visualization depends on=value <content> \string\as <\string\macro>' syntax instead}% + \pgfeov \endgroup - \let\pgfplotsplothandlermesh@cols=\pgfplots@glob@TMPa - \fi - \fi - \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty - \c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@rows\relax - \multiply\c@pgfplots@scanlineindex by \pgfplotsplothandlermesh@cols\relax - \edef\pgfplotsplothandlermesh@numpoints{\the\c@pgfplots@scanlineindex}% - \fi - % - \c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@rows\relax - \multiply\c@pgfplots@scanlineindex by\pgfplotsplothandlermesh@cols\relax - \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@numpoints\relax - \else - \ifcase\pgfplots@mesh@checkmode\relax - % mesh/check=false - \def\pgfplots@loc@TMPa##1{}% - \or - % mesh/check=warning - \def\pgfplots@loc@TMPa##1{\pgfplots@warning{##1}}% - \or - % mesh/check=error - \def\pgfplots@loc@TMPa##1{\pgfplots@error{##1}}% - \fi - \pgfplots@loc@TMPa{the arguments of [mesh/rows=\pgfplotsplothandlermesh@rows,mesh/cols=\pgfplotsplothandlermesh@cols] assume \the\c@pgfplots@scanlineindex\space points, but I got actually N = \pgfplotsplothandlermesh@numpoints\space points! The data matrix appears to be incomplete or overcomplete!? [Use mesh/check=false to disable this message]}% - \fi + }{% + \def\pgfplots@loc@TMPa{% + \pgfplots@prepare@visualization@depends@on@ value}% + \expandafter\pgfplots@loc@TMPa##1\as##1\pgfplots@EOI + }% + }% + \pgfplots@loc@TMPa#1\pgfplots@EOI + \else + % then, I expect '<\macro>'. + % sanitize: check if #1 is a defined macro: + \begingroup + \escapechar=-1 + \xdef\pgfplots@glob@TMPa{\string#1}% + \endgroup + \pgfutil@ifundefined{\pgfplots@glob@TMPa}{% + \begingroup + \t@pgfplots@toka={#1}% + \pgfplotsthrow{invalid argument} + {\pgfplots@loc@TMPa}% + {Sorry, `visualization depends on' expected a defined control sequence name instead of `\the\t@pgfplots@toka'. Please make sure `\the\t@pgfplots@toka' is a properly defined macro or use the `visualization depends on=<expression> \string\as <\string\macro>' syntax instead}% + \pgfeov + \endgroup + }{% + \expandafter\pgfplots@prepare@visualization@depends@on@#1\as#1\pgfplots@EOI + }% \fi + \fi +}% +\def\pgfplots@prepare@visualization@depends@on@#1\as#2\pgfplots@EOI{% + \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}% +}% +\def\pgfplots@prepare@visualization@depends@on@preparetype#1\as#2{% + \pgfplots@prepare@visualization@depends@on@preparetype@checkvalue#1value\pgfplots@EOI + \ifpgfutil@in@ + \pgfplots@prepare@visualization@depends@on@preparetype@value#1\as{#2}% no braces here. \else - % 2d visualization has no mesh: - \edef\pgfplotsplothandlermesh@rows{\pgfplotsplothandlermesh@numpoints}% - \def\pgfplotsplothandlermesh@cols{1}% + \pgfplots@prepare@visualization@depends@on@preparetype@expr{#1}\as{#2}% + \fi +}% +\def\pgfplots@prepare@visualization@depends@on@preparetype@expr#1\as#2{% + \pgflibraryfpuifactive{% + \def#2{% + \pgfmathparse{#1}% + \pgfmathfloattofixed{\pgfmathresult}% + \expandafter\let\csname \string#2@value\endcsname=\pgfmathresult + }% + }{% + \def#2{% + \pgfmathparse{#1}% + \expandafter\let\csname \string#2@value\endcsname=\pgfmathresult + }% + }% +} +\def\pgfplots@prepare@visualization@depends@on@preparetype@checkvalue#1value#2\pgfplots@EOI{% + \def\pgfplots@loc@TMPa{#1}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \pgfutil@in@true + \else + \pgfutil@in@false + \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 +} + +\def\pgfplotsaxisdeserializedatapointfrom@private@withdeplist#1{% + \pgfplotsaxisdeserializedatapointfrom@private@withdeplist@#1\pgfplots@EOI +}% +\def\pgfplotsaxisdeserializedatapointfrom@private@withdeplist@#1,{% + \pgfplotsaxisdeserializedatapointfrom@private@orig{#1}% + \pgfplotsaxisdeserializedatapointfrom@private@withdeplist@@ +}% +\def\pgfplotsaxisdeserializedatapointfrom@private@withdeplist@@#1{% + \def\pgfplots@loc@TMPa{#1}% + \ifx\pgfplots@loc@TMPa\pgfplots@EOI + \else + \afterassignment\pgfplotsaxisdeserializedatapointfrom@private@withdeplist@@ + \expandafter\def\expandafter#1% \fi - % - \def\pgfplots@loc@TMPa{\pgfkeyssetvalue{/pgfplots/mesh/rows}}% - \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplotsplothandlermesh@rows}% - \def\pgfplots@loc@TMPa{\pgfkeyssetvalue{/pgfplots/mesh/cols}}% - \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplotsplothandlermesh@cols}% +}% + +% PRECONDITION: must be called inside of +% \pgfplots@PREPARE@COORD@STREAM@end@. +% +% POSTCONDITION: +% assigns '/pgfplots/#1 coord sorting=[+-]' +% i.e. whether #1 (x or y or z) coordinates are in ascending (+) ordering or in +% descending order (-). +\def\pgfplots@PREPARE@COORD@STREAM@end@determinecoordsorting#1{% + \pgfplotscoordmath{#1}{if less than} + {\csname pgfplots@currentplot@firstcoord@#1\endcsname}% + {\csname pgfplots@currentplot@lastcoord@#1\endcsname}% + {\pgfkeyssetvalue{/pgfplots/#1 coord sorting}{+}}% + {\pgfkeyssetvalue{/pgfplots/#1 coord sorting}{-}}% }% % Prepares a macro \pgfplots@PREPARE@process@errorbar@for@dir##1 @@ -3100,7 +4474,7 @@ \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\pgfplots@update@limits@for@one@point + \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 @@ -3115,41 +4489,48 @@ \pgfplots@if{pgfplots@#1islinear}{% \ifcase\csname pgfplots@errorbars@#1mode\endcsname\relax % fixed absolute error. - \pgfmathfloatparsenumber{\csname pgfplots@errorbars@#1fixed\endcsname}% + \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% - \pgfmathfloatadd@ - {\csname pgfplots@current@point@#1\endcsname}% - {\csname pgfplots@error@coord@#1\endcsname}% + \def\pgfplots@loc@TMPb{add}% \else - \pgfmathfloatsubtract@ - {\csname pgfplots@current@point@#1\endcsname}% - {\csname pgfplots@error@coord@#1\endcsname}% + \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: - \pgfmathfloatparsenumber{\csname pgfplots@errorbars@#1rel\endcsname}% + \pgfplotscoordmath{#1}{parsenumber}{\csname pgfplots@errorbars@#1rel\endcsname}% \let\pgfplots@loc@TMPb=\pgfmathresult % % +1: - \pgfmathfloatcreate{1}{1.0}{0}% + \pgfplotscoordmath{#1}{parsenumber}{1}% \let\pgfplots@loc@TMPa=\pgfmathresult % % Prepare '1 + err': - \pgfmathfloatadd@{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}% + \pgfplotscoordmath{#1}{op}{add}{% + {\pgfplots@loc@TMPa}% + {\pgfplots@loc@TMPb}% + }% \expandafter\let\csname pgfplots@error@coord@#1@+\endcsname=\pgfmathresult % % Prepare '1 - err': - \pgfmathfloatsubtract@{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}% + \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{% - \pgfmathfloatmultiply@ + \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 }% @@ -3158,20 +4539,20 @@ \edef\pgfplots@error@coord{\csname pgfplots@current@point@#1@error\endcsname}% \ifx\pgfplots@error@coord\pgfutil@empty \else - \pgfmathfloatparsenumber{\pgfplots@error@coord}% + \pgfplotscoordmath{#1}{parsenumber}{\pgfplots@error@coord}% \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% - \pgfmathfloatadd@ - {\csname pgfplots@current@point@#1\endcsname}% - {\pgfplots@error@coord}% + \def\pgfplots@loc@TMPb{add}% \else - \pgfmathfloatsubtract@ - {\csname pgfplots@current@point@#1\endcsname}% - {\pgfplots@error@coord}% + \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 \fi @@ -3183,9 +4564,10 @@ \else \pgfmathparse{1##1\pgfplots@error@coord}% \let\pgfplots@error@coord=\pgfmathresult - \pgfmathfloatmultiply@ + \pgfplotscoordmath{#1}{multiply}{% {\csname pgfplots@current@point@#1\endcsname} {\pgfplots@error@coord}% + }% \let\pgfplots@error@coord=\pgfmathresult \csname pgfplots@PREPARE@errorbar@stream@it@#1\endcsname \fi @@ -3204,52 +4586,58 @@ % \ifcase\csname pgfplots@errorbars@#1mode\endcsname % fixed absolute, log( x +- e_x ) - \pgfmathfloatparsenumber{\csname pgfplots@errorbars@#1fixed\endcsname}% + % + \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{% - \pgfmathfloatparsenumber{\csname pgfplots@current@point@#1@unfiltered\endcsname}% + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@current@point@#1@unfiltered\endcsname}% \let\pgfplots@loc@TMPa=\pgfmathresult \if +##1% - \pgfmathfloatadd@ - {\pgfplots@loc@TMPa}% - {\csname pgfplots@error@coord@#1\endcsname}% + \def\pgfplots@loc@op{add}% \else - \pgfmathfloatsubtract@ - {\pgfplots@loc@TMPa}% - {\csname pgfplots@error@coord@#1\endcsname}% + \def\pgfplots@loc@op{subtract}% \fi - \csname pgfplotsmathlog@#1@float\endcsname{\pgfmathresult}% + \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) - \pgfmathfloatparsenumber{\csname pgfplots@errorbars@#1rel\endcsname}% + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@errorbars@#1rel\endcsname}% \let\pgfplots@loc@TMPb=\pgfmathresult % % +1: - \pgfmathfloatcreate{1}{1.0}{0}% + \pgfplotscoordmath{default}{one}% \let\pgfplots@loc@TMPa=\pgfmathresult % % Prepare '1 + err': - \pgfmathfloatadd@{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}% - \csname pgfplotsmathlog@#1@float\endcsname{\pgfmathresult}% - \ifx\pgfmathresult\pgfutil@empty + \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: - \pgfmathfloattofixed{\pgfplots@loc@TMPb}% - \pgfplots@error{Sorry, log(1+\pgfmathresult) is undefined. Please provide a different argument for '/pgfplots/error bar/#1 fixed relative'.}% + \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 - \fi + }% \expandafter\let\csname pgfplots@error@coord@#1@+\endcsname=\pgfmathresult % % Prepare '1 - err': - \pgfmathfloatsubtract@{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}% - \csname pgfplotsmathlog@#1@float\endcsname{\pgfmathresult}% - \ifx\pgfmathresult\pgfutil@empty - % 1 + err <= 0 and log(1+err) is undefined: - \pgfmathfloattofixed{\pgfplots@loc@TMPb}% - \pgfplots@error{Sorry, log(1-\pgfmathresult) is undefined. Please provide a different argument for '/pgfplots/error bar/#1 fixed relative'.}% + \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 - \fi + }% \expandafter\let\csname pgfplots@error@coord@#1@-\endcsname=\pgfmathresult % \expandafter\def\csname pgfplots@PREPARE@errorbar@process@#1@\endcsname##1{% @@ -3268,23 +4656,24 @@ \edef\pgfplots@error@coord{\csname pgfplots@current@point@#1@error\endcsname}% \ifx\pgfplots@error@coord\pgfutil@empty \else - \pgfmathfloatparsenumber{\pgfplots@error@coord}% + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@error@coord}% \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 - \pgfmathfloatparsenumber{\csname pgfplots@current@point@#1@unfiltered\endcsname}% + \pgfplotscoordmath{default}{parsenumber}{\csname pgfplots@current@point@#1@unfiltered\endcsname}% \let\pgfplots@loc@TMPa=\pgfmathresult \if +##1% - \pgfmathfloatadd@ - {\pgfplots@loc@TMPa}% - {\pgfplots@error@coord}% + \def\pgfplots@loc@op{add}% \else - \pgfmathfloatsubtract@ - {\pgfplots@loc@TMPa}% - {\pgfplots@error@coord}% + \def\pgfplots@loc@op{subtract}% \fi - \csname pgfplotsmathlog@#1@float\endcsname{\pgfmathresult}% + \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 \fi @@ -3296,34 +4685,36 @@ \edef\pgfplots@error@coord{\csname pgfplots@current@point@#1@error\endcsname}% \ifx\pgfplots@error@coord\pgfutil@empty \else - \pgfmathfloatparsenumber{\pgfplots@error@coord}% + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@error@coord}% \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 % - \pgfmathfloatcreate{1}{1.0}{0}% + \pgfplotscoordmath{default}{one}% \let\pgfplots@loc@TMPa=\pgfmathresult \if +##1% - \pgfmathfloatadd@ - {\pgfplots@loc@TMPa}% - {\pgfplots@error@coord}% + \def\pgfplots@loc@op{add}% \else - \pgfmathfloatsubtract@ - {\pgfplots@loc@TMPa}% - {\pgfplots@error@coord}% + \def\pgfplots@loc@op{subtract}% \fi - \csname pgfplotsmathlog@#1@float\endcsname{\pgfmathresult}% + \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 - \ifx\pgfplots@error@coord\pgfutil@empty - % -> log( <= 0 ) -> do nothing. - \else - \pgfmath@basic@add@ + \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 - \fi + }{% + % -> log( <= 0 ) -> do nothing. + }% \fi }% % @@ -3366,107 +4757,134 @@ % If there is no data range (for example because meta information is % not available or is not of numeric type), the trafo will simply % copy the input argument symbolically. +% +% Note: it does not hurt to call it multiple times. It checks automatically whether it already is up-to-date. \def\pgfplots@perpointmeta@preparetrafo{% - \let\pgfplots@current@point@meta=\pgfutil@empty - \pgfutil@ifundefined{pgfplots@metamax}{\let\pgfplots@metamax=\pgfutil@empty}{} - \ifpgfplots@warn@for@filter@discards - \global\let\pgfplots@perpointmeta@unboundedwarning@stop=\relax - \def\pgfplots@perpointmeta@unboundedwarning##1{% - \ifx\pgfplots@perpointmeta@unboundedwarning@stop\relax - \begingroup - \pgfmathfloattofixed{##1}% - \pgfplots@warning{The per point meta data `\pgfmathresult' (##1) (and probably others as well) is unbounded - using the minimum value instead.}% - \endgroup - \gdef\pgfplots@perpointmeta@unboundedwarning@stop{1}% - \fi - }% - \else - \def\pgfplots@perpointmeta@unboundedwarning##1{}% - \fi - \if m\pgfplots@colormap@access - % colormap access=map - \ifx\pgfplots@metamax\pgfutil@empty - \def\pgfplots@perpointmeta@trafo##1{% - \pgfmathfloatiffinite{##1}{% - \pgfmathfloattofixed@{##1}% - }{% - \def\pgfmathresult{0}% - \pgfplots@perpointmeta@unboundedwarning{##1}% - }% + \def\pgfplotspointmetarangeexponent{1}% pre-fill + \pgfutil@ifundefined{pgfplots@perpointmeta@trafo}{% + \let\pgfplots@current@point@meta=\pgfutil@empty + \pgfutil@ifundefined{pgfplots@metamax}{\let\pgfplots@metamax=\pgfutil@empty}{} + \ifpgfplots@warn@for@filter@discards + \global\let\pgfplots@perpointmeta@unboundedwarning@stop=\relax + \def\pgfplots@perpointmeta@unboundedwarning##1{% + \ifx\pgfplots@perpointmeta@unboundedwarning@stop\relax + \begingroup + \pgfplotscoordmath{meta}{tostring}{##1}% + \pgfplots@warning{The per point meta data `\pgfmathresult' (##1) (and probably others as well) is unbounded - using the minimum value instead.}% + \endgroup + \gdef\pgfplots@perpointmeta@unboundedwarning@stop{1}% + \fi }% - \def\pgfplots@perpointmeta@traforange{0:1000}% - \edef\pgfplotspointmetarange{0:1000}% \else - % The transformation is - % - % phi(m) = ( m- meta_min) * 1000/ (meta_max-meta_min). - % - % -> precompute the scaling factor! - \edef\pgfplots@loc@TMPa{\pgfplotscolormaprange}% - \ifnum\pgfplots@loc@TMPa=1000 - \else - \pgfplots@error{LOGIC ERROR: sorry, I have hard-coded the assumption \string\pgfplotscolormaprange = 1000, but now it is \pgfplots@loc@TMPa.}% - \fi - \if\pgfplots@perpointmeta@rel@choice0% - % point meta rel=axis wide: - \edef\pgfplotspointmetarange{\pgfplots@axiswide@metamin:\pgfplots@axiswide@metamax}% - % Now, prepare the trafo as such. - % It assigns \pgfmathresult (in fixed point). + \def\pgfplots@perpointmeta@unboundedwarning##1{}% + \fi + \if m\pgfplots@colormap@access + % colormap access=map + \ifx\pgfplots@metamax\pgfutil@empty \def\pgfplots@perpointmeta@trafo##1{% - \pgfmathfloatiffinite{##1}{% - \pgfmathfloatsubtract@{##1}{\pgfplots@axiswide@metamin}% - \expandafter\pgfmathfloatmultiply@\expandafter{\pgfmathresult}{\pgfplots@perpointmeta@trafo@factor}% - \expandafter\pgfmathfloattofixed@\expandafter{\pgfmathresult}% - }{% + \pgfplotscoordmath{meta}{if is}{##1}{u} + {% \def\pgfmathresult{0}% \pgfplots@perpointmeta@unboundedwarning{##1}% - }% - }% - \pgfmathfloatsubtract@{\pgfplots@axiswide@metamax}{\pgfplots@axiswide@metamin}% - \else - % point meta rel=per plot: - \edef\pgfplotspointmetarange{\pgfplots@metamin:\pgfplots@metamax}% - % Now, prepare the trafo as such. - % It assigns \pgfmathresult (in fixed point). - \def\pgfplots@perpointmeta@trafo##1{% - \pgfmathfloatiffinite{##1}{% - \pgfmathfloatsubtract@{##1}{\pgfplots@metamin}% - \expandafter\pgfmathfloatmultiply@\expandafter{\pgfmathresult}{\pgfplots@perpointmeta@trafo@factor}% - \expandafter\pgfmathfloattofixed@\expandafter{\pgfmathresult}% }{% - \def\pgfmathresult{0}% - \pgfplots@perpointmeta@unboundedwarning{##1}% + \pgfplotscoordmath{meta}{tofixed}{##1}% }% }% - \pgfmathfloatsubtract@{\pgfplots@metamax}{\pgfplots@metamin}% + \def\pgfplots@perpointmeta@traforange{0:1000}% + \edef\pgfplotspointmetarange{0:1000}% + \else + % The transformation is + % + % phi(m) = ( m- meta_min) * 1000/ (meta_max-meta_min). + % + % -> precompute the scaling factor! + \edef\pgfplots@loc@TMPa{\pgfplotscolormaprange}% + \ifnum\pgfplots@loc@TMPa=1000 + \else + \pgfplots@error{LOGIC ERROR: sorry, I have hard-coded the assumption \string\pgfplotscolormaprange = 1000, but now it is \pgfplots@loc@TMPa.}% + \fi + \if\pgfplots@perpointmeta@rel@choice0% + % point meta rel=axis wide: + \pgfplots@perpointmeta@preparetrafo@initfrom{pgfplots@axiswide@}% + \else + \pgfplots@perpointmeta@preparetrafo@initfrom{pgfplots@}% + \fi \fi - \let\pgfplots@loc@TMPa=\pgfmathresult - \pgfmathfloatcreate{1}{1.0}{3}% - \expandafter\pgfmathfloatdivide@\expandafter{\pgfmathresult}{\pgfplots@loc@TMPa}% - \let\pgfplots@perpointmeta@trafo@factor=\pgfmathresult - % - % Expands to the transformation range as 'a:b': - \def\pgfplots@perpointmeta@traforange{0:1000}% - \fi - \else - % colormap access=direct - \def\pgfplots@perpointmeta@trafo##1{ - \pgfmathfloatiffinite{##1}{% - \pgfmathfloattofixed@{##1}% - }{% - \def\pgfmathresult{0}% - \pgfplots@perpointmeta@unboundedwarning{##1}% + \else + % colormap access=direct + \def\pgfplots@perpointmeta@trafo##1{% + \pgfplotscoordmath{meta}{if is}{##1}{u}{% + \def\pgfmathresult{0}% + \pgfplots@perpointmeta@unboundedwarning{##1}% + }{% + \pgfplotscoordmath{meta}{tofixed}{##1}% + }% }% - }% - \def\pgfplots@perpointmeta@traforange{0:0}% - \edef\pgfplotspointmetarange{\pgfplots@metamin:\pgfplots@metamax}% - \fi - \edef\pgfplotspointmetatransformedrange{\pgfplots@perpointmeta@traforange}% + \def\pgfplots@perpointmeta@traforange{0:0}% + \edef\pgfplotspointmetarange{\pgfplots@metamin:\pgfplots@metamax}% + \fi + \edef\pgfplotspointmetatransformedrange{\pgfplots@perpointmeta@traforange}% + }{}% }% -\def\pgfplots@perpointmeta@trafo@APPLY{% + +% Employs \csname #1metamin\endcsname and its metamax counterpart to +% initialize the trafo. +% +% This unifies the approaches for \pgfplots@axiswide@metamax and +% \pgfplots@metamax. +\def\pgfplots@perpointmeta@preparetrafo@initfrom#1{% + \edef\pgfplotspointmetarange{\csname #1metamin\endcsname:\csname #1max\endcsname}% + % Now, prepare the trafo as such. + % It assigns \pgfmathresult (in fixed point). + \def\pgfplots@perpointmeta@trafo##1{% + \pgfplotscoordmath{meta}{if is}{##1}{u}{% + \def\pgfmathresult{0}% + \pgfplots@perpointmeta@unboundedwarning{##1}% + }{% + \pgfplotscoordmath{meta}{op}{subtract}{{##1}{\csname #1metamin\endcsname}}% + \pgfplotscoordmath{meta}{op}{multiply}{{\pgfmathresult}{\pgfplots@perpointmeta@trafo@factor}}% + \pgfplotscoordmath{meta}{tofixed}{\pgfmathresult}% + }% + }% + \pgfplotscoordmath{meta}{op}{subtract}{{\csname #1metamax\endcsname}{\csname #1metamin\endcsname}}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotscoordmath{meta}{parsenumber}{1000}% + \pgfplotscoordmath{meta}{op}{divide}{{\pgfmathresult}{\pgfplots@loc@TMPa}}% + \let\pgfplots@perpointmeta@trafo@factor=\pgfmathresult + % + % Expands to the transformation range as 'a:b': + \def\pgfplots@perpointmeta@traforange{0:1000}% + % + \expandafter\let\expandafter\pgfplots@loc@TMPa\csname #1metamax\endcsname + \pgfplotscoordmath{meta}{tostring}{\pgfplots@loc@TMPa}% + \pgfmathfloatparsenumber\pgfmathresult + \pgfmathfloatgetexponent\pgfmathresult\c@pgf@countd + \edef\pgfplotspointmetarangeexponent{\the\c@pgf@countd}% +} + +% A command which is readily available during the visualization phase of each plot. +% +% It takes existing point meta data and transforms it, i.e. it defines +% \pgfplotspointmetatransformed. +% +% The command won't be invoked automatically, it is task of a plot +% handler to decide if it is needed. It's application is relatively +% fast, however. +% +% PRECONDITION: +% - point meta has been set up during the survey phase (i.e. the +% /pgfplots/point meta!=none), +% - there *is* point meta data for the current data point. +% +% POSTCONDITION: +% - the macros \pgfplotspointmeta and \pgfplotspointmetatransformed +% are defined. +% +% @see also \pgfplotsaxisifhaspointmeta +\def\pgfplotsaxisvisphasetransformpointmeta{% \ifx\pgfplots@current@point@meta\pgfutil@empty% \pgfplots@error{could not access the 'point meta' (used for example by scatter plots and color maps). Maybe you need to add '\string\addplot[point meta=y]' or something like that?}% - \pgfmathfloatcreate{1}{1.0}{0}% + \pgfplotscoordmath{meta}{one}% \let\pgfplotspointmeta=\pgfmathresult \def\pgfplotspointmetatransformed{1.0}% \else @@ -3536,7 +4954,11 @@ \pgfplots@error{Sorry, I could not read the plot coordinates near '#1'. Please check for format mistakes.}% }% \long\def\pgfplots@foreach@plot@coord@ITERATE@gobbleone#1{\pgfplots@foreach@plot@coord@ITERATE}% -\def\pgfplots@foreach@plot@coord@NEXT(#1,#2){% +\def\pgfplots@foreach@plot@coord@NEXT(#1){% + \edef\pgfmathresult{#1}% + \expandafter\pgfplots@foreach@plot@coord@NEXT@\expandafter(\pgfmathresult)% +} +\def\pgfplots@foreach@plot@coord@NEXT@(#1,#2){% \ifpgfplots@plot@coords@mathparser \pgfmathparse{#1}\let\pgfplots@current@point@x=\pgfmathresult \pgfmathparse{#2}\let\pgfplots@current@point@y=\pgfmathresult @@ -3613,7 +5035,11 @@ }% } \long\def\pgfplots@foreach@plot@coord@threedim@ITERATE@gobbleone#1{\pgfplots@foreach@plot@coord@threedim@ITERATE}% -\def\pgfplots@foreach@plot@coord@threedim@NEXT(#1,#2,#3){% +\def\pgfplots@foreach@plot@coord@threedim@NEXT(#1){% + \edef\pgfmathresult{#1}% + \expandafter\pgfplots@foreach@plot@coord@threedim@NEXT@\expandafter(\pgfmathresult)% +} +\def\pgfplots@foreach@plot@coord@threedim@NEXT@(#1,#2,#3){% \ifpgfplots@plot@coords@mathparser \pgfmathparse{#1}\let\pgfplots@current@point@x=\pgfmathresult \pgfmathparse{#2}\let\pgfplots@current@point@y=\pgfmathresult @@ -3668,42 +5094,168 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 % -% The same in normalized coordinates of the form -% x1,y1,z1,m1;x2,y2,z2,m2;...;xN,yN,zN,mN; -% if the plot is not threedim, zi is empty. +% A coordinate stream which works like this: +% +% ------------- +% \pgfplots@coord@stream@start +% +% foreach encoded coordinate: +% \def\pgfplots@coord@stream@foreach@NORMALIZED@curencoded{<encoded data>}% +% \def\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced{{<encoded data>}}% note the extra braces. +% \pgfplotsaxisdeserializedatapointfrom{<encoded data>} +% \pgfplots@coord@stream@coord % -% The mi are Meta Values associated to point coordinates. They are -% usually empty, but can be used to realize per-point marker -% modifications (scatter plots, especially for colormaps). +% \pgfplots@coord@stream@end +% ------------- +% +% The format of #1 is +% {<datapoint>}{<datapoint>}...{<datapoint>} +% Each data point is decoded with +% \pgfplotsaxisserializedatapoint +% and then, \pgfplots@coord@stream@coord will be called. \long\def\pgfplots@coord@stream@foreach@NORMALIZED#1{% \pgfplots@coord@stream@start - \pgfplots@foreach@plot@coord@NORMALIZED@ITERATE#1\pgfplots@EOI + \pgfplotscoordstream@firstlast@init + \pgfplots@foreach@plot@coord@NORMALIZED@ITERATE#1\pgfplots@EOI% \pgfplots@coord@stream@end }% - -% A looping command to loop through plot coordinates. -% For every point, #1{X}{Y} will be invoked. -% % No scoping is used during this operation, so you can access outer % variables. -\def\pgfplots@foreach@plot@coord@NORMALIZED@ITERATE{% - \pgfutil@ifnextchar\pgfplots@EOI{% - \pgfplots@foreach@plot@coord@FINISH% - }{% - \pgfplots@foreach@plot@coord@NORMALIZED@NEXT% - }% +\def\pgfplots@foreach@plot@coord@NORMALIZED@ITERATE#1{% + \def\pgfplots@coord@stream@foreach@NORMALIZED@curencoded{#1}% + \ifx\pgfplots@coord@stream@foreach@NORMALIZED@curencoded\pgfplots@EOI + \else + \def\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced{{#1}}% + \pgfplotsaxisdeserializedatapointfrom{#1}% + \pgfplots@coord@stream@coord + \pgfplotscoordstream@firstlast@update + \expandafter\pgfplots@foreach@plot@coord@NORMALIZED@ITERATE + \fi } -\def\pgfplots@foreach@plot@coord@NORMALIZED@NEXT#1,#2,#3,#4;{% - \def\pgfplots@current@point@x{#1}% - \def\pgfplots@current@point@y{#2}% - \def\pgfplots@current@point@z{#3}% - \def\pgfplots@current@point@meta{#4}% - \pgfplots@coord@stream@coord - \pgfplots@foreach@plot@coord@NORMALIZED@ITERATE + + +% A common routine which resets internal data structures for the +% survey phase, i.e. it is the shared implementation for all \addplot +% variations. +% +% It takes all options which are provided to \addplot, sets them (at +% least partially) and remembers them for the command serialization. +% +% #1: arguments to \addplot plot[#1] +% -> these are called 'behavior' options in the manual; they are set +% immediately. +% +% PRECONDITION: +% \pgfplots@addplotimpl@plot@withoptions has already been invoked +% +% POSTCONDITION: +% - internal datastructures are initialised (coordinate indexing, fpu) +% - all keys which are required for the current plot are determined +% (and set if necessary). +% They are stored into +% \pgfplots@addplot@survey@@optionlist. +% +\def\pgfplots@start@plot@with@behavioroptions#1{% + %\begingroup%<-- has been moved to \pgfplots@addplotimpl@plot@withoptions + \c@pgfplots@coordindex=0 + \def\pgfplots@current@point@coordindex{\the\c@pgfplots@coordindex}% can be used inside of coordinate filters. + \def\coordindex{\pgfplots@current@point@coordindex}% valid inside of \addplot + \def\pgfplots@addplot@running{1}% + % + \def\pgfplots@colorbar@set@src{0}% + \pgfkeysdef{/pgfplots/colorbar source}{% + \pgfplotsutilifstringequal{##1}{true}{% + \def\pgfplots@colorbar@set@src{1}% + }{% + \pgfplotsutilifstringequal{##1}{false}{% + \def\pgfplots@colorbar@set@src{0}% + }{% + \pgfplots@error{Sorry, I don't know the value `colorbar source={##1}' and I am going to ignore it. Maybe you misspelled it?}% + }% + }% + }% + % + % these styles may contain behavior options (error bars, + % samples,... ) activate them! + % + % As of february 20, 2009, #1 will contain BOTH, /pgfplots + % and /tikz options. The /tikz ones are primarily for drawing + % and are UNIMPORTANT at this stage of processing. + % In fact, transparency etc. will only confuse everything. + % + % So: ignore them and set only /pgfplots keys here: + % This may actually redefine styles, for example + % \addplot[every mark/.append style={}] will use + % /pgfplots/every mark/.append style. + % But that doesn't hurt here. + % + % there are some exceptions like /tikz/id etc. These + % exceptions need special styles in the /pgfplots root - or I + % need to change the .unknown handler. See the available + % compatibility styles! + % +% \pgfkeysdef{/pgfplots/.unknown}{% +%\message{In \string\addplot[#1]: I am silently ignoring key `\pgfkeyscurrentkeyRAW' during the preparation phase.}% +% }% + % ATTENTION: + % as of january 30, 2010, I will set /tikz keys as well. This won't hurt + % too much, I hope... there are no graphics operations anyway. But it *is* + % necessary since I *need* the plot handler for the new version. And the plot + % handler is, most likely, a /tikz key. + % + % it is possible that '#1' contains 'forget plot'. So, we need to + % set the options before checking \ifpgfplots@curplot@isirrelevant: + \pgfplotsset{/pgfplots/every axis plot,#1}% + % + \ifpgfplots@curplot@isirrelevant + \def\pgfplots@addplot@survey@@optionlist{/pgfplots/every axis plot,/pgfplots/every forget plot}% + \pgfplotsset{/pgfplots/every forget plot,/pgfplots/every axis plot post}% + \else + \edef\pgfplots@addplot@survey@@optionlist{/pgfplots/every axis plot,/pgfplots/every axis plot no \the\pgfplots@numplots/.try}% + \pgfplotsset{/pgfplots/every axis plot no \the\pgfplots@numplots/.try,/pgfplots/every axis plot post}% + \fi + % + % enable FPU after any \pgfplotsset operations. Otherwise things like + % linewidth=... which use the math parser might fail. + \ifpgfplots@usefpu + \pgfkeys{/pgf/fpu=true}% + \fi + % + % make sure it is reset, just in case it is not supported by the + % input method. + \pgfplotsscanlinelengthinitzero + % + \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler + \pgfplotsresetplothandler + \pgfplots@basiclevel@plothandler + % + \pgfplots@countplots@init + % + % hooks: + \pgfkeysvalueof{/pgfplots/execute at begin plot@@}% + \pgfkeysvalueof{/pgfplots/execute at begin plot}% + % + \if1\pgfplots@colorbar@set@src + \expandafter\def\expandafter\pgfplots@addplot@survey@@optionlist\expandafter{\pgfplots@addplot@survey@@optionlist,% + /pgfplots/point meta rel=per plot}% + \fi + % + \t@pgfplots@tokc=\expandafter{\pgfplots@addplot@survey@@optionlist,#1}% this allows '#' inside of '#1' + \edef\pgfplots@addplot@survey@@optionlist{\the\t@pgfplots@tokc}% + % + % + \pgfplots@validate@plot@domain@arguments } +\long\def\pgfplotsplothandlersurveyaddoptions#1{% + \pgfplotsset{/pgfplots/execute at end survey/.add={}{% + \t@pgfplots@tokc=\expandafter{\pgfplots@addplot@survey@@optionlist,#1}% this allows '#' inside of '#1' + \edef\pgfplots@addplot@survey@@optionlist{\the\t@pgfplots@tokc}% + },% + #1% + }% +}% -\newif\ifpgfplots@curplot@threedim % The main interface to draw a plot into an axis. % @@ -3775,56 +5327,54 @@ }% } -\long\def\pgfplots@addplotimplAPPEND+[{% +\def\pgfplots@addplotimplAPPEND+{\pgfutil@ifnextchar[{\pgfplots@addplotimplAPPEND@}{\pgfplots@addplotimplAPPEND@[]}}% this allows to gobble spaces and to skip the '[]' +\def\pgfplots@addplotimplAPPEND@[{% \expandafter\pgfplots@addplotimpl\expandafter[\nextplotspec,% } \long\def\pgfplots@addplotimpl[#1]{% - \pgfutil@ifnextchar p{% + \pgfplotsutil@ifnextchar p{% \pgfplots@addplotimpl@plot{#1}% }{% \pgfplots@addplotimpl@plot{#1}plot }% } -\def\pgfplots@addplotimpl@plot#1plot{% - \pgfutil@ifnextchar[{% +\long\def\pgfplots@addplotimpl@plot#1plot{% + \pgfplotsutil@ifnextchar[{% \pgfplots@addplotimpl@plot@withoptions{#1}% }{% \pgfplots@addplotimpl@plot@withoptions{#1}[]% }% } -\def\pgfplots@addplotimpl@plot@withoptions#1[#2]{ +\long\def\pgfplots@addplotimpl@plot@withoptions#1[#2]{ \begingroup% <-- This groups ends in \pgfplots@end@plot % - % make sure it is reset, just in case it is not supported by the - % input method. - \pgfplotsscanlinelengthinitzero - % - \pgfutil@ifnextchar c{% + \pgfplotsutil@ifnextchar c{% \pgfplots@addplotimpl@coordinates{#1}{#2}plot }{% - \pgfutil@ifnextchar f{% + \pgfplotsutil@ifnextchar f{% \pgfplots@addplotimpl@f{#1}{#2}% }{% - \pgfutil@ifnextchar t{% + \pgfplotsutil@ifnextchar t{% + \def\pgfplotssurveyphaseinputclass{table}% \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2}% \pgfplots@addplotimpl@table{#1,#2}% }{% - \pgfutil@ifnextchar ({% + \pgfplotsutil@ifnextchar ({% \pgfplots@addplotimpl@expression{#1}{#2}% }{% - \pgfutil@ifnextchar\bgroup{% + \pgfplotsutil@ifnextchar\bgroup{% \pgfplots@addplotimpl@expression@curly{#1}{#2}% }{% - \pgfutil@ifnextchar e{% + \pgfplotsutil@ifnextchar e{% \pgfplots@addplotimpl@expression@e{#1}{#2}% }{% - \pgfutil@ifnextchar g{% + \pgfplotsutil@ifnextchar g{% \pgfplots@addplotimpl@g{#1}{#2}% }{% - \pgfutil@ifnextchar s{% + \pgfplotsutil@ifnextchar s{% \pgfplots@addplotimpl@shell{#1}{#2}% }{% @@ -3839,8 +5389,8 @@ }% }% } -\def\pgfplots@addplotimpl@f#1#2f{% - \pgfutil@ifnextchar i{% +\long\def\pgfplots@addplotimpl@f#1#2f{% + \pgfplotsutil@ifnextchar i{% \pgfplots@addplotimpl@file{#1}{#2}% }{% \pgfplots@addplotimpl@function{#1}{#2}% @@ -3902,9 +5452,32 @@ \edef\pgfplots@plot@var@y{\expandafter\noexpand\csname \pgfplots@plot@var@y\endcsname}% \fi % - % Check if we have to sample a line. - \def\b@pgfplots@should@sample@LINE{0}% - \ifpgfplots@curplot@threedim + % Check if we have to sample a line or a matrix. + % + \pgfkeysgetvalue{/pgfplots/sample dim}\pgfplots@loc@TMPa + \def\pgfplots@loc@TMPb{auto}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + \ifpgfplots@curplot@threedim + \def\b@pgfplots@should@sample@LINE{0}% + \else + \def\b@pgfplots@should@sample@LINE{1}% + \fi + \else + \ifcase\pgfplots@loc@TMPa\relax + % sample dim=0 not useful!? + \def\b@pgfplots@should@sample@LINE{1}% + \or + \def\b@pgfplots@should@sample@LINE{1}% + \or + \def\b@pgfplots@should@sample@LINE{0}% + \else + \pgfplots@error{Sorry, sample dim=\pgfplots@loc@TMPa\space is unsupported (use either 1 or 2)}% + \fi + \fi + % + \if0\b@pgfplots@should@sample@LINE + % sample a matrix. Check the keys; if they are one + % dimensional, switch back to line sampling: \pgfkeysgetvalue{/pgfplots/y domain}{\pgfplots@plot@ydomain}% \edef\pgfplots@plot@ydomain{\pgfplots@plot@ydomain}% \def\pgfplots@loc@TMPa{0:0}% @@ -3932,7 +5505,10 @@ \pgfkeyssetvalue{/pgfplots/mesh/rows}{\pgfkeysvalueof{/pgfplots/samples y}}% \pgfkeyssetvalue{/pgfplots/mesh/cols}{\pgfkeysvalueof{/pgfplots/samples}}% \if1\b@pgfplots@should@sample@LINE + \pgfkeyssetvalue{/pgfplots/sample dim}{1}% \pgfkeyssetvalue{/pgfplots/mesh/cols}{1}% + \else + \pgfkeyssetvalue{/pgfplots/sample dim}{2}% \fi % }% @@ -3945,7 +5521,8 @@ \long\def\pgfplots@addplotimpl@expression#1#2(#3,#4)#5;{\pgfplots@addplotimpl@expression@{#1}{#2}{#3}{#4}{#5}}% % \addplot[#1] [#2] (#3,#4) #5; \long\def\pgfplots@addplotimpl@expression@#1#2#3#4#5{% - \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2,/pgfplots/mesh/ordering/x varies}% + \def\pgfplotssurveyphaseinputclass{expression}% + \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2,/pgfplots/mesh input=lattice,/pgfplots/mesh/ordering/x varies}% \pgfplots@plot@expression@preparekeys % \pgfplots@PREPARE@COORD@STREAM{#5}% @@ -4008,7 +5585,11 @@ % macro: \edef\pgfplots@plot@data##1{% \noexpand\pgfplotsforeachungrouped\expandafter\noexpand\pgfplots@plot@var@y in {\pgfplots@expression@ydomain} - {\noexpand\pgfplotsforeachungrouped\expandafter\noexpand\tikz@plot@var in {\pgfplots@expression@xdomain} {##1}}}% + {% + \noexpand\pgfplotsforeachungrouped\expandafter\noexpand\tikz@plot@var in {\pgfplots@expression@xdomain} {##1}% + \noexpand\pgfplotsplothandlernotifyscanlinecomplete + }% + }% \else % sample a line: \def\pgfplots@plot@ydomain{0:0}% @@ -4044,6 +5625,7 @@ \fi \fi \if\pgfplots@samples@logarithmically1% + \def\pgfplotsforeachlogarithmicmathid{x}% use \pgfplotscoordmath{x} % sample logarithmically: \edef\pgfplots@plot@data##1{% \noexpand\pgfplotsforeachlogarithmicungrouped[\pgfplots@plot@samples] @@ -4114,6 +5696,11 @@ \let\pgfplots@addplotimpl@expression@pseudoconst@y=\pgfmathy@ % % + % Warning for use fpu=false: evaluation '\x^3' might be different from 'x^3' for + % negative arguments: + % \x^3 ---> -0.2^3 but x^3 = (-0.2)^3 . + % This does not happen for use fpu=true. + % \pgfplots@plot@data{% \let\pgfmathx@=\pgfplots@addplotimpl@expression@pseudoconst@x \let\pgfmathy@=\pgfplots@addplotimpl@expression@pseudoconst@y @@ -4151,13 +5738,14 @@ }% \expandafter\pgfplots@loc@TMPa\pgfplots@loc@TMPb{#4}% \else - \def\pgfplots@loc@TMPa{\pgfplots@addplotimpl@expression@{#1}{#2}}% + \t@pgfplots@tokc={\pgfplots@addplotimpl@expression@{#1}{#2}}% + \def\pgfplots@loc@TMPa{\the\t@pgfplots@tokc}% this construction allows '#' in either '#1' or '#2' \expandafter\pgfplots@loc@TMPa\expandafter{\tikz@plot@var}{#3}{#4}% \fi }% % \addplot[#1] [#2] expression[#3] {#4} #5; \def\pgfplots@addplotimpl@expression@e#1#2expression{% - \pgfutil@ifnextchar[{% + \pgfplotsutil@ifnextchar[{% \pgfplots@addplotimpl@expression@e@{#1}{#2}% }{% \pgfplots@addplotimpl@expression@e@{#1}{#2}[]% @@ -4184,7 +5772,7 @@ \xdef\pgfplots@gnuplot@format{set format "%.7e";} } \def\pgfplots@addplotimpl@g#1#2g{% - \pgfutil@ifnextchar r{% + \pgfplotsutil@ifnextchar r{% \pgfplots@addplotimpl@graphics{#1}{#2}% }{% \pgfplots@addplotimpl@gnuplot{#1}{#2}% @@ -4196,7 +5784,7 @@ % \addplot[#1] plot[#2] function[#3] {#4} #5; \def\pgfplots@addplotimpl@function#1#2unction{% - \pgfutil@ifnextchar[{% + \pgfplotsutil@ifnextchar[{% \pgfplots@addplotimpl@function@opt{#1}{#2}% }{% \pgfplots@addplotimpl@function@opt{#1}{#2}[]% @@ -4207,6 +5795,7 @@ \def\pgfplots@addplotimpl@function@opt@#1#2#3#4#5{% % FIXME : what about the key search paths if the user changes % them!? + \def\pgfplotssurveyphaseinputclass{gnuplot}% \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2,/pgfplots/.cd,#3,/pgfplots/mesh/ordering/x varies}% % \pgfplots@gettikzinternal@keyval{prefix}{tikz@plot@prefix}{\jobname.}% @@ -4271,6 +5860,7 @@ \expandafter\def\expandafter\pgfplots@gnuplot@logdirs\expandafter{\pgfplots@gnuplot@logdirs z}% \fi \fi + % \ifpgfplots@curplot@threedim \if1\b@pgfplots@should@sample@LINE \pgfplots@error{Sorry, I do not know how to sample 3D LINE plots with gnuplot... I only know 2D line and 3D mesh. You may want to help the author of pgfplots to improve this feature.}% @@ -4395,7 +5985,7 @@ % \addplot[#1] plot[#2] shell[#3] {#4} #5; \def\pgfplots@addplotimpl@shell#1#2shell{% - \pgfutil@ifnextchar[{% + \pgfplotsutil@ifnextchar[{% \pgfplots@addplotimpl@shell@opt{#1}{#2}% }{% \pgfplots@addplotimpl@shell@opt{#1}{#2}[]% @@ -4404,6 +5994,7 @@ \def\pgfplots@addplotimpl@shell@opt#1#2[#3]#4#5;{\pgfplots@addplotimpl@shell@opt@{#1}{#2}{#3}{#4}{#5}}% % \addplot[#1] [#2] shell[#3] {#4} #5; \def\pgfplots@addplotimpl@shell@opt@#1#2#3#4#5{% + \def\pgfplotssurveyphaseinputclass{shell}% \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2,/pgfplots/.cd,#3}% \pgfplots@gettikzinternal@keyval{prefix}{tikz@plot@prefix}{\jobname.}% \pgfplots@gettikzinternal@keyval{id}{tikz@plot@id}{pgf-shell}% @@ -4440,7 +6031,7 @@ % \addplot[#1] [#2] file{#3} #4; \def\pgfplots@addplotimpl@file#1#2ile{% - \pgfutil@ifnextchar[{% + \pgfplotsutil@ifnextchar[{% \pgfplots@addplotimpl@file@opt{#1}{#2}% }{% \pgfplots@addplotimpl@file@opt{#1}{#2}[]% @@ -4452,6 +6043,7 @@ \def\pgfplots@addplotimpl@file@opt@#1#2#3#4#5{% % invoke this here - allows to share the 'plot file' impl with % 'plot gnuplot'. + \def\pgfplotssurveyphaseinputclass{file}% \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2}% \pgfplots@addplotimpl@file@opt@@{#1,#2}{#3}{#4}{#5}% } @@ -4463,13 +6055,18 @@ \pgfqkeys{/pgfplots/plot file}{#2}% \fi \pgfplots@PREPARE@COORD@STREAM{#4}% + \pgfplots@addplotimpl@file@streamit{#3}% + \endgroup +}% +% #1: the file name +\def\pgfplots@addplotimpl@file@streamit#1{% \pgfplots@coord@stream@start \pgfplotsscanlinelengthinitzero - \openin\r@pgfplots@reada=#3 + \openin\r@pgfplots@reada=#1 \ifeof\r@pgfplots@reada - \pgfplots@error{sorry, plot file{#3} could not be opened}% + \pgfplots@error{sorry, plot file{#1} could not be opened}% \else - \pgfplots@logfileopen{#3}% + \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 @@ -4490,7 +6087,6 @@ \fi \pgfplotsscanlinelengthcleanup \pgfplots@coord@stream@end - \endgroup }% \def\pgfplots@addplotimpl@file@readall{% \read\r@pgfplots@reada to\pgfplots@file@LINE @@ -4539,7 +6135,7 @@ \def\pgfplots@addplotimpl@graphics#1#2raphics{% - \pgfutil@ifnextchar[{% + \pgfplotsutil@ifnextchar[{% \pgfplots@addplotimpl@graphics@{#1}{#2}% }{% \pgfplots@addplotimpl@graphics@{#1}{#2}[]% @@ -4548,7 +6144,13 @@ % \addplot[#1] plot[#2] graphics[#3] {#4} #5; \long\def\pgfplots@addplotimpl@graphics@#1#2[#3]#4#5;{\pgfplots@addplotimpl@graphics@@{#1}{#2}{#3}{#4}{#5}}% \long\def\pgfplots@addplotimpl@graphics@@#1#2#3#4#5{% - \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2,% + \def\pgfplotssurveyphaseinputclass{graphics}% + \pgfplots@start@plot@with@behavioroptions{% + /pgfplots/filter discard warning=false, + /pgfplots/mesh/rows=2,% allow \addplot[surf] graphics ... --> yields a good legend. + /pgfplots/mesh/cols=2, + /pgfplots/mesh/check=false, + #1,/pgfplots/.cd,#2,% /pgfplots/plot graphics/@prepare legend, /pgfplots/plot graphics,% /pgfplots/plot graphics/.cd,% @@ -4557,8 +6159,27 @@ /tikz/mark=}% \pgfplots@PREPARE@COORD@STREAM{#5}% \pgfplots@coord@stream@start + % + \pgfkeysgetvalue{/pgfplots/plot graphics/points}{\pgfplots@current@point@points}% + \ifx\pgfplots@current@point@points\pgfutil@empty + \else + \let\pgfplotsplothandlergraphicspointmappoint=\pgfplotsplothandlergraphics@survey@pointmappoint + \expandafter\pgfplots@plot@handler@graphics@parsepointmap\expandafter{\pgfplots@current@point@points}% + \ifpgfplots@plot@graphics@autoadjustaxis + \pgfplotsplothandlergraphicspointmapcomputerequiredview + \ifx\pgfplotsretval\pgfutil@empty + \else + \expandafter\pgfplotssetlateoptions\expandafter{\pgfplotsretval}% + \fi + \fi + % + \def\pgfplots@addplotimpl@graphics@@error##1{}% + \fi + % \pgfkeysgetvalue{/pgfplots/plot graphics/xmin}{\pgfplots@current@point@x}% \pgfkeysgetvalue{/pgfplots/plot graphics/ymin}{\pgfplots@current@point@y}% + % + % these sanity checks do nothing of the 'plot graphics/points' feature has been used: \ifx\pgfplots@current@point@x\pgfutil@empty\pgfplots@addplotimpl@graphics@@error{xmin}\fi \ifx\pgfplots@current@point@y\pgfutil@empty\pgfplots@addplotimpl@graphics@@error{ymin}\fi \ifpgfplots@curplot@threedim @@ -4638,7 +6259,7 @@ % package is used - with all its features, including comfortable % access to the previous and next row and accumulation features. \def\pgfplots@addplotimpl@table#1table{% - \pgfutil@ifnextchar[{% + \pgfplotsutil@ifnextchar[{% \pgfplots@addplotimpl@table@getopts{#1}% }{% \pgfplots@addplotimpl@table@getopts{#1}[]% @@ -4651,10 +6272,10 @@ \pgfplots@addplotimpl@table@installkeypath \pgfplotstableset{#2}% % - \pgfutil@ifnextchar s{% + \pgfplotsutil@ifnextchar s{% \pgfplots@addplotimpl@table@fromshell{#1}{#2}% }{% - \pgfutil@ifnextchar f{% + \pgfplotsutil@ifnextchar f{% \pgfplots@addplotimpl@table@fromstructure@gobble@space{#1}{#2}% }{% \pgfplots@addplotimpl@table@fromfile@gobble@space{#1}{#2}% @@ -4715,6 +6336,7 @@ % \addplot[#1] table[#2] from {#3} #4 ; \long\def\pgfplots@addplotimpl@table@fromstructure@#1#2#3#4{% \begingroup + \def\pgfplotstablename{#3}% store the name of the currently processed table. \pgfplotstablegetscanlinelength{#3}{\pgfplotsscanlinelength}% % FIXME : this thing here has runtime O(N^2) ! % I fear it is faster to simply reload the data .... !? @@ -4731,6 +6353,8 @@ % % % high level user interface functions: + \let\pgfplotstable@coordindex@old=\coordindex + \def\coordindex{\pgfplotstablerow}% \let\lineno=\coordindex% is the same here % \expandafter\pgfplotstablegetcolumnbyname\expandafter{\pgfplots@plot@tbl@x}\of#3\to\addplot@tbl@x @@ -4778,6 +6402,8 @@ \let\pgfplots@current@point@z@error=\pgfutil@empty \fi % + \let\coordindex=\pgfplotstable@coordindex@old + % \pgfplots@PREPARE@COORD@STREAM{#4}% \pgfplots@coord@stream@start \pgfutil@loop @@ -5197,106 +6823,6 @@ \pgfshell[\pgfplots@plot@filename]{#3}\pgfplots@addplotimpl@table@fromfile{#1}{#2}{\pgfplots@plot@filename.out}#4;% }% -% A common routine which resets internal data structures for the -% survey phase, i.e. it is the shared implementation for all \addplot -% variations. -% -% It takes all options which are provided to \addplot, sets them (at -% least partially) and remembers them for the command serialization. -% -% #1: arguments to \addplot plot[#1] -% -> these are called 'behavior' options in the manual; they are set -% immediately. -% -% PRECONDITION: -% \pgfplots@addplotimpl@plot@withoptions has already been invoked -% -% POSTCONDITION: -% - internal datastructures are initialised (coordinate indexing, fpu) -% - all keys which are required for the current plot are determined -% (and set if necessary). -% They are stored into -% \pgfplots@addplot@survey@@optionlist. -% -\def\pgfplots@start@plot@with@behavioroptions#1{% - %\begingroup%<-- has been moved to \pgfplots@addplotimpl@plot@withoptions - \c@pgfplots@coordindex=0 - \def\pgfplots@current@point@coordindex{\the\c@pgfplots@coordindex}% can be used inside of coordinate filters. - \def\coordindex{\pgfplots@current@point@coordindex}% valid inside of \addplot - \def\pgfplots@addplot@running{1}% - \def\pgfplots@colorbar@set@src{0}% - \pgfkeysdef{/pgfplots/colorbar source}{% - \pgfplotsutilifstringequal{##1}{true}{% - \def\pgfplots@colorbar@set@src{1}% - }{% - \pgfplotsutilifstringequal{##1}{false}{% - \def\pgfplots@colorbar@set@src{0}% - }{% - \pgfplots@error{Sorry, I don't know the value `colorbar source={##1}' and I am going to ignore it. Maybe you misspelled it?}% - }% - }% - }% - % - % these styles may contain behavior options (error bars, - % samples,... ) activate them! - % - % As of february 20, 2009, #1 will contain BOTH, /pgfplots - % and /tikz options. The /tikz ones are primarily for drawing - % and are UNIMPORTANT at this stage of processing. - % In fact, transparency etc. will only confuse everything. - % - % So: ignore them and set only /pgfplots keys here: - % This may actually redefine styles, for example - % \addplot[every mark/.append style={}] will use - % /pgfplots/every mark/.append style. - % But that doesn't hurt here. - % - % there are some exceptions like /tikz/id etc. These - % exceptions need special styles in the /pgfplots root - or I - % need to change the .unknown handler. See the available - % compatibility styles! - % - % ATTENTION: starting with more recent versions (since the - % unstable version), I will also set /tikz keys here! This should - % work. It is well tested for the unstable... I hope it will also - % work for the master branch. - %\pgfkeysdef{/pgfplots/.unknown}{% -%\message{In \string\addplot[#1]: I am silently ignoring key `\pgfkeyscurrentkeyRAW' during the preparation phase.}% - %}% - % - % it is possible that '#1' contains 'forget plot'. So, we need to - % set the options before checking - % \ifpgfplots@curplot@isirrelevant: - \pgfplotsset{/pgfplots/every axis plot,#1}% - % - \ifpgfplots@curplot@isirrelevant - \def\pgfplots@addplot@survey@@optionlist{/pgfplots/every axis plot,/pgfplots/every forget plot}% - \pgfplotsset{/pgfplots/every forget plot,/pgfplots/every axis plot post}% - \else - \edef\pgfplots@addplot@survey@@optionlist{/pgfplots/every axis plot,/pgfplots/every axis plot no \the\pgfplots@numplots/.try}% - \pgfplotsset{/pgfplots/every axis plot no \the\pgfplots@numplots/.try,/pgfplots/every axis plot post}% - \fi - % - \ifpgfplots@usefpu - \pgfkeys{/pgf/fpu=true}% - \fi - \pgfplots@countplots@init - % - % hooks: - \pgfkeysvalueof{/pgfplots/execute at begin plot@@}% - \pgfkeysvalueof{/pgfplots/execute at begin plot}% - % - \if1\pgfplots@colorbar@set@src - \expandafter\def\expandafter\pgfplots@addplot@survey@@optionlist\expandafter{\pgfplots@addplot@survey@@optionlist,% - /pgfplots/point meta rel=per plot}% - \fi - % - \expandafter\def\expandafter\pgfplots@addplot@survey@@optionlist\expandafter{\pgfplots@addplot@survey@@optionlist,% - #1,/pgfplots/.cd,/pgfplots/every axis plot post}% - \pgfplots@validate@plot@domain@arguments -} - - % This is a backwards-compatibility method to ensure that % \axis[ybar] % and @@ -5310,7 +6836,7 @@ % So, this macro install special handlers to restore the old setting. \def\pgfplots@install@local@bar@handlers{% \pgfkeysgetvalue{/pgfplots/xbar/.@cmd}\pgfplotskeys@orig@xbar - \pgfkeysgetvalue{/pgfplots/ybar/.@cmd}\pgfplotskeys@orig@xbar + \pgfkeysgetvalue{/pgfplots/ybar/.@cmd}\pgfplotskeys@orig@ybar \pgfkeysgetvalue{/pgfplots/xbar interval/.@cmd}\pgfplotskeys@orig@xbari \pgfkeysgetvalue{/pgfplots/ybar interval/.@cmd}\pgfplotskeys@orig@ybari \pgfkeysdef{/pgfplots/xbar}{% @@ -5375,12 +6901,6 @@ }% }% % -% This macro may be overwritten inside of the \tikz@plot@handler -% macro. This here is just the default implementation. -% -% @INTERNAL HINT: I think the unstable version has another -% implementation. make sure it's not overwritten! -\def\pgfplotsplothandlername{\meaning\tikz@plot@handler}% % \def\pgfplots@countplots@init{% % @@ -5420,6 +6940,7 @@ \long\def\pgfplots@addplotimpl@coordinates#1#2plot coordinates#3#4;{\pgfplots@addplotimpl@coordinates@{#1}{#2}{#3}{#4}}% % \addplot[#1] [#2] coordinates {#3} #4; \long\def\pgfplots@addplotimpl@coordinates@#1#2#3#4{% + \def\pgfplotssurveyphaseinputclass{coordinates}% \pgfplots@start@plot@with@behavioroptions{#1,/pgfplots/.cd,#2}% \pgfplots@PREPARE@COORD@STREAM{#4}% \ifpgfplots@curplot@threedim @@ -5504,6 +7025,9 @@ }% } +\def\pgfplots@invoke@prefilter{% + \pgfkeysvalueof{/pgfplots/pre filter/.@cmd}\pgfeov% +}% \def\pgfplots@invoke@filter#1#2{% \pgfkeysvalueof{/pgfplots/#2 filter/.@cmd}#1\pgfeov% }% @@ -5528,6 +7052,12 @@ \def\pgfplots@stream@withmeta#1#2#3{\def\pgfplots@current@point@meta{#3}\pgfplotstreampoint{\pgfqpoint{#1}{#2}}} \def\pgfplots@stream@withmeta@#1#2#3#4{\def\pgfplots@current@point@coordindex{#1}\pgfplots@stream@withmeta{#2}{#3}{#4}} +\def\pgfplots@stream@decode@and@apply#1#2#3#4{% + \def\pgfplots@current@point@coordindex{#1}% + \pgfplotsaxisdeserializedatapointfrom@private{#2}% + \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 @@ -5546,6 +7076,7 @@ \pgfplots@getcurrent@plothandler\pgfplots@basiclevel@plothandler \pgfplots@gettikzinternal@keyval{mark}{tikz@plot@mark}{}% % + % \ifpgfplots@clip@limits \else % "clip marker paths=true" actually doesn't checks anything -- @@ -5554,6 +7085,9 @@ \pgfplots@clip@marker@pathstrue \fi % + \pgfplots@perpointmeta@preparetrafo + % + \pgfplots@prepare@visualization@dependencies % \def\pgfplots@loc@TMPa{0}% <-- if (collectmark positions) \ifpgfplots@scatterplotenabled @@ -5563,7 +7097,6 @@ \else \def\pgfplots@loc@TMPa{1}% \fi - % \if\pgfplots@loc@TMPa0% % mark=none : no need to waste time collecting marker % positions. @@ -5598,7 +7131,9 @@ \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 @@ -5625,6 +7160,17 @@ %\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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -5632,19 +7178,6 @@ % % Will be inserted in one of two possible places below (to collect % marker positions) - \def\pgfplots@visualize@performserizalization{% - % ATTENTION: this here is replicated for stacked plots! - \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\pgfplotsapplistXXpushback\E\expandafter{\E\pgfmathresult}% - \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\pgfplotsapplistXXpushback\E\expandafter{\E\pgfmathresult}% - \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 @@ -5655,109 +7188,119 @@ \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 + \E\pgfplotsqpointxy{\E\pgfplots@current@point@x}{\E\pgfplots@current@point@y}% \fi + % \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 + % remember the position (x,y) for markers. + % remember it before \pgfplotstreampoint (which might change (x,y) ) \ifpgfplots@clip - \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@visualize@performserizalization - \E\fi - \E\fi - \else - \pgfplots@visualize@performserizalization - \fi - \E\fi - \E\fi - \E\fi - \E\fi + % check for clip marker paths: + \E\pgfplotsaxisifcontainspoint{\E\pgfplots@visualize@performserialization}{}% \else - \pgfplots@visualize@performserizalization + \E\pgfplots@visualize@performserialization \fi \fi + % \E\pgfplotstreampoint{}% it will simply take \pgf@x and \pgf@y! + % \advance\c@pgfplots@coordindex by1 }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endgroup % -%\message{Prepared macro \string \pgfplots@apply@data@scaletrafo@to@one@point {\meaning\pgfplots@apply@data@scaletrafo@to@one@point}}% +%\message{Prepared macro \string \pgfplotsaxisvisphasetransformcoordinate {\meaning\pgfplotsaxisvisphasetransformcoordinate}}% %\message{Prepared macro \string \pgfplots@coord@stream@finalize@currentpt {\meaning\pgfplots@coord@stream@finalize@currentpt}}% - \ifpgfplots@apply@datatrafo - \def\pgfplots@coord@stream@coord@{% - \pgfplots@apply@data@scaletrafo@to@one@point% - \pgfplots@coord@stream@finalize@currentpt - }% - \else - \def\pgfplots@coord@stream@coord@{% + \def\pgfplots@coord@stream@coord@{% + \ifx\pgfplots@current@point@x\pgfutil@empty% this realizes `unbounded coords=jump', for example + \pgfplotsplothandlervisualizejump + \else + \pgfplotsaxisvisphasetransformcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z% + \pgfplotsaxisvisphasepreparedatapoint \pgfplots@coord@stream@finalize@currentpt - }% - \fi - \if\pgfplots@unbounded@handler j% unbounded coords=jump - \t@pgfplots@tokb=\expandafter{\pgfplots@coord@stream@coord@}% - \edef\pgfplots@coord@stream@coord@{% - \noexpand\ifx\noexpand\pgfplots@current@point@x\noexpand\pgfutil@empty - \noexpand\pgfplots@plothandler@unbounded@visualize@jump - \noexpand\else - \the\t@pgfplots@tokb - \noexpand\fi - }% - \fi - % + \fi + }% } -\def\pgfplots@plothandler@unbounded@visualize@jump{% - \pgfplotstreamend - \pgfplotstreamstart +\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 + \fi }% -% Defines an optimized and matching \pgfplots@apply@data@scaletrafo@to@one@point + +% Defines an optimized and matching \pgfplotsaxisvisphasetransformcoordinate % during the coordinate finalization step in \end{axis}. \def\pgfplots@coord@stream@INIT@finalize@storedcoords@prepare@scaletrafomacro{% \begingroup \let\E=\noexpand - % The command which is called for every non-yet-finished point. + % + % \pgfplotsaxisvisphasetransformcoordinate + % Maps a point to the low level xyz coordinate system by applying + % data scaling transformations. + % + % This method should be invoked for every coordinate before it can + % be drawn. % % It is prepared here to eliminate if's. % % Arguments: - % \pgfplots@current@point@[xyz] - % \pgfplots@current@point@[xyz]@error (if in argument list) - \xdef\pgfplots@apply@data@scaletrafo@to@one@point{% + % #1 : a MACRO containing the x value + % #2 : a MACRO containing the y value + % #3 : a MACRO containing the z value + % + % PRECONDITION: + % - the visualization phase is running. + % - #1,#2,#3 are defined and contain + % values resulting from the survey phase. + % + % POSTCONDITION + % - #1,#2,#3 will be redefined to contain data which is + % readily usable by low level pgf plot handlers for + % visualization. + % + % @see \pgfplotsaxisvisphasepreparedatapoint + \xdef\pgfplotsaxisvisphasetransformcoordinate##1##2##3{% \ifpgfplots@apply@datatrafo@x - \E\pgfplots@datascaletrafo@x{\E\pgfplots@current@point@x}% - \E\let\E\pgfplots@current@point@x=\E\pgfmathresult + \E\pgfplotscoordmath{x}{datascaletrafo}{##1}% + \E\let##1=\E\pgfmathresult \fi \ifpgfplots@apply@datatrafo@y - \E\pgfplots@datascaletrafo@y{\E\pgfplots@current@point@y}% - \E\let\E\pgfplots@current@point@y=\E\pgfmathresult + \E\pgfplotscoordmath{y}{datascaletrafo}{##2}% + \E\let##2=\E\pgfmathresult \fi \ifpgfplots@curplot@threedim \ifpgfplots@apply@datatrafo@z - \E\pgfplots@datascaletrafo@z{\E\pgfplots@current@point@z}% - \E\let\E\pgfplots@current@point@z=\E\pgfmathresult + \E\pgfplotscoordmath{z}{datascaletrafo}{##3}% + \E\let##3=\E\pgfmathresult \fi \fi + % \t@pgfplots@tokc=\expandafter{\pgfplots@data@scaletrafo@result}% + % \edef\pgfplots@data@scaletrafo@result{\the\t@pgfplots@tokc(\pgfplots@current@point@x,\pgfplots@current@point@y)}% + }% + % + % Just before the visualization phase can call the low level + % interface, this method is called to handle final changes. + % It is currently only used by the stacked plot interface. + \xdef\pgfplotsaxisvisphasepreparedatapoint{% \ifpgfplots@stackedmode % all these calls work with pgfmath; no more floating point % arithmetics are applied. @@ -5765,15 +7308,13 @@ \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)}% \fi - % \t@pgfplots@tokc=\expandafter{\pgfplots@data@scaletrafo@result}% - % \edef\pgfplots@data@scaletrafo@result{\the\t@pgfplots@tokc(\pgfplots@current@point@x,\pgfplots@current@point@y)}% }% % \endgroup } \def\pgfplots@addplot@get@named@startendpoints@command#1{% - \ifpgfplots@coord@stream@isfirst + \ifx\pgfplots@currentplot@firstcoord@x\pgfutil@empty % empty plot. \def#1{% \pgfcoordinate{current plot begin}{\pgfplotspointaxisorigin}% @@ -5849,6 +7390,8 @@ \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 @@ -5864,7 +7407,9 @@ \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\pgfplots@loc@TMPa{\the\t@pgfplots@tokb\the\t@pgfplots@toka}% @@ -5876,6 +7421,7 @@ \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% @@ -5905,6 +7451,9 @@ % \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}} @@ -5923,7 +7472,7 @@ % Prepare arguments for '@pre/@post' macros: \t@pgfplots@toka={% \begingroup - \pgfplots@perpointmeta@trafo@APPLY + \pgfplotsaxisvisphasetransformpointmeta \pgfkeysvalueof{/pgfplots/scatter/@pre marker code/.@cmd}\pgfeov }% \t@pgfplots@tokb=\expandafter{\pgfplots@loc@TMPa}% @@ -5958,18 +7507,18 @@ \def\pgfplots@errorbar@draw@float(#1,#2)(#3,#4){% \ifpgfplots@apply@datatrafo@x - \pgfplots@datascaletrafo@x{#1}% + \pgfplotscoordmath{x}{datascaletrafo}{#1}% \let\pgfplots@xarg=\pgfmathresult% - \pgfplots@datascaletrafo@x{#3}% + \pgfplotscoordmath{x}{datascaletrafo}{#3}% \let\pgfplots@error@xarg=\pgfmathresult% \else \def\pgfplots@xarg{#1}% \def\pgfplots@error@xarg{#3}% \fi \ifpgfplots@apply@datatrafo@y - \pgfplots@datascaletrafo@y{#2}% + \pgfplotscoordmath{y}{datascaletrafo}{#2}% \let\pgfplots@yarg=\pgfmathresult% - \pgfplots@datascaletrafo@y{#4}% + \pgfplotscoordmath{y}{datascaletrafo}{#4}% \let\pgfplots@error@yarg=\pgfmathresult% \else \def\pgfplots@yarg{#2}% @@ -5981,27 +7530,27 @@ } \def\pgfplots@errorbar@draw@float@threedim(#1,#2,#3)(#4,#5,#6){% \ifpgfplots@apply@datatrafo@x - \pgfplots@datascaletrafo@x{#1}% + \pgfplotscoordmath{x}{datascaletrafo}{#1}% \let\pgfplots@xarg=\pgfmathresult% - \pgfplots@datascaletrafo@x{#4}% + \pgfplotscoordmath{x}{datascaletrafo}{#4}% \let\pgfplots@error@xarg=\pgfmathresult% \else \def\pgfplots@xarg{#1}% \def\pgfplots@error@xarg{#4}% \fi \ifpgfplots@apply@datatrafo@y - \pgfplots@datascaletrafo@y{#2}% + \pgfplotscoordmath{y}{datascaletrafo}{#2}% \let\pgfplots@yarg=\pgfmathresult% - \pgfplots@datascaletrafo@y{#5}% + \pgfplotscoordmath{y}{datascaletrafo}{#5}% \let\pgfplots@error@yarg=\pgfmathresult% \else \def\pgfplots@yarg{#2}% \def\pgfplots@error@yarg{#5}% \fi \ifpgfplots@apply@datatrafo@z - \pgfplots@datascaletrafo@z{#3}% + \pgfplotscoordmath{z}{datascaletrafo}{#3}% \let\pgfplots@zarg=\pgfmathresult% - \pgfplots@datascaletrafo@z{#6}% + \pgfplotscoordmath{z}{datascaletrafo}{#6}% \let\pgfplots@error@zarg=\pgfmathresult% \else \def\pgfplots@zarg{#3}% @@ -6084,24 +7633,29 @@ \def\pgfplots@prepare@ZERO@coordinates{% \ifpgfplots@xislinear \ifpgfplots@apply@datatrafo@x - \pgfmathfloatcreate{0}{0.0}{0}% - \pgfplots@datascaletrafo@x{\pgfmathresult}% + \pgfplotscoordmath{x}{parsenumber}{0}% + \pgfplotscoordmath{x}{datascaletrafo}{\pgfmathresult}% \global\let\pgfplots@logical@ZERO@x=\pgfmathresult \else \gdef\pgfplots@logical@ZERO@x{0}% \fi + % this works in standard fixed pt math: \pgfplotsmathmax{\pgfplots@logical@ZERO@x}{\pgfplots@xmin}% \global\let\pgfplots@logical@ZERO@x=\pgfmathresult \pgfplotsmathmin{\pgfplots@logical@ZERO@x}{\pgfplots@xmax}% \global\let\pgfplots@logical@ZERO@x=\pgfmathresult \else - \global\let\pgfplots@logical@ZERO@x=\pgfplots@xmin% + \if\pgfplots@log@origin@choice@x0% + \global\let\pgfplots@logical@ZERO@x=\pgfplots@xmin% + \else + \gdef\pgfplots@logical@ZERO@x{1}% + \fi \fi % \ifpgfplots@yislinear \ifpgfplots@apply@datatrafo@y - \pgfmathfloatcreate{0}{0.0}{0}% - \pgfplots@datascaletrafo@y{\pgfmathresult}% + \pgfplotscoordmath{y}{parsenumber}{0}% + \pgfplotscoordmath{y}{datascaletrafo}{\pgfmathresult}% \global\let\pgfplots@logical@ZERO@y=\pgfmathresult \else \gdef\pgfplots@logical@ZERO@y{0}% @@ -6111,14 +7665,18 @@ \pgfplotsmathmin{\pgfplots@logical@ZERO@y}{\pgfplots@ymax}% \global\let\pgfplots@logical@ZERO@y=\pgfmathresult \else - \global\let\pgfplots@logical@ZERO@y=\pgfplots@ymin% + \if\pgfplots@log@origin@choice@y0% + \global\let\pgfplots@logical@ZERO@y=\pgfplots@ymin% + \else + \gdef\pgfplots@logical@ZERO@y{1}% + \fi \fi % \ifpgfplots@threedim \ifpgfplots@zislinear \ifpgfplots@apply@datatrafo@z - \pgfmathfloatcreate{0}{0.0}{0}% - \pgfplots@datascaletrafo@z{\pgfmathresult}% + \pgfplotscoordmath{z}{parsenumber}{0}% + \pgfplotscoordmath{z}{datascaletrafo}{\pgfmathresult}% \global\let\pgfplots@logical@ZERO@z=\pgfmathresult \else \gdef\pgfplots@logical@ZERO@z{0}% @@ -6128,7 +7686,11 @@ \pgfplotsmathmin{\pgfplots@logical@ZERO@z}{\pgfplots@zmax}% \global\let\pgfplots@logical@ZERO@z=\pgfmathresult \else - \global\let\pgfplots@logical@ZERO@z=\pgfplots@zmin% + \if\pgfplots@log@origin@choice@z0% + \global\let\pgfplots@logical@ZERO@z=\pgfplots@zmin% + \else + \gdef\pgfplots@logical@ZERO@z{1}% + \fi \fi \fi % @@ -6151,40 +7713,623 @@ % coordinates. \def\pgfplotsplothandlergraphics{% \def\pgf@plotstreamstart{% - \global\let\pgfplots@plot@handler@graphics@bb@first=\pgfutil@empty - \global\let\pgfplots@plot@handler@graphics@bb@second=\pgfutil@empty + \gdef\pgfplots@plot@handler@graphics@bb@first{\pgf@x=16000pt \pgf@y=16000pt }% + \gdef\pgfplots@plot@handler@graphics@bb@second{\pgf@x=-16000pt \pgf@y=-16000pt }% \global\let\pgf@plotstreampoint=\pgfplots@plot@handler@graphics@collectbb% \global\let\pgf@plotstreamspecial=\pgfutil@gobble% \global\let\pgf@plotstreamend=\pgfplots@plot@handler@graphics@finish% - \def\pgfplots@plothandler@unbounded@visualize@jump{% + \def\pgfplotsplothandlervisualizejump{% \pgfplots@error{Sorry, plot graphics does not support 'unbounded coords=jump'.}% }% }% }% \def\pgfplots@plot@handler@graphics@collectbb#1{% \pgf@process{#1}% - \ifx\pgfplots@plot@handler@graphics@bb@first\pgfutil@empty - % ok, this is the lower left corner. - \xdef\pgfplots@plot@handler@graphics@bb@first{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% + \pgf@xa=\pgf@x + \pgf@ya=\pgf@y + \pgfplots@plot@handler@graphics@bb@first + \ifdim\pgf@xa<\pgf@x \pgf@x=\pgf@xa\fi + \ifdim\pgf@ya<\pgf@y \pgf@y=\pgf@ya\fi + \xdef\pgfplots@plot@handler@graphics@bb@first{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% + % + \pgfplots@plot@handler@graphics@bb@second + \ifdim\pgf@xa>\pgf@x \pgf@x=\pgf@xa\fi + \ifdim\pgf@ya>\pgf@y \pgf@y=\pgf@ya\fi + \xdef\pgfplots@plot@handler@graphics@bb@second{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% + % +}% +\def\pgfplots@plot@handler@graphics@finish{% + \let\pgfplots@plot@handler@graphics@pointmap@B@canvas\pgfutil@empty + % + % check if we have a pointmap. If so, the pointmap should be used + % to place the graphics. + \pgfkeysgetvalue{/pgfplots/plot graphics/points}\pgfplots@plot@handler@graphics@pointmap + \ifx\pgfplots@plot@handler@graphics@pointmap\pgfutil@empty \else - \ifx\pgfplots@plot@handler@graphics@bb@second\pgfutil@empty - % ok, this is the upper right corner. - \xdef\pgfplots@plot@handler@graphics@bb@second{\noexpand\pgfqpoint{\the\pgf@x}{\the\pgf@y}}% + \let\pgfplots@plot@handler@graphics@parsepointmap@error=\relax + \expandafter\pgfplots@plot@handler@graphics@parsepointmap\expandafter{\pgfplots@plot@handler@graphics@pointmap}% + \fi + % + % + \ifx\pgfplots@plot@handler@graphics@pointmap@B@canvas\pgfutil@empty + % no pointmap. Good; then squeze graphics into the bounding + % box: + \pgfplots@plot@handler@graphics@usebb + \else + % oh, a pointmap! Process it. + \pgfplots@plot@handler@graphics@process@pointmap + \fi +}% + +% Parses the argument of '/pgfplots/plot graphics/points'. +% +% #1: the argument of the key above. +\def\pgfplots@plot@handler@graphics@parsepointmap#1{% + \let\pgfplots@plot@handler@graphics@pointmap@A@canvas\pgfutil@empty + \let\pgfplots@plot@handler@graphics@pointmap@A@img\pgfutil@empty + \let\pgfplots@plot@handler@graphics@pointmap@B@canvas\pgfutil@empty + \let\pgfplots@plot@handler@graphics@pointmap@B@img\pgfutil@empty + \let\pgfplots@plot@handler@graphics@pointmap@C@canvas\pgfutil@empty + \let\pgfplots@plot@handler@graphics@pointmap@C@img\pgfutil@empty + \let\pgfplots@plot@handler@graphics@pointmap@D@canvas\pgfutil@empty + \let\pgfplots@plot@handler@graphics@pointmap@D@img\pgfutil@empty + \pgfplots@plot@handler@graphics@parsepointmap@loop#1\pgfplots@EOI + \ifpgfplots@plot@graphics@autoadjustaxis + \ifx\pgfplots@plot@handler@graphics@pointmap@A@img\pgfutil@empty \else - \pgfplots@error{Error using 'plot graphics': I encountered more than two coordinates!? I expected only the lower left and upper right corners!}% + \ifx\pgfplots@plot@handler@graphics@pointmap@D@img\pgfutil@empty + \def\pgfplots@loc@TMPa{#1}% + \pgfplots@plot@handler@graphics@parsepointmap@error + \fi \fi \fi }% -\def\pgfplots@plot@handler@graphics@finish{% - \ifx\pgfplots@plot@handler@graphics@bb@first\pgfutil@empty +\def\pgfplots@plot@handler@graphics@parsepointmap@error{% + \pgfplots@error{plot graphics/points={\pgfplots@loc@TMPa} cannot be processed: I need at least *four* inner anchor points to automatically adjust the axis, i.e. 4 points of the form (x,y,z) => (imgx,imgy). Use 'plot graphics/auto adjust axis=false' to disable this feature}% +}% +\def\pgfplots@plot@handler@graphics@parsepointmap@loop{% + \pgfutil@ifnextchar\pgfplots@EOI{% + \pgfplots@gobble@until@EOI + }{% + \pgfplots@plot@handler@graphics@parsepointmap@loop@ + }% +}% +\def\pgfplots@plot@handler@graphics@parsepointmap@loop@(#1,#2){% + \pgfutil@ifnextchar={% + \pgfplots@plot@handler@graphics@parsepointmap@loop@@(#1,#2)% + }{% + \pgfplots@plot@handler@graphics@parsepointmap@loop@@(#1,#2)=>(,)% + }% +}% +\def\pgfplots@plot@handler@graphics@parsepointmap@loop@@(#1,#2)=>{% + \pgfutil@ifnextchar({% + \pgfplots@plot@handler@graphics@parsepointmap@loop@@@(#1,#2)% + }{% + \pgfplots@error{Syntax error for plot graphics/pointmap: expected '(#1,#2) => (...,...)'}% + \pgfplots@gobble@until@EOI + }% +} +\def\pgfplots@plot@handler@graphics@parsepointmap@loop@@@(#1,#2)(#3,#4){% + \def\pgfplotsplothandlergraphicspointmappointindex{}% + \def\pgfplots@loc@TMPc{#4}% + \ifx\pgfplots@loc@TMPc\pgfutil@empty + \else + \ifx\pgfplots@plot@handler@graphics@pointmap@A@img\pgfutil@empty + \def\pgfplotsplothandlergraphicspointmappointindex{A}% + \else + \ifx\pgfplots@plot@handler@graphics@pointmap@B@img\pgfutil@empty + \def\pgfplotsplothandlergraphicspointmappointindex{B}% + \else + \ifx\pgfplots@plot@handler@graphics@pointmap@C@img\pgfutil@empty + \def\pgfplotsplothandlergraphicspointmappointindex{C}% + \else + \ifx\pgfplots@plot@handler@graphics@pointmap@D@img\pgfutil@empty + \def\pgfplotsplothandlergraphicspointmappointindex{D}% + \else + \def\pgfplotsplothandlergraphicspointmappointindex{*}% + %\pgfplots@error{Sorry, the argument '(#1,#2) => (#3,#4)' of plot graphics/pointmap is superfluos; ignoring it.}% + \fi + \fi + \fi + \fi + \pgfmathparse{#3}% + \let\pgfplots@loc@TMPb=\pgfmathresult + % + \pgfmathparse{#4}% + \expandafter\edef\csname pgfplots@plot@handler@graphics@pointmap@\pgfplotsplothandlergraphicspointmappointindex @img\endcsname{{\pgfplots@loc@TMPb}{\pgfmathresult}}% + \fi + % + % + \pgfutil@in@,{#2}% + \ifpgfutil@in@ + \def\pgfplots@loc@TMPa##1,##2\relax{% + \expandafter\edef\csname pgfplots@plot@handler@graphics@pointmap@\pgfplotsplothandlergraphicspointmappointindex @logical\endcsname{{#1}{##1}{##2}}% + % + \pgfplotsplothandlergraphicspointmappoint(#1,##1,##2)(#3,#4) + }% + \pgfplots@loc@TMPa#2\relax + \else + \expandafter\edef\csname pgfplots@plot@handler@graphics@pointmap@\pgfplotsplothandlergraphicspointmappointindex @logical\endcsname{{#1}{#2}{}}% + \pgfplotsplothandlergraphicspointmappoint(#1,#2,)(#3,#4) + \fi + \pgfplots@plot@handler@graphics@parsepointmap@loop +} + +\def\pgfplotsplothandlergraphics@survey@pointmappoint(#1,#2,#3)(#4,#5){% + \def\pgfplots@current@point@x{#1}% + \def\pgfplots@current@point@y{#2}% + \def\pgfplots@current@point@z{#3}% + \pgfplots@coord@stream@coord +}% + +% PRECONDITION: +% \pgfplotsplothandlergraphicspointmappointindex is +% empty if and only if (#4,#5) is empty +% or it is an index among all points with non--empty (#4,#5) image +% coordinates. +\def\pgfplotsplothandlergraphicspointmappoint(#1,#2,#3)(#4,#5){% + \ifx\pgfplotsplothandlergraphicspointmappointindex\pgfutil@empty + \else + \def\pgfplots@loc@TMPc{#3}% + \ifx\pgfplots@loc@TMPc\pgfutil@empty + \pgfplotspointaxisxy{#1}{#2}% + \else + \pgfplotspointaxisxyz{#1}{#2}{#3}% + \fi + \expandafter\edef\csname pgfplots@plot@handler@graphics@pointmap@\pgfplotsplothandlergraphicspointmappointindex @canvas\endcsname{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% + \fi +}% + +% Computes view-related keys which should be communicated to the axis +% in order to render the plot graphics correctly. +% +% @POSTCONDITION: \pgfplotsretval contains any required keys. +\def\pgfplotsplothandlergraphicspointmapcomputerequiredview{% + \begingroup + \let\pgfplotsretval=\pgfutil@empty + \ifx\pgfplots@plot@handler@graphics@pointmap@D@img\pgfutil@empty + \else + \pgfkeysgetvalue{/pgfplots/plot graphics/debug}\pgfplots@loc@TMPa + \def\pgfplots@loc@TMPb{true}% + \ifx\pgfplots@loc@TMPa\pgfplots@loc@TMPb + \def\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug{1}% + \else + \def\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug{0}% + \fi + % The following implementation computes the 'unit vector + % ratio' of the IMAGE. + % + % It then tells PGFPlots to use the very same unit vector + % ratio for its axis. + % + % + % The actual implementation is dumb; it requires 4 (!) points for + % which BOTH, the 3D coordinates and the projected 2D + % coordinates relative to the image's lower left corner are + % available. + % + % Since the 2D projected coordinates are generated by the map + % + % T(x,y,z) = o + x e_x + y e_y + z e_z in R^2 + % with o,e_x,e_y,e_z in R^2, + % + % I have 8 degrees of freedom (two for each of the four + % involved vectors). Thus, a simple approach is to provide 4 + % linearly independend points to get 8 equations. + % + % Then, I solve for o,e_x,e_y,e_z + % + \pgfplotsmatrixnewempty\pgfplotsmatrix + \pgfplotsmatrixresize\pgfplotsmatrix88% + % + \pgfplotsarraynewempty\pgfplotsE + \pgfplotsarrayresize\pgfplotsE8% + % + \def\pgfplots@extractimg##1##2{% + \def\pgfplots@img@x{##1}% + \def\pgfplots@img@y{##2}% + }% + \def\pgfplots@extractlogical##1##2##3{% + \def\pgfplots@logical@x{##1}% + \def\pgfplots@logical@y{##2}% + \def\pgfplots@logical@z{##3}% + }% + % Assemble the linear system such that + % x = [ + % exx + % exy + % eyx + % eyy + % ezx + % ezy + % ox + % oy] + % are the degrees of freedom. + \c@pgfplots@coordindex=0 + \pgfplotsutilforeachcommasep{A,B,C,D}\as\pgfplots@loc@TMPa{% + \expandafter\expandafter\expandafter\pgfplots@extractimg\csname pgfplots@plot@handler@graphics@pointmap@\pgfplots@loc@TMPa @img\endcsname + \expandafter\expandafter\expandafter\pgfplots@extractlogical\csname pgfplots@plot@handler@graphics@pointmap@\pgfplots@loc@TMPa @logical\endcsname + \ifx\pgfplots@logical@z\pgfutil@empty + \else + % + \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,0\of\pgfplotsmatrix=\pgfplots@logical@x% + \pgfplotsmatrixset \the\c@pgfplots@coordindex,1\of\pgfplotsmatrix\to{0}% + \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,2\of\pgfplotsmatrix=\pgfplots@logical@y% + \pgfplotsmatrixset \the\c@pgfplots@coordindex,3\of\pgfplotsmatrix\to{0}% + \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,4\of\pgfplotsmatrix=\pgfplots@logical@z% + \pgfplotsmatrixset \the\c@pgfplots@coordindex,5\of\pgfplotsmatrix\to{0}% + \pgfplotsmatrixset \the\c@pgfplots@coordindex,6\of\pgfplotsmatrix\to{1}% + \pgfplotsmatrixset \the\c@pgfplots@coordindex,7\of\pgfplotsmatrix\to{0}% + % + \pgfplotsarrayletentry\c@pgfplots@coordindex\of\pgfplotsE=\pgfplots@img@x + % + \advance\c@pgfplots@coordindex by1 + \pgfplotsmatrixset \the\c@pgfplots@coordindex,0\of\pgfplotsmatrix\to{0}% + \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,1\of\pgfplotsmatrix=\pgfplots@logical@x% + \pgfplotsmatrixset \the\c@pgfplots@coordindex,2\of\pgfplotsmatrix\to{0}% + \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,3\of\pgfplotsmatrix=\pgfplots@logical@y% + \pgfplotsmatrixset \the\c@pgfplots@coordindex,4\of\pgfplotsmatrix\to{0}% + \pgfplotsmatrixletentry \the\c@pgfplots@coordindex,5\of\pgfplotsmatrix=\pgfplots@logical@z% + \pgfplotsmatrixset \the\c@pgfplots@coordindex,6\of\pgfplotsmatrix\to{0}% + \pgfplotsmatrixset \the\c@pgfplots@coordindex,7\of\pgfplotsmatrix\to{1}% + % + \pgfplotsarrayletentry\c@pgfplots@coordindex\of\pgfplotsE=\pgfplots@img@y + % + \advance\c@pgfplots@coordindex by1 + \fi + }% + \ifx\pgfplots@logical@z\pgfutil@empty + \else + \if1\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug + \pgfplotsplothandlergraphics@debug@matrix@to@string + \fi + % + % + \pgfplotsmatrixsolveLEQS\pgfplotsmatrix=\pgfplotsE + % + \edef\pgfmathresult{\pgfplotsarrayvalueofelem0\of\pgfplotsE}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \let\pgfplots@xx=\pgfmathresult + \edef\pgfmathresult{\pgfplotsarrayvalueofelem1\of\pgfplotsE}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \let\pgfplots@xy=\pgfmathresult + \if r\pgfkeysvalueof{/pgfplots/x dir/value}% + % they will be reversed again during the final + % processing: + \edef\pgfplots@xx{-\pgfplots@xx}% + \edef\pgfplots@xy{-\pgfplots@xy}% + \fi + % + \edef\pgfmathresult{\pgfplotsarrayvalueofelem2\of\pgfplotsE}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \let\pgfplots@yx=\pgfmathresult + \edef\pgfmathresult{\pgfplotsarrayvalueofelem3\of\pgfplotsE}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \let\pgfplots@yy=\pgfmathresult + \if r\pgfkeysvalueof{/pgfplots/y dir/value}% + % they will be reversed again during the final + % processing: + \edef\pgfplots@yx{-\pgfplots@yx}% + \edef\pgfplots@yy{-\pgfplots@yy}% + \fi + % + \edef\pgfmathresult{\pgfplotsarrayvalueofelem4\of\pgfplotsE}% + \pgfkeysgetvalue{/pgfplots/plot graphics/snap z}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + \let\pgfplots@zx=\pgfmathresult + \pgfplotscoordmath{default}{op}{veclen}{% + {\pgfplotsarrayvalueofelem4\of\pgfplotsE}% + {\pgfplotsarrayvalueofelem5\of\pgfplotsE}% + }% + \let\pgfplotszlen=\pgfmathresult + % + % compute 'snap z' relative to + % '\pgfplotszlen' + \pgfplotscoordmath{default}{parsenumber}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{default}{op}{multiply}{{\pgfmathresult}{\pgfplotszlen}}% + \let\pgfplots@loc@TMPa=\pgfmathresult + % + \pgfplotscoordmath{default}{op}{abs}{{\pgfplots@zx}}% + \pgfplotscoordmath{default}{if less than}{\pgfmathresult}{\pgfplots@loc@TMPa}{% + \pgfplotscoordmath{default}{zero}% + }{% + \let\pgfmathresult=\pgfplots@zx + }% + \fi + \pgfplotscoordmath{default}{tofixed}\pgfmathresult% + \let\pgfplots@zx=\pgfmathresult + % + \edef\pgfmathresult{\pgfplotsarrayvalueofelem5\of\pgfplotsE}% + \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}% + \let\pgfplots@zy=\pgfmathresult + \if r\pgfkeysvalueof{/pgfplots/z dir/value}% + % they will be reversed again during the final + % processing: + \edef\pgfplots@zx{-\pgfplots@zx}% + \edef\pgfplots@zy{-\pgfplots@zy}% + \fi + % + % + \edef\pgfplotsretval{% + x={(\pgfplots@xx,\pgfplots@xy)},% + y={(\pgfplots@yx,\pgfplots@yy)},% + z={(\pgfplots@zx,\pgfplots@zy)},% + scale mode=scale uniformly,% + }% + % + \if1\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug + \pgfplotsplothandlergraphicspointmapcomputerequiredview@debug@output + \fi + % + \ifx\pgfplotsretval\pgfutil@empty + \pgfplots@error{plot graphics failed to perform the 'auto adjust axis' feature \csname on@line\endcsname\space\space (compare 'plot graphics[debug]). The graphics might be scaled incorrectly. Perhaps the provided 'points' are not linearly independent?}% + \else + \begingroup + \pgfkeysgetvalue{/pgfplots/plot graphics/src}\pgfplots@loc@TMPa + \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}% + \immediate\write + \if1\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug 16\else -1\fi + {PGFPlots plot graphics[auto adjust axis=true] {\the\t@pgfplots@tokc} \csname on@line\endcsname: determined options '\pgfplotsretval'. + \if1\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug + See \the\t@pgfplots@tokc.dat for debug output. + \else + Use 'plot graphics[debug] to generate debug output files. + \fi + ^^J}% + \endgroup + \fi + % + \fi + \fi + \pgfmath@smuggleone\pgfplotsretval + \endgroup +}% +\def\pgfplotsplothandlergraphics@debug@matrix@to@string{% + \pgfplotsmatrixtotext\pgfplotsmatrix + \let\pgfplotsmatrix@text=\pgfplotsretval + \pgfplotsarraytotext\pgfplotsE + \let\pgfplotsrhs@text=\pgfplotsretval +}% +\def\pgfplotsplothandlergraphicspointmapcomputerequiredview@debug@output{% + \begingroup + \immediate\openout\w@pgf@writea=\pgfkeysvalueof{/pgfplots/plot graphics/src}.dat + \pgfplotsarrayselect0\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotsarrayselect1\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPb=\pgfmathresult + \immediate\write\w@pgf@writea{img x unit=\pgfplots@loc@TMPa\space\pgfplots@loc@TMPb\if r\pgfkeysvalueof{/pgfplots/x dir/value}(reversed due to x dir=reverse)\fi,}% + \pgfplotsarrayselect2\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotsarrayselect3\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPb=\pgfmathresult + \immediate\write\w@pgf@writea{img y unit=\pgfplots@loc@TMPa\space\pgfplots@loc@TMPb\if r\pgfkeysvalueof{/pgfplots/y dir/value}(reversed due to y dir=reverse)\fi,}% + \pgfplotsarrayselect4\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotsarrayselect5\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPb=\pgfmathresult + \immediate\write\w@pgf@writea{img z unit=\pgfplots@loc@TMPa\space\pgfplots@loc@TMPb,}% + \pgfplotsarrayselect6\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotsarrayselect7\of\pgfplotsE\to\pgfmathresult \pgfplotscoordmath{default}{tofixed}{\pgfmathresult}\let\pgfplots@loc@TMPb=\pgfmathresult + \immediate\write\w@pgf@writea{img origin=\pgfplots@loc@TMPa\space\pgfplots@loc@TMPb\if r\pgfkeysvalueof{/pgfplots/z dir/value}(reversed due to z dir=reverse)\fi,}% + \def\n{^^J}% + \def\t{^^I}% + \immediate\write\w@pgf@writea{canvasmapmatrix=[\pgfplotsmatrix@text];^^Jcanvasmaprhs = [\pgfplotsrhs@text];^^J}% + \immediate\closeout\w@pgf@writea + \endgroup +}% + +\def\pgfplots@plot@handler@graphics@process@pointmap{% + \begingroup + % determine natural size: + \pgfplots@invoke@pgfkeyscode{/pgfplots/plot graphics/lowlevel get natural size/.@cmd}{}% + \def\pgfplots@loc@TMPa##1##2{% + \global\pgf@x=##1 + \global\pgf@y=##2 + }% + \expandafter\pgfplots@loc@TMPa\pgfmathresult + \edef\pgfplots@W{\pgf@sys@tonumber\pgf@x}% natural WIDTH + \edef\pgfplots@H{\pgf@sys@tonumber\pgf@y}% natural HEIGHT + % + \def\pgfplots@extractimg##1##2{% + \def\pgfplots@img@x{##1}% + \def\pgfplots@img@y{##2}% + }% + \def\pgfplots@extractimgaspoint##1##2{% + \pgfqpoint{##1pt}{##2pt}% + }% + \expandafter\pgfplots@extractimg\pgfplots@plot@handler@graphics@pointmap@A@img% anchor 1 in image + \let\pgfplots@Ax=\pgfplots@img@x + \let\pgfplots@Ay=\pgfplots@img@y + % + \pgfplots@plot@handler@graphics@pointmap@A@canvas% the canvas coordinate corresponding to 'A' + \edef\pgfplots@ax{\pgf@sys@tonumber\pgf@x}% call it 'a' + \edef\pgfplots@ay{\pgf@sys@tonumber\pgf@y}% + % + % compute the CANVAS diagonal between the two anchors points a,b, + % dd := b-a + \pgfpointdiff + \pgfplots@plot@handler@graphics@pointmap@A@canvas + \pgfplots@plot@handler@graphics@pointmap@B@canvas + \edef\pgfplots@ddx{\pgf@sys@tonumber\pgf@x}% + \edef\pgfplots@ddy{\pgf@sys@tonumber\pgf@y}% + % + % compute the IMAGE diagonal between the two image anchor points A,B, + % DD := B - A + \pgfpointdiff + {\expandafter\pgfplots@extractimgaspoint\pgfplots@plot@handler@graphics@pointmap@A@img} + {\expandafter\pgfplots@extractimgaspoint\pgfplots@plot@handler@graphics@pointmap@B@img}% + \pgfplots@loop@CONTINUEtrue + \ifdim\pgf@x=0pt \pgfplots@loop@CONTINUEfalse \fi + \ifdim\pgf@y=0pt \pgfplots@loop@CONTINUEfalse \fi + \ifpgfplots@loop@CONTINUE + \else + \pgfplots@error{Sorry, the first two points with '=>' in plot graphics[points={}] are expected to have different image Y coordinates. Please reorder the sequence.}% + \fi + \edef\pgfplots@DDx{\pgf@sys@tonumber\pgf@x}% + \edef\pgfplots@DDy{\pgf@sys@tonumber\pgf@y}% + % + % What I need now is a shift and the CANVAS dimensions of the + % image. Both can be computed using the relative sizes dd/DD. + % + % The shift is needed to compute the lower left corner of the + % CANVAS image. thus, the lower left CANVAS image corresponds to + % the (0,0) coordinate in the IMAGE. + % + % Remember that 'A' is the anchor 1 in IMAGE coordinates. It is a + % vector from (0,0) --> (A_x,A_y) in IMAGE coordinates. + % + % Now, I want a vector (v_x,v_y) such that q + v = a in CANVAS + % coordinates. Here, 'q' is the lower left corner; it corresponds + % to the (0,0) in IMAGE coordinates. Thus, we have + % v = (a-q). Taking the relative sizes of dd and DD, we find + % + % DD_x / A_x = dd_x / v_x + % DD_y / A_y = dd_y / v_y + % + % and finally q = a-v is the lower left CANVAS coordinate. + \pgfmath@basic@divide@{\pgfplots@ddx}{\pgfplots@DDx}% + \let\pgfplots@x@rel=\pgfmathresult + % + \pgfmath@basic@divide@{\pgfplots@ddy}{\pgfplots@DDy}% + \let\pgfplots@y@rel=\pgfmathresult + % + \pgfmath@basic@multiply@{\pgfplots@Ax}{\pgfplots@x@rel}% + \let\pgfplots@vx=\pgfmathresult + % + \pgfmath@basic@multiply@{\pgfplots@Ay}{\pgfplots@y@rel}% + \let\pgfplots@vy=\pgfmathresult + % + % + % + % + % now, the canvas width. It is even simpler because it holds + % + % DD_x / dd_x = W / w + % DD_y / dd_y = H / h + % + % where (W,H) is the natural size (i.e. in IMAGE coordinates) of the picture and + % (w,h) is the size the picture will occupy in CANVAS coordinates. + % + \pgfmath@basic@multiply@{\pgfplots@x@rel}{\pgfplots@W}% + \let\pgfplots@w=\pgfmathresult + % + \pgfmath@basic@multiply@{\pgfplots@y@rel}{\pgfplots@H}% + \let\pgfplots@h=\pgfmathresult + % + \edef\pgfplots@plot@handler@graphics@DRAW@{% + \noexpand\pgfplots@invoke@pgfkeyscode{/pgfplots/plot graphics/lowlevel draw/.@cmd}{% + {\pgfplots@w pt}% width + {\pgfplots@h pt}% height + }% + }% + \pgfpointadd + {\pgfplots@plot@handler@graphics@pointmap@A@canvas}% the canvas coordinate corresponding to 'A' + {\pgfqpointscale{-1} + {\pgfqpoint{\pgfplots@vx pt}{\pgfplots@vy pt}}% + }% + \edef\pgfplots@plot@handler@graphics@pointmap@lowerleft@canvas{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% +% + % + % + \begingroup + \pgftransformshift{}% simply take \pgf@x and \pgf@y + % + \node[/pgfplots/plot graphics/node] {% + \pgfplots@plot@handler@graphics@DRAW@ + };% + \endgroup + \ifx\pgfplots@plot@handler@graphics@pointmap@C@canvas\pgfutil@empty + \ifpgfplots@threedim + \pgfplots@warning{plot graphics in 3D axis has just two inner anchors (those with '(x,y,z)=>(imgx,imgy)'). You should provide a third one such that I can check for correct scaling.}% + \fi + \else + \pgfplots@plot@handler@graphics@pointmap@sanitize@scaling{C}% + \ifx\pgfplots@plot@handler@graphics@pointmap@D@canvas\pgfutil@empty + \else + \pgfplots@plot@handler@graphics@pointmap@sanitize@scaling{D}% + \fi + \fi + \endgroup +}% + +% Checks if the logical and canvas coordinates of the point identified +% by #1 are correct. +% +% #1: a character in {A,B,C...}. +% +\def\pgfplots@plot@handler@graphics@pointmap@sanitize@scaling#1{% + \begingroup + \expandafter\let\expandafter\pgfplots@point@img\csname pgfplots@plot@handler@graphics@pointmap@#1@img\endcsname + \expandafter\let\expandafter\pgfplots@point@canvas\csname pgfplots@plot@handler@graphics@pointmap@#1@canvas\endcsname + \expandafter\let\expandafter\pgfplots@point@logical\csname pgfplots@plot@handler@graphics@pointmap@#1@logical\endcsname + \expandafter\pgfplots@extractimgaspoint\pgfplots@point@img% anchor 3 in image + \edef\pgfplots@Cx{\pgf@sys@tonumber\pgf@x}% + \edef\pgfplots@Cy{\pgf@sys@tonumber\pgf@y}% + % + \pgfmath@basic@multiply@{\pgfplots@Cx}{\pgfplots@x@rel}% + \let\pgfplots@Cx=\pgfmathresult + % + \pgfmath@basic@multiply@{\pgfplots@Cy}{\pgfplots@y@rel}% + \let\pgfplots@Cy=\pgfmathresult + \pgfpointadd + {\pgfplots@plot@handler@graphics@pointmap@lowerleft@canvas}% + {\pgfpoint\pgfplots@Cx\pgfplots@Cy}% + \edef\pgfplots@point@canvas@check{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% + \pgfpointdiff + {\pgfplots@point@canvas@check}% + {\pgfplots@point@canvas}% + \ifdim\pgf@x<0pt \pgf@x=-\pgf@x\fi + \ifdim\pgf@y<0pt \pgf@y=-\pgf@y\fi + \def\pgfplots@is@the@same@point{1}% + \ifdim\pgf@x>\pgfkeysvalueof{/pgfplots/plot graphics/squeeze tol} + \def\pgfplots@is@the@same@point{0}% + \else + \ifdim\pgf@y>\pgfkeysvalueof{/pgfplots/plot graphics/squeeze tol} + \def\pgfplots@is@the@same@point{0}% + \fi + \fi + \if0\pgfplots@is@the@same@point + % + \begingroup + \pgfkeysgetvalue{/pgfplots/plot graphics/src}\pgfplots@loc@TMPa + \t@pgfplots@tokc=\expandafter{\pgfplots@loc@TMPa}% + \def\pgfplots@extractcoord##1##2##3{##1,##2,##3}% + \pgfplots@error{sorry, I can't fix the scaling of 'plot graphics {\the\t@pgfplots@tokc}'. + The points (\expandafter\pgfplots@extractcoord\pgfplots@plot@handler@graphics@pointmap@A@logical) and (\expandafter\pgfplots@extractcoord\pgfplots@plot@handler@graphics@pointmap@B@logical) are correct, but the point (\expandafter\pgfplots@extractcoord\pgfplots@point@logical) is wrong (its position vector has an error of (\the\pgf@x,\the\pgf@y) which is larger than 'squeeze tol=\pgfkeysvalueof{/pgfplots/plot graphics/squeeze tol}'). This is probably caused by improper relations between the axis' unit vectors because the view is incorrect.^^J + - Is the 'view' argument correct (matlab: [h,v] = view)? ^^J + - Does your image have a non-trivial 'plot box ratio' (matlab: ratio = pbaspect)?^^J + Please refer to the pgfplots manual for details. If you continue now, I'll show the points in the image}% + \endgroup + % + % + \scope + \pgfsetstrokecolor{black}% + \pgfsetfillcolor{red}% + \pgfpathcircle{\pgfplots@point@canvas@check}{2pt}% + \pgfusepath{stroke,fill}% + \pgfsetfillcolor{green}% + \pgfpathcircle{\pgfplots@point@canvas}{2pt}% + \pgfusepath{stroke,fill}% + \draw[->,red] + \pgfextra{ + \pgfpathmoveto{\pgfplots@point@canvas@check}% + \pgfpathlineto{\pgfplots@point@canvas}}; + \endscope + \fi + \endgroup +} + +\def\pgfplots@plot@handler@graphics@usebb{% + \pgfpointdiff{\pgfplots@plot@handler@graphics@bb@first}{\pgfplots@plot@handler@graphics@bb@second}% + \def\pgfplots@plot@handler@graphics@finish@ok{1}% + \ifdim\pgf@x=0pt + \def\pgfplots@plot@handler@graphics@finish@ok{0}% + \else + \ifdim\pgf@y=0pt + \def\pgfplots@plot@handler@graphics@finish@ok{0}% + \fi + \fi + \if0\pgfplots@plot@handler@graphics@finish@ok \pgfplots@error{Error using 'plot graphics': I got too few coordinates! I expected the lower left and upper right corners!}% \xdef\pgfplots@plot@handler@graphics@bb@first{\noexpand\pgfqpoint{0pt}{0pt}}% + \xdef\pgfplots@plot@handler@graphics@bb@first{\noexpand\pgfqpoint{0pt}{0pt}}% \fi - \ifx\pgfplots@plot@handler@graphics@bb@second\pgfutil@empty - \pgfplots@error{Error using 'plot graphics': I got too few coordinates! I expected the lower left and upper right corners!}% - \xdef\pgfplots@plot@handler@graphics@bb@second{\noexpand\pgfqpoint{0pt}{0pt}}% - \fi \begingroup % determine the lower left / upper right corners. \pgfplots@plot@handler@graphics@bb@first @@ -6233,11 +8378,44 @@ \ifx\pgfplots@loc@TMPd\pgfutil@empty \pgfplots@error{Error using 'plot graphics': I don't have a graphics file name! Please set the '/pgfplots/plot graphics/src' key to the image file name. Skipping this plot.}% \else + \begingroup + \t@pgfplots@toka=\expandafter{\pgfplots@loc@TMPc}% + % + \def\pgfplots@loc@TMPa{#1}% + \def\pgfplots@loc@TMPb{#2}% + % + \edef\pgfplots@loc@TMPc{% + \the\t@pgfplots@toka,% + \ifx\pgfplots@loc@TMPa\pgfutil@empty\else width=#1,\fi + \ifx\pgfplots@loc@TMPb\pgfutil@empty\else height=#2,\fi + }% + \pgfmath@smuggleone\pgfplots@loc@TMPc + \endgroup + % \def\pgfplots@loc@TMPa{\pgfkeysvalueof{/pgfplots/plot graphics/includegraphics cmd}}% - \expandafter\pgfplots@loc@TMPa\expandafter[\pgfplots@loc@TMPc,width=#1,height=#2]{\pgfplots@loc@TMPd}% + \expandafter\pgfplots@loc@TMPa\expandafter[\pgfplots@loc@TMPc]{\pgfplots@loc@TMPd}% \fi }% +\def\pgfplots@plot@handler@graphics@getnaturalsize{% + \begingroup + \setbox0=\hbox{% + \pgfplots@invoke@pgfkeyscode{/pgfplots/plot graphics/lowlevel draw/.@cmd}{{}{}}% + }% + \pgf@x=\wd0 + \pgf@y=\ht0 + \ifdim\dp0>0pt + \advance\pgf@y by\dp0 + \else + \ifdim\dp0<0pt + \advance\pgf@y by-\dp0 + \fi + \fi + \xdef\pgfplots@glob@TMPb{{\the\pgf@x}{\the\pgf@y}}% + \endgroup + \let\pgfmathresult=\pgfplots@glob@TMPb +}% + % legends for plot graphics should not use 'plot graphics' themselfes % (for obvious reasons). % This key handles that. Furthermore, it remembers the plot mark for @@ -6263,668 +8441,6 @@ } -% The low-level tikz plot handler for 3D mesh and surface plots. -% -% It expects -% a) a coordinate stream which is a linearized matrix, iterated either -% rowwise or column wise, -% b) the current set of options in /pgfplots/mesh/. -% -% -% ATTENTION: -% this handler is NOT as general as the others. In particular, it -% can't be interrupted by TeX groups: every single statement, -% starting with streamstart and ending with stream end, must be in -% the same scope! -% -% As a consequence, you can't use this handler inside of (all) TikZ -% input streams. Try it out. It will work in pgfplots, however. -% -% Furthermore, it relies on a couple of pgfplots macros. This may -% change in future versions. -% It relies on: -% - \ifpgfplots@curplot@threedim -% - \pgfplots@current@point@meta -% -> it also invokes \pgfplots@perpointmeta@preparetrafo and its -% @APPLY counterpart which checks for -% - \pgfplots@metamax -% If you use it outside of pgfplots, use -% \global\let\pgfplots@metamax=\pgfutil@empty -% This is can be used without an initialised -% pgfplots axes - as long as \pgfplots@current@point@meta is in -% the range [0,1000]. -% - for the case 'shader=interp', a bounding box must be established -% before the plot is finished. This must be done using -% \def\pgfplotspointbbupperright{\pgfqpointxyz{2}{2}{0.9}} -% \def\pgfplotspointbblowerleft {\pgfqpointxyz{0}{0}{0.1}} -% or something like that. -% -% Besides these internals, it also relies on all public /pgfplots -% configuration keys related to mesh/surface plots. -% -% Please note that the 'z buffer' feature will not work without -% pgfplots (especially the z buffer=sort feature). -% -% Here is an example which compiles without a pgfplots axes: -% ---------------------------------------------------------- -% \begin{tikzpicture} -% \scope[ -% /pgfplots/.cd, -% surf, -% shader=faceted, -% mesh/rows=4, -% mesh/cols=4, -% mesh/num points=, -% /tikz/x={(0.44237cm,-0.07439cm)}, -% /tikz/y={(0.30942cm,0.23932cm)}, -% /tikz/z={(0.0cm,1.5cm)}, -% ] -% \makeatletter -% -% \global\let\pgfplots@metamax=\pgfutil@empty -% \pgfplots@curplot@threedimtrue -% -% \pgfplotsplothandlermesh -% \pgfplotstreamstart -% -% \def\rangea{0.21}% -% \def\rangeb{0.9}% -% -% \pgfmathparse{1000/(\rangeb-\rangea)} -% \let\factor=\pgfmathresult -% -% \def\simplecoordinate(#1,#2,#3){% -% \pgfmathparse{\factor*(#3 - \rangea)}% -% \let\pgfplots@current@point@meta=\pgfmathresult -% \pgfplotstreampoint{\pgfqpointxyz{#1}{#2}{#3}}% -% }% -% % for the case 'shaer=interp': -% \def\pgfplotspointbbupperright{\pgfqpointxyz{2}{2}{0.9}} -% \def\pgfplotspointbblowerleft {\pgfqpointxyz{0}{0}{0.1}} -% -% \simplecoordinate(0,3,0.7) -% \simplecoordinate(1,3,0.5) -% \simplecoordinate(2,3,0.58) -% \simplecoordinate(3,3,0.9) -% -% \simplecoordinate(0,2,0.68) -% \simplecoordinate(1,2,0.22) -% \simplecoordinate(2,2,0.25) -% \simplecoordinate(3,2,0.4) -% -% \simplecoordinate(0,1,0.6) -% \simplecoordinate(1,1,0.3) -% \simplecoordinate(2,1,0.21) -% \simplecoordinate(3,1,0.3) -% -% \simplecoordinate(0,0,0.8) -% \simplecoordinate(1,0,0.56) -% \simplecoordinate(2,0,0.5) -% \simplecoordinate(3,0,0.75) -% -% -% \pgfplotstreamend -% \pgfusepath{stroke} -% -% \endscope -% \end{tikzpicture} -% ---------------------------------------------------------- -% END OF EXAMPLE -% -> see also the legend image for mesh plots. -% -\def\pgfplotsplothandlermesh{% - \def\pgf@plotstreamstart{% -% \scope - \pgfplotsautocompletemeshkeys% - \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplotsplothandlermesh@rows - \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplotsplothandlermesh@cols - \pgfkeysgetvalue{/pgfplots/mesh/num points}\pgfplotsplothandlermesh@numpoints - % - \pgfutil@ifundefined{pgfplots@drawmodes}{% - \let\pgfplots@drawmodes=\tikz@mode - \let\pgfplots@drawoptions=\tikz@options - }{}% - % - \def\pgfplotsplothandlermesh@ONEDIMMODE{0}% - \ifnum\pgfplotsplothandlermesh@cols=1 - \def\pgfplotsplothandlermesh@ONEDIMMODE{1}% - \fi - \ifnum\pgfplotsplothandlermesh@rows=1 - \def\pgfplotsplothandlermesh@ONEDIMMODE{1}% - \fi - % - % - % Prepare color data source: - \ifx\pgfplotspointmetainputhandler\pgfutil@empty% - % oh. There is no color data!? Well... then use a constant - % color. - % - % This activates tikz colors: - %\tikz@options - \def\pgfplotsplothandlermesh@preparedrawforcurrent{% - \pgfplots@drawoptions - }% - \else - % Ok, we have color data. - % - % Prepare: - \pgfplots@perpointmeta@preparetrafo - \def\pgfplotsplothandlermesh@preparedrawforcurrent{% - \pgfplotscolormapdefinemappedcolor{\pgfplotsplothandlermesh@shader@cellcolor}% -% \pgfplotsplothandlermesh@setcolor{mapped color}% - % This activates tikz colors: -%\message{executing \meaning\pgfplots@drawoptions'}% - %\tikz@options - \pgfplots@drawoptions - }% - % - % Acquire the values for \tikz@mode@* [used for faceted] - \pgfplots@drawmodes - % - % Now, process the 'shader' key here: - \if\pgfplotsplothandlermesh@ONEDIMMODE1 - \def\pgfplots@meshmode{m}% 'mesh' - \fi - \if\pgfplots@meshmode m% mesh - % this is processed by the 'shader=flat' code below. - \def\pgfplotsplothandlermesh@shader{0}% 'flat' - \fi - \if\pgfplotsplothandlermesh@shader2% 'shader=interp' - \pgflibrarysurfshadingifactive - {}% - {% - \pgfutil@ifundefined{pgfplotsplothandlermesh@shader@warning}{% - \pgfplots@error{Sorry, surface shading (shader=interp) is NOT available for the selected driver `\pgfsysdriver'. I will use 'shader=flat' if you continue now}% - \gdef\pgfplotsplothandlermesh@shader@warning{x}% - }{}% - \def\pgfplotsplothandlermesh@shader{0}% - }% - \fi - \if\pgfplotsplothandlermesh@zbuffer@choice4% 'z buffer=sort': - \if\pgfplotsplothandlermesh@shader2% 'shader=interp' - \pgfplots@error{Sorry, 'shader=interp' does not support 'z buffer=sort'. If you continue now, 'shader=flat' will be used.}% - \def\pgfplotsplothandlermesh@shader{0}% 'flat' - \fi - \fi - \ifnum\pgfplotsplothandlermesh@shader<2 - % 0 == 'flat' - % 1 == 'faceted' - \if\pgfplotsplothandlermesh@flatmode c% 'flat corner': - % - % use colordata of ONE corner point. That's easy, not - % much to do. - \let\pgfplotsplothandlermesh@unpack=\pgfplotsplothandlermesh@unpack@corner - \t@pgfplots@toka=\expandafter{\pgfplotsplothandlermesh@preparedrawforcurrent}% - \t@pgfplots@tokb={% - \pgfplots@perpointmeta@trafo@APPLY - \let\pgfplotsplothandlermesh@shader@cellcolor=\pgfplotspointmetatransformed}% - \edef\pgfplotsplothandlermesh@preparedrawforcurrent{% - \the\t@pgfplots@tokb - \the\t@pgfplots@toka - }% - \else - % 'flat mean': - % - % use colordata as mean of all corners for shading. - \let\pgfplotsplothandlermesh@unpack=\pgfplotsplothandlermesh@unpack@mean@accum - \global\pgfplots@tmpa=0pt - \t@pgfplots@toka=\expandafter{\pgfplotsplothandlermesh@preparedrawforcurrent}% - \if\pgfplotsplothandlermesh@ONEDIMMODE0 - \t@pgfplots@tokb={\global\divide\pgfplots@tmpa by4 }% - \else - \t@pgfplots@tokb={\global\divide\pgfplots@tmpa by2 }% - \fi - \t@pgfplots@tokc={% - \edef\pgfplotsplothandlermesh@shader@cellcolor{\pgf@sys@tonumber\pgfplots@tmpa}% - \global\pgfplots@tmpa=0pt }% - \edef\pgfplotsplothandlermesh@preparedrawforcurrent{% - \the\t@pgfplots@tokb - \the\t@pgfplots@tokc - \the\t@pgfplots@toka - }% - \fi - \if\pgfplots@meshmode m% - % 'mesh' plot: stroke only and use the 'flat' code - % here just to define the color for each mesh - % segment. - \let\pgfplotsplothandlermesh@usepath=\pgfusepathqstroke - \else - % 'surf' plot: - \let\pgfplotsplothandlermesh@usepath=\pgfusepathqfillstroke - % the distinction between 'faceted' and 'flat' is - % technical: it is just the default draw color. - % - % 'flat,draw=black' is the same as 'faceted'. - \if\pgfplotsplothandlermesh@shader1% faceted - % make sure there is a the correct color. - \expandafter\def\expandafter\pgfplots@drawoptions\expandafter{% - \pgfplots@drawoptions - \pgfsetstrokecolor{\pgfkeysvalueof{/pgfplots/faceted color}}% - }% - \fi - \fi - \else - % 'shader=2': 'interp': - % very simple: defer work to surf library. Only - % provide the mapped colordata. - % - % This won't be used for mesh plots, neither in one - % nor in two dimensions. - \pgfkeyssetvalue{/pgfplots/surf shading/north east corner}{\pgfplotspointbbupperright}% - \pgfkeyssetvalue{/pgfplots/surf shading/south west corner}{\pgfplotspointbblowerleft}% - \pgfkeyssetvalue{/pgfplots/surf shading/anchor}{\pgfpointorigin}% - \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@loc@TMPa - \expandafter\pgfplotscolormaptopdffunction\expandafter{\pgfplots@loc@TMPa}% - \pgfkeyslet{/pgfplots/surf shading/colormap}\pgfplotsretval - \let\pgfplotsplothandlermesh@unpack=\relax % unused. - \let\pgfplotsplothandlermesh@preparedrawforcurrent=\relax - \pgfkeyslet{/pgfplots/surf shading/cols}\pgfplotsplothandlermesh@cols - \if\pgfplots@plot@mesh@ordering0% - % ordering=x varies: - \global\let\pgf@plotstreampoint=\pgfplotsplothandlermesh@shader@interp% - \else - % colwise: - % - % The low level shader NEEDS rowwise ordering. So, we need to transpose the data matrix. - % As usual in TeX, we should save macros as much as possible. I guess we NEED at least one macro for each matrix row. - % Idea: - % while we iterate colwise through the input data, accumulate row vectors. - % Then, process the row vectors. - % Since vectors are expensive (in terms of number of macros), we use fast "append" lists instead of vectors. - \global\let\pgf@plotstreampoint=\pgfplotsplothandlermesh@shader@interp@incremental@transpose% - % - % init all required row vectors: - \c@pgfplots@scanlineindex=0 - \pgfutil@loop - \ifnum\c@pgfplots@scanlineindex<\pgfplotsplothandlermesh@rows\relax - \expandafter\pgfplotsapplistXnewempty\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname% - \advance\c@pgfplots@scanlineindex by1 - \pgfutil@repeat - %\pgfkeyslet{/pgfplots/surf shading/cols}\pgfplotsplothandlermesh@rows - %\pgfplots@error{Sorry, the 'shader=interp' does not yet support 'mesh/ordering=colwise'... You can continue now, but the plot will be transposed.}% - \fi - \pgfplotslibrarysurfstreamstart - \let\pgfplotsplothandlermesh@usepath=\pgfusepathqfill - \fi - \fi - % PREPARE THE STREAM PROCESSING: - \def\pgfplots@plothandler@unbounded@visualize@jump{% - \pgfplotstreampoint{\global\pgf@x=-16000.0pt \global\pgf@y=-16000.0pt }% - }% - \let\pgfplotsplothandlermesh@check@unbounded=\pgfplotsplothandlermesh@check@unbounded@setbool - \if\pgfplotsplothandlermesh@ONEDIMMODE1% - % Special case: 1D mesh processing - \global\let\pgf@plotstreampoint=\pgfplotsplothandlermesh@ONEDIM@draw% - \global\let\pgf@plotstreamspecial=\pgfutil@gobble% - \global\let\pgf@plotstreamend=\pgfplotsplothandlermesh@finish% - \let\pgfplotsplothandlermesh@draw@element=\pgfplotsplothandlermesh@draw@element@line - \def\pgfplotsplothandlermesh@process@element{% - \pgfplotsplothandlermesh@draw@element - \pgfplotsplothandlermesh@i - \pgfplotsplothandlermesh@im - }% - \if\pgfplots@unbounded@handler j% - % unbounded coords=jump: - % append checks for unbounded coords to - % \pgfplotsplothandlermesh@process@element - \t@pgfplots@tokb={% - \pgfplots@loc@tmptrue - \expandafter\pgfplotsplothandlermesh@check@unbounded\pgfplotsplothandlermesh@i\relax - \expandafter\pgfplotsplothandlermesh@check@unbounded\pgfplotsplothandlermesh@im\relax - }% - \t@pgfplots@toka=\expandafter{\pgfplotsplothandlermesh@process@element}% - \edef\pgfplotsplothandlermesh@process@element{% - \the\t@pgfplots@tokb - \noexpand\ifpgfplots@loc@tmp - \the\t@pgfplots@toka - \noexpand\fi - }% - \fi - \if\pgfplotsplothandlermesh@zbuffer@choice4% - % z buffer=sort: - % create a z buffer: - % the z buffer contains elements {<view depth>}{{<pt1>}{<pt2>}{<pt3>}{<pt4>}} - \pgfplotsarraynewempty\pgfplots@zbuffer@local - % - % and collect each point into the z buffer: - \def\pgfplotsplothandlermesh@process@element{% - \pgfplotsmathviewdepthxyz{\pgfplots@current@point@x}{\pgfplots@current@point@y}{\pgfplots@current@point@z}% FIXME relies on pgfplots macros - % assemble array element: - \edef\pgfplots@loc@TMPa{% - {\pgfmathresult}% - {% - {\pgfplotsplothandlermesh@i}% - {\pgfplotsplothandlermesh@im}% - }% - }% - \expandafter\pgfplotsarraypushback\pgfplots@loc@TMPa\to\pgfplots@zbuffer@local - }% - \fi - \else - % ok, normal 2D mesh processing: - % - % And now finally: initialise the conversion from - % LINEARIZED COORD STREAM -> DATA MATRIX: - \if\pgfplots@plot@mesh@ordering0% - % x varies (=rowwise): - \let\pgfplotsplothandlermesh@scanlinelength=\pgfplotsplothandlermesh@cols - \else - % y varies (=colwise): - \let\pgfplotsplothandlermesh@scanlinelength=\pgfplotsplothandlermesh@rows - \fi - \def\pgfplotsplothandlermesh@process@element{% - \pgfplotsplothandlermesh@draw@element - \pgfplotsplothandlermesh@im@jm - \pgfplotsplothandlermesh@im@j - \pgfplotsplothandlermesh@i@j - \pgfplotsplothandlermesh@i@jm - }% - % Init memory: - % in fact, this does only remember the maximum capacity; - % it doesn't fill the memory. - \c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax - \advance\c@pgfplots@scanlineindex by1 - \pgfplotsdequenewempty{lastscanline}\capacity{\the\c@pgfplots@scanlineindex}% - % - \if2\pgfplotsplothandlermesh@shader - % shader=interp does not support z buffer=sort. - % It also has its own \pgf@plotstreampoint method, see - % above. - \def\pgfplots@plothandler@unbounded@visualize@jump{% - \pgfplots@error{Sorry, shader=interp does not support 'unbounded coords=jump'. Please use 'shader=flat' for this case.}% - }% - \else - \global\let\pgf@plotstreampoint=\pgfplotsplothandlermesh@fillscanline% - \if\pgfplotsplothandlermesh@zbuffer@choice4% - % z buffer=sort: - % create a z buffer: - % the z buffer contains elements {<view depth>}{{<pt1>}{<pt2>}{<pt3>}{<pt4>}} - \pgfplotsarraynewempty\pgfplots@zbuffer@local - % - % and collect each point into the z buffer - % (instead of drawing it): - \def\pgfplotsplothandlermesh@process@element{% - \pgfplotsmathviewdepthxyz{\pgfplots@current@point@x}{\pgfplots@current@point@y}{\pgfplots@current@point@z}% FIXME relies on pgfplots macros - % assemble array element: - \edef\pgfplots@loc@TMPa{% - {\pgfmathresult}% - {% - {\pgfplotsplothandlermesh@im@jm}% - {\pgfplotsplothandlermesh@im@j}% - {\pgfplotsplothandlermesh@i@j}% - {\pgfplotsplothandlermesh@i@jm}% - }% - }% - \expandafter\pgfplotsarraypushback\pgfplots@loc@TMPa\to\pgfplots@zbuffer@local - }% - \fi - \if\pgfplots@unbounded@handler j% - % unbounded coords=jump: - % append checks for unbounded coords to - % \pgfplotsplothandlermesh@process@element - \t@pgfplots@tokb={% - \pgfplots@loc@tmptrue - \expandafter\pgfplotsplothandlermesh@check@unbounded\pgfplotsplothandlermesh@i@j\relax - \expandafter\pgfplotsplothandlermesh@check@unbounded\pgfplotsplothandlermesh@i@jm\relax - \expandafter\pgfplotsplothandlermesh@check@unbounded\pgfplotsplothandlermesh@im@j\relax - \expandafter\pgfplotsplothandlermesh@check@unbounded\pgfplotsplothandlermesh@im@jm\relax - }% - \t@pgfplots@toka=\expandafter{\pgfplotsplothandlermesh@process@element}% - \edef\pgfplotsplothandlermesh@process@element{% - \the\t@pgfplots@tokb - \noexpand\ifpgfplots@loc@tmp - \the\t@pgfplots@toka - \noexpand\fi - }% - \fi - \fi - % - \global\let\pgf@plotstreamspecial=\pgfutil@gobble% - \global\let\pgf@plotstreamend=\pgfplotsplothandlermesh@finish% - \let\pgfplotsplothandlermesh@draw@element=\pgfplotsplothandlermesh@draw@element@rectangle - \fi - \c@pgfplots@scanlineindex=0 - }% -}% - -\def\pgfplotsplothandlermesh@check@unbounded@setbool#1#2\relax{% - \ifdim#1=-16000pt - \pgfplots@loc@tmpfalse - \fi -}% - -\long\def\pgfplotsplothandlermesh@defaultlegend@img#1{% - \scope[% - #1, - /pgfplots/mesh/rows=3, - /pgfplots/mesh/cols=3, - /pgfplots/mesh/num points=, - /tikz/x={(0.44237cm,-0.07439cm)}, - /tikz/y={(0.30942cm,0.23932cm)}, - /tikz/z={(0.0cm,1.5cm)}, - scale=0.4, - yshift=-0.7cm, - ] - \let\pgfplots@metamax=\pgfutil@empty - \pgfplots@curplot@threedimtrue - - \pgfplotsplothandlermesh - \pgfplotstreamstart - - \def\rangea{0.21}% - \def\rangeb{0.7}% - - \pgfmathparse{1000/(\rangeb-\rangea)} - \let\factor=\pgfmathresult - - \pgfutil@ifundefined{pgfqpointxyz@orig}{% - \let\pgfqpointxyz@orig=\pgfqpointxyz - }{}% - % - \def\simplecoordinate(##1,##2,##3){% - \pgfmathparse{\factor*(##3 - \rangea)}% - \pgfmathfloatparsenumber\pgfmathresult - \let\pgfplots@current@point@meta=\pgfmathresult - % pgfplots changes \pgfqpointxyz to - % \pgfplotspointdescriptionxy inside of legends, so use the - % '@orig' point command: - \pgfplotstreampoint{\pgfqpointxyz@orig{##1}{##2}{##3}}% - }% - % for the case 'shader=interp': - \def\pgfplotspointbbupperright{\pgfqpointxyz@orig{2}{2}{0.9}} - \def\pgfplotspointbblowerleft {\pgfqpointxyz@orig{0}{0}{0.1}} - - \simplecoordinate(0,2,0.7) - \simplecoordinate(1,2,0.5) - \simplecoordinate(2,2,0.43) - - \simplecoordinate(0,1,0.68) - \simplecoordinate(1,1,0.4) - \simplecoordinate(2,1,0.25) - - \simplecoordinate(0,0,0.6) - \simplecoordinate(1,0,0.35) - \simplecoordinate(2,0,0.21) - - \pgfplotstreamend - \pgfusepath{stroke} - \endscope -}% - -\def\pgfplotsplothandlermesh@finish{% - \ifnum\pgfplotsplothandlermesh@shader=2 - % shader=interp: - \ifx\pgf@plotstreampoint\pgfplotsplothandlermesh@shader@interp@incremental@transpose% - % This is the case for 'mesh/ordering=colwise'. We need to finish the transpose procedure: - \pgfplotsplothandlermesh@shader@interp@transpose@finish - \fi - \pgfplotslibrarysurfstreamend - \pgfplotslibrarysurfdrawinpicture - \else - \if\pgfplotsplothandlermesh@zbuffer@choice4% - % z buffer=sort: - % process the z buffer: - \pgfkeyslet{/pgfplots/iflessthan/.@cmd}\pgfplotsplothandlermesh@zbuffer@sort@iflessthen - \pgfkeysdef{/pgfplots/array/unscope pre}{% - \pgfplotsarrayforeachungrouped\pgfplots@zbuffer@local\as\curelem{% - \expandafter\pgfplotsplothandlermesh@draw@zbufferelement\curelem% - }% - }% - \pgfkeysdef{/pgfplots/array/unscope post}{}% - \pgfplotsarraysort\pgfplots@zbuffer@local - \fi - \fi -% \endscope -}% - -% the pgf@plotstreampoint routine for the first scan line: -\def\pgfplotsplothandlermesh@fillscanline#1{% - \pgf@process{#1}% - \edef\pgfplotsplothandlermesh@i@j{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}}% - \expandafter\pgfplotsdequepushback\pgfplotsplothandlermesh@i@j\to{lastscanline}% - \advance\c@pgfplots@scanlineindex by1 - \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax - % second line! - \global\let\pgf@plotstreampoint=\pgfplotsplothandlermesh@draw%% - \c@pgfplots@scanlineindex=0 - \fi -}% - -% This is the pgf@plotstreampoint for all scan lines starting with the -% second. -% -% We perform -% for i = 1 to rows (note the 1! 0 would be the first row) -% for j = 0 to cols -% get (i-1, j) from front of deque // remember: i: rows, j : cols. We iterate rowwise. -% push (i,j) to back of deque -% if j > 0 -% draw -% (i-1,j-1) [from last iteration] -- (i-1,j) [from deque] -% -- ( i,j-1) [from last iteration] -- ( i,j) [from #1] -% endif -% let (i-1,j-1) := (i-1,j) // for next iteration -% let ( i,j-1) := ( i,j) // for next iteration -% end -% end -% -% This is a SWEEP through the data matrix. -\def\pgfplotsplothandlermesh@draw#1{% - % NOTATION: - % 'im == (i-1)' - % 'jm == (j-1)' - \pgf@process{#1}% - \edef\pgfplotsplothandlermesh@i@j{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}}% FIXME relies on pgfplots macros -%\message{##\the\c@pgfplots@scanlineindex: prepare rectangle with corner \meaning\pgfplotsplothandlermesh@i@j.}% - \pgfplotsdequepopfront{lastscanline}\to\pgfplotsplothandlermesh@im@j - \expandafter\pgfplotsdequepushback\pgfplotsplothandlermesh@i@j\to{lastscanline}% - \ifnum\c@pgfplots@scanlineindex>0 - \pgfplotsplothandlermesh@process@element - \fi - \let\pgfplotsplothandlermesh@im@jm=\pgfplotsplothandlermesh@im@j - \let\pgfplotsplothandlermesh@i@jm=\pgfplotsplothandlermesh@i@j - \advance\c@pgfplots@scanlineindex by1 - \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax - \c@pgfplots@scanlineindex=0 - \fi -}% -\def\pgfplotsplothandlermesh@shader@interp#1{% - \pgfplots@perpointmeta@trafo@APPLY - \pgfplotslibrarysurfstreamcoord{#1}{\pgfplotspointmetatransformed}% -}% -\def\pgfplotsplothandlermesh@shader@interp@incremental@transpose#1{% - \pgfplots@perpointmeta@trafo@APPLY - \pgf@process{#1}% - \edef\pgfplotsplothandlermesh@i{\noexpand\pgfplotsplothandlermesh@shader@interp@next{\the\pgf@x}{\the\pgf@y}{\pgfplotspointmetatransformed}}% - % - % Store the postprocessed point into the appropriate row vector: - \def\pgfplots@loc@TMPa{\expandafter\pgfplotsapplistXpushback\expandafter{\pgfplotsplothandlermesh@i}\to} - \expandafter\pgfplots@loc@TMPa\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname% - % - \advance\c@pgfplots@scanlineindex by1 - \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax - \c@pgfplots@scanlineindex=0 - \fi -}% -\def\pgfplotsplothandlermesh@shader@interp@transpose@finish{% - % Now, "execute" each row vector: - \def\pgfplotsplothandlermesh@shader@interp@next##1##2##3{% - \pgfplotslibrarysurfstreamcoord{\global\pgf@x=##1 \global\pgf@y=##2 }{##3}% - }% - \c@pgfplots@scanlineindex=0 - \pgfutil@loop - \ifnum\c@pgfplots@scanlineindex<\pgfplotsplothandlermesh@rows\relax - \expandafter\pgfplotsapplistXlet\expandafter\pgfplots@loc@TMPd\expandafter=\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname% - \expandafter\pgfplotsapplistXnewempty\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname% clear - % execute the row: - \pgfplots@loc@TMPd - \advance\c@pgfplots@scanlineindex by1 - \pgfutil@repeat - \let\pgfplots@loc@TMPd=\relax -}% - -\def\pgfplotsplothandlermesh@draw@zbufferelement#1#2{% - \pgfplotsplothandlermesh@draw@element#2\relax -}% -% a possible value for \pgfplotsplothandlermesh@draw@element -\def\pgfplotsplothandlermesh@draw@element@line#1#2{% - \pgfpathmoveto{\expandafter\pgfplotsplothandlermesh@unpack#1}% - \pgfpathlineto{\expandafter\pgfplotsplothandlermesh@unpack#2}% - \pgfplotsplothandlermesh@preparedrawforcurrent - \pgfplotsplothandlermesh@usepath -}% -% a possible value for \pgfplotsplothandlermesh@draw@element -\def\pgfplotsplothandlermesh@draw@element@rectangle#1#2#3#4{% - \pgfpathmoveto{\expandafter\pgfplotsplothandlermesh@unpack#1}% - \pgfpathlineto{\expandafter\pgfplotsplothandlermesh@unpack#2}% - \pgfpathlineto{\expandafter\pgfplotsplothandlermesh@unpack#3}% - \pgfpathlineto{\expandafter\pgfplotsplothandlermesh@unpack#4}% - \pgfplotsplothandlermesh@preparedrawforcurrent - \pgfpathclose - \pgfplotsplothandlermesh@usepath -}% - -\def\pgfplotsplothandlermesh@zbuffer@sort@iflessthen#1#2#3#4\pgfeov{% - \edef\pgfplots@loc@TMPa{#1}% - \expandafter\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@\pgfplots@loc@TMPa\relax - \let\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@a=\pgfmathresult - \edef\pgfplots@loc@TMPb{#2}% - \expandafter\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@\pgfplots@loc@TMPb\relax - \let\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@b=\pgfmathresult - \ifdim\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@b pt<\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@a pt% - #3\relax - \else - #4\relax - \fi -}% -\def\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@#1#2{% - \def\pgfmathresult{#1}% -}% - -% #1: projected x coord -% #2: projected y coord -% #3: per point meta (if any) -\def\pgfplotsplothandlermesh@unpack@corner#1#2#3{% - \global\pgf@x=#1\relax - \global\pgf@y=#2\relax -}% -\def\pgfplotsplothandlermesh@unpack@mean@accum#1#2#3{% - \global\pgf@x=#1\relax - \global\pgf@y=#2\relax - \def\pgfplots@current@point@meta{#3}% - \pgfplots@perpointmeta@trafo@APPLY - \global\advance\pgfplots@tmpa by\pgfplotspointmetatransformed pt -}% -% same as above, just for one dim plots (rows == 1 || cols==1) -\def\pgfplotsplothandlermesh@ONEDIM@draw#1{% - \pgf@process{#1}% - \edef\pgfplotsplothandlermesh@i{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}}% - \ifnum\c@pgfplots@scanlineindex>0 - \pgfplotsplothandlermesh@process@element - \fi - \let\pgfplotsplothandlermesh@im=\pgfplotsplothandlermesh@i - \advance\c@pgfplots@scanlineindex by1 -}% % #1: a normalized coordinate stream. % @@ -6974,8 +8490,7 @@ \pgfplotsprependlistXnewempty{reversed}% }% \def\pgfplots@coord@stream@coord{% - \edef\pgfplots@loc@TMPa{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z,\pgfplots@current@point@meta;}% - \expandafter\pgfplotsprependlistXpushfront\expandafter{\pgfplots@loc@TMPa}\to{reversed}% + \expandafter\pgfplotsprependlistXpushfront\expandafter{\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced}\to{reversed}% }% \def\pgfplots@coord@stream@end{% \pgfplotsprependlistXlet\pgfplots@loc@TMPa={reversed}% @@ -6997,8 +8512,7 @@ }% }% \def\pgfplots@coord@stream@coord{% - \edef\pgfplots@loc@TMPa{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z,\pgfplots@current@point@meta;}% - \expandafter\pgfplots@zbuffer@local@SETCUR\expandafter{\pgfplots@loc@TMPa}% + \expandafter\pgfplots@zbuffer@local@SETCUR\expandafter{\pgfplots@coord@stream@foreach@NORMALIZED@curencoded}% \advance\c@pgfplots@scanlineindex by1 }% \def\pgfplots@coord@stream@end{% @@ -7010,7 +8524,7 @@ \pgfkeysdef{/pgfplots/array/unscope pre}{% \pgfplotsapplistXnewempty{\pgfp@sortedlist}% \pgfplotsarrayforeachungrouped\pgfplots@zbuffer@local\as\curelem{% - \expandafter\pgfplotsapplistXpushback\curelem\to{\pgfp@sortedlist}% + \expandafter\pgfplotsapplistXpushback\expandafter{\expandafter{\curelem}}\to{\pgfp@sortedlist}% }% \pgfplotsapplistXlet\pgfplots@loc@TMPa={\pgfp@sortedlist}% \global\let\pgfplotsglobalretval=\pgfplots@loc@TMPa @@ -7034,44 +8548,58 @@ % only need to know whether [xy] coordinates are sorted % ascending or descending. This information is already ready. % - \begingroup - \if+\pgfkeysvalueof{/pgfplots/x coord sorting}% - \def\pgfplots@minmaxvalue@x{0}% - \else - \def\pgfplots@minmaxvalue@x{0}% - \fi - \if+\pgfkeysvalueof{/pgfplots/y coord sorting}% - \def\pgfplots@minmaxvalue@y{0}% - \else - \def\pgfplots@minmaxvalue@y{1}% - \fi - \pgfplotsifaxissurfaceisforeground{\pgfplots@minmaxvalue@x vv}{% - \def\pgfplots@reverse@x{1}% - }{% - \def\pgfplots@reverse@x{0}% - }% - \pgfplotsifaxissurfaceisforeground{v\pgfplots@minmaxvalue@y v}{% - \def\pgfplots@reverse@y{1}% - }{% - \def\pgfplots@reverse@y{0}% - }% - \if1\pgfplots@reverse@x - \if1\pgfplots@reverse@y - \pgfkeys{/pgfplots/z buffer=reverse xy seq}% + \if1\pgfplotsplothandlermesh@matrixinput + % mesh input=lattice + \begingroup + \if+\pgfkeysvalueof{/pgfplots/x coord sorting}% + \def\pgfplots@minmaxvalue@x{0}% + \else + \def\pgfplots@minmaxvalue@x{0}% + \fi + \if+\pgfkeysvalueof{/pgfplots/y coord sorting}% + \def\pgfplots@minmaxvalue@y{0}% + \else + \def\pgfplots@minmaxvalue@y{1}% + \fi + \pgfplotsifaxissurfaceisforeground{\pgfplots@minmaxvalue@x vv}{% + \def\pgfplots@reverse@x{1}% + }{% + \def\pgfplots@reverse@x{0}% + }% + \pgfplotsifaxissurfaceisforeground{v\pgfplots@minmaxvalue@y v}{% + \def\pgfplots@reverse@y{1}% + }{% + \def\pgfplots@reverse@y{0}% + }% + \if1\pgfplots@reverse@x + \if1\pgfplots@reverse@y + \pgfkeys{/pgfplots/z buffer=reverse xy seq}% + \else + \pgfkeys{/pgfplots/z buffer=reverse x seq}% + \fi \else - \pgfkeys{/pgfplots/z buffer=reverse x seq}% + \if1\pgfplots@reverse@y + \pgfkeys{/pgfplots/z buffer=reverse y seq}% + \else + \pgfkeys{/pgfplots/z buffer=none}% + \fi \fi +%\message{z buffer=auto mode chose z buffer= \ifcase\pgfplotsplothandlermesh@zbuffer@choice NONE \or reverse x seq \or reverse y seq \or reverse xy seq \or sort\or default \fi. mesh ordering = \ifcase\pgfplots@plot@mesh@ordering x varies/rowwise\or y varies/colwise\fi}% + % 'z buffer' is no longer 'auto' now: + \pgfplots@apply@zbuffer{#1}% + \endgroup \else - \if1\pgfplots@reverse@y - \pgfkeys{/pgfplots/z buffer=reverse y seq}% + % mesh input=patches + \ifpgfplots@threedim + \if\pgfplots@meshmode n% + \else + \pgfkeys{/pgfplots/z buffer=sort}% + \fi \else \pgfkeys{/pgfplots/z buffer=none}% \fi + \gdef\pgfplotsglobalretval{#1}% \fi -%\message{z buffer=auto mode chose z buffer= \ifcase\pgfplotsplothandlermesh@zbuffer@choice NONE \or reverse x seq \or reverse y seq \or reverse xy seq \or sort\or default \fi. mesh ordering = \ifcase\pgfplots@plot@mesh@ordering x varies/rowwise\or y varies/colwise\fi}% - % 'z buffer' is no longer 'auto' now: - \pgfplots@apply@zbuffer{#1}% - \endgroup \or % z buffer=default. \if\pgfplots@meshmode n% @@ -7079,10 +8607,8 @@ \gdef\pgfplotsglobalretval{#1}% \else % mesh=true - \begingroup \pgfkeysalso{/pgfplots/z buffer=auto}% \pgfplots@apply@zbuffer{#1}% - \endgroup \fi \fi }% @@ -7109,8 +8635,7 @@ \pgfplotsapplistXnewempty{\resultlist}% }% \def\pgfplots@coord@stream@coord{% - \edef\pgfplots@loc@TMPa{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z,\pgfplots@current@point@meta;}% - \expandafter\pgfplotsprependlistXpushfront\expandafter{\pgfplots@loc@TMPa}\to{reversedscanline}% + \expandafter\pgfplotsprependlistXpushfront\expandafter{\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced}\to{reversedscanline}% \advance\c@pgfplots@scanlineindex by1 \ifnum\c@pgfplots@scanlineindex=\pgfplotsscanlinelength\relax \pgfplotsprependlistXlet\pgfplots@loc@TMPa={reversedscanline}% @@ -7145,8 +8670,7 @@ \pgfplotsprependlistXnewempty{resultlist}% }% \def\pgfplots@coord@stream@coord{% - \edef\pgfplots@loc@TMPa{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z,\pgfplots@current@point@meta;}% - \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@loc@TMPa}\to{\scanline}% + \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@coord@stream@foreach@NORMALIZED@curencoded@braced}\to{\scanline}% \advance\c@pgfplots@scanlineindex by1 \ifnum\c@pgfplots@scanlineindex=\pgfplotsscanlinelength\relax \pgfplotsapplistXlet\pgfplots@loc@TMPa={\scanline}% @@ -7175,12 +8699,14 @@ % A special '<' operation which returns true if the point coordinate % '#1' is BEHIND #2 with respect to the current 3D view. \def\pgfplots@apply@zbuffer@SORT@iflessthan#1#2#3#4\pgfeov{% - \edef\pgfplots@loc@TMPa{#1}% - \expandafter\pgfplots@apply@zbuffer@SORT@iflessthan@\pgfplots@loc@TMPa\relax + \pgfplotsaxisdeserializedatapointfrom{#1}% + \pgfplotsmathfloatviewdepthxyz{\pgfplots@current@point@x}{\pgfplots@current@point@y}{\pgfplots@current@point@z}% \let\pgfplots@apply@zbuffer@SORT@iflessthan@a=\pgfmathresult - \edef\pgfplots@loc@TMPb{#2}% - \expandafter\pgfplots@apply@zbuffer@SORT@iflessthan@\pgfplots@loc@TMPb\relax + % + \pgfplotsaxisdeserializedatapointfrom{#2}% + \pgfplotsmathfloatviewdepthxyz{\pgfplots@current@point@x}{\pgfplots@current@point@y}{\pgfplots@current@point@z}% \let\pgfplots@apply@zbuffer@SORT@iflessthan@b=\pgfmathresult + % \pgfmathfloatlessthan@{\pgfplots@apply@zbuffer@SORT@iflessthan@b}{\pgfplots@apply@zbuffer@SORT@iflessthan@a}% \ifpgfmathfloatcomparison #3\relax @@ -7189,14 +8715,6 @@ \fi }% -% returns the view depth of the provided serialized coordinate into -% \pgfmathresult -% -% FIXME : relies on the internal repr in -% \pgfplots@coord@stream@foreach@NORMALIZED : -\def\pgfplots@apply@zbuffer@SORT@iflessthan@#1,#2,#3,#4;{% - \pgfplotsmathfloatviewdepthxyz{#1}{#2}{#3}% -}% % Defines \pgfmathresult to be the view depth of a three component % vector. The third component will be used if and only if the boolean @@ -7321,7 +8839,7 @@ \if1\csname pgfpmeta@\pgfplotspointmetainputhandler @issymbolic\endcsname \else % ok, be fault tolerant and round to an integer: - \pgfmathfloattofixed{\pgfplotspointmeta}% + \pgfplotscoordmath{meta}{tofixed}{\pgfplotspointmeta}% \begingroup \pgfkeys{/pgf/number format/precision=0}% \expandafter\pgfmathroundto\expandafter{\pgfmathresult}% diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex index ec1642f9409..fe6106f4380 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotscore.code.tex @@ -24,6 +24,8 @@ % %-------------------------------------------- +\def\pgfplotsset#{\pgfqkeys{/pgfplots}} + \def\pgfplots@error#1{\PackageError{pgfplots}{#1}{}}% \def\pgfplotstable@error@pkg#1{\PackageError{pgfplotstable}{#1}{}}% @@ -163,4 +165,6 @@ \pgfutil@ifundefined{pgfplots@texdist@protect}{% \def\pgfplots@texdist@protect{}% }{} + +\input pgfplotssysgeneric.code.tex \endinput diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex new file mode 100644 index 00000000000..63cd7be107c --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsmeshplothandler.code.tex @@ -0,0 +1,2185 @@ +%-------------------------------------------- +% +% 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-2010 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/>. +% +%-------------------------------------------- + +% Assigns default values to 'rows' and 'cols' in case +% their values are empty. +% +% PRECONDITION: +% The values of +% - '/pgfplots/mesh/rows' +% - '/pgfplots/mesh/cols' +% - '/pgfplots/mesh/num points' +% - \pgfplotsscanlinelength +% - '/pgfplots/mesh/ordering' +% are assigned properly. +% +% POSTCONDITION: +% 'rows' and 'cols' now incorporates \pgfplotsscanlinelength if +% their values had been empty. However, there may still be empty +% values. +% +% @see \pgfplotsautocompletemeshkeys +\def\pgfplotspreparemeshkeydefaults{% + \pgfplots@autocomplete@meshkeys0% +}% + +% Completes and sanitizes 'mesh/rows' and 'mesh/cols' such that they +% have useful integer values afterwards. +% +% This method works similarly to \pgfplotspreparemeshkeydefaults. +% However, it really completes values and issues error messages if +% that proves to be impossible. +% +% PRECONDITION: +% The values of +% - '/pgfplots/mesh/rows' +% - '/pgfplots/mesh/cols' +% - '/pgfplots/mesh/num points' +% - '/pgfplots/mesh/ordering' +% are assigned properly. +% If +% - \pgfplotsscanlinelength +% exists and is positive, it may also be used. +% +% POSTCONDITION: +% 'rows' and 'cols' have useful integer values. +\def\pgfplotsautocompletemeshkeys{% + \pgfplots@autocomplete@meshkeys1% +}% +\def\pgfplots@autocomplete@meshkeys#1{% + % For #1 = 0, the values are only partially completed (which is + % also compatible with patch plots) + \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplotsplothandlermesh@rows + \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplotsplothandlermesh@cols + \pgfkeysgetvalue{/pgfplots/mesh/num points}\pgfplotsplothandlermesh@numpoints + \edef\pgfplotsplothandlermesh@numpoints{\pgfplotsplothandlermesh@numpoints}% + \edef\pgfplotsplothandlermesh@cols{\pgfplotsplothandlermesh@cols}% + \edef\pgfplotsplothandlermesh@rows{\pgfplotsplothandlermesh@rows}% + % + \def\pgfplots@loc@TMPa{0}% + \ifpgfplots@curplot@threedim + \def\pgfplots@loc@TMPa{1}% + \else + \if s\pgfplots@meshmode + % we have a 'surf' plot. That doesn't make sense unless + % one has a matrix, even for a two--dimensional plot. Try it. + \def\pgfplots@loc@TMPa{1}% + \fi + \fi + \if1\pgfplots@loc@TMPa + \ifx\pgfplotsplothandlermesh@rows\pgfutil@empty + \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty + \pgfutil@ifundefined{pgfplotsscanlinelength}{\def\pgfplotsscanlinelength{-1}}{}% + \ifpgfplots@scanline@verbose + \ifnum\pgfplotsscanlinelength>0 + % we have scanlinelength set! Use it: + \message{PGFPlots: Scanline length is \pgfplotsscanlinelength.}% + \else + \ifnum\pgfplotsscanlinelength=-2 + \message{PGFPlots: Scanline length could not be determined since multiple, different scan line lengths have been found.}% + \else + \message{PGFPlots: No end-of-scanline marker found in input stream.}% + \fi + \fi + \fi + \ifnum\pgfplotsscanlinelength>0 + % we have scanlinelength set! Use it: + \if\pgfplots@plot@mesh@ordering0% + % ordering = x varies= rowwise -> scanline is cols! + \edef\pgfplotsplothandlermesh@cols{\pgfplotsscanlinelength}% + \else + % ordering = y varies = colwise: scanline is rows! + \edef\pgfplotsplothandlermesh@rows{\pgfplotsscanlinelength}% + \fi + \else + \if1#1% + % try to get reasonable values: + \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty + \pgfplots@error{Sorry, a mesh needs either '[mesh/rows=<N>]' or '[mesh/cols=<N>]' set - or at least '[mesh/num points=<N>]'. But it did not find any of them...}% + \def\pgfplotsplothandlermesh@cols{5}% + \def\pgfplotsplothandlermesh@rows{5}% + \else + % We don't have rows/cols. Well, try using + % sqrt(num points) for both of them! + \ifnum\pgfplotsplothandlermesh@numpoints<16380 + \pgfmath@basic@sqrt@{\pgfplotsplothandlermesh@numpoints}% + \else + \pgfmathfloatparsenumber{\pgfplotsplothandlermesh@numpoints}% + \pgfmathfloatsqrt@{\pgfmathresult}% + \pgfmathfloattofixed{\pgfmathresult}% + \fi + \begingroup + % Try whether this rows*rows yields numpoints: + \afterassignment\pgfplots@gobble@until@relax + \c@pgf@counta=\pgfmathresult\relax + \c@pgf@countb=\c@pgf@counta + \multiply\c@pgf@counta by\c@pgf@counta + \def\pgfplotsretval{1}% + \ifnum\c@pgf@counta=\pgfplotsplothandlermesh@numpoints\relax + % ok, rows*rows = numpoints. + \edef\pgfplotsplothandlermesh@rows{\the\c@pgf@countb}% + \else + % oh. Did not work. Check for rounding errors: + \c@pgf@counta=\c@pgf@countb + \advance\c@pgf@counta by1 + \c@pgf@countb=\c@pgf@counta + \multiply\c@pgf@counta by\c@pgf@counta + \ifnum\c@pgf@counta=\pgfplotsplothandlermesh@numpoints + % ok, (rows+1)*(rows+1) = numpoints. + \edef\pgfplotsplothandlermesh@rows{\the\c@pgf@countb}% + \else + % no... did not work. num points doesn't + % appear to be a squared number. + \def\pgfplotsretval{0}% + \edef\pgfplotsplothandlermesh@rows{5}% + \fi + \fi + \if\pgfplotsretval1 + \pgfplots@warning{% + mesh processing did not find '[mesh/rows=<N>]' or '[mesh/cols=<N>]'. + Assuming [mesh/rows=\pgfplotsplothandlermesh@rows,mesh/cols=\pgfplotsplothandlermesh@rows] + as sqrt(num points) = sqrt(\pgfplotsplothandlermesh@numpoints) [ = \pgfmathresult].}% + \else + \pgfplots@error{Sorry, 'plot mesh' needs either '[mesh/rows=<N>]' or '[mesh/cols=<N>]' set, + but it did not find any of them. + I also tried rows = sqrt(num points) = sqrt(\pgfplotsplothandlermesh@numpoints) = \pgfmathresult\space without success.}% + \fi + \pgfmath@smuggleone\pgfplotsplothandlermesh@rows + \endgroup + \let\pgfplotsplothandlermesh@cols=\pgfplotsplothandlermesh@rows + \fi + \else + % #1=0 -> leave them empty. + \fi + \fi + \fi + \fi + \if1#1% + \ifx\pgfplotsplothandlermesh@rows\pgfutil@empty + \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty + \else + % Compute 'rows' out of 'num points' and 'cols': + \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty + \pgfplots@error{Sorry, matrix input needs a valid '[mesh/num points=<N>]' variable if only one of '[mesh/rows=<N>]' or '[mesh/cols=<N>]' is given.}% + \def\pgfplotsplothandlermesh@numpoints{100}% + \fi + \begingroup + \c@pgf@counta=\pgfplotsplothandlermesh@numpoints\relax + \divide\c@pgf@counta by\pgfplotsplothandlermesh@cols\relax + \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}% + \endgroup + \let\pgfplotsplothandlermesh@rows=\pgfplots@glob@TMPa + \fi + \else + \ifx\pgfplotsplothandlermesh@cols\pgfutil@empty + % Compute 'cols' out of 'num points' and 'rows': + \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty + \pgfplots@error{Sorry, matrix input needs a valid '[mesh/num points=<N>]' variable if only one of '[mesh/cols=<N>]' or '[mesh/rows=<N>]' is given.}% + \def\pgfplotsplothandlermesh@numpoints{100}% + \fi + \begingroup + \c@pgf@counta=\pgfplotsplothandlermesh@numpoints\relax + \divide\c@pgf@counta by\pgfplotsplothandlermesh@rows\relax + \xdef\pgfplots@glob@TMPa{\the\c@pgf@counta}% + \endgroup + \let\pgfplotsplothandlermesh@cols=\pgfplots@glob@TMPa + \fi + \fi + \ifx\pgfplotsplothandlermesh@numpoints\pgfutil@empty + \c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@rows\relax + \multiply\c@pgfplots@scanlineindex by \pgfplotsplothandlermesh@cols\relax + \edef\pgfplotsplothandlermesh@numpoints{\the\c@pgfplots@scanlineindex}% + \fi + % + \c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@rows\relax + \multiply\c@pgfplots@scanlineindex by\pgfplotsplothandlermesh@cols\relax + \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@numpoints\relax + \else + \ifcase\pgfplots@mesh@checkmode\relax + % mesh/check=false + \def\pgfplots@loc@TMPa##1{}% + \or + % mesh/check=warning + \def\pgfplots@loc@TMPa##1{\pgfplots@warning{##1}}% + \or + % mesh/check=error + \def\pgfplots@loc@TMPa##1{\pgfplots@error{##1}}% + \fi + \pgfplots@loc@TMPa{the arguments of [mesh/rows=\pgfplotsplothandlermesh@rows,mesh/cols=\pgfplotsplothandlermesh@cols] assume \the\c@pgfplots@scanlineindex\space points, but I got actually N = \pgfplotsplothandlermesh@numpoints\space points! The data matrix appears to be incomplete or overcomplete!? [Use mesh/check=false to disable this message]}% + \fi + \fi + \else + % 2d visualization has no mesh: + \edef\pgfplotsplothandlermesh@rows{\pgfplotsplothandlermesh@numpoints}% + \def\pgfplotsplothandlermesh@cols{1}% + \fi + % + \def\pgfplots@loc@TMPa{\pgfkeyssetvalue{/pgfplots/mesh/rows}}% + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplotsplothandlermesh@rows}% + \def\pgfplots@loc@TMPa{\pgfkeyssetvalue{/pgfplots/mesh/cols}}% + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplotsplothandlermesh@cols}% +}% + +%% +%% Helper structs for patch plots (surfaces) + +\def\pgfplotspatchvertex#1#2#3#4\endvertex{% + \def\pgfplotspatchvertexstruct{{#1}{#2}{#3}#4}% + \def\pgfplotspatchvertexx{#1}% + \def\pgfplotspatchvertexy{#2}% + \def\pgfplotspatchvertexmeta{#3}% + \def\pgfplotspatchvertexdepth{#4}% +}% +\def\pgfplotspointpatchvertex#1#2#3#4\endvertex{% + \global\pgf@x=#1 + \global\pgf@y=#2 +}% + +% Allows to combined different vertices in the form +% \pgfplotspatchvertexaccumstart +% \expandafter\pgfplotspatchvertexadd\vertexA\times{0.25}% +% \expandafter\pgfplotspatchvertexadd\vertexB\times{0.5}% +% \expandafter\pgfplotspatchvertexadd\vertexC\times{0.75}% +% \pgfplotspatchvertexfinish\finalvertex +% --> now, \finalvertex contains the result vertex, 0.25*A + 0.5*B + 0.75*C . +% +% THERE MUST NOT BE MATH INBETWEEN. +% More precisely, this overwrites the macros +% \pgf@x,\pgf@y, \pgf@xa,\pgf@ya, \pgf@yb, \pgfmathresult and \pgfplotspatchvertexdepth +\def\pgfplotspatchvertexaccumstart{% + \pgf@xa=0pt + \pgf@ya=0pt + \pgf@yb=0pt + \pgfplotscoordmath{meta}{zero}% +}% +\def\pgfplotspatchvertexadd#1#2#3#4\times#5{% + \global\pgf@x=#1 + \global\pgf@y=#2 + \advance\pgf@xa by#5\pgf@x + \advance\pgf@ya by#5\pgf@y + \let\pgfmathresult@=\pgfmathresult + \pgfplotscoordmath{meta}{parsenumber}{#5}% + \pgfplotscoordmath{meta}{op}{multiply}{{#3}{\pgfmathresult}}% + \pgfplotscoordmath{meta}{op}{add}{{\pgfmathresult@}{\pgfmathresult}}% + \def\pgfplotspatchvertexdepth{#4}% + \ifx\pgfplotspatchvertexdepth\pgfutil@empty + \else + \global\pgf@y=#4pt + \advance\pgf@yb by#5\pgf@y + \fi +}% +\def\pgfplotspatchvertexfinish#1{% + \edef#1{{\the\pgf@xa}{\the\pgf@ya}{\pgfmathresult}\ifx\pgfplotspatchvertexdepth\pgfutil@empty\else\pgf@sys@tonumber\pgf@yb\fi}% +} +% Same as \pgfplotspatchvertexadd, but it only adds the X and Y +% coordinates (ignoring the rest). +\def\pgfplotspatchvertexaddXY#1#2#3#4\times#5{% + \global\pgf@x=#1 + \global\pgf@y=#2 + \advance\pgf@xa by#5\pgf@x + \advance\pgf@ya by#5\pgf@y +}% +% Same as \pgfplotspatchvertexfinish, but it only saves X and Y. +\def\pgfplotspatchvertexfinishXY#1{% + \edef#1{{\the\pgf@xa}{\the\pgf@ya}{}}% +} + +% #1 class name +% #2 method +% <any method arguments follow> +\def\pgfplotspatchclass#1#2{% + \pgfutil@ifundefined{pgfpptch@#1@#2}{% + \pgfplotspatchclasserror{#1}{#2}% + }{% + \edef\pgfplotspatchclassname{#1}% + \csname pgfpptch@#1@#2\endcsname + }% +}% +\def\pgfplotspatchclasserror#1#2{% + \pgfutil@ifundefined{pgfpptch@#1@}{% + \pgfplots@error{Sorry, the 'patch type=#1' is not defined. Maybe you misspelled it? Or perhaps you need to load \string\usepgfplotslibrary{patchplots}?}% + }{% + \pgfplots@error{Sorry, the patch class '#1' has no method '#2' (or it is not yet implemented)}% + }% +}% + +\def\pgfplotsplothandlermesh@setnextvertex#1{% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set next vertex}{#1}% +}% + +% Declares a new patch class named #1. +% +% #1: a string name. +% #2: methods defining the class, provided as key values. See the +% predefined classes to adjust your own ones. Documentation about the +% available methods and their arguments can be found below in this +% file. +% +% @see \usepgfplotslibrary{patchplots} +\def\pgfplotsdeclarepatchclass#1#2{% + \edef\pgfplotsdeclarepatchclass@{@#1@}% + \pgfutil@ifundefined{pgfpptch@#1@}{% + % Ok. This is the FIRST declaration of this patch class. + % Define some default algorithms. + % + \expandafter\def\csname pgfpptch@#1@\endcsname{#1}% + \pgfqkeys{/pgfplots/@declare patch}{% + init=, + allow matrix=0, + init pdf shading=, + stream to shader={% +%\message{\pgfplotspatchclassname: stream to shader: Starting ^^J}% + \pgfplotspatchclass{\pgfplotspatchclassname}{foreach vertex}{% +%\message{vertex (\pgfplotspatchvertexx,\pgfplotspatchvertexy[\pgfplotspatchvertexmeta]. ^^J}% + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotslibrarysurfstreamcoord{% + \global\pgf@x=\pgfplotspatchvertexx\space + \global\pgf@y=\pgfplotspatchvertexy\space + }{\pgfplotspointmetatransformed}% + }% + },% + get num cdata vertices=\pgfplotspatchclass{\pgfplotspatchclassname}{get vertices}, + set edge visible=\expandafter\edef\csname pgfppatchedge@##1\endcsname{##2}, + uses view depth=0, + serialize except vertices=\let\pgfplotsretval\pgfutil@empty, + deserialize except vertices=##1, + serialize={% + % the default serialization is not necessarily the fastest + % possible. But it should work. + \pgfplotspatchclass{\pgfplotspatchclassname}{serialize except vertices}% + \t@pgfplots@toka=\expandafter{\pgfplotsretval + \let\pgfplotspatchready@defaultserialize=\pgfplotspatchready + \let\pgfplotspatchready=\relax + }% + \edef\pgfplotsretval{% + \noexpand\pgfplotspatchclass{\pgfplotspatchclassname}{new}% + \the\t@pgfplots@toka + }% + \pgfplotspatchclass{\pgfplotspatchclassname}{foreach vertex}{% + \t@pgfplots@toka=\expandafter{\pgfplotsretval}% + \edef\pgfplotsretval{\the\t@pgfplots@toka + \noexpand\pgfplotspatchclass{\pgfplotspatchclassname}{set next vertex}{\pgfplotspatchvertexstruct}% + }% + }% + \expandafter\def\expandafter\pgfplotsretval\expandafter{\pgfplotsretval + \let\pgfplotspatchready=\pgfplotspatchready@defaultserialize + }% + }, + deserialize=##1, + triangulate class=triangle, + triangulate={% + \pgfplots@error{triangulate: not yet implemented for \pgfplotspatchclassname}% + },% + refine={% + \let\pgfplotsrefinedpatchready=\pgfplotspatchready + \pgfplotspatchclass@recursiverefine{##1}% + },% + recursive refine@={% + \pgfplots@error{refine: not yet implemented for \pgfplotspatchclassname}% + },% + }% + }{}% + % + % + \pgfqkeys{/pgfplots/@declare patch}{#2}% + % + % + \pgfutil@ifundefined{pgfpptch\pgfplotsdeclarepatchclass@ foreach cdata vertex}{% + \pgfutil@namelet + {pgfpptch\pgfplotsdeclarepatchclass@ foreach cdata vertex} + {pgfpptch\pgfplotsdeclarepatchclass@ foreach vertex}% + }{% + }% + \pgfutil@ifundefined{pgfpptch\pgfplotsdeclarepatchclass@ stroke path}{% + \pgfutil@namelet + {pgfpptch\pgfplotsdeclarepatchclass@ stroke path} + {pgfpptch\pgfplotsdeclarepatchclass@ fill path}% + }{% + }% +}% +\pgfqkeys{/pgfplots/@declare patch}{% + % may do any more or less global preparations. It is some sort (!) + % of constructor. + init/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ init\endcsname{#1}},% + allow matrix/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ allow matrix\endcsname{\def\pgfplotsretval{#1}}},% + uses view depth/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ uses view depth\endcsname{\def\pgfplotsretval{#1}}},% + new/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ new\endcsname{#1}},% + % + % sets the next vertex value of the patch. + % + % if the patch has all expected vertices, \pgfplotspatchready is + % invoked and the next call to 'set next vertex' will start a new + % patch. + % + % #1: encodes the current vertex such that + % \pgfplotspatchvertex#1\endvertex + % is accepted. + set next vertex/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ set next vertex\endcsname##1{#1}},% + % + % declares whether a single edge is visible or not. + % #1: an integer denoting the edge, either 0,1,2,...,N-1 where N = num verts + % #2: 0 if the edge is not to be stroked and 1 if it is stroked. + % + % This command doesn't need to be called; but if it is, it needs + % to be called for every edge. + % + % ATTENTION: this is *only* used by 'stroke path'. You will never + % need 'stroke path' unless some edges are invisible. If all edges + % are visible, 'stroke path' and 'fill path' are the same. + % + % This is currently *only* used for triangle triangulations! + set edge visible/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ set edge visible\endcsname##1##2{#1}},% + % + % Defines \pgfplotsretval to be a serialized representation of + % this patch. + serialize/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ serialize\endcsname{#1}},% + % Defines \pgfplotsretval to be a serialized representation of + % this patches extra data fields, excluding vertices. + % This is often a NO-OP (unless 'set edge visible' has been used) + serialize except vertices/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ serialize except vertices\endcsname{#1}},% + % + % Restores a serialized representation from #1. + deserialize/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ deserialize\endcsname##1{#1}},% + % Restores a serialized representation from #1. Only vertices are + % not stored here. + deserialize except vertices/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ deserialize except vertices\endcsname##1{#1}},% + % + % issues \pgfplotspatchvertex{...}\endvertex for the first vertex. + first vertex/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ first vertex\endcsname{#1}},% + % + % invokes + % \pgfplotspatchvertex...\endvertex + % #1 + % for the every vertex. + foreach vertex/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ foreach vertex\endcsname##1{#1}},% + % + % invokes + % \pgfplotspatchvertex...\endvertex + % #1 + % for the every colored vertex. + % See 'get num cdata vertices' + foreach cdata vertex/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ foreach cdata vertex\endcsname##1{#1}},% + % + % generates a pgf path which is readily usable for filling. + fill path/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ fill path\endcsname{#1}},% + % + % Similar to 'fill path', this here paints the edges. It is only + % useful if 'set edge visible' is in use. In all other cases, it + % is the same as 'fill path' + % + % This is currently *only* used for triangle triangulations! + stroke path/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ stroke path\endcsname{#1}},% + % + init pdf shading/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ init pdf shading\endcsname{#1}},% + stream to shader/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ stream to shader\endcsname{#1}},% + % + % expands to the number of vertices. + get num vertices/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ get num vertices\endcsname{\def\pgfplotsretval{#1}}},% + % + % expands to the number of vertices which have color data + % attached. This is usually the same as 'get num vertices' (but + % see coons patches). + get num cdata vertices/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ get num cdata vertices\endcsname{\def\pgfplotsretval{#1}}},% + % + % Approximates the given patch by at least one triangle. + % For every finished triangle, \pgfplotspatchready will be invoked + % and \pgfplotsplothandlermesh@patchclass will be set to triangle. + % More precisely, it is expected to be set to the return value of + % 'triangulate class'. + triangulate/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ triangulate\endcsname{#1}},% + % Defines \pgfplotsretval to be the classname returned by + % 'triangulate'. This is usually 'triangle' + triangulate class/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ triangulate class\endcsname{\def\pgfplotsretval{#1}}},% + % + % Refines the given patch #1 times. + % For every finished patch, \pgfplotspatchready will be invoked. + refine/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ refine\endcsname##1{#1}},% + % + % shared helper method which can be invoked recursively by refine. + % the default implementation of 'refine' will invoke this one. + % + % #1: a serialized representation of the given patch. Use it to + % restore the current patch in intermediate steps. Note that you + % may not use \begingroup/\endgroup in this method; otherwise the + % 'z buffer' algorithm will need to be done with \global (and I + % don't want that. You probably neither). + % + % The refinement loop as such will be controlled by the default + % implementation of 'refine'. This macro is ONLY to be called by the + % default implementation of 'refine'! Overwriting it should + % automatically yield refinement facilities. + % + % the macro \pgfplotspatchready should be called for each refined + % element (happens automatically if you use 'set next vertex'). + % + % POSTCONDITION: + % the element has been refined once. + recursive refine@/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ recursive refine@\endcsname##1{#1}},% + % + get pdf shading type/.style={get pdf shading type*={\def\pgfplotsretval{#1}}}, + get pdf shading type*/.code= + {\expandafter\def\csname pgfpptch\pgfplotsdeclarepatchclass@ get pdf shading type\endcsname{#1}},% +} + +\def\pgfplotspatchclass@recursiverefine#1{% + \c@pgf@counta=#1 + \ifnum\c@pgf@counta=1 + \let\pgfplotspatchready=\pgfplotsrefinedpatchready + \else + \advance\c@pgf@counta by-1 + \edef\pgfplotspatchready{\noexpand\pgfplotspatchclass@recursiverefine{\the\c@pgf@counta}}% + \fi + % + \pgfplotspatchclass{\pgfplotspatchclassname}{serialize}% + \t@pgfplots@toka=\expandafter{\pgfplotsretval}% + \t@pgfplots@tokc=\expandafter{\pgfplotspatchready}% + \edef\pgfplots@loc@TMPa{% + \noexpand\pgfplotspatchclass{\pgfplotspatchclassname}{deserialize}{\the\t@pgfplots@toka}% + \noexpand\def\noexpand\pgfplotspatchready{\the\t@pgfplots@tokc}% + \noexpand\def\noexpand\pgfplotspatchclassname{\pgfplotspatchclassname}% % FIXME: is that correct? + }% + \expandafter\pgfplotspatchclass@recursiverefine@\expandafter{\pgfplots@loc@TMPa}% +}% +\def\pgfplotspatchclass@recursiverefine@{% + \pgfplotspatchclass{\pgfplotspatchclassname}{recursive refine@}% +}% + + +% sequence macros preferred over integer indices. +% using characters avoids the extensive use of \csname ...\endcsname +% and \expandafter which would be necessary for integer indices. +\def\pgfpptchindexnext@A{B}% 0->1 +\def\pgfpptchindexnext@B{C}% 1->2 +\def\pgfpptchindexnext@C{D}% 2->3 +\def\pgfpptchindexnext@D{E}% 3->4 +\def\pgfpptchindexnext@E{F}% 4->5 +\def\pgfpptchindexnext@F{G}% 5->6 +\def\pgfpptchindexnext@G{H}% 6->7 +\def\pgfpptchindexnext@H{I}% 7->8 +\def\pgfpptchindexnext@I{J}% 8->9 +\def\pgfpptchindexnext@J{K}% 9->10 +\def\pgfpptchindexnext@K{L}% 10->11 +\def\pgfpptchindexnext@L{M}% 11->12 +\def\pgfpptchindexnext@M{N}% 12->13 +\def\pgfpptchindexnext@N{O}% 13->14 +\def\pgfpptchindexnext@O{P}% 14->15 +\def\pgfpptchindexnext@P{Q}% 15->16 +\def\pgfpptchindexnext@Q{R}% 16->17 + +\pgfplotsdeclarepatchclass{line}{% + allow matrix=0, + new=\def\pgfplotspatchclass@line@no{0}, + set next vertex={% + \if0\pgfplotspatchclass@line@no\relax + \edef\pgfplotspatchclass@line@A{#1}% + \def\pgfplotspatchclass@line@no{1}% + \else + \edef\pgfplotspatchclass@line@B{#1}% + \def\pgfplotspatchclass@line@no{0}% + \pgfplotspatchready% + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@line@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@line@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@line@B\endvertex #1% + }, + fill path={% + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@line@A\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@line@B\endvertex}% + }, + serialize except vertices=\let\pgfplotsretval\pgfutil@empty,% + deserialize except vertices=, + get num vertices=2, + get pdf shading type=0, +}% + +\pgfplotsdeclarepatchclass{triangle}{% + allow matrix=0, + new=\def\pgfplotspatchclass@tri@no{0}\let\pgfplotspatchclass@trie@AB\relax, + set next vertex={% + \ifcase\pgfplotspatchclass@tri@no\relax + \edef\pgfplotspatchclass@tri@A{#1}% + \def\pgfplotspatchclass@tri@no{1}% + \or + \edef\pgfplotspatchclass@tri@B{#1}% + \def\pgfplotspatchclass@tri@no{2}% + \or + \edef\pgfplotspatchclass@tri@C{#1}% + \def\pgfplotspatchclass@tri@no{0}% + \pgfplotspatchready% + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@tri@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tri@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tri@B\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@tri@C\endvertex #1% + }, + fill path={% + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}% + \pgfpathclose + }, + stroke path={% + \ifx\pgfplotspatchclass@trie@AB\relax + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}% + \pgfpathclose + \else + \if1\pgfplotspatchclass@trie@AB + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}% + \fi + \if1\pgfplotspatchclass@trie@BC + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}% + \fi + \if1\pgfplotspatchclass@trie@CA + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}% + \fi + \fi + }, + triangulate=\pgfplotspatchready, + set edge visible={% + \ifcase#1 + \edef\pgfplotspatchclass@trie@AB{#2}% + \or + \edef\pgfplotspatchclass@trie@BC{#2}% + \or + \edef\pgfplotspatchclass@trie@CA{#2}% + \fi + }, + serialize except vertices={% + \ifx\pgfplotspatchclass@trie@AB\relax + \let\pgfplotsretval\pgfutil@empty% + \else + \edef\pgfplotsretval{% + \noexpand\def\noexpand\pgfplotspatchclass@trie@AB{\pgfplotspatchclass@trie@AB}% + \noexpand\def\noexpand\pgfplotspatchclass@trie@BC{\pgfplotspatchclass@trie@BC}% + \noexpand\def\noexpand\pgfplotspatchclass@trie@CA{\pgfplotspatchclass@trie@CA}% + }% + \fi + },% + recursive refine@={% + % + \pgfplotspatchclass{\pgfplotspatchclassname}{new}% + % + % Perform longest edge bisection. + \pgfpointdiff + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}% + \edef\pgfplots@loc@TMPa{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}% + \expandafter\pgfmath@basic@veclen@\pgfplots@loc@TMPa + \pgf@xa=\pgfmathresult pt + \pgf@yc=\pgf@xa % "max so far" + \def\pgfplotspatch@tri@longestedgestart{A}% + % + \pgfpointdiff + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@B\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}% + \edef\pgfplots@loc@TMPa{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}% + \expandafter\pgfmath@basic@veclen@\pgfplots@loc@TMPa + \pgf@xa=\pgfmathresult pt + \ifdim\pgf@xa>\pgf@yc + \pgf@yc=\pgf@xa + \def\pgfplotspatch@tri@longestedgestart{B}% + \fi + % + \pgfpointdiff + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@C\endvertex}% + {\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@tri@A\endvertex}% + \edef\pgfplots@loc@TMPa{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}% + \expandafter\pgfmath@basic@veclen@\pgfplots@loc@TMPa + \pgf@xa=\pgfmathresult pt + \ifdim\pgf@xa>\pgf@yc + \def\pgfplotspatch@tri@longestedgestart{C}% + \fi + % The ordering is not arbitrary + % (unless z buffer=sort is in effect). Let's assume that the + % AB edge is BACKGROUND and the CD edge is FOREGROUND. Then + % this sequence here should have approximately the same depth + % ordering: + % + \pgfplotspatchvertexaccumstart + \if A\pgfplotspatch@tri@longestedgestart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@A\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@B\times{0.5}% + \def\pgfplots@loc@TMPa{ACM,BCM}% + \else + \if B\pgfplotspatch@tri@longestedgestart + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@B\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@C\times{0.5}% + \def\pgfplots@loc@TMPa{ABM,ACM}% + \else + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@C\times{0.5}% + \expandafter\pgfplotspatchvertexadd\pgfplotspatchclass@tri@A\times{0.5}% + \def\pgfplots@loc@TMPa{ABM,BCM}% + \fi + \fi + \pgfplotspatchvertexfinish\pgfplotspatchclass@tri@M + \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa;\pgfplotspatchclass@tri@M}% + % + % invoke helper method such that I don't need to restore or + % recompute \pgfplotspatchclass@tri@M during recursion. + \expandafter\pgfplotspatchclass@tri@recursiverefine@@\pgfplots@loc@TMPa\relax{#1}% + }, + deserialize except vertices=% + \let\pgfplotspatchclass@trie@AB\relax + #1, + get pdf shading type=4, + get num vertices=3, +}% +\def\pgfplotspatchclass@tri@recursiverefine@@#1#2M,#3#4M;#5\relax#6{% + \expandafter\let\expandafter\pgfplotspatchclass@tri@A@\csname pgfplotspatchclass@tri@#1\endcsname + \expandafter\let\expandafter\pgfplotspatchclass@tri@B@\csname pgfplotspatchclass@tri@#2\endcsname + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@tri@A@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@tri@B@}% + \pgfplotsplothandlermesh@setnextvertex{#5}% + #6% + % + \expandafter\let\expandafter\pgfplotspatchclass@tri@A@\csname pgfplotspatchclass@tri@#3\endcsname + \expandafter\let\expandafter\pgfplotspatchclass@tri@B@\csname pgfplotspatchclass@tri@#4\endcsname + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@tri@A@}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@tri@B@}% + \pgfplotsplothandlermesh@setnextvertex{#5}% + #6% +}% + + +\pgfplotsdeclarepatchclass{rectangle}{% + allow matrix=1, + new=\def\pgfplotspatchclass@rect@no{0}, + set next vertex={% + \ifcase\pgfplotspatchclass@rect@no\relax + \edef\pgfplotspatchclass@rect@A{#1}% + \def\pgfplotspatchclass@rect@no{1}% + \or + \edef\pgfplotspatchclass@rect@B{#1}% + \def\pgfplotspatchclass@rect@no{2}% + \or + \edef\pgfplotspatchclass@rect@C{#1}% + \def\pgfplotspatchclass@rect@no{3}% + \or + \edef\pgfplotspatchclass@rect@D{#1}% + \def\pgfplotspatchclass@rect@no{0}% + \pgfplotspatchready% + \fi + }, + first vertex=\expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex, + foreach vertex={% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@B\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@C\endvertex #1% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@D\endvertex #1% + }, + stream to shader={% + % a 'foreach vertex' with slightly different sequence: + \def\pgfplots@foreachvertex@@{% + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotslibrarysurfstreamcoord{% + \global\pgf@x=\pgfplotspatchvertexx\space + \global\pgf@y=\pgfplotspatchvertexy\space + }{\pgfplotspointmetatransformed}% + }% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@A\endvertex\pgfplots@foreachvertex@@% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@B\endvertex\pgfplots@foreachvertex@@% + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@D\endvertex\pgfplots@foreachvertex@@% EXCHANGED SEQUENCE + \expandafter\pgfplotspatchvertex\pgfplotspatchclass@rect@C\endvertex\pgfplots@foreachvertex@@% + },% + fill path={% + \pgfpathmoveto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@A\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@B\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@C\endvertex}% + \pgfpathlineto{\expandafter\pgfplotspointpatchvertex\pgfplotspatchclass@rect@D\endvertex}% + \pgfpathclose + }, + init pdf shading={% + \if0\b@pgfplotsplothandlermesh@matrixoutput + \ifnum\pgfkeysvalueof{/pgfplots/surf shading/cols}=2 + \else + \pgfplots@error{Sorry, (patch type=rectangle) and (rectangular patch shadings with more than one rectangle) is not supported (got \pgfkeysvalueof{/pgfplots/surf shading/cols} x * input points). + It is supported if z buffer!=sort. Consider using 'patch to triangles=true' to combine it with z buffer=sort}% + \fi + \fi + }, + recursive refine@={% + \pgfplots@error{Please use \string\usepgfplotslibrary{patchplots} in order to use 'refine,patch type=\pgfplotspatchclassname'}% + }, + triangulate={% + \let\pgfplotsplothandlermesh@patchclass@=\pgfplotsplothandlermesh@patchclass + \def\pgfplotsplothandlermesh@patchclass{triangle}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}10% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}21% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@A}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B}% + % + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}01% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}11% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set edge visible}20% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@B}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@C}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotspatchclass@rect@D}% + \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@ + },% + serialize except vertices=\let\pgfplotsretval\pgfutil@empty,% + deserialize except vertices=, + get pdf shading type=5, + get num vertices=4, +}% + +\def\pgfplots@rect@next@A{B} +\def\pgfplots@rect@next@B{C} +\def\pgfplots@rect@next@C{D} +\def\pgfplots@rect@next@D{A} + +\def\pgfplots@rect@rnext@A{D} +\def\pgfplots@rect@rnext@B{A} +\def\pgfplots@rect@rnext@C{B} +\def\pgfplots@rect@rnext@D{C} + +% Ideas: make sure that the foreground edge is the 'v=1' +% edge of the coons patch, i.e. that it is drawn on top of +% the rest. +% +% Furthermore, for fixed v, the 'u=1' point should belong +% to the foreground (as it is drawn on top of u=0). +% +% In other words, if the coons patch looks like +% +% BB-------CC <--v=1 +% | | +% | | +% | | +% AA-------DD <--v=0 +% | | +% u=0 u=1 +% +% where the AA,BB,CC,DD are the corners of the coons +% patch, The FOREGROUND POINT of our visualization here should be CC, +% the second most foreground point BB (assuming that +% foreground point and second most foreground point are +% adjacent). +% +% Thus, if 'CC' is behind of 'BB' in the A,B,C,D ordering: +% start the coons patch with AA := BB-1 in forward +% direction. +% else +% start the coons patch with AA := BB+1 in reverse +% direction. +% +% #1: the vertex prefix for the rectangular shape. +% Thus, \csname #1A\endcsname is the first vertex, \csname #1B\endcsname the second +% and #1C, #1D the third and fourth. +% +% #2: A macro name. It will be defined to be either A,B,C or D. +% #3: A macro name. It will be defined to be either empty or 'r'. If +% it is empty, the coons patch shall be in the sequence +% #2,next(#2),next(next(#2),.... +% If it is 'r', the coons patch shall be in the sequence +% #2,prev(#2),prev(prev(#2),... +% +% Note that this method works also for biquadratic patches since these +% patches also have #1A, #1B, #1C and #1D as their corners. +% +\def\pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth#1#2#3{% + \def#2{A}% + \def#3{}% + % + \expandafter\expandafter\expandafter\pgfplotspatchvertex\csname #1A\endcsname\endvertex + \ifx\pgfplotspatchvertexdepth\pgfutil@empty + \else + % aaah -- we have z buffer information. Then we will use it! + \edef\PA{\pgfplotspatchvertexdepth pt A}% + \expandafter\expandafter\expandafter\pgfplotspatchvertex\csname #1B\endcsname\endvertex + \edef\PB{\pgfplotspatchvertexdepth pt B}% + \expandafter\expandafter\expandafter\pgfplotspatchvertex\csname #1C\endcsname\endvertex + \edef\PC{\pgfplotspatchvertexdepth pt C}% + \expandafter\expandafter\expandafter\pgfplotspatchvertex\csname #1D\endcsname\endvertex + \edef\PD{\pgfplotspatchvertexdepth pt D}% + \pgfplotsutilsortfour\PA\PB\PC\PD + \def\toCHAR##1pt ##2{##2}% get original index + % + % + \edef\PA{\expandafter\toCHAR\PA}%% + \edef#2{\expandafter\toCHAR\PB}%% + \edef\Pnext{\csname pgfplots@rect@next@#2\endcsname}% this here uses only A,B,C and D (also for biquadratic patches!) + \if\Pnext\PA + % ok, next(BB) = CC. + % that means we have to advance forward. + \def#3{}% + \edef#2{\csname pgfplots@rect@rnext@#2\endcsname}% + \else + \edef#2{\csname pgfplots@rect@next@#2\endcsname}% + \def#3{r}% + \fi +%\message{^^JDEPTH SEQUENCE for rectangle: \PA, \PB, \PC, \PD^^J}% +%\message{COONS PATH ORDERING: starts with #2, direction: \ifx#3\pgfutil@empty forward\else backward\fi^^J}% + \fi +}% + +\def\pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth@no@op#1#2#3{% + \def#2{A}% + \def#3{}% +} + +% The low-level tikz plot handler for 3D mesh and surface plots. +% +% It expects +% a) a coordinate stream which is a linearized matrix, iterated either +% rowwise or column wise, +% b) the current set of options in /pgfplots/mesh/. +% +% +% ATTENTION: +% this handler is NOT as general as the others. In particular, it +% can't be interrupted by TeX groups: every single statement, +% starting with streamstart and ending with stream end, must be in +% the same scope! +% +% As a consequence, you can't use this handler inside of (all) TikZ +% input streams. Try it out. It will work in pgfplots, however. +% +% Furthermore, it relies on a couple of pgfplots macros. This may +% change in future versions. +% It relies on: +% - \ifpgfplots@curplot@threedim +% - \pgfplots@current@point@meta +% -> it also invokes \pgfplots@perpointmeta@preparetrafo and its +% @APPLY counterpart which checks for +% - \pgfplots@metamax +% If you use it outside of pgfplots, use +% \global\let\pgfplots@metamax=\pgfutil@empty +% This is can be used without an initialised +% pgfplots axes - as long as \pgfplots@current@point@meta is in +% the range [0,1000]. +% - for the case 'shader=interp', a bounding box must be established +% before the plot is finished. This must be done using +% \def\pgfplotspointbbupperright{\pgfqpointxyz{2}{2}{0.9}} +% \def\pgfplotspointbblowerleft {\pgfqpointxyz{0}{0}{0.1}} +% or something like that. +% +% Besides these internals, it also relies on all public /pgfplots +% configuration keys related to mesh/surface plots. +% +% Please note that the 'z buffer' feature will not work without +% pgfplots (especially the z buffer=sort feature). +% +% Here is an example which compiles without a pgfplots axes: +% ---------------------------------------------------------- +% \begin{tikzpicture} +% \scope[ +% /pgfplots/.cd, +% surf, +% shader=faceted, +% mesh/rows=4, +% mesh/cols=4, +% mesh/num points=, +% /tikz/x={(0.44237cm,-0.07439cm)}, +% /tikz/y={(0.30942cm,0.23932cm)}, +% /tikz/z={(0.0cm,1.5cm)}, +% ] +% \makeatletter +% +% \global\let\pgfplots@metamax=\pgfutil@empty +% \pgfplots@curplot@threedimtrue +% +% \pgfplotsplothandlermesh +% \pgfplotstreamstart +% +% \def\rangea{0.21}% +% \def\rangeb{0.9}% +% +% \pgfmathparse{1000/(\rangeb-\rangea)} +% \let\factor=\pgfmathresult +% +% \def\simplecoordinate(#1,#2,#3){% +% \pgfmathparse{\factor*(#3 - \rangea)}% +% \let\pgfplots@current@point@meta=\pgfmathresult +% \pgfplotstreampoint{\pgfqpointxyz{#1}{#2}{#3}}% +% }% +% % for the case 'shaer=interp': +% \def\pgfplotspointbbupperright{\pgfqpointxyz{2}{2}{0.9}} +% \def\pgfplotspointbblowerleft {\pgfqpointxyz{0}{0}{0.1}} +% +% \simplecoordinate(0,3,0.7) +% \simplecoordinate(1,3,0.5) +% \simplecoordinate(2,3,0.58) +% \simplecoordinate(3,3,0.9) +% +% \simplecoordinate(0,2,0.68) +% \simplecoordinate(1,2,0.22) +% \simplecoordinate(2,2,0.25) +% \simplecoordinate(3,2,0.4) +% +% \simplecoordinate(0,1,0.6) +% \simplecoordinate(1,1,0.3) +% \simplecoordinate(2,1,0.21) +% \simplecoordinate(3,1,0.3) +% +% \simplecoordinate(0,0,0.8) +% \simplecoordinate(1,0,0.56) +% \simplecoordinate(2,0,0.5) +% \simplecoordinate(3,0,0.75) +% +% +% \pgfplotstreamend +% \pgfusepath{stroke} +% +% \endscope +% \end{tikzpicture} +% ---------------------------------------------------------- +% END OF EXAMPLE +% -> see also the legend image for mesh plots. +% +\def\pgfplotsplothandlermesh{% + \pgfkeysgetvalue{/pgfplots/patch type}\pgfplotsplothandlermesh@patchclass + \ifx\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@defaulttext + \let\pgfplotsplothandlermesh@patchclass=\pgfutil@empty + \fi + % FIXME : detect 1d mode here! + \ifx\pgfplotsplothandlermesh@patchclass\pgfutil@empty + % assign default patch class. + \if1\pgfplotsplothandlermesh@matrixinput + \def\pgfplotsplothandlermesh@patchclass{rectangle}% + \else + \def\pgfplotsplothandlermesh@patchclass{triangle}% + \fi + \pgfkeyslet{/pgfplots/patch type}\pgfplotsplothandlermesh@patchclass + \fi + % + \if0\pgfplotsplothandlermesh@matrixinput + % mesh input=patches: simply skip empty input lines: + \pgfkeyssetvalue{/pgfplots/empty line}{none}% + \fi + % + \pgfkeysgetvalue{/pgfplots/patch table/value}\pgfplotsplothandlermesh@patchtable + \ifx\pgfplotsplothandlermesh@patchtable\pgfutil@empty + \else + \def\pgfplotsplothandlermesh@matrixinput{0}% implies 'patch input=patches' + \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@mesh@patchtable + \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@mesh@patchtable + \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@mesh@patchtable + \fi + \def\pgf@plotstreamstart{% +% \scope + % + % this shouldn't be necessary, but it doesn't hurt either. + \pgfplots@perpointmeta@preparetrafo + % + \def\pgfplotsplothandlermesh@ONEDIMMODE{0}% + \pgfplotsplothandlermesh@init@meshkeys + % + % + \let\pgfplotsplothandlermesh@patchclass@input=\pgfplotsplothandlermesh@patchclass + \let\pgfplotsplothandlermesh@patchclass@output=\pgfplotsplothandlermesh@patchclass@input + \if0\pgfplotsplothandlermesh@triangulate + \else + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@input}{triangulate class}% + \let\pgfplotsplothandlermesh@patchclass@output=\pgfplotsretval + \fi + % + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@input}{init}% + \ifx\pgfplotsplothandlermesh@patchclass@input\pgfplotsplothandlermesh@patchclass@output + \else + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{init}% + \fi + % + % assign boolean: + \let\b@pgfplotsplothandlermesh@matrixoutput=\pgfplotsplothandlermesh@matrixinput + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{allow matrix}% + \if0\pgfplotsretval + \def\b@pgfplotsplothandlermesh@matrixoutput{0}% + \fi + \ifnum\pgfkeysvalueof{/pgfplots/patch refines}>0 + \def\b@pgfplotsplothandlermesh@matrixoutput{0}% + \fi + \if1\pgfplotsaxisplothasjumps + \def\b@pgfplotsplothandlermesh@matrixoutput{0}% + \fi + \if\pgfplotsplothandlermesh@zbuffer@choice4% 'z buffer=sort': + \def\b@pgfplotsplothandlermesh@matrixoutput{0}% + \fi + \if2\pgfplotsplothandlermesh@shader + \else + % 'shader!=interp' + \def\b@pgfplotsplothandlermesh@matrixoutput{0}% + \fi + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{get pdf shading type}% + \if4\pgfplotsretval + \else + \if5\pgfplotsretval + \else + \def\b@pgfplotsplothandlermesh@matrixoutput{0}% + \fi + \fi + % + % special handling: check if Type=5 shadings need to be + % converted to Type=4 + \if0\b@pgfplotsplothandlermesh@matrixoutput + % no matrix output possible + \if5\pgfplotsretval + % pdf shading type=5 (matrix output) + \ifnum\pgfplotsplothandlermesh@shader>1 + % shader=interp or shader=faceted interp + % + % oh. shading type=5 is *essentially* the same as + % matrix output, but matrix output is forbidden. + % In that case, triangulate the matrix and shade the + % triangles: + \def\pgfplotsplothandlermesh@triangulate{1}% + \def\pgfplotsplothandlermesh@patchclass@output{triangle}% + \fi + \fi + \fi + % + \pgfplotsplothandlermesh@init@DECODE + \pgfplotsplothandlermesh@init@REFINE + % + \pgfutil@ifundefined{pgfplots@drawmodes}{% + \let\pgfplots@drawmodes=\tikz@mode + \let\pgfplots@drawoptions=\tikz@options + }{}% + % + % + % Prepare color data source: + \ifx\pgfplotspointmetainputhandler\pgfutil@empty% + % oh. There is no color data!? Well... then use a constant + % color. + % + % This activates tikz colors: + %\tikz@options + \def\pgfplotsplothandlermesh@definecolor{% + \pgfplots@drawoptions + }% + \else + \pgfplotsplothandlermesh@init@cdata + \pgfplotsplothandlermesh@init@shader + \pgfplotsplothandlermesh@init@flat@color + \fi + % PREPARE THE STREAM PROCESSING: + % handling of jumps. + \pgfplotsplothandlermesh@init@jumphandling + % + % z buffering: + \pgfplotsplothandlermesh@init@zbuffer + % + \pgfplotsplothandlermesh@init@mesh@stream + % + \c@pgfplots@scanlineindex=0 + }% +}% +\def\pgfplotsplothandlermesh@patchclass@defaulttext{default}% + + +% Defines \pgfplotsretval to be either empty or the current point's +% depth according to z buffer information. +\def\pgfplotsplothandlermesh@compute@vertex@depth{\let\pgfplotsretval\pgfutil@empty}% + +% If \pgfplotsplothandlermesh@compute@vertex@depth is set to this +% particular implementation, the \pgfplotspatchvertexdepth macro will +% contain the view depth. +% +\def\pgfplotsplothandlermesh@compute@vertex@depth@doit{% + \pgfplotsmathviewdepthxyz{\pgfplots@current@point@x}{\pgfplots@current@point@y}{\pgfplots@current@point@z}% FIXME relies on pgfplots macros + \edef\pgfplotsretval{\pgfmathresult}% +}% + + +% The patch visualization works like a PIPELINE: +% +% DECODE -> CHECK JUMP -> REFINE -> FINISH +% +% where FINISH is usually nothing but VISUALIZE; but it can also mean +% to collect patches, sort them according to view depth and visualize +% the result. +% +% Each single PIPE element can be exchanged by a separate "subclass". +% For example, DECODE can either DECODE from a matrix (a lattice) or a +% sequence of patch coords. +% +\def\pgfplotsplothandlermesh@stream#1{% + \pgfplotsplothandlermesh@PIPE@DECODE{#1}% +}% + +% accumulates a patch vertex-by-vertex. +% #1 the next vertex of a patch (#1 defines canvas coordinates \pgf@x +% and \pgf@y). +% +% @PRECONDITION \pgfplots@current@point@[xyz] and \pgfplots@current@point@meta +% need to be defined. +\def\pgfplotsplothandlermesh@PIPE@DECODE#1{% + \let\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@input + \pgfplotsplothandlermesh@compute@vertex@depth% <-- this modifies \pgfplotsretval + \pgf@process{#1}% + % calls \pgfplotspatchready when ready + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{set next vertex}{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}\pgfplotsretval}%% +}% +\def\pgfplotspatchready{% + \pgfplotsplothandlermesh@PIPE@CHECKJUMP +}% +\let\pgfplotspatchready@orig=\pgfplotspatchready +\def\pgfplotsplothandlermesh@PIPE@CHECKJUMP{% + \pgfplots@loc@tmptrue + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{foreach vertex}{% + \pgfplotsplothandlermesh@check@unbounded% + }% + \ifpgfplots@loc@tmp + \expandafter\pgfplotsplothandlermesh@PIPE@REFINE + \fi +}% +\def\pgfplotsplothandlermesh@PIPE@REFINE@no@op{% + \pgfplotsplothandlermesh@PIPE@FINISH +}% +\let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@no@op + +% invoked when a patch is completely processed. +% This might be replaced by the z buffering algorithm +\def\pgfplotsplothandlermesh@PIPE@FINISH{% + \pgfplotsplothandlermesh@VISUALIZE +}% + +% Standard implementation for VISUALIZE +\def\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke{% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{fill path}% + \pgfplotsplothandlermesh@definecolor + \pgfplotsplothandlermesh@usepath +}% +\let\pgfplotsplothandlermesh@VISUALIZE@std=\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke + +\let\pgfplotsplothandlermesh@VISUALIZE=\pgfplotsplothandlermesh@VISUALIZE@std + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\pgfplotsplothandlermesh@init@DECODE{% + \if1\pgfplotsplothandlermesh@matrixinput + % mesh input=lattice + % Init memory: + % + % And now finally: initialise the conversion from + % LINEARIZED COORD STREAM -> DATA MATRIX: + \if\pgfplots@plot@mesh@ordering0% + % x varies (=rowwise): + \let\pgfplotsplothandlermesh@scanlinelength=\pgfplotsplothandlermesh@cols + \else + % y varies (=colwise): + \let\pgfplotsplothandlermesh@scanlinelength=\pgfplotsplothandlermesh@rows + \fi + % + \if1\pgfplotsplothandlermesh@ONEDIMMODE +%\message{initialised DECODE for 1d mode.^^J}% + \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@matrix@ONEDIMMODE + \else + \if0\b@pgfplotsplothandlermesh@matrixoutput + % in fact, this does only remember the maximum capacity; + % it doesn't fill the memory. + \c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax + \advance\c@pgfplots@scanlineindex by1 + \pgfplotsdequenewempty{lastscanline}\capacity{\the\c@pgfplots@scanlineindex}% + \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@matrix@fillscanline +%\message{initialised DECODE for patch output (from matrix).^^J}% + \else + % SPECIAL HANDLING! + \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@to@shader +%\message{initialised DECODE for direct matrix output (from matrix).^^J}% + \fi + \fi + \else +%\message{initialised DECODE for patch output (from patch).^^J}% + \fi +}% + + +\def\pgfplotsplothandlermesh@PIPE@REFINE@triangulate{% + \let\pgfplotspatchready\pgfplotsplothandlermesh@PIPE@FINISH + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{triangulate}% + \let\pgfplotspatchready\pgfplotspatchready@orig +}% +\def\pgfplotsplothandlermesh@PIPE@REFINE@recursively{% + \let\pgfplotspatchready\pgfplotsplothandlermesh@PIPE@FINISH + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{refine}{\pgfplotsplothandlermesh@refinecount}% + \let\pgfplotspatchready\pgfplotspatchready@orig +}% +\def\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively{% + \let\pgfplotspatchready=\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively@patchready + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{refine}{\pgfplotsplothandlermesh@refinecount}% + \let\pgfplotspatchready\pgfplotspatchready@orig +}% +\def\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively@patchready{% + \let\pgfplotspatchready\pgfplotsplothandlermesh@PIPE@FINISH + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{triangulate}% + \let\pgfplotspatchready\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively@patchready +}% +\def\pgfplotsplothandlermesh@init@REFINE{% + \pgfkeysgetvalue{/pgfplots/patch refines}\pgfplotsplothandlermesh@refinecount + \if0\pgfplotsplothandlermesh@triangulate + \ifnum\pgfplotsplothandlermesh@refinecount>0 +%\message{initiased REFINE to REFINE.}% + \let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@recursively + \else +%\message{initiased REFINE to NOP.}% + \let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@no@op + \fi + \else +%\message{initiased REFINE to triangulate.}% + \ifnum\pgfplotsplothandlermesh@refinecount>0 + \let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@triangulate@recursively + \else + \let\pgfplotsplothandlermesh@PIPE@REFINE=\pgfplotsplothandlermesh@PIPE@REFINE@triangulate + \fi + \fi +}% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% MESH SURVEY +\newif\ifpgfplotsplothandlermesh@patchtable@hascdata +\newif\ifpgfplotsplothandlermesh@patchtable@cdata@individual +\def\pgfplotsplothandlersurveystart@mesh@patchtable{% + \pgfplotsarraynewempty\pgfplots@verts +}% +\def\pgfplotsplothandlersurveypoint@mesh@patchtable{% + \pgfplotscoordmath{x}{parsenumber}{\pgfplots@current@point@x}% + \let\pgfplots@current@point@x=\pgfmathresult + % + \pgfplotscoordmath{y}{parsenumber}{\pgfplots@current@point@y}% + \let\pgfplots@current@point@y=\pgfmathresult + % + \ifpgfplots@curplot@threedim + \pgfplotscoordmath{z}{parsenumber}{\pgfplots@current@point@z}% + \let\pgfplots@current@point@z=\pgfmathresult + \fi + % + \ifpgfplotsplothandlermesh@patchtable@hascdata + % will be handled later, using data from within 'patch table': + \let\pgfplots@current@point@meta=\pgfutil@empty + \else + \pgfplotsaxissurveysetpointmeta + \fi + % + \def\pgfplots@loc@TMPa{1}% + \ifx\pgfplots@current@point@x\pgfutil@empty + \def\pgfplots@loc@TMPa{0}% + \else + \ifx\pgfplots@current@point@y\pgfutil@empty + \def\pgfplots@loc@TMPa{0}% + \else + \ifx\pgfplots@current@point@z\pgfutil@empty + \ifpgfplots@curplot@threedim + \def\pgfplots@loc@TMPa{0}% + \fi + \fi + \fi + \fi + \if1\pgfplots@loc@TMPa + \edef\pgfplots@loc@TMPa{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z;\pgfplots@current@point@meta;}% + \expandafter\pgfplotsarraypushback\pgfplots@loc@TMPa\to\pgfplots@verts + \fi +}% +\def\pgfplotsplothandlersurveyend@mesh@patchtable{% + \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@default + \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@default + \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@default + \pgfplotsplothandlersurveystart + \expandafter\pgfplotstable@isloadedtable\expandafter{\pgfplotsplothandlermesh@patchtable}{% + \pgfplots@error{Sorry, 'patch table={<loaded table>}' has not been implemented; it would probably be too slow :-(. Please provide a file name or inline table data}% + }{% + \expandafter\pgfplotstableread\expandafter*\expandafter{\pgfplotsplothandlermesh@patchtable} to listener\pgfplotsplothandlermesh@patchtable@rowlistener + }% + \pgfplotsplothandlersurveyend +}% + +\def\pgfplotsplothandlermesh@patchtable@init{% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{get num vertices}% + \let\pgfplotsplothandlermesh@patchtable@numverts=\pgfplotsretval + % + \ifpgfplotsplothandlermesh@patchtable@hascdata + \ifpgfplotsplothandlermesh@patchtable@cdata@individual + \else + \ifnum\pgfplotsplothandlermesh@patchtable@numverts<\pgfplotstablecols\relax + % prepare a pointer to data column: use the column + % after the last vertex index. + % this thing constitutes the "default" cdata source for + % 'point meta=explicit'. + \pgfplotstablereadgetptrtocolindex + {\pgfplotsplothandlermesh@patchtable@numverts} + {\pgfplots@table@PTR@CDATA}% + \else + \let\pgfplots@table@PTR@CDATA=\relax + \fi + \fi + \else + \pgfplotsplothandlermesh@patchtable@cdata@individualfalse + \fi + % + \c@pgf@countb=0 + \pgfutil@loop + \ifnum\c@pgf@countb<\pgfplotsplothandlermesh@patchtable@numverts\relax + \edef\pgfplots@loc@TMPa{% + \noexpand\pgfplotstablereadgetptrtocolindex{\the\c@pgf@countb}{\expandafter\noexpand\csname pgfplots@table@PTR@\the\c@pgf@countb\endcsname}% + }% + \pgfplots@loc@TMPa + \advance\c@pgf@countb by1 + \pgfutil@repeat + \let\pgfplotsplothandlermesh@patchtable@init=\relax +}% +\def\pgfplotsplothandlermesh@patchtable@rowlistener@exceptionmsg{% + \pgfplotsplothandlermesh@patchtable:\pgfplotstablelineno\space\space could not read column no \the\c@pgf@countb: '\pgfplots@current@vertexindex' is no valid index into the array of \pgfplotsarraysizeof\pgfplots@verts\space coordinates% +}% +\def\pgfplotsplothandlermesh@patchtable@rowlistener{% + \pgfplotsplothandlermesh@patchtable@init% + \let\pgfplotsexceptionmsg=\pgfplotsplothandlermesh@patchtable@rowlistener@exceptionmsg + % + \ifpgfplotsplothandlermesh@patchtable@hascdata + \ifpgfplotsplothandlermesh@patchtable@cdata@individual + \else + \ifx\pgfplots@table@PTR@CDATA\relax + \let\pgfplots@current@point@meta=\pgfutil@empty + \else + \pgfplotstablereadevalptr\pgfplots@table@PTR@CDATA\pgfplots@current@point@meta + \fi + \fi + \fi + % + \c@pgf@countb=0 + \pgfutil@loop + \ifnum\c@pgf@countb<\pgfplotsplothandlermesh@patchtable@numverts\relax + \expandafter\pgfplotstablereadevalptr\csname pgfplots@table@PTR@\the\c@pgf@countb\endcsname\pgfplots@current@vertexindex% + % + \ifx\pgfplots@current@vertexindex\pgfutil@empty + \else + \pgfmathfloatparsenumber{\pgfplots@current@vertexindex}% + \pgfmathfloattoint\pgfmathresult + \let\pgfplots@current@vertexindex=\pgfmathresult + % + \pgfplotsarrayselect\pgfplots@current@vertexindex\of\pgfplots@verts\to\pgfplots@stored@pt + % + \ifpgfplotsplothandlermesh@patchtable@cdata@individual + \c@pgf@countc=\c@pgf@countb\relax + \advance\c@pgf@countc by\pgfplotsplothandlermesh@patchtable@numverts\relax + \expandafter\getthisrowno\expandafter{\the\c@pgf@countc}\pgfplots@current@point@meta + \fi + % + \expandafter\pgfplotsplothandlermesh@patchtable@stream\pgfplots@stored@pt + \fi + \advance\c@pgf@countb by1 + \pgfutil@repeat + \let\pgfplotsexceptionmsg=\relax +} +\def\pgfplotsplothandlermesh@patchtable@stream#1,#2,#3;#4;{% + \def\pgfplots@current@point@x{#1}% + \def\pgfplots@current@point@y{#2}% + \def\pgfplots@current@point@z{#3}% + \ifpgfplotsplothandlermesh@patchtable@hascdata + \def\pgfplots@set@perpointmeta@done{0}% + \pgfplotsaxissurveysetpointmeta + \else + \def\pgfplots@current@point@meta{#4}% + \fi + \pgfplotsplothandlersurveypoint +}% +% MESH SURVEY +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\pgfplotsplothandlermesh@init@meshkeys{% + \if1\pgfplotsplothandlermesh@matrixinput + % mesh input=lattice + \pgfplotsautocompletemeshkeys% + \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplotsplothandlermesh@rows + \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplotsplothandlermesh@cols + \pgfkeysgetvalue{/pgfplots/mesh/num points}\pgfplotsplothandlermesh@numpoints + % + % the \pgfplotsplothandlermesh@ONEDIMMODE macro is ONLY + % interesting for matrix input. + \ifnum\pgfplotsplothandlermesh@cols>1 + \else + \def\pgfplotsplothandlermesh@ONEDIMMODE{1}% + \fi + \ifnum\pgfplotsplothandlermesh@rows>1 + \else + \def\pgfplotsplothandlermesh@ONEDIMMODE{1}% + \fi + \if1\pgfplotsplothandlermesh@ONEDIMMODE + \def\pgfplotsplothandlermesh@patchclass{line}% + \pgfkeyslet{/pgfplots/patch type}\pgfplotsplothandlermesh@patchclass + \fi + \else + % mesh input=patches + \pgfkeys{/pgfplots/mesh/ordering/x varies}% disable any special handling. + \fi +}% + + +\def\pgfplotsplothandlermesh@init@cdata{% + % Ok, we have color data. + % + % Prepare: + \def\pgfplotsplothandlermesh@definecolor{% + \pgfplotsplothandlermesh@get@flat@color + \pgfplotscolormapdefinemappedcolor{\pgfplotsretval}% + \pgfplots@drawoptions + }% + % + % Acquire the values for \tikz@mode@* [used for faceted] + \pgfplots@drawmodes +} + + +\let\pgfsetstrokecolor@orig=\pgfsetstrokecolor +\def\pgfplotsplothandlermesh@VISUALIZE@std@separate@fillstroke@setstrokecolor#1{% + \pgfsetstrokecolor@orig{.}% +}% +\def\pgfplotsplothandlermesh@VISUALIZE@std@separate@fillstroke{% + \pgfplotsplothandlermesh@get@flat@color + \pgfplotscolormapdefinemappedcolor{\pgfplotsretval}% + % + \ifx\pgfplotsplothandlermesh@usepathfill\relax + \else + \let\pgfsetstrokecolor=\pgfplotsplothandlermesh@VISUALIZE@std@separate@fillstroke@setstrokecolor + \pgfplots@drawoptions + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{fill path}% + \pgfplotsplothandlermesh@usepathfill + \fi + \ifx\pgfplotsplothandlermesh@usepathstroke\relax + \else + \let\pgfsetstrokecolor=\pgfsetstrokecolor@orig + \pgfplots@drawoptions + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{stroke path}% + \pgfplotsplothandlermesh@usepathstroke + \fi +}% + +\def\pgfplotsplothandlermesh@VISUALIZE@interp{% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{stream to shader}% +}% + +\def\pgfplotsplothandlermesh@VISUALIZE@faceted@interp{% + \pgfplotslibrarysurfstreamstart + \pgfplotsplothandlermesh@VISUALIZE@interp + \pgfplotslibrarysurfstreamend + \pgfplotslibrarysurfdrawinpicture + % + \pgfplotsplothandlermesh@VISUALIZE@std +}% + +\def\pgfplotsplothandlermesh@PIPE@CHECKJUMP@disable{% + \def\pgfplotsplothandlermesh@PIPE@CHECKJUMP{\pgfplotsplothandlermesh@PIPE@REFINE}% +}% + +\def\pgfplotsplothandlermesh@init@shader{% + % + % Now, process the 'shader' key here: + \if\pgfplotsplothandlermesh@ONEDIMMODE1 + \def\pgfplots@meshmode{m}% 'mesh' + \fi + \if\pgfplots@meshmode m% mesh + % this is processed by the 'shader=flat' code below. + \def\pgfplotsplothandlermesh@shader{0}% 'flat' + \fi + \ifnum\pgfplotsplothandlermesh@shader>1% 'shader=interp' and 'shader=faceted interp' + \pgflibrarysurfshadingifactive + {}% + {% + \pgfutil@ifundefined{pgfplotsplothandlermesh@shader@warning}{% + \pgfplots@error{Sorry, surface shading (shader=interp) is NOT available for the selected driver `\pgfsysdriver'. I will use 'shader=flat' if you continue now}% + \gdef\pgfplotsplothandlermesh@shader@warning{x}% + }{}% + \def\pgfplotsplothandlermesh@shader{0}% + }% + \fi + % + % + \ifnum\pgfplotsplothandlermesh@shader>1 + % 'shader=2': 'interp': + % very simple: defer work to surf library. Only + % provide the mapped colordata. + % + % 'shader=3': 'faceted interp': + % a mix of 'faceted' and 'interp'. (might be inefficient in + % terms of pdf memory and rendering times) + % + % This won't be used for mesh plots, neither in one + % nor in two dimensions. + \pgfkeyssetvalue{/pgfplots/surf shading/north east corner}{\pgfplotspointbbupperright}% + \pgfkeyssetvalue{/pgfplots/surf shading/south west corner}{\pgfplotspointbblowerleft}% + \pgfkeyssetvalue{/pgfplots/surf shading/anchor}{\pgfpointorigin}% + \if1\b@pgfplotsplothandlermesh@matrixoutput + % this *implies* a compatible patch class, see the + % definition of \b@pgfplotsplothandlermesh@matrixoutput + \def\pgfplotsretval{5}% + \else + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{get pdf shading type}% + \fi + \pgfkeyslet{/pgfplots/surf shading/shading type}\pgfplotsretval% + \pgfkeysgetvalue{/pgfplots/colormap name}\pgfplots@loc@TMPa + \expandafter\pgfplotscolormaptopdffunction\expandafter{\pgfplots@loc@TMPa}% + \pgfkeyslet{/pgfplots/surf shading/colormap}\pgfplotsretval + \pgfplotscolormapgetcolorspace\pgfplots@loc@TMPa + \pgfkeyslet{/pgfplots/surf shading/colorspace}\pgfplotsretval + \if2\pgfplotsplothandlermesh@shader + % shader=interp + \let\pgfplotsplothandlermesh@definecolor=\relax + \let\pgfplotsplothandlermesh@VISUALIZE=\pgfplotsplothandlermesh@VISUALIZE@interp% + \pgfkeyslet{/pgfplots/surf shading/cols}\pgfplotsplothandlermesh@scanlinelength + %\if1\b@pgfplotsplothandlermesh@matrixoutput + \iffalse% FIXME : is this special handling necessary!? + \if\pgfplots@plot@mesh@ordering0% + % ordering=x varies: + % nothing special to do + \else + % FIXME + % [this happens only for mesh input=lattice] + % colwise: + % + % The low level shader NEEDS rowwise ordering. So, we need to transpose the data matrix. + % As usual in TeX, we should save macros as much as possible. I guess we NEED at least one macro for each matrix row. + % Idea: + % while we iterate colwise through the input data, accumulate row vectors. + % Then, process the row vectors. + % Since vectors are expensive (in terms of number of macros), we use fast "append" lists instead of vectors. + \let\pgfplotsplothandlermesh@shader@interp=\pgfplotsplothandlermesh@shader@interp@incremental@transpose + % + % init all required row vectors: + \c@pgfplots@scanlineindex=0 + \pgfutil@loop + \ifnum\c@pgfplots@scanlineindex<\pgfplotsplothandlermesh@rows\relax + \expandafter\pgfplotsapplistXnewempty\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname% + \advance\c@pgfplots@scanlineindex by1 + \pgfutil@repeat + %\pgfkeyslet{/pgfplots/surf shading/cols}\pgfplotsplothandlermesh@rows + %\pgfplots@error{Sorry, the 'shader=interp' does not yet support 'mesh/ordering=colwise'... You can continue now, but the plot will be transposed.}% + \fi + \fi + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{init pdf shading}% + \pgfplotslibrarysurfstreamstart + \else + % shader='faceted interp' + \let\pgfplotsplothandlermesh@VISUALIZE=\pgfplotsplothandlermesh@VISUALIZE@faceted@interp% + \pgfkeyssetvalue{/pgfplots/surf shading/cols}{2}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{init pdf shading}% + \fi + \else + \def\pgfplotsplothandlermesh@VISUALIZE{\pgfplotsplothandlermesh@VISUALIZE@std}% + \fi + % + %% + \ifpgfplotsplothandlermesh@internaldepth + \else + % disable internal sorting. + \let\pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth=\pgfplotspatchclass@rect@to@coonspatch@findshadingsequence@for@depth@no@op% + \let\pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth=\pgfplotspatchclass@tri@to@coonspatch@findshadingsequence@for@depth@no@op + \fi +}% + +\def\pgfplotsplothandlermesh@init@flat@color{% + \ifcase\pgfplotsplothandlermesh@shader + % 0 == 'flat' + \def\pgfplotsplothandlermesh@needs@flat@color{1}% + \or + % 1 == 'faceted' + \def\pgfplotsplothandlermesh@needs@flat@color{1}% + \or + % 2 == 'interp' + \def\pgfplotsplothandlermesh@needs@flat@color{0}% + \or + % 3 == 'faceted interp' + \def\pgfplotsplothandlermesh@needs@flat@color{1}% + \fi + \if1\pgfplotsplothandlermesh@needs@flat@color + \if\pgfplotsplothandlermesh@flatmode c% 'flat corner': + % + % use colordata of ONE corner point. That's easy, not + % much to do. + \def\pgfplotsplothandlermesh@get@flat@color{% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{first vertex}% + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \let\pgfplotsretval=\pgfplotspointmetatransformed% + }% + \else + % 'flat mean': + % + % use colordata as mean of all corners for shading. + \global\pgfplots@tmpa=0pt + \def\pgfplotsplothandlermesh@get@flat@color{% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{foreach cdata vertex}{% + \let\pgfplots@current@point@meta=\pgfplotspatchvertexmeta + \pgfplotsaxisvisphasetransformpointmeta + \global\advance\pgfplots@tmpa by\pgfplotspointmetatransformed pt + }% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{get num vertices}% + \global\divide\pgfplots@tmpa by\pgfplotsretval\relax + \edef\pgfplotsretval{\pgf@sys@tonumber\pgfplots@tmpa}% + \global\pgfplots@tmpa=0pt + }% + \fi + % + % + \if\pgfplots@meshmode m% + % 'mesh' plot: stroke only and use the 'flat' code + % here just to define the color for each mesh + % segment. + \let\pgfplotsplothandlermesh@usepath=\pgfusepathqstroke + \else + % 'surf' plot: + \let\pgfplotsplothandlermesh@usepath=\pgfusepathqfillstroke + \if\pgfplotsplothandlermesh@shader3% faceted interp + % it has an extra fill command (shading) + \let\pgfplotsplothandlermesh@usepath=\pgfusepathqstroke + \fi + % + % the distinction between 'faceted' and 'flat' is + % technical: it is just the default draw color. + % + % 'flat,draw=black' is the same as 'faceted'. + \pgfkeysgetvalue{/pgfplots/faceted color}\pgfplots@loc@TMPb + \def\pgfplots@loc@TMPc{none}% + \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPc + \pgfkeyslet{/pgfplots/faceted color}\pgfutil@empty + \def\pgfplots@loc@TMPb{}% + \fi + % + \def\pgfplots@loc@TMPa{0}% + \if\pgfplotsplothandlermesh@shader1% faceted + \def\pgfplots@loc@TMPa{1}% + \ifx\pgfplots@loc@TMPb\pgfutil@empty + % oh. no faceted color. Then: fill only, use + % whatever color is available. + \def\pgfplots@loc@TMPa{0}% + %\let\pgfplotsplothandlermesh@usepath=\pgfusepathqfill + \fi + \fi + \if\pgfplotsplothandlermesh@shader3% faceted interp + \def\pgfplots@loc@TMPa{1}% + \ifx\pgfplots@loc@TMPb\pgfutil@empty + % oh. no faceted color. Then: no-op! + % This is the same as interp with more overhead + % (but allows z buffering). + \def\pgfplots@loc@TMPa{0}% + \def\pgfplotsplothandlermesh@usepath{\pgfusepath{discard}}% + \fi + \fi + \if1\pgfplots@loc@TMPa + % make sure there is a the correct color. + \expandafter\def\expandafter\pgfplots@drawoptions\expandafter{% + \pgfplots@drawoptions + \pgfsetstrokecolor{\pgfkeysvalueof{/pgfplots/faceted color}}% + }% + \fi + % + \fi + % + \ifx\pgfplotsplothandlermesh@PIPE@REFINE\pgfplotsplothandlermesh@PIPE@REFINE@no@op + \let\pgfplotsplothandlermesh@VISUALIZE@std=\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke + \else + \ifpgfplotsplothandlermesh@hide@refined@edges + % this is (at most) partially implemented. + \let\pgfplotsplothandlermesh@VISUALIZE@std=\pgfplotsplothandlermesh@VISUALIZE@std@separate@fillstroke + \else + \let\pgfplotsplothandlermesh@VISUALIZE@std=\pgfplotsplothandlermesh@VISUALIZE@std@fill@andor@stroke + \fi + % + % FIXME : that doesn't work. + % filling *always* seems to need a stroke operation, + % otherwise there will be translucent edges. + % I need to adjust the stroke color :-( + % + % FIXME : even that doesn't work correctly. The problem + % is: drawing adjacent patches on top of each other + % OVERDRAWS edges: once with the correct stroke color; + % once with the fill color. + % + \ifx\pgfplotsplothandlermesh@usepath\pgfusepathqstroke + \let\pgfplotsplothandlermesh@usepathfill=\relax + \let\pgfplotsplothandlermesh@usepathstroke=\pgfusepathqstroke + \else + \ifx\pgfplotsplothandlermesh@usepath\pgfusepathqfillstroke + \let\pgfplotsplothandlermesh@usepathfill=\pgfusepathqfillstroke + \let\pgfplotsplothandlermesh@usepathstroke=\pgfusepathqstroke + \else + \let\pgfplotsplothandlermesh@usepathfill=\relax + \let\pgfplotsplothandlermesh@usepathstroke=\relax + \fi + \fi + \fi + \fi +}% + + +\def\pgfplotsplothandlermesh@init@jumphandling{% + % For matrix input, a "jump" should result in something + % visible although it must not destroy the matrix structure. + % + % try this here: + \def\pgfplotsplothandlervisualizejump{% + \pgfplotstreampoint{\global\pgf@x=-16000.0pt \global\pgf@y=-16000.0pt }% + }% + % + \if0\pgfplotsaxisplothasjumps + \pgfplotsplothandlermesh@PIPE@CHECKJUMP@disable + \fi +}% + + +\def\pgfplotsplothandlermesh@init@zbuffer{% + \ifpgfplots@curplot@threedim + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{uses view depth}% + \if1\pgfplotsretval + \let\pgfplotsplothandlermesh@compute@vertex@depth=\pgfplotsplothandlermesh@compute@vertex@depth@doit% + \fi + % + \if\pgfplotsplothandlermesh@zbuffer@choice4% + % z buffer=sort: + % create a z buffer: + % the z buffer contains elements {<view depth>}{{<pt1>}{<pt2>}{<pt3>}{<pt4>}} + \pgfplotsarraynewempty\pgfplots@zbuffer@local + % + \let\pgfplotsplothandlermesh@compute@vertex@depth=\pgfplotsplothandlermesh@compute@vertex@depth@doit% + % + \let\pgfplotsplothandlermesh@accum@element@depth=\pgfmath@basic@add@ + % + % and collect each point into the z buffer + % (instead of drawing it): + \def\pgfplotsplothandlermesh@PIPE@FINISH{% + % + % compute DEPTH(lattice element):= min{DEPTH(A),DEPTH(B),DEPTH(C),DEPTH(D)} + \def\pgfmathresult{0}% + \def\pgfplotsplothandlermesh@zbuffer@tmp{}% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{foreach vertex}{% + \pgfplotsplothandlermesh@accum@element@depth\pgfplotspatchvertexdepth\pgfmathresult + \t@pgfplots@toka=\expandafter{\pgfplotsplothandlermesh@zbuffer@tmp}% + \t@pgfplots@tokb=\expandafter{\pgfplotspatchvertexstruct}% + \edef\pgfplotsplothandlermesh@zbuffer@tmp{% + \the\t@pgfplots@toka + {\the\t@pgfplots@tokb}% + }% + }% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{serialize except vertices}% + \t@pgfplots@toka=\expandafter{\pgfplotsretval}% + \t@pgfplots@tokb=\expandafter{\pgfplotsplothandlermesh@zbuffer@tmp}% + \edef\pgfplotsplothandlermesh@zbuffer@tmp{% + {\the\t@pgfplots@toka}% first argument is meta data, then follow the vertices + \the\t@pgfplots@tokb% + }% + % + % assemble array element: + \t@pgfplots@toka=\expandafter{\pgfplotsplothandlermesh@zbuffer@tmp}% + \edef\pgfplots@loc@TMPa{% + {\pgfmathresult}% + {% + \the\t@pgfplots@toka + }% + }% + \expandafter\pgfplotsarraypushback\pgfplots@loc@TMPa\to\pgfplots@zbuffer@local + }% + \fi + \fi +}% +\def\pgfplotsplothandlermesh@init@mesh@stream{% + \global\let\pgf@plotstreamspecial=\pgfutil@gobble% + \global\let\pgf@plotstreamend=\pgfplotsplothandlermesh@finish% + \global\let\pgf@plotstreampoint=\pgfplotsplothandlermesh@stream + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass}{new}% +} + +{ +\dimen0=-16000.0pt +\xdef\pgfplotsplothandlermesh@check@unbounded@text{\the\dimen0}% +} + +\def\pgfplotsplothandlermesh@check@unbounded{% + \ifx\pgfplotspatchvertexx\pgfplotsplothandlermesh@check@unbounded@text + \pgfplots@loc@tmpfalse + \fi +}% + +\long\def\pgfplotsplothandlermesh@defaultlegend@img#1{% + \scope[% + #1, + /pgfplots/mesh/rows=3, + /pgfplots/mesh/cols=3, + /pgfplots/mesh/num points=, + /tikz/x={(0.44237cm,-0.07439cm)}, + /tikz/y={(0.30942cm,0.23932cm)}, + /tikz/z={(0.0cm,1.5cm)}, + scale=0.4, + yshift=-0.7cm, + ] + \let\pgfplots@metamax=\pgfutil@empty + \pgfplots@curplot@threedimtrue + + \pgfplotsplothandlermesh + \pgfplotstreamstart + + \def\rangea{0.21}% + \def\rangeb{0.7}% + + \pgfmathparse{1000/(\rangeb-\rangea)} + \let\factor=\pgfmathresult + + \pgfutil@ifundefined{pgfqpointxyz@orig}{% + \let\pgfqpointxyz@orig=\pgfqpointxyz + }{}% + % + \def\simplecoordinate(##1,##2,##3){% + \pgfmathparse{\factor*(##3 - \rangea)}% + \pgfmathfloatparsenumber\pgfmathresult + \let\pgfplots@current@point@meta=\pgfmathresult + % pgfplots changes \pgfqpointxyz to + % \pgfplotspointdescriptionxy inside of legends, so use the + % '@orig' point command: + \pgfplotstreampoint{\pgfqpointxyz@orig{##1}{##2}{##3}}% + }% + % for the case 'shader=interp': + \def\pgfplotspointbbupperright{\pgfqpointxyz@orig{2}{2}{0.9}} + \def\pgfplotspointbblowerleft {\pgfqpointxyz@orig{0}{0}{0.1}} + + \simplecoordinate(0,2,0.7) + \simplecoordinate(1,2,0.5) + \simplecoordinate(2,2,0.43) + + \simplecoordinate(0,1,0.68) + \simplecoordinate(1,1,0.4) + \simplecoordinate(2,1,0.25) + + \simplecoordinate(0,0,0.6) + \simplecoordinate(1,0,0.35) + \simplecoordinate(2,0,0.21) + + \pgfplotstreamend + \pgfusepath{stroke} + \endscope +}% + +\def\pgfplotsplothandlermesh@finish{% + \if\pgfplotsplothandlermesh@zbuffer@choice4% + % z buffer=sort: + % process the z buffer: + \pgfkeyslet{/pgfplots/iflessthan/.@cmd}\pgfplotsplothandlermesh@zbuffer@sort@iflessthen + \pgfkeysdef{/pgfplots/array/unscope pre}{% + \let\pgfplotsplothandlermesh@patchclass=\pgfplotsplothandlermesh@patchclass@output + \def\pgfplotspatchready{\pgfplotsplothandlermesh@VISUALIZE}% + \pgfplotsarrayforeachungrouped\pgfplots@zbuffer@local\as\curelem{% + \expandafter\pgfplotsplothandlermesh@draw@zbufferelement\curelem% + }% + }% + \pgfkeysdef{/pgfplots/array/unscope post}{}% + \pgfplotsarraysort\pgfplots@zbuffer@local + \fi + % + \if2\pgfplotsplothandlermesh@shader + % shader=interp: + % FIXME : broken! + %\ifx\pgfplotsplothandlermesh@shader@interp\pgfplotsplothandlermesh@shader@interp@incremental@transpose% + % This is the case for 'mesh/ordering=colwise'. We need to finish the transpose procedure: + % \pgfplotsplothandlermesh@shader@interp@transpose@finish + %\fi + \pgfplotslibrarysurfstreamend + \pgfplotslibrarysurfdrawinpicture + \fi +}% + + +\def\pgfplotsplothandlermesh@PIPE@DECODE@to@shader#1{% + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotslibrarysurfstreamcoord + {#1}% + {\pgfplotspointmetatransformed}% +}% + +\def\pgfplotsplothandlermesh@PIPE@DECODE@matrix@ONEDIMMODE#1{% + \let\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@input + \pgfplotsplothandlermesh@compute@vertex@depth% <-- this modifies \pgfplotsretval + \pgf@process{#1}% + \edef\pgfplotsplothandlermesh@i{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}\pgfplotsretval}% + \ifnum\c@pgfplots@scanlineindex>0 + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@im}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@i}% + \else + \advance\c@pgfplots@scanlineindex by1 + \fi + \let\pgfplotsplothandlermesh@im=\pgfplotsplothandlermesh@i +}% + +% the pgf@plotstreampoint routine for the first scan line: +\def\pgfplotsplothandlermesh@PIPE@DECODE@matrix@fillscanline#1{% + \pgfplotsplothandlermesh@compute@vertex@depth% <-- this modifies \pgfplotsretval + \pgf@process{#1}% + \edef\pgfplots@loc@TMPa{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}\pgfplotsretval}% + \expandafter\pgfplotsdequepushback\pgfplots@loc@TMPa\to{lastscanline}% + \advance\c@pgfplots@scanlineindex by1 + \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax + % second line! + \let\pgfplotsplothandlermesh@PIPE@DECODE=\pgfplotsplothandlermesh@PIPE@DECODE@matrix%% + \c@pgfplots@scanlineindex=0 + \fi +}% +% This is the pgf@plotstreampoint for all scan lines starting with the +% second. +% +% We perform +% // i == y +% // j == x +% for i = 1 to rows (note the 1! 0 would be the first row) +% for j = 0 to cols +% get (i-1, j) from front of deque // remember: i: rows, j : cols. We iterate rowwise. +% push (i,j) to back of deque +% if j > 0 +% draw +% (i-1,j-1) [from last iteration] -- (i-1,j ) [from deque] +% -- ( i,j ) [from last iteration] -- (i ,j-1) [from #1] +% -- cycle +% endif +% let (i-1,j-1) := (i-1,j) // for next iteration +% let ( i,j-1) := ( i,j) // for next iteration +% end +% end +% +% This is a SWEEP through the data matrix. +\def\pgfplotsplothandlermesh@PIPE@DECODE@matrix#1{% + % NOTATION: + % 'im == (i-1)' + % 'jm == (j-1)' + \pgfplotsplothandlermesh@compute@vertex@depth% <-- this modifies \pgfplotsretval + \pgf@process{#1}% + \edef\pgfplotsplothandlermesh@i@j{{\the\pgf@x}{\the\pgf@y}{\pgfplots@current@point@meta}\pgfplotsretval}% FIXME relies on pgfplots macros +%\message{##\the\c@pgfplots@scanlineindex: prepare rectangle with corner \meaning\pgfplotsplothandlermesh@i@j.}% + \pgfplotsdequepopfront{lastscanline}\to\pgfplotsplothandlermesh@im@j + \expandafter\pgfplotsdequepushback\pgfplotsplothandlermesh@i@j\to{lastscanline}% + \ifnum\c@pgfplots@scanlineindex>0 + \let\pgfplotsplothandlermesh@patchclass\pgfplotsplothandlermesh@patchclass@input + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@im@jm}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@im@j}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@i@j}% + \expandafter\pgfplotsplothandlermesh@setnextvertex\expandafter{\pgfplotsplothandlermesh@i@jm}% + \fi + \let\pgfplotsplothandlermesh@im@jm=\pgfplotsplothandlermesh@im@j + \let\pgfplotsplothandlermesh@i@jm=\pgfplotsplothandlermesh@i@j + \advance\c@pgfplots@scanlineindex by1 + \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax + \c@pgfplots@scanlineindex=0 + \fi +}% +\def\pgfplotsplothandlermesh@shader@interp@incremental@transpose#1{% + \pgfplotsaxisvisphasetransformpointmeta + \pgf@process{#1}% + \edef\pgfplotsplothandlermesh@i{\noexpand\pgfplotsplothandlermesh@shader@interp@next{\the\pgf@x}{\the\pgf@y}{\pgfplotspointmetatransformed}}% + % + % Store the postprocessed point into the appropriate row vector: + \def\pgfplots@loc@TMPa{\expandafter\pgfplotsapplistXpushback\expandafter{\pgfplotsplothandlermesh@i}\to} + \expandafter\pgfplots@loc@TMPa\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname% + % + \advance\c@pgfplots@scanlineindex by1 + \ifnum\c@pgfplots@scanlineindex=\pgfplotsplothandlermesh@scanlinelength\relax + \c@pgfplots@scanlineindex=0 + \fi +}% +\def\pgfplotsplothandlermesh@shader@interp@transpose@finish{% + % Now, "execute" each row vector: + \def\pgfplotsplothandlermesh@shader@interp@next##1##2##3{% + \pgfplotslibrarysurfstreamcoord{\global\pgf@x=##1 \global\pgf@y=##2 }{##3}% + }% + \c@pgfplots@scanlineindex=0 + \pgfutil@loop + \ifnum\c@pgfplots@scanlineindex<\pgfplotsplothandlermesh@rows\relax + \expandafter\pgfplotsapplistXlet\expandafter\pgfplots@loc@TMPd\expandafter=\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname% + \expandafter\pgfplotsapplistXnewempty\csname pgfp@transprow@\the\c@pgfplots@scanlineindex\endcsname% clear + % execute the row: + \pgfplots@loc@TMPd + \advance\c@pgfplots@scanlineindex by1 + \pgfutil@repeat + \let\pgfplots@loc@TMPd=\relax +}% + +\def\pgfplotsplothandlermesh@draw@zbufferelement#1#2{% + \pgfplotsplothandlermesh@draw@zbufferelement@#2\pgfplots@EOI +} +\def\pgfplotsplothandlermesh@draw@zbufferelement@#1{% + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{deserialize except vertices}{#1}% + \pgfplotsplothandlermesh@draw@zbufferelement@@ +} +\def\pgfplotsplothandlermesh@draw@zbufferelement@@#1{% + \def\pgfplots@loc@TMPa{#1}% + \ifx\pgfplots@loc@TMPa\pgfplots@EOI + \else + \pgfplotspatchclass{\pgfplotsplothandlermesh@patchclass@output}{set next vertex}{#1}% + \expandafter\pgfplotsplothandlermesh@draw@zbufferelement@@ + \fi +}% + + +\def\pgfplotsplothandlermesh@zbuffer@sort@iflessthen#1#2#3#4\pgfeov{% + \edef\pgfplots@loc@TMPa{#1}% + \expandafter\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@\pgfplots@loc@TMPa\relax + \let\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@a=\pgfmathresult + \edef\pgfplots@loc@TMPb{#2}% + \expandafter\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@\pgfplots@loc@TMPb\relax + \let\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@b=\pgfmathresult + \ifdim\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@b pt<\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@a pt% + #3\relax + \else + #4\relax + \fi +}% +\def\pgfplotsplothandlermesh@zbuffer@sort@iflessthen@#1#2{% + \def\pgfmathresult{#1}% +}% +\def\pgfplotsplothandlermesh@unpack@zbuffer@pointdepth#1{% + \expandafter\pgfplotsplothandlermesh@unpack@zbuffer@pointdepth@#1% +}% +\def\pgfplotsplothandlermesh@unpack@zbuffer@pointdepth@#1#2#3#4{% + \def\pgfplotsretval{#4}% +}% diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex new file mode 100644 index 00000000000..7506cabcf16 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsplothandlers.code.tex @@ -0,0 +1,2230 @@ +%-------------------------------------------- +% +% 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 2010 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/>. +% +%-------------------------------------------- + +% 1. OVERVIEW +% +% Plot handlers are extended versions of the plot handlers of PGF with +% backwards compatibility. +% +% To remind ourselfes: PGF plot handlers work like this +% \pgfplotstreamstart +% \pgfplotstreampoint{...} +% \pgfplotstreampoint{...} +% \pgfplotstreampoint{...} +% \pgfplotstreampoint{...} +% \pgfplotstreamend +% +% and that's it. +% +% PGFPlots plot handlers also contain these three macros. The tasks +% are (of course) the same. In addition, they support a set of further +% macros for every plot handler: +% +% \pgfplotsplothandlersurveystart +% \pgfplotsplothandlersurveypoint +% \pgfplotsplothandlersurveyend +% +% and serialization methods +% \pgfplotsplothandlerserializepointto +% \pgfplotsplothandlerdeserializepointfrom +% \pgfplotsplothandlerserializestateto +% \pgfplotsplothandlerdeserializepointfrom +% +% The idea is as follows: +% During \addplot, PGFPLots performs a survey phase. Survey means: +% nothing will be drawn, only stats will be collected. In this phase, +% the \pgfplotsplothandlersurvey* methods will be invoked; followed by +% a serialization. +% +% Then, when every plot has been surveyed, PGFPlots calls +% \pgfplotsplothandlerdeserializestatefrom{<serialized state>} +% \pgfplotstreamstart +% foreach <serizalized point> { +% \pgfplotsplothandlerdeserializepointfrom{<serialized point>} +% apply data transformations +% handle plot marks +% \pgfplotstreampoint{\pgfplotsqpointxy{<x>}{<y}} +% } +% \pgfplotstreamend +% +% See below for details about the survey phase and the visualization +% phase and the API of an axis. +% +% Thus, the PGF basic level streams can (but don't need to) make use +% of the macros assigned by the +% \pgfplotsplothandlerdeserializepointfrom and +% \pgfplotsplothandlerdeserializestatefrom. +% +% Furthermore, a plot handler *can* redefine any of the survey and/or +% serialization methods to add further functionality. But it doesn't +% need to, it's ok if it only relies on x,y as standard pgf plot +% handlers do. +% +% If it overwrites something, it should do so in its main method, the +% one in which it also defines the \pgf@plotstreamstart etc. methods +% (see pgfmoduleplot.code.tex for example). BUT: do NOT overwrite +% these methods globally! +% +% 2. A Description of the two phases: +% +% THE SURVEY PHASE: +% The survey phase works as follows. +% PRECONDITION: +% - we are `inside' of an axis. +% - \addplot starts the survey phase. +% +% The following happens: +% - the plot handler is determined and activated such that its +% methods are usable ("class is instantiated") +% - \pgfplots@PREPARE@COORD@STREAM is the internal, low level +% entry point where pgfplots controls the survey phase. +% - the coordinate input routine is initialised. It issues a +% series of commands (all within the *same* TeX scope): +% \pgfplots@coord@stream@start +% \pgfplots@coord@stream@coord +% \pgfplots@coord@stream@coord +% \pgfplots@coord@stream@coord +% \pgfplots@coord@stream@coord +% \pgfplots@coord@stream@coord +% \pgfplots@coord@stream@coord +% ... +% \pgfplots@coord@stream@end +% - \pgfplotsplothandlersurveystart is called in +% \pgfplots@coord@stream@start. +% - \pgfplots@coord@stream@coord calls +% \pgfplotsplothandlersurveypoint +% - \pgfplots@coord@stream@end calls +% \pgfplotsplothandlersurveyend +% \pgfplotsplothandlerserializestateto<\macro> +% Furthermore, it remembers the <\macro> such that it can be +% deserialized later. +% Then, the survey phase ends. The main point of interest is the +% \pgfplotsplothandlersurveypoint routine, especially its +% communication with the axis. It is described below. +% +% POSTCONDITION: +% - the state of the axis is now aware of the new plot (limits, +% stacking, ...). +% - The plot's survey state is stored using its serialized +% representation. +% +% THE VISUALIZATION PHASE: +% FIXME +% +% 2.1 The API of an axis +% +% As described above, the coordinate input routine fires a lot of +% \pgfplots@coord@stream@coord commands, which, in turn, invoke +% \pgfplotsplothandlersurveypoint. Somehow this should update the +% axis' state to reflect each point. But the 'data point' is a rather +% abstract thing. Usually, it will contain at least (x,y) (or maybe z) +% coordinates. But it may be more complex. +% +% So, the coordinate input routine provides whatever the user has +% chosen. Let's assume, we are using \addplot table. Then, we can +% access every cell in the current row (using \thisrow{<colname>} for +% example). The plot handler knows how to extract its information from +% this state. In general, the following steps are taken: +% - the plot handler assembles coordinates. +% - every assembled coordinate should be reported to the axis by +% defining \pgfplots@current@point@[xyz] to its coordinates and +% calling +% \pgfplotsaxisparsecoordinate{} +% This will apply coordinate filters, parse the single coordinates +% and apply high level transformations and any logarithms. +% It is some sort of advanced coordinate parser which works only for +% (x,y) or for (x,y,z). +% It yields (x,y,z). But the axis might need to change its +% components! Thus, you also need to call +% \pgfplotsaxispreparecoordinate{}. +% This will, for example, apply the "stack plots" feature or the +% 'data cs' feature. +% +% If necessary, the plot handler calls +% \pgfplotsaxisparsecoordinate{} and +% \pgfplotsaxispreparecoordinate{} multiple times, once for each +% encountered coordinate. +% +% It might occasionally be too much to call +% \pgfplotsaxispreparecoordinate. +% +% It might happen that a coordinate filter discards a coordinate. +% This is returned in the \ifpgfplotsaxisparsecoordinateok boolean +% and has to be checked by the plot handler. +% +% - the plot handler knows which of the coordinates contribute to the +% final plot. It invokes +% \ifpgfplotsaxisparsecoordinateok +% \pgfplotsaxisupdatelimitsforcoordinate{<x>}{<y>}{<z>} +% \fi +% for each of these coordinates. This has to be done for final +% coordinates only, i.e. after \pgfplotsaxispreparecoordinate. +% +% - eventually, the plot handler is satisfied and considers a data +% point as "readily surveyed". It is allowed if this does *not* +% happen inside of \pgfplotsplothandlersurveypoint, but it must +% happen before \pgfplotsplothandlersurveyend is finished. +% +% The plot handler invokes \pgfplotsaxisdatapointsurveyed. +% This tells the axis that it can perform its own surveying tasks +% (see below) and furthermore, that it can serialize the data point. +% Consequently, it will invoke +% \pgfplotsplothandlerserializepointto{<\macro>} +% and it will remember that \macro internally. This serialization is +% employed to place plot marks and to apply z buffering techniques +% (that's why it is done by the axis and not by the plot handler on +% its own). +% +% The axis does its own surveying task, initiated by +% \pgfplotsaxisdatapointsurveyed (which is, turn, invoked by the +% plot handler). This command handles the |point meta| feature, that +% is: it queries the |point meta| input source and updates the meta +% limits. Furthermore, the error bar feature is processed at this +% point (using the final data point's (x,y,z) coordinates as basis). +% The |xtick=data| feature is also prepared at this stage. +% +% - Later, the coordinate input routine invokes +% \pgfplots@coord@stream@end indicating the end-of-input. This will +% finalize the survey phase. +% +% A simple example looks like this: +% \pgfplotsplothandlersurveystart: does nothing in the simple example. +% \pgfplotsplothandlersurveypoint: +% parses the input format somehow to get (x,y,z) in raw, symbolic format +% calls \pgfplotsaxisparsecoordinate +% calls \pgfplotsaxispreparecoordinate +% calls \ifpgfplotsaxisparsecoordinateok \pgfplotsaxisupdatelimitsforcoordinate{<x>}{<y>}{<z} \fi +% calls \pgfplotsaxisdatapointsurveyed +% \pgfplotsplothandlersurveyend: does nothing in the simple example. +% +% In fact, this is more or less the initial configuration used for +% lineto or similar plot handlers. +% +% 2.2 Further Survey Phase API functions +% \pgfplotssurveyphaseinputclass +% expands to the actual name of the input method (like +% 'coordinates', 'expression' or 'table') +% +% \pgfplotsplothandlernotifyscanlinecomplete +% Called whenever an end-of-scanline marker has been processed, i.e. +% whenever the 'empty line' key has been triggered. The default is to +% do nothing. +% +% \pgfplotsaxissurveysetpointmeta +% processes the 'point meta' key, i.e. it assigns +% \pgfplots@current@point@meta. This macro can only be called once for +% each coordinate (it will be deactivated afterwards). PGFPlots calls +% it in \pgfplotsaxisdatapointsurveyed . +% +% \pgfplotsplothandlersurveyaddoptions{<options>} +% which allows to change the current plot style from within API +% functions. It sets <options> and remembers them for the +% visualization phase. +% +% \pgfplotsaxisupdatelimitsforpointmeta{<meta>}, +% provided there is a point meta input handler (which is numeric). +% Otherwise, the command is equal to \relax. +% +% +% 3. Details about the VISUALIZATION phase +% +% The visualization phase consists of +% <installation of the plot handler> +% \pgfplotstreamstart +% foreach serialized coordinate { +% pgfplots calls \pgfplotsplothandlerdeserializestatefrom{<serialized repr>} +% if coordinate is empty ("unbounded") +% pgfplots call \pgfplotsplothandlervisualizejump +% else +% pgfplots calls \pgfplotsaxisvisphasetransformcoordinate +% pgfplots calls \pgfplotsaxisvisphasepreparedatapoint +% fi +% \pgfplotstreampoint +% } +% \pgfplotstreamend +% +% User defined plot handlers might need to invoke +% \pgfplotsaxisvisphasetransformcoordinate on their own. +% +% During the visualization phase, the following macros can be used: +% +% - \pgfplotsaxisvisphasetransformpointmeta to set up point meta. +% Use this only if there *is* point meta, see +% \pgfplotsaxisifhaspointmeta{<true code>}{<false code>}. +% +% 4. API Functions of pgfplots to work with the visualization phases +% +% \pgfplotsifissurveyphase{<true code>}{<false code>} +% \pgfplotsifisvisualizationphase{<true code>}{<false code>} +% +% \pgfplotsaxisfilteredcoordsaway +% This macro expands to '1' if all points have been surveyed +% successfully. It expands to '0' if at least one point has been +% filtered away (for whatever reasons). This does not apply to +% jumps. +% \pgfplotsaxisplothasjumps +% This macro expands to '1' if the current plot has jumps and '0' +% if not.During the visualization phase, a jump is usually indicated +% by an empty coordinate. +% + +\def\pgfplotssurveyphaseinputclass{direct} + +% Resets the plot handler routines. +% +% This is necessary before installing a new plot handler! +\def\pgfplotsresetplothandler{% + \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@default + \let\pgfplotsplothandlername=\pgfplotsplothandlername@default + \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@default + \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@default + \let\pgfplotsplothandlerserializepointto=\pgfplotsplothandlerserializepointto@default + \let\pgfplotsplothandlerdeserializepointfrom=\pgfplotsplothandlerdeserializepointfrom@default + \let\pgfplotsplothandlerserializestateto=\pgfplotsplothandlerserializestateto@default + \let\pgfplotsplothandlerdeserializestatefrom=\pgfplotsplothandlerdeserializestatefrom@default + \let\pgfplotsplothandlervisualizejump=\pgfplotsplothandlervisualizejump@default + \let\pgfplotsplothandlernotifyscanlinecomplete=\relax +}% + +% \pgfplotsplothandlersurveystart +\def\pgfplotsplothandlersurveystart@default{}% + +% \pgfplotsplothandlername +\def\pgfplotsplothandlername@default{% + [tikz@plot@handler: \meaning\pgf@plotstreamstart]% +}% + +% \pgfplotsplothandlersurveyend +% Called at the end of each survey phase. +\def\pgfplotsplothandlersurveyend@default{} +\let\pgfplotsplothandlernotifyscanlinecomplete=\relax% + +% \pgfplotsplothandlersurveypoint is called for each encountered data +% point. +% +% The data point as such is available using the current state of any +% macros which are assigned during the survey phase (during \addplot). +% This includes any table macros etc. +% PGFPlots stores the x,y and z coordinates into \pgfplots@current@point@[xyz]. +% The point meta coordinate is in \pgfplots@current@point@meta. +% +% Note that since any currently assigned macro can be used here, the +% new DV engine of PGF is also valid (and will be supported +% eventually). This DV engine stores data point entries in keys, +% namely those in the key path /data point. See the pgf manual. +\def\pgfplotsplothandlersurveypoint@default{% + \pgfplotsaxisparsecoordinate + \pgfplotsaxispreparecoordinate + \ifpgfplotsaxisparsecoordinateok + \pgfplotsaxisupdatelimitsforcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z + \fi + \pgfplotsaxisdatapointsurveyed +}% + +% \pgfplotsplothandlerserializepointto{<\macro>} +% should save a complete data point to <\macro> such that it can be +% de-serialized later. +% +% #1: a macro name. Will be filled with (expandable) data. +% The format can be arbitrary, but you should be able to extra it. +% +% @PRECONDITION +% this macro will be invoked in a context where the current data +% point has been processed completely, including any preparations. +% The required data which should be saved depends on the plot +% handler. Usually, all plot handlers require +% \pgfplots@current@point@[xyz] and \pgfplots@current@point@meta. +% This macro should only assign keys which have been defined or +% validated by any of the plot handler relevant methods (including +% the de-serialization or survey methods). +\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). + \edef#1{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z}% +}% + +% the counterpart for \pgfplotsplothandlerserializepointto. +% It should restore the state as it was before the serialization. +% +% #1: the serialized information. +\def\pgfplotsplothandlerdeserializepointfrom@default#1{% + \expandafter\pgfplotsplothandlerdeserializepointfrom@default@#1\relax +}% + +\def\pgfplotsplothandlerdeserializepointfrom@default@#1,#2,#3\relax{% + \def\pgfplots@current@point@x{#1}% + \def\pgfplots@current@point@y{#2}% + \def\pgfplots@current@point@z{#3}% +}% +% \pgfplotsplothandlerserializestateto{<\macro>} +% should save the state of the current plot handler such that it can +% be de-serialized later. +% +% The state does usually NOT contain a coordinate stream, this is +% accomplished by \pgfplotsplothandlerserializepointto. +% +% #1: a macro name. Can be filled with anything, including +% non-expandable macro invocations. +\def\pgfplotsplothandlerserializestateto@default#1{% + \def#1{}% +}% + +% +\def\pgfplotsplothandlerdeserializestatefrom@default#1{% + #1% +}% + +\def\pgfplotsplothandlervisualizejump@default{% + \pgfplotstreamend + \pgfplotstreamstart +}% + +\pgfplotsresetplothandler + +% ================================== + +% Defines +% - a generic update limits routine, +% \pgfplotsaxisupdatelimitsforcoordinate#1#2#3 +% if #3 is empty, it will assume a 2d point, otherwise a 3d point +% and the axis will be three dimensional as well. +% During \addplot, this auto-detection will be disabled in favor of +% the '\addplot3' versus' \addplot' syntax. +% +\def\pgfplots@prepare@axis@API{% + \pgfplots@curplot@threedimtrue + \pgfplots@prepare@axis@API@ + \let\pgfplotsaxisupdatelimitsforcoordinatethreedim=\pgfplotsaxisupdatelimitsforcoordinate@ + \let\pgfplotsaxisparsecoordinatethreedim=\pgfplotsaxisparsecoordinate@ + % + \pgfplots@curplot@threedimfalse + \pgfplots@prepare@axis@API@ + \let\pgfplotsaxisupdatelimitsforcoordinatetwodim=\pgfplotsaxisupdatelimitsforcoordinate@ + \let\pgfplotsaxisparsecoordinatetwodim=\pgfplotsaxisparsecoordinate@ + % + \def\pgfplotsaxisupdatelimitsforcoordinate##1##2##3{% + \pgfplots@ifempty{##3}{% + \pgfplotsaxisupdatelimitsforcoordinatetwodim{##1}{##2}{}% + }{% + \global\pgfplots@threedimtrue + \pgfplotsaxisupdatelimitsforcoordinatethreedim{##1}{##2}{##3}% + }% + }% + \def\pgfplotsaxisparsecoordinate{% + \ifx\pgfplots@current@point@z\pgfutil@empty + \pgfplotsaxisparsecoordinatetwodim + \else + \global\pgfplots@threedimtrue + \pgfplotsaxisparsecoordinatethreedim% + \fi + }% +}% +\def\pgfplots@prepare@axis@API@{% + \begingroup + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \let\E=\noexpand + % Setup Just-In-Time-Macro Compilation: + % I compile a set of macros which is highly optimized for this + % particular axis configuration. + % + % \pgfplotsaxisupdatelimitsforcoordinate + % Updates the current x and y limits for point (#1,#2). + % + % To eliminate all those case distinctions, it is created with + % 'edef' and a lot of '\noexpand' calls here: + % + % + % The point coordinates are given in floating point format (FIXME) + % + % Please note that if user specified limits are given, automatic + % limits are only applied to points which fall into the user specified + % clipping region. + % + % PRECONDITIONS: + % - the input coordinates have been parsed correctly (floating point + % format for linear axis, log applied for logarithmic ones) + % + % Arguments: + % #1,#2,#3 the x,y and z coordinate. z is ignored for 2d plots. + \xdef\pgfplotsaxisupdatelimitsforcoordinate@##1##2##3{% +%\E\tracingmacros=2\E\tracingcommands=2 +%\E\pgfplots@message{Updating limits for (##1,##2) ...}% + % + % VIM SEARCH PATTERN: + % [^E]\zs\\\ze[^E] + % -> this finds '\' which is neither '\E' nor is it prefixed + % by 'E'. + % + % + % + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDfalse + % check whether we need to clip limits: + \ifpgfplots@clip@limits + \ifpgfplots@autocompute@xmin + \else + \ifpgfplots@xislinear + \E\pgfmathfloatlessthan@{##1}{\E\pgfplots@xmin}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \else + \E\pgfplotsmathlessthan{##1}{\E\pgfplots@xmin}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \fi + \fi + \ifpgfplots@autocompute@xmax + \else + \ifpgfplots@xislinear + \E\pgfmathfloatlessthan@{\E\pgfplots@xmax}{##1}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \else + \E\pgfplotsmathlessthan{\E\pgfplots@xmax}{##1}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \fi + \fi + \ifpgfplots@autocompute@ymin + \else + \ifpgfplots@yislinear + \E\pgfmathfloatlessthan@{##2}{\E\pgfplots@ymin}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \else + \E\pgfplotsmathlessthan{##2}{\E\pgfplots@ymin}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \fi + \fi + \ifpgfplots@autocompute@ymax + \else + \ifpgfplots@yislinear + \E\pgfmathfloatlessthan@{\E\pgfplots@ymax}{##2}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \else + \E\pgfplotsmathlessthan{\E\pgfplots@ymax}{##2}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \fi + \fi + \ifpgfplots@curplot@threedim + \ifpgfplots@autocompute@zmin + \else + \ifpgfplots@zislinear + \E\pgfmathfloatlessthan@{##3}{\E\pgfplots@zmin}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \else + \E\pgfplotsmathlessthan{##3}{\E\pgfplots@zmin}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \fi + \fi + \ifpgfplots@autocompute@zmax + \else + \ifpgfplots@zislinear + \E\pgfmathfloatlessthan@{\E\pgfplots@zmax}{##3}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \else + \E\pgfplotsmathlessthan{\E\pgfplots@zmax}{##3}% + \E\ifpgfmathfloatcomparison + \E\pgfplots@update@limits@for@one@point@ISCLIPPEDtrue + \E\fi + \fi + \fi + \fi + \fi + % + % + % + % Update limits: + \E\ifpgfplots@update@limits@for@one@point@ISCLIPPED + \E\else + \ifpgfplots@autocompute@xmin + \ifpgfplots@xislinear + \E\pgfplotsmathfloatmin{\E\pgfplots@xmin}{##1}% + \E\global\E\let\E\pgfplots@xmin=\E\pgfmathresult + \else + \E\pgfplotsmathmin{\E\pgfplots@xmin}{##1}% + \E\global\E\let\E\pgfplots@xmin=\E\pgfmathresult + \fi + \fi + \ifpgfplots@autocompute@xmax + \ifpgfplots@xislinear + \E\pgfplotsmathfloatmax{\E\pgfplots@xmax}{##1}% + \E\global\E\let\E\pgfplots@xmax=\E\pgfmathresult + \else + \E\pgfplotsmathmax{\E\pgfplots@xmax}{##1}% + \E\global\E\let\E\pgfplots@xmax=\E\pgfmathresult + \fi + \fi + \ifpgfplots@autocompute@ymin + \ifpgfplots@yislinear + \E\pgfplotsmathfloatmin{\E\pgfplots@ymin}{##2}% + \E\global\E\let\E\pgfplots@ymin=\E\pgfmathresult + \else + \E\pgfplotsmathmin{\E\pgfplots@ymin}{##2}% + \E\global\E\let\E\pgfplots@ymin=\E\pgfmathresult + \fi + \fi + \ifpgfplots@autocompute@ymax + \ifpgfplots@yislinear + \E\pgfplotsmathfloatmax{\E\pgfplots@ymax}{##2}% + \E\global\E\let\E\pgfplots@ymax=\E\pgfmathresult + \else + \E\pgfplotsmathmax{\E\pgfplots@ymax}{##2}% + \E\global\E\let\E\pgfplots@ymax=\E\pgfmathresult + \fi + \fi + \ifpgfplots@curplot@threedim + \ifpgfplots@autocompute@zmin + \ifpgfplots@zislinear + \E\pgfplotsmathfloatmin{\E\pgfplots@zmin}{##3}% + \E\global\E\let\E\pgfplots@zmin=\E\pgfmathresult + \else + \E\pgfplotsmathmin{\E\pgfplots@zmin}{##3}% + \E\global\E\let\E\pgfplots@zmin=\E\pgfmathresult + \fi + \fi + \ifpgfplots@autocompute@zmax + \ifpgfplots@zislinear + \E\pgfplotsmathfloatmax{\E\pgfplots@zmax}{##3}% + \E\global\E\let\E\pgfplots@zmax=\E\pgfmathresult + \else + \E\pgfplotsmathmax{\E\pgfplots@zmax}{##3}% + \E\global\E\let\E\pgfplots@zmax=\E\pgfmathresult + \fi + \fi + \fi + \E\fi + % + % Compute data range: + \ifpgfplots@autocompute@all@limits + % the data range will be acquired simply from the axis + % range, see below! + \else + % Attention: it is only done for linear axis! + \ifpgfplots@xislinear + \E\pgfplotsmathfloatmin{\E\pgfplots@data@xmin}{##1}% + \E\global\E\let\E\pgfplots@data@xmin=\E\pgfmathresult + \E\pgfplotsmathfloatmax{\E\pgfplots@data@xmax}{##1}% + \E\global\E\let\E\pgfplots@data@xmax=\E\pgfmathresult + \fi + \ifpgfplots@yislinear + \E\pgfplotsmathfloatmin{\E\pgfplots@data@ymin}{##2}% + \E\global\E\let\E\pgfplots@data@ymin=\E\pgfmathresult + \E\pgfplotsmathfloatmax{\E\pgfplots@data@ymax}{##2}% + \E\global\E\let\E\pgfplots@data@ymax=\E\pgfmathresult + \fi + \ifpgfplots@curplot@threedim + \ifpgfplots@zislinear + \E\pgfplotsmathfloatmin{\E\pgfplots@data@zmin}{##3}% + \E\global\E\let\E\pgfplots@data@zmin=\E\pgfmathresult + \E\pgfplotsmathfloatmax{\E\pgfplots@data@zmax}{##3}% + \E\global\E\let\E\pgfplots@data@zmax=\E\pgfmathresult + \fi + \fi + \fi +%\E\pgfplots@message{Updated limits: (\E\pgfplots@xmin,\E\pgfplots@ymin) rectangle (\E\pgfplots@xmax,\E\pgfplots@ymax).}% +% +%\E\tracingmacros=0\E\tracingcommands=0 + }% + % + % A routine which parses a coordinate. + % Here, 'coordinate' means (x,y) for a two dimensional plot and + % '(x,y,z)' for a three dimensional one. + % + % The preparation consists of + % - filtering. + % - coordinate parsing and high level transformations. + % - logs. + % + % It might happen that \pgfplotsaxisparsecoordinate is called + % multiple times for a single data "point" (for example, a quiver + % point might call it for the point where the vector starts and + % where the vector ends). + % + % @PRECONDITION + % - the plot's survey phase is running (has already been started) + % - \pgfplots@current@point@[xyz] contains the coordinates of the + % point. I assume they are unparsed. + % + % + % @POSTCONDITION + % - the axis' state will be updated. + % - the \pgfplots@current@point@[xyz] macros will contain parsed data. + % - \ifpgfplotsaxisparsecoordinateok will be true if and only + % if the data point has not been filtered away. If it has been + % filtered away, \pgfplots@current@point@[xyz] will be empty. + % - \pgfplots@current@point@[xyz]@unfiltered contain unparsed + % data. + % + % @see \pgfplotsaxispreparecoordinate + % @see \pgfplotsaxisdatapointsurveyed + \xdef\pgfplotsaxisparsecoordinate@{% + % These things are necessary for error bars and are available + % as public results in math parser invocations (for meta and + % filters) + \E\let\E\pgfplots@current@point@x@unfiltered=\E\pgfplots@current@point@x + \E\let\E\pgfplots@current@point@y@unfiltered=\E\pgfplots@current@point@y + \E\let\E\pgfplots@current@point@z@unfiltered=\E\pgfplots@current@point@z + \E\def\E\pgfplots@unbounded@dir{}% + % + \E\pgfplots@invoke@prefilter + % + \E\pgfplots@prepare@xcoord{\E\pgfplots@current@point@x}% + \E\expandafter\E\pgfplots@invoke@filter\E\expandafter{\E\pgfmathresult}{x}% + \E\let\E\pgfplots@current@point@x=\E\pgfmathresult + % + \E\pgfplots@prepare@ycoord{\E\pgfplots@current@point@y}% + \E\expandafter\E\pgfplots@invoke@filter\E\expandafter{\E\pgfmathresult}{y}% + \E\let\E\pgfplots@current@point@y=\E\pgfmathresult + % + \ifpgfplots@curplot@threedim + \E\pgfplots@prepare@zcoord{\E\pgfplots@current@point@z}% + \E\expandafter\E\pgfplots@invoke@filter\E\expandafter{\E\pgfmathresult}{z}% + \E\let\E\pgfplots@current@point@z=\E\pgfmathresult + \fi + % + \E\pgfplots@invoke@filter@xyz + % + \E\ifx\E\pgfplots@current@point@x\E\pgfutil@empty + \E\else + \ifpgfplots@xislinear + \E\pgfplotscoordmath{x}{parsenumber}{\E\pgfplots@current@point@x}% + \E\let\E\pgfplots@current@point@x=\E\pgfmathresult + \else + % logs are already parsed (in prepare routine) + \fi + \E\pgfplotscoordmath{x}{if is bounded}{\E\pgfplots@current@point@x}% + {}% + {% this clears nan, inf and -inf points. + \E\let\E\pgfplots@current@point@x=\E\pgfutil@empty + \E\def\E\pgfplots@unbounded@dir{x}% + }% + \E\fi + % + \E\ifx\E\pgfplots@current@point@y\E\pgfutil@empty + \E\else + \ifpgfplots@yislinear + \E\pgfplotscoordmath{y}{parsenumber}{\E\pgfplots@current@point@y}% + \E\let\E\pgfplots@current@point@y=\E\pgfmathresult + \else + % logs are already parsed (in prepare routine) + \fi + \E\pgfplotscoordmath{y}{if is bounded}{\E\pgfplots@current@point@y}% + {}% + {% this clears nan, inf and -inf points. + \E\let\E\pgfplots@current@point@y=\E\pgfutil@empty + \E\def\E\pgfplots@unbounded@dir{y}% + }% + \E\fi + % + \ifpgfplots@curplot@threedim + % + \E\ifx\E\pgfplots@current@point@z\E\pgfutil@empty + \E\else + \ifpgfplots@zislinear + \E\pgfplotscoordmath{z}{parsenumber}{\E\pgfplots@current@point@z}% + \E\let\E\pgfplots@current@point@z=\E\pgfmathresult + \else + % logs are already parsed (in prepare routine) + \fi + \E\pgfplotscoordmath{z}{if is bounded}{\E\pgfplots@current@point@z}% + {}% + {% this clears nan, inf and -inf points. + \E\let\E\pgfplots@current@point@z=\E\pgfutil@empty + \E\def\E\pgfplots@unbounded@dir{z}% + }% + \E\fi + \fi + % + % check if coordinates are bounded: + \E\pgfplotsaxisparsecoordinateoktrue + \E\ifx\E\pgfplots@current@point@x\E\pgfutil@empty + \E\pgfplotsaxisparsecoordinateokfalse + \E\else + \E\ifx\E\pgfplots@current@point@y\E\pgfutil@empty + \E\pgfplotsaxisparsecoordinateokfalse + \E\else + \ifpgfplots@curplot@threedim + \E\ifx\E\pgfplots@current@point@z\E\pgfutil@empty + \E\pgfplotsaxisparsecoordinateokfalse + \E\fi + \fi + \E\fi + \E\fi + % + }% + % + \endgroup +}% + +% ================================== +% The quiver plot handler. +% It draws a lot of arrows. +% Its input is (x_i,y_i); (u_i,v_i) for data point i and it draws a +% vector in direction (u_i,v_i) starting from (x_i,y_i) . +% It also supports 3D arrows (involving z_i and w_i). + +\newif\ifpgfplots@quiver@usetikz +\newif\ifpgfplots@quiver@updatelimits + +\pgfplotsset{ + % The 'quiver' plot handler for two- and three dimensional plots. + % + % User Interface: + % use /pgfplots/quiver to enable the plot handler. + % Then, provide `quiver/u value' or `quiver/u' to + % tell where to find the 'x' coordinates of the vectors, and similarly + % for 'v' and 'w' instead of 'u'. + quiver/.code={% + \let\tikz@plot@handler=\pgfplotsplothandlerquiver + \pgfqkeys{/pgfplots/quiver}{#1}% + },% + quiver/u value*/.initial=0, + quiver/v value*/.initial=0, + quiver/w value*/.initial=0, + quiver/u value is expr/.initial=0, + quiver/v value is expr/.initial=0, + quiver/w value is expr/.initial=0, + quiver/u filter/.code=, + quiver/v filter/.code=, + quiver/w filter/.code=, + quiver/u value/.code =\pgfplots@set@source@for{quiver/u}{#1}{0},% + quiver/u/.code =\pgfplots@set@source@for{quiver/u}{#1}{1},% + quiver/v value/.code =\pgfplots@set@source@for{quiver/v}{#1}{0},% + quiver/v/.code =\pgfplots@set@source@for{quiver/v}{#1}{1},% + quiver/w value/.code =\pgfplots@set@source@for{quiver/w}{#1}{0},% + quiver/w/.code =\pgfplots@set@source@for{quiver/w}{#1}{1},% + quiver/before arrow/.code=, + quiver/after arrow/.code=, + quiver/every arrow/.style={}, + quiver/arrow color/.initial=, + quiver/scale arrows/.initial=1, + quiver/update limits/.is if=pgfplots@quiver@updatelimits, + quiver/update limits=true, + quiver/colored/.code={% + \def\pgfplots@loc@TMPa{#1}% + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \else + \pgfkeyslet{/pgfplots/quiver/arrow color}\pgfplots@loc@TMPa + \pgfkeysalso{/pgfplots/set point meta if empty=f(x)}% + \fi + },% + quiver/colored/.default=mapped color, +}% + +\def\pgfplots@set@source@for#1#2#3{% + \pgfkeyssetvalue{/pgfplots/#1 value*}{#2}% + \pgfkeyssetvalue{/pgfplots/#1 is expr}{#3}% +}% +% To be used to create a simple parser for keys initialised by +% \pgfplots@set@source@for: +% +% #1: the key path (relative to /pgfplots/) of the data. +% Can be empty in which case /pgfplots/#2 is used to access data. +% #2: the key name of the data +% #3: a macro name which be will defined to be a parser for the data. +% +% The parser will check whether the '#2 is expr' key is set. +% Furthermore, it defines /data point/#2 to be the result. +% +% Example: +% \pgfplots@set@source@for{hist/data}{...} +% +% -> +% \pgfplots@prepare@source@parser@for{hist/}{data}\parser +% +% then, invoking \parser +% will define \pgfmathresult to be the argument provided to +% \pgfplots@set@source@for. +\def\pgfplots@prepare@source@parser@for#1#2#3{% + \pgfkeyslet{/data point/#1#2}\pgfutil@empty% + % + \pgfkeysgetvalue{/pgfplots/#1#2 value*}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + % assume the '/data point/#1#2' is set by some input + % routine. + % Invoke math parser in this case. + \pgfkeyssetvalue{/pgfplots/#1#2 is expr}{1}% + \else + \pgfkeyslet{/data point/#1#2}\pgfplots@loc@TMPa + \fi + \def#3{% + \edef\pgfmathresult{\pgfkeysvalueof{/data point/#1#2}} +%\message{parse coordinate #1#2 (\pgfmathresult) ...^^J}% + }% + % + % + \pgfkeysifdefined{/pgfplots/#1#2 coord trafo/.@cmd}{% + \pgfkeysgetvalue{/pgfplots/#1#2 coord trafo/.@cmd}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key + \else + \t@pgfplots@toka=\expandafter{#3}% + \t@pgfplots@tokb={% + \def\pgfplots@loc@TMPa{\pgfkeysvalueof{/pgfplots/#1#2 coord trafo/.@cmd}}% + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}\pgfeov% + }% + \t@pgfplots@tokc={% + \ifx\pgfmathresult\pgfutil@empty + \else + \pgfmathfloatparsenumber{\pgfmathresult}% + \fi + }% + \edef#3{% + \the\t@pgfplots@toka + \the\t@pgfplots@tokb + \the\t@pgfplots@tokc + }% + \fi + }{}% + % + \t@pgfplots@toka=\expandafter{#3}% + \if1\pgfkeysvalueof{/pgfplots/#1#2 is expr}% + \t@pgfplots@tokc={% + \ifx\pgfmathresult\pgfutil@empty + \else + \pgfmathparse{\pgfmathresult}% + \fi + }% + \else + \t@pgfplots@tokc={% + \ifx\pgfmathresult\pgfutil@empty + \else + \pgfmathfloatparsenumber{\pgfmathresult}% + \fi + }% + \fi + \edef#3{% + \the\t@pgfplots@toka + \the\t@pgfplots@tokc + }% + % + \pgfkeysgetvalue{/pgfplots/#1#2 filter/.@cmd}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key + \else + \t@pgfplots@toka=\expandafter{#3}% + \t@pgfplots@tokb={% + \def\pgfplots@loc@TMPa{\pgfkeysvalueof{/pgfplots/#1#2 filter/.@cmd}}% + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}\pgfeov% + }% + \t@pgfplots@tokc={% + \ifx\pgfmathresult\pgfutil@empty + \else + \pgfmathfloatparsenumber{\pgfmathresult}% + \fi + }% + \edef#3{% + \the\t@pgfplots@toka + \the\t@pgfplots@tokb + \the\t@pgfplots@tokc + }% + \fi + % + \iftrue + \t@pgfplots@toka=\expandafter{#3}% + \t@pgfplots@tokc={% +%\message{parse coordinate (#1#2) = \pgfmathresult.^^J}% + }% + \edef#3{% + \the\t@pgfplots@toka + \the\t@pgfplots@tokc + }% + \fi +}% + +% Invokes /pgfplots/#1 coord inv trafo on \pgfmathresult if that key +% exists. +% #1 the argument is in float (will become the 'default' coordmath +% eventually). +% +% On output, it should either '#1' if there was no coord inv trafo or +% the result of the trafo. +\def\pgfplots@coord@trafo@inv@for#1{% + \def\pgfplots@loc@TMPb{/pgfplots/#1 coord inv trafo/.@cmd}% + \pgfkeysifdefined{\pgfplots@loc@TMPb}{% + \pgfkeysgetvalue{\pgfplots@loc@TMPb}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key + \else + \pgfmathfloattofixed{\pgfmathresult}% + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}\pgfeov + \fi + }{}% +} +% Like \pgfplots@coord@trafo@inv@for, but for the normal trafo +% direction +\def\pgfplots@coord@trafo@for#1{% + \def\pgfplots@loc@TMPb{/pgfplots/#1 coord trafo/.@cmd}% + \pgfkeysifdefined{\pgfplots@loc@TMPb}{% + \pgfkeysgetvalue{\pgfplots@loc@TMPb}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfplots@empty@command@key + \else + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}\pgfeov + \fi + }{}% +} +\def\pgfplotsplothandlerquiver{% + \pgfplotsresetplothandler + \let\pgf@plotstreamstart=\pgfplotsplothandlervisbegin@quiver + \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@quiver + \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@quiver + \let\pgfplotsplothandlerserializepointto=\pgfplotsplothandlerserializepointto@quiver + \let\pgfplotsplothandlerdeserializepointfrom=\pgfplotsplothandlerdeserializepointfrom@quiver + \let\pgfplotsplothandlerquiver@vis@hook=\pgfutil@empty + % + \ifpgfplots@xislinear \else \pgfplotsplothandlerquivererror \fi + \ifpgfplots@yislinear \else \pgfplotsplothandlerquivererror\fi + \pgfplotsifcurplotthreedim{% + \ifpgfplots@zislinear \else \pgfplotsplothandlerquivererror \fi + }{}% +}% +\def\pgfplotsplothandlerquivererror{\pgfplots@error{Sorry, quiver plots for logarithmic axes are not yet implemented. In fact, the implementation does something -- but it will probably change in future releases. Contact the mailing list if you have questions}}% + +\def\pgfplotsplothandlersurveystart@quiver{% + \pgfkeysgetvalue{/pgfplots/quiver/scale arrows}\pgfplots@quiver@scale + \ifx\pgfplots@quiver@scale\pgfutil@empty + \else + \def\pgfplots@loc@TMPa{1}% + \ifx\pgfplots@loc@TMPa\pgfplots@quiver@scale + \let\pgfplots@quiver@scale=\pgfutil@empty + \else + \pgfmathparse{\pgfplots@quiver@scale}% + \pgfmathfloatparsenumber\pgfplots@quiver@scale + \let\pgfplots@quiver@scale=\pgfmathresult + \fi + \fi + % + \pgfplots@prepare@source@parser@for@quiver u\pgfplots@quiver@prepare@u% + \pgfplots@prepare@source@parser@for@quiver v\pgfplots@quiver@prepare@v% + \pgfplots@prepare@source@parser@for@quiver w\pgfplots@quiver@prepare@w% +}% + +\def\pgfplots@prepare@source@parser@for@quiver#1#2{% + \pgfplots@prepare@source@parser@for{quiver/}{#1}{#2}% + \t@pgfplots@toka=\expandafter{#2}% + \t@pgfplots@tokb=\expandafter{\csname pgfplots@quiver@#1\endcsname}% + \edef#2{% + \the\t@pgfplots@toka + \noexpand\let\the\t@pgfplots@tokb=\noexpand\pgfmathresult + \ifx\pgfplots@quiver@scale\pgfutil@empty + \else + \noexpand\pgfmathfloatmultiply@{\pgfplots@quiver@scale}{\the\t@pgfplots@tokb}% + \noexpand\let\the\t@pgfplots@tokb=\noexpand\pgfmathresult + \fi + }% +}% + +\def\pgfplotsplothandlersurveypoint@quiver{% + \pgfplots@quiver@prepare@u + \pgfplots@quiver@prepare@v + \pgfplotsifcurplotthreedim{% + \pgfplots@quiver@prepare@w + }{% + \let\pgfplots@quiver@w=\pgfutil@empty + }% + \pgfplotsaxisparsecoordinate + \pgfplotsaxispreparecoordinate + \ifpgfplotsaxisparsecoordinateok + \pgfplotsaxisupdatelimitsforcoordinate\pgfplots@current@point@x\pgfplots@current@point@y\pgfplots@current@point@z + % + \pgfmathadd@{\pgfplots@quiver@u}{\pgfplots@current@point@x}% + \let\pgfplots@quiver@u=\pgfmathresult + \pgfmathadd@{\pgfplots@quiver@v}{\pgfplots@current@point@y}% + \let\pgfplots@quiver@v=\pgfmathresult + \pgfplotsifcurplotthreedim{% + \pgfmathadd@{\pgfplots@quiver@w}{\pgfplots@current@point@z}% + \let\pgfplots@quiver@w=\pgfmathresult + }{}% + \ifpgfplots@quiver@updatelimits + \pgfplotsaxisupdatelimitsforcoordinate\pgfplots@quiver@u\pgfplots@quiver@v\pgfplots@quiver@w + \fi + \fi + \pgfplotsaxisdatapointsurveyed +}% +\def\pgfplotsplothandlerserializepointto@quiver#1{% + \edef#1{\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z>\pgfplots@quiver@u,\pgfplots@quiver@v,\pgfplots@quiver@w}% +}% +\def\pgfplotsplothandlerdeserializepointfrom@quiver#1{% + \expandafter\pgfplotsplothandlerdeserializepointfrom@quiver@#1\relax +}% +\def\pgfplotsplothandlerdeserializepointfrom@quiver@#1,#2,#3>#4,#5,#6\relax{% + \def\pgfplots@current@point@x{#1}% + \def\pgfplots@current@point@y{#2}% + \def\pgfplots@current@point@z{#3}% + \def\pgfplots@quiver@u{#4}% + \def\pgfplots@quiver@v{#5}% + \def\pgfplots@quiver@w{#6}% +}% +\def\pgfplotsplothandlervisbegin@quiver{% + \def\pgfplots@quiver@has@handled@point@meta{0}% + \pgfkeysgetvalue{/pgfplots/quiver/arrow color}\pgfplots@quiver@color + \ifx\pgfplots@quiver@color\pgfutil@empty + \else + % prepare the color data and define 'mapped color': + \def\pgfplots@quiver@has@handled@point@meta{1}% + \expandafter\def\expandafter\pgfplotsplothandlerquiver@vis@hook\expandafter{% + \pgfplotsplothandlerquiver@vis@hook + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotscolormapdefinemappedcolor{\pgfplotspointmetatransformed}% + }% + % SEE BELOW AS WELL FOR HOW TO ENABLE THE COLOR. + \fi + % + % + \pgfkeysgetvalue{/pgfplots/quiver/every arrow/.@cmd}\pgfplots@quiver@everyarrow + \ifx\pgfplots@quiver@everyarrow\pgfplots@empty@style@key + % use PGF basic level methods to set the 'arrow color': + \ifx\pgfplots@quiver@color\pgfutil@empty + \else + \expandafter\def\expandafter\pgfplotsplothandlerquiver@vis@hook\expandafter{% + \pgfplotsplothandlerquiver@vis@hook + \pgfsetstrokecolor{\pgfkeysvalueof{/pgfplots/quiver/arrow color}}% + % for arrow heads: + \pgfsetfillcolor{\pgfkeysvalueof{/pgfplots/quiver/arrow color}}% + }% + \fi + \else + % 'every arrow' should provide a high level user interface. + % Use tikz instead of pgf. This is slower, but more powerfull. + \pgfplots@quiver@usetikztrue + \pgfplotsaxisifhaspointmeta{% + % ASSERT(mapped color is available) + \if0\pgfplots@quiver@has@handled@point@meta% + % -> define mapped color + \expandafter\def\expandafter\pgfplotsplothandlerquiver@vis@hook\expandafter{% + \pgfplotsplothandlerquiver@vis@hook + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotscolormapdefinemappedcolor{\pgfplotspointmetatransformed}% + }% + \def\pgfplots@quiver@has@handled@point@meta{1}% + \fi + }{}% + % use tikz methods to set the 'arrow color': + \ifx\pgfplots@quiver@color\pgfutil@empty + \else + \t@pgfplots@toka=\expandafter{\pgfplots@quiver@color}% + \edef\pgfplots@loc@TMPa{\noexpand\pgfkeysalso{/pgfplots/quiver/every arrow/.prefix style={\the\t@pgfplots@toka}}}% + \pgfplots@loc@TMPa + \fi + \fi + % + \global\let\pgf@plotstreampoint=\pgfplotsplothandlerquiver@vis% + \global\let\pgf@plotstreamspecial=\pgfutil@gobble% + \global\let\pgf@plotstreamend=\relax +}% + +\def\pgfplotsplothandlerquiver@vis#1{% + \pgfkeysvalueof{/pgfplots/quiver/before arrow/.@cmd}\pgfeov + \pgfplotsplothandlerquiver@vis@hook + \ifpgfplots@quiver@usetikz + \draw[/pgfplots/quiver/every arrow] \pgfextra{\pgfplotsplothandlerquiver@vis@path{#1}}; + \else + \pgfplotsplothandlerquiver@vis@path{#1}% + \pgfusepath{stroke}% + \fi + \pgfkeysvalueof{/pgfplots/quiver/after arrow/.@cmd}\pgfeov +}% +\def\pgfplotsplothandlerquiver@vis@path#1{% + \pgfpathmoveto{#1}% + \pgfplotsaxisvisphasetransformcoordinate\pgfplots@quiver@u\pgfplots@quiver@v\pgfplots@quiver@w + \pgfpathlineto{% + \pgfplotsifcurplotthreedim{% + \pgfplotsqpointxyz\pgfplots@quiver@u\pgfplots@quiver@v\pgfplots@quiver@w + }{% + \pgfplotsqpointxy\pgfplots@quiver@u\pgfplots@quiver@v + }% + }% +}% + +\newif\ifpgfplotsplothandlerhistogram@intervals +\newif\ifpgfplotsplothandlerhistogram@cumulative +\pgfplotsset{ + hist/.code={% + \let\tikz@plot@handler=\pgfplotsplothandlerhistogram + \pgfqkeys{/pgfplots/hist}{#1}% + }, + hist/data value/.code =\pgfplots@set@source@for{hist/data}{#1}{0},% + hist/data/.code =\pgfplots@set@source@for{hist/data}{#1}{1},% + hist/data filter/.code=, + hist/data value=\pgfkeysvalueof{/data point/y}, +% hist/data=y, + hist/data min/.initial=\pgfkeysvalueof{/pgfplots/xmin}, + hist/data max/.initial=\pgfkeysvalueof{/pgfplots/xmax}, + hist/bins/.initial=10, + hist/intervals/.is if=pgfplotsplothandlerhistogram@intervals, + hist/intervals/.default=true, + hist/intervals=true, + hist/cumulative/.is if=pgfplotsplothandlerhistogram@cumulative, + hist/cumulative/.default=true, + hist/handler/.style={/tikz/ybar interval}, + hist/symbolic coords/.style={% + /pgfplots/symbolic coords={hist/data}{A,B,C,D,E,F,G,H,I,J}, + /pgfplots/symbolic coords={x}{A,B,C,D,E,F,G,H,I,J}, + },% +}% +\def\pgfplotsplothandlerhistogram{% + \pgfplotsresetplothandler + \def\pgf@plotstreamstart{% + \pgfplotsset{/pgfplots/hist/handler}% + \pgfplotsresetplothandler + \tikz@plot@handler + \pgf@plotstreamstart + }% + \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@hist + \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@hist + \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@hist +}% +\def\pgfplotsplothandlersurveystart@hist{% + \pgfplots@prepare@source@parser@for{hist/}{data}{\pgfplotsplothandlerhistogram@parse}% + % + \pgfkeysgetvalue{/pgfplots/hist/data min}\pgfmathresult + \edef\pgfmathresult{\pgfmathresult}% + \ifx\pgfmathresult\pgfutil@empty\else + \pgfplots@coord@trafo@for{hist/data}% + \fi + \edef\pgfplotsplothandlerhistogram@datamin{\pgfmathresult}% + % + \pgfkeysgetvalue{/pgfplots/hist/data max}\pgfmathresult + \edef\pgfmathresult{\pgfmathresult}% + \ifx\pgfmathresult\pgfutil@empty\else + \pgfplots@coord@trafo@for{hist/data}% + \fi + \edef\pgfplotsplothandlerhistogram@datamax{\pgfmathresult}% + % + \ifx\pgfplotsplothandlerhistogram@datamin\pgfutil@empty + \pgfmathfloatcreate{1}{1.0}{2147483645}% + \let\pgfplotsplothandlerhistogram@datamin=\pgfmathresult + \def\pgfplotsplothandlerhistogram@datamin@autocompute{1}% + \else + \pgfmathfloatparsenumber{\pgfplotsplothandlerhistogram@datamin}% + \let\pgfplotsplothandlerhistogram@datamin=\pgfmathresult + \def\pgfplotsplothandlerhistogram@datamin@autocompute{0}% + \fi + \ifx\pgfplotsplothandlerhistogram@datamax\pgfutil@empty + \pgfmathfloatcreate{2}{1.0}{2147483645}% + \let\pgfplotsplothandlerhistogram@datamax=\pgfmathresult + \def\pgfplotsplothandlerhistogram@datamax@autocompute{1}% + \else + \pgfmathfloatparsenumber{\pgfplotsplothandlerhistogram@datamax}% + \let\pgfplotsplothandlerhistogram@datamax=\pgfmathresult + \def\pgfplotsplothandlerhistogram@datamax@autocompute{0}% + \fi + % + \edef\pgfplotsplothandlerhistogram@Nfixed{\pgfkeysvalueof{/pgfplots/hist/bins}}% + \c@pgf@counta=\pgfplotsplothandlerhistogram@Nfixed\relax + \advance\c@pgf@counta by-1 + \edef\pgfplotsplothandlerhistogram@Nmax{\the\c@pgf@counta}% + % + \pgfmathfloatparsenumber{\pgfplotsplothandlerhistogram@Nfixed}% + \let\pgfplotsplothandlerhistogram@N=\pgfmathresult + % + \pgfplotsapplistXnewempty\pgfp@hist@@ + \def\c@pgfplotsplothandlerhistogram@num{0}% + \c@pgfplots@coordindex=0 +}% + +\def\pgfplotsplothandlersurveypoint@hist@limits{% + \if1\pgfplotsplothandlerhistogram@datamin@autocompute + \pgfplotsmathfloatmin{\pgfplots@current@point@data}{\pgfplotsplothandlerhistogram@datamin}% + \let\pgfplotsplothandlerhistogram@datamin=\pgfmathresult + \fi + % + \if1\pgfplotsplothandlerhistogram@datamax@autocompute + \pgfplotsmathfloatmax{\pgfplots@current@point@data}{\pgfplotsplothandlerhistogram@datamax}% + \let\pgfplotsplothandlerhistogram@datamax=\pgfmathresult + \fi +}% +\def\pgfplotsplothandlersurveypoint@hist{% + % Note that at this point, the coordinate filtering does NOT + % apply. Perhaps it should... + \pgfplotsplothandlerhistogram@parse + \let\pgfplots@current@point@data=\pgfmathresult + % + \ifx\pgfplots@current@point@data\pgfutil@empty + \else + \pgfmathfloatiffinite\pgfplots@current@point@data{% + \pgfplotsplothandlersurveypoint@hist@limits + % + \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlerhistogram@num + % + % store parsed result. + \edef\pgfmathresult{{\pgfplots@current@point@data}}% + \expandafter\pgfplotsapplistXpushback\expandafter{\pgfmathresult}\to\pgfp@hist@@ + }{% + }% + \fi + \advance\c@pgfplots@coordindex by1 +}% +\def\pgfplotsplothandlersurveyend@hist{% + \ifnum\c@pgfplotsplothandlerhistogram@num>0 + \expandafter\pgfplotsplothandlersurveyend@hist@ + \fi +}% +\def\pgfplotsplothandlersurveyend@hist@{% + \pgfmathfloatsubtract@{\pgfplotsplothandlerhistogram@datamax}{\pgfplotsplothandlerhistogram@datamin}% + \let\pgfplotsplothandlerhistogram@range=\pgfmathresult + \pgfmathfloatdivide@{\pgfplotsplothandlerhistogram@range}{\pgfplotsplothandlerhistogram@N}% + \let\pgfplotsplothandlerhistogram@h=\pgfmathresult + \pgfmathfloatreciprocal@{\pgfplotsplothandlerhistogram@h}% + \let\pgfplotsplothandlerhistogram@invh=\pgfmathresult + % + \pgfplotsarraynewempty{pgfp@hist}% + \pgfplotsarrayresize{pgfp@hist}{\pgfplotsplothandlerhistogram@Nfixed}% + \pgfplotsarrayforeachungrouped{pgfp@hist}\as\pgfplots@hist@count{% + \pgfplotsarrayset{\pgfplotsarrayforeachindex}\of{pgfp@hist}\to{0}% + }% + % + \pgfplotsapplistXlet\pgfplots@hist@data=\pgfp@hist@@ + \pgfplotsapplistXnewempty\pgfp@hist@@ + \expandafter\pgfplotsplothandlersurveyend@hist@loop\pgfplots@hist@data\pgfplots@EOI + \let\pgfplots@hist@data=\relax + % + \ifpgfplotsplothandlerhistogram@cumulative + \c@pgf@counta=0 + \pgfplotsarrayforeachungrouped{pgfp@hist}\as\pgfplots@hist@count{% + \advance\c@pgf@counta by\pgfplots@hist@count\relax + \def\pgfplots@loc@TMPa{\pgfplotsarrayset{\pgfplotsarrayforeachindex}\of{pgfp@hist}\to}% + \expandafter\pgfplots@loc@TMPa\expandafter{\the\c@pgf@counta}% + }% + \fi + % + \pgfplots@curplot@threedimfalse + % + \pgfplotsset{/pgfplots/hist/handler}% + \pgfplotsresetplothandler + \tikz@plot@handler + % + \pgfplotsplothandlersurveystart + % + \let\pgfplots@current@point@z=\pgfutil@empty + \pgfplotsarrayforeachungrouped{pgfp@hist}\as\pgfplots@hist@count{% + \pgfplotsplothandlerhistgetintervalstartfor\pgfplotsarrayforeachindex + \pgfplotsplothandlerhist@invtrafo + \let\pgfplots@current@point@x\pgfmathresult% + \let\pgfplots@current@point@y\pgfplots@hist@count% +%\message{Survey point (\pgfplots@current@point@x,\pgfplots@current@point@y)^^J}% + \pgfplotsplothandlersurveypoint + }% + \ifpgfplotsplothandlerhistogram@intervals + % replicate last count. + \let\pgfmathresult\pgfplotsplothandlerhistogram@datamax% + \pgfplotsplothandlerhist@invtrafo + \let\pgfplots@current@point@x\pgfmathresult% + \let\pgfplots@current@point@y\pgfplots@hist@count% +%\message{Survey point (\pgfplots@current@point@x,\pgfplots@current@point@y)^^J}% + \pgfplotsplothandlersurveypoint + \fi + % + \pgfplotsplothandlersurveyend +} +\def\pgfplotsplothandlerhist@invtrafo{% + % This here might be inefficient, because + % there needs to be a compatible "x coord trafo" as well -- and + % that transformation will (most likely) do the very same thing as + % the hist/data coord trafo. + % + % But I did not find a way to combine the transformations + % automatically without resorting to hackery. + % + % And: the performance impact might (hopefully) be small... + \pgfplots@coord@trafo@inv@for{hist/data}% +}% +\def\pgfplotsplothandlersurveyend@hist@loop#1{% + \def\pgfplots@loc@TMPa{#1}% + \ifx\pgfplots@loc@TMPa\pgfplots@EOI + \else + \pgfplotsplothandlerhistgetbinfor@{#1}% + \expandafter\pgfplotsplothandlerhistadvancebin\expandafter{\pgfmathresult}% + % + \expandafter\pgfplotsplothandlersurveyend@hist@loop + \fi +}% +\def\pgfplotsplothandlerhistadvancebin#1{% + \pgfplotsarrayselect{#1}\of{pgfp@hist}\to\pgfplots@loc@TMPa% + \pgfplotsutil@advancestringcounter\pgfplots@loc@TMPa + \pgfplotsarrayletentry{#1}\of{pgfp@hist}=\pgfplots@loc@TMPa +}% +\def\pgfplotsplothandlerhistgetintervalstartfor#1{% + \pgfmathfloatparsenumber{#1}% + \expandafter\pgfplotsplothandlerhistgetintervalstartfor@\expandafter{\pgfmathresult}% +}% +\def\pgfplotsplothandlerhistgetintervalstartfor@#1{% + \pgfmathfloatmultiply@{\pgfplotsplothandlerhistogram@h}{#1}% + \expandafter\pgfmathfloatadd@\expandafter{\pgfmathresult}{\pgfplotsplothandlerhistogram@datamin}% +}% +\def\pgfplotsplothandlerhistgetbinfor#1{% + \pgfmathfloatparsenumber{#1}% + \expandafter\pgfplotsplothandlerhistgetbinfor@\expandafter{\pgfmathresult}% +}% + +\def\pgfplotsplothandlerhistsettol#1{% + \begingroup + \pgfmathfloatparsenumber{#1}% + \global\let\pgfplotsplothandlerhisttol@parsed=\pgfmathresult + \endgroup +}% +\pgfplotsplothandlerhistsettol{1e-4}% + +\def\pgfplotsplothandlerhistgetbinfor@#1{% + \pgfmathfloatsubtract@{#1}{\pgfplotsplothandlerhistogram@datamin}% + \expandafter\pgfmathfloatmultiply@\expandafter{\pgfmathresult}{\pgfplotsplothandlerhistogram@invh}% + \expandafter\pgfmathfloatadd@\expandafter{\pgfmathresult}{\pgfplotsplothandlerhisttol@parsed}% + \pgfmathfloattofixed{\pgfmathresult}% + \afterassignment\pgfplots@gobble@until@relax + \c@pgf@counta=\pgfmathresult\relax + \ifnum\pgfplotsplothandlerhistogram@Nfixed>\c@pgf@counta + \ifnum\c@pgf@counta<0 + \def\pgfmathresult{0}% + \else + \def\pgfmathresult{\the\c@pgf@counta}% + \fi + \else + \let\pgfmathresult=\pgfplotsplothandlerhistogram@Nmax + \fi +}% + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 +% +% Contour plots +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 + +\newif\ifpgfplotsplothandlercontour@labels +\newif\ifpgfplotsplothandlercontour@filled + +\pgfplotsset{ + contour prepared/.code={% + \let\tikz@plot@handler=\pgfplotsplothandlercontourprepared + \pgfqkeys{/pgfplots/contour}{% + #1,% + }% + }, + contour prepared filled/.style={% + /pgfplots/contour prepared={draw color=mapped color!80!black,labels=false,filled=true}, + }, + % FIXME : should use \tikz@plot@handler instead of just the + % visualization thing! + contour/handler/.style={/tikz/sharp plot}, + contour prepared format/.is choice, + contour prepared format/standard/.code= {\def\pgfplotsplothandlercontourprepared@format{s}}, + contour prepared format/matlab/.code= {\def\pgfplotsplothandlercontourprepared@format{m}}, + contour prepared format/standard, + contour/draw color/.initial=mapped color, + contour/fill color/.initial=mapped color, + contour/label distance/.initial=70pt, + contour/label node code/.code={% + \node {\pgfmathprintnumber{#1}}; + },% + contour/labels/.is if=pgfplotsplothandlercontour@labels, + contour/labels=true, + contour/filled/.is if=pgfplotsplothandlercontour@filled, + contour/filled/.default=true, + contour/data limits/.initial=,% FIXME EXPERIMENTAL + contour/every contour label/.style={% + sloped,% + transform shape,% + inner sep=2pt, + font=\scriptsize, + every node/.style={mapped color!50!black,fill=white},% + /pgf/number format/relative={\pgfplotspointmetarangeexponent},% + %every node/.style={yshift=10pt},% + }, + contour/labels over line/.style={ + /pgfplots/contour/every contour label/.append style={% + every node/.append style={% + fill=none, + anchor=base, + yshift=1pt, + }, + }, + }, + contour/contour label style/.style={ + /pgfplots/contour/every contour label/.append style={#1}}, + % + % + % Styles to actually *compute* the contour. + % These are mostly placeholders here: As long as the + % algorithm is not ready, we have to resort to external tools. + % + % Shared parameters: + contour/number/.initial=5, + % + % + % Interface to external tools: + contour external/.code={% + \edef\tikz@plot@handler{\noexpand\pgfplotsplothandlercontourexternal}% + \pgfqkeys{/pgfplots/contour external}{#1}% + }, + contour external/scanline marks/.is choice, + contour external/scanline marks/false/.code={\def\pgfplotsplothandlercontourexternal@scanlinemode{0}}, + contour external/scanline marks/if in input/.code={\def\pgfplotsplothandlercontourexternal@scanlinemode{1}}, + contour external/scanline marks/required/.code={\def\pgfplotsplothandlercontourexternal@scanlinemode{2}}, + contour external/scanline marks/true/.code={\def\pgfplotsplothandlercontourexternal@scanlinemode{2}}, + contour external/scanline marks/if in input, + contour external/file/.initial=,% auto-generate + contour external/script extension/.initial=script, + contour external/script/.initial=,% not yet initialised + contour external/cmd/.initial=,% not yet initialised + contour external/.search also=/pgfplots/contour, + contour gnuplot/.style={ + contour external={% + scanline marks=required, + script={unset surface; set cntrparam levels \pgfkeysvalueof{/pgfplots/contour/number}; set contour; set table \"\outfile\"; splot \"\infile\";}, + cmd={gnuplot \"\script\"}, + #1,% + }, + }, +}% +\def\pgfplotsplothandlercontourprepared{% + \pgfplotsresetplothandler + \pgfplotsset{empty line=jump}% + \let\pgf@plotstreamstart=\pgfplotsplothandlervisstart@contour + \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@contour + \if m\pgfplotsplothandlercontourprepared@format + \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@contourmatlabformat + \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@contourmatlabformat + \pgfplotsaxisifhaspointmeta{}{% + \pgfplotsset{/pgfplots/point meta=explicit}% + }% + \fi + \pgfplotsplothandlercontour@prepare@point@meta +}% +\def\pgfplotsplothandlercontour@prepare@point@meta{% + \ifpgfplots@curplot@threedim + \pgfplotsset{/pgfplots/set point meta if empty=z}% + \else + \pgfplotsaxisifhaspointmeta{}{% + \pgfkeysgetvalue{/pgfplots/table/meta index}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty +% FIXME : this here is reasonable, but it should be sanity checked! + \pgfkeyssetvalue{/pgfplots/table/meta index}{2}% + \fi + \pgfplotsset{/pgfplots/set point meta if empty=explicit}% + }% + %\pgfplots@error{Sorry, 'contour external' requires \string\addplot3 (or a non-empty `point meta' used as label data)}% + \fi + \def\pgfplotsplothandlercontour@empty@pointmeta@error@@{0}% +}% +\def\pgfplotsplothandlercontour@empty@pointmeta@error{% + \if0\pgfplotsplothandlercontour@empty@pointmeta@error@@ + \def\pgfplotsplothandlercontour@empty@pointmeta@error@@{1}% + \def\pgfplots@current@point@meta{0}% + \pgfplotsthrow{invalid argument}{\pgfplots@current@point@meta}{Sorry, contour plots require non--empty `point meta'. Please use '\string\addplot3[contour ...] together with 'view={0}{90}' or provide a valid 'point meta=<value>' (for example `<value>=z'?)}\pgfeov% + \fi +}% + +\def\pgfplotsplothandlersurveystart@contourmatlabformat{% + \def\c@pgfplotsplothandlercontourprepared@matlabformat@cur{0}% + \def\c@pgfplotsplothandlercontourprepared@matlabformat@count{0}% +} +\def\pgfplotsplothandlersurveypoint@contourmatlabformat{% + \ifnum\c@pgfplotsplothandlercontourprepared@matlabformat@cur=\c@pgfplotsplothandlercontourprepared@matlabformat@count\relax + \pgfmathfloatparsenumber{\pgfplots@current@point@y}% + \pgfmathfloattoint\pgfmathresult + \let\c@pgfplotsplothandlercontourprepared@matlabformat@count=\pgfmathresult + \def\c@pgfplotsplothandlercontourprepared@matlabformat@cur{0}% + % + \pgfmathfloatparsenumber{\pgfplots@current@point@x}% + \let\pgfplotsplothandlercontourprepared@matlabformat@meta=\pgfmathresult + % + \else + \let\pgfplots@current@point@z=\pgfplotsplothandlercontourprepared@matlabformat@meta + \let\pgfplots@current@point@meta=\pgfplotsplothandlercontourprepared@matlabformat@meta + \pgfplotsplothandlersurveypoint@default + \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlercontourprepared@matlabformat@cur + \fi +}% +\def\pgfplotsplothandlersurveyend@contour{% + \pgfplotsplothandlercontour@init@limits + \ifx\pgfplotsplothandlercontour@limits@low@meta\pgfutil@empty + \else + \pgfplotsaxisupdatelimitsforpointmeta\pgfplotsplothandlercontour@limits@low@meta + \fi +}% + +\def\pgfplotsplothandlervisstart@contour{% + % + \ifpgfplotsplothandlercontour@labels + \pgfkeysgetvalue{/pgfplots/contour/label distance}\pgfplotsplothandlercontour@labeldist + \pgfmathparse{\pgfplotsplothandlercontour@labeldist}% + \edef\pgfplotsplothandlercontour@labeldist{\pgfmathresult pt}% + % + \pgfplotsapplistXnewempty\pgfplotsplothandlercontour@storedlabels + \let\pgfplotsplothandlercontour@handlesplinesegment=\pgfplotsplothandlercontour@handlesplinesegment@forlabels + \else + \def\pgfplotsplothandlercontour@handlesplinesegment##1##2##3{}% + \fi + % + \ifpgfplotsplothandlercontour@filled + \pgfseteorule + \pgfplotsapplistXnewempty\pgfplotsplothandlercontour@stored@lastcontourpath + \pgfplotsplothandlercontour@init@limits + \fi + % + \pgfplotsresetplothandler + \pgfplotsset{/pgfplots/contour/handler}% + \tikz@plot@handler + % + \def\pgfplotsplothandlercontour@haspendingjump{0}% + \let\pgfplotsplothandlervisualizejump=\pgfplotsplothandlercontour@jump + % + \let\pgfplotsplothandlercontour@handler@start=\pgf@plotstreamstart + \let\pgfplotsplothandlercontour@lastcontour=\pgfutil@empty + \global\let\pgf@plotstreampoint=\pgfplotsplothandlercontour@streampoint + \global\let\pgf@plotstreamend=\pgfplotsplothandlercontour@streamend +}% + +\def\pgfplotsplothandlercontour@jump{% + \def\pgfplotsplothandlercontour@haspendingjump{1}% +}% + +\def\pgfplotsplothandlercontour@streamend{% + \ifx\pgfplotsplothandlercontour@lastcontour\pgfutil@empty + \else + % + \def\pgfplotsplothandlercontour@haspendingjump{0}% important! (this is a different case than a jump) + \pgfplotsplothandlercontour@finishcontourline + % + \ifpgfplotsplothandlercontour@filled + \if0\pgfplotsplothandlercontour@processed@outer + \pgfplotsplothandlercontour@stream@bbcontour + \pgfplotsplothandlercontour@finishcontourline + \fi + \fi + % + \ifpgfplotsplothandlercontour@labels + \scope[/pgfplots/contour/every contour label] + \let\pgfplots@restore@drawmodes=\relax% FIXME : necessary? + \pgfplotsapplistXlet\pgfplotsplothandlercontour@storedlabels@=\pgfplotsplothandlercontour@storedlabels + \pgfplotsapplistXnewempty\pgfplotsplothandlercontour@storedlabels + \expandafter\pgfplotsplothandlercontourplacelabels\pgfplotsplothandlercontour@storedlabels@\pgfplots@EOI + \endscope + \fi + \fi +}% +\def\pgfplotsplothandlercontour@check@bbcontour{% + \ifpgfplotsplothandlercontour@filled + \if0\pgfplotsplothandlercontour@processed@outer + \pgfplotscoordmath{meta}{if less than} + {\pgfplotsplothandlercontour@act@contour} + {\pgfplotsplothandlercontour@limits@low@meta} + {% + % TRUE! + \pgfplotsplothandlercontour@stream@bbcontour@inbetween + }{}% + \fi + \fi +}% +\def\pgfplotsplothandlercontour@stream@bbcontour@inbetween{% + \def\pgfplotsplothandlercontour@processed@outer{1}% +}% + +\def\pgfplotsplothandlercontour@stream@bbcontour{% +%\message{contour: processing OUTER data limit contour...}% + \def\pgfplotsplothandlercontour@haspendingjump{0}% important + % + % forbid labels: + \let\pgfplotsplothandlercontour@stream@bbcontour@oldlabelsetting=\pgfplotsplothandlercontour@handlesplinesegment + \def\pgfplotsplothandlercontour@handlesplinesegment##1##2##3{}% + % + \let\pgfplots@current@point@meta=\pgfplotsplothandlercontour@limits@low@meta + \pgfplotsplothandlercontour@streampoint{% + \pgfplotsplothandlerpointxyz + \pgfplotsplothandlercontour@limits@low@x + \pgfplotsplothandlercontour@limits@low@y + \pgfplotsplothandlercontour@limits@low@z + }% + \pgfplotsplothandlercontour@streampoint{% + \pgfplotsplothandlerpointxyz + \pgfplotsplothandlercontour@limits@high@x + \pgfplotsplothandlercontour@limits@low@y + \pgfplotsplothandlercontour@limits@low@z + }% + \pgfplotsplothandlercontour@streampoint{% + \pgfplotsplothandlerpointxyz + \pgfplotsplothandlercontour@limits@high@x + \pgfplotsplothandlercontour@limits@high@y + \pgfplotsplothandlercontour@limits@low@z + }% + \pgfplotsplothandlercontour@streampoint{% + \pgfplotsplothandlerpointxyz + \pgfplotsplothandlercontour@limits@low@x + \pgfplotsplothandlercontour@limits@high@y + \pgfplotsplothandlercontour@limits@low@z + }% + \pgfplotsplothandlercontour@streampoint{% + \pgfplotsplothandlerpointxyz + \pgfplotsplothandlercontour@limits@low@x + \pgfplotsplothandlercontour@limits@low@y + \pgfplotsplothandlercontour@limits@low@z + }% + \def\pgfplotsplothandlercontour@processed@outer{1}% + % + % restore labels: + \let\pgfplotsplothandlercontour@handlesplinesegment=\pgfplotsplothandlercontour@stream@bbcontour@oldlabelsetting +}% +\def\pgfplotsplothandlercontourplacelabels#1{% + \def\pgfplots@loc@TMPa{#1}% + \ifx\pgfplots@loc@TMPa\pgfplots@EOI + \else + % + \pgfplotsplothandlercontourplacelabels@act#1\relax + % + \expandafter\pgfplotsplothandlercontourplacelabels + \fi +}% +\def\pgfplotsplothandlercontourplacelabels@act#1,#2;#3,#4;#5\relax{% + \begingroup + \def\pgfplots@current@point@meta{#5}% + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotscolormapdefinemappedcolor{\pgfplotspointmetatransformed}% + % + \pgftransformlineattime{0.5}{\pgfqpoint{#1}{#2}}{\pgfqpoint{#3}{#4}}% + \pgfkeysvalueof{/pgfplots/contour/label node code/.@cmd}#5\pgfeov + \endgroup +}% + +\def\pgfplotsplothandlercontour@streampoint#1{% + \pgf@process{#1}% + % remember point: + \edef\pgfplotsplothandlercontour@act@canvas{\pgf@x=\the\pgf@x\space\pgf@y=\the\pgf@y\space}% + % + \let\pgfplotsplothandlercontour@act@contour=\pgfplots@current@point@meta + \ifx\pgfplotsplothandlercontour@act@contour\pgfutil@empty + % oh. No Z data!? That should not happen! + \pgfplotsplothandlercontour@empty@pointmeta@error + \fi + \ifx\pgfplotsplothandlercontour@lastcontour\pgfutil@empty + % oh. its the very first point. + \def\pgfplotsplothandlercontour@haspendingjump{0}% important! (this is a different case than a jump) + \pgfplotsplothandlercontour@preparenewcontourline + \else + \ifx\pgfplotsplothandlercontour@lastcontour\pgfplotsplothandlercontour@act@contour + % belongs to the same contour. + \if1\pgfplotsplothandlercontour@haspendingjump + \pgfplotsplothandlercontour@finishcontourline + \pgfplotsplothandlercontour@preparenewcontourline + \fi + \else + % oh, a new contour line. + \def\pgfplotsplothandlercontour@haspendingjump{0}% important! (this is a different case than a jump) + \pgfplotsplothandlercontour@finishcontourline + \pgfplotsplothandlercontour@check@bbcontour + \pgfplotsplothandlercontour@preparenewcontourline + \fi + \fi + % + % + % handle difference vector for label placement: + \ifx\pgfplotsplothandlercontour@lastcanvas\pgfutil@empty + \else + \pgfplotsplothandlercontour@handlesplinesegment + {\pgfplotsplothandlercontour@lastcanvas} + {\pgfplotsplothandlercontour@act@canvas}% + {\pgfplotsplothandlercontour@act@contour}% + \fi + % + \pgfplotsplothandlercontour@handler@streampoint{\pgfplotsplothandlercontour@act@canvas}% + \let\pgfplotsplothandlercontour@lastlastcanvas=\pgfplotsplothandlercontour@lastcanvas + \let\pgfplotsplothandlercontour@lastcanvas=\pgfplotsplothandlercontour@act@canvas + \let\pgfplotsplothandlercontour@lastcontour=\pgfplotsplothandlercontour@act@contour + % + \ifpgfplotsplothandlercontour@filled + \t@pgfplots@toka=\expandafter{\expandafter{\pgfplotsplothandlercontour@act@canvas}}% + \expandafter\pgfplotsapplistXpushback\expandafter\pgf@plotstreampoint\the\t@pgfplots@toka + \to\pgfplotsplothandlercontour@stored@lastcontourpath + \fi + % + \ifx\pgf@plotstreampoint\pgfplotsplothandlercontour@streampoint + \else + \let\pgfplotsplothandlercontour@handler@streampoint=\pgf@plotstreampoint + \fi + \global\let\pgf@plotstreampoint=\pgfplotsplothandlercontour@streampoint + \global\let\pgf@plotstreamend=\pgfplotsplothandlercontour@streamend + % ATTENTION : if the low level plot handler introduces extra + % levels of scopes, this *will* fail! +}% + +% +% #1 : source +% #2 : target +% #3 : contour value +\def\pgfplotsplothandlercontour@handlesplinesegment@forlabels#1#2#3{% + #2% + \pgf@xb=\pgf@x + \pgf@yb=\pgf@y + #1% + \pgf@xc=\pgf@x + \pgf@yc=\pgf@y + \pgfpointdiff + {\pgf@x=\pgf@xc \pgf@y=\pgf@yc} + {\pgf@x=\pgf@xb \pgf@y=\pgf@yb}% + \edef\pgfplots@loc@TMPa{{\pgf@sys@tonumber\pgf@x}{\pgf@sys@tonumber\pgf@y}}% + \expandafter\pgfmath@basic@veclen@\pgfplots@loc@TMPa + \pgf@xa=\pgfmathresult pt + % + \advance\pgf@xa by\pgfplotsplothandlercontour@len\relax + \edef\pgfplotsplothandlercontour@len{\the\pgf@xa}% +%\message{contour(\pgfplotsplothandlercontour@act@contour): cur len=\pgfplotsplothandlercontour@len > \pgfplotsplothandlercontour@labeldist ? [segment from #1--#2];}% + \ifdim\pgf@xa>\pgfplotsplothandlercontour@labeldist\relax + \def\pgfplotsplothandlercontour@haslabel{1}% + \edef\pgfplots@loc@TMPa{{\the\pgf@xc,\the\pgf@yc;\the\pgf@xb,\the\pgf@yb;{#3}}}% + \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@loc@TMPa}\to\pgfplotsplothandlercontour@storedlabels + \advance\pgf@xa by-\pgfplotsplothandlercontour@labeldist\relax + \edef\pgfplotsplothandlercontour@len{\the\pgf@xa\relax}% + \fi +}% + + +\def\pgfplotsplothandlercontour@preparenewcontourline{% + \if0\pgfplotsplothandlercontour@haspendingjump +%\message{PREPARE NEW CONTOUR LEVEL (\pgfplots@current@point@meta).}% + % a completely new level has been + % started, not due to jumps inside of one level. + % + % thus, we need to compute 'mapped color': + \pgfplotsaxisvisphasetransformpointmeta + \pgfplotscolormapdefinemappedcolor{\pgfplotspointmetatransformed}% + \pgfsetstrokecolor{\pgfkeysvalueof{/pgfplots/contour/draw color}}% + \ifpgfplotsplothandlercontour@filled + \pgfsetfillcolor{\pgfkeysvalueof{/pgfplots/contour/fill color}}% + \fi + % + % furthermore, we need to handle the 'filled' style: + \ifpgfplotsplothandlercontour@filled + \pgfplotsapplistXlet\pgfplotsplothandlercontour@stored@lastcontourpath@=\pgfplotsplothandlercontour@stored@lastcontourpath + % flush: + \pgfplotsapplistXnewempty\pgfplotsplothandlercontour@stored@lastcontourpath + % + % process it: + \ifx\pgfplotsplothandlercontour@stored@lastcontourpath@\pgfutil@empty + % oh. This here is the very first contour. Nothing to do! + \else + % ok. This here is the i'th contour level, i>0. + % Thus, we have the 'i-1'th contour stored. + % REPLICATE its path to fill the space between the (i-1)'th contour and the i'th one! + \let\pgf@plotstreamstart=\pgfplotsplothandlercontour@handler@start + \pgf@plotstreamstart + \pgfplotsplothandlercontour@stored@lastcontourpath@ + \pgf@plotstreamend + \fi + \fi + \else +%\message{PREPARE NEW CONTOUR for the already begun level \pgfplots@current@point@meta.}% + \ifpgfplotsplothandlercontour@filled + \pgfplotsapplistXpushback\pgf@plotstreamstart\to\pgfplotsplothandlercontour@stored@lastcontourpath + \fi + \fi + % + \let\pgfplotsplothandlercontour@lastcanvas=\pgfutil@empty + \let\pgfplotsplothandlercontour@lastlastcanvas=\pgfutil@empty + \ifpgfplotsplothandlercontour@labels + \def\pgfplotsplothandlercontour@haslabel{0}% + % + % this here means that 20% of labeldist are already there. + % it moves the first label nearer to its start. + \pgf@xa=\pgfplotsplothandlercontour@labeldist\relax + \pgf@xa=0.2\pgf@xa + \edef\pgfplotsplothandlercontour@len{\the\pgf@xa}% + \fi + \def\pgfplotsplothandlercontour@haspendingjump{0}% + % + \pgfplotsplothandlercontour@handler@start + \let\pgfplotsplothandlercontour@handler@end=\pgf@plotstreamend + \let\pgfplotsplothandlercontour@handler@streampoint=\pgf@plotstreampoint +}% +\def\pgfplotsplothandlercontour@finishcontourline{% + \ifpgfplotsplothandlercontour@labels + \if0\pgfplotsplothandlercontour@haslabel + \ifx\pgfplotsplothandlercontour@lastlastcanvas\pgfutil@empty + \else + % force a label: +%\message{FORCING A LABEL for contour \pgfplotsplothandlercontour@lastcontour\space from (\pgfplotsplothandlercontour@lastlastcanvas --\pgfplotsplothandlercontour@lastcanvas)}% + \edef\pgfplotsplothandlercontour@len{\pgfplotsplothandlercontour@labeldist}% + \pgfplotsplothandlercontour@handlesplinesegment + {\pgfplotsplothandlercontour@lastlastcanvas} + {\pgfplotsplothandlercontour@lastcanvas}% + {\pgfplotsplothandlercontour@lastcontour}% + \fi + \fi + \fi + \pgfplotsplothandlercontour@handler@end + % +% \ifpgfplotsplothandlercontour@filled +% \pgfpathclose % FIXME this is, in general, not good enough. +% \fi + \if0\pgfplotsplothandlercontour@haspendingjump +%\message{usepath{} to finalize level \pgfplotsplothandlercontour@lastcontour.}% + % flush paths if the complete contour level is ready. + % do *not* flush paths if we have just a new part of the + % existing contour level. + % + % This makes a difference for the filled contour. + \ifpgfplotsplothandlercontour@filled + \pgfusepath{fill,stroke}% + \else + \pgfusepath{stroke}% + \fi + \else +%\message{usepath{} for level \pgfplotsplothandlercontour@lastcontour.}% + \ifpgfplotsplothandlercontour@filled + \pgfplotsapplistXpushback\pgf@plotstreamend\to\pgfplotsplothandlercontour@stored@lastcontourpath + \fi + \fi +}% + +\def\pgfplotsplothandlercontour@init@limits{% + \def\pgfplotsplothandlercontour@processed@outer{0}% + \let\pgfplotsplothandlercontour@limits@low@meta=\pgfutil@empty + \let\pgfplotsplothandlercontour@limits@low@x=\pgfutil@empty + \let\pgfplotsplothandlercontour@limits@low@y=\pgfutil@empty + \let\pgfplotsplothandlercontour@limits@low@z=\pgfutil@empty + \let\pgfplotsplothandlercontour@limits@high@meta=\pgfutil@empty + \let\pgfplotsplothandlercontour@limits@high@x=\pgfutil@empty + \let\pgfplotsplothandlercontour@limits@high@y=\pgfutil@empty + \let\pgfplotsplothandlercontour@limits@high@z=\pgfutil@empty + % + \pgfkeysgetvalue{/pgfplots/contour/data limits}\pgfplots@loc@TMPa + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \def\pgfplotsplothandlercontour@processed@outer{1}% + \else + \expandafter\pgfplotsplothandlercontour@init@limits@getboundingboxlow\pgfplots@loc@TMPa\pgfplots@EOI + \fi +%\message{contour: I processed data limits to MIN = (\pgfplotsplothandlercontour@limits@low@x,\pgfplotsplothandlercontour@limits@low@y,\pgfplotsplothandlercontour@limits@low@z;\pgfplotsplothandlercontour@limits@low@meta) and MAX = (\pgfplotsplothandlercontour@limits@high@x,\pgfplotsplothandlercontour@limits@high@y,\pgfplotsplothandlercontour@limits@high@z;\pgfplotsplothandlercontour@limits@high@meta).}% +}% +\def\pgfplotsplothandlercontour@init@limits@getboundingboxlow(#1,#2,#3,#4){% + \def\pgfplotsplothandlercontour@init@limits@cur{low}% + \pgfplotsplothandlercontour@init@limits@read(#1,#2,#3,#4)% + \pgfutil@ifnextchar(% + \pgfplotsplothandlercontour@init@limits@getboundingboxhigh + {\pgfplots@error{Sorry, 'data limits=(xmin,ymin,zmin,contourmin) (xmax,ymax,zmax,contourmax)' has been expected, not \pgfkeysvalueof{/pgfplots/contour/data limits}}\pgfplots@gobble@until@EOI}% +}% +\def\pgfplotsplothandlercontour@init@limits@getboundingboxhigh(#1,#2,#3,#4){% + \def\pgfplotsplothandlercontour@init@limits@cur{high}% + \pgfplotsplothandlercontour@init@limits@read(#1,#2,#3,#4)% + \pgfutil@gobble +}% +\def\pgfplotsplothandlercontour@init@limits@read(#1,#2,#3,#4){% + % FIXME : logs and trafos and user interface! + \pgfplotscoordmath{x}{parsenumber}{#1}% + \pgfplotscoordmath{x}{datascaletrafo}\pgfmathresult + \expandafter\let\csname pgfplotsplothandlercontour@limits@\pgfplotsplothandlercontour@init@limits@cur @x\endcsname=\pgfmathresult + % + \pgfplotscoordmath{y}{parsenumber}{#2}% + \pgfplotscoordmath{y}{datascaletrafo}\pgfmathresult + \expandafter\let\csname pgfplotsplothandlercontour@limits@\pgfplotsplothandlercontour@init@limits@cur @y\endcsname=\pgfmathresult + % + \ifpgfplots@curplot@threedim + \pgfplotscoordmath{z}{parsenumber}{#3}% + \pgfplotscoordmath{z}{datascaletrafo}\pgfmathresult + \expandafter\let\csname pgfplotsplothandlercontour@limits@\pgfplotsplothandlercontour@init@limits@cur @z\endcsname=\pgfmathresult + \fi + % + \pgfplotscoordmath{meta}{parsenumber}{#4}% + \expandafter\let\csname pgfplotsplothandlercontour@limits@\pgfplotsplothandlercontour@init@limits@cur @meta\endcsname=\pgfmathresult +}% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% contour external implementation +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\pgfplotsplothandlercontourexternal{% + \pgfplotsresetplothandler + \def\pgfplotsplothandlername{contour external}% + % + \pgfplotsplothandlercontour@prepare@point@meta + % + \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@contourexternal + \def\pgf@plotstreamstart{% + \pgfplotsplothandlercontourprepared + \pgf@plotstreamstart + }% +}% +\gdef\c@pgfplotsplothandlersurveystart@contourexternal@fileno{0}% +\def\pgfplotsplothandlersurveystart@contourexternal{% + % + \pgfkeysgetvalue{/pgfplots/contour external/file}\pgfplotsplothandlercontourexternal@file + % + \ifx\pgfplotsplothandlercontourexternal@file\pgfutil@empty + \pgfutil@ifundefined{pgfactualjobname}{% + \let\pgfplots@loc@TMPa=\jobname + }{% + % be compatible with external lib: + \let\pgfplots@loc@TMPa=\pgfactualjobname + }% + \edef\pgfplotsplothandlercontourexternal@file{\pgfplots@loc@TMPa_contourtmp\c@pgfplotsplothandlersurveystart@contourexternal@fileno}% + \pgfplotsutil@advancestringcounter@global\c@pgfplotsplothandlersurveystart@contourexternal@fileno + \fi + % + \if0\pgfplotsplothandlercontourexternal@scanlinemode + \pgfplotsset{plot to file/scanline marks/false}% + \else + \pgfplotsset{plot to file/scanline marks/if in input}% the choice 'always' is unaware of existing end-of-scanline marks + \fi + \pgfplotsplothandlertofile{\pgfplotsplothandlercontourexternal@file.dat}% + \pgfplotsplothandlersurveystart + \let\pgfplotsplothandlersurveypoint@tofile=\pgfplotsplothandlersurveypoint + \let\pgfplotsplothandlersurveyend@tofile=\pgfplotsplothandlersurveyend + \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@contourexternal + \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@contourexternal +}% +\def\pgfplotsplothandlersurveypoint@contourexternal{% + % temporarily disable updates to point meta limits. They should be + % updated during the contour prepared processing. + \let\pgfplotsplothandlercontourexternal@orig@perpointlimits@limits=\pgfplots@set@perpointmeta@limits + \let\pgfplots@set@perpointmeta@limits=\relax + % + \pgfplotsaxissurveysetpointmeta + \let\pgfplots@current@point@z=\pgfplots@current@point@meta + % + \let\pgfplots@set@perpointmeta@limits=\pgfplotsplothandlercontourexternal@orig@perpointlimits@limits + % +%\message{contour gnuplot: collecting point (\pgfplots@current@point@x,\pgfplots@current@point@y,\pgfplots@current@point@z) [\pgfplots@current@point@meta]...}% + \pgfplotsplothandlersurveypoint@tofile +}% + +{ +\catcode`\`=12 +\catcode`\'=12 +\catcode`\"=12 +\catcode`\|=12 +\catcode`\;=12 +\catcode`\:=12 +\catcode`\#=12 +\gdef\pgfplotsplothandlersurveyend@contourexternal{% + \pgfplotsplothandlersurveyend@tofile + \if2\pgfplotsplothandlercontourexternal@scanlinemode + \if0\pgfplotsplothandlertofilegeneratedscanlinemarks + \pgfplots@error{Sorry, processing the input stream did not lead to end-of-scanline markers; the generated temporary file for 'contour external' does not contain any of them (indicating that matrix structure is lost). To fix this, you have the following options:^^J - Insert end-of-scanline markers into your input data (i.e. empty lines),^^J - provide two of the three options 'mesh/rows=<num matrix rows>, mesh/cols=<num matrix cols>, mesh/num points=<total number points>'}% + \fi + \fi + % + \begingroup + \let\numcoords=\pgfplots@current@point@coordindex% + \pgfplotsautocompletemeshkeys + \def\"{"}% + \def\|{|}% + \def\;{;}% + \def\:{:}% + \def\#{#}% + \def\'{'}% + \def\`{`}% + \edef\ordering{\pgfplots@plot@mesh@ordering}% + \edef\infile{\pgfplotsplothandlercontourexternal@file.dat}% + \edef\outfile{\pgfplotsplothandlercontourexternal@file.table}% + \edef\script{\pgfplotsplothandlercontourexternal@file.\pgfkeysvalueof{/pgfplots/contour external/script extension}}% + \immediate\openout\w@pgf@writea=\script + \immediate\write\w@pgf@writea{\pgfkeysvalueof{/pgfplots/contour external/script}}% + \immediate\closeout\w@pgf@writea + % + \immediate\write18{\pgfkeysvalueof{/pgfplots/contour external/cmd}}% + \endgroup + % + % + \pgfplotsplothandlercontourprepared + \let\pgfplots@coord@stream@start=\relax% has already been done. + \def\pgfplots@coord@stream@end{\pgfplotsplothandlersurveyend}% + \ifpgfplots@curplot@threedim + \pgfplotssetpointmetainput{z}{}% + \else + \pgfplotssetpointmetainput{explicit}{}% + \fi + \pgfplots@addplotimpl@file@streamit{\pgfplotsplothandlercontourexternal@file.table}% + \closein\r@pgfplots@reada +}% +} + + + + + +% the `plot unprocessed to file' plot handler simply copies the input data +% UNPROCESSED to an output file. +% +% I use it as helper tool for `contour gnuplot'. +% +% this cannot be combined with other plot handlers unless the other +% plot handlers controls that explicitly +% +% Immediately after the survey ends, this plot handler will set +% \pgfplotsplothandlertofilegeneratedscanlinemarks to '1' or '0'. +\pgfplotsset{ + plot unprocessed to file/.code={ + \edef\tikz@plot@handler{\noexpand\pgfplotsplothandlertofile{#1}}% + }, + plot to file/scanline marks/.is choice, + plot to file/scanline marks/false/.code={\def\pgfplotsplothandlertofile@scanlinemarks{0}}, + plot to file/scanline marks/if in input/.code={\def\pgfplotsplothandlertofile@scanlinemarks{1}}, + plot to file/scanline marks/always/.code={\def\pgfplotsplothandlertofile@scanlinemarks{2}}, + plot to file/scanline marks/true/.code={\def\pgfplotsplothandlertofile@scanlinemarks{2}}, + plot to file/scanline marks/if in input, + plot to file/col sep/.initial=\pgfplots@TAB, + plot to file/end-of-scanline content/.initial=, +} + +\def\pgfplotsplothandlertofile#1{% + \edef\pgfplotsplothandlertofile@name{#1}% + \pgfplotsresetplothandler + \pgfplotsset{empty line=scanline}% + \let\pgfplotsplothandlersurveystart=\pgfplotsplothandlersurveystart@tofile + \def\pgfplotsplothandlername{plot to file}% + \let\pgfplotsplothandlersurveyend=\pgfplotsplothandlersurveyend@tofile + \let\pgfplotsplothandlersurveypoint=\pgfplotsplothandlersurveypoint@tofile + \let\pgfplotsplothandlernotifyscanlinecomplete=\pgfplotsplothandlernotifyscanlinecomplete@tofile + % + \if1\pgfplotsplothandlertofile@scanlinemarks + % plot to file/scanline marks=if in input + % check if we have mesh input: + \def\pgfplots@loc@TMP@has@mesh@information{0}% + \pgfkeysgetvalue{/pgfplots/mesh/rows}\pgfplots@loc@TMPa + \pgfkeysgetvalue{/pgfplots/mesh/cols}\pgfplots@loc@TMPb + \pgfkeysgetvalue{/pgfplots/mesh/num points}\pgfplots@loc@TMPc + \ifx\pgfplots@loc@TMPa\pgfutil@empty + \ifx\pgfplots@loc@TMPc\pgfutil@empty + \else + % has rows and num points: + \def\pgfplots@loc@TMP@has@mesh@information{1}% + \fi + \else + \ifx\pgfplots@loc@TMPb\pgfutil@empty + \ifx\pgfplots@loc@TMPc\pgfutil@empty + \else + % has cols and num points: + \def\pgfplots@loc@TMP@has@mesh@information{1}% + \fi + \else + % has rows,cols: + \def\pgfplots@loc@TMP@has@mesh@information{1}% + \fi + \fi + \if1\pgfplots@loc@TMP@has@mesh@information + % activate 'plot to file/scanline marks=always + % --> we have the required information! + \def\pgfplotsplothandlertofile@scanlinemarks{2}% + \fi + \fi + % NO \else here! + \if2\pgfplotsplothandlertofile@scanlinemarks + % plot to file/scanline marks=always + \pgfplotsautocompletemeshkeys% + \def\c@pgfplotsplothandlertofile@scanlinelength{0}% + \if\pgfplots@plot@mesh@ordering0% + % ordering = x varies= rowwise -> scanline is cols! + \pgfkeysgetvalue{/pgfplots/mesh/cols}\c@pgfplotsplothandlertofile@expectedscanline + \else + % ordering = y varies = colwise: scanline is rows! + \pgfkeysgetvalue{/pgfplots/mesh/rows}\c@pgfplotsplothandlertofile@expectedscanline + \fi + \fi + \pgfplotsplothandlertofile@scanlinependingfalse + \pgfkeysgetvalue{/pgfplots/plot to file/col sep}\pgfplotsplothandlertofile@colsep + \pgfkeysgetvalue{/pgfplots/plot to file/end-of-scanline content}\pgfplotsplothandlertofile@scanlinemark + % + % + \def\pgfplotsplothandlertofilegeneratedscanlinemarks{0}% +}% +\def\pgfplotsplothandlertofile@scanlinemarks@check{% + \if2\pgfplotsplothandlertofile@scanlinemarks + % plot to file/scanline marks=always + \pgfplotsutil@advancestringcounter\c@pgfplotsplothandlertofile@scanlinelength + \ifnum\c@pgfplotsplothandlertofile@scanlinelength=\c@pgfplotsplothandlertofile@expectedscanline + \def\c@pgfplotsplothandlertofile@scanlinelength{0}% + \pgfplotsplothandlernotifyscanlinecomplete@tofile + \fi + \fi +}% +\newif\ifpgfplotsplothandlertofile@scanlinepending +\def\pgfplotsplothandlernotifyscanlinecomplete@tofile{% + \if0\pgfplotsplothandlertofile@scanlinemarks + \else + \pgfplotsplothandlertofile@scanlinependingtrue + \fi +}% +\def\pgfplotsplothandlersurveypoint@tofile{% + \ifpgfplotsplothandlertofile@scanlinepending + \def\pgfplotsplothandlertofilegeneratedscanlinemarks{1}% + \immediate\write\w@pgf@writea{\pgfplotsplothandlertofile@scanlinemark}% end-of-scanline + \pgfplotsplothandlertofile@scanlinependingfalse + \fi + \pgfplotscoordmath{x}{parsenumber}{\pgfplots@current@point@x}% + \pgfplotscoordmath{x}{tostring}{\pgfmathresult}% + \let\pgfplots@current@point@x=\pgfmathresult + % + \pgfplotscoordmath{y}{parsenumber}{\pgfplots@current@point@y}% + \pgfplotscoordmath{y}{tostring}{\pgfmathresult}% + \let\pgfplots@current@point@y=\pgfmathresult + % + \ifpgfplots@curplot@threedim + \pgfplotscoordmath{z}{parsenumber}{\pgfplots@current@point@z}% + \pgfplotscoordmath{z}{tostring}{\pgfmathresult}% + \let\pgfplots@current@point@z=\pgfmathresult + \fi + % + \pgfplotsaxissurveysetpointmeta + \pgfplotsaxisifhaspointmeta{% + \pgfplotscoordmath{meta}{tostring}{\pgfplots@current@point@meta}% + \let\pgfplots@current@point@meta=\pgfmathresult + }{}% + % + \immediate\write\w@pgf@writea{% + \pgfplots@current@point@x\pgfplotsplothandlertofile@colsep + \pgfplots@current@point@y\pgfplotsplothandlertofile@colsep + \ifpgfplots@curplot@threedim\pgfplots@current@point@z\pgfplotsplothandlertofile@colsep\fi + \pgfplots@current@point@meta + }% + \advance\c@pgfplots@coordindex by1 + \pgfplotsplothandlertofile@scanlinemarks@check +}% +\def\pgfplotsplothandlersurveyend@tofile{% + \immediate\closeout\w@pgf@writea +}% +\def\pgfplotsplothandlersurveystart@tofile{% + \immediate\openout\w@pgf@writea=\pgfplotsplothandlertofile@name\relax +}% + + +\input pgfplotsmeshplothandler.code.tex diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex index 3c3e9dd7f6a..2276f571db9 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsstackedplots.code.tex @@ -46,32 +46,29 @@ % 2. At the beginning and end of each plot, the lists in 1.) are % initialised properly. % -% 3. While plot coordinates are processed, the following methods +% 3.1 While plot coordinates are processed during the survey phase, the following methods % interact with the stacked API: % \pgfplots@stacked@preparepoint@inmacro % -> compute the 'stacked' sum. % This may need to be done with floating point arithmetics because % the data scaling trafo is not yet initialised +% \pgfplots@stacked@rememberzerolevelpoint@for@next@plot +% \pgfplots@stacked@getnextzerolevelpoint % +% +% 3.2 during the final visualization phase, we have % \pgfplots@stacked@finishpoint % -> takes coordinates as they will be given to Tikz. This method is % used to % - communicate zero level coordinates to Tikz % - implement the 'closed paths' option (allows filled stacked plots). % -% \pgfplots@stacked@rememberzerolevelpoint@for@next@plot -% \pgfplots@stacked@getnextzerolevelpoint -% % 4. Zero levels are communicated to Tikz by % \pgfplots@stacked@initzerolevelhandler. This routine initialises an % input stream for Tikz plot handlers which produces a sequence of % zero levels. It is used by [xy]comb and [xy]bar. % % -% REMARK: -% the state of the boolean \ifpgfplots@datascaletrafo@initialised -% determines whether these routines expect and return floating point -% numbers or fixed point numbers. \let\pgfplots@stacked@zerolevelpoint@x=\pgfutil@empty \let\pgfplots@stacked@zerolevelpoint@y=\pgfutil@empty @@ -114,29 +111,25 @@ \let\pgfplots@stacked@closedcycle@impl=\pgfutil@empty \ifpgfplots@stacked@isfirstplot \global\pgfplotslistnewempty\pgfplots@stacked@zerolevellist - \def\pgfplots@stacked@zerolevelpoint@x{0}% - \def\pgfplots@stacked@zerolevelpoint@y{0}% - \def\pgfplots@stacked@zerolevelpoint@z{0}% % only work with float if its really necessary - for % example if the scaling trafo which maps to pgfmath is % not yet initialised. - \ifpgfplots@datascaletrafo@initialised + \ifpgfplots@datascaletrafo@initialised % FIXME : should be '!ifsurvey' + \def\pgfplots@stacked@zerolevelpoint@x{0}% + \def\pgfplots@stacked@zerolevelpoint@y{0}% + \def\pgfplots@stacked@zerolevelpoint@z{0}% \else - \ifpgfplots@xislinear - \pgfmathfloatcreate{0}{0.0}{0}% - \let\pgfplots@stacked@zerolevelpoint@x=\pgfmathresult - \fi - \ifpgfplots@yislinear - \pgfmathfloatcreate{0}{0.0}{0}% - \let\pgfplots@stacked@zerolevelpoint@y=\pgfmathresult - \fi - \ifpgfplots@threedim - \ifpgfplots@zislinear - \pgfmathfloatcreate{0}{0.0}{0}% - \let\pgfplots@stacked@zerolevelpoint@z=\pgfmathresult - \fi - \fi + \pgfplotscoordmath{x}{parsenumber}{0}% + \let\pgfplots@stacked@zerolevelpoint@x=\pgfmathresult + \let\pgfplots@stacked@zerolevelpoint@y=\pgfmathresult + \let\pgfplots@stacked@zerolevelpoint@z=\pgfmathresult + % + \pgfmathfloatcreate{0}{0.0}{0}% + \ifpgfplots@xislinear\else \let\pgfplots@stacked@zerolevelpoint@x=\pgfmathresult \fi + \ifpgfplots@yislinear\else \let\pgfplots@stacked@zerolevelpoint@y=\pgfmathresult \fi + \ifpgfplots@zislinear\else \let\pgfplots@stacked@zerolevelpoint@z=\pgfmathresult \fi \fi + % \def\pgfplots@stacked@getnextzerolevelpoint{}% will remain constant anyway. \else {\globaldefs=1 @@ -259,26 +252,27 @@ % - \pgfplots@current@point@[xyz] are adjusted. \def\pgfplots@stacked@preparepoint@inmacro{% \pgfplots@stacked@getnextzerolevelpoint + % \ifpgfplots@stacked@plus - \let\pgfplots@stacked@op=\pgfmath@basic@add@ + \def\pgfplots@stacked@op{add}% \else - \let\pgfplots@stacked@op=\pgfmath@basic@subtract@ + \def\pgfplots@stacked@op{subtract}% \fi \pgfplots@if{pgfplots@\pgfplots@stacked@dir islinear}{% - \ifpgfplots@datascaletrafo@initialised - \else - \ifpgfplots@stacked@plus - \let\pgfplots@stacked@op=\pgfmathfloatadd@ - \else - \let\pgfplots@stacked@op=\pgfmathfloatsubtract@ - \fi - \fi - }{}% - \edef\pgfplots@loc@TMPa{ - \noexpand\pgfplots@stacked@op - {\csname pgfplots@stacked@zerolevelpoint@\pgfplots@stacked@dir\endcsname}% - {\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}}% - \pgfplots@loc@TMPa + \pgfplotscoordmath{\pgfplots@stacked@dir}{op}{\pgfplots@stacked@op}{% + {\csname pgfplots@stacked@zerolevelpoint@\pgfplots@stacked@dir\endcsname}% + {\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}}% + }{% + % LOG. we need to compute log(zerolevel + current): + \pgfplotscoordmath{\pgfplots@stacked@dir}{exp}{\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}% + \pgfmathfloatparsenumber\pgfmathresult + \expandafter\let\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname=\pgfmathresult + \csname pgfmathfloat\pgfplots@stacked@op @\endcsname + {\csname pgfplots@stacked@zerolevelpoint@\pgfplots@stacked@dir\endcsname}% + {\csname pgfplots@current@point@\pgfplots@stacked@dir\endcsname}% + }% + % + % 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 @@ -289,6 +283,12 @@ \else \pgfplots@stacked@rememberzerolevelpoint@for@next@plot{(\pgfplots@current@point@x,\pgfplots@current@point@y)}% \fi + % + \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 + }% } % This here is a re-implementation of the stored plot processing. @@ -469,16 +469,11 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endgroup % - \ifpgfplots@apply@datatrafo - \def\pgfplots@coord@stream@coord@{% - \pgfplots@apply@data@scaletrafo@to@one@point% - \pgfplots@coord@stream@finalize@currentpt - }% - \else - \def\pgfplots@coord@stream@coord@{% - \pgfplots@coord@stream@finalize@currentpt - }% - \fi + \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. diff --git a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex index 46367c7c43e..de218f8bcb9 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/pgfplotsticks.code.tex @@ -149,7 +149,7 @@ \def\pgfplots@init@scaled@tick@for#1{% \global\def\pgfplots@glob@TMPa{0}% \begingroup - \ifcase\csname pgfplots@scaled@ticks@#1@choice\endcsname + \ifcase\csname pgfplots@scaled@ticks@#1@choice\endcsname\relax % CASE 0 : scaled #1 ticks=false: do nothing here. \or % CASE 1 : scaled #1 ticks=true: @@ -213,9 +213,9 @@ % x-axis tick labels for #1th tick % #1: the axis (x,y or z) % #2: the value -% #3,#4: coordinates for \pgfplotspointonorientedsurfaceab +% #3,#4+#5: arguments for \pgfplotspointonorientedsurfaceabwithbshift % #5: ticknumber -\def\pgfplots@show@ticklabel#1#2(#3,#4)#5{% +\def\pgfplots@show@ticklabel#1#2(#3,#4+#5)#6{% \begingroup% \csname ifpgfplots@#1ticklabel@interval\endcsname % Special case for the INTERVAL feature: @@ -240,18 +240,19 @@ \let\pgfplots@show@ticklabel@coord@y=\pgfmathresult% \let\ticknum=\pgfplots@show@ticklabel@num\relax% \let\tick=\pgfplots@show@ticklabel@tick% - \pgfplots@show@ticklabel@@{#1}{\pgfplotspointonorientedsurfaceab{\pgfplots@show@ticklabel@coord@x}{\pgfplots@show@ticklabel@coord@y}}% + \pgfplots@show@ticklabel@@{#1} + {\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@show@ticklabel@coord@x}{\pgfplots@show@ticklabel@coord@y}{#5}}% \fi \xdef\pgfplots@show@ticklabel@LASTTICK{% \noexpand\def\noexpand\pgfplots@show@ticklabel@tick{\nexttick}% \noexpand\def\noexpand\pgfplots@show@ticklabel@coord@x{\pgfplots@show@ticklabel@coord@x@new}% \noexpand\def\noexpand\pgfplots@show@ticklabel@coord@y{\pgfplots@show@ticklabel@coord@y@new}% - \noexpand\edef\noexpand\pgfplots@show@ticklabel@num{#5}% + \noexpand\edef\noexpand\pgfplots@show@ticklabel@num{#6}% }% \else - \let\ticknum=#5\relax% + \let\ticknum=#6\relax% \pgfplots@show@ticklabel@{#1}{#2}% - \pgfplots@show@ticklabel@@{#1}{\pgfplotspointonorientedsurfaceab{#3}{#4}}% + \pgfplots@show@ticklabel@@{#1}{\pgfplotspointonorientedsurfaceabwithbshift{#3}{#4}{#5}}% \fi \endgroup } @@ -469,7 +470,7 @@ % #2: tick value. \def\pgfplots@show@ticklabel@#1#2{% \csname ifpgfplots@apply@datatrafo@#1\endcsname - \csname pgfplots@inverse@datascaletrafo@#1\endcsname{#2}% + \pgfplotscoordmath{#1}{datascaletrafo inverse}{#2}% \ifcase\csname pgfplots@scaled@ticks@#1@choice\endcsname \or \expandafter\pgfmathfloatshift@\expandafter{\pgfmathresult}{\csname pgfplots@tick@scale@#1\endcsname}% @@ -480,7 +481,12 @@ \or % scaled #1 ticks=manual. Invoke manual tick scaling code: \expandafter\let\expandafter\pgfplots@loc@TMPa\csname pgfplots@tick@scale@#1\endcsname + \begingroup + \pgfkeys{/pgf/fpu=true}% \expandafter\pgfplots@loc@TMPa\expandafter{\pgfmathresult}% + \pgfmath@smuggleone\pgfmathresult + \endgroup + \pgfmathfloatparsenumber\pgfmathresult% \fi % .. and this here provides \tick as fixed point repr: \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}% @@ -590,10 +596,10 @@ }% % Fills the macros -% \pgfplots@tick@beg@a \pgfplots@tick@end@a -% \pgfplots@tick@beg@b \pgfplots@tick@end@b +% \pgfplots@tick@LOWER@b \pgfplots@tick@end@a +% \pgfplots@tick@UPPER@b \pgfplots@tick@end@b % with coordinates such that -% (\pgfplots@tick@beg@a,\pgfplots@tmpa) -- (\pgfplots@tick@end@a,\pgfplots@tmpa) +% (\pgfplots@tick@LOWER@b,\pgfplots@tmpa) -- (\pgfplots@tick@end@a,\pgfplots@tmpa) % produces a correct tick line. % % The '@b' variant is only used in case of \pgfplots@ytickposnum = 0 @@ -602,56 +608,65 @@ % #2 : the current tick width % \def\pgfplots@prepare@tick@offsets@for@#1#2{% + % % FIXME : this stuff was ok for 2D. % For 3D, it works only for the cases of boxed axes or centered % axis lines. \ifcase\csname pgfplots@#1tickposnum\endcsname\relax % both %(\pgfplots@xcoordminTEX-\pgfplots@tick@offset, \pgfplots@tmpa) -- ++( #2, 0pt) - \edef\pgfplots@tick@beg@a{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}% - \pgfmathsubtract@{\pgfplots@tick@beg@a}{\pgfplots@tick@offset}% - \let\pgfplots@tick@beg@a=\pgfmathresult - \pgfmathadd@{\pgfplots@tick@beg@a}{#2}% - \let\pgfplots@tick@end@a=\pgfmathresult + \edef\pgfplots@tick@LOWER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}% % %(\pgfplots@xcoordmaxTEX+\pgfplots@tick@offset, \pgfplots@tmpa) -- ++(-#2, 0pt) - \edef\pgfplots@tick@beg@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}% - \pgfmathadd@{\pgfplots@tick@beg@b}{\pgfplots@tick@offset}% - \let\pgfplots@tick@beg@b=\pgfmathresult - \pgfmathsubtract@{\pgfplots@tick@beg@b}{#2}% - \let\pgfplots@tick@end@b=\pgfmathresult% + \edef\pgfplots@tick@UPPER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}% \or % left % (\pgfplots@xcoordminTEX-\pgfplots@tick@offset, \pgfplots@tmpa) -- ++( #2, 0pt); - \edef\pgfplots@tick@beg@a{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}% - \pgfmathsubtract@{\pgfplots@tick@beg@a}{\pgfplots@tick@offset}% - \let\pgfplots@tick@beg@a=\pgfmathresult - \pgfmathadd@{\pgfplots@tick@beg@a}{#2}% - \let\pgfplots@tick@end@a=\pgfmathresult + \edef\pgfplots@tick@LOWER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}% \or % center % (\pgfplots@ZERO@x -\pgfplots@tick@offset, \pgfplots@tmpa) -- ++( #2, 0pt); - \pgfmathsubtract@{\csname pgfplots@logical@ZERO@\pgfplotspointonorientedsurfaceB \endcsname}{\pgfplots@tick@offset}% - \let\pgfplots@tick@beg@a=\pgfmathresult - \pgfmathadd@{\pgfplots@tick@beg@a}{#2}% - \let\pgfplots@tick@end@a=\pgfmathresult% + \edef\pgfplots@tick@LOWER@b{\csname pgfplots@logical@ZERO@\pgfplotspointonorientedsurfaceB \endcsname}% \or % right % (\pgfplots@xcoordmaxTEX+\pgfplots@tick@offset, \pgfplots@tmpa) -- ++(-#2, 0pt); - \edef\pgfplots@tick@beg@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}% - \pgfmathadd@{\pgfplots@tick@beg@b}{\pgfplots@tick@offset}% - \let\pgfplots@tick@beg@b=\pgfmathresult - \pgfmathsubtract@{\pgfplots@tick@beg@b}{#2}% - \let\pgfplots@tick@end@b=\pgfmathresult% + \edef\pgfplots@tick@UPPER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}% \else % FALL BACK. never used, I guess? % (\pgfplots@xcoordminTEX-\pgfplots@tick@offset, \pgfplots@tmpa) -- ++( #2, 0pt); - \edef\pgfplots@tick@beg@a{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}% - \pgfmathsubtract@{\pgfplots@tick@beg@a}{\pgfplots@tick@offset}% - \let\pgfplots@tick@beg@a=\pgfmathresult - \pgfmathadd@{\pgfplots@tick@beg@a}{#2}% - \let\pgfplots@tick@end@a=\pgfmathresult + \edef\pgfplots@tick@LOWER@b{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}% \fi + % + \ifcase\csname pgfplots@#1tickalignnum\endcsname\relax + \def\pgfplots@tick@offset{0}% + \or + \edef\pgfplots@tick@offset{#2}% + \or + \pgfmathmultiply@{0.5}{#2}% + \let\pgfplots@tick@offset=\pgfmathresult% + \fi + % + \edef\pgfplots@tick@LOWER@shiftbeg{-\pgfplots@tick@offset}% + \pgfmathadd@{\pgfplots@tick@LOWER@shiftbeg}{#2}% + \let\pgfplots@tick@LOWER@shiftend=\pgfmathresult + % + \edef\pgfplots@tick@UPPER@shiftbeg{\pgfplots@tick@offset}% + \pgfmathsubtract@{\pgfplots@tick@UPPER@shiftbeg}{#2}% + \let\pgfplots@tick@UPPER@shiftend=\pgfmathresult + % + % Assemble the \pgfplots@drawticklines@for@placecomputedtick + % command. + \def\pgfplots@drawticklines@for@placecomputedtick{% + \if\pgfplots@drawticklines@for@placecomputedtick@LOWEROK1% + \pgfpathmoveto{\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@curtickpos}{\pgfplots@tick@LOWER@b}{\pgfplots@tick@LOWER@shiftbeg pt}}% + \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@curtickpos}{\pgfplots@tick@LOWER@b}{\pgfplots@tick@LOWER@shiftend pt}}% + \fi + \if\pgfplots@drawticklines@for@placecomputedtick@UPPEROK1% + \pgfpathmoveto{\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@curtickpos}{\pgfplots@tick@UPPER@b}{\pgfplots@tick@UPPER@shiftbeg pt}}% + \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\pgfplots@curtickpos}{\pgfplots@tick@UPPER@b}{\pgfplots@tick@UPPER@shiftend pt}}% + \fi + }% +%\message{place computed tick: LOWEROK=\pgfplots@drawticklines@for@placecomputedtick@LOWEROK; UPPEROK=\pgfplots@drawticklines@for@placecomputedtick@UPPEROK.}% }% @@ -771,11 +786,17 @@ \def\pgfplots@scaled@ticks@z@choice{0}% \csname pgfplots@#1minorticksfalse\endcsname \csname pgfplots@#1minorgridsfalse\endcsname + \expandafter\let\expandafter\pgfplots@ticklabel@pos@orig\csname pgfplots@#1ticklabel@pos\endcsname% \expandafter\let\expandafter\axis@TMP\csname pgfplots@extra@#1ticklabel\endcsname \expandafter\let\csname pgfplots@#1ticklabel\endcsname=\axis@TMP % \pgfplotsset{/pgfplots/every extra #1 tick}% % use a scope here such that line width and draw color can be set. \scope[/pgfplots/.cd,/pgfplots/every extra #1 tick] + \expandafter\let\expandafter\pgfplots@ticklabel@pos@\csname pgfplots@#1ticklabel@pos\endcsname + \ifx\pgfplots@ticklabel@pos@\pgfplots@ticklabel@pos@orig + \else + \pgfplots@init@ticklabelaxisspec + \fi \pgfplots@prepare@tick@coordlists@for{#1}{#2}% \pgfplots@drawgridlines@onorientedsurf% \pgfplots@drawticklines@onorientedsurf% @@ -789,8 +810,8 @@ % and % \pgfplots@prepared@tick@positions@minor@x. % -% The major tick list contains tuples (canvas position,logical position) -% while the minor tick list contains just the canvas position. +% Both lists contain entries of the form {<index>}{<logical position>} +% @see \pgfplots@prepared@tick@pos@unpack % % #1: the axis % #2: the tick list. @@ -814,16 +835,10 @@ % of \foreach statements. And, yes: I have also added a TeX group % on my own (but that's not the problem). \global\pgfplotslistnewempty\pgfplots@prepared@tick@positions@major - \global\pgfplotslistnewempty\pgfplots@prepared@tick@positions@major@tickindices + %\global\pgfplotslistnewempty\pgfplots@prepared@tick@positions@major@tickindices \global\pgfplotslistnewempty\pgfplots@prepared@tick@positions@minor % - \afterassignment\pgfplots@gobble@until@relax - \pgfplots@tmpa=\pgfkeysvalueof{/pgfplots/#1tick placement tolerance}pt\relax - \pgfplots@tmpa=\csname pgfplots@#1@inverseveclength\endcsname\pgfplots@tmpa - \edef\pgfplots@loc@tick@placement@tolerance{\the\pgfplots@tmpa}% - % - \advance\csname pgfplots@#1min@reg\endcsname by-\pgfplots@tmpa - \advance\csname pgfplots@#1max@reg\endcsname by\pgfplots@tmpa + \pgfplots@prepare@tick@coordlists@for@handletolerance#1% % \edef\pgfplots@loc@TMPa{#2}% \ifx\pgfplots@loc@TMPa\pgfutil@empty @@ -837,9 +852,15 @@ \pgfplots@needsminorloopfalse \fi \fi + \pgfkeysgetvalue{/pgfplots/minor #1tick}\pgfplots@minor@tick@list + \ifx\pgfplots@minor@tick@list\pgfutil@empty + \else + \pgfplots@needsminorloopfalse + \fi + % \ifpgfplots@needsminorloop \ifpgfplots@islinear - \expandafter\let\expandafter\pgfplots@minor@tick@num\csname pgfplots@minor@#1tick@num\endcsname + \pgfkeysgetvalue{/pgfplots/minor #1 tick num}\pgfplots@minor@tick@num \begingroup \c@pgf@counta=\pgfplots@minor@tick@num\relax \advance\c@pgf@counta by1\relax @@ -860,18 +881,14 @@ \else \expandafter\def\expandafter\pgfplots@checktickminmax\expandafter{% \pgfplots@checktickminmax - \ifdim\pgfplots@tmpa<\csname pgfplots@#1tickmin\endcsname pt - \pgfplots@tickshowfalse - \fi + \pgfplots@prepare@tick@coordlists@for@checktickmin#1% }% \fi \expandafter\ifx\csname pgfplots@#1tickmax\endcsname\pgfutil@empty \else \expandafter\def\expandafter\pgfplots@checktickminmax\expandafter{% \pgfplots@checktickminmax - \ifdim\pgfplots@tmpa>\csname pgfplots@#1tickmax\endcsname pt - \pgfplots@tickshowfalse - \fi + \pgfplots@prepare@tick@coordlists@for@checktickmax#1% }% \fi % @@ -880,47 +897,39 @@ \foreach \x in {#2} {% \let\pgfplots@ticknum=\pgfplots@glob@TMPa % - \pgfplots@tmpa=\x pt % + \pgfplots@prepare@tick@coordlists@for@assign\pgfplots@tmpa=\x \csname pgfplots@#1tick@check@tickshow\endcsname + \pgfplots@prepare@tick@coordlists@for@checkdatalimits#1% \pgfplots@checktickminmax % \ifpgfplots@tickshow - \ifdim\pgfplots@tmpa<\csname pgfplots@#1min@reg\endcsname - \else - \ifdim\pgfplots@tmpa>\csname pgfplots@#1max@reg\endcsname - \else - \expandafter\pgfplotslistpushbackglobal\x\to\pgfplots@prepared@tick@positions@major - \expandafter\pgfplotslistpushbackglobal\pgfplots@ticknum\to\pgfplots@prepared@tick@positions@major@tickindices - \fi - \fi + \edef\x{{\pgfplots@ticknum}{\x}}% + \expandafter\pgfplotslistpushbackglobal\x\to\pgfplots@prepared@tick@positions@major + %\expandafter\pgfplotslistpushbackglobal\pgfplots@ticknum\to\pgfplots@prepared@tick@positions@major@tickindices \fi % X-Axis ticks bottom and top - % in log: - % log( i*10^k ) = log\pgfplots@i + k\log10 -> draw ticks for i=1..9 \ifpgfplots@needsminorloop + % SEE BELOW for the 'minor #1tick' feature -- it has a + % separate loop. \foreach \pgfplots@i in {1,...,\pgfplots@minor@tick@num} {% - \begingroup \ifpgfplots@islinear - \pgfplots@tmpa=\pgfplots@minor@tick@dist pt % - \pgfplots@tmpa=\pgfplots@i\pgfplots@tmpa + \pgfmathmultiply@{\pgfplots@i}{\pgfplots@minor@tick@dist}% \else - \pgfplots@tmpa=\csname pgfplotsmathlogi@#1\endcsname\pgfplots@i pt % + % in log: + % log( i*10^k ) = log\pgfplots@i + k\log10 -> draw ticks for i=1..9 + \pgfplotscoordmath{#1}{log unsigned int}{\pgfplots@i}% + \pgfplotscoordmath{#1}{tofixed}{\pgfmathresult}% \fi - \edef\pgfmathresult{\the\pgfplots@tmpa}% - \pgfmath@smuggleone\pgfmathresult - \endgroup - \advance\pgfplots@tmpa by\pgfmathresult\relax + \pgfplots@prepare@tick@coordlists@for@advance\pgfplots@tmpa by\pgfmathresult \pgfplots@tickshowtrue + \pgfplots@prepare@tick@coordlists@for@checkdatalimits#1% \pgfplots@checktickminmax \ifpgfplots@tickshow - \ifdim\pgfplots@tmpa<\csname pgfplots@#1min@reg\endcsname - \else - \ifdim\pgfplots@tmpa>\csname pgfplots@#1max@reg\endcsname - \else - \edef\pgfmathresult{\pgf@sys@tonumber{\pgfplots@tmpa}}% - \expandafter\pgfplotslistpushbackglobal\pgfmathresult\to\pgfplots@prepared@tick@positions@minor - \fi - \fi + \pgfplots@prepare@tick@coordlists@for@tofixed\pgfplots@tmpa + \c@pgf@counta=\pgfplots@ticknum\relax + \advance\c@pgf@counta by\pgfplots@i\relax + \edef\x{{\the\c@pgf@counta}{\pgfmathresult}}% + \expandafter\pgfplotslistpushbackglobal\x\to\pgfplots@prepared@tick@positions@minor \fi }% \fi @@ -928,16 +937,99 @@ % carry \ticknum outside of this scope: \global\let\pgfplots@glob@TMPa=\pgfplots@ticknum }% + % + \ifx\pgfplots@minor@tick@list\pgfutil@empty + \else + % handle the 'minor #1tick' feature: + \def\pgfplots@loc@TMPa{\foreach \x in }% + \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@minor@tick@list} {% + \let\pgfplots@ticknum=\pgfplots@glob@TMPa + % + \pgfplots@prepare@tick@coordlists@for@assign\pgfplots@tmpa=\x + \pgfplots@tickshowtrue + \pgfplots@prepare@tick@coordlists@for@checkdatalimits#1% + \pgfplots@checktickminmax + \ifpgfplots@tickshow + \edef\x{{\pgfplots@ticknum}{\x}}% + \expandafter\pgfplotslistpushbackglobal\x\to\pgfplots@prepared@tick@positions@minor + \fi + \pgfplotsutil@advancestringcounter\pgfplots@ticknum + % carry \ticknum outside of this scope: + \global\let\pgfplots@glob@TMPa=\pgfplots@ticknum + }% + \fi \fi \endgroup \expandafter\let\csname pgfplots@prepared@tick@positions@minor@#1\endcsname=\pgfplots@prepared@tick@positions@minor \expandafter\let\csname pgfplots@prepared@tick@positions@major@#1\endcsname=\pgfplots@prepared@tick@positions@major - \expandafter\let\csname pgfplots@prepared@tick@positions@major@tickindices@#1\endcsname=\pgfplots@prepared@tick@positions@major@tickindices + %\expandafter\let\csname pgfplots@prepared@tick@positions@major@tickindices@#1\endcsname=\pgfplots@prepared@tick@positions@major@tickindices \global\let\pgfplots@prepared@tick@positions@major=\relax - \global\let\pgfplots@prepared@tick@positions@major@tickindices=\relax + %\global\let\pgfplots@prepared@tick@positions@major@tickindices=\relax \global\let\pgfplots@prepared@tick@positions@minor=\relax }% +% The following set of macros can be used to replace the TeX register +% arithmetics used to speed up the computations inside of +% \pgfplots@prepare@tick@coordlists@for by something different. +% +% FIXME : that is no clean programming! Perhaps a new math class +% should be used here, and implemented during the complete tick +% preparation!? +% +% Keep in mind that these tick positions are in "transformed +% range", i.e. they are expected to be in the range -16000...16000. At +% the time of this modification, only the smithchart lib needs special +% handling here... does this justify a re-design? +\def\pgfplots@prepare@tick@coordlists@for@assign#1=#2{% + #1=#2pt +}% +\def\pgfplots@prepare@tick@coordlists@for@advance#1by#2{% + \advance#1 by#2 pt % +}% +\def\pgfplots@prepare@tick@coordlists@for@tofixed#1{% + \edef\pgfmathresult{\pgf@sys@tonumber{#1}}% +}% +\def\pgfplots@prepare@tick@coordlists@for@handletolerance#1{% + \afterassignment\pgfplots@gobble@until@relax + \pgfplots@tmpa=\pgfkeysvalueof{/pgfplots/#1tick placement tolerance}pt\relax + \pgfplots@tmpa=\csname pgfplots@#1@inverseveclength\endcsname\pgfplots@tmpa + \edef\pgfplots@loc@tick@placement@tolerance{\the\pgfplots@tmpa}% + % + \advance\csname pgfplots@#1min@reg\endcsname by-\pgfplots@tmpa + \advance\csname pgfplots@#1max@reg\endcsname by\pgfplots@tmpa +}% +\def\pgfplots@prepare@tick@coordlists@for@checktickmin#1{% + \ifdim\pgfplots@tmpa<\csname pgfplots@#1tickmin\endcsname pt + \pgfplots@tickshowfalse + \fi +}% +\def\pgfplots@prepare@tick@coordlists@for@checktickmax#1{% + \ifdim\pgfplots@tmpa>\csname pgfplots@#1tickmax\endcsname pt + \pgfplots@tickshowfalse + \fi +}% +\def\pgfplots@prepare@tick@coordlists@for@checkdatalimits#1{% + \ifdim\pgfplots@tmpa<\csname pgfplots@#1min@reg\endcsname + \pgfplots@tickshowfalse + \else + \ifdim\pgfplots@tmpa>\csname pgfplots@#1max@reg\endcsname + \pgfplots@tickshowfalse + \fi + \fi +}% + +% Unpacks entries of the \pgfplots@prepared@tick@positions@* lists. +% +% Defines \pgfplots@tick to be the actual tick position and +% \pgfplots@ticknum to be its index. +% +% Usage: +% \expandafter\pgfplots@prepared@tick@pos@unpack\entry +\def\pgfplots@prepared@tick@pos@unpack#1#2{% + \def\pgfplots@tick{#2}% + \def\pgfplots@ticknum{#1}% +} + % Draws grid lines at the a-positions of the currently set oriented % surface. % @@ -965,7 +1057,7 @@ \pgfplots@if{pgfplots@#1minorgrids}{\pgfplots@loop@CONTINUEtrue}{}% \ifpgfplots@loop@CONTINUE \scope - \pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf#1 + \pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf#1% % \pgfplots@if{pgfplots@#1minorgrids}{% \draw[% @@ -975,8 +1067,8 @@ /pgfplots/every minor #1 grid]% \pgfextra \pgfplotslistforeach\pgfplots@prepared@tick@positions@minor@\as\pgfplots@curgridpos{% - \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{\pgfplots@curgridpos}{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}}% - \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\pgfplots@curgridpos}{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}}% + \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curgridpos + \pgfplots@drawgridlines@onorientedsurf@fromto\pgfplots@tick }% \endpgfextra; }{}% @@ -989,8 +1081,8 @@ /pgfplots/every major #1 grid]% \pgfextra \pgfplotslistforeach\pgfplots@prepared@tick@positions@major@\as\pgfplots@curgridpos{% - \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{\pgfplots@curgridpos}{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}}% - \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\pgfplots@curgridpos}{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}}% + \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curgridpos + \pgfplots@drawgridlines@onorientedsurf@fromto\pgfplots@tick }% \endpgfextra; }{}% @@ -1002,6 +1094,16 @@ }% } +% Should draw a single grid line on the actual oriented surface. +% #1 the value of the grid line. +% +% PRECONDITION +% \pgfplots@ticknum contains the index of the current tick. +\def\pgfplots@drawgridlines@onorientedsurf@fromto#1{% + \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}}% + \pgfpathlineto{\pgfplotspointonorientedsurfaceab{#1}{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}}% +}% + % Draws ticks on the currently active "oriented surface". % % The oriented surface is two dimensional and has been initialised @@ -1040,26 +1142,27 @@ \expandafter\pgfplots@drawticklines@onorientedsurf@\pgfplotspointonorientedsurfaceA }% +\def\pgfplots@drawticklines@INSTALLCLIP@onorientedsurf#1{% + \pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf{#1}% +}% +\def\pgfplots@drawgridlines@INSTALLCLIP@onorientedsurf#1{% + \pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf{#1}% +}% % Avoids tick lines which are too thick by introducing a clipping % region. Tick lines (and grid lines) won't extend to the left or % right of axis #1. \def\pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf#1{% \pgfinterruptboundingbox% \begingroup - \pgf@xa=5cm - \edef\pgfplots@loc@TMPc{\pgf@sys@tonumber{\pgf@xa}}% % the case ||e_b|| == 0 should never happen here! Should be % caught before entering this routine. - \pgfmathmultiply@{\pgfplots@loc@TMPc}{\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname}% \let\pgfplots@loc@LENGTH=\pgfmathresult - \pgfmathsubtract@{\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname}{\pgfplots@loc@LENGTH}% - \let\pgfplots@loc@MIN=\pgfmathresult - \pgfmathadd@{\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname}{\pgfplots@loc@LENGTH}% - \let\pgfplots@loc@MAX=\pgfmathresult - \pgfpathmoveto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1min\endcsname}{\pgfplots@loc@MIN}}% - \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1max\endcsname}{\pgfplots@loc@MIN}}% - \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1max\endcsname}{\pgfplots@loc@MAX}}% - \pgfpathlineto{\pgfplotspointonorientedsurfaceab{\csname pgfplots@#1min\endcsname}{\pgfplots@loc@MAX}}% + \expandafter\let\expandafter\pgfplots@loc@MIN\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname + \expandafter\let\expandafter\pgfplots@loc@MAX\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname + \pgfpathmoveto{\pgfplotspointonorientedsurfaceabwithbshift{\csname pgfplots@#1min\endcsname}{\pgfplots@loc@MIN}{-5cm}}% + \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\csname pgfplots@#1max\endcsname}{\pgfplots@loc@MIN}{-5cm}}% + \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\csname pgfplots@#1max\endcsname}{\pgfplots@loc@MAX}{5cm}}% + \pgfpathlineto{\pgfplotspointonorientedsurfaceabwithbshift{\csname pgfplots@#1min\endcsname}{\pgfplots@loc@MAX}{5cm}}% \pgfusepath{clip}% \endgroup \endpgfinterruptboundingbox% @@ -1112,24 +1215,9 @@ % never used? \def\pgfplots@drawticklines@for@placecomputedtick@UPPEROK{0}% \fi - \begingroup - % Assemble the \pgfplots@drawticklines@for@placecomputedtick - % command. - \let\E=\noexpand - \xdef\pgfplots@drawticklines@for@placecomputedtick{% - \if\pgfplots@drawticklines@for@placecomputedtick@LOWEROK1% - \E\pgfpathmoveto{\E\pgfplotspointonorientedsurfaceab{\E\pgfplots@curtickpos}{\E\pgfplots@tick@beg@a}}% - \E\pgfpathlineto{\E\pgfplotspointonorientedsurfaceab{\E\pgfplots@curtickpos}{\E\pgfplots@tick@end@a}}% - \fi - \if\pgfplots@drawticklines@for@placecomputedtick@UPPEROK1% - \E\pgfpathmoveto{\E\pgfplotspointonorientedsurfaceab{\E\pgfplots@curtickpos}{\E\pgfplots@tick@beg@b}}% - \E\pgfpathlineto{\E\pgfplotspointonorientedsurfaceab{\E\pgfplots@curtickpos}{\E\pgfplots@tick@end@b}}% - \fi - }% - \endgroup \expandafter\let\expandafter\pgfplots@prepared@tick@positions@major@\csname pgfplots@prepared@tick@positions@major@#1\endcsname \expandafter\let\expandafter\pgfplots@prepared@tick@positions@minor@\csname pgfplots@prepared@tick@positions@minor@#1\endcsname - \pgfplots@drawtickgridlines@INSTALLCLIP@onorientedsurf#1 + \pgfplots@drawticklines@INSTALLCLIP@onorientedsurf#1 % \pgfplots@if{pgfplots@#1minorticks}{% \draw[% @@ -1140,19 +1228,13 @@ \pgfextra \pgfmathparse{\pgfplots@subtickwidth}% \let\pgfplots@subtickwidth@=\pgfmathresult - \pgfmathmultiply@{\pgfplots@subtickwidth@}{\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname}% \let\pgfplots@subtickwidth@=\pgfmathresult \let\pgfplots@subtickwidth=\pgfmathresult - \ifcase\csname pgfplots@#1tickalignnum\endcsname\relax - \def\pgfplots@tick@offset{0}% - \or - \let\pgfplots@tick@offset=\pgfplots@subtickwidth@% - \or - \pgfmathmultiply@{0.5}{\pgfplots@subtickwidth@}% - \let\pgfplots@tick@offset=\pgfmathresult% - \fi \pgfplots@prepare@tick@offsets@for@{#1}{\pgfplots@subtickwidth@}% \pgfplotslistforeach\pgfplots@prepared@tick@positions@minor@\as\pgfplots@curtickpos{% + \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curtickpos + \let\pgfplots@curtickpos=\pgfplots@tick + \pgfplotspointouternormalvectorofaxissetv{}{\pgfplots@curtickpos}% \pgfplots@drawticklines@for@placecomputedtick }% \endpgfextra; @@ -1167,19 +1249,13 @@ \pgfextra \pgfmathparse{\pgfplots@tickwidth}% \let\pgfplots@tickwidth@=\pgfmathresult - \pgfmathmultiply@{\pgfplots@tickwidth@}{\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname}% \let\pgfplots@tickwidth@=\pgfmathresult \let\pgfplots@tickwidth=\pgfmathresult - \ifcase\csname pgfplots@#1tickalignnum\endcsname\relax - \def\pgfplots@tick@offset{0}% - \or - \let\pgfplots@tick@offset=\pgfplots@tickwidth@% - \or - \pgfmathmultiply@{0.5}{\pgfplots@tickwidth@}% - \let\pgfplots@tick@offset=\pgfmathresult% - \fi \pgfplots@prepare@tick@offsets@for@{#1}{\pgfplots@tickwidth@}% \pgfplotslistforeach\pgfplots@prepared@tick@positions@major@\as\pgfplots@curtickpos{% + \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curtickpos + \let\pgfplots@curtickpos=\pgfplots@tick + \pgfplotspointouternormalvectorofaxissetv{}{\pgfplots@curtickpos}% \pgfplots@drawticklines@for@placecomputedtick }% \endpgfextra; @@ -1263,7 +1339,7 @@ \fi \let\pgfplots@tick@offset=\pgfmathresult \pgfplots@ticklabel@maxtickdimen@extrashift{#1}{\pgfplots@tick@offset}% - \pgfmathmultiply@{\pgfplots@tick@offset}{\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname}% + %\pgfmathmultiply@{\pgfplots@tick@offset}{\csname pgfplots@\pgfplotspointonorientedsurfaceB @inverseveclength\endcsname}% \let\pgfplots@tick@offset=\pgfmathresult }% % @@ -1277,38 +1353,50 @@ \pgfmathmultiply{-1}{\pgfplots@tick@offset}% \let\pgfplots@tick@offset=\pgfmathresult \fi - \pgfmathsubtract@{\pgfplots@tick@origin}{\pgfplots@tick@offset}% + \edef\pgfplots@tick@offset{-\pgfplots@tick@offset}% + %\pgfmathsubtract@{\pgfplots@tick@origin}{\pgfplots@tick@offset}% \else \if0\pgfplots@ticklabelside \expandafter\let\expandafter\pgfplots@tick@origin\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname% \pgfplots@tickposchoiceb - \pgfmathsubtract@{\pgfplots@tick@origin}{\pgfplots@tick@offset}% + %\pgfmathsubtract@{\pgfplots@tick@origin}{\pgfplots@tick@offset}% + \edef\pgfplots@tick@offset{-\pgfplots@tick@offset}% \else \if1\pgfplots@ticklabelside \expandafter\let\expandafter\pgfplots@tick@origin\csname pgfplots@\pgfplotspointonorientedsurfaceB max\endcsname% \pgfplots@tickposchoicea - \pgfmathadd@{\pgfplots@tick@origin}{\pgfplots@tick@offset}% + %\pgfmathadd@{\pgfplots@tick@origin}{\pgfplots@tick@offset}% \else - % Should never happen. - \pgfplots@error{Internal logic error during tick label placement (got placement character '\pgfplots@ticklabelside'). - Please report this as a bug or verify your input arguments to #1ticklabel pos.}% - \expandafter\let\expandafter\pgfplots@tick@origin\csname pgfplots@\pgfplotspointonorientedsurfaceB min\endcsname% + \expandafter\let\expandafter\pgfplots@tick@origin\csname pgfplots@logical@ZERO@\pgfplotspointonorientedsurfaceB\endcsname% + % FIXME : is that correct!? \pgfplots@tickposchoiceb - \pgfmathsubtract@{\pgfplots@tick@origin}{\pgfplots@tick@offset}% + %\pgfmathsubtract@{\pgfplots@tick@origin}{\pgfplots@tick@offset}% + %\edef\pgfplots@tick@offset{-\pgfplots@tick@offset}% + % + \if2\pgfplots@ticklabelside + \else + % Should never happen. + \pgfplots@error{Internal logic error during tick label placement (got placement character '\pgfplots@ticklabelside'). + Please report this as a bug or verify your input arguments to #1ticklabel pos.}% + \fi \fi \fi \fi + %\let\pgfplots@tick@origin=\pgfmathresult% + \edef\pgfplots@tick@offset{\pgfplots@tick@offset pt}% % % make sure the \pgfmathlogtologten method works even for % non-standard 'log basis #1': - \expandafter\let\expandafter\pgfmathlogtologten@\csname pgfplotsmathlogtologten@#1@\endcsname + \def\pgfmathlogtologten@{\pgfplotscoordmath{#1}{log to log 10}}% % - \let\pgfplots@tick@origin=\pgfmathresult% \xdef\pgfplots@show@ticklabel@LASTTICK{}% \pgfplotslistforeachungrouped\pgfplots@prepared@tick@positions@major@\as\pgfplots@curtickpos{% - \expandafter\pgfplotslistpopfront\csname pgfplots@prepared@tick@positions@major@tickindices@#1\endcsname\to\pgfplots@ticknum + \expandafter\pgfplots@prepared@tick@pos@unpack\pgfplots@curtickpos + \let\pgfplots@curtickpos=\pgfplots@tick + %\expandafter\pgfplotslistpopfront\csname pgfplots@prepared@tick@positions@major@tickindices@#1\endcsname\to\pgfplots@ticknum + \pgfplotspointouternormalvectorofaxissetv{}{\pgfplots@curtickpos}% \pgfplots@show@ticklabel - {#1}{\pgfplots@curtickpos}(\pgfplots@curtickpos,\pgfplots@tick@origin)% + {#1}{\pgfplots@curtickpos}(\pgfplots@curtickpos,\pgfplots@tick@origin+\pgfplots@tick@offset)% {\pgfplots@ticknum}% }% \pgfplots@ticklabel@maxtickdimen@finish{#1}% @@ -1394,9 +1482,21 @@ \let\pgfplots@loc@TMPc=\pgfmathresult \ifx\pgfplots@loc@TMPc\pgfutil@empty \else - \pgftransformshift{% - \pgfplotspointouternormalvectorofticklabelaxis{#1}% - \pgfqpointscale{-\pgfplots@loc@TMPc}{}% + \pgfplotspointouternormalvectorofaxis@ifdependson@v{\pgfplotsticklabelaxisspec{#1}}{% + \tikzset{every node/.append code={% + \tikz@addtransform{% + \pgftransformshift{% + \pgfplotspointouternormalvectorofticklabelaxis{#1}% + \pgfqpointscale{-\pgfplots@loc@TMPc}{}% + }% + }% + }% + }% + }{% + \pgftransformshift{% + \pgfplotspointouternormalvectorofticklabelaxis{#1}% + \pgfqpointscale{-\pgfplots@loc@TMPc}{}% + }% }% \fi % @@ -1520,7 +1620,8 @@ \def\pgfplots@compute@tick@times@logten#1\to#2#3{% \global\let#2=\pgfutil@empty \foreach \pgfplots@loc@TMPb in {#1} {% - \pgfmathmultiply@{\pgfplots@loc@TMPb}{\csname pgfplots@log@scale@todisplaylog@#3\endcsname}% + \pgfplotscoordmath{#3}{log to display log}{\pgfplots@loc@TMPb}% + \pgfplotscoordmath{#3}{tofixed}{\pgfmathresult}% \ifx#2\pgfutil@empty \xdef#2{\pgfmathresult}% \else @@ -1611,8 +1712,6 @@ % Shortcut-names: \expandafter\let\expandafter\ifpgfplots@is@datascaled\csname ifpgfplots@apply@datatrafo@#1\endcsname % Attention here: use UNSHIFTET scalings, see remark above - \expandafter\let\expandafter\pgfplots@data@scale@trafo\csname pgfplots@datascaletrafo@#1@noshift\endcsname - \expandafter\let\expandafter\pgfplots@data@scale@inverse@trafo\csname pgfplots@inverse@datascaletrafo@#1@noshift\endcsname \expandafter\let\expandafter\ifpgfplots@cur@is@linear\csname ifpgfplots@#1islinear\endcsname % \let\desirednumticks=\c@pgf@countd @@ -1639,6 +1738,18 @@ \expandafter\let\csname pgfplots@#1tick\endcsname=\pgfplots@glob@TMPa \fi \fi + \ifpgfplots@cur@is@linear + \else + \pgfplotscoordmath{#1}{parsenumber}{1}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplotscoordmath{#1}{log from display log}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{tofixed}{\pgfmathresult}% + \let\pgfplots@loc@log@from@display@log@scale=\pgfmathresult + % + \pgfplotscoordmath{#1}{log to display log}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{#1}{tofixed}{\pgfmathresult}% + \let\pgfplots@loc@log@to@display@log@scale=\pgfmathresult + \fi % \expandafter\ifx\csname pgfplots@#1tick\endcsname\pgfutil@empty % Ok, we have either log or linear axis and need default @@ -1648,12 +1759,13 @@ \let\MAX=\pgf@ya \let\MIN=\pgf@yb % compute step size 'H': - \expandafter\MAX\csname pgfplots@#1max\endcsname pt % + \MAX=\csname pgfplots@#1max\endcsname pt % \advance\MAX by0.001pt % avoid round errors %\expandafter\MIN\the\c@pgf@counta pt - \expandafter\MIN\csname pgfplots@#1min\endcsname pt % + \MIN=\csname pgfplots@#1min\endcsname pt % \H=\MAX \advance\H by-\MIN + \ifdim\H<0pt \H=-1\H \fi %\message{Axis limit #1: [\the\MIN:\the\MAX], diff = \the\H.}% \c@pgf@counta=\desirednumticks \advance\c@pgf@counta by-1 % @@ -1666,40 +1778,18 @@ % CASE LINEAR AXIS \ifpgfplots@is@datascaled % This here works if the scaling trafo is linear. - \expandafter\pgfplots@data@scale@inverse@trafo\expandafter{\Hmacro}% + \pgfplotscoordmath{#1}{datascaletrafo noshift inverse}{\Hmacro}% \let\Hmacro=\pgfmathresult \else \pgfmathfloatparsenumber{\Hmacro}% \let\Hmacro=\pgfmathresult \fi - \expandafter\pgfmathfloat@decompose\pgfmathresult\relax\pgfmathfloat@a@S\H\pgfmathfloat@a@E %\message{Got T^{-1}(H#1) = \Hmacro}% - % modify the mantisse: - \ifdim\H<2pt - \ifdim\H<1.5pt - \H=1.0pt - \else - \H=2.0pt - \fi - \else - \ifdim\H<4.9999pt - \ifdim\H<3.5pt - \H=2.0pt\relax - \else - \H=5.0pt\relax - \fi - \else - \ifdim\H<7.5pt - \H=5.0pt\relax - \else - \H=1.0pt\relax - \advance\pgfmathfloat@a@E by1 - \fi - \fi - \fi - \aftergroup\pgfplots@isuniformticktrue - \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\pgf@sys@tonumber{\H}}{\the\pgfmathfloat@a@E}% + % + \pgfplots@assign@default@tick@foraxis@normalizetickdist#1\Hmacro \let\Hmacro=\pgfmathresult + % + \aftergroup\pgfplots@isuniformticktrue % The following code is carried out in floating point % arithmetics because it requires large data ranges. % @@ -1719,9 +1809,9 @@ % Now, convert everything into the fixed point data % range: \ifpgfplots@is@datascaled - \csname pgfplots@datascaletrafo@#1\endcsname{\MIN@new}% + \pgfplotscoordmath{#1}{datascaletrafo}{\MIN@new}% \MIN=\pgfmathresult pt - \pgfplots@data@scale@trafo\Hmacro + \pgfplotscoordmath{#1}{datascaletrafo noshift}{\Hmacro}% \H=\pgfmathresult pt \else \pgfmathfloattofixed\MIN@new @@ -1742,7 +1832,7 @@ % % And prefer j=1 if that is possible (otherwise minor % ticks are not useful). - \pgfmathmultiply@{\Hmacro}{\csname pgfplots@log@scale@todisplaylog@#1@inv\endcsname}% + \pgfmath@basic@multiply@{\Hmacro}{\pgfplots@loc@log@from@display@log@scale}% \let\Hmacrobaseten=\pgfmathresult \expandafter\H\pgfmathresult pt %\message{ [ H / log(10) = \pgfmathresult ]}% @@ -1764,7 +1854,7 @@ \pgfplots@isuniformtickfalse \fi %\message{final H=\pgf@sys@tonumber{\H} * log(10)}% - \H=\csname pgfplots@log@scale@todisplaylog@#1\endcsname\H\relax + \H=\pgfplots@loc@log@to@display@log@scale\H % Now, we want to activate the Tick set % {lowest, lowest+H, ..., highest} % @@ -1777,14 +1867,14 @@ \MINH=\MIN % % and compute I and I*log(10) here: - \MIN=\csname pgfplots@log@scale@todisplaylog@#1@inv\endcsname\MIN\relax + \MIN=\pgfplots@loc@log@from@display@log@scale \MIN \edef\pgfmathresult{\pgf@sys@tonumber{\MIN}}% \pgfmathsetcount{\c@pgf@counta}{\pgfmathresult}% \ifdim\MIN<0pt % the truncation rounds TOWARDS 0 which is not what I want. \advance\c@pgf@counta by-1 \fi - \MIN=\csname pgfplots@log@scale@todisplaylog@#1\endcsname pt + \MIN=\pgfplots@loc@log@to@display@log@scale pt \multiply\MIN by\c@pgf@counta \ifpgfplots@isuniformtick \else @@ -1814,7 +1904,7 @@ \advance\MINH by-\H % \ifdim\MINH<0pt - \advance\MIN \csname pgfplots@log@scale@todisplaylog@#1\endcsname pt + \advance\MIN \pgfplots@loc@log@to@display@log@scale pt \fi \fi \fi @@ -1846,6 +1936,7 @@ \expandafter\global\expandafter\let\expandafter\pgfplots@glob@TMPb\csname pgfplots@tick@distance@#1\endcsname \endgroup }{% + % Case logarithmic axes and too few ticks. \aftergroup\pgfplots@isuniformtickfalse % ok, do something special. % @@ -1855,10 +1946,11 @@ % So: apply basically the SAME code as above for linear % axis, just everything log 10! And keep in mind that all % coordinates are actually given as natural logarithms. - \expandafter\MIN\csname pgfplots@#1min\endcsname pt + \MIN\csname pgfplots@#1min\endcsname pt \H=\MAX \advance\H by-\MIN - \H=\csname pgfplots@log@scale@todisplaylog@#1@inv\endcsname\H + \ifdim\H<0pt \H=-1\H \fi + \H=\pgfplots@loc@log@from@display@log@scale \H %\message{Axis limit #1: [\the\MIN:\the\MAX], diff/log(10) = \the\H.}% \c@pgf@counta=\desirednumticks\relax \advance\c@pgf@counta by-1 @@ -1873,31 +1965,8 @@ % SEARCH for the NEXT FEASABLE H. \edef\Hmacro{\pgf@sys@tonumber\H}% \pgfmathfloatparsenumber{\Hmacro}% - \expandafter\pgfmathfloat@decompose\pgfmathresult\relax\pgfmathfloat@a@S\H\pgfmathfloat@a@E - % Determine properly snapped mantisse... - \ifdim\H<2pt - \ifdim\H<1.5pt - \H=1.0pt - \else - \H=2.0pt - \fi - \else - \ifdim\H<4.9999pt - \ifdim\H<3.5pt - \H=2.0pt\relax - \else - \H=5.0pt\relax - \fi - \else - \ifdim\H<7.5pt - \H=5.0pt\relax - \else - \H=1.0pt\relax - \advance\pgfmathfloat@a@E by1 - \fi - \fi - \fi - \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\pgf@sys@tonumber{\H}}{\the\pgfmathfloat@a@E}% + \pgfplots@assign@default@tick@foraxis@normalizetickdist#1\pgfmathresult + % \expandafter\pgfmathfloattofixed\expandafter{\pgfmathresult}% \let\Hmacro=\pgfmathresult \H=\Hmacro pt % @@ -1909,7 +1978,7 @@ % -> I = round(xmin/H) % -> MIN = I * H % BUT EVERYTHING to log(10) basis! - \MIN=\csname pgfplots@log@scale@todisplaylog@#1@inv\endcsname \MIN\relax + \MIN=\pgfplots@loc@log@from@display@log@scale \MIN \pgfmathlog@invoke@expanded\pgfmathdivide@{% {\pgf@sys@tonumber\MIN}% {\Hmacro}% @@ -1923,8 +1992,8 @@ \multiply\MIN by\c@pgf@counta\relax % % convert back to basis 'e': - \MIN=\csname pgfplots@log@scale@todisplaylog@#1\endcsname\MIN\relax - \H=\csname pgfplots@log@scale@todisplaylog@#1\endcsname\H\relax + \MIN=\pgfplots@loc@log@to@display@log@scale\MIN\relax + \H=\pgfplots@loc@log@to@display@log@scale\H\relax \MINH=\MIN\relax \advance\MINH by\H\relax }% @@ -1947,16 +2016,69 @@ %\message{pgfplots.sty: #1tick set to \csname pgfplots@#1tick\endcsname [#1min=\csname pgfplots@#1min\endcsname, #1max=\csname pgfplots@#1max\endcsname].}% } +% Takes the distance between adjacent ticks as floating point number +% and returns a normalized tick distance. +% +% +% The idea is to get "nice" (human readable) distances instead of +% strange fractions or real numbers. +% +% The result will be assigned to \pgfmathresult (in float). +% +% #1 the axis (x or y or z) +% #2 the unnormalized tick distance computed so far +% +% Example: +% \pgfmathfloatparsenumber{x}{1234} +% \pgfplots@assign@default@tick@foraxis@normalizetickdist\pgfmathresult +% \pgfmathfloatotfixed\pgfmathresult +% --> +% +% \pgfmathresult={1200} +% or something like that. +\def\pgfplots@assign@default@tick@foraxis@normalizetickdist#1#2{% + \begingroup + \let\H=\pgf@xb + \expandafter\pgfmathfloat@decompose#2\relax\pgfmathfloat@a@S\H\pgfmathfloat@a@E + % modify the mantisse: + \ifdim\H<2pt + \ifdim\H<1.5pt + \H=1.0pt + \else + \H=2.0pt + \fi + \else + \ifdim\H<4.9999pt + \ifdim\H<3.5pt + \H=2.0pt\relax + \else + \H=5.0pt\relax + \fi + \else + \ifdim\H<7.5pt + \H=5.0pt\relax + \else + \H=1.0pt\relax + \advance\pgfmathfloat@a@E by1 + \fi + \fi + \fi + \pgfmathfloatcreate{\the\pgfmathfloat@a@S}{\pgf@sys@tonumber{\H}}{\the\pgfmathfloat@a@E}% + \pgfmath@smuggleone\pgfmathresult + \endgroup +}% + % Helper method for % \pgfplots@apply@data@scale@trafo@to@options@for % #1: the ticks -% #2: the trafo macro name +% #2: the trafo routine (not necessarily a single macro, but should +% take one arg) % #3: the output macro name \long\def\pgfplots@apply@data@scale@trafo@to@user@ticks#1#2\to#3{% \let#3=\pgfutil@empty \foreach \pgfplots@loc@TMPb in {#1} {% \pgfmathfloatparsenumber{\pgfplots@loc@TMPb}% - \expandafter#2\expandafter{\pgfmathresult}% + #2{\pgfmathresult}% \ifx#3\pgfutil@empty \xdef#3{\pgfmathresult}% \else diff --git a/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-dvips.def b/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-dvips.def index b45b779e003..e81a53a44d8 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-dvips.def +++ b/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-dvips.def @@ -75,11 +75,15 @@ /PatternType 2 /Shading << - /ShadingType 5 + /ShadingType \pgfplotslibrarysurf@type\space /BitsPerCoordinate \pgfplotslibrarysurf@bitspercoordinate\space /BitsPerComponent 16 % Note: this here is the reason why I can't use ASCII85Decode - /VerticesPerRow \pgfkeysvalueof{/pgfplots/surf shading/cols} - /ColorSpace /DeviceRGB + \if5\pgfplotslibrarysurf@type + /VerticesPerRow \pgfkeysvalueof{/pgfplots/surf shading/cols} + \else + /BitsPerFlag 8 + \fi + /ColorSpace /Device\pgfplotslibrarysurf@colorspace /Decode [\pgfplotslibrarysurf@decode] /Function \pgfkeysvalueof{/pgfplots/surf shading/colormap} /DataSource diff --git a/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-pdftex.def b/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-pdftex.def index 63ec517b963..c94f05e585e 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-pdftex.def +++ b/Master/texmf-dist/tex/generic/pgfplots/sys/pgflibrarypgfplots.surfshading.pgfsys-pdftex.def @@ -73,11 +73,15 @@ \def\pgfplotssys@do@surfshading@fillpaths#1{% \immediate\pdfobj stream attr {% % stream length will be computed automatically - /ShadingType 5 + /ShadingType \pgfplotslibrarysurf@type\space /BitsPerCoordinate \pgfplotslibrarysurf@bitspercoordinate\space /BitsPerComponent 16 - /VerticesPerRow \pgfkeysvalueof{/pgfplots/surf shading/cols} - /ColorSpace /DeviceRGB + \if5\pgfplotslibrarysurf@type + /VerticesPerRow \pgfkeysvalueof{/pgfplots/surf shading/cols} + \else + /BitsPerFlag 8 + \fi + /ColorSpace /Device\pgfplotslibrarysurf@colorspace /Decode [\pgfplotslibrarysurf@decode] /Function \pgfkeysvalueof{/pgfplots/surf shading/colormap} \ifx\pgfplotslibrarysurf@filter@decode\pgfutil@empty diff --git a/Master/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex b/Master/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex new file mode 100644 index 00000000000..cc79af2d013 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/sys/pgfplotssysgeneric.code.tex @@ -0,0 +1,30 @@ +%-------------------------------------------- +% 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/2008 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@sys@beforenode{% + \pgfkeysifdefined{/tikz/tex4ht node/escape/.@cmd}{% + \tikzset{tex4ht node/escape=true}% + }{}% +}% 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 b1496a8fc1b..838e0393e2e 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotscolormap.code.tex @@ -25,6 +25,8 @@ % %-------------------------------------------- +\pgfkeyssetvalue{/pgfplots/colormap default colorspace}{auto} + % This package relies on pgfplots temporary registers and its array % data structure. @@ -53,6 +55,7 @@ \expandafter\pgfplotsarraynewempty\expandafter{\pgfplots@createcolormap@name}% \def\pgfplots@createcolormap@MIN{0}% NORMALIZATION: assume that lower-end is 0pt. \def\pgfplots@createcolormap@MAX{0}% To be computed. + \pgfplots@createcolormap@initcolorspace \let\pgfplots@createcolormap@LAST=\pgfplots@createcolormap@MIN % PARSE IT: \edef\pgfplots@loc@TMPa{#2}% @@ -75,8 +78,40 @@ \expandafter\let\csname\pgfplots@createcolormap@name @h\endcsname=\pgfplots@createcolormap@H \pgfmathreciprocal@{\pgfplots@createcolormap@H}% \expandafter\let\csname\pgfplots@createcolormap@name @invh\endcsname=\pgfmathresult + \expandafter\let\csname\pgfplots@createcolormap@name @col@comps\endcsname=\pgfplots@createcolormap@col@comps + \expandafter\let\csname\pgfplots@createcolormap@name @colspace\endcsname=\pgfplots@createcolormap@colspace %\pgfplots@colormap@showdebuginfofor{#1}% } +\def\pgfplots@createcolormap@initcolorspace{% + \pgfkeysgetvalue{/pgfplots/colormap default colorspace}\pgfplots@loc@TMPa + \edef\pgfplots@loc@TMPa{\pgfplots@loc@TMPa}% + \def\pgfplots@loc@TMPb{auto}% + \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa + % colormap default colorspace=auto: same as empty. + \let\pgfplots@loc@TMPa=\pgfutil@empty + \fi + \ifx\pgfplots@loc@TMPa\pgfutil@empty + % colormap default colorspace=auto: + \def\pgfplots@createcolormap@col@comps{}% to be filled from first point + \def\pgfplots@createcolormap@colspace{}% + \else + \def\pgfplots@loc@TMPb{rgb}% + \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa + % colormap default colorspace=rgb: + \def\pgfplots@createcolormap@colspace{rgb}% + \def\pgfplots@createcolormap@col@comps{3}% + \else + \def\pgfplots@loc@TMPb{cmyk}% + \ifx\pgfplots@loc@TMPb\pgfplots@loc@TMPa + % colormap default colorspace=cmyk: + \def\pgfplots@createcolormap@colspace{cmyk}% + \def\pgfplots@createcolormap@col@comps{4}% + \else + \pgfplots@error{Sorry, the choice 'colormap default colorspace=\pgfplots@loc@TMPa' is unknown to pgfplots, please use one of 'auto,rgb,cmyk'}% + \fi + \fi + \fi +}% \def\pgfplots@createcolormap@seth[#1]{% \def\pgfplots@createcolormap@context{[#1]}% \pgfmathparse{#1}% @@ -101,7 +136,7 @@ {% \pgfutil@ifnextchar g{\pgfplots@createcolormap@grabgray}% {% - \pgfutil@ifnextchar c{\pgfplots@createcolormap@grabcolor}% + \pgfutil@ifnextchar c{\pgfplots@createcolormap@grabc}% { \expandafter\pgfutil@ifnextchar\pgfplots@activesemicolon{\pgfplots@createcolormap@grabsemicolon@active}% {\pgfplots@createcolormap@error}% @@ -177,6 +212,41 @@ \edef\pgfplots@loc@TMPa{{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}{\pgfmathresult}}% \expandafter\pgfplots@loc@TMPc\pgfplots@loc@TMPa \pgfplots@createcolormap@} + + +\def\pgfplots@createcolormap@grabcmyk myk{ + \def\pgfplots@createcolormap@colspace@actual{cmyk}% + \def\pgfplots@createcolormap@col@comps@actual{4}% + \pgfutil@ifnextchar2{% + \pgfplots@createcolormap@grabcmyk@two@five@five + }{% + \let\pgfplots@createcolormap@next@\pgfplots@createcolormap@grabcmyk@ + \pgfplots@createcolormap@next + }% +} +\def\pgfplots@createcolormap@grabcmyk@(#1)=(#2,#3,#4,#5){% + \def\pgfplots@createcolormap@context{cmyk(#1)=(#2,#3,#4,#5)}% + \pgfplots@createcolormap@nextcolor{#1}{#2}{#3}{#4}{#5}% + \pgfplots@createcolormap@} +\def\pgfplots@createcolormap@grabcmyk@two@five@five255{% + \let\pgfplots@createcolormap@next@\pgfplots@createcolormap@grabcmyk@two@five@five@ + \pgfplots@createcolormap@next +} +\def\pgfplots@createcolormap@grabcmyk@two@five@five@(#1)=(#2,#3,#4,#5){% + \def\pgfplots@createcolormap@context{cmyk255(#1)=(#2,#3,#4,#5)}% + \pgfplots@createcolormap@grabcmyk@two@five@five@rescale{#2}% + \let\pgfplots@loc@TMPa=\pgfmathresult + \pgfplots@createcolormap@grabcmyk@two@five@five@rescale{#3}% + \let\pgfplots@loc@TMPb=\pgfmathresult + \pgfplots@createcolormap@grabcmyk@two@five@five@rescale{#4}% + \let\pgfplots@loc@TMPc=\pgfmathresult + \pgfplots@createcolormap@grabcmyk@two@five@five@rescale{#5}% + \def\pgfplots@loc@TMPd{\pgfplots@createcolormap@nextcolor{#1}}% + \edef\pgfplots@loc@TMPa{{\pgfplots@loc@TMPa}{\pgfplots@loc@TMPb}{\pgfplots@loc@TMPc}{\pgfmathresult}}% + \expandafter\pgfplots@loc@TMPd\pgfplots@loc@TMPa + \pgfplots@createcolormap@} + + \def\pgfplots@createcolormap@grabgray gray{% \let\pgfplots@createcolormap@next@\pgfplots@createcolormap@grabgray@ \pgfplots@createcolormap@next @@ -185,7 +255,15 @@ \def\pgfplots@createcolormap@context{gray(#1)=(#2)}% \pgfplots@createcolormap@nextRGB{#1}{#2}{#2}{#2}% \pgfplots@createcolormap@} -\def\pgfplots@createcolormap@grabcolor color{% + +\def\pgfplots@createcolormap@grabc c{% + \pgfutil@ifnextchar m{% + \pgfplots@createcolormap@grabcmyk + }{% + \pgfplots@createcolormap@grabcolor + }% +}% +\def\pgfplots@createcolormap@grabcolor olor{% \let\pgfplots@createcolormap@next@\pgfplots@createcolormap@grabcolor@ \pgfplots@createcolormap@next }% @@ -193,36 +271,105 @@ \def\pgfplots@createcolormap@context{color(#1)=(#2)}% \pgfutil@colorlet{pgf@tempcol}{#2}% \pgfutil@extractcolorspec{pgf@tempcol}{\pgf@tempcolor}% - \expandafter\pgfutil@convertcolorspec\pgf@tempcolor{rgb}{\pgf@rgbcolor}% - \expandafter\pgfplots@createcolormap@grabcolor@@\pgf@rgbcolor\relax{#1}}% + \ifx\pgfplots@createcolormap@colspace\pgfutil@empty + % This here is mainly for backwards compatibility... in older + % versions, rgb was the only choice. This should still work + % unless overruled explicitly. + \def\pgfplots@createcolormap@colspace{rgb}% + \def\pgfplots@createcolormap@col@comps{3}% + \fi + % convert the colorspace (if needed): + \expandafter\pgfutil@convertcolorspec\pgf@tempcolor{\pgfplots@createcolormap@colspace}{\pgf@rgbcolor}% + % + \let\pgfplots@createcolormap@colspace@actual=\pgfplots@createcolormap@colspace + \let\pgfplots@createcolormap@col@comps@actual=\pgfplots@createcolormap@col@comps + % + \if4\pgfplots@createcolormap@col@comps + \let\pgfplots@loc@TMPa=\pgfplots@createcolormap@grabcolor@@@ + \else + \let\pgfplots@loc@TMPa=\pgfplots@createcolormap@grabcolor@@ + \fi + \expandafter\pgfplots@loc@TMPa\pgf@rgbcolor\relax{#1}% +}% \def\pgfplots@createcolormap@grabcolor@@#1,#2,#3\relax#4{% \pgfplots@createcolormap@nextRGB{#4}{#1}{#2}{#3}% \pgfplots@createcolormap@} +\def\pgfplots@createcolormap@grabcolor@@@#1,#2,#3,#4\relax#5{% + \pgfplots@createcolormap@nextcolor{#5}{#1}{#2}{#3}{#4}% + \pgfplots@createcolormap@} + \def\pgfplots@createcolormap@rgbrangeexception#1#2#3{% \pgfplots@error{Sorry, RGB[#1,#2,#3] is not supported. The allowed range is 0 <= r,g,b <= 1. The error occured near `\pgfplots@createcolormap@context'}% }% +\def\pgfplots@createcolormap@rangeexception#1#2{% + \pgfplots@error{Sorry, the color component at index #1 (value #2) is out of range. The allowed range is 0 <= value <= 1. The error occured near `\pgfplots@createcolormap@context'}% +} + % Ok, we parsed the next single spec. % #1: the width % #2,#3,#4 RGB values. \def\pgfplots@createcolormap@nextRGB#1#2#3#4{% + \def\pgfplots@createcolormap@colspace@actual{rgb}% + \def\pgfplots@createcolormap@col@comps@actual{3}% + \pgfplots@createcolormap@nextcolor{#1}{#2}{#3}{#4}{}% +}% + +% #1: h +% #2...#5: the color components (at least 3 non-empty, can be 4). +\def\pgfplots@createcolormap@nextcolor#1#2#3#4#5{% \ifdim#2pt<0pt - \pgfplots@createcolormap@rgbrangeexception{#2}{#3}{#4}% + \pgfplots@createcolormap@rangeexception0{#2}% \fi \ifdim#3pt<0pt - \pgfplots@createcolormap@rgbrangeexception{#2}{#3}{#4}% + \pgfplots@createcolormap@rangeexception1{#3}% \fi \ifdim#4pt<0pt - \pgfplots@createcolormap@rgbrangeexception{#2}{#3}{#4}% + \pgfplots@createcolormap@rangeexception2{#4}% \fi \ifdim#2pt>1pt - \pgfplots@createcolormap@rgbrangeexception{#2}{#3}{#4}% + \pgfplots@createcolormap@rangeexception0{#2}% \fi \ifdim#3pt>1pt - \pgfplots@createcolormap@rgbrangeexception{#2}{#3}{#4}% + \pgfplots@createcolormap@rangeexception1{#3}% \fi \ifdim#4pt>1pt - \pgfplots@createcolormap@rgbrangeexception{#2}{#3}{#4}% + \pgfplots@createcolormap@rangeexception2{#4}% + \fi + \if4\pgfplots@createcolormap@col@comps@actual + \ifdim#5pt<0pt + \pgfplots@createcolormap@rangeexception3{#5}% + \fi + \ifdim#5pt>1pt + \pgfplots@createcolormap@rangeexception3{#5}% + \fi + \fi + \def\pgfplots@loc@TMPb{\pgfplots@createcolormap@nextcolor@{#1}{#2}{#3}{#4}{#5}}% + \ifx\pgfplots@createcolormap@colspace@actual\pgfplots@createcolormap@colspace + \else + \ifx\pgfplots@createcolormap@colspace\pgfutil@empty + \let\pgfplots@createcolormap@colspace=\pgfplots@createcolormap@colspace@actual + \let\pgfplots@createcolormap@col@comps=\pgfplots@createcolormap@col@comps@actual + \else + % Oh. We need to convert the color space! + \edef\pgfplots@loc@TMPa{{\pgfplots@createcolormap@colspace@actual}{#2,#3,#4\if4\pgfplots@createcolormap@col@comps@actual,#5\fi}}% + \expandafter\pgfutil@convertcolorspec\pgfplots@loc@TMPa{\pgfplots@createcolormap@colspace}{\pgfplots@loc@TMPa}% + % invoke + % \pgfplots@createcolormap@nextcolor@{#1}{C1}{C2}{C3}{C4}. + % We need to compute C1 ... C4 : + \def\pgf@colmarshal{{#1}}% + \expandafter\pgf@uncomma\pgfplots@loc@TMPa,,% + \if4\pgfplots@createcolormap@col@comps + \else + % ok, we have C4={}. Append it: + \edef\pgf@colmarshal{\pgf@colmarshal{}}% + \fi + \def\pgfplots@loc@TMPb{\expandafter\pgfplots@createcolormap@nextcolor@\pgf@colmarshal}% + \fi \fi + \pgfplots@loc@TMPb +}% +\def\pgfplots@createcolormap@nextcolor@#1#2#3#4#5{% +%\message{processing color #1=(#2,#3,#4,#5) with \pgfplots@createcolormap@col@comps@actual\space components^^J}% % compute 'h': \pgfmathparse{#1}% \let\pgfplots@createcolormap@MAX=\pgfmathresult @@ -270,14 +417,19 @@ \ifdim\c@pgfplots@createcolormap pt=\pgfplots@loc@TMPb pt % omit the last. \else - \pgfmathparse{\pgfplots@createcolormap@lastR + \c@pgfplots@createcolormap/\pgfplots@loc@TMPb * ( #2 - \pgfplots@createcolormap@lastR )}% - \let\pgfplots@createcolormap@nextR=\pgfmathresult - \pgfmathparse{\pgfplots@createcolormap@lastG + \c@pgfplots@createcolormap/\pgfplots@loc@TMPb * ( #3 - \pgfplots@createcolormap@lastG )}% - \let\pgfplots@createcolormap@nextG=\pgfmathresult - \pgfmathparse{\pgfplots@createcolormap@lastB + \c@pgfplots@createcolormap/\pgfplots@loc@TMPb * ( #4 - \pgfplots@createcolormap@lastB )}% + \pgfmathparse{\pgfplots@createcolormap@lastA + \c@pgfplots@createcolormap/\pgfplots@loc@TMPb * ( #2 - \pgfplots@createcolormap@lastA )}% + \let\pgfplots@createcolormap@nextA=\pgfmathresult + \pgfmathparse{\pgfplots@createcolormap@lastB + \c@pgfplots@createcolormap/\pgfplots@loc@TMPb * ( #3 - \pgfplots@createcolormap@lastB )}% + \let\pgfplots@createcolormap@nextB=\pgfmathresult + \pgfmathparse{\pgfplots@createcolormap@lastC + \c@pgfplots@createcolormap/\pgfplots@loc@TMPb * ( #4 - \pgfplots@createcolormap@lastC )}% + \let\pgfplots@createcolormap@nextC=\pgfmathresult + \if4\pgfplots@createcolormap@col@comps + \pgfmathparse{\pgfplots@createcolormap@lastD + \c@pgfplots@createcolormap/\pgfplots@loc@TMPb * ( #4 - \pgfplots@createcolormap@lastD )}% + \let\pgfplots@createcolormap@nextD=\pgfmathresult + \fi % \edef\pgfplots@loc@TMPa{% - \noexpand\pgfplotsarraypushback{\pgfplots@createcolormap@nextR,\pgfplots@createcolormap@nextG,\pgfmathresult}% + \noexpand\pgfplotsarraypushback{\pgfplots@createcolormap@nextA,\pgfplots@createcolormap@nextB,\pgfplots@createcolormap@nextC\if4\pgfplots@createcolormap@col@comps,\pgfplots@createcolormap@nextD\fi}% \noexpand\to}% \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@createcolormap@name}% \fi @@ -285,11 +437,12 @@ \fi \fi \fi - \def\pgfplots@loc@TMPa{\pgfplotsarraypushback{#2,#3,#4}\to}% + \edef\pgfplots@loc@TMPa{\noexpand\pgfplotsarraypushback{#2,#3,#4\if4\pgfplots@createcolormap@col@comps,#5\fi}\noexpand\to}% \expandafter\pgfplots@loc@TMPa\expandafter{\pgfplots@createcolormap@name}% - \edef\pgfplots@createcolormap@lastR{#2}% - \edef\pgfplots@createcolormap@lastG{#3}% - \edef\pgfplots@createcolormap@lastB{#4}% + \edef\pgfplots@createcolormap@lastA{#2}% + \edef\pgfplots@createcolormap@lastB{#3}% + \edef\pgfplots@createcolormap@lastC{#4}% + \edef\pgfplots@createcolormap@lastD{#5}% }% \def\pgfplots@createcolormap@nextRGB@consider@reinterpolation#1\relax{% \pgf@xa=#1pt @@ -318,19 +471,20 @@ % Shows debug info about colormap #1 into the console. \def\pgfplots@colormap@showdebuginfofor#1{% - \message{Debug info for color map '#1':}% - \message{(Transformed) Range: [0:\pgfplotscolormaprange]; }% - \message{H: \csname pgfpl@cm@#1@h\endcsname; }% - \message{H:^{-1}: \csname pgfpl@cm@#1@invh\endcsname; }% + \message{Debug info for color map '#1':^^J}% + \message{(Transformed) Range: [0:\pgfplotscolormaprange]; ^^J}% + \message{H: \csname pgfpl@cm@#1@h\endcsname; ^^J}% + \message{H:^{-1}: \csname pgfpl@cm@#1@invh\endcsname; ^^J}% \pgfplotsarraysizetomacro{pgfpl@cm@#1}\to\pgfplots@loc@TMPa - \message{Size: \pgfplots@loc@TMPa; }% - \message{RGB Values: }% + \message{Size: \pgfplots@loc@TMPa; ^^J}% + \message{Colorspace: \csname pgfpl@cm@#1@colspace\endcsname^^JValues (\csname pgfpl@cm@#1@col@comps\endcsname\space components each): ^^J}% \begingroup \c@pgf@counta=0 \pgfplotsarrayforeachungrouped{pgfpl@cm@#1}\as\elem{% \message{\#\the\c@pgf@counta: \elem; }% \advance\c@pgf@counta by1 }% + \message{^^J}% \endgroup } @@ -358,11 +512,15 @@ }% }% \toks3=\expandafter{\pgfplots@serialize@list}% + \toks4=\expandafter{\expandafter\def\csname pgfpl@cm@#1@colspace\endcsname}% + \toks5=\expandafter{\expandafter\def\csname pgfpl@cm@#1@col@comps\endcsname}% \xdef\pgfplots@glob@TMPa{% \the\toks0 {\csname pgfpl@cm@#1@h\endcsname}% \the\toks1 {\csname pgfpl@cm@#1@invh\endcsname}% \noexpand\def\noexpand\pgfplots@loc@TMPa{\the\toks3 }% \the\toks2 + \the\toks4 {\csname pgfpl@cm@#1@colspace\endcsname}% + \the\toks5 {\csname pgfpl@cm@#1@col@comps\endcsname}% }% \endgroup \let#2=\pgfplots@glob@TMPa @@ -395,7 +553,11 @@ \def\pgfplots@loc@TMPb{}% \def\pgfplots@loc@TMPc{}% \pgfplotsarrayforeachungrouped{pgfpl@cm@#1}\as\cdata{% - \edef\cdata{\expandafter\pgfplotscolormaptopdffunction@convertcdata\cdata\relax}% + \if4\csname pgfpl@cm@#1@col@comps\endcsname + \edef\cdata{\expandafter\pgfplotscolormaptopdffunction@convertcdata@four\cdata\relax}% + \else + \edef\cdata{\expandafter\pgfplotscolormaptopdffunction@convertcdata\cdata\relax}% + \fi \ifnum\c@pgf@counta>0 \t@pgfplots@toka=\expandafter{\pgfplotsretval}% \xdef\pgfplotsretval{% @@ -428,6 +590,7 @@ \endgroup }% \def\pgfplotscolormaptopdffunction@convertcdata#1,#2,#3\relax{#1 #2 #3}% +\def\pgfplotscolormaptopdffunction@convertcdata@four#1,#2,#3,#4\relax{#1 #2 #3 #4}% % Invokes '#2' if a color map named '#1' exists and '#3' if no such color map exists. \def\pgfplotscolormapifdefined#1#2#3{\pgfplotsarrayifdefined{pgfpl@cm@#1}{#2}{#3}}% @@ -459,6 +622,7 @@ \def\pgfplotscolormaptoshadingspec#1#2#3{% \pgfplotscolormapassertexists{#1}% \begingroup + \def\pgfplots@rgb{rgb}% \pgfmathparse{#2}% \expandafter\pgfmathdivide@\expandafter{\pgfmathresult}{\pgfplotscolormaprange}% \let\pgfplots@loc@TMPb=\pgfmathresult @@ -467,12 +631,23 @@ \c@pgf@counta=0 \let#3=\pgfutil@empty \pgfplotsarrayforeachungrouped{pgfpl@cm@#1}\as\pgfplotscolormaptoshadingspec@TMP{% - \ifnum\c@pgf@counta=0 - \edef\pgfplots@loc@TMPc{rgb(0pt)=(\pgfplotscolormaptoshadingspec@TMP)}% - \else - \pgf@yb=\c@pgf@counta\pgf@ya - \edef\pgfplots@loc@TMPc{rgb(\the\pgf@yb)=(\pgfplotscolormaptoshadingspec@TMP)}% + \pgf@yb=\c@pgf@counta\pgf@ya + \edef\pgfplots@colspace{\csname pgfpl@cm@#1@colspace\endcsname}% + % FIXME : PGF shadings accept only RGB! + \if1\pgfplotscolormaptoshadingspectorgb + \ifx\pgfplots@colspace\pgfplots@rgb + \else + \pgfutil@ifundefined{pgfpl@cm@#1@warned}{% + \expandafter\gdef\csname pgfpl@cm@#1@warned\endcsname{1}% + \pgfplots@warning{I am about to convert colormap '#1' from \pgfplots@colspace\space to rgb (which might be lossy). Perhaps the choice 'colorbar sampled={surf,shader=interp}' yields better results since it supports \pgfplots@colspace.}% + }{% + }% + \edef\pgf@tempcolor{{\pgfplots@colspace}{\pgfplotscolormaptoshadingspec@TMP}}% + \expandafter\pgfutil@convertcolorspec\pgf@tempcolor{rgb}{\pgfplotscolormaptoshadingspec@TMP}% + \def\pgfplots@colspace{rgb}% + \fi \fi + \edef\pgfplots@loc@TMPc{\pgfplots@colspace(\the\pgf@yb)=(\pgfplotscolormaptoshadingspec@TMP)}% \ifx#3\pgfutil@empty \t@pgfplots@toka={}% \else @@ -485,6 +660,7 @@ \pgfmath@smuggleone#3% \endgroup }% +\def\pgfplotscolormaptoshadingspectorgb{1}% % The same as \pgfplotscolormaptoshadingspec, but this here yields the % *reversed* sequence. @@ -501,10 +677,20 @@ % end is fixed to '0'. \def\pgfplotscolormaprange{1000} -% Linearly maps the number #4 into the colormap #5 and returns the interpolated RGB triple -% into \pgfmathresult. +\def\pgfplotscolormapgetcolorspace#1{% + \edef\pgfplotsretval{\csname pgfpl@cm@#1@colspace\endcsname}% +}% +\def\pgfplotscolormapgetcolorcomps#1{% + \edef\pgfplotsretval{\csname pgfpl@cm@#1@col@comps\endcsname}% +}% + + +% Linearly maps the number #4 into the colormap #5 and returns the +% interpolated colors into \pgfmathresult. The result will be a triple +% for an RGB colormap and it will contain four numbers for CMYK. The +% components of the result will be in the range [0:1]. % -% [#1:#2] the number range of the data source. This is required to +% [#1:#2] the number range of the data source (i.e. of #4). This is required to % map into the colormap. % [#3] (optional) the quantity % s := \pgfplotscolormaprange / (#2-#1). @@ -564,6 +750,8 @@ % without '.0' suffix: \def\pgfplots@discardperiod##1.##2\relax{\def\pgfplotscolormapfind@intervalno{##1}}% \expandafter\pgfplots@discardperiod\pgfmathresult\relax + \pgfmathsubtract@{\pgfplotscolormapfind@transformedx@divh}{\pgfplotscolormapfind@intervalno}% + \let\pgfplots@loc@factor=\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. @@ -573,7 +761,11 @@ \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].}% \edef\pgfplots@loc@TMPa{\pgfplotscolormapfind@rgb@LEFT:\pgfplotscolormapfind@rgb@RIGHT}% - \expandafter\pgfplotscolormapfind@interpolate\pgfplots@loc@TMPa\relax + \if4\csname pgfpl@cm@#5@col@comps\endcsname + \expandafter\pgfplotscolormapfind@interpolate@four\pgfplots@loc@TMPa\relax + \else + \expandafter\pgfplotscolormapfind@interpolate\pgfplots@loc@TMPa\relax + \fi \pgfmath@smuggleone\pgfmathresult \endgroup %\message{-> got finally mapping(#4, #5) = RGB'\pgfmathresult'.}% @@ -588,26 +780,33 @@ % R: \pgfmathsubtract@{#4}{#1}% \let\pgfplotscolormapfind@Cdiff=\pgfmathresult - \pgfmathsubtract@{\pgfplotscolormapfind@transformedx@divh}{\pgfplotscolormapfind@intervalno}% - \expandafter\pgfmathmultiply@\expandafter{\pgfmathresult}{\pgfplotscolormapfind@Cdiff}% + \pgfmathmultiply@{\pgfplots@loc@factor}{\pgfplotscolormapfind@Cdiff}% \expandafter\pgfmathadd@\expandafter{\pgfmathresult}{#1}% \let\RED=\pgfmathresult % G: \pgfmathsubtract@{#5}{#2}% \let\pgfplotscolormapfind@Cdiff=\pgfmathresult - \pgfmathsubtract@{\pgfplotscolormapfind@transformedx@divh}{\pgfplotscolormapfind@intervalno}% - \expandafter\pgfmathmultiply@\expandafter{\pgfmathresult}{\pgfplotscolormapfind@Cdiff}% + \pgfmathmultiply@{\pgfplots@loc@factor}{\pgfplotscolormapfind@Cdiff}% \expandafter\pgfmathadd@\expandafter{\pgfmathresult}{#2}% \let\GREEN=\pgfmathresult % B: \pgfmathsubtract@{#6}{#3}% \let\pgfplotscolormapfind@Cdiff=\pgfmathresult - \pgfmathsubtract@{\pgfplotscolormapfind@transformedx@divh}{\pgfplotscolormapfind@intervalno}% - \expandafter\pgfmathmultiply@\expandafter{\pgfmathresult}{\pgfplotscolormapfind@Cdiff}% + \pgfmathmultiply@{\pgfplots@loc@factor}{\pgfplotscolormapfind@Cdiff}% \expandafter\pgfmathadd@\expandafter{\pgfmathresult}{#3}% \let\BLUE=\pgfmathresult \edef\pgfmathresult{\RED,\GREEN,\BLUE}% }% +\def\pgfplotscolormapfind@interpolate@four#1,#2,#3,#4:#5,#6,#7,#8\relax{% + \pgfplotscolormapfind@interpolate#1,#2,#3:#5,#6,#7\relax + \let\CMY=\pgfmathresult + \pgfmathsubtract@{#8}{#4}% + \let\pgfplotscolormapfind@Cdiff=\pgfmathresult + \pgfmathmultiply@{\pgfplots@loc@factor}{\pgfplotscolormapfind@Cdiff}% + \expandafter\pgfmathadd@\expandafter{\pgfmathresult}{#4}% + \let\K=\pgfmathresult + \edef\pgfmathresult{\CMY,\K}% +} % Performs a direct color access into color map '#2' using an index % '#1'. @@ -655,6 +854,7 @@ \fi }% + \pgfutil@definecolor{mapped color}{rgb}{0,0,0}% make sure this color exists. It will be overwritten if needed. \pgfplotscreatecolormap{hot}{color(0cm)=(blue); color(1cm)=(yellow); color(2cm)=(orange); color(3cm)=(red)} @@ -670,7 +870,7 @@ {#1} {\pgfkeysvalueof{/pgfplots/colormap name}} %\message{Color for current point is RGB '\pgfmathresult' (determined using meta 'phi(\pgfplotspointmeta) = \pgfplotspointmetatransformed')}% - \def\pgfplots@loc@TMPb{\pgfutil@definecolor{mapped color}{rgb}}% + \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 60df282f8bb..2dacf8f7458 100644 --- a/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex +++ b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.code.tex @@ -161,6 +161,7 @@ \expandafter\def\expandafter\pgfplots@command@to@string@@\pgfplots@glob@TMPa#1\pgfplots@EOI#2{% \def#2{#1}% }% +\def\pgfplotscommandtostring#1#2{\pgfplots@command@to@string{#1}{#2}}% % As \pgfplots@command@to@string, but it works for commands accepting % arguments. More precisely, #2 will be a string (!) of the form @@ -205,7 +206,9 @@ % \pgfplotsutil@ifdefinedui{\csname abc\endcsname} -> no % \pgfplotsutil@ifdefinedui{a_file_name} -> no \def\pgfplotsutil@ifdefinedui#1#2#3{% - \def\pgfplotsutil@@arg@ifdefined{#1}% + {\toks0={#1}% this construction is necessary to handle '#' characters in '#1' + \xdef\pgfplotsutil@@arg@ifdefined{\the\toks0}% + }% \pgfplots@command@to@string\pgfplotsutil@@arg@ifdefined\pgfplotsutil@@arg@ifdefined \expandafter\pgfplotsutil@trim\expandafter{\pgfplotsutil@@arg@ifdefined}% \pgfutil@ifundefined{\pgfplotsretval}{#3}{#2}% @@ -214,7 +217,9 @@ % '#1' after '#1' has been normalized. % It invokes '#3' if '#1#2' is defined and '#4' if not. \def\pgfplotsutil@ifdefinedui@withsuffix#1#2#3#4{% - \def\pgfplotsutil@@arg@ifdefined{#1}% + {\toks0={#1}% + \xdef\pgfplotsutil@@arg@ifdefined{\the\toks0}% + }% \pgfplots@command@to@string\pgfplotsutil@@arg@ifdefined\pgfplotsutil@@arg@ifdefined \expandafter\pgfplotsutil@trim\expandafter{\pgfplotsutil@@arg@ifdefined}% \pgfutil@ifundefined{\pgfplotsretval #2}{#4}{#3}% @@ -304,7 +309,7 @@ \edef\pgfmathresult{#2}% \fi }% -\def\pgfplotsmathlessthan#1#2{\ifdim#1 pt<#2 pt \pgfmathfloatcomparisontrue\else\pgfmathfloatcomparisonfalse\fi} +\def\pgfplotsmathlessthan#1#2{\ifdim#1pt<#2pt \pgfmathfloatcomparisontrue\else\pgfmathfloatcomparisonfalse\fi} % Re-define two-argument function for min and max. % The pgfmath engine now uses a variable number of arguments. @@ -555,6 +560,7 @@ % Discards any token up to (and including) \relax. \def\pgfplots@gobble@until@relax#1\relax{}% +\def\pgfplots@gobble@until@EOI#1\pgfplots@EOI{}% % A (simple) replacement for \foreach which % 1. does NOT scope the argument @@ -573,13 +579,24 @@ % scopes. % % This loop *can* be nested. -\def\pgfplotsforeachungrouped#1{\pgfplotsforeachungrouped@{#1}}% -\long\def\pgfplotsforeachungrouped@#1in #2#3{% - \pgfplotsforeachungrouped@isuniform{#2}% - \ifpgfplots@loc@tmp - \pgfplotsforeachungroupeduniform@{#1}#2\relax{#3}% +\def\pgfplotsforeachungrouped#1{% + \pgfutil@ifnextchar/{\pgfplotsforeachungrouped@{#1}}{\pgfplotsforeachungrouped@{#1}/{}}% +}% +\long\def\pgfplotsforeachungrouped@#1/#2in #3#4{% + \def\pgfplots@foreach@loc@TMPa{#2}% + \ifx\pgfplots@foreach@loc@TMPa\pgfutil@empty + \pgfplotsforeachungrouped@isuniform{#3}% + \ifpgfplots@loc@tmp + % special handling: + % \foreach #1 in {a,b,...,c} can be improved: + \pgfplotsforeachungroupeduniform@{#1}#3\relax{#4}% + \else + % invoke \foreach #1 in {#3} and transport results: + \pgfplotsforeachungroupednonuniform@#1{#3}{#4}% + \fi \else - \pgfplotsforeachungroupednonuniform@#1{#2}{#3}% + % invoke \foreach #1/#2 in {#3} and transport results: + \pgfplotsforeachungroupedslashed@#1/#2{#3}{#4}% \fi } \let\pgfplots@original@pgfmathadd@=\pgfmathadd@ @@ -659,6 +676,25 @@ #3% }% } +\long\def\pgfplotsforeachungroupedslashed@#1/#2#3#4{% + \pgfplotsapplistXXglobalnewempty + \foreach\pgfplots@foreach@loc@TMPa/\pgfplots@foreach@loc@TMPb in {#3} {% + \edef\pgfplots@foreach@loc@TMPa{\pgfplots@foreach@loc@TMPa/\pgfplots@foreach@loc@TMPb}% + \expandafter\pgfplotsapplistXXglobalpushback\expandafter{\pgfplots@foreach@loc@TMPa,}% + }% + \pgfplotsapplistXXgloballet\pgfplots@foreach@loc@TMPa + \pgfplotsapplistXXglobalclear + \expandafter\pgfplotsforeachentryinCSVisterminated\expandafter\pgfplots@foreach@loc@TMPa\expandafter{\pgfplots@foreach@loc@TMPa}{% + \expandafter\pgfplotsforeachungroupedslashed@@\pgfplots@foreach@loc@TMPa\pgfplots@EOI + \let#1=\pgfplots@foreach@loc@TMPa + \let#2=\pgfplots@foreach@loc@TMPb + #4% + }% +} +\def\pgfplotsforeachungroupedslashed@@#1/#2\pgfplots@EOI{% + \def\pgfplots@foreach@loc@TMPa{#1}% + \def\pgfplots@foreach@loc@TMPb{#2}% +}% % Sets \ifpgfplots@loc@tmp to true if and only if '#1' is of the form % #1 = <number1>,<number2>,...,<number3>. @@ -741,6 +777,12 @@ % Both, #1 and #2 will be provided as floating point numbers unless % configured otherwise with \pgfplotsforeachlogarithmicsetoutput, % see above. +% +% Arithmethics will be carried out with the math class +% '\pgfplotsforeachlogarithmicmathid'. +% This macro should expand to something which is usable inside of +% \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{....} +% the default is 'float' % % FIXME : THIS CAN'T BE NESTED YET! \def\pgfplotsforeachlogarithmicungrouped[#1]#2/#3{\pgfplotsforeachlogarithmicungrouped@[#1]{#2}{#3}}% @@ -749,18 +791,18 @@ % \pgfplots@foreach@loc@TMPd = N in fixed point % \pgfplots@foreach@loc@TMPc = N-1 in float : \edef\pgfplots@plot@samples@@{#1}% - \pgfmathfloatcreate{1}{1.0}{0}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{one}% \let\pgfplots@foreach@loc@TMPa=\pgfmathresult - \pgfmathfloatparsenumber{\pgfplots@plot@samples@@}% - \expandafter\pgfmathfloatsubtract@\expandafter{\pgfmathresult}{\pgfplots@foreach@loc@TMPa}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{parsenumber}{\pgfplots@plot@samples@@}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{op}{subtract}{{\pgfmathresult}{\pgfplots@foreach@loc@TMPa}}% \let\pgfplots@foreach@loc@TMPc=\pgfmathresult % \edef\pgfplots@loc@TMPb{#4}% \expandafter\pgfplotsforeachlogarithmicungrouped@readdomain\pgfplots@loc@TMPb\relax % compute mesh width into \pgfplots@foreach@loc@TMPc: % \pgfplots@foreach@loc@TMPc := h := ( log(xmax) - log(xmin) ) / (N-1) - \pgfmathfloatsubtract@{\pgfplots@foreach@loc@TMPb}{\pgfplots@foreach@loc@TMPa}% - \pgfmathfloatdivide@{\pgfmathresult}{\pgfplots@foreach@loc@TMPc}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{op}{subtract}{{\pgfplots@foreach@loc@TMPb}{\pgfplots@foreach@loc@TMPa}}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{op}{divide}{{\pgfmathresult}{\pgfplots@foreach@loc@TMPc}}% \let\pgfplots@foreach@loc@TMPc=\pgfmathresult % % apply local scoping here: @@ -772,13 +814,14 @@ \pgfutil@loop \ifnum\c@pgf@counta<\pgfplots@plot@samples@@ % compute exp(log(min) + i * h) - \expandafter\pgfmathfloatparsenumber\expandafter{\the\c@pgf@counta}% - \expandafter\pgfmathfloatmultiply@\expandafter{\pgfmathresult}{\pgfplots@foreach@loc@TMPc}% - \expandafter\pgfmathfloatadd@\expandafter{\pgfmathresult}{\pgfplots@foreach@loc@TMPa}% + \edef\pgfplots@loc@TMPa{\the\c@pgf@counta}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{parsenumber}{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{op}{multiply}{{\pgfmathresult}{\pgfplots@foreach@loc@TMPc}}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{op}{add}{{\pgfmathresult}{\pgfplots@foreach@loc@TMPa}}% \let\pgfplots@loc@TMPa=\pgfmathresult \pgfplotsforeachlogarithmicungrouped@finalizeresult% \let#3=\pgfmathresult - \pgfmathfloatexp@{\pgfplots@loc@TMPa}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{exp}{\pgfplots@loc@TMPa}% \pgfplotsforeachlogarithmicungrouped@finalizeresult% \let#2=\pgfmathresult % @@ -798,16 +841,16 @@ \def\pgfplotsforeachlogarithmicungrouped@finalizeresult{}% +\def\pgfplotsforeachlogarithmicmathid{float} + % defines % \pgfplots@foreach@loc@TMPa := log(firstintervalpt) % and % \pgfplots@foreach@loc@TMPb := log(secondintervalpt) \def\pgfplotsforeachlogarithmicungrouped@readdomain#1:#2\relax{% - \pgfmathfloatparsenumber{#1}% - \pgfmathfloatln@{\pgfmathresult}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{log}{#1}% \let\pgfplots@foreach@loc@TMPa=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \pgfmathfloatln@{\pgfmathresult}% + \pgfplotscoordmath{\pgfplotsforeachlogarithmicmathid}{log}{#2}% \let\pgfplots@foreach@loc@TMPb=\pgfmathresult } @@ -820,7 +863,7 @@ \def\pgfplots@logfileopen#1{% \immediate\write-1{PGFPlots: reading {#1}}% \pgfutil@ifundefined{tikzifexternalizingcurrent}{% - % version not up-to-date!? + % version not up-to-date or external lib not loaded? }{% % adjust the .dep file only if we are externalizing. % Otherwise, it may be overwritten by \pgfplotstableread @@ -851,15 +894,23 @@ \begingroup \c@pgf@counta=#2\relax \c@pgf@countb=#1\relax - \c@pgf@countc=\c@pgf@countb - \ifnum\c@pgf@counta=0 - \pgfplots@error{Can't compute \the\c@pgf@countb\space mod \the\c@pgf@counta\space -- this yields division by zero (second argument is zero)!}% - \edef\pgfmathresult{#1}% + \ifnum\c@pgf@counta=2 + \ifodd\c@pgf@countb + \def\pgfmathresult{1}% + \else + \def\pgfmathresult{0}% + \fi \else - \divide\c@pgf@countc by\c@pgf@counta - \multiply\c@pgf@countc by\c@pgf@counta - \advance\c@pgf@countb by-\c@pgf@countc - \edef\pgfmathresult{\the\c@pgf@countb}% + \c@pgf@countc=\c@pgf@countb + \ifnum\c@pgf@counta=0 + \pgfplots@error{Can't compute \the\c@pgf@countb\space mod \the\c@pgf@counta\space -- this yields division by zero (second argument is zero)!}% + \edef\pgfmathresult{#1}% + \else + \divide\c@pgf@countc by\c@pgf@counta + \multiply\c@pgf@countc by\c@pgf@counta + \advance\c@pgf@countb by-\c@pgf@countc + \edef\pgfmathresult{\the\c@pgf@countb}% + \fi \fi \pgfmath@smuggleone\pgfmathresult \endgroup @@ -967,6 +1018,81 @@ \def\pgfplots@strcmp@rest{#2}% }% +% Takes two dimensional cartesian coordinates #1,#2 and +% defines the macros #3 and #4 to contain the associated polar +% coordinates. +% +% #1: x +% #2: y +% #3: a macro which will be filled with the angle (in degrees) +% #4: a macro which will be filled with the radius +\def\pgfplotsmathcarttopol#1#2#3#4{% + \pgfplotsmathcarttopol@{#1}{#2}{#3}{#4}{default}% +}% +\def\pgfplotsmathcarttopolbasic#1#2#3#4{% + \pgfplotsmathcarttopol@{#1}{#2}{#3}{#4}{pgfbasic}% +}% +% #5: the math engine to use (\pgfplotscoordmath argument) +\def\pgfplotsmathcarttopol@#1#2#3#4#5{% + \begingroup + \pgfplotscoordmath{#5}{parsenumber}{#1}% + \let\pgfplots@x=\pgfmathresult + \pgfplotscoordmath{#5}{parsenumber}{#2}% + \let\pgfplots@y=\pgfmathresult + \pgfplotscoordmath{#5}{op}{veclen}{{\pgfplots@x}{\pgfplots@y}}% + \let\pgfplots@r=\pgfmathresult + \pgfplotscoordmath{#5}{if is}{\pgfplots@r}{0}{% + \pgfplotscoordmath{#5}{parsenumber}{0}% + }{% + \pgfplotscoordmath{#5}{op}{divide}{{\pgfplots@x}{\pgfplots@r}}% + \let\pgfplots@quot=\pgfmathresult + \pgfplotscoordmath{#5}{op}{acos}{{\pgfplots@quot}}% + % + \pgfplotscoordmath{#5}{if is}{\pgfplots@y}{-}{% + \let\pgfplots@acos=\pgfmathresult + \pgfplotscoordmath{#5}{parsenumber}{-1}% + \pgfplotscoordmath{#5}{op}{multiply}{{\pgfmathresult}{\pgfplots@acos}}% + }{}% + }% + \let\pgfplots@deg=\pgfmathresult + \xdef\pgfplots@glob@TMPa{\noexpand\def\noexpand#3{\pgfplots@deg}\noexpand\def\noexpand#4{\pgfplots@r}}% + \endgroup + \pgfplots@glob@TMPa +}% + +% Takes two dimensional polar coordinates #1,#2 and +% defines the macros #3 and #4 to contain the associated cartesian +% coordinates. +% +% #1: angle (in degrees) +% #2: radius +% #3: a macro which will be filled with the x value +% #4: a macro which will be filled with the y value +\def\pgfplotsmathpoltocart#1#2#3#4{% + \pgfplotsmathpoltocart@{#1}{#2}{#3}{#4}{default}% +}% +\def\pgfplotsmathpoltocartbasic#1#2#3#4{% + \pgfplotsmathpoltocart@{#1}{#2}{#3}{#4}{pgfbasic}% +}% +% #5: the math engine to use (\pgfplotscoordmath argument) +\def\pgfplotsmathpoltocart@#1#2#3#4#5{% + \begingroup + \pgfplotscoordmath{#5}{parsenumber}{#1}% + \let\pgfplots@deg=\pgfmathresult + \pgfplotscoordmath{#5}{parsenumber}{#2}% + \let\pgfplots@r=\pgfmathresult + \pgfplotscoordmath{#5}{op}{sin}{{\pgfplots@deg}}% + \pgfplotscoordmath{#5}{op}{multiply}{{\pgfplots@r}{\pgfmathresult}}% + \let\pgfplots@y=\pgfmathresult + \pgfplotscoordmath{#5}{op}{cos}{{\pgfplots@deg}}% + \pgfplotscoordmath{#5}{op}{multiply}{{\pgfplots@r}{\pgfmathresult}}% + \let\pgfplots@x=\pgfmathresult + \xdef\pgfplots@glob@TMPa{\noexpand\def\noexpand#3{\pgfplots@x}\noexpand\def\noexpand#4{\pgfplots@y}}% + \endgroup + \pgfplots@glob@TMPa +}% + + \pgfutil@ifundefined{pgfmathdeclarefunction}{% % BACKWARDS COMPATIBILITY: We have PGF 2.00 : @@ -1184,17 +1310,17 @@ % #4: code to invoke in case arg1>=arg2 % the iflessthan method will be invoked within local scopes. /pgfplots/fixed </.style={% - /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifdim##1pt<##2pt\relax##3\else##4\fi},% + /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifdim##1pt<##2pt\relax##3\else ##4\fi},% }, /pgfplots/fixed <, /pgfplots/fixed >/.style={% - /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifdim##1pt>##2pt\relax##3\else##4\fi},% + /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifdim##1pt>##2pt\relax##3\else ##4\fi},% }, /pgfplots/int </.style={% - /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifnum##1<##2\relax##3\else##4\fi},% + /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifnum##1<##2\relax##3\else ##4\fi},% }, /pgfplots/int >/.style={% - /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifnum##1>##2\relax##3\else##4\fi},% + /pgfplots/iflessthan/.code args={##1##2##3##4}{\ifnum##1>##2\relax##3\else ##4\fi},% }, /pgfplots/float </.style={% /pgfplots/iflessthan/.code args={##1##2##3##4}{% @@ -1303,12 +1429,136 @@ \let\pgfplots@auxwrite=\pgfplots@auxwrite@latex }% +% sorts three elements. +% +% #1,#2,#3 are three macros containing the input. +% On output, these macros are redefined to represent the sorted range. +% The values of these macros must be a <dimen>, followed by anything +% else (but no \relax please) +% +% Example: +% \def\A{10pt furthervalues} +% \def\B{4pt value of b} +% \def\C{1pt value of c} +% \pgfplotsutilsortthree\A\B\C +% -> +% \A={1pt value of c} +% \B={4pt value of b} +% \C={10pt furthervalues} +% +% It uses insertion sort. +\def\pgfplotsutilsortthree#1#2#3{% + \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax + \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#2\relax + \ifdim\pgf@xa>\pgf@xb + \let\pgfplots@loc@TMPa=#2% + \let#2=#1% + \let#1=\pgfplots@loc@TMPa% + \fi + % first two are sorted. + % + \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#2\relax + \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#3\relax + \let\pgfplots@loc@TMPa=#3% + \ifdim\pgf@xa>\pgf@xb + \let#3=#2% + \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax + \ifdim\pgf@xa>\pgf@xb + \let#2=#1% + \let#1=\pgfplots@loc@TMPa% + \else + \let#2=\pgfplots@loc@TMPa% + \fi + \fi + % ok. +}% + +% Like \pgfplotsutilsortthree, but for four elements (of the same +% form, see \pgfplotsutilsortthree). +% +% It uses insertion sort. +\def\pgfplotsutilsortfour#1#2#3#4{% + \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax + \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#2\relax + \ifdim\pgf@xa>\pgf@xb + \let\pgfplots@loc@TMPa=#2% + \let#2=#1% + \let#1=\pgfplots@loc@TMPa% + \fi + % first two are sorted. + % + \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#2\relax + \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#3\relax + \let\pgfplots@loc@TMPa=#3% + \ifdim\pgf@xa>\pgf@xb + \let#3=#2% + \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax + \ifdim\pgf@xa>\pgf@xb + \let#2=#1% + \let#1=\pgfplots@loc@TMPa% + \else + \let#2=\pgfplots@loc@TMPa% + \fi + \fi + % ok, first three are sorted. + % + \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#3\relax + \afterassignment\pgfplots@gobble@until@relax \pgf@xb=#4\relax + \let\pgfplots@loc@TMPa=#4% + \ifdim\pgf@xa>\pgf@xb + \let#4=#3% + \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#2\relax + \ifdim\pgf@xa>\pgf@xb + \let#3=#2% + \afterassignment\pgfplots@gobble@until@relax \pgf@xa=#1\relax + \ifdim\pgf@xa>\pgf@xb + \let#2=#1% + \let#1=\pgfplots@loc@TMPa% + \else + \let#2=\pgfplots@loc@TMPa% + \fi + \else + \let#3=\pgfplots@loc@TMPa% + \fi + \fi + % ok, first four are sorted. +}% + +% A variant of \pgfutil@ifnextchar which allows the '#' character +% inside of either '#2' or '#3'. +% +% It is slightly more expensive and relies on \t@pgfplots@tokc +\long\def\pgfplotsutil@ifnextchar#1#2#3{% + \let\pgfplotsutil@reserved@d=#1% + \t@pgfplots@tokc={#2}% + \edef\pgfplotsutil@reserved@a{\the\t@pgfplots@tokc}% + \t@pgfplots@tokc={#3}% + \def\pgfplotsutil@reserved@b{\the\t@pgfplots@tokc}% + \futurelet\pgfplotsutil@let@token\pgfplotsutil@ifnch} +\def\pgfplotsutil@ifnch{% + \ifx\pgfplotsutil@let@token\pgfplotsutil@sptoken + \let\pgfplotsutil@reserved@c\pgfplotsutil@xifnch + \else + \ifx\pgfplotsutil@let@token\pgfplotsutil@reserved@d + \let\pgfplotsutil@reserved@c\pgfplotsutil@reserved@a + \else + \let\pgfplotsutil@reserved@c\pgfplotsutil@reserved@b + \fi + \fi + \pgfplotsutil@reserved@c} +{% + \def\:{\global\let\pgfplotsutil@sptoken= } \: + \def\:{\pgfplotsutil@xifnch} \expandafter\gdef\: {\futurelet\pgfplotsutil@let@token\pgfplotsutil@ifnch} +} + \input pgfplotsliststructure.code.tex \input pgfplotsliststructureext.code.tex \input pgfplotsarray.code.tex +\input pgfplotsmatrix.code.tex \input pgfplotstableshared.code.tex \input pgfplotsdeque.code.tex \input pgfplotsbinary.code.tex +\input pgfplotsutil.verb.code.tex \usepgfplotslibrary{surfshading} diff --git a/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex new file mode 100644 index 00000000000..8590ba908d6 --- /dev/null +++ b/Master/texmf-dist/tex/generic/pgfplots/util/pgfplotsutil.verb.code.tex @@ -0,0 +1,97 @@ +%-------------------------------------------- +% +% Package pgfplots +% +% Copyright 2007-2011 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/>. +% +%-------------------------------------------- +% +% This source file contains helper utilities for verbatim character +% processing. + + +% +% USAGE: +% \beginpgfplotsverbatim[result/.code={\message{I read #1}}] +% <verbatim code> +% \endpgfplotsverbatim +% +% The verbatim code MUST start at the line after the ']' (or after +% \beginpgfplotsverbatim if there is no ']') +\def\beginpgfplotsverbatim{\pgfutil@ifnextchar[{\beginpgfplotsverbatim@}{\beginpgfplotsverbatim@[]}} +\def\beginpgfplotsverbatim@[#1]{% + \begingroup + \pgfqkeys{/pgfplots/verb}{#1}% + \pgfplots@verbatim@prepare@collect + \beginpgfplotsverbatim@gobbleuntileol +} + +\begingroup +\catcode`\|=0 +\catcode`\\=12 +|gdef|endpgfplotsverbatim{\endpgfplotsverbatim}% +|endgroup + +\expandafter\long\expandafter\def\expandafter\pgfplots@verbatim@collect@until\expandafter#\expandafter1\endpgfplotsverbatim{% + \begingroup + \pgfplots@verbatim@newline@handler + \xdef\pgfplots@glob@TMPa{#1}% + \endgroup + \pgfkeysgetvalue{/pgfplots/verb/result/.@cmd}\pgfplots@loc@TMPb + \global\let\pgfplots@glob@TMPb=\pgfplots@loc@TMPb + \endgroup% restore old catcodes etc. + \expandafter\pgfplots@glob@TMPb\expandafter{\pgfplots@glob@TMPa}\pgfeov% +}% + +\begingroup +\long\def\pgfplots@loc@TMPa{ +}%^^M}% +\catcode`\^^M=13 % +\gdef\beginpgfplotsverbatim@gobbleuntileol^^M{\pgfplots@verbatim@collect@until}% +\gdef\pgfplots@verbatim@newline@toHATHATJ{\def^^M{^^J}}% +\xdef\pgfplots@verbatim@newline@IDENTITY{\noexpand\long\noexpand\def\noexpand^^M{\pgfplots@loc@TMPa}}% +\endgroup + +\pgfkeys{ + /pgfplots/verb/result/.code={% + \pgfplots@error{Please use \string\beginpgfplotsverbatim[result/.code=....] to configure what to do with the content of \string\beginpgfplotsverbatim...\endpgfplotsverbatim\space (or use \string\pgfplotsset{verb/.cd,result/.code=....} in your preamble)}% + }, + /pgfplots/verb/newline handler/.is choice, + /pgfplots/verb/newline handler/to outfile/.code= + {\let\pgfplots@verbatim@newline@handler=\pgfplots@verbatim@newline@toHATHATJ}, + /pgfplots/verb/newline handler/identity/.code= + {\let\pgfplots@verbatim@newline@handler=\pgfplots@verbatim@newline@IDENTITY}, + /pgfplots/verb/newline handler/identity, +} + +\def\pgfplots@verbatim@prepare@collect{% + \def\do##1{\catcode`##1=12 }\dospecials + \catcode`\^^M=13 + \catcode`\^^J=12 + \catcode`\^^I=12 +}% + +\def\pgfplots@verbatim@restore@catcodes{% + \catcode`\^^M=5 + \catcode`\^^J=10 + \catcode`\^^I=10 + % this is important to get \scantokens to work: otherwise, it will + % eat up the ^^M chars: + \endlinechar=`\^^M + \newlinechar=\endlinechar +}% + +\endinput diff --git a/Master/texmf-dist/tex/latex/pgfplots/bugtracker.sty b/Master/texmf-dist/tex/latex/pgfplots/bugtracker.sty index 69f9cbddd6c..50130daaa8c 100644 --- a/Master/texmf-dist/tex/latex/pgfplots/bugtracker.sty +++ b/Master/texmf-dist/tex/latex/pgfplots/bugtracker.sty @@ -101,12 +101,7 @@ }% \def\bugtracker@collect@status@opt#1[#2][#3]{% \begingroup - \bugtrackerset{#3}% - \def\bugtracker@temp{#2}% - \ifx\bugtracker@temp\pgfutil@empty - \else - \bugtrackerset{status=#2}% - \fi + \bugtrackerset{#2,#3}% \expandafter\let\expandafter\bugtracker@temp\csname bugtracker@end@#1\endcsname \expandafter\long\expandafter\def\expandafter\bugtracker@collect@until\expandafter##\expandafter1\bugtracker@temp{\bugtracker@enqueue{#1}{##1}}% \bugtracker@prepare@collect @@ -236,13 +231,14 @@ prio/.initial=5, source line/.initial=, status/.is choice, - status/open/.initial= {\def\bugtracker@status{open}}, - status/closed/.initial= {\def\bugtracker@status{closed}}, - status/cancelled/.initial= {\def\bugtracker@status{cancelled}}, - status/partially/.initial= {\def\bugtracker@status{partially}}, + status/open/.code= {\def\bugtracker@status{open}}, + status/closed/.code= {\def\bugtracker@status{closed}}, + status/cancelled/.code= {\def\bugtracker@status{cancelled}}, + status/partially/.code= {\def\bugtracker@status{partially}}, status/-/.style= {/bugtracker/status/open}, status/+/.style= {/bugtracker/status/closed}, status/X/.style= {/bugtracker/status/cancelled}, + status=open, status order/open/.initial=0, status order/closed/.initial=10, status order/cancelled/.initial=7, @@ -256,10 +252,19 @@ \parindent=0pt \raggedright }, + % #1: a running index. + typeset id/.code={% + \begin{minipage}[t]{3cm}% + \raggedleft + %[\##1]\par + {\ttfamily \jobname.tex:\pgfkeysvalueof{/bugtracker/source line}} + \end{minipage} + }, typeset/.code 2 args={% \noindent \paragraph{% - \protect\llap{\normalfont\scriptsize [#2]\hspace{2em}}\protect\bugtrackerset{/bugtracker/typeset name={\pgfkeysvalueof{/bugtracker/name}}} + \protect\llap{\normalfont\scriptsize \protect\bugtrackerset{/bugtracker/typeset id=#2}\hspace{2em}}% + \protect\bugtrackerset{/bugtracker/typeset name={\pgfkeysvalueof{/bugtracker/name}}} % \##2 } [\bugtracker@status, Priority \pgfkeysvalueof{/bugtracker/prio}] @@ -270,8 +275,19 @@ #1% \par }% - {\scriptsize Entry in {\ttfamily \jobname.tex:\pgfkeysvalueof{/bugtracker/source line}}}% - }% + %{\scriptsize Entry in {\ttfamily \jobname.tex:\pgfkeysvalueof{/bugtracker/source line}}}% + },% + typeset minimal/.code={% + \ifvmode + \noindent + \fi + \href{file:\bugtracker@minimal@filename@}{[\textcolor{blue}{see \texttt{\filename}}]}% + \bugtracker@minimal@typeset@{#1}% + }, + .unknown/.code={% + \edef\bugtracker@tempkey{\noexpand\pgfkeysalso{/bugtracker/status=\pgfkeyscurrentname}}% + \bugtracker@tempkey + }, } \declarebugtrackeritem{feature}{10} @@ -285,6 +301,12 @@ } +\lstdefinestyle{minimalexample}{ + basicstyle=\ttfamily\footnotesize, + columns=fullflexible, +} + + % a % \begin{minimal} % \end{minimal} @@ -307,26 +329,21 @@ \IfFileExists{\bugtracker@minimal@filename@}{}{% \bugtracker@minimal@create{#1}% }% + \bugtracker@minimal@typeset{#1}% + \end{minimal}% +}% +\long\def\bugtracker@minimal@typeset#1{% \begingroup + \pgfplotscommandtostring\bugtracker@minimal@filename@\filename \bugtracker@restore@catcodes \edef\bugtracker@temp##1{% - \bugtracker@bslash begin{lstlisting}% + \bugtracker@bslash begin{lstlisting}[style=minimalexample]% ##1% \bugtracker@bslash end{lstlisting}% }% - \expandafter\bugtracker@minimal@typeset\expandafter{\bugtracker@temp{#1}}% + \def\bugtracker@temp@##1{\pgfkeysvalueof{/bugtracker/typeset minimal/.@cmd}{##1}\pgfeov}% + \expandafter\bugtracker@temp@\expandafter{\bugtracker@temp{#1}}% \endgroup - \end{minimal}% -}% -\long\def\bugtracker@minimal@typeset#1{% - \ifvmode - \noindent - \fi - \href{file:\bugtracker@minimal@filename@}{% - \vbox{% - \bugtracker@minimal@typeset@{#1}% - }% - }% }% \long\def\bugtracker@minimal@typeset@#1{% \scantokens{#1}% diff --git a/Master/texmf-dist/tex/latex/pgfplots/libs/tikzlibrarypgfplots.clickable.code.tex b/Master/texmf-dist/tex/latex/pgfplots/libs/tikzlibrarypgfplots.clickable.code.tex index a7df35d24c3..755a4089b0a 100644 --- a/Master/texmf-dist/tex/latex/pgfplots/libs/tikzlibrarypgfplots.clickable.code.tex +++ b/Master/texmf-dist/tex/latex/pgfplots/libs/tikzlibrarypgfplots.clickable.code.tex @@ -20,8 +20,122 @@ % %-------------------------------------------- +\pgfutil@ifundefined{pgfplotsset}{% + \PackageError{pgfplots}{Sorry, \string\usetikzlibrary{pgfplots.clickable} needs to hook into PGFPlots routines, disabling it -- please provide the command AFTER \string\usepackage{pgfplots}}{}% + \endinput +}{% +}% + + \edef\pgfplotscatcodeDQ{\the\catcode`\"}% \catcode`\"=12 +\newif\ifpgfplots@clickable +\newif\ifpgfplots@annot@printable + +\pgfqkeys{/pgfplots}{ + @backgroundpath@hook/.add code={}{\pgfplots@create@clickable@plotarea@hook}, + clickable/.is if=pgfplots@clickable, + clickable/.default=true, + clickable=true, + /pgfplots/execute at begin axis/.add={}{% + \pgfplots@clickable@beginaxis + },% + clickable coords code/.code={% + \def\pgfplots@clickable@init@@{% + \pgfplots@clickable@startcoordcollect + \pgfplotsset{% + /pgfplots/execute at end plot@@/.add={}{% + \pgfplots@clickable@endcoordcollect + }, + /pgfplots/execute for finished point/.add={}{% + \pgfplots@clickable@coordcollect{#1}% + },% + }% + \let\pgfplots@clickable@init@@=\relax + }% + \pgfkeysalso{% + /pgfplots/execute at begin plot@@/.add={}{% + \pgfplots@clickable@init@@ + }, + }% + }, + clickable coords/.style={ + clickable coords code={\def\pgfplotsretval{#1}}, + }, + clickable coords/.default={(xy)}, + annot/js fillColor/.initial={["RGB",1,1,.855]}, + annot/point format/.initial={(\%.1f, \%.1f)}, + annot/point format 3d/.initial={(\%.1f, \%.1f, \%.1f)}, + annot/slope format/.initial={\%.1f*x \%+.1f}, + annot/printable/.is if=pgfplots@annot@printable, + annot/printable/.default=true, + % Available are: +% Times-Roman font.Times +% Times-Bold font.TimesB +% Times-Italic font.TimesI +% Times-BoldItalic font.TimesBI +% Helvetica font.Helv +% Helvetica-Bold font.HelvB +% Helvetica-Oblique font.HelvI +% Helvetica-BoldOblique font.HelvBI +% Courier font.Cour +% Courier-Bold font.CourB +% Courier-Oblique font.CourI +% Courier-BoldOblique font.CourBI +% Symbol font.Symbol +% ZapfDingbats font.ZapfD + annot/font/.initial={font.Times}, +% annot/font={"CMR10"}, + annot/textSize/.initial=11, + annot/richtext/.initial=true, + annot/richtext/.default=true, + annot/popup size generic/.initial=auto, + annot/popup size snap/.initial=auto, + clickable coords size/.style={ + /pgfplots/annot/popup size snap={#1}, + }, + annot/popup size/.style={ + /pgfplots/annot/popup size generic={#1}, + /pgfplots/annot/popup size snap={#1}, + }, + annot/width/.initial=, + annot/height/.initial=, + annot/jsname/.initial=, + annot/dim/.initial=2, + annot/xmin/.initial=, + annot/xmax/.initial=, + annot/ymin/.initial=, + annot/ymax/.initial=, + annot/zmin/.initial=, + annot/zmax/.initial=, + annot/xscale/.initial=, % "log" or "linear" or "log:<basis>" + annot/yscale/.initial=, + annot/zscale/.initial=, + annot/minminmin/.initial=, + annot/xaxis/.initial=, + annot/yaxis/.initial=, + annot/zaxis/.initial=, + % format: + % [<plot1coords>, <plot2coords>,...,<plotncoords>] + % with <ploticoords> = [<coord>,<coord>,....,<coord>] + % and <coord> = [ <x>, <y>, "text" ] + % for example: + % [[[0.0e0,-4.0849609e-1,": (0,0)"],[1.25e-1,-3.7412109e-1,": (3,1)"],[2.5e-1,-3.0849609e-1,": (2,1)"],[3.75e-1,-2.1162109e-1,": (3,3)"],[5.0e-1,-8.3496094e-2,": (1,1)"],[6.25e-1,7.5878906e-2,": (3,5)"],[7.5e-1,2.6650391e-1,": (2,3)"],[8.75e-1,4.8837891e-1,": (3,7)"],[1.0e0,7.4150391e-1,": (0,1)"]]] + annot/collected plots/.initial=, + annot/snap dist/.initial=4, + every semilogy axis/.append style={/pgfplots/annot/point format={(\%.1f, \%.1e)}}, + every semilogx axis/.append style={/pgfplots/annot/point format={(\%.1e, \%.1f)}}, + every loglog axis/.append style={/pgfplots/annot/point format={(\%.1e, \%.1e)}}, +} + +\pgfkeysifdefined{/pgfplots/annot/xy pattern}{% +}{% + \pgfkeyssetvalue{/pgfplots/annot/xy pattern}{(xy)}% +}% +\pgfkeysifdefined{/pgfplots/annot/no such coord}{% +}{% + \pgfkeyssetvalue{/pgfplots/annot/no such coord}{--}% +}% % ATTENTION: % The eforms package creates \begin{Form} and \end{Form} in \AtBeginDocument and \AtEndDocument! @@ -51,12 +165,41 @@ % Work-around for a bug in \begindljs of acrotex: % if " is active, \begindljs will be wrong. -\def\begindljs +%-------------------------------------------------- +% HAS BEEN FIXED IN THE MEANTIME +% \def\begindljs +% {% +% \iwvo{\string\begingroup} +% {\uccode`c=`\%\uppercase{\iwvo{\string\obeyspaces\string\obeylines\string\global\string\let\string^\string^M=\string\jsR c}}} +% {\escapechar=-1 \lccode`C=`\%\lowercase{\iwvo{\string\\catcode`\string\\"=12C}}} +% } +%-------------------------------------------------- + +% Bugfix to fix incompatibility when '<' and '>' are active (as for +% \usepackage[spanish]{babel}: +\def\write@objs@BUGGY +{% + \iwvo{\begingroup} + {\lccode`C=`\%\lowercase{\iwvo{\string\ccpdftex C}}} + {\lccode`C=`\%\lowercase{\iwvo{\string\input{dljscc.def}C\the\dljsobjtoks}}} + \iwvo{\endgroup} + \iwvo{\string\endinput}% +} +\def\write@objs@CORRECT {% - \iwvo{\string\begingroup} - {\uccode`c=`\%\uppercase{\iwvo{\string\obeyspaces\string\obeylines\string\global\string\let\string^\string^M=\string\jsR c}}} - {\escapechar=-1 \lccode`C=`\%\lowercase{\iwvo{\string\\catcode`\string\\"=12C}}} + \iwvo{\begingroup} + \iwvo{\string\catcode`\string\<=12 } + \iwvo{\string\catcode`\string\>=12 } + {\lccode`C=`\%\lowercase{\iwvo{\string\ccpdftex C}}} + {\lccode`C=`\%\lowercase{\iwvo{\string\input{dljscc.def}C\the\dljsobjtoks}}} + \iwvo{\endgroup} + \iwvo{\string\endinput}% } +\pgfutil@ifundefined{write@objs}{}{% + \ifx\write@objs\write@objs@BUGGY + \let\write@objs=\write@objs@CORRECT + \fi +}% \def\pgfplots@clickable@no{0} @@ -72,10 +215,18 @@ \gdef\pgfplotsHASH{#}% \catcode`\%=12 \gdef\pgfplotsPERCENT{%}} +% this here is a bugfix to resolve an incompatibility between insdljs +% an \usepackage[spanish]{babel}: +\def\@roman#1{\romannumeral #1}% + % FIXME : write this stuff DIRECTLY into a pdf using \pdfobj! I don't % need ANY TeX code inside of the methods. Maybe I can even use some % sort of "include external .js file" command instead of /S /Javascript /JS % +% FIXME : collect this stuff using \beginpgfplotsverbatim ... +% \endpgfplotsverbatim to avoid the \catcode problems! Who knows +% whether there are more of them... +% % FIXME : using '\jobname' here produces a bug in insdljs :-( % The problem: insdljs creates a macro named 'dlsj\jobname' or % something like that, but if fails to use '\csname' properly. So: @@ -276,118 +427,562 @@ function sprintf( ) { } /*********************************************************************************/ +% see https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance -var lastMouseX = -1; -var lastMouseY = -1; +var lastPoint = null; var posOnMouseDownX = -1; var posOnMouseDownY = -1; // preallocation. -var tmpArray1 = new Array(2); -var tmpArray2 = new Array(2); +var tmpArray1 = new Array(3); +var tmpArray2 = new Array(3); -/** - * Takes an already existing TextField, changes its value to \c value and places it at (x,y). - * Additional \c displayOpts will be used to format it. - */ -function initTextField( x,y, textField, displayOpts, value ) +var clickablePatternForXY="\pgfkeysvalueof{/pgfplots/annot/xy pattern}"; +var clickableStringNoSuchCoord = "\pgfkeysvalueof{/pgfplots/annot/no such coord}"; + +var nan = Number.NaN; +var NAN = Number.NaN; +var inf = Number.POSITIVE_INFINITY; +var INF = Number.POSITIVE_INFINITY; + +var pgfplotsAxisRegistry = new Object(); +pgfplotsAxisRegistry["rectangle"] = function( axisAnnotObj ) { return new PGFPlotsAxis( axisAnnotObj ); } +pgfplotsAxisRegistry["ternary"] = function( axisAnnotObj ) { return new PGFPlotsTernaryAxis( axisAnnotObj ); } + +function PGFPlotsClassExtend( child, super ) { - textField.value = ""+value; - var R = textField.rect; - R[0] = x; - R[1] = y; - R[2] = R[0] + displayOpts.textSize/2*Math.max( 5,value.length ); - R[3] = R[1] - 1.5*displayOpts.textSize; - textField.rect = R; - textField.textFont = displayOpts.textFont; - textField.textSize = displayOpts.textSize; - textField.fillColor = displayOpts.fillColor;//["RGB",1,1,.855]; - textField.doNotSpellCheck = true; - textField.readonly = true; - if( displayOpts.printable ) - textField.display = display.visible; - else - textField.display = display.noPrint; + for (var property in super.prototype) { + if (typeof child.prototype[property] == "undefined") + child.prototype[property] = super.prototype[property]; + } + return child; } -/** - * Changes all required Field values of \c plotRegionField, inserts the proper - * value and displays it at the pdf positions (x,y) . - * - * @param plotRegionField a reference to a Field object. - * @param x the x coordinate where the annotation shall be placed and which is used to determine - * the annotation text. - * @param y the corresponding y coord. - * @param axisAnnotObj An object containing axis references. - * @param displayOpts An object for display flags. - * @param[out] retCoords will be filled with the point in axis coordinates. - */ -function placeAnnot( plotRegionField, x,y, textField, axisAnnotObj, displayOpts, retCoords ) +function PGFPlotsCreateAxisFor( axisAnnotObj, docObject ) { - // Get and modify bounding box. The mouse movement is only accurate up to one point - // (mouseX and mouseY are integers), so the bounding box should be an integer as well. - var R = plotRegionField.rect; - R[0] = Math.round(R[0]); - R[1] = Math.round(R[1]); - R[2] = Math.round(R[2]); - R[3] = Math.round(R[3]); - plotRegionField.rect= R; - - var w = R[2] - R[0]; - var h = R[1] - R[3]; - - // compute position 0 <= mx <= 1, 0<= my <= 1 relative to lower(!) left corner. - var mx = x - R[0]; - var my = h - (R[1] - y); - - var unitx = mx / w; - var unity = my / h; - - var realx = axisAnnotObj.xmin + unitx * (axisAnnotObj.xmax - axisAnnotObj.xmin); - var realy = axisAnnotObj.ymin + unity * (axisAnnotObj.ymax - axisAnnotObj.ymin); - - var transformedCoordx = realx; - var transformedCoordy = realy; - - if( axisAnnotObj.xscale.length >= 3 && axisAnnotObj.xscale.substr(0,3) == "log" ) { - if( axisAnnotObj.xscale.length > 4 ) // log:<basis> - realx = realx * Math.log( axisAnnotObj.xscale.substr(4) ); - else { - // pgfplots handles log plots base e INTERNALLY, but uses base 10 for display. - // convert to base 10: - transformedCoordx = realx / Math.log(10); - } - realx = Math.exp(realx); + var ret = null; + if( pgfplotsAxisRegistry[axisAnnotObj.axisType] ) { + ret = pgfplotsAxisRegistry[axisAnnotObj.axisType](axisAnnotObj); + ret.docObject = docObject; } - if( axisAnnotObj.yscale.length >= 3 && axisAnnotObj.yscale.substr(0,3) == "log" ) { - if( axisAnnotObj.yscale.length > 4 ) // log:<basis> - realy = realy * Math.log( axisAnnotObj.yscale.substr(4) ); + return ret; +} + +function ClickableCoord(canvasx,canvasy, realx,realy, text) +{ + this.dim=2; + this.canvasx=canvasx; + this.canvasy=canvasy; + this.realx=realx; + this.realy=realy; + this.text=text; +} +ClickableCoord.prototype = +{ + dim : 0, + canvasx : 0, + canvasy : 0, + realx : 0, + realy : 0, + realz : 0, + text : "", + sourcePlotIdx : -1, + sourceCoordIdx : -1, + + isSnapToNearestCoord : function() { + return this.sourcePlotIdx >= 0; + }, + + /** + * Takes an already existing TextField, changes its value to point.text and places it at (x,y). + * Additional \c displayOpts will be used to format it. + */ + draw : function( docObject, canvas, displayOpts ) + { + var charsX = 1; + var charsY = 1.5; + var popupSize = ( this.isSnapToNearestCoord() ? displayOpts.popupSizeSnap : displayOpts.popupSizeGeneric ); + if( popupSize == "auto" ) { + charsX = Math.max( 5,this.text.length )/2; + + } else { + var commaOff = popupSize.indexOf( "," ); + if( commaOff >= 0 ) { + charsX = popupSize.substring( 0, commaOff ); + charsY = popupSize.substring( commaOff+1 ); + } else + charsX = popupSize; + } + // console.println( this.text ); + + if( !displayOpts.richText ) + canvas.value = ""+this.text; else { - // pgfplots handles log plots base e INTERNALLY, but uses base 10 for display. - // convert to base 10: - transformedCoordy = realy / Math.log(10); + canvas.richText=true; + var xmlValue = "<?xml version=\"1.0\"?>"+ + "<body> " + % xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:xfa=\"http://www.xfa.org/schema/xfa-data/1.0/\" xfa:APIVersion=\"Acrobat:9.3.2\" xfa:spec=\"2.0.2\">" + + %"<p>"+ + "<span>"+ % style="font-size:9.0pt;text-align:left;color:#7E0000;font-weight:normal;font-style:normal;font-family:Helvetica,sans-serif;font-stretch:normal" + this.text + + "</span>"+ + %"</p>"+ + "</body>"; + canvas.richValue = util.xmlToSpans(xmlValue); +% debug helper: +% spans= new Array(); +% spans[0] = new Object(); +% spans[0].text = this.text; +% spans[0].textColor = ["RGB",0.5,0,0]; +% canvas.richValue = spans; +% console.println(util.spansToXML(canvas.richValue)); + } + var R = canvas.rect; + R[0] = this.canvasx; + R[1] = this.canvasy; + R[2] = R[0] + charsX*displayOpts.textSize; + R[3] = R[1] - charsY*displayOpts.textSize; + canvas.rect = R; + canvas.textFont = displayOpts.textFont; + canvas.textSize = displayOpts.textSize; + canvas.multiline = true; + canvas.fillColor = displayOpts.fillColor;//["RGB",1,1,.855]; + canvas.doNotSpellCheck = true; + canvas.readonly = true; + if( displayOpts.printable ) + canvas.display = display.visible; + else + canvas.display = display.noPrint; + + var mark = docObject.getField( canvas.name + "mark"); + if( mark ) { + R = mark.rect; + R[0]=this.canvasx-2; + R[1]=this.canvasy-2; + R[2]=R[0]+4; + R[3]=R[1]+4; + mark.value=""; + mark.rect = R; + mark.fillColor = ["RGB",0,0,0]; + mark.doNotSpellCheck = true; + mark.readonly = true; + if( displayOpts.printable ) + mark.display = display.visible; + else + mark.display = display.noPrint; } - realy = Math.exp(realy); } +} + + + +function PGFPlotsAxis(properties) { + for (var property in properties) + this[property] = properties[property]; +} +PGFPlotsAxis.prototype = { + /** + * @return an instance of ClickableCoord or null. + * The returned canvas coordinates are NOT yet initialised. + */ + findNearest : function( point, rect, startSearchAt ) + { + var actx; + var acty; + var minSoFar = 1e324; + var minPtSoFar = null; + var tmpPt = null; + var dist =0; + var startPlot = 0; + var startCoord = 0; + var collectedPlots = this.collectedPlots; + if( point.dim > 2 ) + tmpPt = new ClickableCoord(0,0,0,0,""); + + if( startSearchAt != null && startSearchAt.isSnapToNearestCoord() ) { + startPlot = startSearchAt.sourcePlotIdx; + startCoord= startSearchAt.sourceCoordIdx; + } + for( var i = startPlot; i<collectedPlots.length; ++i ) { + for( var j = startCoord; j<collectedPlots[i].length; ++j ) { + if( point.dim == 2 ) { + actx = collectedPlots[i][j][0] - point.realx; + acty = collectedPlots[i][j][1] - point.realy; + } else { + // dim > 2 should be compared using CANVAS coordinates, not real coordinates: + tmpPt.realx = collectedPlots[i][j][0]; + tmpPt.realy = collectedPlots[i][j][1]; + if( collectedPlots[i][j].length-1 >= 3 ) + tmpPt.realz = collectedPlots[i][j][2]; + else + tmpPt.realz = 0; + this.computeCanvasFor( tmpPt, rect ); + actx = tmpPt.canvasx - point.canvasx; + acty = tmpPt.canvasy - point.canvasy; + } + dist = actx*actx + acty*acty; + if( dist < minSoFar ) { + if( minPtSoFar == null ) + minPtSoFar = new ClickableCoord(-1,-1,0,0,""); + minPtSoFar.realx = collectedPlots[i][j][0]; + minPtSoFar.realy = collectedPlots[i][j][1]; + if( collectedPlots[i][j].length-1 >= 3 ) + minPtSoFar.realz = collectedPlots[i][j][2]; + else + minPtSoFar.realz = 0; + minPtSoFar.text= collectedPlots[i][j][ collectedPlots[i][j].length-1 ]; + minPtSoFar.sourcePlotIdx = i; + minPtSoFar.sourceCoordIdx = j; + minSoFar = dist; + } + } + } + if( minPtSoFar ) + this.computeCanvasFor(minPtSoFar,rect); + return minPtSoFar; + }, + + /** + * Returns either a ClickableCoord describing the point under the mouse cursor or a snap--to--nearest result near the mouse cursor. + * + * @param this the axis in which we shall search. + * @param x,y the input canvas coordinates + * @param canvas a pointer to the Drawing object (TextField) whose 'rect' field is the drawing canvas. + * @param startSearch either null or an instance of ClickableCoord for which isSnapToNearestCoord() returns true. + * If it is not null, the next matching point *after* it will be returned (or null if there is no matching snap--to--nearest coord after it). + * @return an instance of ClickableCoord or null in case the startSearch!=null and there are no further matches. + */ + findClickableCoord : function( x,y, canvas, startSearch ) + { + // Get and modify bounding box. The mouse movement is only accurate up to one point + // (mouseX and mouseY are integers), so the bounding box should be an integer as well. + var rect = canvas.rect; // rect = [ mincanvasx mincanvasy maxcanvasx maxcanvasy ]; relative to upper left corner + rect[0] = Math.round(rect[0]); + rect[1] = Math.round(rect[1]); + rect[2] = Math.round(rect[2]); + rect[3] = Math.round(rect[3]); + canvas.rect= rect; + + var realx=-1; + var realy=-1; + if( this.dim == 2 ) { + // the following code inverts computeCanvasFor(): + var minminminx = rect[0] + this.minminmin[0]; + var minminminy = rect[3] + this.minminmin[1]; + var vecx = x - minminminx; + var vecy = y - minminminy; + var A = [ + [this.xaxis[0], this.yaxis[0]], + [this.xaxis[1], this.yaxis[1]] ]; + var b = [ vecx, vecy ]; + + var rowpermut = [0, 1]; + if( Math.abs(A[0][0]) < 0.0001 ) { + rowpermut[0] = 1; + rowpermut[1] = 0; + } + var pivot = -A[rowpermut[1]][0] / A[rowpermut[0]][0]; + var unity = (b[rowpermut[1]] + pivot*b[rowpermut[0]]) / (A[rowpermut[1]][1] + pivot * A[rowpermut[0]][1]); + var unitx = (b[rowpermut[0]] - A[rowpermut[0]][1] * unity) / A[rowpermut[0]][0]; + + realx = this.xmin + unitx * (this.xmax - this.xmin); + realy = this.ymin + unity * (this.ymax - this.ymin); + //console.println( "unitx = " + unitx + "; unity " + unity ); + } + + + var point = new ClickableCoord( x,y, realx, realy, clickablePatternForXY); + point.dim = this.dim; + + if( startSearch && !startSearch.isSnapToNearestCoord() ) { + console.println( "WARNING: startSearch().isSnapToNearestCoord() has been expected!" ); + startSearch = null; + } + + var nearestClickableCoord = this.findNearest( point, rect, startSearch ); + if( nearestClickableCoord ) { + if( getDist( point.canvasx,point.canvasy, nearestClickableCoord.canvasx, nearestClickableCoord.canvasy ) < this.snapDist ) { + return nearestClickableCoord; + } + } + if( startSearch ) + point = null; + if( this.dim > 2 ) { // we didn't find a snap--to--nearest point. + point.text = clickableStringNoSuchCoord; + } + + return point; + }, + + /** + * Takes point's real coordinates and computes its canvas coordinates. The result is written back into \c point. + */ + computeCanvasFor : function( point, rect) + { + var unitx = (point.realx - this.xmin) / (this.xmax -this.xmin); + var unity = (point.realy - this.ymin) / (this.ymax -this.ymin); + + point.canvasx = rect[0] + this.minminmin[0] + this.xaxis[0] * unitx + this.yaxis[0] * unity; + point.canvasy = rect[3] + this.minminmin[1] + this.xaxis[1] * unitx + this.yaxis[1] * unity; + if( this.dim >= 3 ) { + var unitz = (point.realz - this.zmin) / (this.zmax -this.zmin); + point.canvasx += this.zaxis[0] * unitz; + point.canvasy += this.zaxis[1] * unitz; + } + }, + + handleDragNDrop : function( formName, displayOpts ) + { + if( this.dim == 3 ) + return; + + var result = this.docObject.getField( formName + "-result"); + var result2 = this.docObject.getField( formName + "-result2"); + var resultmark = this.docObject.getField( formName + "-resultmark"); + var result2mark = this.docObject.getField( formName + "-result2mark"); + var slope = this.docObject.getField( formName + "-slope" ); + if( !result ) { + console.println( "WARNING: there is no TextField \"" + formName + "-result\" to display results for interactive element \"" + formName + "\""); + return; + } + + var a = this.docObject.getField(formName); + if( ! a ) { + console.println( "Warning: there is no form named \"" + formName + "\"" ); + return; + } + // dragging the mouse results in slope computation: + // placeClickableCoord shows the endpoint coords and returns the (transformed) coordinates into tmpArray1 and tmpArray2: + this.placeClickableCoord( + this.findClickableCoord( posOnMouseDownX, posOnMouseDownY, a, null ), + result, displayOpts, tmpArray1 ); + this.placeClickableCoord( + this.findClickableCoord( mouseX, mouseY, a, null ), + result2, displayOpts, tmpArray2 ); + + var m = ( tmpArray2[1] - tmpArray1[1] ) / ( tmpArray2[0] - tmpArray1[0] ); + var n = tmpArray1[1] - m * tmpArray1[0]; + + var slopePoint = new ClickableCoord( + 0.5 * ( mouseX + posOnMouseDownX ), + 0.5 * ( mouseY + posOnMouseDownY ), + -1,-1, + sprintf( displayOpts.slopeFormat, m, n )); + slopePoint.draw( + this.docObject, + slope, + displayOpts ); + + // FIXME! these document rights seem to forbid modifications to annotations, although they work for text fields!? + //var lineobj = this.getAnnot( a.page, formName + '-line' ); + //console.println( 'lineobj = ' + lineobj ); + //lineobj.points = [[mouseX,mouseY],[posOnMouseDownX,posOnMouseDownY]]; + //lineobj.display = display.visible; + }, + + handleClick : function( formName, displayOpts ) + { + var result = this.docObject.getField( formName + "-result"); + var result2 = this.docObject.getField( formName + "-result2"); + var resultmark = this.docObject.getField( formName + "-resultmark"); + var result2mark = this.docObject.getField( formName + "-result2mark"); + var slope = this.docObject.getField( formName + "-slope" ); + if( !result ) { + console.println( "WARNING: there is no TextField \"" + formName + "-result\" to display results for interactive element \"" + formName + "\""); + return; + } + result2.display = display.hidden; + slope.display = display.hidden; + result2mark.display = display.hidden; + + var a = this.docObject.getField(formName); + if( ! a ) { + console.println( "Warning: there is no form named \"" + formName + "\"" ); + return; + } + + var point = null; + var bSearchPoint = true; + if( lastPoint ) { + if( getDist( mouseX,mouseY, lastPoint.canvasx,lastPoint.canvasy) < this.snapDist ) { + if( lastPoint.isSnapToNearestCoord() ) + ++lastPoint.sourceCoordIdx; + else + bSearchPoint = false; + + } else + lastPoint = null; // no search restriction. + } + if( bSearchPoint ) + point = this.findClickableCoord( mouseX, mouseY, a, lastPoint ); + + lastPoint = point; + + // clicking twice onto the same point hides it: + if( point == null ) { + result.display = display.hidden; + resultmark.display = display.hidden; + return; + } -// console.println( "w = " + w + "; h = " + h ); -// console.println( "mx = " + mx + "; my = " + my ); -// console.println( "unitx = " + unitx + "; unity " + unity ); + this.placeClickableCoord( + point, + result, displayOpts, null ); + }, - initTextField( x,y, textField, displayOpts, - //util.printf( "(\pgfplotsPERCENT.2f,\pgfplotsPERCENT.2f)", realx,realy ) - sprintf( displayOpts.pointFormat, realx,realy) ); + /** + * Changes all required Field values of \c plotRegionField, inserts the proper + * value and displays it at the pdf positions (x,y) . + * + * @param plotRegionField a reference to a Field object. + * @param x the x canvas coordinate where the annotation shall be placed and which is used to determine + * the annotation text. + * @param y the corresponding y coord. + * @param axis An object containing axis references. + * @param displayOpts An object for display flags. + * @param[out] retCoords will be filled with the point in axis coordinates (should have length axis.dim). + */ + placeClickableCoord : function( point, textField, displayOpts, retCoords ) + { + var transformedCoordx = point.realx; + var transformedCoordy = point.realy; + + if( this.xscale.length >= 3 && this.xscale.substr(0,3) == "log" ) { + if( this.xscale.length > 4 ) // log:<basis> + point.realx = point.realx * Math.log( this.xscale.substr(4) ); + else { + // pgfplots handles log plots base e INTERNALLY, but uses base 10 for display. + // convert to base 10: + transformedCoordx = point.realx / Math.log(10); + } + point.realx = Math.exp(point.realx); + } + if( this.yscale.length >= 3 && this.yscale.substr(0,3) == "log" ) { + if( this.yscale.length > 4 ) // log:<basis> + point.realy = point.realy * Math.log( this.yscale.substr(4) ); + else { + // pgfplots handles log plots base e INTERNALLY, but uses base 10 for display. + // convert to base 10: + transformedCoordy = point.realy / Math.log(10); + } + point.realy = Math.exp(point.realy); + } + if( this.dim > 2 ) { + if( this.zscale.length >= 3 && this.zscale.substr(0,3) == "log" ) { + if( this.zscale.length > 4 ) // log:<basis> + point.realz = point.realz * Math.log( this.zscale.substr(4) ); + else { + // pgfplots handles log plots base e INTERNALLY, but uses base 10 for display. + // convert to base 10: + transformedCoordz = point.realz / Math.log(10); + } + point.realz = Math.exp(point.realz); + } + } + + // replace the text substring "(xy)" with the actual coordinates: + var coordOff = point.text.indexOf(clickablePatternForXY); + if( coordOff >= 0 ) { + point.text = + point.text.substring( 0, coordOff ) + + sprintf( displayOpts.pointFormat, point.realx,point.realy,point.realz) + + point.text.substr( coordOff+clickablePatternForXY.length ); + } + point.draw( this.docObject, textField, displayOpts ); + + if( retCoords ) { + retCoords[0] = transformedCoordx; + retCoords[1] = transformedCoordy; + if( this.dim > 2 ) + retCoords[2] = transformedCoordz; + } - if( retCoords ) { - retCoords[0] = transformedCoordx; - retCoords[1] = transformedCoordy; } } +function PGFPlotsTernaryAxis(properties) { + PGFPlotsAxis.call(this,properties); +} +PGFPlotsTernaryAxis.prototype = { + findClickableCoord : function( x,y, canvas, startSearch ) + { + // Get and modify bounding box. The mouse movement is only accurate up to one point + // (mouseX and mouseY are integers), so the bounding box should be an integer as well. + var rect = canvas.rect; // rect = [ mincanvasx mincanvasy maxcanvasx maxcanvasy ]; relative to lower left corner + rect[0] = Math.round(rect[0]); + rect[1] = Math.round(rect[1]); + rect[2] = Math.round(rect[2]); + rect[3] = Math.round(rect[3]); + canvas.rect= rect; + + var ternaryScale = 1 / ( rect[2] - rect[0] ); + var X = ( x - rect[0] ) * ternaryScale; + var Y = ( y - rect[3] ) * ternaryScale; + + var realx = 1.15470053837925 * Y; // 2/sqrt(3) + var realz = X - 0.5 * realx; + var realy = 1 - realx - realz; + + if( realx < 0 \pgfplotsVERTBAR\pgfplotsVERTBAR realy < 0 \pgfplotsVERTBAR\pgfplotsVERTBAR realz < 0 ) + return null; + + var point = new ClickableCoord( x,y, realx, realy, clickablePatternForXY); + point.realz = realz; + point.dim = this.dim; + + if( startSearch && !startSearch.isSnapToNearestCoord() ) { + console.println( "WARNING: startSearch().isSnapToNearestCoord() has been expected!" ); + startSearch = null; + } + + var nearestClickableCoord = this.findNearest( point, rect, startSearch ); + if( nearestClickableCoord ) { + if( getDist( point.canvasx,point.canvasy, nearestClickableCoord.canvasx, nearestClickableCoord.canvasy ) < this.snapDist ) { + return nearestClickableCoord; + } + } + if( startSearch ) + point = null; + + return point; + }, + + /** + * Takes point's real coordinates and computes its canvas coordinates. The result is written back into \c point. + */ + computeCanvasFor : function( point, rect) + { + var unitx = (point.realx - this.xmin) / (this.xmax -this.xmin); + var unity = (point.realy - this.ymin) / (this.ymax -this.ymin); + var unitz = (point.realz - this.zmin) / (this.zmax -this.zmin); + + var ternaryScale = ( rect[2] - rect[0] ); + point.canvasx = rect[0] + ternaryScale* 0.5 * (unitx + 2 * unitz); + point.canvasy = rect[3] + ternaryScale* 0.866025403784* unitx; // sqrt(3)/2 + }, +} +PGFPlotsClassExtend( PGFPlotsTernaryAxis, PGFPlotsAxis ); + + + +function getVecLen( t1,t2 ) { + return Math.sqrt( t1*t1 + t2*t2); +} +function getDist( x1,y1, x2,y2 ) { + var t1 = (x1-x2); + var t2 = (y1-y2); + return getVecLen(t1,t2); +} + +function axisMouseDown(formName ) +{ + posOnMouseDownX = mouseX; + posOnMouseDownY = mouseY; +} + /** * @param formName the name of the clickable button. It is expected to be as large as the underlying plot. - * @param axisAnnotObj an object with the fields + * @param axis an object with the fields * - xmin, xmax * - ymin, ymax * - xscale, yscale @@ -399,67 +994,23 @@ function placeAnnot( plotRegionField, x,y, textField, axisAnnotObj, displayOpts, * ["RGB",1,1,.855] * - textFont / textSize */ -function processAnnotatedPlot(formName, axisAnnotObj, displayOpts, bMouseUp ) +function axisMouseUp(formName, axisAnnotObj, displayOpts) { - if( !bMouseUp ) { - posOnMouseDownX = mouseX; - posOnMouseDownY = mouseY; - return; - } - var result = this.getField( formName + "-result"); - var result2 = this.getField( formName + "-result2"); - var slope = this.getField( formName + "-slope" ); - if( !result ) { - console.println( "WARNING: there is no TextField \"" + formName + "-result\" to display results for interactive element \"" + formName + "\""); + var axis = PGFPlotsCreateAxisFor(axisAnnotObj,this); + if( axis == null ) return; - } - result2.display = display.hidden; - slope.display = display.hidden; - // clicking twice onto the same point hides it: - if( result.display != display.hidden && - Math.abs(lastMouseX - mouseX) < 5 && - Math.abs(lastMouseY - mouseY) < 5 ) + if( Math.abs( mouseX - posOnMouseDownX ) > 6 \pgfplotsVERTBAR\pgfplotsVERTBAR + Math.abs( mouseY - posOnMouseDownY ) > 6 ) { - result.display = display.hidden; - return; - } - lastMouseX = mouseX; - lastMouseY = mouseY; - - var a = this.getField(formName); - if( ! a ) { - console.println( "Warning: there is no form named \"" + formName + "\"" ); - return; - } - if( Math.abs( lastMouseX - posOnMouseDownX ) > 6 \pgfplotsVERTBAR\pgfplotsVERTBAR - Math.abs( lastMouseY - posOnMouseDownY ) > 6 ) - { - // dragging the mouse results in slope computation: - // placeAnnot shows the endpoint coords and returns the (transformed) coordinates into tmpArray1 and tmpArray2: - placeAnnot( a, posOnMouseDownX, posOnMouseDownY, result, axisAnnotObj, displayOpts, tmpArray1 ); - placeAnnot( a, lastMouseX, lastMouseY, result2, axisAnnotObj, displayOpts, tmpArray2 ); - - var m = ( tmpArray2[1] - tmpArray1[1] ) / ( tmpArray2[0] - tmpArray1[0] ); - var n = tmpArray1[1] - m * tmpArray1[0]; - - initTextField( - 0.5 * ( lastMouseX + posOnMouseDownX ), - 0.5 * ( lastMouseY + posOnMouseDownY ), - slope, - displayOpts, - sprintf( displayOpts.slopeFormat, m, n ) ); - - // FIXME! these document rights seem to forbid modifications to annotations, although they work for text fields!? - //var lineobj = this.getAnnot( a.page, formName + '-line' ); - //console.println( 'lineobj = ' + lineobj ); - //lineobj.points = [[lastMouseX,lastMouseY],[posOnMouseDownX,posOnMouseDownY]]; - //lineobj.display = display.visible; + axis.handleDragNDrop( formName, displayOpts ); } else { - placeAnnot( a, lastMouseX, lastMouseY, result, axisAnnotObj, displayOpts, null ); + axis.handleClick( formName, displayOpts ); } } + + \end{insDLJS} %-------------------------------------------------- % function hideClickableTextfields() { @@ -476,50 +1027,85 @@ function processAnnotatedPlot(formName, axisAnnotObj, displayOpts, bMouseUp ) %-------------------------------------------------- -\newif\ifpgfplots@clickable -\newif\ifpgfplots@annot@printable +\pgfkeysdef{/pgfplots/annot/xy pattern}{\pgfplots@clickable@xypat@error}% +\pgfkeysdef{/pgfplots/annot/xy pattern/.initial}{\pgfplots@clickable@xypat@error}% +\def\pgfplots@clickable@xypat@error{\pgfplots@error{Sorry, \string\pgfplotsset{annot/xy pattern/.initial=...} can only be assigned *before* \string\usepgfplotslibrary{clickable}}}% -\pgfqkeys{/pgfplots}{ - @backgroundpath@hook/.add code={}{\ifpgfplots@threedim\else\pgfplots@create@clickable@plotarea@hook\fi}, - clickable/.is if=pgfplots@clickable, - clickable/.default=true, - clickable=true, - annot/js fillColor/.initial={["RGB",1,1,.855]}, - annot/point format/.initial={(\%.1f,\%.1f)}, - annot/slope format/.initial={\%.1f*x \%+.1f}, - annot/printable/.is if=pgfplots@annot@printable, - annot/printable/.default=true, - % Available are: -% Times-Roman font.Times -% Times-Bold font.TimesB -% Times-Italic font.TimesI -% Times-BoldItalic font.TimesBI -% Helvetica font.Helv -% Helvetica-Bold font.HelvB -% Helvetica-Oblique font.HelvI -% Helvetica-BoldOblique font.HelvBI -% Courier font.Cour -% Courier-Bold font.CourB -% Courier-Oblique font.CourI -% Courier-BoldOblique font.CourBI -% Symbol font.Symbol -% ZapfDingbats font.ZapfD - annot/font/.initial={font.Times}, -% annot/font={"CMR10"}, - annot/textSize/.initial=11, - annot/width/.initial=, - annot/height/.initial=, - annot/jsname/.initial=, - annot/xmin/.initial=, - annot/xmax/.initial=, - annot/ymin/.initial=, - annot/ymax/.initial=, - annot/xscale/.initial=, % "log" or "linear" or "log:<basis>" - annot/yscale/.initial=, - every semilogy axis/.append style={/pgfplots/annot/point format={(\%.1f,\%.1e)}}, - every semilogx axis/.append style={/pgfplots/annot/point format={(\%.1e,\%.1f)}}, - every loglog axis/.append style={/pgfplots/annot/point format={(\%.1e,\%.1e)}}, +\pgfkeysdef{/pgfplots/annot/no such coord}{\pgfplots@clickable@nosuchcoord@error}% +\pgfkeysdef{/pgfplots/annot/no such coord/.initial}{\pgfplots@clickable@nosuchcoord@error}% +\def\pgfplots@clickable@nosuchcoord@error{\pgfplots@error{Sorry, \string\pgfplotsset{annot/no such coord/.initial=...} can only be assigned *before* \string\usepgfplotslibrary{clickable}}}% + +\def\pgfplots@clickable@beginaxis{% + \pgfplotsapplistXglobalnewempty\pgfplots@clickable@collectedplots + \gdef\pgfplots@clickable@collectedplots@isempty{1}% +}% + +\def\pgfplots@clickable@startcoordcollect{% + \pgfplotsapplistXnewempty\pgfplots@clickable@collectedplot + \def\pgfplots@clickable@collectedplot@isempty{1}% +}% + +{\catcode`\|=0 |catcode`|\=12 |gdef|pgfplots@clickable@bslash{\}}% +{ +\catcode`\"=13 +\catcode`\|=13 +\catcode`\#=12 +\gdef\pgfplots@clickable@coordcollect@handlechars{% + \def"{\string\\\string\"}% + \def\#{#}% + \expandafter\def\csname \string"\endcsname{\string\\\string\"}% + \def|{\string"}% + \def\n{\pgfplots@clickable@bslash\string\n}% + \def\r{\pgfplots@clickable@bslash\string\r}% + \def\t{\pgfplots@clickable@bslash\string\t}% + \def\\{\pgfplots@clickable@bslash\pgfplots@clickable@bslash}% +}% } +\def\pgfplots@clickable@coordcollect#1{% + \begingroup + \ifx\pgfplots@current@point@x\pgfutil@empty + \def\pgfmathresult{nan}% + \else + \pgfplotscoordmath{x}{tostring}\pgfplots@current@point@x + \fi + \let\pgfplots@current@point@x=\pgfmathresult + % + \ifx\pgfplots@current@point@y\pgfutil@empty + \def\pgfmathresult{nan}% + \else + \pgfplotscoordmath{y}{tostring}\pgfplots@current@point@y + \fi + \let\pgfplots@current@point@y=\pgfmathresult + % + \ifpgfplots@curplot@threedim + \ifx\pgfplots@current@point@z\pgfutil@empty + \def\pgfmathresult{nan}% + \else + \pgfplotscoordmath{z}{tostring}\pgfplots@current@point@z + \fi + \let\pgfplots@current@point@z=\pgfmathresult + \fi + % + \begingroup + \pgfplots@clickable@coordcollect@handlechars + #1% + \xdef\pgfplots@glob@TMPa{\pgfplotsretval}% +%\message{I have '\pgfplotsretval'}% + \endgroup + \xdef\pgfplots@glob@TMPa{\if1\pgfplots@clickable@collectedplot@isempty\else,\fi[\pgfplots@current@point@x,\pgfplots@current@point@y\ifpgfplots@curplot@threedim,\pgfplots@current@point@z\fi,"\pgfplots@glob@TMPa"]}% + \endgroup + \expandafter\pgfplotsapplistXpushback\expandafter{\pgfplots@glob@TMPa}\to\pgfplots@clickable@collectedplot + \def\pgfplots@clickable@collectedplot@isempty{0}% +}% +\def\pgfplots@clickable@endcoordcollect{% + \pgfplotsapplistXlet\pgfplots@clickable@collectedplot@=\pgfplots@clickable@collectedplot + \if1\pgfplots@clickable@collectedplots@isempty + \expandafter\pgfplotsapplistXglobalpushback\expandafter{\expandafter[\pgfplots@clickable@collectedplot@]}\to\pgfplots@clickable@collectedplots + \else + \expandafter\pgfplotsapplistXglobalpushback\expandafter{\expandafter,\expandafter[\pgfplots@clickable@collectedplot@]}\to\pgfplots@clickable@collectedplots + \fi + \gdef\pgfplots@clickable@collectedplots@isempty{0}% +}% % Creates an area which is clickable. A click produces a popup which % contains information about the point under the cursor. @@ -559,30 +1145,70 @@ function processAnnotatedPlot(formName, axisAnnotObj, displayOpts, bMouseUp ) \xdef\pgfplots@clickable@no{\the\c@pgf@counta}% \endgroup \fi - \edef\pgfplots@clickable@expanded@args{% FIXME : is that a good idea to do!? Are user-args expandable? + % + \pgfkeysgetvalue{/pgfplots/annot/collected plots}\pgfplots@clickable@collectedplots@@ + \ifx\pgfplots@clickable@collectedplots@@\pgfutil@empty + \def\pgfplots@clickable@collectedplots@@{[]}% + \fi + % + \edef\pgfplots@clickable@expanded@args{% {\pgfkeysvalueof{/pgfplots/annot/width}}% {\pgfkeysvalueof{/pgfplots/annot/height}}% {\pgfplots@clickable@uniquename}% {{ - xmin:\pgfkeysvalueof{/pgfplots/annot/xmin}, - xmax:\pgfkeysvalueof{/pgfplots/annot/xmax}, - ymin:\pgfkeysvalueof{/pgfplots/annot/ymin}, - ymax:\pgfkeysvalueof{/pgfplots/annot/ymax}, - xscale:"\pgfkeysvalueof{/pgfplots/annot/xscale}", - yscale:"\pgfkeysvalueof{/pgfplots/annot/yscale}" + axisType: "\pgfkeysvalueof{/pgfplots/axis type}", + dim: \pgfkeysvalueof{/pgfplots/annot/dim}, + xmin: \pgfkeysvalueof{/pgfplots/annot/xmin}, + xmax: \pgfkeysvalueof{/pgfplots/annot/xmax}, + ymin: \pgfkeysvalueof{/pgfplots/annot/ymin}, + ymax: \pgfkeysvalueof{/pgfplots/annot/ymax}, + xscale: "\pgfkeysvalueof{/pgfplots/annot/xscale}", + yscale: "\pgfkeysvalueof{/pgfplots/annot/yscale}", + \ifnum\pgfkeysvalueof{/pgfplots/annot/dim}=3 + zmin: \pgfkeysvalueof{/pgfplots/annot/zmin}, + zmax: \pgfkeysvalueof{/pgfplots/annot/zmax}, + zscale: "\pgfkeysvalueof{/pgfplots/annot/zscale}", + zaxis: \pgfkeysvalueof{/pgfplots/annot/z axis}, + \fi + collectedPlots: \pgfplots@clickable@collectedplots@@, + snapDist: \pgfkeysvalueof{/pgfplots/annot/snap dist}, + minminmin: \pgfkeysvalueof{/pgfplots/annot/minminmin}, + xaxis: \pgfkeysvalueof{/pgfplots/annot/x axis}, + yaxis: \pgfkeysvalueof{/pgfplots/annot/y axis} }}% {{ - pointFormat: "\pgfkeysvalueof{/pgfplots/annot/point format}", + pointFormat: "\ifnum\pgfkeysvalueof{/pgfplots/annot/dim}=3 \pgfkeysvalueof{/pgfplots/annot/point format 3d}\else \pgfkeysvalueof{/pgfplots/annot/point format}\fi", slopeFormat: "\pgfkeysvalueof{/pgfplots/annot/slope format}", fillColor:\pgfkeysvalueof{/pgfplots/annot/js fillColor}, textFont:\pgfkeysvalueof{/pgfplots/annot/font}, textSize:\pgfkeysvalueof{/pgfplots/annot/textSize}, + richText:\pgfkeysvalueof{/pgfplots/annot/richtext}, + popupSizeGeneric:"\pgfkeysvalueof{/pgfplots/annot/popup size generic}", + popupSizeSnap:"\pgfkeysvalueof{/pgfplots/annot/popup size snap}", printable: \ifpgfplots@annot@printable true\else false\fi }}% }% \expandafter\pgfplots@create@clickable@plotarea\pgfplots@clickable@expanded@args }% +% Defines either \def\pgfplotsretval{1} if the current axis is +% clickable or \def\pgfplotsretval{0} if not. +% +% The initial configuration is `1' for any 2d axis, `1' for 3d axes +% with 'clickable coords' and `0' for 3d axes without `clickable +% coords'. +% +% Overwrite \pgfplotsclickable@check@enable@axistype@<theaxistype> to +% make axis type specific things. +\def\pgfplotsclickable@check@enable{% + \def\pgfplotsretval{1}% + \ifpgfplots@threedim + \ifx\pgfplots@clickable@collectedplots@@\pgfutil@empty + \def\pgfplotsretval{0}% + \fi + \fi + \csname pgfplotsclickable@check@enable@axistype@\pgfkeysvalueof{/pgfplots/axis type}\endcsname +}% % This thing is invoked from within pgfplots. It prepares and invokes % \pgfplotsclickablecreate. @@ -590,53 +1216,103 @@ function processAnnotatedPlot(formName, axisAnnotObj, displayOpts, bMouseUp ) \def\pgfplots@create@clickable@plotarea@hook{% \ifpgfplots@clickable \begingroup - \ifpgfplots@apply@datatrafo@x - \pgfplots@inverse@datascaletrafo@x\pgfplots@xmin - \pgfmathfloattosci\pgfmathresult + % communicate collected plot coordinates: + \pgfplotsapplistXgloballet\pgfplots@clickable@collectedplots@@=\pgfplots@clickable@collectedplots + \pgfplotsapplistXglobalnewempty\pgfplots@clickable@collectedplots + \t@pgfplots@tokc=\expandafter{\pgfplots@clickable@collectedplots@@}% + \edef\pgfplots@clickable@collectedplots@@{[\the\t@pgfplots@tokc]}% + \pgfkeyslet{/pgfplots/annot/collected plots}\pgfplots@clickable@collectedplots@@ + % + \pgfplotsclickable@check@enable + \if1\pgfplotsretval + % + \pgfplotscoordmath{x}{datascaletrafo inverse}{\pgfplots@xmin}% + \pgfplotscoordmath{x}{tostring}{\pgfmathresult}% \let\pgfplots@clickable@xmin=\pgfmathresult - \pgfplots@inverse@datascaletrafo@x\pgfplots@xmax - \pgfmathfloattosci\pgfmathresult + \pgfplotscoordmath{x}{datascaletrafo inverse}{\pgfplots@xmax}% + \pgfplotscoordmath{x}{tostring}{\pgfmathresult}% \let\pgfplots@clickable@xmax=\pgfmathresult - \else - \let\pgfplots@clickable@xmin=\pgfplots@xmin - \let\pgfplots@clickable@xmax=\pgfplots@xmax - \fi - % - \ifpgfplots@apply@datatrafo@y - \pgfplots@inverse@datascaletrafo@y\pgfplots@ymin - \pgfmathfloattosci\pgfmathresult + % + \pgfplotscoordmath{y}{datascaletrafo inverse}{\pgfplots@ymin}% + \pgfplotscoordmath{y}{tostring}{\pgfmathresult}% \let\pgfplots@clickable@ymin=\pgfmathresult - \pgfplots@inverse@datascaletrafo@y\pgfplots@ymax - \pgfmathfloattosci\pgfmathresult + \pgfplotscoordmath{y}{datascaletrafo inverse}{\pgfplots@ymax}% + \pgfplotscoordmath{y}{tostring}{\pgfmathresult}% \let\pgfplots@clickable@ymax=\pgfmathresult - \else - \let\pgfplots@clickable@ymin=\pgfplots@ymin - \let\pgfplots@clickable@ymax=\pgfplots@ymax - \fi - \pgfplotspointbbdiagonal - \edef\pgfplots@clickable@wd{\the\pgf@x}% - \edef\pgfplots@clickable@ht{\the\pgf@y}% - % - % Convert to user interface of clickable lib: - \pgfkeyslet{/pgfplots/annot/width}\pgfplots@clickable@wd - \pgfkeyslet{/pgfplots/annot/height}\pgfplots@clickable@ht - \pgfkeyslet{/pgfplots/annot/xmin}\pgfplots@clickable@xmin - \pgfkeyslet{/pgfplots/annot/xmax}\pgfplots@clickable@xmax - \pgfkeyslet{/pgfplots/annot/ymin}\pgfplots@clickable@ymin - \pgfkeyslet{/pgfplots/annot/ymax}\pgfplots@clickable@ymax - \ifpgfplots@xislinear - \pgfkeyssetvalue{/pgfplots/annot/xscale}{linear}% - \else - \pgfkeyssetvalue{/pgfplots/annot/xscale}{log:\pgfkeysvalueof{/pgfplots/log basis x}}% - \fi - \ifpgfplots@yislinear - \pgfkeyssetvalue{/pgfplots/annot/yscale}{linear}% - \else - \pgfkeyssetvalue{/pgfplots/annot/yscale}{log:\pgfkeysvalueof{/pgfplots/log basis y}}% + % + \ifpgfplots@threedim + \pgfplotscoordmath{z}{datascaletrafo inverse}{\pgfplots@zmin}% + \pgfplotscoordmath{z}{tostring}{\pgfmathresult}% + \let\pgfplots@clickable@zmin=\pgfmathresult + \pgfplotscoordmath{z}{datascaletrafo inverse}{\pgfplots@zmax}% + \pgfplotscoordmath{z}{tostring}{\pgfmathresult}% + \let\pgfplots@clickable@zmax=\pgfmathresult + \fi + % + % Convert to user interface of clickable lib: + \pgfplotspointbbdiagonal + \edef\pgfplots@clickable@wd{\the\pgf@x}% + \pgfkeyslet{/pgfplots/annot/width}\pgfplots@clickable@wd + \edef\pgfplots@clickable@ht{\the\pgf@y}% + \pgfkeyslet{/pgfplots/annot/height}\pgfplots@clickable@ht + \pgfkeyslet{/pgfplots/annot/xmin}\pgfplots@clickable@xmin + \pgfkeyslet{/pgfplots/annot/xmax}\pgfplots@clickable@xmax + \pgfkeyslet{/pgfplots/annot/ymin}\pgfplots@clickable@ymin + \pgfkeyslet{/pgfplots/annot/ymax}\pgfplots@clickable@ymax + \ifpgfplots@xislinear + \pgfkeyssetvalue{/pgfplots/annot/xscale}{linear}% + \else + \pgfkeyssetvalue{/pgfplots/annot/xscale}{log:\pgfkeysvalueof{/pgfplots/log basis x}}% + \fi + \ifpgfplots@yislinear + \pgfkeyssetvalue{/pgfplots/annot/yscale}{linear}% + \else + \pgfkeyssetvalue{/pgfplots/annot/yscale}{log:\pgfkeysvalueof{/pgfplots/log basis y}}% + \fi + \ifpgfplots@threedim + \pgfkeyslet{/pgfplots/annot/zmin}\pgfplots@clickable@zmin + \pgfkeyslet{/pgfplots/annot/zmax}\pgfplots@clickable@zmax + \ifpgfplots@zislinear + \pgfkeyssetvalue{/pgfplots/annot/zscale}{linear}% + \else + \pgfkeyssetvalue{/pgfplots/annot/zscale}{log:\pgfkeysvalueof{/pgfplots/log basis z}}% + \fi + \fi + % + % note that \pgfplotspointbblowerleft has *not* been + % transformed after \endtikzpicture in pgfplots.code.tex. + % That's why I can use it here: + \pgfpointdiff + \pgfplotspointbblowerleft + {\pgfplotspointminminmin}% + \pgf@sys@bp@correct\pgf@x \pgf@sys@bp@correct\pgf@y + \edef\pgfplots@loc@TMPa{[\pgf@sys@tonumber\pgf@x, \pgf@sys@tonumber\pgf@y]}% + \pgfkeyslet{/pgfplots/annot/minminmin}\pgfplots@loc@TMPa + % + \pgfplotspointxaxis + \pgf@sys@bp@correct\pgf@x \pgf@sys@bp@correct\pgf@y + \edef\pgfplots@loc@TMPa{[\pgf@sys@tonumber\pgf@x, \pgf@sys@tonumber\pgf@y]}% + \pgfkeyslet{/pgfplots/annot/x axis}\pgfplots@loc@TMPa + % + \pgfplotspointyaxis + \pgf@sys@bp@correct\pgf@x \pgf@sys@bp@correct\pgf@y + \edef\pgfplots@loc@TMPa{[\pgf@sys@tonumber\pgf@x, \pgf@sys@tonumber\pgf@y]}% + \pgfkeyslet{/pgfplots/annot/y axis}\pgfplots@loc@TMPa + % + \ifpgfplots@threedim + \pgfplotspointzaxis + \pgf@sys@bp@correct\pgf@x \pgf@sys@bp@correct\pgf@y + \edef\pgfplots@loc@TMPa{[\pgf@sys@tonumber\pgf@x, \pgf@sys@tonumber\pgf@y]}% + \pgfkeyslet{/pgfplots/annot/z axis}\pgfplots@loc@TMPa + \fi + % + \pgfkeyssetvalue{/pgfplots/annot/dim}{\ifpgfplots@threedim 3\else2\fi}% + % + % + \pgfinterruptboundingbox% + \pgftext[left,bottom,at=\lowerleftinnercorner]{\pgfplotsclickablecreate[]}% + \endpgfinterruptboundingbox% \fi - \pgfinterruptboundingbox% - \pgftext[left,bottom,at=\lowerleftinnercorner]{\pgfplotsclickablecreate[]}% - \endpgfinterruptboundingbox% \endgroup \fi } @@ -684,14 +1360,16 @@ function processAnnotatedPlot(formName, axisAnnotObj, displayOpts, bMouseUp ) \AA{ % /U = "mouse UP" % /D = "mouse DOWN" - /U << /S/JavaScript/JS(processAnnotatedPlot("#3", #4, #5, 1);) >> - /D << /S/JavaScript/JS(processAnnotatedPlot("#3", #4, #5, 0);) >> + /U << /S/JavaScript/JS(axisMouseUp("#3", #4, #5);) >> + /D << /S/JavaScript/JS(axisMouseDown("#3");) >> }% ] {#3} {#1}{#2}% \textField{#3-result}{0pt}{0pt}% \textField{#3-result2}{0pt}{0pt}% + \textField{#3-resultmark}{0pt}{0pt}% + \textField{#3-result2mark}{0pt}{0pt}% \textField{#3-slope}{0pt}{0pt}% % Unfortunately, line annotations can't be created/changed in acrobat % javascript due to right problems :-( diff --git a/Master/texmf-dist/tex/latex/pgfplots/libs/tikzlibrarypgfplotsclickable.code.tex b/Master/texmf-dist/tex/latex/pgfplots/libs/tikzlibrarypgfplotsclickable.code.tex index e6fed68167d..8cebcd18c2a 100644 --- a/Master/texmf-dist/tex/latex/pgfplots/libs/tikzlibrarypgfplotsclickable.code.tex +++ b/Master/texmf-dist/tex/latex/pgfplots/libs/tikzlibrarypgfplotsclickable.code.tex @@ -20,5 +20,5 @@ % %-------------------------------------------- -\usepgfplotslibrary{clickable} +\usetikzlibrary{pgfplots.clickable} \endinput diff --git a/Master/texmf-dist/tex/latex/pgfplots/pgfplots.sty b/Master/texmf-dist/tex/latex/pgfplots/pgfplots.sty index d707b86e5b7..2b1070dc1f1 100644 --- a/Master/texmf-dist/tex/latex/pgfplots/pgfplots.sty +++ b/Master/texmf-dist/tex/latex/pgfplots/pgfplots.sty @@ -7,7 +7,7 @@ % % It is based on Till Tantau's PGF package. % -% Copyright 2007/2008/2009 by Christian Feuersänger. +% Copyright 2007-2011 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 @@ -23,13 +23,13 @@ % along with this program. If not, see <http://www.gnu.org/licenses/>. % %-------------------------------------------- -\def\pgfplotsversion{1.4.1} +\def\pgfplotsversion{1.5} \IfFileExists{pgfplots.revision.tex}{\input pgfplots.revision.tex } {\def\pgfplotsrevision{}} \ifx\pgfplotsrevision\pgfutil@empty \else \edef\pgfplotsrevision{\space(git show \pgfplotsrevision)}% \fi -\ProvidesPackage{pgfplots}[2010/07/14 Version \pgfplotsversion\pgfplotsrevision] +\ProvidesPackage{pgfplots}[2011/07/29 v\pgfplotsversion\pgfplotsrevision] % ATTENTION: % you MAY need one of diff --git a/Master/texmf-dist/tex/latex/pgfplots/pgfplotstable.sty b/Master/texmf-dist/tex/latex/pgfplots/pgfplotstable.sty index 186c41ad4ef..948e4497de2 100644 --- a/Master/texmf-dist/tex/latex/pgfplots/pgfplotstable.sty +++ b/Master/texmf-dist/tex/latex/pgfplots/pgfplotstable.sty @@ -2,7 +2,7 @@ % % Package pgfplotstable.sty % -% Copyright 2007/2008 by Christian Feuersänger. +% Copyright 2007-2011 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 @@ -18,7 +18,7 @@ % along with this program. If not, see <http://www.gnu.org/licenses/>. % %-------------------------------------------- -\ProvidesPackage{pgfplotstable}[2010/07/14 Part of pgfplots] +\ProvidesPackage{pgfplotstable}[2011/07/29 Part of pgfplots] \RequirePackage{pgfplots} diff --git a/Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty b/Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty new file mode 100644 index 00000000000..a6ed64ffbc1 --- /dev/null +++ b/Master/texmf-dist/tex/latex/pgfplots/pgfregressiontest.sty @@ -0,0 +1,159 @@ +%-------------------------------------------------- +% Provides a feature for fully automated regression testing of PGF or derived works. +% +% DEPRECATED. +% The idea might be interesting, but it is simply did not work and is +% too complicated. Don't use it. +% +% Idea: +% - it is based on the 'external' lib of pgf (which automatically exports each tikzpicture to pdf). +% - modification: in addition to the pdf export, call imagemagick's convert +% tool to export to png as well and compare the png to a reference image. +% - pgfregressiontest.sty provides two modes: +% 1) the REFERENCE GENERATION mode +% - each image knows a reference revision tag (or the system default) +% - the 'system call' makes a "checkout" of the desired revision, +% generates the image and returns to the original revision +% - the images are stored with a unique prefix. +% 2) the COMPARISON mode +% - each tikzpicture is compared to its reference image. If there +% is none, it should be generated. +% - if the comparison fails, a protocol is generated and the user +% is alerted. + +%-------------------------------------------------- +% +\ProvidesPackage{pgfregressiontest}[2010/10/31 Version 0.1] + +\RequirePackage{tikz} +\usetikzlibrary{external} + +\def\pgfregression@invokecmdkey#1#2{% + \pgfkeysvalueof{/pgf/regression/#1/.@cmd}#2\pgfeov +}% + +\newif\ifpgfregressionpreamble +\pgfregressionpreambletrue + +\def\pgfregressiontestset{\pgfqkeys{/pgf/regression}}% + +\pgfqkeys{/pgf/regression}{% + % will be set in \begin{document} + system call original/.initial=<not yet set>, + % + % 'rev checkout' can be used to manually change the environment + % state before actually generating the image. + % Example: + % 'rev checkout=cd ~/code/tex/pgfplots ; git checkout 1.3' + % or something like this. + % + % Use 'rev restore' to immediately undo the effects. All that + % stuff is executed in one shell environment, i.e. you can define + % and use shell variables. + rev checkout/.code=\def\pgfregression@revcheckout{#1}, + rev checkout={}, + rev restore/.code=\def\pgfregression@revrestore{#1}, + rev restore={}, + reference prefix/.initial=reference_images/, + protocol file/.initial=\jobname.protocol.sh, + convert to png/.initial={convert "\image.pdf" "\image.png"},% + reference mode/.code={ + \def\pgfregr@replacement@syscall{% + \ifx\pgfregression@revcheckout\pgfutil@empty + \else + \pgfregression@revcheckout;^^J% + @echo "'rev checkout' was successful, generating pdf...";^^J% + \fi + mkdir -p \pgfkeysvalueof{/pgf/regression/reference prefix};^^J% + \pgfkeysvalueof{/pgf/regression/system call original}; EXITCODE=$$?; \\^^J% + \ifx\pgfregression@revrestore\pgfutil@empty + \else + \pgfregression@revrestore; \\^^J% + echo "'rev restore' was successful.";^^J% + \fi + @if [ "$$EXITCODE" != "0" ]; then echo "pdf generation failed; Abort"; false; fi;^^J% + \pgfkeysvalueof{/pgf/regression/convert to png};^^J% + }% + \def\pgfregr@style{% + \message{^^Jpgfregressiontest: Running in REFERENCE GENERATION mode.^^J}% + \pgfqkeys{/pgf/regression}{% + /tikz/external/prefix=\pgfkeysvalueof{/pgf/regression/reference prefix}, + }% + }% + \ifpgfregressionpreamble + \else + \pgfkeyslet{/tikz/external/system call}\pgfregr@replacement@syscall + \pgfregr@style + \fi + }, + comparison mode/.code={ + \def\pgfregr@replacement@syscall{% + \pgfkeysvalueof{/pgf/regression/system call original};^^J% + \pgfkeysvalueof{/pgf/regression/convert to png};^^J% + diff "\image.png" "\expandafter\expandafter\expandafter\pgfregr@get@reference@image@for\image\relax.png";^^J% + if [ ! $? -eq 0 ]; then ^^J + echo 'echo "file \image.pdf differs from \expandafter\expandafter\expandafter\pgfregr@get@reference@image@for\image\relax.pdf (displaying differences now)".' >> \pgfkeysvalueof{/pgf/regression/protocol file};^^J + echo 'convert "\image.png" "\expandafter\expandafter\expandafter\pgfregr@get@reference@image@for\image\relax.png" -compose difference -composite -colorspace gray miff:- | display' >>\pgfkeysvalueof{/pgf/regression/protocol file};^^J% + else^^J + rm -f "\image.png";^^J% + fi;^^J% + }% + \def\pgfregr@style{% + \message{^^Jpgfregressiontest: Running in COMPARISON mode.^^J}% + \expandafter\def\expandafter\pgfregr@get@reference@image@for\tikzexternal@filenameprefix####1\relax{% + \pgfkeysvalueof{/pgf/regression/reference prefix}####1% + }% + }% + \ifpgfregressionpreamble + \else + \pgfkeyslet{/tikz/external/system call}\pgfregr@replacement@syscall + \pgfregr@style + \fi + }, + comparison mode, +} + +% Check for "command line arguments". +% if 'pdflatex '\def\referencemode{1}\input{filename}' has been used, +% the 'reference mode' will be enabled. Otherwise we are in +% 'comparison mode'. +\expandafter\ifx\csname referencemode\endcsname\relax + \pgfregressiontestset{comparison mode}% + \message{^^Jpgfregressiontest: use pdflatex '\string\def\string\referencemode{1}\string\input{\jobname}' to enable reference generation.^^J}% +\else + \pgfregressiontestset{reference mode}% +\fi + + +\AtBeginDocument{% + \tikzifexternalizehasbeencalled{}{% + \PackageError{pgfregressiontest}{% + Please call \string\tikzexternalize\space somewhere in your preamble. I can only perform my tests together with image externalization}{}% + }% + \pgfkeysgetvalue{/tikz/external/system call}\pgfregression@temp + \pgfkeyslet{/pgf/regression/system call original}\pgfregression@temp + % + \pgfkeyslet{/tikz/external/system call}\pgfregr@replacement@syscall + \pgfregr@style + % + \immediate\openout\w@pgf@writea=\pgfkeysvalueof{/pgf/regression/protocol file} % + \immediate\closeout\w@pgf@writea + % + \global\pgfregressionpreamblefalse +} + +\AtEndDocument{% + \openin\r@pgf@reada=\pgfkeysvalueof{/pgf/regression/protocol file} % + \ifeof\r@pgf@reada + \else + \message{ + ^^J% + ======================================^^J% + There have been regression errors.^^J% + Use^^J% + >> bash \pgfkeysvalueof{/pgf/regression/protocol file}^^J% + to visualize them.^^J% + ======================================^^J% + }% + \fi +}% |