![colortbl 包中的 rowcolor 命令在列之间的阴影中留下了不必要的间隙](https://linux22.com/image/376933/colortbl%20%E5%8C%85%E4%B8%AD%E7%9A%84%20rowcolor%20%E5%91%BD%E4%BB%A4%E5%9C%A8%E5%88%97%E4%B9%8B%E9%97%B4%E7%9A%84%E9%98%B4%E5%BD%B1%E4%B8%AD%E7%95%99%E4%B8%8B%E4%BA%86%E4%B8%8D%E5%BF%85%E8%A6%81%E7%9A%84%E9%97%B4%E9%9A%99.png)
我想用自定义的灰色突出显示表格的前两行。为此,我想到使用包\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\textwidth
0.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}