为什么 \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 节点)。

上述代码的输出

相关内容