tikz 树形布局的子节点居中

tikz 树形布局的子节点居中

如何强制 tikz 的中间子节点tree layout与其父节点垂直对齐?例如,在下面的代码中,根节点的中间子节点明显位于根节点中心的左侧。

\documentclass[english]{article}
\usepackage{tikz}
\usetikzlibrary{graphdrawing,graphs}
\usegdlibrary{trees}
\begin{document}
\begin{tikzpicture}[tree layout]
\tikzset{sibling distance=0em}
\tikzset{sibling sep=0em}
\node {$+$}
 child {node{$+$}
  child {node{$Exp$}}
  child {node{$+$}}
  child {node{$Exp$}}
 }
 child {node{$+$}}
 child {node{$Exp$}}
;
\end{tikzpicture}
\end{document}

sibling distance请注意,如果我不设置,sibling sep问题就会消失0em,但我需要这些来获得一些较大的图表以适应我的文档的上下文。

答案1

如果您准备使用专业的树绘图包 Forest,那么您可以实现高度的灵活性和对输出的控制。

除了允许高度控制和支持强大的自动化选项之外,Forest 还允许非常简洁地指定树。在这种情况下,树本身由以下公式给出

 [+[+[Exp][+][Exp]][+][Exp]]

虽然

  [+
    [+
      [Exp]
      [+]
      [Exp]
    ]
    [+]
    [Exp]
  ]

由于它反映了树的空间结构,因此对于人类来说更容易阅读。

例如,

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
  for tree={%
    math content,
    s sep=0pt,
    text height/.pgfmath={height("Xpy")},
    text depth/.pgfmath={depth("Xpy")},
  },
  where level=0{}{
    if={n()==((n_children("!u")+1)/2)}{calign with current}{},
  },
  [+
    [+
      [Exp]
      [+]
      [Exp]
    ]
    [+]
    [Exp]
  ]
\end{forest}
\end{document}

森林解决方案

相关内容