以下 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) 重叠
对于以这种方式放置的大多数节点,问题不会发生,因此问题仍然存在于重叠的其余节点中