TikZ marking several blocks in a matrix
Each block need its own pair of marks; I changed the definition of \tikzdrawbox
; the first mandatory argument is a number used for the marks; the second optional argument allows you to pass options to \draw
and the optional argument allows you to specify some "correction" to the block dimensions to prevent some borders to overlap:
\documentclass{article}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{calc,fit,matrix,arrows,automata,positioning}
\newcommand\x{\times}
\newcommand\y{\colorbox{red}{$\times$}}
\newcommand\z{\colorbox{gray}{$\times$}}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand{\tikzdrawbox}[3][(0pt,0pt)]{%
\tikz[overlay,remember picture]{
\draw[#3]
($(left#2)+(-0.3em,0.9em) + #1$) rectangle
($(right#2)+(0.2em,-0.4em) - #1$);}
}
\begin{document}
\begin{equation}\label{eq:blockedgivens}
\left(\begin{array}{ccccccccccccccc}
\x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x \\
0 & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x \\
0 & 0 & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x \\
0 & 0 & 0 & \tikzmark{left1}\x & \x & \x & \x & \tikzmark{left3}\x & \x & \x & \x & \x & \x & \x & \x \\
0 & 0 & 0 & \z & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x \\
0 & 0 & 0 & 0 & \z & \x & \x & \x & \x & \x & \x & \x & \x & \x & \x \\
0 & 0 & 0 & 0 & 0 & \z & \x & \x & \x & \x & \x & \x & \x & \x & \x \\
0 & 0 & 0 & 0 & 0 & 0 & \z & \tikzmark{left2} \x \tikzmark{right1} & \x & \x & \x & \tikzmark{left4} \x & \x & \x & \x \tikzmark{right3} \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & \z & \x & \x & \x & \x & \x & \x & \x \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \z & \x & \x & \x & \x & \x & \x \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \z & \x & \x & \x & \x & \x \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \z & \x \tikzmark{right2} & \x & \x & \x \tikzmark{right4} \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \z & \x & \x & \x \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \z & \x & \x \\
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & \z & \x \\
\end{array}\right)
\tikzdrawbox{1}{thick,red}
\tikzdrawbox{2}{thick,red}
\tikzdrawbox[(-1pt,2pt)]{3}{thick,green}
\tikzdrawbox[(-4pt,2pt)]{4}{thick,green}
\end{equation}
\end{document}
If you don't have too many special entries(for which you can include more if cases), you can shorten the code a bit.
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{equation}\label{eq:blockedgivens}
\left(
\begin{tikzpicture}[baseline=(current bounding box.center)]
\begin{scope}[xscale=0.6,yscale=0.4]
\foreach \x in {1,...,14}
\foreach \y in {1,...,14}
{
\ifnum\x<\y
\node (my-\y-\x) at (\x,-\y) {$0$};
\else
\node (my-\y-\x) at (\x,-\y) {$\times$};
\fi
}
\end{scope}
\draw[red] (my-4-4.north west) rectangle (my-8-8.south east);
\draw[red] (my-8-8.north west) rectangle (my-12-12.south east);
\end{tikzpicture}
\right)
\end{equation}
\end{document}