如何将样式选项传递给 \pgfextra 节点

如何将样式选项传递给 \pgfextra 节点

根据答案,我创建了一个用双线绘制矩形的样式。问题是,如果我将fill=color或之类的选项传递thick给使用该样式创建的节点,这些选项显然不会传递给外部节点,因此外部节点将无法正确绘制。(参见 MWE)


评论:我不能使用这个double键,因为我通常希望两条线之间的间隙是透明的。这就是为什么我使用我链接的答案的方法。


所以问题是,有没有办法将样式(nonlin)的选项传递给\pgfextra或提取的属性\tikzlastnode并重新使用它?我为什么需要\pgfextra在这里使用?或者我只是忽略了一个微不足道的解决方案?请注意外部节点的错误线宽和第一个节点间隙的错误填充:

平均能量损失

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds,fit, positioning}

\tikzset{
    nonlin/.style = {
        rectangle,thick,draw,minimum width=1cm,minimum height=0.6cm,
        append after command={
            \pgfextra{
                \node[fit=(\tikzlastnode), draw, inner sep=1.8pt] (\tikzlastnode-outer) {};
            }
        }
    }
}

\begin{document}
\begin{tikzpicture}
    \node(mynode)[nonlin,fill=blue!20]at(0,0){$a$};
    \node(node2)[nonlin, right=of mynode]{$b$};
    \begin{scope}[on background layer]
    \node[fit=(mynode)(node2), inner sep=5pt,fill=gray!30]{};
    \end{scope}
    \draw[->,thick](mynode-outer)--(node2-outer);
\end{tikzpicture}
\end{document}

答案1

这就是你想要的吗?

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{backgrounds,fit, positioning}

\tikzset{
    nonlin/.style = {
        rectangle,thick,draw,minimum width=1cm,minimum height=0.6cm,#1,
        append after command={
            \pgfextra{
                \node[fit=(\tikzlastnode),#1, draw, inner sep=1.8pt] (\tikzlastnode-outer) {};
            }
        }
    }
}

\begin{document}

\begin{tikzpicture}

    \node[nonlin={fill=blue!20}]     (mynode) at (0,0) {$a$};
    \node[nonlin, right=of mynode] (node2)           {$b$};

    \begin{scope}[on background layer]
      \node[fit=(mynode)(node2), inner sep=5pt,fill=gray!30]{};
    \end{scope}

    \draw[->,thick](mynode-outer)--(node2-outer);

\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容