Uso de 'nicematrix' para matrices con anotaciones especiales

Uso de 'nicematrix' para matrices con anotaciones especiales

Generé la siguiente imagen usando nicematrix.
Todo funciona bien; por lo que no hay ningún problema urgente por el momento.

Nota:El resultado o la óptica es exactamente el deseado. A continuación sólo me ocuparé de algunas sutilezas del código, para un uso óptimo del paquete nicematrix.

ingrese la descripción de la imagen aquí

Sin embargo, por interés personal, me hubieran interesado 2 cosas:

  1. "A1 A2 ... A4"debe estar centrado verticalmente al conjunto.
    ¿Está bien mi uso aquí? ¿O debería haberlo hecho mejor en el sentido de ?
    \Block{2-1}{A1} & \Block{2-1}{A2} & \Block{2-1}{\cdots} & \Block{2-1}{A4} ... \\

    nicematrix.sty

  2. Arriba y abajo "A1 A2 ... A4"agregué líneas verticales, cada una hasta los extremos de la matriz.
    Para ellineas inferioresTuve que hacer un ajuste visual:
    \draw[shorten <=1em+2pt] (2-\col) -- (last-|\col.5);
    Esto significa que si el contenido cambia, probablemente será necesario realizar ajustes nuevamente.
    ¿Podría esto hacerse más estable/flexible?

Código:

\documentclass{article}
\usepackage{amsmath}
\usepackage{nicematrix} 
\usepackage{tikz} 
\begin{document}
$M=\begin{NiceArray}{(c c c c)  c  (c c c c)}
   &   &   &   &   \Block{*-1}{\cdot}  & B1 &    &            &   \\
\Block{2-1}{A1} & \Block{2-1}{A2} & \Block{2-1}{\cdots} & \Block{2-1}{A4} 
        &                                        &    & B2  &   &   \\
   &   &    &    &                             &     &    &  \ddots &   \\
   &   &   &   &                              &     &    &            & B4
\CodeAfter
\begin{tikzpicture}[]
% Verticals  =====================
\foreach \col in {1,2,4}{%% 
\draw[shorten <=0pt] (2-\col) -- (1-|\col.5) ; 
\draw[shorten <=1em+2pt] (2-\col) -- (last-|\col.5) ; 
}%%
\end{tikzpicture}
% Underbracing  =================
\UnderBrace[yshift=2pt]{4-6}{4-9}{=X}
\end{NiceArray}$
\end{document}

Respuesta1

Para obtener la línea de base donde desea, puede usar la opción baseline=<row number>para NiceArray. Pero eso requiere que A1esté en su propia fila, no en un bloque. Una posibilidad es hacer tu matriz con 5 filas y 10 columnas. Luego, en la "segunda" matriz, use un 2 por 2 Blockpara \ddots.

ingrese la descripción de la imagen aquí

Otros cambios:

  • coloque un espacio delgado ( \,) a la derecha y a la izquierda de la \cdotcolumna para que el espaciado sea el mismo que si usara dos matrices separadas.
  • cree un nuevo estilo ( mylineen el código siguiente) para acortar las líneas verticales. Como A1, A2, etc. están en sus propias celdas, el espaciado es uniforme.

Aquí está el código:

\documentclass{article}
\usepackage{amsmath}
\usepackage{nicematrix} 
\usepackage{tikz} 
\tikzset{myline/.style={shorten <=3pt}}
\begin{document}
$M=\begin{NiceArray}{(cccc)!\,c!\,(ccccc)}[baseline=3]
 & & & & \Block{*-1}{\cdot} & B1\\
 & & & & & & B2 \\
A1 & A2 & \cdots & A4 & & & & \Block{2-2}{\ddots} \\
 \\
 & & & & & & & & & B4
\CodeAfter
\begin{tikzpicture}[]
% Verticals  =====================
\foreach \col in {1,2,4}{%%  
  \draw[myline] (3-\col) -- (1-|\col.5) ; 
  \draw[myline] (3-\col) -- (last-|\col.5) ; 
}%%
\end{tikzpicture}
% Underbracing  =================
\UnderBrace[yshift=2pt]{5-6}{5-10}{=X}
\end{NiceArray}$
\end{document}

Respuesta2

ingrese la descripción de la imagen aquí

Si desea que las líneas permanezcan debajo "A1 A2 ... A4", debe usarlas \tikzmarknodedesde tikzmarkla biblioteca

\documentclass{article}
\usepackage[x11names]{xcolor}
\usepackage{amsmath}
\usepackage{nicematrix} 
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{tikzmark}

\begin{document}
    
    \begin{equation*}
        \setlength{\arraycolsep}{1em}
        \smash{\rlap{\rule{11cm}{0.1pt}}}
        M
        =
        \begin{NiceArray}{(c c c c)  c  (c c c c)}
            \CodeBefore [create-cell-nodes]
            \Body
            &   &   &   &   \Block{*-1}{\cdot}  & B1 &    &            &   \\
            \Block{2-1}{\tikzmarknode{A1}{A1}} & \Block{2-1}{\tikzmarknode{A2}{A2}} & \Block{2-1}{\cdots} & \Block{2-1}{\tikzmarknode{A4}{A4}} 
            &                                        &    & B2  &   &   \\
            &   &    &    &                             &     &    &  \ddots &   \\
            &   &   &   &                              &     &    &            & B4
            \CodeAfter
            \begin{tikzpicture}[]
                
                % Verticals  =====================
                \draw[shorten <=1pt] (A1.north) -- (1-|1.5);
                \draw[shorten <=1pt] (A2.north) -- (1-|2.5); 
                \draw[shorten <=1pt] (A4.north) -- (1-|4.5);
                
                \draw[shorten >=1pt] (last-|1.5) -- (A1.south); 
                \draw[shorten >=1pt] (last-|2.5) -- (A2.south);
                \draw[shorten >=1pt] (last-|4.5) -- (A4.south);
                    
            \end{tikzpicture}
            % Underbracing  =================
            \UnderBrace[yshift=2pt]{4-6}{4-9}{=X}
        \end{NiceArray}
    \end{equation*}

\end{document}

información relacionada