当使用 TikZ 库中的不同形状时,它们对文本具有不同的内部填充。因此,对于相似的文本,我们将具有不同大小的节点(形状)。然后,子节点将不相似,整个树将变得笨拙。统一具有相似文本的形状大小的标准方法是什么。这是一个简单的例子,显示了梯形和三角形的显著差异。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,trees}
\begin{document}
\begin{tikzpicture}
\node[circle,fill=blue] (par) at (0,0) {Parent}
[level distance=4cm,sibling angle=45,clockwise from=80]
child {node[regular polygon,regular polygon sides=3,fill=red] (child1) {Child 1}}
child {node[regular polygon,regular polygon sides=4,fill=yellow] (child2) {Child 2}}
child {node[trapezium,fill=green] (child3) {Child 3}};
\end{tikzpicture}
\end{document}
答案1
以下是使图表更加美观的尝试:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,trees}
\begin{document}
\begin{tikzpicture}
\tikzset{every node/.style={minimum width=2.5cm,minimum height=2.5cm}}
\tikzset{trapezium stretches=true}
\node[circle,fill=blue] (par) at (0,0) {Parent}
[level distance=6cm,sibling angle=45,clockwise from=80]
child {node[regular polygon,regular polygon sides=3,fill=red] (child1) {Child 1}}
child {node[regular polygon,regular polygon sides=4,fill=yellow] (child2) {Child 2}}
child {node[trapezium,fill=green] (child3) {Child 3}};
\end{tikzpicture}
\end{document}
如您所见,修改了三处:
- 通过添加,
minimum width=2.5cm,minimum height=2.5cm
你可以确保节点不会缩小到给定的大小以下 - 我增加了
level distance
让事情看起来更好 - 最后,但并非最不重要的一点,我添加了行
\tikzset{trapezium stretches=true}
。这解决了纵横比问题。如果没有这个,梯形的宽度会不成比例地增加,以适应minimum height
你喜欢它?
编辑\tikzset{every node/.style={inner sep=1pt]}
:好的,我现在明白了。您可以通过添加或任何您想要的尺寸来减少填充。
编辑2:我们再来一次。:)
主要的挑战在于节点有各种形状,并且每个节点的行为都不同,正如您在评论中所说的那样。我仍然认为您应该将设置minimum height
为某个值,以确保将设置为某个负值时梯形和圆不会缩小太多inner sep
。然后,您可以通过强制底角来纠正梯形的形状:
\begin{tikzpicture}
\tikzset{every node/.style={inner sep=-3pt,minimum height=1.5cm}}
\tikzset{trapezium stretches=true,trapezium angle=3}
\node[circle,fill=blue] (par) at (0,0) {Parent}
[level distance=4cm,sibling angle=45,clockwise from=80]
child {node[regular polygon,regular polygon sides=3,fill=red] (child1) {Child 1}}
child {node[regular polygon,regular polygon sides=4,fill=yellow] (child2) {Child 2}}
child {node[trapezium,fill=green] (child3) {Child 3}};
\end{tikzpicture}