Ключ стиля группы не работает в pgfplotsset

Ключ стиля группы не работает в pgfplotsset

Когда я хочу задать стиль с помощью groupplot, я делаю что-то вроде этого:

\begin{groupplot}[
  group style={
    group size=1 by 2,
    vertical sep=1cm,
  },
]

Однако я обнаружил, что если я попытаюсь сохранить это как стиль, используя pgfplotsset, вот так:

\pgfplotsset{
  mygroup/.style={
    group style={
      group size=1 by 2,
      vertical sep=1cm,
    },
  },
}

Применение стиля, похоже, игнорирует содержимое ключа group style. Значения других ключей наблюдаются и применяются правильно, но не group style. Если я хочу внести изменения в ключи в groupпути, мне нужно указать их полностью:

\pgfplotsset{
  mygroup/.style={
    group/group size=1 by 2,
    group/vertical sep=1cm,
  },
}

Но мне кажется, что это странное, нестандартное поведение, поскольку такой способ записи не используется при указании параметров для \begin{groupplot}.

Это ожидаемое поведение? Какой рекомендуемый способ определения стилей групп в pgfplotsset? Вот MWE, где можно раскомментировать различные параметры:

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary[pgfplots.groupplots,calc]

\pgfplotsset{
  compat=1.12,
  mygroup/.style={
    group style={
      group size=1 by 2,
      vertical sep=1cm,
    },
    every axis plot/.append style={
      smooth,
    }
  },
  mygroupb/.style={
    group/group size=1 by 2,
    group/vertical sep=1cm,
    every axis plot/.append style={
      smooth,
    }
  },
}

\begin{document}

\begin{figure}
  \centering
  \begin{tikzpicture}
    \begin{groupplot}[
        % This style works without "group style"
        % mygroupb,
        % This style doesn't apply "group style"
        % mygroup,
        % But adding it manually here works
        % group style={
        %   group size=1 by 2,
        %   vertical sep=1cm,
        % },
      ]  
      \nextgroupplot
        \addplot+[samples=5,domain=-3:3] {exp(-x^2+1)};
        \addplot+[samples=5,domain=-3:3] {exp(-x^2)};
        \addplot+[samples=5,domain=-3:3] {exp(-x^2-1)};

      \nextgroupplot
        \addplot+[samples=5,domain=-3:3] {exp(-x^2+1)};
        \addplot+[samples=5,domain=-3:3] {exp(-x^2)};
        \addplot+[samples=5,domain=-3:3] {exp(-x^2-1)};
    \end{groupplot}
  \end{tikzpicture}
\end{figure}

\end{document}

решение1

Проблема на самом деле проще, чем я думал.

В определении \begin{groupplot}[#1]мы видим следующее

\pgfkeysinstallkeyfilter{/pgf/key filters/equals}{/pgfplots/group style}%
\pgfkeysinstallkeyfilter{/pgf/key filters/is descendant of}{/pgfplots/group}%
\pgfqkeysfiltered{/pgfplots}{#1}%

Интуитивно это говорит о том, что

  • если вы говорите, [group style=something]то это обрабатывается;
  • если вы говорите, [group/something=else]то это обрабатывается;
  • в противном случае ключ игнорируется.

И с помощью некоторых экспериментов он действительно говорит, что

  • если вы говорите, [group style=something]то это обрабатывается;
    • если вы говорите [mygroup], что определено как то же самое, что и выше, то этопроигнорировано.
  • если вы говорите, [group/something=else]то это обрабатывается;
    • если вы говорите [mygroup], что определено как то же самое, что и выше, то оно обрабатывается.
  • в противном случае ключ игнорируется.

Боюсь, что нет простого способа исправить это. Фильтрация — одна из основных функций. Может быть, есть какой-то трюк, играющий с .cdи .retryт. д. Я не могу сказать.

После всего,делает много странных вещей. Например, в руководстве утверждается, что

Действует только один ключевой фильтр, и он устанавливается с помощью .install key filter handlerили \pgfkeysinstallkeyfilter.

Но здесь устанавливается всего два фильтра.

Связанный контент