节点与其子节点之间的多个顶点

节点与其子节点之间的多个顶点

我想在两个节点之间绘制几个顶点。假设在下面的代码中我想绘制

  • 树的起点和其子节点 O 之间有 3 个顶点,
  • 第一个 R 和其子 T 之间有四个。

这是一张丑陋的图片,显示了想要的输出。我画这么一棵奇怪的树只是为了教学目的。

一幅丑陋的画面

似乎forest无法做到这一点。那么如何使用tikz的功能来实现这一点呢?

\documentclass{article}
\usepackage{forest}
\useforestlibrary{linguistics}

\begin{document}
\pagestyle{empty}

\begin{forest}
    for tree = {
        sn edges,
        grow'=0,
        l=2.5cm,
        s sep=0.2cm,
        anchor=west,
        child anchor=west}
  [
    [O
      [R
        [T]
      ]
      [T
        [R]
      ]
    ]
    [R
      [O
        [T]
      ]
      [T
        [O]
      ]
    ]
    [T
      [O
        [R]
      ]
      [R
        [O]
      ]
    ]
  ]
\end{forest}

\end{document}

答案1

从一个节点到其子节点的路径edge path可以是简单或复杂的,只要你喜欢。只要你能画出来,你就可以使用它:曲线、直线,等等。

请注意,据我所知,这些不是任何类型的“顶点”。如果是的话,那么用法就非常技术性,任何不熟悉相关学科语言的人都会误解。

如果connections设置的大于1,则该图涉及从单个顶点绘制多条线,但仍然只有一个点是这些线在父节点的相交点.parent anchor。如果它们没有在那里相交,那么根本就没有顶点。

\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage{forest}
\useforestlibrary{linguistics}
\forestset{%
  declare count={connections}{1},
}
\begin{document}
\begin{forest}
  for tree={%
    sn edges,
    grow'=0,
    l=2.5cm,
    s sep=0.2cm,
    anchor=parent,
  },
  before typesetting nodes={%
    where connections=1{}{%
      if={isodd(connections())}{%
        edge path'={%
          foreach \i [count=\j from 0, evaluate=\noexpand\j as \noexpand\k using \noexpand { (\j==0) ? 0pt :((isodd(\j)) ? (\j*2.5pt) : ((-\j+1)*2.5pt)) }
          ]
          in {1,...,\foresteoption{connections}} { (!u.parent anchor) -- ([yshift=\noexpand\k].child anchor)  }
        },
      }{%
        edge path'={%
          foreach \i [count=\j, evaluate=\noexpand\j as \noexpand\k using \noexpand { (isodd(\j)) ? (\j*2.5pt) : ((-\j+1)*2.5pt) }
          ]
          in {1,...,\foresteoption{connections}} { (!u.parent anchor) -- ([yshift=\noexpand\k].child anchor)  }
        },
      },
    },
  },
  [
    [O, connections=3
      [R
        [T]
      ]
      [T
        [R]
      ]
    ]
    [R
      [O
        [T]
      ]
      [T, connections=4
        [O]
      ]
    ]
    [T
      [O
        [R]
      ]
      [R
        [O]
      ]
    ]
  ]
\end{forest}
\end{document}

多边

相关内容