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

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

我需要圈出不同行/列上的多个单元格。这个问题已经解决了。

但是,我有一个更特殊的情况。我需要画一个圆圈,以说明最后一行的元素与第一行的元素在一起,从而形成如示例中的矩阵。

下面是我实现该表的方式:

\begin{tabular}{c c|c|c|c|c|}
    \multirow{7}{*}{\parbox{1.5cm}{$DataQ_2$}}
    & \multicolumn{5}{c}{$Q_1Q_0$} \\
    \cline{3-6}
    \multicolumn{2}{c|}{} & 00 & 01 & 11 & 10 \\ 
    \cline{2-6}
    & \multicolumn{1}{|c|}{00} & X & 1 & 1 & 1 \\
    \cline{2-6}
    & \multicolumn{1}{|c|}{01} & 0 & 1 & 1 & 0 \\
    \cline{2-6}
    & \multicolumn{1}{|c|}{11} & 1 & 1 & 1 & 1 \\
    \cline{2-6}
    & \multicolumn{1}{|c|}{10} & X & 1 & 1 & 0 \\
    \cline{2-6}
\end{tabular}

它看起来是这样的: 现在表

这就是我想要的样子(抱歉,绘图质量很差……但我希望我想要的效果很明显): 表格应如此

PS如果您能告诉我一种更优雅的方法来实现看起来像这样的表格,我将不胜感激。

答案1

一种选择是使用tikzmark库(来自 TikZ)放置一些标记,然后使用这些标记来绘制框架;一种可能性(根据您的需要调整设置):

在此处输入图片描述

代码:

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

\begin{document}

\[
\renewcommand\arraystretch{1.2}
\begin{array}{c|c|c|c|c|c|}
    \multicolumn{1}{c}{}\multirow{7}{*}{$\text{Data}Q_2$}
     & \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]
\foreach \Val in {up,down}
{
\draw[rounded corners,red,thick]
  ([shift={(-0.5\tabcolsep,-0.5ex)}]pic cs:start\Val) 
    rectangle 
  ([shift={(0.5\tabcolsep,2ex)}]pic cs:end\Val);
}
\end{tikzpicture}

\end{document}

如果盒子的一端应该打开:

\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}

在此处输入图片描述

评论:

  • 由于涉及一些内部计算,代码需要运行两次才能稳定下来。

  • 由于表格内容大部分是数学,因此我将 改为array而不是tabular

  • 我用了

    \renewcommand\arraystretch{1.2}
    

    使细胞内容物周围有更多的“空气”。

  • 在第二个示例代码中,我抑制了 \multirow 并简单地将\text{Data}Q_2其放在旁边array

相关内容