我需要圈出不同行/列上的多个单元格。这个问题已经解决了。
但是,我有一个更特殊的情况。我需要画一个圆圈,以说明最后一行的元素与第一行的元素在一起,从而形成如示例中的矩阵。
下面是我实现该表的方式:
\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
。