恢复 PGF/TikZ 密钥的先前值?

恢复 PGF/TikZ 密钥的先前值?

如何恢复 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从未包含一样;这当然是出乎意料的:

令人惊讶的是,内部分隔符未设置为 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}

相关内容