%--------------------------------------------
%
% 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 2009 by Nick Papior Andersen.
%
% 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 .
%
%--------------------------------------------
\newif\ifpgfplots@group@sharedlabels
\def\pgfplots@group@xticklabels{}
\def\pgfplots@group@yticklabels{}
\def\pgfplots@group@xlabels{}
\def\pgfplots@group@ylabels{}
\def\pgfplots@group@totalplots{1}
\def\pgfplots@group@columns{1}
\def\pgfplots@group@rows{1}
\def\pgfplots@group@name{group}
\def\pgfplots@group@style{}
\gdef\pgfplots@group@rmopts{}
\newcount\pgfplots@group@current@plot
\newcount\pgfplots@group@current@row
\newcount\pgfplots@group@current@column
\usetikzlibrary{calc}
\pgfkeys{
/pgfplots/group/.is family,
/pgfplots/group style/.store in=\pgfplots@group@style,
/pgfplots/group/horizontal sep/.initial=1cm,
/pgfplots/group/vertical sep/.initial=1cm,
/pgfplots/group/group size/.style args={#1 by #2}{/pgfplots/group/columns=#1,/pgfplots/group/rows=#2},
/pgfplots/group/group size/.default={1 by 1},
/pgfplots/group/columns/.store in=\pgfplots@group@columns,
/pgfplots/group/rows/.store in=\pgfplots@group@rows,
/pgfplots/group/every plot/.style=,
/pgfplots/group/shared labels/.is if=pgfplots@group@sharedlabels,
/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{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{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/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/group name/.store in=\pgfplots@group@name,
/pgfplots/group/empty plot/.style={/pgfplots/hide axis=true},
/pgfplots/trim axis group left/.code={%
\pgfutil@ifundefined{pgfsettrimleft}{%
\pgfplots@error{Sorry, the 'trim axis group left' requires a more recent PGF version.}%
}{%
\pgfkeysalso{/tikz/trim left={(group c1r1.south west)}}%
}%
},%
/tikz/trim axis group left/.style={/pgfplots/trim axis group left},
/pgfplots/trim axis group right/.code={%
\pgfutil@ifundefined{pgfsettrimleft}{%
\pgfplots@error{Sorry, the 'trim axis group right' requires a more recent PGF version.}%
}{%
\pgfkeysalso{/pgfplots/trim axis right}%
}%
},%
/tikz/trim axis group right/.style={/pgfplots/trim axis group right},
}
\pgfkeys{
/pgfplots/warning/groupplots/too many plots/.code 2 args={%
\pgfplotsthrow@warning{You are adding more plots than you specified, current plots=#1\space vs. total allowed
plots=#2.}%
},
}
\def\nextgroupplot{%
\pgfutil@ifnextchar[{\pgfplots@group@nextplot}{\pgfplots@group@nextplot[]}%}
}
%
% The actual addition of the new plots
%
\def\pgfplots@group@nextplot[#1]{%
% Check if it legal to produce another plot
\ifnum\pgfplots@group@current@plot=\pgfplots@group@totalplots\relax
\pgfplotswarning{groupplots/too many plots}{\the\pgfplots@group@current@plot}{\pgfplots@group@totalplots}\pgfeov
\else
%
% If there has been other plots before then end the plot
%
\ifnum0<\pgfplots@group@current@plot\relax
% DEBUG: \message{DEBUG: Ending plot}
\endpgfplots@environment@opt
\fi
% Prepare for next plot, increment plot, row and column
\pgfplots@group@increment@numbers
% DEBUG: \message{DEBUG: Cur. Plot: \the\pgfplots@group@current@plot. Current Row: \the\pgfplots@group@current@row. Current Column: \the\pgfplots@group@current@column.}
% Creation of the new axis environment
\pgfplots@group@environment@create{#1}
\fi
}
%
% This creates an environment according to which plots that have been typeset.
% The code utilizes previous plots anchor points to position themselves, unless it's the
% first plot.
% Using the figure below to describe the code implementation:
% ____ ____ ____
%| | | | | |
%| 1 | | 2 | | 3 |
%|___| |___| |___|
% ____ ____ ____
%| | | | | |
%| 4 | | 5 | | 6 |
%|___| |___| |___|
% ____ ____ ____
%| | | | | |
%| 7 | | 8 | | 9 |
%|___| |___| |___|
%
% The plots anchors are as follows:
% 1: plot is typeset normally
% 2: the "1" plot anchor "east" is anchored to "west"
% 3: the "2" plot anchor "east" is anchored to "west"
% 4: the "1" plot anchor "south" is anchored to "north"
% 5: the "2" plot anchor "south" is anchored to "north"
% 6: the "3" plot anchor "south" is anchored to "north"
% 7: the "4" plot anchor "south" is anchored to "north"
% 8: the "5" plot anchor "south" is anchored to "north"
% 9: the "6" plot anchor "south" is anchored to "north"
%
\def\pgfplots@group@environment@create#1{%
\ifnum1=\pgfplots@group@current@row\relax
\ifnum1=\pgfplots@group@current@column\relax
\pgfplots@environment@opt[name={\pgfplots@group@name\space c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row},%
/pgfplots/group/every plot,%
/pgfplots/group/plot c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row,%
#1]
\else
\pgfplotsgroupplotsmath@decrease\pgfplots@group@current@column
\xdef\pgfplots@glob@TMPb{\pgfplots@group@name\space c\pgfmathresult r\the\pgfplots@group@current@row}
\pgfplots@environment@opt[name={\pgfplots@group@name\space c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row},%
/pgfplots/group/every plot,%
/pgfplots/group/plot c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row,%
at={($(\pgfplots@glob@TMPb.east)+(\pgfkeysvalueof{/pgfplots/group/horizontal sep},0)$)},anchor=west,%
#1]
\fi
\else
\pgfplotsgroupplotsmath@decrease\pgfplots@group@current@row
\xdef\pgfplots@glob@TMPb{\pgfplots@group@name\space c\the\pgfplots@group@current@column r\pgfmathresult}
\pgfplots@environment@opt[name={\pgfplots@group@name\space c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row},%
/pgfplots/group/every plot,%
/pgfplots/group/plot c\the\pgfplots@group@current@column r\the\pgfplots@group@current@row,%
at={($(\pgfplots@glob@TMPb.south)-(0,\pgfkeysvalueof{/pgfplots/group/vertical sep})$)},anchor=north,%
#1]%
\fi%
}
%
% Determine the labels of both x and y.
%
\def\pgfplots@group@determine@labels{%
\def\pgfplots@loc@TMPa{all}%
\def\pgfplots@loc@TMPb{lower}%
\ifx\pgfplots@loc@TMPa\pgfplots@group@xlabels%
% xlabels at=all
% Do nothing as all should have xlabels
\fi
\gdef\pgfplots@glob@TMPa{}%
\ifx\pgfplots@loc@TMPb\pgfplots@group@xlabels%
% xlabels at=lower
\ifnum1<\pgfplots@group@rows\relax
\foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
\foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
\ifnum\pgfplots@row=\pgfplots@group@rows\relax%
\else
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
/pgfplots/xlabel={},%
\ifpgfplots@units@use/pgfplots/x unit={}\fi
}%
}%
\fi
}%
}%
\fi%
\else
\def\pgfplots@loc@TMPb{top}%
\ifx\pgfplots@loc@TMPb\pgfplots@group@xlabels%
% xlabels at=top
\ifnum1<\pgfplots@group@rows\relax
\foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
\foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
\ifnum\pgfplots@row=1 %
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={/pgfplots/xticklabel pos=upper}}%
\else
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
/pgfplots/xlabel={},%
\ifpgfplots@units@use/pgfplots/x unit={}\fi%
}%
}%
\fi
}%
}%
\fi%
\fi
\fi
%
% Defining styles for the y's
%
\ifx\pgfplots@loc@TMPa\pgfplots@group@ylabels%
% ylabels at=all
% Do nothing as all should have ylabels
\else
\def\pgfplots@loc@TMPb{left}%
\ifx\pgfplots@loc@TMPb\pgfplots@group@ylabels%
% ylabels at=left
\ifnum1<\pgfplots@group@columns\relax
\foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
\foreach \pgfplots@column in {2,...,\pgfplots@group@columns} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
/pgfplots/ylabel={},%
\ifpgfplots@units@use/pgfplots/y unit={}\fi%
}%
}%
}%
}%
\fi%
\else
\def\pgfplots@loc@TMPb{right}%
\ifx\pgfplots@loc@TMPb\pgfplots@group@ylabels%
% ylabels at=right
\ifnum1<\pgfplots@group@columns\relax
\foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
\foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
\ifnum\pgfplots@column=\pgfplots@group@columns\relax
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={/pgfplots/yticklabel pos=upper}}%
\else
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
/pgfplots/ylabel={},%
\ifpgfplots@units@use/pgfplots/y unit={}\fi%
}%
}%
\fi
}%
}%
\fi
\fi%
\fi
\fi
\expandafter\pgfkeys\expandafter{\pgfplots@glob@TMPa}%
}
%
% Determine the ticklabels of both x and y.
%
\def\pgfplots@group@determine@ticklabels{%
\def\pgfplots@loc@TMPa{all}%
\def\pgfplots@loc@TMPb{top}%
\def\pgfplots@loc@TMPc{lower}%
\ifx\pgfplots@loc@TMPa\pgfplots@group@xticklabels%
% Do nothing as all should have xticklabels
\fi
\gdef\pgfplots@glob@TMPa{}
\ifx\pgfplots@loc@TMPb\pgfplots@group@xticklabels%
\foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r1/.append style={%
xticklabel pos=upper}}%
\ifnum1<\pgfplots@group@rows\relax
\foreach \pgfplots@row in {2,...,\pgfplots@group@rows} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
/pgfplots/xticklabels={},/pgfplots/xtick scale label code/.code={}}}%
}%
\fi%
}%
\fi
\ifx\pgfplots@loc@TMPc\pgfplots@group@xticklabels%
\foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@group@rows/.append style={%
xticklabel pos=lower}}%
\ifnum1<\pgfplots@group@rows\relax
\pgfplotsgroupplotsmath@decrease\pgfplots@group@rows
\foreach \pgfplots@row in {1,...,\pgfmathresult} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
/pgfplots/xticklabels={},/pgfplots/xtick scale label code/.code={}}}%
}%
\fi%
}%
\fi%
%
% Defining styles for the ytick's
%
\def\pgfplots@loc@TMPa{all}%
\def\pgfplots@loc@TMPb{left}%
\def\pgfplots@loc@TMPc{right}%
\ifx\pgfplots@loc@TMPa\pgfplots@group@yticklabels%
% Do nothing as all should have yticklabels
\fi
\ifx\pgfplots@loc@TMPb\pgfplots@group@yticklabels%
\foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c1r\pgfplots@row/.append style={yticklabel pos=left}}%
\ifnum1<\pgfplots@group@columns\relax
\foreach \pgfplots@column in {2,...,\pgfplots@group@columns} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
/pgfplots/yticklabels={}, /pgfplots/ytick scale label code/.code={}}}%
}%
\fi%
}%
\fi
\ifx\pgfplots@loc@TMPc\pgfplots@group@yticklabels%
\foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@group@columns r\pgfplots@row/.append style={%
yticklabel pos=right}}%
\ifnum1<\pgfplots@group@columns\relax
\pgfplotsgroupplotsmath@decrease\pgfplots@group@columns
\foreach \pgfplots@column in {1,...,\pgfmathresult} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.append style={%
/pgfplots/yticklabels={}, /pgfplots/ytick scale label code/.code={}}}%
}%
\fi%
}%
\fi%
\expandafter\pgfkeys\expandafter{\pgfplots@glob@TMPa}%
}
%
% The counters which are used to determine the current plot:
% \pgfplots@group@current@plot
% \pgfplots@group@current@column
% \pgfplots@group@current@row
% gets incremented according to the scheme below:
% ____ ____ ____
%| | | | | |
%| 1 | | 2 | | 3 |
%|___| |___| |___|
% ____ ____ ____
%| | | | | |
%| 4 | | 5 | | 6 |
%|___| |___| |___|
% ____ ____ ____
%| | | | | |
%| 7 | | 8 | | 9 |
%|___| |___| |___|
% where the number matches the plot number.
%
\def\pgfplots@group@increment@numbers{%
\advance\pgfplots@group@current@plot by1
\ifnum\pgfplots@group@current@column=\pgfplots@group@columns\relax
\ifnum1=\pgfplots@group@current@plot\relax
\else
\advance\pgfplots@group@current@row by1
\fi
\pgfplots@group@current@column=1
\else
\advance\pgfplots@group@current@column by1
\fi
}
\def\pgfplots@group@get@plot@name#1,#2\in#3{%
\edef#3{c#1r#2}%
}
%
% Setting up all possible styles in current plot
% I.e. Setting:
% /pgfplots/group/plot c1r1/.style=
% /pgfplots/group/plot c2r1/.style=
% ...
% /pgfplots/group/plot cr/.style=
%
\def\pgfplots@group@individual@setup{%
\gdef\pgfplots@glob@TMPa{}
\foreach \pgfplots@column in {1,...,\pgfplots@group@columns} {%
\foreach \pgfplots@row in {1,...,\pgfplots@group@rows} {%
\expandafter\xdef\expandafter\pgfplots@glob@TMPa\expandafter{%
\pgfplots@glob@TMPa,/pgfplots/group/plot c\pgfplots@column r\pgfplots@row/.style=}%
}%
}%
\expandafter\pgfkeys\expandafter{\pgfplots@glob@TMPa}%
}
%
% Implementation of the environment {groupplots}
\def\pgfplots@environment@groupplot{%
\pgfutil@ifnextchar[{\pgfplots@@environment@groupplot}{\pgfplots@@environment@groupplot[\pgfutil@empty]}%
}
\def\endpgfplots@environment@groupplot{%
\endpgfplots@environment@opt
%
% transport some items beyond this \endgroup:
\pgf@remember@layerlist@globally
\aftergroup\pgf@restore@layerlist@from@global
\endgroup
%
% ... and transport them beyond the next \endgroup as well (LaTeX
% introduces one for \end{groupplot}):
\aftergroup\pgf@restore@layerlist@from@global
\aftergroup\pgfplots@cell@picture@remembered
}
\def\pgfplots@@environment@groupplot[#1]{%
\begingroup%
% Only find the keys column and row
% the following things appear to be complete... ?
\pgfkeysinstallkeyfilterhandler{/pgf/key filter handlers/append filtered to}{\pgfplots@group@rmopts}%
\let\pgfplots@group@rmopts=\pgfutil@empty
\pgfkeysinstallkeyfilter{/pgf/key filters/equals}{/pgfplots/group style}%
\pgfkeysinstallkeyfilter{/pgf/key filters/is descendant of}{/pgfplots/group}%
\pgfqkeysfiltered{/pgfplots}{#1}%
\edef\pgfplots@loc@TMPa{%
\noexpand\pgfkeys{/pgfplots/group/.cd,\pgfplots@group@style}%
}\pgfplots@loc@TMPa
%
\let\pgfplots@set@options@sanitizemode@old=\pgfplots@set@options@sanitizemode
\let\pgfplots@set@options@sanitize@old=\pgfplots@set@options@sanitize
\let\pgfplots@set@options@sanitize=\relax
\let\pgfplots@set@options@sanitizemode=\relax
\expandafter\pgfplots@set@options\expandafter{\pgfplots@group@rmopts}%
\let\pgfplots@set@options@sanitize=\pgfplots@set@options@sanitize@old
\let\pgfplots@set@options@sanitizemode=\pgfplots@set@options@sanitizemode@old
%
\pgfplots@group@individual@setup
\pgfplots@group@determine@ticklabels
\pgfplots@group@determine@labels
\pgfplots@group@current@plot=0 %
\pgfplots@group@current@row=1 %
\pgfplots@group@current@column=0 %
\begingroup
\c@pgf@counta=\pgfplots@group@rows\relax
\multiply \c@pgf@counta by\pgfplots@group@columns\relax
\edef\pgfmathresult{\the\c@pgf@counta}%
\pgfmath@smuggleone\pgfmathresult
\endgroup
\edef\pgfplots@group@totalplots{\pgfmathresult}%
%DEBUG: \message{TEST: \pgfplots@group@totalplots, rows=\pgfplots@group@rows, columns=\pgfplots@group@columns}%
}
% Assigns \pgfmathresult as #1-1 (in integer arithmetics)
%
% #1 an integer (a register or something which expands to an integer).
\def\pgfplotsgroupplotsmath@decrease#1{%
\begingroup
\c@pgf@counta=#1\relax
\advance\c@pgf@counta by-1
\edef\pgfmathresult{\the\c@pgf@counta}%
\pgfmath@smuggleone\pgfmathresult
\endgroup
}
\tikzaddtikzonlycommandshortcutlet\groupplot\pgfplots@environment@groupplot
\tikzaddtikzonlycommandshortcutlet\endgroupplot\endpgfplots@environment@groupplot
\endinput