![相对于一个节点的Tikz坐标](https://linux22.com/image/381577/%E7%9B%B8%E5%AF%B9%E4%BA%8E%E4%B8%80%E4%B8%AA%E8%8A%82%E7%82%B9%E7%9A%84Tikz%E5%9D%90%E6%A0%87.png)
同时使用calc
和|-
可以方便地引用节点的“内部相对坐标”,其中
(0, 0)
意义node.center
,(0, 1)
意义node.east
和(.3, -.5)
意思是位于东南角的某个精确的(但是相对的)。
($(node.center)!.3!(node.east)$ |- $(node.center)!-.5!(node.north)$)
因此以下便利宏不起作用:
\newcommand{\relativeToNode}[3]{($(#1.center)!#2!(#1.east)$ |- $(#1.center)!#3!(#1.north)$)}
如果能这样写该有多好:
\node (inner) at (\relativeToNode{outer}{.3}{-.5}) {hey!};
有机会让它发挥作用吗?
有没有不涉及定义中间宏或坐标(必须选择其名称)的解决方法ETC。)?
答案1
对于您的用例,您甚至不需要该calc
库。您可以定义relative to node=<node name>
相应移动和缩放坐标系的样式:
\tikzset{
relative to node/.style={
shift={(#1.center)},
x={(#1.east)},
y={(#1.north)},
}
}
然后你可以将你的节点放在
\path[relative to node=outer] (-0.4,-0.5) node {Hello};
梅威瑟:
\documentclass[tikz,margin=2mm]{standalone}
\tikzset{
relative to node/.style={
shift={(#1.center)},
x={(#1.east)},
y={(#1.north)},
}
}
\begin{document}
\begin{tikzpicture}
\node[minimum width=2cm,minimum height=3cm,draw=red] (outer) at (3,3) {};
% Only for the grid
\begin{scope}[relative to node=outer]
\foreach \ratio in {-1,-0.8,...,1}{
\draw[help lines] (-1,\ratio) -- (1,\ratio);
\draw[help lines] (\ratio,-1) -- (\ratio,1);
}
\draw (-1,0) -- (1,0);
\draw (0,-1) -- (0,1);
\end{scope}
\path[relative to node=outer] (-0.4,-0.5) node {Hello};
\end{tikzpicture}
\end{document}
导致