二叉树代码一年后不再起作用

二叉树代码一年后不再起作用

今天运行旧的 Latex 代码时遇到了麻烦(我猜是因为相应的包发生了变化)。问题是现在 Latex 给我带来了许多与节点名称相关的错误。我应该做哪些更改才能让它再次工作?

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}[>=stealth,sloped]
 \tikzstyle{hn}=[circle,draw,inner sep=0.01]
 \tikzstyle{sn}=[circle,draw,inner sep=0.01,fill=black]
      \matrix (tree) [%
        matrix of nodes,
        minimum size=0.6cm,
        column sep=0.8cm,
        row sep=0.1cm,
      ]
      {
                   &              &              &              &              & \node[sn]{};  \\
                   &              &              &              & \node[sn]{}; &             \\
                   &              &              & \node[sn]{}; &              & \node[sn]{};  \\
                   &              & \node[sn]{}; &              & \node[sn]{}; &             \\
                   & \node[hn]{}; &              & \node[hn]{}; &              & \node[sn]{};  \\
      \node[hn]{}; &              & \node[hn]{}; &              & \node[hn]{}; &             \\
                   & \node[hn]{}; &              & \node[hn]{}; &              & \node[sn]{};  \\
                   &              & \node[hn]{}; &              & \node[hn]{}; &             \\
                   &              &              & \node[hn]{}; &              & \node[sn]{};  \\
                   &              &              &              & \node[sn]{}; &             \\
                   &              &              &              &              & \node[sn]{};  \\           
      };
      \draw[-] (tree-6-1)--(tree-5-2){};
      \draw[-] (tree-6-1)--(tree-7-2){};
      \draw[-] (tree-5-2)--(tree-4-3){};
      \draw[-] (tree-5-2)--(tree-6-3){};
      \draw[-] (tree-7-2)--(tree-6-3){};
      \draw[-] (tree-7-2)--(tree-8-3){};
      \draw[-] (tree-4-3)--(tree-3-4){};
      \draw[-] (tree-4-3)--(tree-5-4){};
      \draw[-] (tree-6-3)--(tree-5-4){};
      \draw[-] (tree-6-3)--(tree-7-4){};
      \draw[-] (tree-8-3)--(tree-7-4){};
      \draw[-] (tree-8-3)--(tree-9-4){};
      \draw[-] (tree-3-4)--(tree-2-5){};
      \draw[-] (tree-3-4)--(tree-4-5){};
      \draw[-] (tree-5-4)--(tree-4-5){};
      \draw[-] (tree-5-4)--(tree-6-5){};
      \draw[-] (tree-7-4)--(tree-6-5){};
      \draw[-] (tree-7-4)--(tree-8-5){};
      \draw[-] (tree-9-4)--(tree-8-5){};
      \draw[-] (tree-9-4)--(tree-10-5){};
      \draw[-] (tree-2-5)--(tree-1-6){};
      \draw[-] (tree-2-5)--(tree-3-6){};
      \draw[-] (tree-4-5)--(tree-3-6){};
      \draw[-] (tree-4-5)--(tree-5-6){};
      \draw[-] (tree-6-5)--(tree-5-6){};
      \draw[-] (tree-6-5)--(tree-7-6){};
      \draw[-] (tree-8-5)--(tree-7-6){};
      \draw[-] (tree-8-5)--(tree-9-6){};
      \draw[-] (tree-10-5)--(tree-9-6){};
      \draw[-] (tree-10-5)--(tree-11-6){};
      \end{tikzpicture}

Figure 1.    

\end{document}

答案1

你只需要改变一切

\node[hn]{};

|[hn]|

节点也类似sn。当\node在单元格开头使用时,它不会自动命名,但您可以使用向单元格添加选项|[...]|

话虽如此,但可能还有更好、更方便的方法来画这样的树。不过我不是树木专家,所以我把这个留给其他人吧。

其他一些评论:

  • \draw[-] (tree-6-1)--(tree-5-2){};:末尾[-]的 和都不需要。{}
  • 通常建议使用\tikzset{stylename/.style={...}}而不是tikzstyle。不过,在这种情况下,您要在 中定义样式tikzpicture,我只需这样做

    \begin{tikzpicture}[>=stealth,sloped,
       hn/.style={circle,draw,inner sep=0.01},
       sn/.style={circle,draw,inner sep=0.01,fill=black}]
    

答案2

这是绘制提到的图形的更方便的方法之一Torbjørn T.。从技术上讲,该图不是树。因此,我尝试将其排版为树,但只取得了部分成功。但是,使用模块化 Sugiyama 布局算法(由 Ti 实现)Z,取得了令人满意的结果。

由于此程序使用自动算法来布局树,因此需要 LuaTeX。如果您由于没有 而出现错误luatex85.sty,只需删除该行\RequirePackage{luatex85},因为只有较新版本的引擎才需要此行。如果您使用标准类而不是 ,则可能不需要加载该包standalone

\RequirePackage{luatex85}
\documentclass[multi,tikz,border=10pt]{standalone}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{layered}
\begin{document}
\begin{tikzpicture}
  \graph [layered layout, grow=0, sibling distance=10mm, nodes={circle, draw, as= }]
  {
    0  -- { 11 -- { 21 -- { 31 -- { 41[fill] -- { 51[fill], 52[fill] }, 42 -- { 52, 53[fill] } } , 32 -- { 42, 43 -- { 53, 54[fill] } } } , 22  -- { 32 , 33 -- { 43, 44[fill] -- { 54, 55[fill] } } } } , 12 -- { 22 , 23[fill] -- { 33, 34[fill] -- { 44, 45[fill] -- { 55, 56[fill] } } } } }
  }
  ;
\end{tikzpicture}
\end{document}

分层图

相关内容