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