PGF 坐标节点的中心

PGF 坐标节点的中心

根据 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 在你的另一个问题的评论中所建议的那样,你不应该太认真地对待手册中的解释。作者可能会更改实现,但忘记更新手册中的对应内容。阅读源代码你可能会学到更多。

相关内容