当我想使用设置样式时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
。
但这里只是安装了两个过滤器。