為什麼 \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 節點)。

上述程式碼的輸出

相關內容