На первый взгляд простая блочная матрица

На первый взгляд простая блочная матрица

У меня есть, казалось бы, простая блочная матрица, которую я хочу установить с минимальным количеством зависимостей. У меня уже загружены amsmath и друзья. Единственное, чего я намерен избегать, это blkarray.

Вот что я хочу сделать:

Что я хочу сделать

Вот моя неудачная попытка, которая приводит к созданию самых отвратительных интервалов, какие только можно себе представить, с линиями, которые не пересекаются, образуя углы.

\begin{equation}
    \begin{pmatrix}[ccc]
        J_1 & \begin{array}{|cc}0 & 0\\ 0 & 0\end{array} & \begin{array}{cc}0 & 0\\ 0 & 0\end{array}\\ \cline{1-2}
        \begin{array}{cc|}0&0\\0&0\end{array} & J_2 & \begin{array}{|cc}0&0\\0&0\end{array}\\ \cline{2-3}
        \begin{array}{cc}0 & 0\\ 0 & 0\end{array} & \begin{array}{cc|}0 & 0\\ 0 & 0\end{array} & J_3
    \end{pmatrix}
\end{equation}

Что ужасно, как и все остальное:

Моя отвратительная неудачная попытка

NB: Я изменил pmatrix так, что он принимает спецификации столбцов как необязательный аргумент. Просто представьте, что это массив.

Похоже, моя трудность связана с тем, что мне нужны блоки 2x2, в то время как большинство других, которых я видел, используют либо многострочную, либо многоколоночную схему, но не оба варианта одновременно.

Редактировать: Это не так уж и уродливо, но вертикальные линии покрывают только половину расстояния многорядной строки:

\begin{equation}
    \begin{array}{cccccc}
        \multicolumn{2}{c|}{\multirow{2}{*}{$J_1$}} & 0 & 0 & 0 & 0\\
                                                   & & 0 & 0 & 0 & 0\\ \cline{1-4}
        0 & 0 & \multicolumn{2}{|c|}{\multirow{2}{*}{$J_1$}} & 0 & 0\\
        0 & 0 &                                           & & 0 & 0\\ \cline{3-6}
        0 & 0 & 0 & 0 & \multicolumn{2}{|c}{\multirow{2}{*}{$J_1$}} \\
        0 & 0 & 0 & 0 & & \\
    \end{array}
\end{equation}

Лучше, но все еще не то.

решение1

Основная часть построения матрицы выглядит следующим образом:

введите описание изображения здесь

\documentclass{article}
\newcommand{\mc}{\multicolumn{1}{c}}
\begin{document}

\[
  \renewcommand{\arraystretch}{1.2}
  \left(
  \begin{array}{ c c | c c | c c }
    \multicolumn{1}{|c}{} & & 0 & \mc{0} & 0 & 0 \\
    \multicolumn{2}{|c|}{\raisebox{.6\normalbaselineskip}[0pt][0pt]{$J_1$}} & 0 & \mc{0} & 0 & 0 \\
    \cline{1-4}
    0 & 0 & & & 0 & 0 \\
    0 & 0 & \multicolumn{2}{c|}{\raisebox{.6\normalbaselineskip}[0pt][0pt]{$J_2$}} & 0 & 0 \\
    \cline{3-6}
    0 & \mc{0} & 0 & 0 & & \multicolumn{1}{c|}{} \\
    0 & \mc{0} & 0 & 0 & \multicolumn{2}{c|}{\raisebox{.6\normalbaselineskip}[0pt][0pt]{$J_3$}}
  \end{array}
  \right)
\]

\end{document}

Возможно, было бы лучше назначить переменные другим компонентам (например, Aи B), чтобы сохранить интервал матрицы.

решение2

С . Эта среда похожа на классическую среду (из ) {pNiceMatrix}, но создает узлы PGF/Tikz под строками, ячейками и столбцами. Можно использовать эти узлы для рисования любого правила, которое вы хотите, с Tikz в .nicematrix{pmatrix}amsmath\CodeAfter

\documentclass{article}
\usepackage{nicematrix}
\usepackage{tikz}

\begin{document}

$\begin{pNiceMatrix}[margin]
\Block{2-2}{J_1} & & 0 & 0 & 0 & 0 \\
                 & & 0 & 0 & 0 & 0 \\
0 & 0 & \Block{2-2}{J_2} & & 0 & 0 \\
0 & 0 &                  & & 0 & 0 \\
0 & 0 & 0 & 0 & \Block{2-2}{J_3} \\
0 & 0 & 0 & 0 \\
\CodeAfter
  \begin{tikzpicture}
  \draw (1-|1) |- (3-|5) -- (7-|5) ;
  \draw (1-|3) |- (5-|7) -- (7-|7) ;
  \end{tikzpicture}
\end{pNiceMatrix}$

\end{document}

Вам потребуется несколько компиляций (из-за узлов PGF/Tikz).

Вывод кода выше

Если вы не хотите использовать Tikz явно, вы также можете указать границы блоков с помощью клавиши bordersкоманды \Block.

\documentclass{article}
\usepackage{nicematrix}
\usepackage{tikz}

\begin{document}

$\begin{pNiceMatrix}[margin]
\Block[borders={left,bottom,right}]{2-2}{J_1} & & 0 & 0 & 0 & 0 \\
                                              & & 0 & 0 & 0 & 0 \\
0 & 0 & \Block[draw]{2-2}{J_2} & & 0 & 0 \\
0 & 0 &                        & & 0 & 0 \\
0 & 0 & 0 & 0 & \Block[borders={left,top,right}]{2-2}{J_3} \\
0 & 0 & 0 & 0 \\
\end{pNiceMatrix}$

\end{document}

Результат тот же.

Связанный контент