9

I need to know the height of a TikZ node and store it in a length so it can later be used by other commands and reference this exact dynamic length.

So here is an MWE that illustrates what I want to do, but of course this is not how \totalheightof works, it measures the height of the text, but I want to get the height of the node:

\documentclass{article}

\newlength{\heightOfMyNode} \usepackage{tikz,calc}

\begin{document} \begin{tikzpicture} \node(mynode)[text width=3cm]{This is a node that varies in height and I need to know the hieght and store it in a length}; \end{tikzpicture} \setlength{\heightOfMyNode}{\totalheightof{node.height}}

And here I want to use the length for a \rule{\heightOfMyNode}{2pt} \end{document}

Looking forward to your suggestions, especially direct TikZ/PGF solutions that I overlooked, maybe with \veclen?

TobiBS
  • 5,240
  • 1
    tcolorbox (section 12.9) includes \tcbsetmacrotowidthofnode and tcbsetmacroheightofnode to store these values inside a macro, but I don't know how to make them to survive outside the tikzpicture. – Ignasi Jul 20 '20 at 11:09

1 Answers1

11

Well, I suppose you just want to know the width and height of box containing a node that may be transformed. Then it is easy to calculate the width and height of the bounding box.

\documentclass[tikz, border=1cm]{standalone}
\usetikzlibrary{fit, calc}
\usepackage{xparse}
\makeatletter
\NewDocumentCommand {\getnodedimen} {O{\nodewidth} O{\nodeheight} m} {
  \begin{pgfinterruptboundingbox}
  \begin{scope}[local bounding box=bb@temp]
    \node[inner sep=0pt, fit=(#3)] {};
  \end{scope}
  \path ($(bb@temp.north east)-(bb@temp.south west)$);
  \end{pgfinterruptboundingbox}
  \pgfgetlastxy{#1}{#2}
}
\makeatother

\begin{document} \begin{tikzpicture} \node(mynode)[text width=3cm, draw=red]{This is a node that varies in height and I need to know the hieght and store it in a length}; \getnodedimen{mynode} \node[draw, minimum height=\nodeheight, minimum width=\nodewidth] at (4, 0) {}; \end{tikzpicture} \end{document}

enter image description here

ZhiyuanLck
  • 4,516