Scheinbar einfache Blockmatrix

Scheinbar einfache Blockmatrix

Ich habe eine scheinbar einfache Blockmatrix, die ich mit so wenig Abhängigkeiten wie möglich einrichten möchte. Amsmath und Freunde habe ich bereits geladen. Das Einzige, was ich vermeiden möchte, ist blkarray.

Folgendes möchte ich machen:

Was ich machen möchte

Hier ist einer meiner fehlgeschlagenen Versuche, bei dem mit Linien, die keine Ecken bilden, die abscheulichsten Abstände erzeugt werden, die man sich vorstellen kann.

\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}

Was hässlich ist wie sonst was:

Mein böser Fehlversuch

NB: Ich habe pmatrix so geändert, dass es Spaltenspezifikationen als optionales Argument akzeptiert. Stellen Sie sich einfach vor, es wäre ein Array.

Meine Schwierigkeit scheint daher zu rühren, dass ich 2x2-Blöcke möchte, während die meisten anderen, die ich gesehen habe, mit entweder mehreren Reihen oder mehreren Spalten, aber nicht mit beidem, klarzukommen scheinen.

Bearbeiten: Das ist nicht ganz so hässlich, aber die vertikalen Linien decken nur die Hälfte der Distanz der Mehrfachzeile ab:

\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}

Besser, aber immer noch nicht da.

Antwort1

Der grundlegende Teil der Matrixkonstruktion sieht folgendermaßen aus:

Bildbeschreibung hier eingeben

\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}

Vielleicht wäre es am besten, den anderen Komponenten Variablen zuzuweisen (wie Aund B), um den Matrixabstand beizubehalten.

Antwort2

Mit {pNiceMatrix}von nicematrix. Diese Umgebung ähnelt der klassischen Umgebung {pmatrix}(von amsmath), erstellt aber PGF/Tikz-Knoten unter den Zeilen, Zellen und Spalten. Mit diesen Knoten können Sie mit Tikz in der jede gewünschte Regel zeichnen \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}

Sie benötigen mehrere Kompilierungen (aufgrund der PGF/Tikz-Knoten).

Ausgabe des obigen Codes

Wenn Sie Tikz nicht explizit verwenden möchten, können Sie die Grenzen der Blöcke auch mit der Taste bordersdes Befehls angeben \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}

Die Ausgabe ist die gleiche.

verwandte Informationen