构造节点并稍后绘制

构造节点并稍后绘制

以下 mwe 取自: https://tex.stackexchange.com/a/336315/239572

https://www.latex4technics.com/?note=zzvqvi

\documentclass[border=10pt,multi,tikz]{standalone}
\begin{document}
% adapted from manual 1030
\newbox\mybox
\newcommand*\mysaver{%
  \global\setbox\mybox=\box\pgfpositionnodelaterbox
  \global\let\myname=\pgfpositionnodelatername
  \global\let\myminx=\pgfpositionnodelaterminx
  \global\let\myminy=\pgfpositionnodelaterminy
  \global\let\mymaxx=\pgfpositionnodelatermaxx
  \global\let\mymaxy=\pgfpositionnodelatermaxy
  \pgfmathsetlengthmacro\mylaternodexlength{abs(\mymaxx-\myminx)-\pgflinewidth}%
  \global\let\mylaternodewidth=\mylaternodexlength
}
\newcommand*\myrestorer{%
  \let\pgfpositionnodelatername=\myname
  \let\pgfpositionnodelaterminx=\myminx
  \let\pgfpositionnodelaterminy=\myminy
  \let\pgfpositionnodelatermaxx=\mymaxx
  \let\pgfpositionnodelatermaxy=\mymaxy
  \setbox\pgfpositionnodelaterbox=\box\mybox
}
\def\mylaternode#1;{%
  {%
    \pgfpositionnodelater{\mysaver}
    \node #1;
  }%
}
\def\placemynode(#1,#2){%
  \myrestorer
  \pgfpositionnodenow{\pgfqpoint{#1}{#2}}%
}
\begin{tikzpicture}
  \mylaternode [fill=magenta, blend mode=normal, draw=magenta, fill opacity=.5, draw opacity=.75] (hi) {Hello world};
  \node [top color=blue!50!cyan, bottom color=blue!50!cyan, middle color=white, minimum height=20mm, minimum width=\mylaternodewidth, draw=blue!50!cyan] at (10mm,10mm) {};
  \placemynode(10mm,10mm)
\end{tikzpicture}
\end{document}

我该如何扩展它以概括 \mylaternode 和 \placemynode,以便以后可以创建和放置多个节点?在我看来,最干净的方法是使用节点名称 (hi),但我实际上不知道 latex 的语法可能性,这就是我寻求帮助的原因

编辑:提出这个问题的原因是我有一堆大小不同且有时会重叠的节点。我想根据它们的渲染大小来放置它们。节点内容是从 csv 文件中读取的

方法“左/右=其他节点”似乎不够用,因为它们已经相对于第三个节点放置。

例如

\node (a) {a};
\node (b) at ($(a)+(1,0)$) {b};
\node (c) at ($(a)+(1.5,.5)$) {c};

由于节点大小 a+(1.5,.5) 与 a+(1,0) 重叠

对于以这种方式放置的大多数节点,问题不会发生,因此问题仍然存在于重叠的其余节点中

相关内容