Tikz 矩阵内容未在树中布局

Tikz 矩阵内容未在树中布局

我想将矩阵放入树形布局中。矩阵本身出现在正确的位置,但其包含的节点在树之外。

\tikz [
tree layout,
level sep = 1cm,
] {

\node[] (1) {1};

\node[
draw=green,
matrix,
] (2)
{ \node[draw=blue] (c1) {c1}; \\ };

\path (1) edge (2);
}

在此处输入图片描述

实际上,树由许多矩阵组成,每个矩阵由许多节点组成。这只是一个展示不良行为的最小示例。

答案1

图形绘制范围内的所有节点(这里是整个 TikZ 图片)都会被“转发”到图形绘制算法,而不是直接放置。矩阵内的节点也会发生这种情况,这将使矩阵为空并成为c1普通的图形绘制节点。

根据手册

这是在最低层实现的,即通过直接拦截使用新创建的节点\pgfnode

这似乎是指延迟节点定位我可以看到它在代码中被使用(而不是\pgfnode像我最初想的那样实际改变)。

可以使用以下方法关闭延迟节点定位

\pgfpositionnodelaterpath{\relax}

这就是我gd no matrix在每个单元格开头的下面代码中安装的内容。

我还添加了,\pgfgdgraphdrawingscopeactivefalse尽管我还没有检查哪里需要它。

由于图形绘图库也拦截该edge操作,您可能无法在矩阵内使用它,或者我们也需要禁用此拦截。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{graphdrawing}
\usegdlibrary{trees}
\tikzset{
  gd no matrix/.style={
    every cell/.append code=%
      \pgfgdgraphdrawingscopeactivefalse % maybe?
      \pgfpositionnodelater{\relax}%     % definitly
}}
\begin{document}
\tikz [
  tree layout,
  level sep = 1cm,
  gd no matrix
] {

\node[] (1) {1};

\node[
  draw=green,
  matrix
] (2){
  \node[draw=blue] (c1) {c1};
\\};

\path (1) edge (2);
}
\end{document}

输出

在此处输入图片描述

相关内容