单独带有 tikz 的版本。

单独带有 tikz 的版本。

有人能帮我在 tikz 上重新创建这张图片吗?我真的不知道从哪里开始

图 2

答案1

请注意,我认为我不应该回答“为我做”的问题,但有时我会做我认为不应该做的事情。

我会使用 Forest。其他人会使用其他东西。MetaPost、普通的 TikZtikz-trees等。事实上,树非常简单。唯一稍微不标准的地方是三角根。这里的技巧是使用shape border rotate形状旋转但文本不旋转。

\documentclass[border=12pt]{standalone}
% ateb: https://tex.stackexchange.com/a/714445/
\usepackage[edges]{forest}
\usetikzlibrary{shapes.geometric}

\begin{document}
\begin{forest}
  forked edges,
  for descendants={circle,},
  for tree={draw,font=\sffamily,thick,edge+=thick,},
  regular polygon sides=3,
  regular polygon,
  shape border rotate=180,
  inner sep=0pt,  
%  for children={fork sep'=0pt,},% uncomment to remove line between root and edge
  [10 [5] [3 [1][1]]]
\end{forest}
\end{document}

[由于 Okular 错误,我目前无法制作任何有价值的图像,所以我甚至不会尝试。]

来自社区结果

答案2

单独带有 tikz 的版本。

更新:去除根部下方小垂直线的技巧

为此,我构建了节点而不追踪边缘。然后我手动构建它们。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,shapes.geometric}

\begin{document}
\begin{tikzpicture}[
every child node/.style={circle,draw},
edge from parent path={}
]
\node[regular polygon, regular polygon sides=3,draw,shape border rotate=60,inner sep=0pt]
(root) {10}[sibling distance=20mm]
child {node {5}}
child {node {3}[sibling distance=10mm]
    child {node {1}}
    child {node {1}}
};
\coordinate (aux) at ($(root-2-1)!.5!(root-2-2)!.5!(root-2)$);
\draw(root-2-1)|-(aux)--(root-2);
\draw(root-2-2)|-(aux)--(root-2);
\draw(root-1)|-(root.south);
\draw(root-2)|-(root.south);
\end{tikzpicture}

\end{document}

在此处输入图片描述

第一个答案:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,shapes.geometric}

\begin{document}
\begin{tikzpicture}[every child node/.style={circle,draw},
edge from parent path=
{(\tikzparentnode.south) |-($(\tikzparentnode.south)!.5!(\tikzchildnode.north)$)-| (\tikzchildnode.north)}
]
\node[regular polygon, regular polygon sides=3,draw,shape border rotate=60,inner sep=0pt]
(root) {10}[level distance =15mm,sibling distance=20mm]
child {node {5}}
child {node {3}[level distance=12mm,sibling distance=10mm]
    child {node {1}}
    child {node {1}}
};
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

以下是 中以基本步骤实现此目标的方法Tikz,对初学者来说可能更容易。让我们从小步骤开始:从简单开始,然后逐步完善。

我建议:

  • 查看教程手册并并行查找所有这些命令。(做起来比书面上看起来要容易得多。)
  • 为了简化我在逐步过程中展示的一些行,以便更好地理解在代码的原始或不成熟状态下结果会是什么样子。

结果

1. 放置节点

首先开始放置节点,使用虚拟文本或真实内容,这无关紧要。确保它们最终的分布或多或少符合您的要求。

有很多方法可以做到这一点。这里我使用绝对坐标,还有更多方法。所以从某事开始。例如:

...
    \node (T)   at ( 0,-1) {10};
    \node (A1)  at (-2,-2) {5};
...

这会

  • 放置节点
  • 在指定位置(以厘米为单位)
  • {..}在es里面有一些文本
  • 给他们命名(T),(A1)......这将使以后很容易引用他们的位置(见下文)

2. 连接节点

首先,直接连接节点,如下所示:

    \draw (T) -- (A1);
...
    \draw (A2) -- (B1);
...

接下来,稍微修改一下线条,通过替换 s 来使用右下分支的中间点--

 %  \draw (A2) -- (B1);
    \draw (A2) |- +(0,-1) -| (B1);
    \draw (A2) |- +(0,-1) -| (B2);

这会:

  • 从节点 (A2) 开始
  • 向下移动,然后水平移动
  • 到相对坐标中的某个点 (+x=0, +y=-1)
  • 从那里水平移动而不是垂直移动
  • 直到遇到节点(B1)

因为你想让三角形直接与线相交,所以你可以做得稍微不同一些,如下所示:

    \draw (T.south) -| (A1);
  • 从节点(T)的南侧开始,即中下部
  • 水平移动,然后垂直移动
  • 直到遇到节点 (A1)

3. 格式化节点

现在让我们做一些微调:

...
 \begin{tikzpicture}[ % self defined styles
    crc/.style={draw,circle,minimum width=6mm},
    tri/.style={draw, minimum width=6mm,inner sep=0mm,
                regular polygon,regular polygon sides=3,
                shape border rotate=180},
 ]
    % ~~~ placing the nodes ~~~~~~~~
    \node[tri] (T)  at ( 0,-1) {10};
    \node[crc] (A1) at (-2,-2) {5};
...

节点具有周围形状,默认情况下为矩形且不可见。它会根据其内容自动调整其形状尺寸。

为了使形状可见并修改许多内容,您可以向节点添加选项列表,如下所示:

   \node[draw, option=xy, option=qr, ...] at (10,20) {some text};

这很笨拙,很多时候你想多次使用一个样式。因此,你将定义移到开头,如图所示。

样式:crccrc/.style={draw,circle,minimum width=6mm},

  • 绘制(即以默认颜色(黑色)绘制形状)
  • 改变形状为圆形
  • 通过指定节点的宽度至少应为多少来间接调整其直径

要得到一个三角形,你还需要在其顶部绘制一个直径不太大的三边多边形:

\usetikzlibrary{shapes.geometric}
...
    tri/.style={draw, minimum width=6mm,inner sep=0mm,
                regular polygon,regular polygon sides=3,
                shape border rotate=180},

代码

\documentclass[10pt,border=3mm,tikz]{standalone}
\usetikzlibrary{shapes.geometric}

\begin{document}
 \begin{tikzpicture}[ % self defined styles
    crc/.style={draw,circle,minimum width=6mm},
    tri/.style={draw, minimum width=6mm,inner sep=0mm,
                regular polygon,regular polygon sides=3,
                shape border rotate=180},
 ]
    % ~~~ placing the nodes ~~~~~~~~
    \node[tri] (T)  at ( 0,-1) {10};
    \node[crc] (A1) at (-2,-2) {5};
    \node[crc] (A2) at ( 2,-2) {3};
    \node[crc] (B1) at ( 1,-4) {1};
    \node[crc] (B2) at ( 3,-4) {1};
    
    % ~~~ connections ~~~~~~~
    \draw (T.south) -| (A1);
    \draw (T.south) -| (A2);
    
 %  \draw (A2) -- (B1);
    \draw (A2) |- +(0,-1) -| (B1);
    \draw (A2) |- +(0,-1) -| (B2);
    
 \end{tikzpicture}
\end{document}

相关内容