森林树-如何绘制双边框节点?

森林树-如何绘制双边框节点?

我正在寻找类似的东西(有限自动机)。我想将特定节点绘制为结束节点,这意味着该节点应该有两个圆圈作为边框。我用它forest来绘制我的树

目前我正在使用此代码生成树。应该有一个“结束节点”用于“Jack”、“Java”、“Jim”、“Ron”和“Ronny”(始终位于最后一个匹配节点)

\documentclass{beamer}
\usepackage{forest}
\begin{document}
\begin{forest}
    for tree={
        circle,
        black,
        draw,
        minimum size = 2em,
        font=\Large,
        edge={->},
        s sep = 30pt
    }
    [{}
        [J, edge label={node[midway, left]{J}}
            [a, edge label={node[midway, left]{a}}
                [c,  edge label={node[midway, left]{c}}
                    [k,  edge label={node[midway, left]{k}}]]
                [v,  edge label={node[midway, left]{v}}
                    [a,  edge label={node[midway, left]{a}}]]]
            [i,  edge label={node[midway, left]{i}}
                [m,  edge label={node[midway, left]{m}}]]]
        [R,  edge label={node[midway, right]{R}}
            [o,  edge label={node[midway, right]{o}}
                [n,  edge label={node[midway, right]{n}}
                    [n,  edge label={node[midway, right]{n}}
                        [y,  edge label={node[midway, right]{y}}]]]]]]
\end{forest}
\end{document}

答案1

同时我在我的示例库中找到了一个简单的示例:

\documentclass[tikz,multi,border=5pt]{standalone}
\usepackage{forest}

\begin{document}
    \begin{forest}
  for tree={
    draw=teal,
    line width=0.4pt,
    edge={draw=teal,very thin},
    grow=east,
    circle,
    l sep=19mm,
%    anchor=children,
    anchor=parent,  
  }
  [A, double, outer sep=0.5pt,
    [B]
    [C]
  ]
    \end{forest}
\end{document}

在此处输入图片描述

这就是你要找的吗?

答案2

这是获得所需边缘标签模式的一种不太费力的方法。这完全是题外话,甚至没有尝试回答实际问题,Zarko 已经讲过了。

\documentclass[border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
  for tree={
    circle,
    black,
    draw,
    minimum size = 2em,
    font=\Large,
    edge={->},
    s sep = 30pt
  },
  delay={
    for nodewalk={fake=r,1,descendants}{
      if edge label={}{}{
        edge label/.wrap value={ node [midway, left] {#1} }
      }
    },
    for nodewalk={fake=r,l,descendants}{
      if edge label={}{}{
        edge label/.wrap value={ node [midway, right] {#1} }
      }
    }
  }
  [
    [J, edge label=J
      [a, edge label=a
        [c,  edge label=c
          [k,  edge label=k]]
        [v,  edge label=v
          [a,  edge label=a]]]
      [i,  edge label=i
        [m,  edge label=m]]]
    [R,  edge label=R
      [o,  edge label=o
        [n,  edge label=n
          [n,  edge label=n
            [y,  edge label=y]]]]]]
\end{forest}
\end{document}

更容易的边缘标记

这也许比通常的情况更棘手,通常的情况是人们希望左侧分支的所有标签都朝一个方向,而右侧分支的所有标签都朝另一个方向。因此,这种模式在技术上似乎更有趣,尽管在审美上不一定令人愉悦。

相关内容