![Почему \rowcolors обрезает разделитель матрицы?](https://rvso.com/image/328475/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%5Crowcolors%20%D0%BE%D0%B1%D1%80%D0%B5%D0%B7%D0%B0%D0%B5%D1%82%20%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%20%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B%3F.png)
Хочу набрать табличку с чередующимися цветами строк, содержащую матрицы. Почему-то при добавлении \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).