¿Por qué \rowcolors corta el delimitador de matriz?

¿Por qué \rowcolors corta el delimitador de matriz?

Quiero componer una tabla con colores de fila alternos, que contenga matrices. De alguna manera, cuando se agrega \rowcolors{1}{}{black!5}el corchete izquierdo de algunas matrices, simplemente se omite. ¿Qué estoy haciendo mal y cómo puedo evitarlo? mesa de colores

\documentclass[ border=2pt]{standalone}

\usepackage{amsmath}
\usepackage[natural,table]{xcolor}

\begin{document}
    \rowcolors{1}{}{black!5}
    \begin{tabular}[t]{ll}
        \rowcolor{gray!50}{\bfseries SKP} & \\ \hline
        $A$ & $\begin{bmatrix}-0.25 & 1 \\ 0 & 0.5  \end{bmatrix}$\\
        $b=g$ & $\begin{bmatrix}0 \\ 1\end{bmatrix}$    
    \end{tabular}
\end{document}

Respuesta1

Esto es lo que sucede: bmatrixescribe el delimitador izquierdo, luego el cuerpo de la matriz, con un espacio de retroceso en el medio; ahora el cuerpoesuna matriz, por lo que hereda el color de fondo actual con el que se imprime cada celda,incluyendo el rellenonormalmente hecho por colortbl.

El retroceso es la causa de la desaparición del delimitador izquierdo, porque queda cubierto por la nueva capa. ¡Ah, los placeres del color en TeX! ;-)El problema se vuelve evidente si pmatrixse usa en su lugar: podemos ver claramente que solo se sobreimprime parte del paréntesis.

ingrese la descripción de la imagen aquí

¿Cómo remediar? Defina un colorbmatrixentorno que reimprima el delimitador que falta.

\documentclass[border=2pt]{standalone}

\usepackage{amsmath}
\usepackage[natural,table]{xcolor}

\newsavebox{\bmatrixbox}
\newenvironment{colorbmatrix}
  {\begin{lrbox}{\bmatrixbox}
   \mathsurround=0pt
   $\displaystyle
   \begin{bmatrix}}
  {\end{bmatrix}$%
   \end{lrbox}%
   \usebox{\bmatrixbox}%
   \kern-\wd\bmatrixbox
   \makebox[0pt][l]{$\left[\vphantom{\usebox{\bmatrixbox}}\right.$}%
   \kern\wd\bmatrixbox
}

\begin{document}
    \rowcolors{1}{}{black!5}
    \begin{tabular}[t]{ll}
        \rowcolor{gray!50}{\bfseries SKP} & \\ \hline
        $A$ & $\begin{colorbmatrix}-0.25 & 1 \\ 0 & 0.5  \end{colorbmatrix}$\\
        $b=g$ & $\begin{colorbmatrix}0 \\ 1\end{colorbmatrix}$ \\ \hline
        $A$ & $\begin{colorbmatrix}-0.25 & 1 \\ 0 & 0.5  \end{colorbmatrix}$\\
    \end{tabular}
\end{document}

ingrese la descripción de la imagen aquí

En la fila con fondo blanco, el delimitador izquierdo (visible) también se sobreimprimirá, pero confío en la precisión de TeX.

Lo mejor sería evitar por completo el fondo de color en las tablas. Pero es sólo mi opinión personal.

Respuesta2

Con el entorno {NiceTabular}de nicematrix, tiene directamente el resultado esperado.

\documentclass{article}
\usepackage{xcolor}
\usepackage{nicematrix}

\begin{document}
\NiceMatrixOptions{cell-space-limits=2pt}
\begin{NiceTabular}[t]{ll}[colortbl-like]
\CodeBefore 
  \rowcolors{1}{}{black!5}
\Body
  \rowcolor{gray!50}\bfseries SKP & \\ \Hline
  $A$ & $\begin{bmatrix}-0.25 & 1 \\ 0 & 0.5  \end{bmatrix}$\\
  $b=g$ & $\begin{bmatrix}0 \\ 1\end{bmatrix}$    
\end{NiceTabular}
\end{document}

Necesita varias compilaciones (porque nicematrixutiliza nodos PGF/Tikz bajo el capó).

Salida del código anterior

información relacionada