# Tikz coordinates relative to one node

Using both calc and |- would be a convenient way to refer to "inner, relative coordinates" of a node, with

• (0, 0) meaning node.center,
• (0, 1) meaning node.east and
• (.3, -.5) meaning somewhere precise (but relative) in the south east quarter.

However, as described here and there, the following coordinate is not parsed:

($(node.center)!.3!(node.east)$ |- $(node.center)!-.5!(node.north)$)


So the following convenience macro does not work:

\newcommand{\relativeToNode}[3]{($(#1.center)!#2!(#1.east)$ |- $(#1.center)!#3!(#1.north)$)}


How nice would it be to write:

\node (inner) at (\relativeToNode{outer}{.3}{-.5}) {hey!};


Is there any chance to get this working?
Any workaround that would not involve defining intermediate macros or coordinates (whose names would have to be picked etc.)?

• tikz doesn't enable calculation of coordinates on the way as you desired. you should defined one auxiliary coordinate: \coordinate (aux) at ($(node1.south) + (1,0)$); \draw ($(node1.south) + (1,0)$) to (aux |- node2.north); Aug 27, 2018 at 9:52
• @Zarko Well, it seems that it is finally possible like this :) Aug 27, 2018 at 12:15

For your use case you don't even need the calc library. You can define style relative to node=<node name> that shifts and scales the coordinate system accordingly:

\tikzset{
relative to node/.style={
shift={(#1.center)},
x={(#1.east)},
y={(#1.north)},
}
}


Then you can place your node with

\path[relative to node=outer] (-0.4,-0.5) node {Hello};


MWE:

\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}


Resulting in

• Awesome, thanks :) Since this is not my core problem, but the core problem has no solution according to Zarko, I'll edit the OP so it matches your answer best. Aug 27, 2018 at 9:59