8

How can I draw the following type of matrix without changing the horizontal alignment of the column entries:

|   c11 c12 c13   c14   c15 c16   c17 | c18 c19 | |
|   c21 c22 c23   c24 | c25 c26 | c27   c28 c29   |
|   c31 c32 c33   c34 | c35 c36 | c37   c38 c39   |
| | c41 c42 c43 | c44   c45 c46   c47   c48 c49   |

Remark: There are three sub-matrices within the main matrix:

submatrix 1: c18 to c19
submatrix 2: c25 to c36
submatrix 3: c41 to c43

where | shows as the large-sized parentheses ( and ).

This problem is different from matrix in a matrix.

3 Answers 3

12

Remarks

I hope, I got your explanation right.

Using a specific \tikzmark and the calligraphy TikZ library by Andrew Stacey you can achieve the following output. You will need to rerun latex several times to get the positioning right.

Implementation

\documentclass{standalone}
\usepackage{amsmath,tikz}
\usetikzlibrary{decorations,calligraphy}
\newcommand\tikzmark[2]{\tikz[remember picture,baseline=(#1.base)]{\node[inner sep=0pt] (#1) {#2};}}
\begin{document}
$
\begin{pmatrix}
    c11  & c12 & c13  & c14 & c15                   & c16                   & c17 & (c18 & c19) \\
    c12  & c22 & c23  & c24 & \tikzmark{c25}{$c25$} & \tikzmark{c26}{$c26$} & c27 & c28  & c29  \\
    c13  & c32 & c33  & c34 & \tikzmark{c35}{$c35$} & \tikzmark{c36}{$c36$} & c37 & c38  & c39  \\
    (c14 & c42 & c43) & c44 & c45                   & c46                   & c47 & c48  & c49  \\
\end{pmatrix}
$
\begin{tikzpicture}[remember picture,overlay]
    \draw[thick,decorate,decoration={calligraphic straight parenthesis}] (c35.south west) -- (c25.north west);
    \draw[thick,decorate,decoration={calligraphic straight parenthesis}] (c26.north east) -- (c36.south east);
\end{tikzpicture}
\end{document}

Output

enter image description here


Using the calc library you can compensate the bad spacing for the TikZ braces by adding an offset of .2em as in

\begin{tikzpicture}[remember picture,overlay]
    \draw[thick,decorate,decoration={calligraphic straight parenthesis}] ($(c35.south west)+(-.2em,0)$) -- ($(c25.north west)+(-.2em,0)$);
    \draw[thick,decorate,decoration={calligraphic straight parenthesis}] ($(c26.north east)+(.2em,0)$) -- ($(c36.south east)+(.2em,0)$);
\end{tikzpicture}

which produces

enter image description here


On behalf of Christopher Creutzig's comment, here another solution (still using tikzmark) which doesn't involve typing parentheses inside the matrix.

\documentclass{standalone}
\usepackage{amsmath,tikz}
\usetikzlibrary{calc,decorations,calligraphy}
\newcommand\tikzmark[2]{\tikz[remember picture,baseline=(#1.base)]{\node[inner sep=0pt] (#1) {#2};}}
\begin{document}
$
\begin{pmatrix}
    c11                   & c12 & c13                   & c14 & c15                   & c16                   & c17 & \tikzmark{c18}{$c18$} & \tikzmark{c19}{$c19$} \\
    c12                   & c22 & c23                   & c24 & \tikzmark{c25}{$c25$} & \tikzmark{c26}{$c26$} & c27 & c28                   & c29                   \\
    c13                   & c32 & c33                   & c34 & \tikzmark{c35}{$c35$} & \tikzmark{c36}{$c36$} & c37 & c38                   & c39                   \\
    \tikzmark{c14}{$c14$} & c42 & \tikzmark{c43}{$c43$} & c44 & c45                   & c46                   & c47 & c48                   & c49                   \\
\end{pmatrix}
$
\begin{tikzpicture}[remember picture,overlay]
    \draw[thick,decorate,decoration={calligraphic straight parenthesis}] ($(c35.south west)+(-.2em,0)$) -- ($(c25.north west)+(-.2em,0)$);
    \draw[thick,decorate,decoration={calligraphic straight parenthesis}] ($(c26.north east)+(.2em,0)$) -- ($(c36.south east)+(.2em,0)$);
    \node[left=.2em] at (c14) {$($};
    \node[left=.2em] at (c18) {$($};
    \node[right=.2em] at (c19) {$)$};
    \node[right=.2em] at (c43) {$)$};
\end{tikzpicture}
\end{document}

enter image description here

1
  • 1
    You have c14 and c18 shifted right and c43 and c19 shifted left. That probably calls for \llap and \rlap. Commented Dec 27, 2013 at 18:47
9

The following MWE inserts the brackets (..) at the appropriate size:

enter image description here

\documentclass{article}
\begin{document}
\[
  \left(\begin{array}{@{\hspace*{1ex}}*{9}{c}@{\hspace*{1ex}}}
    c_{11} & c_{12} & c_{13} & c_{14} & c_{15} & c_{16} & c_{17} & \llap{$\bigl($}c_{18} & c_{19}\rlap{$\bigr)$} \\
    c_{21} & c_{22} & c_{23} & c_{24} & \llap{\raisebox{\dimexpr\ht\strutbox-\height}[0pt][0pt]{$\biggl($}}c_{25} & 
      c_{26}\rlap{\raisebox{\dimexpr\ht\strutbox-\height}[0pt][0pt]{$\biggr)$}} & c_{27} & c_{28} & c_{29} \\
    c_{31} & c_{32} & c_{33} & c_{34} & c_{35} & c_{36} & c_{37} & c_{38} & c_{39} \\
    \llap{$\bigl($}c_{41} & c_{42} & c_{43}\rlap{$\bigr)$} & c_{44} & c_{45} & c_{46} & c_{47} & c_{48} & c_{49}
  \end{array}\right)
\]
\end{document}

Overlapping allows to maintain the horizontal spacing, while brackets are resized using their \big* equivalents.

2

With {pNiceMatrix} of nicematrix and its built-in command \SubMatrix.

\documentclass{article}
\usepackage{nicematrix}

\begin{document}
$\begin{pNiceMatrix}[margin]
c11 & c12 & c13 & c14 & c15 & c16 & c17 & c18 & c19 \\
c12 & c22 & c23 & c24 & c25 & c26 & c27 & c28 & c29 \\
c13 & c32 & c33 & c34 & c35 & c36 & c37 & c38 & c39 \\
c14 & c42 & c44 & c45 & c46 & c47 & c48 & c48 & c49 
\CodeAfter
  \SubMatrix({1-7}{1-8})
  \SubMatrix({2-5}{3-6})
  \SubMatrix({4-1}{4-3})
\end{pNiceMatrix}$
\end{document}

Output of the above code

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .