根据 TikZ 和 PGF 手册 3.0.1a 版(第 1034 页)第 101 章(节点和形状)第 101.5.3 节(声明新形状的命令),以下代码片段是 PGF 内置coordinate
节点形状的定义。
\pgfdeclareshape{coordinate}{%
\savedanchor\centerpoint{%
\pgf@x=.5\wd\pgfnodeparttextbox%
\pgf@y=.5\ht\pgfnodeparttextbox%
\advance\pgf@y by -.5\dp\pgfnodeparttextbox%
}
\anchor{center}{\centerpoint}
\anchorborder{\centerpoint}
}
注意宏的使用\pgfnodeparttextbox
。此宏由 PGF 自动创建,用于存储坐标标签的文本框(一个简单的 TeX 框)。此文本框的放置位置使其左下角与锚点重合text
。如果没有明确定义这样的锚点,则默认位于原点(第 1036 页底部有说明)。
因此,我期望节点的中心位于.5(W,H)
,其中W
是\pdfnodeparttextbox
的宽度,而H
是\pdfnodeparttextbox
的全部的高度,即<label height> + <label depth>
。但是根据上面的代码,节点的 的\pgf@y
是。center
.5*(<label height> - <label depth>)
答案1
手册上说
此锚点 (
text
) 用于在创建节点时确定文本标签的左下角(在形状的私有坐标系内)。默认情况下,锚点text
位于原点,但您可以更改此位置。
这并不是说左下角将与原点重合text
。如果上一段内容如下,可能会更有意义
此锚点 (
text
) 用于创建节点,以确定位置文本标签(在形状的私有坐标系内)。默认情况下,锚点text
位于原点,但您可以更改此设置。
或者
此锚点 (
text
) 用于创建节点,以确定基线左端点文本标签(在形状的私有坐标系内)。默认情况下,锚点text
位于原点,但您可以更改此设置。
正如@percusse 在你的另一个问题的评论中所建议的那样,你不应该太认真地对待手册中的解释。作者可能会更改实现,但忘记更新手册中的对应内容。阅读源代码你可能会学到更多。