绘制节点数可变的树

绘制节点数可变的树

我想在 tex 中绘制一棵更像树的草图的树:它应该包含可变的节点号。

在此处输入图片描述

重要的是,这些点包含在绘制的树中。使用自动命令可以实现吗?

你看,由于我的绘画技巧有限,我不想使用 TikZ,而只是添加这棵树包含的节点。我想说:这是我的结构,帮我画出来。我发现的只是绘制具有完整定义节点的树。

编辑

没有任何样式定义,这里是我所想到的一个最小示例:

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
\tikzstyle{every node} = [rectangle,
                draw=black,
                fill=gray,
                text=black,
                text centered,
                rounded corners]

    \begin{tikzpicture}         [sibling distance=8cm]

    \node {Document}
        child {
            [sibling distance=2cm]
            node (p1) {Paragraph}
            child {
                node (e11) {Element}
                child {
                    node {AttributeSet}
                }
            }
            child {
                node (e1n) {Element}
                child {
                    node {AttributeSet}
                }
            }
            child {
                node {AttributeSet}
            }
        }
        child {
            [sibling distance=2cm]
            [sibling distance=2cm]
            [sibling distance=2cm]
            node (pn) {Paragraph}
            child {
                node (en1) {Element}
                child {
                    node {AttributeSet}
                }
            }
            child {
                node (enn) {Element}
                child {
                    node {AttributeSet}
                }
            }
            child {
                node {AttributeSet}
            }
        }
    ;

    \path[draw,dashed] (p1)--(pn);
    \path[draw,dashed] (e11)--(e1n);
    \path[draw,dashed] (en1)--(enn);
\end{tikzpicture}

\end{document}

我希望虚线只有三/四个点。

在此处输入图片描述

答案1

也许我不明白这个问题...

没有 TikZ 但有 pict2e;你需要一些东西来画出漂亮的直线,这里有一个代码。如果你想自动绘图,你可以创建一些带有参数尺寸的宏。建立一个宏来放置一个圆圈和标签很容易。

 \documentclass[11pt]{scrartcl}
 \usepackage{pict2e,calc}
 \newdimen\xlab
 \newdimen\ylab
 \newcommand*\Vertex[3]{%
   \put(#1,#2){\circle*{5}}
    \put(\numexpr #1 +5\relax,\numexpr #2 +5\relax){#3}
 }    

 \begin{document}  
 \setlength\unitlength{2pt}% 
 \fbox{\begin{picture}(200,120)
 \Vertex{100}{98}{A}
   \put(90,75){\circle*{5}} 
   \put(90,75){\line(10,23){10}}
    % \put(120,75){\circle*{5}} 
   \Vertex{120}{75}{B-N} 
     \put(120,75){\line(-20,23){20}}
      \put(5,10){\circle*{5}} 
      \put(5,10){\line(85,65){85}}
      \put(50,10){\circle*{5}}
       \put(50,10){\line(40,65){40}}   
      \put(80,10){\circle*{5}}   
      \put(80,10){\line(10,65){10}} 

      \put(120,10){\circle*{5}}
      \put(120,10){\line(0,65){65}}    
      \put(170,10){\circle*{5}}
      \put(170,10){\line(-50,65){50}}    
      \put(190,10){\circle*{5}}
      \put(190,10){\line(-70,65){70}}

      \put(100,75){\dots} 
      \put(65,10){\dots}
      \put(140,10){\dots}
    %  \put(105,105){$A$}   
      \end{picture}}
 \end{document} 

在此处输入图片描述

答案2

forest可以根据需要自动处理省略号的插入和放置。例如:

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

\begin{document}

\forestset{
  gappy/.style={
    before typesetting nodes={
      insert after={
        [\dots, no edge]
      }
    }
  }
}
\tikzset{
  document element/.style={
    rounded corners,
    draw,
    inner color=gray!15,
    outer color=gray!35,
  }
}
\begin{forest}
  for tree={
    document element,
    fit=band
  },
  before packing={
    for tree={
      if n children=3{
        for children={
          if n=2{calign with current}{}
        }
      }{}
    }
  }
  [Document
   [Paragraph, gappy
     [Element, gappy
       [Attribute Set]
     ]
     [Element, before packing={calign with current}
       [Attribute Set]
     ]
     [Attribute Set]
   ]
   [Paragraph
     [Element, gappy
       [Attribute Set]
     ]
     [Element
       [Attribute Set]
     ]
   ]
  ]
\end{forest}

\end{document}

间隙

相关内容