# How to circle multiple cells? (special case)

I need to circle multiple cells, on different rows/columns. This is a problem which has been solved.

However, I have a more particular case of the problem. I need to draw a circle that needs to illustrate that the elements of the last row are together with the ones of the first row, resulting in a matrix like in the example.

Here is the way I have implemented the table:

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


This is the way it looks:

This is how I want it to look(sorry for the shitty drawing quality... I hope it's obvious that I want though):

PS If you tell me a more elegant way to implement the table to look like this, it would be appreciated.

## 1 Answer

One option is to use the tikzmark library (from TikZ) to place some marks and then to use those marks to draw the frames; one possibility (adjust the settings according to your needs):

The code:

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


If the boxes should have one end open:

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


## Remarks:

• Since some internal calculations are involved, the code needs two runs to stabilize.

• Since the content of the table is mostly maths, I change to array instead of tabular.

• I used

\renewcommand\arraystretch{1.2}


to have some more "air" around the cell content.

• In the second example code I suppressed the \multirow and simply placed \text{Data}Q_2 next to the array.

• My impression is that the upper oval should be open at the top and the lower one open at the bottom. Jan 18, 2015 at 14:30
• @egreg I'll provide this option in some seconds. Jan 18, 2015 at 14:31
• @egreg You are right, the upper oval has to be open at the top and the lower open at the bottom. The same is correct assuming that this is done for the leftmost column and the rightmost one. Thank you, @GonzaloMedina! Jan 18, 2015 at 14:32
• @GonzaloMedina By the way, \multirow is completely superfluous here: just place \text{Data}Q_{2}\quad next to the array. Jan 18, 2015 at 14:34
• @RaduSzasz I've provided an option with open shapes. Jan 18, 2015 at 14:40