PGF 节点的锚点和 PGF 节点的延迟锚点之间有什么区别? 3.0.1a 版的 TikZ 和 PGF 手册\deferredanchor{〈name〉}{〈code〉}
如此描述该命令(第 1037 页):
此命令声明一个名为 的锚点
〈name〉
。其工作原理类似于\anchor
。但是,与 声明的锚点不同\anchor
,〈name〉
在形状声明期间不会展开(即 在 期间不会展开\pgfdeclareshape
)。相反, 会〈name〉
在实际使用节点时展开(与 一起使用\pgfnode
或更可能与 一起使用\node
)。如果锚点名称依赖于上下文(例如,取决于键的值),这可能会很有用。
我再重复一遍:
与通过 声明的锚点不同
\anchor
,〈name〉
在形状声明期间不会展开
但是该命令的描述\anchor{〈name〉}{〈code〉}
如下(第 1036 页):
与已保存的锚点不同,
〈code〉
每次声明节点时都不会执行。相反,〈code〉
只有在明确请求锚点时才会执行;无论是在创建节点期间锚定节点,还是将其作为稍后引用的形状中的位置。
那么有什么区别呢?这两个命令都不会在声明节点时执行,而是在创建或使用时明确请求时执行。
答案1
假设您有一个具有 n 个扩展的形状(除了具有不同的边之外,现在想不出更好的例子regular polygon
),并且具有不同的形状,例如三角形、圆形和其他形状。
如果形状没有三角形扩展,或者有超过 1 个三角形,您无法在定义时计算它,则无法为三角形创建锚点。因此,对于此类情况,可以选择推迟到用户请求它们。您不太可能需要它们。
那么有什么区别呢?这两个命令都不会在声明节点时执行,而是在创建或使用时明确请求时执行。
\anchor
定义明确但尚未准备好。\deferredanchor
直到展开后才定义。因为它的名称仍然取决于请求的内容。