colortbl 包中的 rowcolor 命令在列之间的阴影中留下了不必要的间隙

colortbl 包中的 rowcolor 命令在列之间的阴影中留下了不必要的间隙

我想用自定义的灰色突出显示表格的前两行。为此,我想到使用包\rowcolor中的环境colortbl

然而,它的使用似乎在阴影中留下了不必要的间隙,即阴影补丁没有应用于整行。

这里有一个MWE

\documentclass{article}
\usepackage{xcolor}
\definecolor{newgray}{RGB}{196,196,196}
\usepackage{colortbl}
\usepackage{booktabs}
\usepackage{threeparttable}

\begin{document}
\begin{threeparttable}
    \centering
    \begin{tabular*}{\textwidth}{ l @{\extracolsep{\fill}} l c r}
        \multicolumn{4}{c}{\textbf{Random Table}} \\
        \toprule
        \multicolumn{1}{l}{Item} & \multicolumn{1}{l}{Case 1} & \multicolumn{1}{c}{Case 2} & \multicolumn{1}{r}{Case 3}\\
        \midrule

        \rowcolor{newgray}first thing, & \tnote{a}245  & \tnote{b}25e-6  & \tnote{c}79e-6 \\
        \rowcolor{newgray}[20pt][20pt]second thing & \tnote{a}450  & ---             & \tnote{b}24e-6 \\
        third thing                    & \tnote{d}2e-6 & \tnote{c}4123.5 & \tnote{b}2e-6  \\
        fourth thing                   & ---           & 1e6             & no data        \\
        \bottomrule
    \end{tabular*}
    \medskip
    \begin{tablenotes}
    \item[a] some explanation
    \item[b] this is why \dots
    \item[c] see reference awesome
    \item[d] hello world
    \item
    \end{tablenotes}
\end{threeparttable}
\end{document}

输出结果如下

行颜色不是均匀地着色行

以下是需求。首先,我想textwidth使用 来将表格排版为\begin{tabular*}{\textwidth}{ l @{\extracolsep{\fill}} l c r},其次,我需要使用包tablenotes提供的环境来将说明性注释添加到此处threeparttable。出于美观考虑,我使用了booktabs包。

显然,目前实现的阴影效果并不理想。如果在没有任何悬垂指定的情况下使用,该\rowcolor命令会在阴影中留下间隙。虽然使用左右悬垂可以最大限度地减少中间列中的阴影间隙,但它会使阴影超出表格的宽度,这是不理想的。

我如何才能实现预期的行为,即均匀地对行进行着色,没有间隙,并且不超过表格的宽度?

答案1

环境{NiceTabular}和提供{NiceTabular*}nicematrix为单元格、行和列着色的工具,而没有的缺点colortbl

在这里,您直接得到了预期的结果(但您需要多次编译)。

\documentclass{article}
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{threeparttable}
\usepackage{nicematrix}

\begin{document}
\begin{threeparttable}
\centering
\begin{NiceTabular*}{\textwidth}{ l @{\extracolsep{\fill}} l c r}%
  [code-before = \rowcolor[RGB]{196,196,196}{3,4}]
\multicolumn{4}{c}{\textbf{Random Table}} \\
\toprule
\multicolumn{1}{l}{Item} & \multicolumn{1}{l}{Case 1} & \multicolumn{1}{c}{Case 2} & \multicolumn{1}{r}{Case 3}\\
\midrule
first thing, & \tnote{a}245  & \tnote{b}25e-6  & \tnote{c}79e-6 \\
second thing & \tnote{a}450  & ---             & \tnote{b}24e-6 \\
third thing                    & \tnote{d}2e-6 & \tnote{c}4123.5 & \tnote{b}2e-6  \\
fourth thing                   & ---           & 1e6             & no data        \\
\bottomrule
\end{NiceTabular*}
\medskip
\begin{tablenotes}
\item[a] some explanation
\item[b] this is why \dots
\item[c] see reference awesome
\item[d] hello world
\item
\end{tablenotes}
\end{threeparttable}
\end{document}

上述代码的输出

答案2

  • @{\extracolsep{\fill}}在列之间引入未被覆盖的额外空间rowcolor
  • 在第二行你\rowcolor{newgray}[20pt][20pt]应该只有\rowcolor{newgray}
  • 着色行并使用规则booktabs不会给出很好的结果,相反,我建议使用包提供的行boldline
  • 为了在单元格中获得更多垂直空间,我建议使用calspace

在此处输入图片描述

