我想将节点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)
这意味着节点包含UserSpace
和KernelSpace
节点。
\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}