Hinzufügen vertikaler Linien um Zeilenvektoren in Blockmatrizen

Hinzufügen vertikaler Linien um Zeilenvektoren in Blockmatrizen

Ich möchte eine 3x3-Blockmatrix mit einem Layout erstellen, das in der linken Abbildung unten dargestellt ist. Die Matrix ist durch einen Zeilenvektor d-e-fund einen Spaltenvektor geteilt b-e-h(stellt also eeine 1x1-Untermatrix dar). Ich möchte zwei horizontale und zwei vertikale Linien hinzufügen, um die 9 Blöcke (4 Matrizen, 4 Vektoren, 1 Skalar) zu trennen.

Ich verwende die NiceArrayBefehle desnicematrixPaket, die wie vorgesehen funktionieren, wenn ich zweizeilige Blöcke verwende (siehe linke Matrix unten). Wenn ich jedoch versuche, den Zeilenvektor d-e-fmit einzeiligen Blöcken zu setzen (also \Block{2-2}{d}in \Block{1-2}{d}usw. zu ändern), brechen die vertikalen Linien (siehe Beispiel rechts). Das Hinzufügen/Entfernen der \hlineBefehle hat keine Auswirkungen auf die vertikalen Linien. Ich verwende TeX Live 2019 mit nicematrixVersion 3.7.

Gibt es eine Möglichkeit, vertikale Linien um die Untermatrix herum beizubehalten, eohne zweizeilige Blöcke zu verwenden?

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage{nicematrix}
\begin{document}

\[
\begin{pNiceArray}{cc|c|cc}[margin]
    \Block{2-2}{a} & & \Block{2-1}{b} & \Block{2-2}{c} & \\
                   & &                &                & \\\hline
    \Block{2-2}{d} & & \Block{2-1}{e} & \Block{2-2}{f} & \\
                   & &                &                & \\\hline
    \Block{2-2}{g} & & \Block{2-1}{h} & \Block{2-2}{i} & \\
                   & &                &                & \\
\end{pNiceArray}
\quad
\begin{pNiceArray}{cc|c|cc}[margin]
    \Block{2-2}{a} & & \Block{2-1}{b} & \Block{2-2}{c} & \\
                   & &                &                & \\
    \Block{1-2}{d} & & \Block{1-1}{e} & \Block{1-2}{f} & \\\hline
    \Block{2-2}{g} & & \Block{2-1}{h} & \Block{2-2}{i} & \\
                   & &                &                & \\
\end{pNiceArray}
\]

\end{document}

Update: letztendlich möchte ich die a... idurch Formeln ersetzen, die die Untermatrizen darstellen, z. B. A_{00}, a_{01}^\mathsf{T}, usw. Ich möchte auch veranschaulichen, dass aund iquadratische Matrizen sind, und aber cnicht gunbedingt quadratische Matrizen sind.

Hier ist eine Beispielausgabe mit realistischen Werten:

\documentclass{article}
\usepackage{nicematrix}
\begin{document}

\setlength{\extrarowheight}{1mm}
\setlength{\arraycolsep}{8pt}
\[
\begin{pNiceArray}{ccc|c|ccccc}[margin]
    \Block{3-3}{A_{00}} & & & \Block{3-1}{a_{01}} & \Block{3-4}{A_{20}^\mathsf{T}} & & & \\
     & & & & & & & \\
     & & & & & & & \\ \hline
     % I'd like to use the following line but it doesn't work as expected:
     %\Block{1-3}{a_{01}^\mathsf{T}} & & & \Block{1-1}{0} & \Block{1-4}{a_{21}^\mathsf{T}} & & & \\
     % two-row blocks are fine:
     \Block{2-3}{a_{01}^\mathsf{T}} & & & \Block{2-1}{0} & \Block{2-4}{a_{21}^\mathsf{T}} & & & \\
     & & & & & & & \\ \hline
     \Block{4-3}{A_{20}} & & & \Block{4-1}{a_{21}} & \Block{4-4}{A_{22}} & & & \\
     & & & & & & & \\
     & & & & & & & \\
     & & & & & & & \\
\end{pNiceArray}
\]

\end{document}

Bildbeschreibung hier eingeben

Antwort1

Ähnlich wie @leandriis in seinem Kommentar vorgeschlagen hat. Ihre Blöcke werden mit mehr Platz um die Untermatrix simuliert:

Bearbeiten:

Berücksichtigung des Matrixinhalts, wie Sie ihn in der bearbeiteten Frage angegeben haben

\documentclass{article}
\usepackage{array,
            makecell}    % new

\begin{document}
\[\setcellgapes{3pt}
  \makegapedcells
\left(
\begin{array}{ccc|c|ccc}
    &           &&          &&              &   \\
    & A_{00}    && a_{01}   &&   A_{20}^T   &   \\
    &           &&          &&              &   \\   \hline
    & a_{01}^T  && 0        &&  f           &   \\   \hline
    &           &&          &&              &   \\
    & A_{20}    && a_{21}   &&  A_{22}^T    &   \\
    &           &&          &&              &   \\
\end{array}\right)
\]
\end{document}

Hinweis: Leere Zeilen und Spalten werden hinzugefügt, um hervorzuheben, wo die Dimensionsuntermatrix größer als ist 1 x 1. Wenn dies nicht erforderlich ist, lassen Sie sie einfach weg.

Bildbeschreibung hier eingeben

Antwort2

Es stellt sich heraus, dass dies ein Fehler in der aktuellen Version des nicematrixPakets ist. Dies wurde in Version 3.8 (02.01.2020) behoben und ist auf CTAN verfügbar.

Wenn Sie aus irgendeinem Grund mit einer älteren Version festsitzen, kann der Fehler umgangen werden, indem Sie \vlineam Ende der betroffenen Zellen Folgendes hinzufügen. Wenn Sie dies auf das minimal funktionierende Beispiel anwenden, erhalten Sie die gewünschte Ausgabe:

\documentclass{article}
\usepackage{nicematrix}
\begin{document}

\setlength{\extrarowheight}{1mm}
\setlength{\arraycolsep}{8pt}
\[
\begin{pNiceArray}{ccc|c|ccccc}[margin]
    \Block{3-3}{A_{00}} & & & \Block{3-1}{a_{01}} & \Block{3-4}{A_{20}^\mathsf{T}} & & & \\
    & & & & & & & \\
    & & & & & & & \\ \hline
    \Block{1-3}{a_{01}^\mathsf{T}} & & \vline & \Block{1-1}{0} \vline & \Block{1-4}{a_{21}^\mathsf{T}} & & & \\\hline
    \Block{4-3}{A_{20}} & & & \Block{4-1}{a_{21}} & \Block{4-4}{A_{22}} & & & \\
    & & & & & & & \\
    & & & & & & & \\
    & & & & & & & \\
\end{pNiceArray}
\]

\end{document}

Bildbeschreibung hier eingeben

Antwort3

Eine alternative Lösung:

\documentclass{article}
\usepackage{amsmath} %

\begin{document}


\[ \renewcommand{\arraystretch}{1.4}
  \left[\,\:\begin{matrix}
     a & \vrule & b & \vrule & c \\
    \hline
     d & \vrule & e & \vrule & f \\
    \hline
     g & \vrule & h &\vrule & i
    \end{matrix}
\,\: \right]
\]

\end{document} 

Bildbeschreibung hier eingeben

verwandte Informationen