24

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

23

The blkarray package allows to do complex border matrix with relatively simple code:

enter image description here

\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}
1
  • Great. I didn't know this package before. It seems blkarray provides better spacing.
    – Leo Liu
    Feb 3 '11 at 9:39
13
\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}

enter image description here

3
  • Is there a particular reason why you write ^\prime and not simply '? The latter expands to the former and is much clearer. Feb 3 '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
    – user2478
    Feb 3 '11 at 12:52
  • This should be added to your mathmode.pdf. Nov 5 '12 at 16:28
10

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}

output

3
  • You should have enough rep now, so I edited in the picture.
    – Caramdir
    Feb 4 '11 at 5:06
  • I've tried to improve the formatting of your code a bit. Hope that's OK. Feb 4 '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 \ProvidesPackage stuff of course.
    – Christian
    Jun 3 '12 at 21:34
9

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}

enter image description here

7

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

output

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

bmatrices

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

1

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).

Output of the first code

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}

Output of the above code

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy