如何提取TikZ节点中定义的实际坐标?
问题根源
你碰到的矩形竖线不对齐问题,本质是节点名称默认指向节点中心,而非你at指定的坐标:
- 当你写
\node (d) at (0,7) [anchor=west] {$D_i$};时,(0,7)是节点west锚点(文字左边缘)的位置; - 但直接调用
(d)时,TikZ默认引用节点的中心,这个位置相对于(0,7)有向右偏移(因为文字占宽度),导致矩形计算错位。
提取节点原始坐标的方法
要获取你at指定的坐标,直接调用节点对应的锚点即可——因为你设置了anchor=west,所以节点的west锚点就是你定义的(0,7)、(0,5)等原始位置。修改后的代码如下:
\documentclass[a4paper]{article} \usepackage{tikz} \usetikzlibrary{calc} \begin{document} \begin{tikzpicture} \node (d) at (0, 7) [anchor=west] {$D_i$}; \node (c) at (0, 5) [anchor=west] {$C^j$}; \node (b) at (0, 3) [anchor=west] {$B_k$}; \node (a) at (0, 1) [anchor=west] {$A$}; % 调用节点的west锚点,即原始定位坐标 \draw ($(a.west)+(-1, -1)$) rectangle ($(b.west)+(1,1)$); \draw ($(c.west)+(-1, -1)$) rectangle ($(d.west)+(1,1)$); \end{tikzpicture} \end{document}
如果创建节点时没显式设置anchor(默认是center),那节点的center锚点就是at指定的坐标,直接用(d.center)就能获取。
补充
你更新的「先定义坐标再放节点」的方法,是把定位坐标和节点对象分离,这种方式逻辑清晰,适合需要重复使用定位坐标的场景。而从节点提取坐标的核心就是:明确节点的不同锚点对应不同位置,根据定义节点时的anchor参数,调用对应锚点就能拿到目标坐标。
内容的提问来源于stack exchange,提问作者flawr
相关产品推荐
相关产品推荐

