단순해 보이는 블록 매트릭스

단순해 보이는 블록 매트릭스

가능한 한 적은 종속성을 설정하고 싶은 단순해 보이는 블록 매트릭스가 있습니다. 나는 이미 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}​ 해당 환경은 (의 ) nicematrix클래식 환경과 유사 하지만 행, 셀 및 열 아래에 PGF/Tikz 노드를 생성합니다. 해당 노드를 사용하여 .NET에서 Tikz로 원하는 규칙을 그리는 것이 가능합니다 .{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}

출력은 동일합니다.

관련 정보