如何在不同子布局中的节点之间绘制边,以便它们位于 TikZ 中图形的其余部分之后?

如何在不同子布局中的节点之间绘制边,以便它们位于 TikZ 中图形的其余部分之后?

这是我绘画的一个简单示例:

\RequirePackage{luatex85}
\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{layered}

\begin{document}
\begin{tikzpicture} []

  \graph [nodes=draw,
  grow down]
  {
    //[layered layout,name=cat1,nodes={fill=red!50}]{
      Cat1[rectangle] -> {110
        , 492};
      492 -> 371;
    };

    //[layered layout,name=cat2,nodes={fill=green!50}]{
      Cat2[x=+4cm,rectangle] -> 140;
      140 -> 150;
      150 -> {305, 325};
    };

    //[layered layout,name=cat3,nodes={fill=yellow!50}]{
      Cat3[x=-5cm,rectangle] -> {101
        , 156 -> {365, 326}};
    };
        
(cat3 365) -> (cat2 150);
  
};
\end{tikzpicture}
\end{document}

结果如下: 最小示例渲染

我想在其他节点(如 Cat1 371)后面渲染 (Cat3 365) 和 (Cat2 150) 之间的线。我尝试使用该backgrounds库,但无法使其工作。有什么想法吗?

答案1

尽管edges behind nodes是默认的绘图顺序,它似乎仅当所有边都是图形绘图布局的一部分时才有效。

然而,你的优势不属于layered layout在线布局策略Cartesian placement由于grow down

因为你根本不用它,所以我用no placement

graph虽然可能有一种方法可以为三个子布局指定布局,以便考虑该边缘,但在您的用例中,结束一个操作并在之后启动另一个操作要容易得多behind path(尽管手册没有提到它也适用于边而不仅仅是节点),这意味着所有后续边将放置在该路径上的所有内容和前景(即整个图表)的后面。

这也会将这个新边置于所有其他边的后面,但在这个简单的图表中不会很明显。

代码

% !TeX TS-program = lualatex
\RequirePackage{luatex85}
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs, graphdrawing}
\usegdlibrary{layered}
\begin{document}
\tikz
  \graph [nodes=draw, no placement] {
    //[layered layout, name=cat1, nodes={fill=red!50}]{
      Cat1[rectangle] -> {110, 492 -> 371};
    };
    //[layered layout, name=cat2, nodes={fill=green!50}]{
      Cat2[x=+4cm,rectangle] -> 140 -> 150 -> {305, 325};
    };
    //[layered layout, name=cat3, nodes={fill=yellow!50}]{
      Cat3[x=-5cm,rectangle] -> {101, 156 -> {365, 326}};
    };
  } [behind path] graph{(cat3 365) -> (cat2 150)};
\end{document}

输出

在此处输入图片描述

相关内容