Por que \rowcolors corta o delimitador de matriz?

Por que \rowcolors corta o delimitador de matriz?

Quero compor um tabular com cores de linha alternadas, contendo matrizes. De alguma forma, ao adicionar \rowcolors{1}{}{black!5}o colchete esquerdo de algumas matrizes é simplesmente omitido. O que estou fazendo de errado e como posso evitar isso? mesa colorida

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

Responder1

Veja o que acontece: bmatrixcompõe o delimitador esquerdo e depois o corpo da matriz, com um retrocesso entre eles; agora, o corpoéuma matriz, portanto, herda a cor de fundo atual com a qual cada célula é impressa,incluindo o preenchimentonormalmente feito por colortbl.

O retrocesso é a causa do desaparecimento do delimitador esquerdo, pois ele é coberto pela nova camada. Ah, as alegrias das cores no TeX! ;-)O problema torna-se aparente se pmatrixfor usado em vez disso: podemos ver claramente que apenas parte do parêntese está sobreposta.

insira a descrição da imagem aqui

Como remediar? Defina um colorbmatrixambiente que reimprima o delimitador ausente.

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

insira a descrição da imagem aqui

Na linha com fundo branco, o delimitador esquerdo (visível) também será impresso sobreposto, mas estou confiante na precisão do TeX.

O melhor seria evitar totalmente o fundo colorido nas tabelas. Mas é apenas minha opinião pessoal.

Responder2

Com o ambiente {NiceTabular}de nicematrix, você tem diretamente a saída esperada.

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

Você precisa de várias compilações (porque nicematrixusa nós PGF/Tikz nos bastidores).

Saída do código acima

informação relacionada