分割包含网格的矩形节点

分割包含网格的矩形节点

下面的代码

\documentclass{article}
\usepackage[margin=0.5cm]{geometry}
\usepackage{tikz,wasysym}
\usetikzlibrary{shapes, positioning}

\newcommand{\argument}[2][]{\tikz[baseline]{\node[rectangle, rounded corners=2mm, draw, inner sep=3pt, anchor=base, minimum width=1.3em, #1] {#2};}}

\newcommand{\mygrid}{\tikz{\draw[step=2.5mm] (0,0)  grid (1,1);}}

\begin{document}
    \begin{tikzpicture}
    \node[rectangle split, rectangle split horizontal, thick, draw, rectangle split parts=2, anchor=base] 
    {
        S \argument{19} 
        \nodepart{two}
        \mygrid{}
    };
    \end{tikzpicture}
\end{document}

生成此图片:

在此处输入图片描述

我希望网格完全覆盖(无边框)右侧矩形(nodepart(two))。我尝试使用, \node[inner sep=0....但外部正方形和网格之间仍留有一些边框。如何解决此问题?

PS 我知道我必须避免嵌套 tikz 图片。我是初学者,这将是下一步。

答案1

正如我上面评论的那样,额外的空间在我看来像是嵌套 tikzpictures 和选项的一些问题baseline。我不知道如何解决这个问题。

我想到使用rectangle split节点的最佳替代方案是首先将节点设置为所需的大小(通过在其中放置一个空框),然后使用角作为锚点在其上绘制网格。例如,

\documentclass{article}
\usepackage[margin=0.5cm]{geometry}
\usepackage{tikz,wasysym,adjustbox}
\usetikzlibrary{shapes, positioning, shapes.multipart, calc}

\newcommand{\argument}[2][]{\tikz[baseline]{\node[rectangle, rounded corners=2mm, draw, inner sep=3pt, anchor=base, minimum width=1.3em, #1] {#2};}}
\newcommand{\spacer}[2]{\tikz{\path (0,0) rectangle (#1,#2);}}
\newcommand{\fitgrid}[5][]{
  % usage: \fitgrid[options]{south west}{north east}{xcells}{ycells}
  \begin{pgfinterruptboundingbox}
  \newdimen\XCoord
  \newdimen\YCoord
  \coordinate (diff) at ($#3 - #2$);
  \path (diff); \pgfgetlastxy{\XCoord}{\YCoord}
  \begin{scope}[shift={#2}, x={\XCoord}, y={\YCoord}]
    \draw[#1] (0,0) grid[xstep={\XCoord/#4}, ystep={\YCoord/#5}] (1,1);
  \end{scope}
  \end{pgfinterruptboundingbox}
}


\begin{document}
  \begin{tikzpicture}
    \node[rectangle split, rectangle split horizontal, draw, rectangle split parts=2, anchor=base, inner sep=3pt] (mybox)
    {
        S \argument{19}
        \nodepart{two}
        \spacer{1}{1}
    };
    \fitgrid{(mybox.one split south)}{(mybox.north east)}{4}{4}
  \end{tikzpicture}
\end{document}

例子

一些说明:

  • 网格并不完全是正方形(也不完全是间隔物的尺寸),因为额外的边缘仍然存在,只是被覆盖了。
  • 网格边框与分割矩形节点不太对齐。不知道为什么。
  • tikzpicture如果缩放,这个精确的实现就会被破坏。

答案2

我更喜欢像下面这样的命令样式:

\documentclass{article}
\usepackage[margin=0.5cm]{geometry}
\usepackage{tikz,wasysym}
\usetikzlibrary{shapes, positioning}

\begin{document}
    \begin{tikzpicture}[
        argument style/.style={rectangle, rounded corners=2mm, draw, inner sep=3pt, anchor=base, minimum width=1.3em},
    ]
        \draw[step=2.5mm] (0,0)  grid (1,1);
        \draw (0,0) rectangle (-1,1);

        \node at (-.8,.5) (text) {S};
        \node[argument style,right=-1pt of text] {19};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

我留下我的其他答案,因为它可能对其他目的有用,但我找到了另一个更接近你开始时的解决方案:

\documentclass{article}
\usepackage[margin=0.5cm]{geometry}
\usepackage{tikz,wasysym,adjustbox}
\usetikzlibrary{shapes, positioning}

\newcommand{\argument}[2][]{\tikz[baseline]{\node[rectangle, rounded corners=2mm, draw, inner sep=3pt, anchor=base, minimum width=1.3em, #1] {#2};}}

\newcommand{\mygrid}{\tikz[baseline=.5cm]{\draw[step=2.5mm] (0,0)  grid (1,1);}}

\begin{document}
    \begin{tikzpicture}
    \node[rectangle split, rectangle split horizontal, thick, draw, rectangle split parts=2, anchor=base, inner sep=3pt]
    {
        S \argument{19}
        \nodepart{two}
        \marginbox{-3pt}{\mygrid}
    };
    \end{tikzpicture}
\end{document}

例子

具体变化如下:

  • 明确设置节点的,以便您可以用网格周围的inner sep精确取消它。(这需要包。)\marginboxadjustbox
  • 添加baseline=.5cm为网格的一个选项。不知何故,指定基线似乎可以修复额外空间,就像从中移除它一样\argument。.5cm 的值也避开了\marginbox始终包含基线的事实(因此为了安全起见,您应该将其设置在网格的中间)。

由于某种原因,网格的左边缘仍然虽然不太一致,但可能足够接近了。

相关内容