Tikz:显示所有节点名称(用于调试)?

Tikz:显示所有节点名称(用于调试)?

有没有一种简单的方法可以显示某个范围内所有节点的名称?没有必须为节点指定明确的样式?(上下文:复杂的图形,分解成许多子命令,无法全部更改)。

我的想法是这样的,但最终陷入无休止的递归:

\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是它们不会改变页面上的位置。)

相关内容