Определение левого/правого выступа с помощью \cellcolor

Определение левого/правого выступа с помощью \cellcolor

Я хочу выделить одну строку и один столбец в таблице. Столбец не проблема. Однако цветные панели самой левой и самой правой ячейки в строке выходят за границы таблицы, если я использую @{}в tabularопределении.

\documentclass{scrartcl}
\usepackage{colortbl,booktabs}
\begin{document}
\begin{table}[h]
  \setlength{\aboverulesep}{0pt} % align \bottomrule nicely to coloured cell
  \setlength{\belowrulesep}{0pt} % align \toprule nicely to coloured cell
  \setlength{\extrarowheight}{.75ex} % make up for lost ruleseps

  \begin{tabular}{@{}c>{\columncolor[gray]{.9}}cc@{}} \toprule
                        a & b & c \\
                        d & e & f \\
    \rowcolor[gray]{.9} g & h & i \\
    \bottomrule
  \end{tabular}
\end{table}
\end{document}

Проблема очевидна:

свесы цвета ряда

Использование \rowcolor[gray]{.9}[0pt][0pt]для уменьшения выступа не подходит, так как в этом случае строка не будет полностью выделена.

Что я пробовал до сих пор

  1. Переопределение выделенной строки следующим образом печатает ее [0pt]в ячейке и не работает, хотя это было предложеноздесь.

    \rowcolor[gray]{.9}\cellcolor{white}\cellcolor[gray]{.9}[0pt] g & h & i \\
    
  2. Переопределение выделенной строки таким образом также не работает:

    \rowcolor[gray]{.9}[0pt][0pt] g & \cellcolor[gray]{.9} h & i \\
    

    Средняя ячейка остается выделенной, как будто там было \rowcolor[gray]{.9}[0pt][0pt]определено только…

Есть ли другая возможность обрезать цветные панели, чтобы выровнять их \bottomruleслева и справа?

решение1

Один из способов — зафиксировать ширину столбцов. Я не уверен, что это очень элегантный способ.

\documentclass{scrartcl}
\usepackage{colortbl,booktabs}
\begin{document}

\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}p{#1}}

\begin{table}[h]
\setlength\tabcolsep{0pt}
  \begin{tabular}{C{1em}>{\columncolor[gray]{.9}} C{1em} C{1em}} \toprule
                        a  & b & c \\
                        d & e & f \\
    \rowcolor[gray]{.9} g & h & i \\
    \bottomrule
  \end{tabular}
\end{table}
\end{document}
\end{document}

решение2

\documentclass{scrartcl}

\usepackage{booktabs}
\usepackage[table]{xcolor}

\colorlet{tablerowcolor}{yellow}%\colorlet{tablerowcolor}{gray!10}

\newcommand*{\ct}[1]{\multicolumn{1}{>{\columncolor{tablerowcolor}}c}{#1}}
\newcommand*{\fct}[1]{\multicolumn{1}{>{\columncolor{tablerowcolor}\hspace*{-\tabcolsep}}c}{#1}}
\newcommand*{\lct}[1]{\multicolumn{1}{>{\columncolor{tablerowcolor}}c<{\hspace*{-\tabcolsep}}}{#1}}
\newcommand*{\cfct}[1]{\multicolumn{1}{>{\columncolor{tablerowcolor}[\dimexpr\tabcolsep-\cmidrulekern\relax][\tabcolsep]\hspace*{-\tabcolsep}}c}{#1}}
\newcommand*{\clct}[1]{\multicolumn{1}{>{\columncolor{tablerowcolor}[\tabcolsep][\dimexpr\tabcolsep-\cmidrulekern\relax]}c<{\hspace*{-\tabcolsep}}}{#1}}

\begin{document}

\begin{table}[h]
    \setlength{\aboverulesep}{0pt} % align \bottomrule nicely to coloured cell
    \setlength{\belowrulesep}{0pt} % align \toprule nicely to coloured cell
    \setlength{\extrarowheight}{.75ex} % make up for lost ruleseps

    \begin{tabular}{ @{}r@{} }
        \\
        reference \\
        wrong alignment if overhang \\
        fitted to \texttt{\textbackslash midrule} \\
        fitted to \texttt{\textbackslash cmidrule(lr)} \\
    \end{tabular}
    %
    \begin{tabular}{ @{}*{3}{c}@{} }
        \toprule
        test    & test & test    \\
        \midrule
              a & b    &       c \\
        \ct   a & b    & \ct   c \\
        \midrule
        \fct  a & b    & \lct  c \\
        \cmidrule(lr){1-3}
        \cfct a & b    & \clct c \\
        \bottomrule
    \end{tabular}
\end{table}

\end{document}

Выход

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