如何在 tikz-tree 中对齐不同高度的子项?

如何在 tikz-tree 中对齐不同高度的子项?

在制作树形图时,我遇到了以下问题:

在一棵向下生长的树中,如果子树的身高不同,它们就不会排成一行。

示例 1:'foo' 的子元素名为 'A' 和 'a'。小元素 'a' 与大元素 'A' 顶部对齐。

\begin{tikzpicture}
\tikzset{grow'=down}
\tikzset{every tree node/.style={align=center,anchor=north}}
\tikzset{edge from parent/.style={draw, edge from parent path={(\tikzparentnode.south) -- +(0,-8pt)-| (\tikzchildnode)}}}
\Tree [.foo [.A ]
            [.a ]]
\end{tikzpicture}

导致:

在此处输入图片描述

现在,最简单的方法是将锚点从 改为anchor=northanchor=south这样效果很好如果子节点仅由一行组成。(然后分支的垂直长度会发生变化,这没问题。)

但是如何让后面的子元素按行对齐呢?

\begin{tikzpicture}
\tikzset{grow'=down}
\tikzset{every tree node/.style={align=center,anchor=north}}
\tikzset{edge from parent/.style={draw, edge from parent path={(\tikzparentnode.south) -- +(0,-8pt)-| (\tikzchildnode)}}}
\Tree [.foo [.A\\A ]
            [.a\\a ]]
\end{tikzpicture}

导致

在此处输入图片描述

答案1

用来\strut让两个字母具有相同的高度和深度,或者测量的高度A并使其a具有相同的高度。

\documentclass{article}
\usepackage{tikz-qtree}
\begin{document}
\tikzset{grow'=down}
\tikzset{every tree node/.style={align=center,anchor=north}}
\tikzset
  {edge from parent/.style=
    {draw,
     edge from parent path=
      {(\tikzparentnode.south) -- +(0,-8pt)-| (\tikzchildnode)
      }
    }
  }
\begin{tikzpicture}
  \Tree [.foo [.\strut A\\A ]
              [.\strut a\\a ]]
\end{tikzpicture}
%
\newlength\heightA
\settoheight\heightA{A}
\newcommand\strutA{\rule{0pt}{\heightA}}
\begin{tikzpicture}
  \Tree [.foo [.A\\A ]
              [.\strutA a\\a ]]
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容