Adicionando linhas verticais ao redor de vetores de linha em matrizes de bloco

Adicionando linhas verticais ao redor de vetores de linha em matrizes de bloco

Eu gostaria de produzir uma matriz de blocos 3x3 com o layout mostrado na figura abaixo à esquerda. A matriz é dividida por um vetor linha d-e-fe um vetor coluna b-e-h(portanto, erepresenta uma submatriz 1x1). Gostaria de adicionar duas linhas horizontais e duas verticais para separar os 9 blocos (4 matrizes, 4 vetores, 1 escalar).

Estou usando os NiceArraycomandos donicematrixpacote, que funcionam conforme o esperado se eu usar blocos de duas linhas (veja a matriz esquerda abaixo). Entretanto, quando tento compor o vetor linha d-e-fusando blocos de uma linha (ou seja, mudando \Block{2-2}{d}para \Block{1-2}{d}e assim por diante), as linhas verticais se quebram (veja o exemplo à direita). Adicionar/remover \hlinecomandos não tem efeito nas linhas verticais. Estou usando o TeX Live 2019 com nicematrixversão 3.7.

Existe uma maneira de manter linhas verticais em torno da submatriz esem usar blocos de duas linhas?

insira a descrição da imagem aqui

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

Atualização: em última análise, gostaria de substituir a... ipor fórmulas que representam as submatrizes, por exemplo A_{00}, , a_{01}^\mathsf{T}, etc. Também gostaria de ilustrar isso ae isão matrizes quadradas, mas cnão gsão necessariamente quadradas.

Aqui está um exemplo de saída com valores realistas:

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

insira a descrição da imagem aqui

Responder1

Semelhante ao sugerido @leandriis em seu comentário. Seus blocos são simulados com mais espaço ao redor da submatriz:

Editar:

Considerando o conteúdo da matriz conforme fornecido na pergunta editada

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

Nota: linhas e colunas vazias são adicionadas para enfatizar onde a submatriz de dimensão é maior que 1 x 1. Se isso não for necessário, simplesmente descarte-os.

insira a descrição da imagem aqui

Responder2

Acontece que este é um bug na versão atual do nicematrixpacote. Isso foi corrigido na versão 3.8 (02/01/2020) e está disponível no CTAN.

Se você estiver preso a uma versão mais antiga por algum motivo, o bug pode ser contornado adicionando \vlineno final das células afetadas. Aplicar isso no exemplo de trabalho mínimo fornece o resultado desejado:

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

insira a descrição da imagem aqui

Responder3

Uma solução variante:

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

insira a descrição da imagem aqui

informação relacionada