我几乎完成了我的 latex 代码。这是我的代码。(代码参考:绘制 pq 树,所有数字都在底部)
\documentclass[tikz,convert=false]{standalone}
\usepackage{forest}
\usetikzlibrary{shapes.geometric,patterns}
\usetikzlibrary{arrows.meta, angles}
\forestset{
*|/.style={
parent anchor=south,
for descendants={
edge path={
\noexpand\path[\forestoption{edge}]
(!u.parent anchor-|.child anchor) -- (.child anchor)\forestoption{edge label};
}
}
},
normal width/.initial=.5cm,
normal height/.initial=.3cm,
every forest node/.style={
draw,
minimum width=\pgfkeysvalueof{/forest/normal width},
minimum height=\pgfkeysvalueof{/forest/normal height},
inner sep=+0pt,
anchor=south,
},
rect/.style={
every forest node,
shape=rectangle,
minimum width=(#1)*(\pgfkeysvalueof{/forest/normal width})+(#1+1)*(\forestove{s sep})-(#1)*(\pgfkeysvalueof{/pgf/outer xsep}),
},
}
\begin{document}
\begin{forest}
[,rect=19,*|
[1]
[2]
[3]
[,rect=6,*|
[4]
[5]
[6]
[7]
[,circle,draw,
[13]
[14]
[15]
[16]
[17]
[18]
]
[8]
[9]
]
[10]
[11]
[12]
[,circle,draw
[13]
[14]
[15]
[16]
[17]
[18]
]
]
\end{forest}
\end{document}
可以看到,问题在于带圆的线条不正常,现在想做的是把所有与圆相连的线条都改成斜线(就用森林包的效果,让圆不受上面矩形设置的影响)。
例如这样:这里,所有圆形的线都是斜线,所有矩形的线都是垂直线。
答案1
在样式定义中*|/.style
,将单词更改descendants
为children
,以便对边缘绘制方式的更改仅影响矩形节点的子节点,而不影响所有后代。
\foreststove
不应在文档代码中使用,因为它被视为内部代码,因此可能会在更新时中断。也就是说,它不是用户界面的一部分,软件包作者在更新软件包时会尽力保持用户界面正常运行。
稍微整理一下:
\documentclass[border=10pt]{standalone}
\usepackage{forest}
\forestset{
*|/.style={
parent anchor=children,
for children={
edge path'={
(!u.parent anchor-|.child anchor) -- (.child anchor)
}
}
},
declare dimen register=normal width,
normal width'=.5cm,
declare dimen register=normal height,
normal height=.3cm,
every forest node/.style={
draw,
minimum width/.register=normal width,
minimum height/.register=normal height,
inner sep=+0pt,
anchor=children,
},
rect/.style={
every forest node,
shape=rectangle,
tempdima={\pgfkeysvalueof{/pgf/outer xsep}},
minimum width/.process={
Rw+d nOw2+d Rw+d w3+d {normal width}{##1*#1} {#1+1}{s sep}{##2*##1} {tempdima}{##1*#1} {##1+##2-##3}
},
},
}
\begin{document}
\begin{forest}
[,rect=19,*|
[1]
[2]
[3]
[,rect=6,*|
[4]
[5]
[6]
[7]
[,circle,draw,
[13]
[14]
[15]
[16]
[17]
[18]
]
[8]
[9]
]
[10]
[11]
[12]
[,circle,draw
[13]
[14]
[15]
[16]
[17]
[18]
]
]
\end{forest}
\end{document}
产生相同的输出: