森林代码 v.1

森林代码 v.1

这就是我所拥有的:

在此处输入图片描述

1)如何确保单词不断开且在同一行?

2) 如何通过使框更粗或更圆形以及文本更粗来突出显示右下方的框“Sub-sub-sub-total2 80,000”?

我的代码是:

\documentclass[12pt]{article}
 \usepackage{tikz}
 \usepackage{tikz-qtree}
\usetikzlibrary{trees}% cfr added this as the code fails to compile otherwise
\begin{document}
\begin{center}
\begin{tikzpicture}[level distance=1.75in,sibling distance=.25in,scale=0.75]
\tikzset{edge from parent/.style= 
    {thick, draw,
        edge from parent fork right},every tree node/.style={draw,minimum width=1.5in,text width=1in, align=center},grow'=right}
\Tree 
[. {Total \\ 500,000} 
[.{Sub-total1 \\ 250,000}
]
[. {Sub-total2 \\ 250,000}
[.{Sub-sub-total1 \\ 50,000} ]
[.{Sub-sub-total2 \\ 200,000} 
[.{Sub-sub-sub-total1 \\ 120,000} ]
[.{Sub-sub-sub-total2 \\ 80,000} ]
]
] 
]

\end{tikzpicture}

\end{center}
\end{document}

PS 实际上,我发现我创建的这个图表相当丑陋。我认为方框之间有很多未使用的空间。你能帮我把它弄得紧凑且易于阅读吗?谢谢。

答案1

如果您愿意使用forest,它可以轻松完成您想要的操作。Forest 是一个基于 TikZ 的专用于绘制树的包。具体来说,它旨在生成(可选但默认)极其紧凑的树。它经过多个循环,首先排版节点,然后打包它们,然后计算它们的位置,并且仅在所有计算完成后才绘制树。它也非常灵活和强大。

在这种情况下,您可以简单地让 Forest 计算出紧凑但美观的树所需的节点宽度和节点之间的间距。

edges库提供了forked edges类似于trees库的选项edge from parent forked ...。TikZ 选项可自由用于设置树的样式。

要使用该edges库,我们可以将其作为包选项传递。

\usepackage[edges]{forest}

然后我们可以用来forked edges设置树的样式。

\begin{forest}
  forked edges,

我们还想将默认的生长方向从默认的向南改为向东。我们可以使用grow'=0来实现这一点('只是停止改变绘制子项的顺序)。我们希望我们的更改适用于整棵树,所以我们使用for tree={...}

  for tree={
    grow'=0,

我们希望每个节点都能使用draw,并且我们希望文本居中。

    draw,
    align=c,

我建议在节点文本中使用无衬线字体。虽然过度使用无衬线字体是错误的,但它在图表中效果通常很好,尤其是非常紧凑的图表。

    font=\sffamily,

我认为将节点边界的角弄圆也会使树更漂亮一些,而不会显得太过挑剔。

    rounded corners,
  },

显然,这都是可选的,如果您愿意,可以轻松省略。

定义样式highlight是为了轻松突出显示节点。

  highlight/.style={
    thick,
    font=\sffamily\bfseries
  }
  [{Total\\500,000}

如果您只需要一个节点,您可能更愿意直接添加选项。我倾向于随时创建样式,因为我可能会更广泛地应用它们并保持整洁。

然后我们就让 Forest 做它的事情......

森林树

完整代码:

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage[edges]{forest}
\begin{document}
\begin{forest}
  forked edges,
  for tree={
    grow'=0,
    draw,
    align=c,
    font=\sffamily,
    rounded corners,
  },
  highlight/.style={
    thick,
    font=\sffamily\bfseries
  }
  [{Total\\500,000}
    [{Sub-total1\\250,000}
    ]
    [{Sub-total2\\250,000}
      [{Sub-sub-total1\\50,000}]
      [{Sub-sub-total2\\200,000}
        [{Sub-sub-sub-total1\\120,000}]
        [{Sub-sub-sub-total2\\80,000}, highlight]
      ]
    ]
  ]
\end{forest}
\end{document}

森林代码 v.1

上述代码适用于当前 Forest。如果您只有版本 1 且无法更新,您将收到编译错误,并且需要以下代码。

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}% for version 1
\begin{document}
\begin{forest}
  for tree={
    grow'=0,
    draw,
    align=c,
    font=\sffamily,
    rounded corners,
    parent anchor=east,
    child anchor=west,
    edge path={%
      \noexpand\path [\forestoption{edge}] (!u.parent anchor) -- ++(5pt,0) |- (.child anchor)\forestoption{edge label};
    }
  },
  highlight/.style={
    thick,
    font=\sffamily\bfseries
  }
  [{Total\\500,000}
    [{Sub-total1\\250,000}
    ]
    [{Sub-total2\\250,000}
      [{Sub-sub-total1\\50,000}]
      [{Sub-sub-total2\\200,000}
        [{Sub-sub-sub-total1\\120,000}]
        [{Sub-sub-sub-total2\\80,000}, highlight]
      ]
    ]
  ]
\end{forest}
\end{document}

版本 1 版本

答案2

例如(\mbox如果文本宽度足够大,则不需要 es。现在文本宽度=1.5 英寸(原为 1 英寸)):

\documentclass[12pt]{article}
 \usepackage{tikz}
 \usepackage{tikz-qtree}
\begin{document}
\begin{center}
\begin{tikzpicture}[level distance=1.75in,sibling distance=.25in,scale=0.75]
\tikzset{edge from parent/.style= 
    {thick, draw,
%        edge from parent fork right
},every tree node/.style={draw,minimum width=1.5in,text width=1.5in, align=center},grow'=right}
\Tree 
[. {Total \\ 500,000} 
[.{Sub-total1 \\ 250,000}
]
[. {Sub-total2 \\ 250,000}
[.{\mbox{Sub-sub-total1} \\ 50,000} ]
[.{\mbox{Sub-sub-total2} \\ 200,000} 
[.{\mbox{Sub-sub-sub-total1} \\ 120,000} ]
[.\node[draw, ultra thick]{{\mbox{\textbf{Sub-sub-sub-total2}} \\ \textbf{80,000}}}; ]
]
] 
]

\end{tikzpicture}

\end{center}
\end{document}

在此处输入图片描述

相关内容