組樣式鍵在 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

但這裡它只安裝了兩個過濾器。

相關內容