![LaTeX:如何制作一棵末端封闭的水平树(森林)](https://linux22.com/image/357156/LaTeX%EF%BC%9A%E5%A6%82%E4%BD%95%E5%88%B6%E4%BD%9C%E4%B8%80%E6%A3%B5%E6%9C%AB%E7%AB%AF%E5%B0%81%E9%97%AD%E7%9A%84%E6%B0%B4%E5%B9%B3%E6%A0%91%EF%BC%88%E6%A3%AE%E6%9E%97%EF%BC%89.png)
我使用森林包在 LaTeX 中创建了以下水平树。
\forestset{
L1/.style={draw=black,},
L2/.style={,edge={,line width=0.8pt}},
}
\begin{forest}
for tree={
grow=0,reversed, % tree direction
parent anchor=east,child anchor=west, % edge anchors
edge={line cap=round},outer sep=+1pt, % edge/node connection
rounded corners,minimum width=15mm,minimum height=8mm, % node shape
l sep=10mm % level distance
}
[Some text,L1
[Some text ,L2]
[Some text,L2]
[Some text,L2]
]
\end{forest}
它给出了以下输出:
现在我想再次“关闭”树,即以下内容:
如果您能提供任何关于如何修改代码以便树最终“一起成长”的建议,我们将不胜感激!
答案1
您可以为树中的节点设置名称并手动绘制合并节点。
\documentclass{article}
\usepackage{forest}
\forestset{
L1/.style={draw=black,},
L2/.style={,edge={,line width=0.8pt}},
}
\begin{document}
\begin{forest}
for tree={
grow=0,reversed, % tree direction
parent anchor=east,child anchor=west, % edge anchors
edge={line cap=round},outer sep=+1pt, % edge/node connection
rounded corners,minimum width=15mm,minimum height=8mm, % node shape
l sep=10mm % level distance
}
[Some text,L1
[Some text ,L2,name=ST1]
[Some text,L2,name=ST2]
[Some text,L2,name=ST3]
]
\node[draw,rounded corners,minimum width=15mm,minimum height=8mm,anchor=west] (EndNode) at ($(ST2.east) + (1,0)$){Merge text};
\foreach \num in {1,2,3}{
\draw (ST\num.east) -- (EndNode.west);
}
\end{forest}
\end{document}
答案2
我认为最好的解决方案是将附加节点添加为树的一部分,然后使用该节点的edge
选项添加附加边。您可以通过命名节点或使用相对节点名称(如这里)来执行此操作。您不必使用键tikz
,但如果使用相对节点名称,则可以简化问题,因为这意味着节点与当前节点有关。当前()
节点也是如此,(!u)
是其父节点,(!up)
是其父节点的前一个兄弟节点,依此类推。这意味着() edge ...
将从“这里”绘制边,无论这里在哪里。
\documentclass[border=10pt]{standalone}
\usepackage[linguistics]{forest}
\begin{document}
\tikzset{%
L1/.style={draw=black},
L2/.style={line width=0.8pt, line cap=round},
}%
\begin{forest}
for tree={
grow'=0,
parent anchor=children,
child anchor=parent,
edge+=L2,
outer sep=+1pt,
rounded corners,
minimum width=15mm,
minimum height=8mm,
l sep'=10mm,
}
[Some text, L1
[Some text, L2]
[Some text, L2
[\phantom{Some text}, L1, tikz+/.process={Ow1{edge}{\draw [#1] (.child anchor) edge (!un.parent anchor) -- (!up.parent anchor);}}]
]
[Some text, L2]
]
\end{forest}
\end{document}