Làm thế nào tôi có thể vẽ một sơ đồ cây trong đó các lá được nối với các cành hội tụ?
\documentclass{article}
\usepackage{fullpage}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,positioning,shadows,trees}
\usetikzlibrary{arrows.meta}
\usepackage{mdframed}
\usepackage{boxedminipage}
\usepackage{forest}
\begin{document}
\begin{forest}
% Styling
for tree={
align=center,
parent anchor=south,
child anchor=north,
edge={thick, -{Stealth[]}},
l sep+=10pt,
edge path={
\noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- +(0,-10pt) -| (.child anchor)\forestoption{edge label};
},
if level=0{
inner xsep=-15pt,
tikz={\draw [thick] (.south east) -- (.south west);}
}{}
}
%
[Alphabet
[a
[b]
[c] ]
[b
[d]
[e] ]
]
\end{forest}
\end{document}
Làm thế nào để tôi có thể kết nối tất cả các nhánh theo cách được hiển thị bên dưới trong bản phác thảo
Trả lời
Cập nhật 2: Mũi tên giữa các nút với đặc điểm kỹ thuật của nút
Tất cả các mũi tên bổ sung (không được xây dựng nguyên bản bởi rừng) kết nối hai nút được đặt trong cây với cú pháp đi bộ nút ngắn . Điều này mà không cần đặt tên cho các nút như trước đây (một bài tập kiểu thực) . Để cho phép trực quan của các mũi tên này, tôi màu chúng trong màu đỏ .
Tôi trích dẫn sách hướng dẫn:
Một nút là một cách ngắn gọn để thể hiện quan hệ nút. Nó chỉ đơn giản là một chuỗi các bước, được biểu diễn bằng các ký tự đơn, trong đó: u là viết tắt của nút cha (lên); p cho anh chị trước; n cho anh chị em kế tiếp; s cho các anh chị em (chỉ có ích trong cây nhị phân); 1 , 2 ,. . . 9 cho đầu tiên, thứ hai,. . . con thứ chín; l, đối với con cuối cùng, v.v. Để biết thông số kỹ thuật đầy đủ, xem phần 3.8.7 .
\documentclass[border=5mm]{standalone}
\usepackage{forest}
\usetikzlibrary{arrows.meta}
\useforestlibrary{linguistics}
\begin{document}
\begin{forest}
% Styling
for tree={
align=center,
parent anchor=south,
child anchor=north,
edge={thick, -{Stealth[]}},
l sep+=10pt,
edge path={\noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- +(0,-10pt) -| (.child anchor)\forestoption{edge label};
},
if level=0{inner xsep=-15pt,tikz={\draw [thick] (.south east) -- (.south west);}
}{}
}
%
[Alphabet
[a
[b]
[c,s sep=10,
[f,s sep=30,
[,phantom]
[z,edge={white}]
{\draw[thick,red,-{Stealth[]}] (!rllN.south east) -- +(0,-10pt) -| (!c); %<-- arrow from g to z
\draw[thick,red] (!uss.south west) -- +(0,-10pt) -| (!c) ;%<-- arrow from f to z
}
]{\draw[thick,red,shorten >=3pt] (!us.south) -- +(0,-10pt) -| (!c) ;}%<-- arrow from b to f
[,phantom]
]
]
[b
[d]
[e,s sep=9
[g]{\draw[thick,red,shorten >=3pt] (!us.south) -- +(0,-10pt) -| (!c) ;}%<-- arrow from d to g
[,phantom]
]
]
]
\end{forest}
\end{document}
Đáp lại một bản cập nhật
Tôi đã mày mò rất nhiều để đạt được kết quả này và vì vậy tôi không chắc mình đã viết mã đẹp. Nếu một chuyên gia về rừng đến, tôi đang lắng nghe những cải tiến có thể được thực hiện.
\documentclass[border=5mm]{standalone}
\usepackage{forest}
\usetikzlibrary{arrows.meta}
\useforestlibrary{linguistics}
\begin{document}
\begin{forest}
% Styling
for tree={
align=center,
parent anchor=south,
child anchor=north,
edge={thick, -{Stealth[]}},
l sep+=10pt,
edge path={\noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- +(0,-10pt) -| (.child anchor)\forestoption{edge label};
},
if level=0{inner xsep=-15pt,tikz={\draw [thick] (.south east) -- (.south west);}
}{}
}
%
[Alphabet
[a
[b,name=b]
[c,s sep=10,
[f,name=f,s sep=30,
[,phantom]
[z,name=z,edge={white}]
]
[,phantom]
]
]
[b
[d,name=d]
[e,s sep=9
[g,name=g]
[,phantom]
]
]
]
\draw[thick,shorten >=2pt] (b.south) -- +(0,-10pt) -| (f.north);
\draw[thick,shorten >=2pt] (d.south) -- +(0,-10pt) -| (g.north);
\draw[thick,shorten >=2pt] (g.south east) -- +(0,-10pt) -| (z.north);
\draw[thick,-{Stealth[]}] (f.south west) -- +(0,-10pt) -| (z.north);
\end{forest}
\end{document}
Câu trả lời cũ
Có thể có một giải pháp thanh lịch hơn, nhưng đây là đề xuất của tôi.
\documentclass[border=5mm]{standalone}
\usepackage{forest}
\usetikzlibrary{arrows.meta}
\useforestlibrary{linguistics}
%\usepackage{fullpage}
%\usepackage[utf8]{inputenc}
%\usepackage{tikz}
%\usetikzlibrary{arrows,shapes,positioning,shadows,trees}
%\usepackage{mdframed}
%\usepackage{boxedminipage}
\begin{document}
\begin{forest}
% Styling
for tree={
align=center,
parent anchor=south,
child anchor=north,
edge={thick, -{Stealth[]}},
l sep+=10pt,
edge path={\noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- +(0,-10pt) -| (.child anchor)\forestoption{edge label};
},
if level=0{inner xsep=-15pt,tikz={\draw [thick] (.south east) -- (.south west);}
}{}
}
%
[Alphabet
[a
[b,name=b]
[c,name=c
[,phantom]
[z,name=z]
]
]
[b
[d,name=d]
[e,name=e]
]
]
\draw[thick,shorten >=2pt] (b.south) -- +(0,-10pt) -| (z.north);
\draw[thick,shorten >=2pt] (d.south) -- +(0,-10pt) -| (z.north);
\draw[thick,shorten >=2pt] (e.south) -- +(0,-10pt) -| (z.north);
\end{forest}
\end{document}