如何圈出多个单元格?(特殊情况 2)

如何圈出多个单元格?(特殊情况 2)

我想问一个关于所提解决方案的问题这里来自@GonzaloMedina 但我无法评论。

我想绘制相同类型的开口端和封闭的圆角矩形,但我还想绘制右侧开口的椭圆形,但我不知道如何修改它。

在此处输入图片描述

他建议的开放式顶部/底部代码以及我想要修改的代码是:

\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}

\[
\renewcommand\arraystretch{1.2}
\text{Data}Q_2\begin{array}{c|c|c|c|c|c|}
    \multicolumn{1}{c}{}
     & \multicolumn{5}{c}{Q_1Q_0} \\
    \cline{3-6}
    \multicolumn{1}{c}{} & & 00 & 01 & 11 & 10 \\ 
    \cline{2-6}
    & 00 & \tikzmark{startup}X & 1 & 1 & 1\tikzmark{endup} \\
    \cline{2-6}
    & 01 & 0 & 1 & 1 & 0 \\
    \cline{2-6}
    & 11 & 1 & 1 & 1 & 1 \\
    \cline{2-6}
    & 10 & \tikzmark{startdown}X & 1 & 1 & 0\tikzmark{enddown} \\
    \cline{2-6}
\end{array}
\]

\begin{tikzpicture}[remember picture,overlay]
\draw[rounded corners,red,thick]
  ([shift={(-0.5\tabcolsep,2ex)}]pic cs:startup) -- 
  ++(0,-2.6ex) -- 
  ([shift={(0.5\tabcolsep,-0.6ex)}]pic cs:endup) --
  ++(0,2.6ex);
\draw[rounded corners,red,thick]
  ([shift={(-0.5\tabcolsep,-0.8ex)}]pic cs:startdown) -- 
  ++(0,2.8ex) -- 
  ([shift={(0.5\tabcolsep,2ex)}]pic cs:enddown) --
  ++(0,-2.8ex);
\end{tikzpicture}

\end{document}

答案1

您可以使用 a matrix of math nodes(实际上,matrix of nodes这里 a 就足够了……)。根据我的经验,这是迄今为止“分解”矩阵或更一般地说,网格上显示的任何东西的最简单方法。

出于书签手册中我将省略垂直和水平规则并将其绘制为:

在此处输入图片描述

如果您确实想要这些线条,可以很容易地使用循环来添加它们\foreach,或者像下面这样(现在)通过将每个节点设计为\matrix具有指定最小高度和宽度的矩形来添加它们:

在此处输入图片描述 完整代码如下:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}

   \begin{tikzpicture}[ell/.style={red,very thick},
                       lines/.style={blue!0.5!black, thick},
                   nodes={anchor=center,rectangle, minimum width=6mm, minimum height=6mm, inner sep=0mm},
                       ]
       \matrix (M)[matrix of nodes, nodes in empty cells
       ]{
             & 00 & 01 & 11 & 10 \\
          00 & X  & 1  & 1  & 1 \\
          01 & 0  & 1  & 1  & 0 \\
          11 & 1  & 1  & 1  & 1 \\
          10 & X  & 1  & 1  & 0\\
       };
       \draw[lines](M-2-1.north west)--(M-2-5.north east);
       \draw[lines](M-1-2.north west)--(M-5-2.south west);
       \clip (M-1-1.north west) rectangle (M-5-5.south east);
       \draw[ell] (M-2-4) ellipse [x radius=0.9,y radius=0.19];
       \draw[ell](M-3-5) ellipse[x radius=0.9, y radius=0.19];
   \end{tikzpicture}

   \begin{tikzpicture}[ell/.style={red,very thick},
                    lines/.style={blue!0.5!black, thick},
                    emp/.style={draw=white}]
       \matrix (M)[matrix of nodes, nodes in empty cells,
                   nodes={anchor=center,draw,rectangle, minimum width=6mm, minimum height=6mm, inner sep=0mm},
       ]{
       |[emp]| & 00 & 01 & 11 & 10\\
            00 & X  & 1  & 1  & 1 \\
            01 & 0  & 1  & 1  & 0 \\
            11 & 1  & 1  & 1  & 1 \\
            10 & X  & 1  & 1  & 0 \\
       };
       \clip (M-1-1.north west) rectangle (M-5-5.south east);
       \draw[ell] (M-2-4) ellipse [x radius=0.9,y radius=0.19];
       \draw[ell](M-3-5) ellipse[x radius=0.9, y radius=0.19];
   \end{tikzpicture}

\end{document}

后面(M)\matrix意思是节点在非空单元格中有标签(M-1-2)(M-1-4)(使用选项,nodes in empty cells您也可以在空单元格中有节点)。您可以将其更改(M)为任何您喜欢的内容。有关更多详细信息,请参阅 tikz 手册的第 57.1 节。

相关内容