Когда я хочу задать стиль с помощью 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]
, что определено как то же самое, что и выше, то оно обрабатывается.
- если вы говорите
- в противном случае ключ игнорируется.
Боюсь, что нет простого способа исправить это. Фильтрация — одна из основных функцийpgfkeys. Может быть, есть какой-то трюк, играющий с .cd
и .retry
т. д. Я не могу сказать.
После всего,pgfkeysделает много странных вещей. Например, в руководстве утверждается, что
Действует только один ключевой фильтр, и он устанавливается с помощью
.install key filter handler
или\pgfkeysinstallkeyfilter
.
Но здесь устанавливается всего два фильтра.