如何在 TikZ 中生成始终位于顶部的节点?

如何在 TikZ 中生成始终位于顶部的节点?

在此处输入图片描述我有以下代码,但节点总是被垂直线隐藏。我该如何解决这个问题(world 和 first 被垂直线隐藏)?

       \documentclass[]{article}
    \usepackage{tikz}
    \usetikzlibrary{calc}
    %opening
    \title{}
    \author{}

    \begin{document}

    \maketitle

    \begin{abstract}

    \end{abstract}

    \section{}




\pgfdeclarelayer{-1}
\pgfsetlayers{-1,main}
\tikzset{zlevel/.style={%
        execute at begin scope={\pgfonlayer{#1}},
        execute at end scope={\endpgfonlayer}
}}

\tikzset{every picture/.style=thick}
\begin{figure}[h]
    \begin{tikzpicture}[
    scale=0.6, every node/.style={scale=0.6}
    ,every node/.append style={very thick,rounded corners=0.1mm}
    ]
    %\begin{pgfonlayer}{tp}    % select the background layer

    \node[draw,rectangle] (Server) at (9,0) {Remote};

    \begin{scope}[zlevel=main]
    \node[draw=blue!50,rectangle,thick] (Network) at (0,-1) {first};
    \end{scope}

    \node[draw,rectangle] (User) at (0,0) {brocken};
    \begin{scope}[zlevel=-1]
\draw [] (User)  --  (Network)--(0,-10);
\end{scope}

    %obj1
    \begin{scope}[zlevel=main]
    \node[draw=blue!50,rectangle,thick] (Network) at (0,-2.5) {world};
    \end{scope}
    %\end{pgfonlayer}

    \node[draw=blue!60, rectangle,thick] (Network) at (0,-4.5) {hallo};

    \begin{scope}[zlevel=-1]
    \draw [very thick] (Server)--++(0,-10);
    \end{scope}
    \end{tikzpicture}
\end{figure}
\end{document}

答案1

我确信这个问题有更好的解决方案,但您可以先画出线条(如评论中所建议的那样),然后用白色填充矩形。

\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\pgfdeclarelayer{-1}
\pgfsetlayers{-1,main}
\tikzset{zlevel/.style={%
        execute at begin scope={\pgfonlayer{#1}},
        execute at end scope={\endpgfonlayer}
}}

\tikzset{every picture/.style=thick}
\begin{figure}[h]
    \begin{tikzpicture}[
    scale=0.6, every node/.style={scale=0.6},every node/.append style={very thick,rounded corners=0.1mm}]
    \draw (0,-1)  --  (0,0)--(0,-10);
    \node[draw,rectangle, fill=white] (Server) at (9,0) {Remote};
    \begin{scope}[zlevel=main]
        \node[draw=blue!50,rectangle,thick, fill=white] (Network) at (0,-1) {first};
    \end{scope}
    \node[draw,rectangle,fill=white] (User) at (0,0) {brocken};

    %obj1
    \begin{scope}[zlevel=main, fill=white]
        \node[draw=blue!50,rectangle,thick, fill=white] (Network) at (0,-2.5) {world};
    \end{scope}
    \node[draw=blue!60, rectangle,thick, fill=white] (Network) at (0,-4.5) {hallo};
    \begin{scope}[zlevel=-1]
        \draw [very thick, fill=white] (Server)--++(0,-10);
    \end{scope}
    \end{tikzpicture}
\end{figure}
\end{document}

在此处输入图片描述

答案2

默认情况下,nodes (以及图形)没有背景。

我引用该手册第 126 页的内容:

12.2.4 添加背景

默认情况下,图片没有任何背景,也就是说,透明的在所有未绘制任何内容的部分上。

我引用该手册第 214 页的内容:

17.2 节点及其形状

在最简单的情况下,一个节点是只是放置在某个坐标处的文本。但是,节点周围也画有边框或者具有更复杂的背景和前景。事实上,有些节点根本没有文本,而仅由背景组成。

这是从手册第 1081 页复制的图示示例,其中我添加了两个节点。

它在前景层有一个节点,称为前景。我添加了两个节点

  1. 主要的放置在主层上
  2. 后退放置在背景层上。

背景

您可以看到所有节点都显示了下面绘制的所有内容,因为它们的背景是透明的

因此,正如@Sito 所说,你必须添加一个背景到节点,以便下面没有任何东西可以显示出来。

相关内容