绘制 pq 树,使所有 P_node(圆)都用斜线表示

绘制 pq 树,使所有 P_node(圆)都用斜线表示

我几乎完成了我的 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,将单词更改descendantschildren,以便对边缘绘制方式的更改仅影响矩形节点的子节点,而不影响所有后代。

调整边缘

\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}

产生相同的输出:

整理代码

相关内容