如何恢复 PGF/TikZ 密钥的先前值?
例如,我想将inner sep
矩阵的设置为,0em
但将矩阵内节点的设置inner sep
为绘制矩阵之前存在的值。我认为以下方法可行。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[every node/.style={draw}]
\pgfkeysgetvalue{/tikz/inner sep}{\previnnersep}
\matrix [matrix of nodes, inner sep=0em,
cells={inner sep=\previnnersep}] {
X & Y \\ };
\end{tikzpicture}
\end{document}
然而,它产生的输出就像inner sep=0em
从未包含一样;这当然是出乎意料的:
更令人吃惊的是,当我将cells
选项改为cells={inner sep=1em}
但保留该\pgfkeysgetvalue
行时,输出与之前完全相同 --- 就像inner sep=0.3333em
在任何地方使用一样!
这种奇怪的行为似乎源于该\pgfkeysgetvalue
行,因为当我将其注释掉时,一切都如预期的那样。
为什么会发生这种情况?我该如何实现所需的行为?
答案1
根据 Andrew Stacey 和 PolGrab 的评论,您可以创建一种实现您描述的效果的风格:
\tikzset{cells preserve inner sep/.style={
cells/.expanded={
inner xsep=\pgfkeysvalueof{/pgf/inner xsep},
inner ysep=\pgfkeysvalueof{/pgf/inner ysep}
}
}}
然后像这样使用它(顺序很重要):
\begin{tikzpicture}[every node/.style={draw}]
\matrix [matrix of nodes, cells preserve inner sep, inner sep=0em] {
X & Y \\
};
\end{tikzpicture}
结果:
答案2
重新安排的方法是:
\tikzset{matrix style/.style={
cells/.expanded={
inner xsep=\pgfkeysvalueof{/pgf/inner xsep},
inner ysep=\pgfkeysvalueof{/pgf/inner ysep}
},
matrix of nodes, inner sep=0em
}}
\begin{tikzpicture}[every node/.style={draw}]
\matrix [matrix style] {X & Y \\};
\end{tikzpicture}