组样式键在 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

但这里只是安装了两个过滤器。

相关内容