这就是我所拥有的:
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}
答案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}