创建另一个节点并动态读取其值

创建另一个节点并动态读取其值

我正在尝试理解如何扩展\pgfextra位于 an 内部的 a 。我的想法是在执行代码时append after command从键中读取一些值,但我担心代码会在样式定义上被扩展。pgfappend after command

\documentclass[12pt]{standalone}

\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows.meta}

\begin{document}
\begin{tikzpicture}

\pgfkeys{
    /my label/.initial=initial,
}

\tikzset{my node/.style={
    draw=red,
    minimum size=1cm,
    node contents=#1,
    append after command={
        \pgfextra
        \draw [-Implies, double, shorten >=2ex] (\tikzlastnode.south) -- +(0, -1cm);
        \path [use as bounding box] (\tikzlastnode.south west) rectangle ($ (\tikzlastnode.south west) + (0, -1cm) $);
        \pgftransformshift{\pgfpoint{0pt}{-1.5cm}}
        \pgfnode{rectangle}{base}{\pgfkeysvalueof{/my label}}{}{\pgfusepath{discard}}
        \endpgfextra
    }
}}

\fill (-1, 1) [white] rectangle (1, -2);
\node at (0, 0) [/my label=label, my node=1] {};

\end{tikzpicture}
\end{document}

我得到了什么

实际结果

与我想要实现的目标相比

期望结果

我最终想要做的是绘制两个像上面的图像那样的节点,以后只需指定一个节点就可以完全引用,例如:

% this create a node with `name` and `node contents` K and a node below with `name` and `node contents` V.
% the argument V could be set here or read dynamically from a pgf key)
\node [key=K, value=V] 

\draw [->] (K.north) -- +(0, 1);
\draw [->] (V.south) -- +(0, -1);

有什么方法可以实现这一点吗?还是必须手动指定两个节点?

答案1

显然,您想以特定方式解决您的问题,使用 tikz 和前后扩展的关键系统。我无法以任何方式为此做出贡献。

以防万一您还考虑其他方法:我建议使用普通宏。

\documentclass[border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{arrows.meta}
% \KeyValue[options for the upper node]{position}{name of upper node}{name of lower node}
\newcommand\KeyValue[4][]{%
  \node[draw=red,minimum size=1cm,#1] (#3) at (#2) {3};
  \draw[-Implies,double] (#3) -- +(0, -1cm) node[below,inner sep=1pt](#4){#4};
}
\begin{document}
\begin{tikzpicture}
  \KeyValue{0,0}{1}{label}
  \draw [->] (1.north) -- +(0, 1);
  \draw [->] (label.south) -- +(0, -1);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容