How to measure accurately the distance between TikZ nodes centers when using relative placement?
As I don't understand the question I decided to write two answers.
If questions is how to exactly place a node at a certain distance of another node, it's easy to do it if you know the angle from initial node or it's possible to decompose the distance in its horizontal+vertical movement.
As an example, in following code, right node.center
is placed at exactly 1.55cm from centeral node.center
. There is no need to measure the distance between them.
Also another place.center
is placed at an exact distance of right node.center
but following an 60 degrees angle. Again the distance is know.
But if the question is how to measure the distance between centeral node.center
and another place.center
which is unkonwn, then calc
library can help. This is the third example.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary {positioning, calc}
\begin{document}
\begin{tikzpicture}
[place/.style={circle,draw=blue!50,fill=blue!20,thick,
inner sep=0pt,minimum size=6mm},
transition/.style={rectangle,draw=black!50,fill=black!20,thick,
inner sep=0pt,minimum size=4mm}]
\node[place] (centeral node) {};
\node[transition] (right node) [right=1.55 of centeral node] {};
\draw [|-|] (centeral node.center) -- (right node.center);
\path (right node.center) --++(60:2.13) node[place] (another place) {};
\draw[|-|] (right node.center) -- ++(60:2.13);
\draw[latex-latex] let \p1 = ($(another place.center)-(centeral node.center)$), \n1={veclen(\x1,\y1)} in (centeral node.center) -- node[above, sloped] {\n1} (another place.center);
\end{tikzpicture}
\end{document}
- Distance between of your nodes is equal to default value
node distance
between right and left side borders of nodes, i.e. between(centeral node.east)
and(right node.west)
. - For convenience of writing of the distance between their centers I increase this distance to
22mm
- Distance is calculated on the similar way as in @Ignasi answer (+1) with help of the
calc
TikZ library:
\documentclass[tikz, border=2mm]{standalone}
\usetikzlibrary{calc,
positioning,
quotes}
\begin{document}
\begin{tikzpicture}[
node distance = 22mm,
place/.style = {circle, draw=blue!50,thick, fill=blue!20,
inner sep=0pt,minimum size=6mm},
transition/.style = {draw, thick, fill=black!20,
inner sep=0pt,minimum size=4mm},
every edge quotes/.style = {auto, font=\scriptsize, inner sep=1pt}
]
\node[place] (centeral node) {};
\node[transition] (right node) [right=of centeral node] {};
%
\draw[|-|]
let \p1 = ($(right node.center) - (centeral node.center)$) in
(centeral node.center) %
to ["\x1",
"\pgfmathparse{scalar(\x1*0.35145980pt)} \pgfmathresult\,mm" '] % 1pt ~ 0.35145980mm
(right node.center);
\end{tikzpicture}
\end{document}
Addendum;
Using default value for node distance
which is 10mm (or 1 cm if you prefer), decreasing edge labels font size and and increasing its inner sep
for better readable of measured values, adding 10mm long red line between nodes, to show default value of the node distance
, and set outer sep=0pt
that it not influence to nodes distance, the above MWE become:
\documentclass[tikz, border=2mm]{standalone}
\usetikzlibrary{calc,
positioning,
quotes}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}[
place/.style = {circle, draw=blue!50,thick, fill=blue!20,
inner sep=0pt, outer sep=0pt, minimum size=6mm},
transition/.style = {draw, thick, fill=black!20,
inner sep=0pt, outer sep=0pt, minimum size=4mm},
every edge quotes/.style = {auto, font=\tiny, inner sep=5pt}
]
\node[place] (centeral node) {};
\node[transition] (right node) [right=of centeral node] {};
%
\draw[|-|]
let \p1 = ($(right node.center) - (centeral node.center)$) in
(centeral node.center) %
to ["\x1",
"\pgfmathparse{scalar(\x1*0.351459803pt)}\pgfmathresult\,mm" '] % 1pt = 0.35145980mm
(right node.center);
\draw[red] (centeral node.east) -- ++ (10mm,0);% for show default distance between nodes
\end{tikzpicture}
\end{document}
It yields to:
Value 14,9998 mm ~ 15mm is equal to:
<default node distance> + (1/2)<minimum size of left node (=3mm)>+ (1/2)<minimum size of right node (=2mm)>