Tikz,矩形分割,第一部分异常对齐

Tikz,矩形分割,第一部分异常对齐

从库中获取一些小代码,绘制一个有 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 中的第二个条目,但没有修复第一个条目:

在此处输入图片描述

经过进一步探索,我发现\smashing 第一个数据条目没有任何效果。因此,第一个\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}

在此处输入图片描述

相关内容