通过 fit 定位节点:如何使节点文本居中?

通过 fit 定位节点:如何使节点文本居中?

我想知道为什么通过 fit 定位的节点的节点文本没有居中?

编辑: 正如 Peter Grill 在他的评论中所建议的,我用更现实的例子改变了以前的 MWE:

\documentclass[tikz,border=3mm]{standalone}
        \usetikzlibrary{chains,fit,positioning}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \begin{document}
%%%% se-fit
    \begin{tikzpicture}[
every label/.append style = {label distance=1mm, inner ysep=0mm,
                             font=\scriptsize\sffamily, text=blue!50!black, 
                             align=center},
            node distance = 0mm,
              start chain = going right,
          N/.style 2 args = {name=n#1,
                             minimum width=#2,
                             draw, text height=2ex, text depth=1ex,
                             inner sep=2mm, outer sep=0mm, on chain}
                        ]
\node[N={1}{11mm},draw=none,fill=blue!10]   {};
\node[N={2}{11mm},draw=none,fill=blue!20]   {};
    \node[draw,inner sep=0pt, outer sep=0pt,
          fit=(n1) (n2),
          label=above left:{bits:},
          label=above:144]                  {preamble};
\node[N={3}{11mm},fill=blue!20,right=of n2,
      label=above:8]                        {signal};
\node[N={4}{11mm},fill=blue!20,
      label=above:8]                        {service};
\node[N={5}{11mm},fill=blue!20,
      label=above:12]                       {length};
\node[N={5}{7mm},fill=blue!20,
      label=above:16]                       {FCS};
\node[N={6}{55mm},
      label=above:<length> octets]          {payload};
    \end{tikzpicture}
%
    \end{document}

这是功能还是错误?我想知道,为什么节点在通过 fit 选项放置时的行为与在某个坐标处定位时的行为不同。

在此处输入图片描述

将节点文本作为标签文本放置在中心节点并不方便,因为真实图片具有许多具有常见选项设置的标签,如上图所示的 MWE,以及许多类似的节点构造(未在 MWE 中显示)。

Peter Grill 建议使用另一个文本节点来解决问题,但我的主要问题仍然没有得到解答。

答案1

我不知道为什么\node文本默认不居中,但您可以使用选项label=center:my text将文本放在同一个节点中:

在此处输入图片描述

或者,您可以单独放置\node 你有你的fit


代码:

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

\begin{tikzpicture}[
    node distance=0mm,
    every node/.style={inner sep=0pt, outer sep=0pt,font=\large}
    ]
    \node[minimum size=3em,fill=blue]           (a) {};
    \node[minimum size=3em,fill=red,right=of a] (b) {};
    \node[draw=brown, thick,fit={(a) (b)}, label=center:my text]   (c) {};
\end{tikzpicture}
\end{document}

代碼: 分开\node

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

\begin{tikzpicture}[
    node distance=0mm,
    every node/.style={inner sep=0pt, outer sep=0pt,font=\large}
    ]
    \node[minimum size=3em,fill=blue]           (a) {};
    \node[minimum size=3em,fill=red,right=of a] (b) {};
    \node[draw=brown, thick,fit={(a) (b)}]      (c) {};
    \node at (c) {my text};
\end{tikzpicture}
\end{document}

相关内容