%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % matrix.skeleton, version 1.1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepgflibrary{matrix.skeleton} \usetikzlibrary{matrix} \usetikzlibrary{fit} \usetikzlibrary{backgrounds} \tikzset{ label skeleton/.code = { \pgfmatrixlabelskeleton }, add styling node/.style = { append after command = { \pgfextra \pgfinterruptpath % This next line is not useful in CVS. This is protection that was needed in the past for nodes. \setbox\tikz@figbox=\box\pgfutil@voidb@x #1 \endpgfinterruptpath \endpgfextra } }, style odd rows/.style = { label skeleton, add styling node = { \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifodd\row \fitandstyle{(\tikzlastnode-row-\row)}{#1} \fi } } }, style even rows/.style = { label skeleton, add styling node={ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifodd\row \else \fitandstyle{(\tikzlastnode-row-\row)}{#1} \fi } } }, style odd rows on layer/.style 2 args= { label skeleton, add styling node = { \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifodd\row \fitandstyle[#1]{(\tikzlastnode-row-\row)}{#2} \fi } } }, style even rows on layer/.style 2 args = { label skeleton, add styling node={ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifodd\row \else \fitandstyle[#1]{(\tikzlastnode-row-\row)}{#2} \fi } } }, style odd tiling rows/.style = { label skeleton, add styling node = { \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifodd\row \fitandstyle{(\tikzlastnode-tiling-row-\row)}{#1} \fi } } }, style even tiling rows/.style = { label skeleton, add styling node={ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifodd\row \else \fitandstyle{(\tikzlastnode-tiling-row-\row)}{#1} \fi } } }, style odd tiling rows on layer/.style 2 args= { label skeleton, add styling node = { \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifodd\row \fitandstyle[#1]{(\tikzlastnode-tiling-row-\row)}{#2} \fi } } }, style even tiling rows on layer/.style 2 args = { label skeleton, add styling node={ \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifodd\row \else \fitandstyle[#1]{(\tikzlastnode-tiling-row-\row)}{#2} \fi } } }, style odd columns/.style = { label skeleton, add styling node = { \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifodd\col \fitandstyle{(\tikzlastnode-column-\col)}{#1} \fi } } }, style even columns/.style = { label skeleton, add styling node={ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifodd\col \else \fitandstyle{(\tikzlastnode-column-\col)}{#1} \fi } } }, style odd columns on layer/.style 2 args= { label skeleton, add styling node = { \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifodd\col \fitandstyle[#1]{(\tikzlastnode-column-\col)}{#2} \fi } } }, style even columns on layer/.style 2 args = { label skeleton, add styling node={ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifodd\col \else \fitandstyle[#1]{(\tikzlastnode-column-\col)}{#2} \fi } } }, style odd tiling columns/.style = { label skeleton, add styling node = { \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifodd\col \fitandstyle{(\tikzlastnode-tiling-column-\col)}{#1} \fi } } }, style even tiling columns/.style = { label skeleton, add styling node={ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifodd\col \else \fitandstyle{(\tikzlastnode-tiling-column-\col)}{#1} \fi } } }, style odd tiling columns on layer/.style 2 args= { label skeleton, add styling node = { \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifodd\col \fitandstyle[#1]{(\tikzlastnode-tiling-column-\col)}{#2} \fi } } }, style even tiling columns on layer/.style 2 args = { label skeleton, add styling node={ \foreach \col in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifodd\col \else \fitandstyle[#1]{(\tikzlastnode-tiling-column-\col)}{#2} \fi } } }, style contour/.style = {% label skeleton, add styling node = { \stylecontour{#1} } }, style contour on layer/.style 2 args= {% label skeleton, add styling node = { \pgfonlayer{#1} \stylecontour{#2} \endpgfonlayer } }, style grid/.style = {% label skeleton, add styling node = { \stylegrid{#1} } }, style grid on layer/.style 2 args= {% label skeleton, add styling node = { \pgfonlayer{#1} \stylegrid{#2} \endpgfonlayer } }, style tiling grid/.style = {% label skeleton, add styling node = { \styletilinggrid{#1} } }, style tiling grid on layer/.style 2 args= {% label skeleton, add styling node = { \pgfonlayer{#1} \styletilinggrid{#2} \endpgfonlayer } }, } \def\fitandstyle{\@ifnextchar[{\fitandstyle@layer}{\fitandstyle@main}} \def\fitandstyle@layer[#1]#2#3{ \pgfonlayer{#1} \fitandstyle@main{#2}{#3} \endpgfonlayer } \def\fitandstyle@main#1#2{\node [fit = #1, inner sep = 0pt, #2] {};} \def\stylecontour#1{ \path [#1] (\tikzlastnode-row-1.north west) -- (\tikzlastnode-row-1.north east) -- (\tikzlastnode-row-\the\pgfmatrixcurrentrow.south east) -- (\tikzlastnode-row-\the\pgfmatrixcurrentrow.south west) -- cycle; } \def\stylegrid#1{ \ifnum\the\pgfmatrixcurrentrow>1\relax% \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifnum\row<\the\pgfmatrixcurrentrow\relax% \path [#1] (\tikzlastnode-inter-row-\row.west) -- (\tikzlastnode-inter-row-\row.east); \fi } \fi \ifnum\the\pgf@matrix@numberofcolumns>1\relax% \foreach \column in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifnum\column<\the\pgf@matrix@numberofcolumns\relax% \path [#1] (\tikzlastnode-inter-column-\column.north) -- (\tikzlastnode-inter-column-\column.south); \fi } \fi } \def\styletilinggrid#1{ \ifnum\the\pgfmatrixcurrentrow>1\relax% \foreach \row in {1, ..., \the\pgfmatrixcurrentrow}{ \ifnum\row<\the\pgfmatrixcurrentrow\relax% \path [#1] (\tikzlastnode-tiling-row-\row.south west) -- (\tikzlastnode-tiling-row-\row.south east); \fi } \fi \ifnum\the\pgf@matrix@numberofcolumns>1\relax% \foreach \column in {1, ..., \the\pgf@matrix@numberofcolumns}{ \ifnum\column<\the\pgf@matrix@numberofcolumns\relax% \path [#1] (\tikzlastnode-tiling-column-\column.north east) -- (\tikzlastnode-tiling-column-\column.south east); \fi } \fi }