Почему \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).

Вывод кода выше

Связанный контент