如何在 TikZ 中有条件地绘制树的节点

如何在 TikZ 中有条件地绘制树的节点

我想用 tikZ(版本 2.10)绘制几棵树,它们非常相似,因为有第一棵树,其他树是通过省略第一棵树的一些节点获得的。我想避免复制和粘贴,以保持可编辑。因此,结果应该是什么样子的一个最小示例如下:

  \begin{tikz}
    \node {eins}
    child{
      node{zwei}
      child{
        node{drei}
      }
    }
    ;
  \end{tikz}


  \begin{tikz}
    \node {eins}
    child{
      child{
        node{drei}
      }
    }
    ;
  \end{tikz}

我尝试使用以下 \newif \if 构造:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \newif\ifShow
  \Showtrue
  \node {eins}
   child{
     \ifShow
       node{zwei}
      \fi
      child{
        node{drei}
      }
   }
   ;
\end{tikzpicture}
\end{document}

但它会导致错误消息“错误:包 pgf 错误:没有已知的形状名称。”问题似乎出在子节点{node{drei}}上。如果我删除这部分,节点{zwei}的条件绘制就可以正常工作。

您对如何使用 TikZ 有条件地绘制树节点有什么建议吗?

答案1

按照 Peter 的链接,我尝试了一种不同的 if then else 机制。以下代码在 tikz 2.10 中正常运行。我猜 tikz 2.10 已经过时了,但我为像我这样无法轻松控制 tikz 版本的人添加了此解决方案。

\documentclass{article}

\usepackage{tikz}
\usepackage{etoolbox}

\newbool{DEBUG}
\booltrue{DEBUG}
%\boolfalse{DEBUG}

\begin{document}
  \begin{tikzpicture}
    \node {eins}
    child{
      \ifbool{DEBUG}{%IF Debug True
       node{zwei}
       }{%else nothing
       }
      child{
        node{drei}
      }
    }
    ;
  \end{tikzpicture}

\end{document}

相关内容