I need to write a complicated matrix, that has a structure as in the attached picture.

- 17,947
6 Answers
The blkarray package allows to do complex border matrix with relatively simple code:

\documentclass{article}
\usepackage{blkarray}
\usepackage{multirow}
\begin{document}
\[
\begin{blockarray}{cc|cccc|cccc}
& 1\dots 18 & 19 & 20 & 21 & 22 & 23 & 24 & 25 & 26 \\
\begin{block}{c(c|cccc|cccc@{\hspace*{5pt}})}
A'_1 & A_1 & \BAmulticolumn{4}{c|}{\multirow{4}{*}{$I$}}&\BAmulticolumn{4}{c}{\multirow{4}{*}{$I$}}\\
A'_2 & A_2 & &&&&&&&\\
A'_3 & A_3 & &&&&&&&\\
A'_4 & A_4 & &&&&&&&\\
\cline{1-10}% don't use \hline
B'_1 & B_1 & \BAmulticolumn{4}{c|}{\multirow{4}{*}{$J$}}&\BAmulticolumn{4}{c}{\multirow{4}{*}{$I$}}\\
B'_2 & B_2 & &&&&&&&\\
B'_3 & B_3 & &&&&&&&\\
B'_4 & B_4 & &&&&&&&\\
\end{block}
\end{blockarray}
\]
\end{document}
- 603,163
- 28,978
\documentclass{article}
\usepackage{blkarray}
\def\Big#1{\makebox(0,0){\huge#1}}
\begin{document}
\[
\begin{blockarray}{cc|c|c}
& 1\ldots18&19\,20\,21\,22&23\,24\,25\,26\\
\begin{block}{c(c|c|c)}
A_1^\prime & A_1 & & \\
A_2^\prime & A_2 & \Big{I}& \Big{I}\\
A_3^\prime & A_3 & & \\
A_4^\prime & A_4 & & \\\cline{1-4}
B_1^\prime & B_1 & & \\
B_2^\prime & B_2 &\Big{J} & \Big{I}\\
B_3^\prime & B_3 & & \\
B_4^\prime & B_4 & & \\
\end{block}
\end{blockarray}
\]
\end{document}

- 603,163
-
Is there a particular reason why you write
^\primeand not simply'? The latter expands to the former and is much clearer. – Hendrik Vogt Feb 03 '11 at 11:55 -
@Hendrik: you are right in this case it makes no sense. I did it by default. HOwever, cannot remember where I had to use instead of the accent – Feb 03 '11 at 12:52
-
Thanks to everyone. I managed to find solution myself as well. I have used package kbordermatrix. However very often math journals want to typeset the tex file themselves and they don't have all the packages. I'm sure that at least one variant will work. So thank again:) My solution is below:
\documentclass{article}
\usepackage{kbordermatrix}
\begin{document}
\begin{equation}
\kbordermatrix{
& 1 \ldots 18 & \vrule & 19 \text{ } 20 \text{ } 21 \text{ } 22 & \vrule & 23 \text{ } 24 \text{ } 25 \text{ } 26 \\
\begin{array}{c} \chi(A'_1) \\ \chi(A'_2) \\ \chi(A'_3) \\ \chi(A'_4) \end{array}
& \begin{array}{c} \chi(A_1) \\ \chi(A_2) \\ \chi(A_3) \\ \chi(A_4) \end{array}
& \vrule & I & \vrule& I \\ \hline
\begin{array}{c} \chi(B'_1) \\ \chi(B'_2) \\ \chi(B'_3) \\ \chi(B'_4) \end{array}
& \begin{array}{c} \chi(B_1) \\ \chi(B_2) \\ \chi(B_3) \\ \chi(B_4) \end{array}
& \vrule & J & \vrule& I } ,
\end{equation}
\end{document}
- 37,935
-
-
I've tried to improve the formatting of your code a bit. Hope that's OK. – Hendrik Vogt Feb 04 '11 at 10:06
-
Of course if you absolutely need a package as well as a self-contained .tex file, you can always just copy and paste the .sty file content in your main .tex file. Minus the
\ProvidesPackagestuff of course. – Christian Jun 03 '12 at 21:34
You can use multirow and bigdelim package for this matrix. Example:
\documentclass{article}
\usepackage{multirow,bigdelim}
\begin{document}
\[
\begin{array}{ccc|cc|ccc}
&& x & a & b & c & d \\
A &\ldelim({4}{0.5em}& x
& \multicolumn{2}{c|}{\multirow{2}*{ab}}
& \multicolumn{2}{c}{\multirow{2}*{cd}}
& \rdelim){4}{0.5em} \\
B && y &&&& \\
\hline
C && x
& \multicolumn{2}{c|}{\multirow{2}*{ab}}
& \multicolumn{2}{c}{\multirow{2}*{cd}} \\
D && y &&&& \\
\end{array}
\]
\end{document}

