Tikz 树的兄弟节点未正确对齐

Tikz 树的兄弟节点未正确对齐

看起来我在 Tikz 中制作的树的兄弟节点没有正确对齐。每个兄弟节点级别的文本行似乎不正确。

我不知道如何解决这个问题;感谢您的帮助。

\begin{figure*}
\centering
\begin{tikzpicture}[level 1/.style={sibling distance=8cm},level 2/.style={sibling distance=4cm},level 3/.style={sibling distance=2cm}]
\node {Buying a car}
 child {node {Red}
  child {node {Cloth}
   child {node {Standard}}
   child {node {Upgraded}}}
  child {node {Leather}
   child {node {Standard}}
   child {node {Upgraded}}}}
 child {node {Blue}
  child {node {Cloth}
   child {node {Standard}}
   child {node {Upgraded}}}
  child {node {Leather}
   child {node {Standard}}
   child {node {Upgraded}}}}
;
\end{tikzpicture}
\caption{Options when buying a car.}
\end{figure*}

答案1

你可以使用类似

every node/.append style={anchor=mid}

添加到您传递的选项中tikzpicture

对齐节点

或者 Forest 默认将它们对齐:

\documentclass[border=9pt]{standalone}
\usepackage{forest}

\begin{document}
\begin{forest}
  [Buying a car
    [Red
      [Cloth
        [Standard]
        [Upgraded]
      ]
      [Velvet
        [Standard]
        [Upgraded]
      ]
  ]
  [Blue
      [Cloth
        [Standard]
        [Upgraded]
      ]
      [Velvet
        [Standard]
        [Upgraded]
      ]
    ]
  ]
\end{forest}
\end{document}

无残忍对齐

答案2

字母的下行部分pg强制Upgraded节点高于Standard没有下行部分的字母。您可以通过anchor=north向节点添加选项来解决这个问题,这将使兄弟节点对齐,因为它们具有相同的大写字母高度。

\vphantom{p}另一种解决方案是在每个这样的节点后面放置一个Standard,它提供一个与字母高度相同的垂直空间p,而没有水平宽度。

答案3

这只是一个使用istgame包裹:

在此处输入图片描述

修改:为了纠正最后的文本的对齐方式,我[text depth=.25ex]相应地插入并交换了图片。

\documentclass{standalone}

\usepackage{istgame}

\begin{document}

\begin{istgame}
\tikzset{oval node/.style={ellipse node,draw=none}}
% start
\xtdistance{15mm}{80mm}
\istrooto(0){Buying a car} \istb \istb \endist
% Red or Blue
\xtdistance{15mm}{40mm}
\istrooto(1)(0-1){Red} \istb \istb \endist
\istrooto(2)(0-2){Blue} \istb \istb \endist
% Cloth or Leather
\xtdistance{15mm}{20mm}
\istrooto(a)(1-1){Cloth} \istb \istb \endist
\istrooto(b)(1-2){Leather} \istb \istb \endist
\istrooto(c)(2-1){Cloth} \istb \istb \endist
\istrooto(d)(2-2){Leather} \istb \istb \endist
% Standard or Upgrade
\foreach \x in {a,b,c,d}
{
\istrooto(A)(\x-1)[text depth=.25ex]{Standard} \endist % revised
\istrooto(B)(\x-2)[text depth=.25ex]{Upgrade} \endist  % revised
}
\end{istgame}

\end{document}

相关内容