![Tikz:显示所有节点名称(用于调试)?](https://linux22.com/image/438434/Tikz%EF%BC%9A%E6%98%BE%E7%A4%BA%E6%89%80%E6%9C%89%E8%8A%82%E7%82%B9%E5%90%8D%E7%A7%B0%EF%BC%88%E7%94%A8%E4%BA%8E%E8%B0%83%E8%AF%95%EF%BC%89%EF%BC%9F.png)
有没有一种简单的方法可以显示某个范围内所有节点的名称?没有必须为节点指定明确的样式?(上下文:复杂的图形,分解成许多子命令,无法全部更改)。
我的想法是这样的,但最终陷入无休止的递归:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[debugstyle/.style={
append after command={% courtesy of Alenanno ref: https://tex.stackexchange.com/questions/287967/drawing-thin-line-around-a-multipart-tikz-shape#comment696552_287972
\pgfextra{\node [right] at (\tikzlastnode.mid east) {\tikzlastnode};}
},
}]
% this works, but not what I want:
\node[debugstyle] (hello) at (0,0) {Hello world};
% this fails, apparently endless recursion:
\begin{scope}[every node/.append style=debugstyle]
\node (hello) at (0,0) {Hello world};
\end{scope}
\end{tikzpicture}
\end{document}
答案1
问题在于您添加的节点本身就是一个节点,因此采用添加every node
另一个节点的样式,该节点再次添加一个节点,该节点又添加一个节点......
诀窍是,在完成第一阶段后禁用添加节点的代码。有多种方法可以做到这一点,但基本思路是相同的:在debugstyle
调用的代码中,我们必须禁用debugstyle
。一种简单的方法是使用debugstyle/.style={}
。分组可确保这仅影响插入的节点。
\documentclass[tikz]{standalone}
%\url{https://tex.stackexchange.com/q/611853/86}
\begin{document}
\begin{tikzpicture}[
debugstyle/.style={
append after command={% courtesy of Alenanno ref: https://tex.stackexchange.com/questions/287967/drawing-thin-line-around-a-multipart-tikz-shape#comment696552_287972
\pgfextra{
\tikzset{debugstyle/.style={}}
\node [right] at (\tikzlastnode.mid east) {\tikzlastnode};
}
},
},
]
% this works, but not what I want:
\node[debugstyle] (hello1) at (0,0) {Hello world};
% this fails, apparently endless recursion:
\begin{scope}[every node/.append style=debugstyle]
\node (hello2) at (0,-2) {Hello world};
\node (hello3) at (0,-3) {Hello world};
\end{scope}
\end{tikzpicture}
\end{document}
(我可能会在节点名称上添加一些样式,以清楚地表明它们是节点名称,也许关键overlay
是它们不会改变页面上的位置。)