\rowcolors が行列区切り文字をカットするのはなぜですか?

\rowcolors が行列区切り文字をカットするのはなぜですか?

マトリックスを含む、行の色が交互に変わる表をタイプセットしたいのですが、なぜか、\rowcolors{1}{}{black!5}一部のマトリックスを追加するときに左括弧が省略されてしまいます。何が間違っているのでしょうか。また、これを回避するにはどうすればよいですか? 色付きのテーブル

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

答え1

次のようなことが起こります。bmatrix左の区切り文字をタイプセットし、次にバックスペースを挟んでマトリックスの本体をタイプセットします。これで本体が配列なので、各セルに印刷される現在の背景色を継承します。パディングを含む通常は によって行われますcolortbl

バックスペースは、左の区切り文字が新しいレイヤーで覆われているため、消えてしまう原因です。ああ、TeX のカラーの楽しさは格別です!代わりに を使用する;-)と、この問題は明らかになりますpmatrix。括弧の一部だけがオーバープリントされているのがはっきりとわかります。

ここに画像の説明を入力してください

解決方法:colorbmatrix欠落している区切り文字を再印刷する環境を定義します。

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

ここに画像の説明を入力してください

背景が白の行では、(目に見える) 左区切り文字もオーバープリントされますが、TeX の精度には自信があります。

最善の方法は、テーブル内の色付きの背景を一切避けることです。ただし、これはあくまでも私の個人的な意見です。

答え2

{NiceTabular}の環境ではnicematrix、期待どおりの出力が直接得られます。

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

複数のコンパイルが必要です (nicematrix内部で PGF/Tikz ノードが使用されるため)。

上記コードの出力

関連情報