不同长度的 Tikz 节点右对齐

不同长度的 Tikz 节点右对齐

我想将节点GNU(带有文本“GNU C 库”)与节点对齐Userspace

我尝试使用这些选项[anchor=north west, below=1cm of UserSpace],但没有成功。

这是代码

\begin{tikzpicture}
    % Outer Frame
    \draw (0, -4) rectangle (14, 8);

    % Nodes
    \node (UserSpace) at(0.5,6) [rectangle, draw, anchor=south west, minimum width=13cm, minimum height=1cm, align=left,text width=13cm] {\textbf{User Space (Anwendung)}\\z.\,B. Office, Internet, Grafik, Bild-/Audio-/Video-Bearbeitung, etc.};

    \node (GNU)[rectangle, draw, anchor=north west, minimum width=6.5cm, minimum height=1cm, align=left,text width=6.5cm, below=1cm of UserSpace] {\textbf{GNU C Library}\\z.\,B. open, sbrk, exec, fopen, \dots};

    \node (GNU) [rectangle, draw, anchor=north west, minimum width=13cm, minimum height=1cm, align=left,text width=13cm, below=1cm of GNU] {\textbf{Kernel Space (Betriebssystem)}\\u.a. Dateisystem, Prozess- und Speichermanagement,\\ Ein- und  Ausgabe-Management};

\end{tikzpicture}

还有一个小问题,我希望节点和外框之间留有空间。通过选项,[text width = ...]我可以将文本左对齐,但矩形的长度不再是我想要的长度。

在此处输入图片描述

答案1

我不是 100% 清楚你想要什么,这是你喜欢的方式吗?

代码输出

文本对齐的关键点是仅设置text width。如果您希望节点至少具有给定的宽度,请使用minimum width。如果您希望节点宽度适应内容,同时允许使用 换行\\,则仅使用align=left。但是对于这种需要特定宽度的情况,我认为设置text width最有意义,您不需要align在这里另外设置,因为文本默认是左对齐的。

我还做了其他一些改变:

  • 我定义了一个box包含节点通用设置的新样式。定义样式是让代码更简洁的好方法,可以减少重复,使更改更容易。例如,如果您决定让节点边框为红色且线条较粗,则只需编辑 的定义box即可draw=red,thick,而不必单独编辑每个节点的选项。

  • 您希望中间节点与上部节点的右侧对齐,因此我设置了below=UserSpace.south east,即 的右下角UserSpace,然后是anchor=north east。因此, 的右上角GNU位于 的右下角正下方UserSpace

  • 对于最后一个节点,我设置了below=of GNU.south -| UserSpace.south-|符号的解释如下TikZ:箭头的 |- 符号到底起什么作用?简而言之,GNU.south -| UserSpace表示 的 y 分量GNU.south和 的 x 分量的坐标UserSpace

  • 最后,我使用该fit库在末尾绘制周围的框架。不是先绘制它,然后移动节点,而是先放置节点,然后再绘制框架。fit=(UserSpace)(KernelSpace)这意味着节点包含UserSpaceKernelSpace节点。


\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning,fit}
\begin{document}

\begin{tikzpicture}[
  box/.style={
   draw,
   minimum height=1cm,
   text width=13cm
  }
]
% Nodes
\node [box] (UserSpace) {%
  \textbf{User Space (Anwendung)}\\
   z.\,B. Office, Internet, Grafik, Bild-/Audio-/Video-Bearbeitung, etc.};

\node [box,
       text width=6.5cm, % this overrwrites the text width of the style
       below=of UserSpace.south east,
       anchor=north east] (GNU)  {%
    \textbf{GNU C Library}\\
    z.\,B. open, sbrk, exec, fopen, \dots};

\node [box,
       below=of GNU.south -| UserSpace] (KernelSpace)  {%
   \textbf{Kernel Space (Betriebssystem)}\\
    u.a. Dateisystem, Prozess- und Speichermanagement,\\
    Ein- und  Ausgabe-Management};

\node [draw,fit=(UserSpace)(KernelSpace),inner sep=5mm] {};
\end{tikzpicture}

\end{document}

相关内容