我想在 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}