![組樣式鍵在 pgfplotsset 中不起作用](https://rvso.com/image/309869/%E7%B5%84%E6%A8%A3%E5%BC%8F%E9%8D%B5%E5%9C%A8%20pgfplotsset%20%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
當我想使用設定樣式時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]
,它的定義與上面相同,那麼它就會被處理。
- 如果你說
- 否則該鍵將被忽略。
恐怕沒有簡單的方法可以解決這個問題。過濾是其核心功能之一pgf鍵。也許存在一個玩弄等等的 .cd
技巧.retry
。我不能說。
畢竟,pgf鍵做了很多奇怪的事情。例如,手冊聲稱
只有一個關鍵過濾器有效,並且由
.install key filter handler
或 由 來安裝\pgfkeysinstallkeyfilter
。
但這裡它只安裝了兩個過濾器。