\documentclass{article}
\usepackage[table]{xcolor} % it call and enhance colortbl
\definecolor{newgray}{RGB}{196,196,196}
\usepackage{booktabs, threeparttable}
\usepackage{tabularx}       % new
\usepackage{boldline}       % new (part of shipunov bundle)
\usepackage{cellspace}      % new
\setlength\cellspacetoplimit{4pt}
\setlength\cellspacebottomlimit{4pt}
\addparagraphcolumntypes{X}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}

\begin{document}
\begin{threeparttable}
    \centering
\begin{tabularx}{\textwidth}{ S{>{\hsize=0.4\hsize}L}
                                >{\hsize=0.2\hsize}L
                                >{\hsize=0.2\hsize}C
                                >{\hsize=0.2\hsize}R}
\multicolumn{4}{c}{\textbf{Random Table}}                               \\
    \hlineB{2}
        Item    & Case 1        &   Case 2          &   Case 3          \\
    \hlineB{1.75}
    \rowcolor{newgray}
first thing,    & \tnote{a}245  & \tnote{b}25e-6    & \tnote{c}79e-6    \\
    \rowcolor{newgray}
second thing    & \tnote{a}450  & ---               & \tnote{b}24e-6    \\
third thing     & \tnote{d}2e-6 & \tnote{c}4123.5   & \tnote{b}2e-6     \\
fourth thing    & ---           & 1e6               & no data           \\
    \hlineB{2}
    \end{tabularx}

    \begin{tablenotes}
    \item[a] some explanation
    \item[b] this is why \dots
    \item[c] see reference awesome
    \item[d] hello world
    \item
    \end{tablenotes}
\end{threeparttable}
\end{document}

编辑: 如果您希望使用更简单的解决方案和不太漂亮的表格(其宽度仍然等于文本宽度),请尝试以下操作:

\documentclass{article}
\usepackage[table]{xcolor}  % it call and enhance colortbl
\definecolor{newgray}{RGB}{196,196,196}
\usepackage{booktabs, threeparttable}
\usepackage{tabularx}       % new
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}

\begin{document}
\begin{threeparttable}
    \centering
    \renewcommand\arraystretch{1.2}
\begin{tabularx}{\textwidth}{ L L C R }
\multicolumn{4}{c}{\textbf{Random Table}}                               \\
    \hline
        Item    & Case 1        &   Case 2          &   Case 3          \\
    \hline
    \rowcolor{newgray}
first thing,    & \tnote{a}245  & \tnote{b}25e-6    & \tnote{c}79e-6    \\
    \rowcolor{newgray}
second thing    & \tnote{a}450  & ---               & \tnote{b}24e-6    \\
third thing     & \tnote{d}2e-6 & \tnote{c}4123.5   & \tnote{b}2e-6     \\
fourth thing    & ---           & 1e6               & no data           \\
    \hline
\end{tabularx}

\begin{tablenotes}
\item[a] some explanation
\item[b] this is why \dots
\item[c] see reference awesome
\item[d] hello world
\item
\end{tablenotes}
\end{threeparttable}
\end{document}

笔记:

  • S{X}说明符意味着在选定的X列中添加由以下定义的垂直空间

    \setlength\cellspacetoplimit{4pt}
    \setlength\cellspacebottomlimit{4pt}
    
  • 和改变了列宽之间的比率(第一列的宽度相等,其他三列的宽度也>{\hsize=0.4\hsize}相等)>{\hsize=0.2\hsize}0.4\textwidth0.2\textwidth

  • 第一个解决方案可以通过删除东西来简化cellspace,并且对于单元格内容周围的更多垂直空间,使用更简单的方法\renewcommand\arraystretch{1.2}

    \documentclass{article}
    \usepackage[table]{xcolor} % it call and enhance colortbl
    \definecolor{newgray}{RGB}{196,196,196}
    \usepackage{booktabs, threeparttable}
    \usepackage{tabularx}       % new
    \usepackage{boldline}       % new (part of shipunov bundle)
    \newcolumntype{C}{>{\centering\arraybackslash}X}
    \newcolumntype{L}{>{\raggedright\arraybackslash}X}
    \newcolumntype{R}{>{\raggedleft\arraybackslash}X}
    
    \begin{document}
    \begin{threeparttable}
        \centering
        \renewcommand\arraystretch{1.2}
    \begin{tabularx}{\textwidth}{>{\hsize=0.4\hsize}L
                                 >{\hsize=0.2\hsize}L
                                 >{\hsize=0.2\hsize}C
                                 >{\hsize=0.2\hsize}R}
    
     %% table body and table notes %%
    
    \end{threeparttable}
    \end{document}
    

相关内容