编辑

编辑

我有一棵树,我需要让它看起来无限。我需要在每个树枝的末端画一个省略号。如果可能的话,我希望省略号是垂直方向的(没什么大不了的)

\documentclass[paper=a4, fontsize=10pt]{article} % A4 paper and 11pt font size

\usepackage{forest}

\begin{document}

        \begin{center}
            \begin{forest}
                for tree={
                    if n=1{edge label={node [midway, left, anchor=south] {0} } }{edge label={node [midway, right, anchor=south] {1} } },
                    draw,
                    circle,
                    if level=0{}{!u.s sep/.wrap pgfmath arg={#1}{35mm/(level())}},
                    anchor=mid,
                }
                [6
                    [2
                        [2, edge label={node [midway, left] {1} } 
                            [1
                                [1, edge label={node [midway, left] {1} } 
                                    [1, edge label={node [midway, left] {1} }
                                        [1, edge label={node [midway, left] {1} } ]
                                    ]
                                ]
                            ]
                            [1
                                [1, edge label={node [midway, left] {1} } 
                                    [1, edge label={node [midway, left] {0} } 
                                        [1, edge label={node [midway, left] {1} } 
                                            [..., draw=none]
                                        ]
                                    ]
                                ]
                            ]
                        ]
                    ]
                ]
            \end{forest}
        \end{center}    
\end{document}

我可以通过不出现边和 0 来摆脱节点的圆。

上一个问题创建一棵树,其中所有左边缘均为 0,右边缘均为标签 1,并且节点为圆形绘制

答案1

我们可以为所有终端节点创建一个到空节点的最终虚边:

\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
  for tree={
    if n=1{edge label={node [midway, left, anchor=south] {0} } }{edge label={node [midway, right, anchor=south] {1} } },
    draw,
    circle,
    if level=0{}{!u.s sep/.wrap pgfmath arg={#1}{35mm/(level())}},
    anchor=mid,
  },
  before typesetting nodes={
    where n children=0{%
      append={[, edge={dotted, shorten <=5pt} ]}
    }{}
  }
  [6
      [2
          [2, edge label={node [midway, left] {1} }
              [1
                  [1, edge label={node [midway, left] {1} }
                      [1, edge label={node [midway, left] {1} }
                          [1, edge label={node [midway, left] {1} } ]
                      ]
                  ]
              ]
              [1
                  [1, edge label={node [midway, left] {1} }
                      [1, edge label={node [midway, left] {0} }
                          [1, edge label={node [midway, left] {1} }
                          ]
                      ]
                  ]
              ]
          ]
      ]
  ]
\end{forest}
\end{document}

虚线边缘

但是,当前的edge label代码没有任何意义。由于我不确定它现在应该做什么,所以我无法建议如何纠正它。

编辑

我知道以上就是你想要的答案,但edge label内容仍然很乱。很难猜测什么可以完成这项工作,因为我不知道这项工作是什么。(这很公平 - 你没有问任何人如何完成这项工作,所以你没有理由解释它。)

这里有一种方法可以满足我的好奇心。这个想法就是将标签的位置与内容分开。

默认情况下,标签大多会获取内容,1因为它们大部分都1在目标图像中。这可以用 覆盖,如所示my label=<something else>。如果节点有兄弟节点,则左子节点的默认内容是0而不是1。(我认为这类似于您在之前的问题中要求的内容,您已在上面链接了这个问题。)

标签大多放在左侧。如果是分支,则右子节点的标签会放在右侧,其子节点的标签也是如此,只要分支保持“直”,即没有分支。

结果是这样的

标签代码的单独位置和内容

显然可以根据您的需要进行修改。

\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage{forest}
\begin{document}
\forestset{%
  declare boolean={leftwards}{1},
  declare toks={my label}{1},
}
\begin{forest}
  for tree={
    draw,
    circle,
      if={n_children()>1}{
        for n=1{
          my label=0,
          for tree={leftwards},
          for descendants={my label=1}
        },
        for n'=1{
          for tree={not leftwards, my label=1}
        },
      }{},
    if level=0{}{%
      !u.s sep/.wrap pgfmath arg={#1}{35mm/(level())}
    },
    anchor=mid,
  },
  before typesetting nodes={
    where n children=0{%
      delay={%
        append={[, edge={dotted, shorten <=5pt} ]}
      }
    }{},
    where level=0{}{% this places the labels as specified
      if={n_children("!u")==1}{%
        if leftwards={%
          edge label/.wrap pgfmath arg={%
            node [midway, left, anchor=east] {#1}
          }{my_label()},
        }{%
           edge label/.wrap pgfmath arg={%
            node [midway, right, anchor=west] {#1}
          }{my_label()},
       }
      }{%
        if n=1{%
          edge label/.wrap pgfmath arg={%
            node [midway, left, anchor=south east] {#1}
          }{my_label()},
        }{%
          edge label/.wrap pgfmath arg={%
            node [midway, right, anchor=south west] {#1}
          }{my_label()},
        },
      },
    }
  }
  [6
    [2
      [2,
        [1
          [1,
            [1,
              [1,
              ]
            ]
          ]
        ]
        [1
          [1,
            [1, my label=0
              [1,
              ]
            ]
          ]
        ]
      ]
    ]
  ]
\end{forest}
\end{document}

相关内容