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.

하지만 여기서는 두 개의 필터만 설치합니다.

관련 정보