You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:40:40