Plain-kru represenz:
\font\Large=cmr10 at 20pt
\newcount\rowcount\rowcount=3
\def\fudge#1{\smash{\hbox{\Large#1}}}
\def\doublyso{\kern-.5em\smash{\vrule height \rowcount em depth .2em}\hidewidth}
$\bordermatrix{
\global\everycr{\noalign{\global\advance\rowcount by 1}}
&1\ldots18&19\;20\;21\;22&23\;24\;25\;26 \cr
A_1'&A_1\cr
A_2'&A_2\cr
A_3'&A_3&\fudge I&\fudge I\cr
A_4'&A_4\cr
\noalign{\smallskip\hrule\smallskip}
B_1'&B_1\cr
B_2'&B_2\cr
B_3'&B_3&\fudge J&\fudge I\cr
B_4'&B_4&\doublyso&\doublyso\cr
}$
\everycr={}
\bye

In my "imitation of \atopwithdelims-line of thought"-spree, I made one for \bordermatrix as well (which is the Plain \bordermatrix with only the delims made as arguments):
\catcode`@=11
\def\bordermatrixwithdelims#1#2#3{\begingroup \m@th
\setbox0=\vbox{\def\cr{\crcr\noalign{\kern2pt\global\let\cr=\endline}}
\ialign{$##$\hfil\kern2pt\kern\p@renwd&\thinspace\hfil$##$\hfil
&&\quad\hfil$##$\hfil\crcr
\omit\strut\hfil\crcr\noalign{\kern-\baselineskip}
#3\crcr\omit\strut\cr}}
\setbox2=\vbox{\unvcopy0 \global\setbox1=\lastbox}
\setbox2=\hbox{\unhbox1 \unskip \global\setbox1=\lastbox}
\setbox2=\hbox{$\kern\wd1\kern-\p@renwd \left#1 \kern-\wd1
\global\setbox1=\vbox{\box1\kern2pt}
\vcenter{\kern-\ht1 \unvbox0 \kern-\baselineskip} \,\right#2$}
\null\;\vbox{\kern\ht1\box2}\endgroup}
\catcode`@=12
%
\def\cbordermatrix#1{\bordermatrixwithdelims[]{#1}}
\def\bbordermatrix#1{\bordermatrixwithdelims\{\}{#1}}
\def\vbordermatrix#1{\bordermatrixwithdelims||{#1}}
%
$$
\bordermatrix{&[a]&[b]\cr &1&2\cr&3&4}
\cbordermatrix{&[a]&[b]\cr &1&2\cr&3&4}
\bbordermatrix{&[a]&[b]\cr &1&2\cr&3&4}
\vbordermatrix{&[a]&[b]\cr &1&2\cr&3&4}
$$
\bye

So to achieve the look of which the OP settled on, one could just substitute the call to \bordermatrix in my original answer with \cbordermatrix
- 231,401
- 25,490
- 4
- 81
- 162
With {NiceArray} of nicematrix.
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
$\begin{NiceArray}{cc|cccc|cccc}
& 1...18 & 19 & 20 & 21 & 22 & 23 & 24 & 25 & 26 \
A_1' & A_1 & \Block{4-4}<\Large\bfseries>{\text{I}} &&&& \Block{4-4}<\Large\bfseries>{\text{I}} \
A_2' & A_2 & \
A_3' & A_3 & \
A_4' & A_4 & \
\hline
B_1' & B_1 & \Block{4-4}<\Large\bfseries>{\text{J}} &&&& \Block{4-4}<\Large\bfseries>{\text{I}} \
B_2' & B_2 & \
B_3' & B_3 & \
B_4' & B_4 & \
\CodeAfter
\SubMatrix({2-2}{9-10})
\end{NiceArray}$
\end{document}
You need several compilations (because nicematrix uses PGF/Tikz nodes under the hood).
If you want the rules only in the main matrix, it's also possible.
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
$\begin{NiceMatrix}
& 1...18 & 19 & 20 & 21 & 22 & 23 & 24 & 25 & 26 \
A_1' & A_1 & \Block{4-4}<\Large\bfseries>{\text{I}} &&&& \Block{4-4}<\Large\bfseries>{\text{I}} \
A_2' & A_2 & \
A_3' & A_3 & \
A_4' & A_4 & \
B_1' & B_1 & \Block{4-4}<\Large\bfseries>{\text{J}} &&&& \Block{4-4}<\Large\bfseries>{\text{I}} \
B_2' & B_2 & \
B_3' & B_3 & \
B_4' & B_4 & \
\CodeAfter
\SubMatrix({2-2}{9-10})[vlines={1,5},hlines=4]
\end{NiceMatrix}$
\end{document}
- 40,250


blkarrayprovides better spacing. – Leo Liu Feb 03 '11 at 09:39