从库中获取一些小代码,绘制一个有 4 个部分的矩形shapes.multiparts
。
\tikzset{
font=\sffamily,
BLOCK/.style={
draw,
align=center,
text height=0.4cm,
draw=red!50,
fill=red!20,
rectangle split,
rectangle split horizontal,
rectangle split parts=#1,
}
}
\begin{tikzpicture}
\node (h1) {host\_entry};
\node[BLOCK=4, below=0 of h1]{
\nodepart{one}dpid \nodepart{two}port
\nodepart{three}IP\nodepart{four}MAC};
\end{tikzpicture}
一切都很好,除了第一列矩形中,文本的对齐方式很奇怪。
还有人遇到过同样的问题吗?如何解决?
谢谢!
答案1
正如手册中所述,rectangle split part align
键可以在这里提供帮助。默认情况下,它设置为center
所有包含节点部分内容的框都按其中心对齐,但我希望base
这是必需的。
然而,似乎是一个错误的是,对齐不会影响第一部分。
\documentclass[border=0.125cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart,positioning}
\begin{document}
\tikzset{
font=\sffamily,
BLOCK/.style={
draw,
align=center,
text height=0.4cm,
draw=red!50,
fill=red!20,
rectangle split,
rectangle split horizontal,
rectangle split parts=#1,
}
}
\begin{tikzpicture}
\foreach \align [count=\y] in {top, center, base, bottom}{
\node at (0,-\y*2) (h1) {host\_entry};
\node[BLOCK=4, below=0 of h1,
label=left:\align,
rectangle split part align=\align]{
\nodepart{one}dpid \nodepart{two}port
\nodepart{three}IP\nodepart{four}MAC};
}
\end{tikzpicture}
\end{document}
答案2
在我的评论中,我建议\strut
在每个数据条目上都使用一个,这是一个零宽度规则,它延伸到字体所有字形的整个垂直宽度(最高到最高大写字母,最低到最低降序字母)。这样,所有条目将具有统一的高度,因此任何垂直居中算法都会找到统一高度的所有基线。
但!!! 这修复了 OP 的 MWE 中的第二个条目,但没有修复第一个条目:
经过进一步探索,我发现\smash
ing 第一个数据条目没有任何效果。因此,第一个\nodepart
似乎被预先粉碎了tikz
,而后者\nodepart
却没有。我不知道 tikz,但如果我不知道的话,这闻起来像是一个错误。
为了解决这个问题,我必须手动将 应用于\raisebox
第一个\nodepart
:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,positioning}
\begin{document}
\tikzset{
font=\sffamily,
BLOCK/.style={
draw,
align=center,
text height=0.4cm,
draw=red!50,
fill=red!20,
rectangle split,
rectangle split horizontal,
rectangle split parts=#1,
}
}
\begin{tikzpicture}
\node (h1) {host\_entry};
\node[BLOCK=4, below=0 of h1]{
\nodepart{one}\raisebox{1.3pt}{dpid}\strut\nodepart{two}port\strut
\nodepart{three}IP\strut\nodepart{four}MAC\strut};
\end{tikzpicture}
\end{document}