A chave de estilo de grupo não funciona em pgfplotsset

A chave de estilo de grupo não funciona em pgfplotsset

Quando eu quiser definir um estilo usando groupplot, farei algo assim:

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

No entanto, descobri que se eu tentar salvar isso como um estilo usando pgfplotsset, assim:

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

aplicar o estilo parece ignorar o conteúdo da group stylechave. O valor das outras chaves é observado e aplicado corretamente, mas não o de group style. Se eu quiser fazer alterações nas chaves do groupcaminho, preciso especificá-las inteiramente:

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

Mas isso me parece um comportamento estranho e fora do padrão, já que você não usaria essa forma de escrever ao especificar opções para \begin{groupplot}.

Este é o comportamento esperado? Qual é a maneira recomendada de definir estilos de grupo pgfplotsset? Aqui está um MWE, onde você pode descomentar as diferentes opções:

\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}

Responder1

O problema é realmente mais simples do que eu pensava.

Na definição de \begin{groupplot}[#1]vemos o seguinte

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

Intuitivamente ele diz que

  • se você disser, [group style=something]então será processado;
  • se você disser, [group/something=else]então será processado;
  • caso contrário, a chave será ignorada.

E através de algumas experiências o que realmente diz é que

  • se você disser, [group style=something]então será processado;
    • se você disser [mygroup], que é definido como igual ao acima, então éignorado.
  • se você disser, [group/something=else]então será processado;
    • se você disser [mygroup], que é definido como igual ao acima, ele será processado.
  • caso contrário, a chave será ignorada.

Receio que não haja uma maneira fácil de corrigir isso. A filtragem é um dos principais recursos do. Talvez exista um truque para brincar .cde .retryassim por diante. Eu não posso dizer.

Afinal,faz muitas coisas bizarras. Por exemplo, o manual afirma que

Há exatamente um filtro de chave em vigor e ele é instalado pelo .install key filter handlerou por \pgfkeysinstallkeyfilter.

Mas aqui basta instalar dois filtros.

informação relacionada