当同时使用 \multicolumn 时,\cellcolor 范围略有偏差

当同时使用 \multicolumn 时,\cellcolor 范围略有偏差

我正在尝试对可能包含数字或符号的大矩阵的单元格进行颜色编码。(末尾为 MWE。)数字应该在单元格内齐平,但符号应该居中。通常的做法是使用\multicolumn。我发现这会导致绘制的彩色框\cellcolor向左延伸的程度不如应有的程度——有时如此。下面屏幕截图的“左侧错误”部分显示了这个问题;仔细查看红色箭头指向的位置。

我尝试使用一些\hfillhack来解决这个问题\multicolumn,但效果更糟;现在彩色框始终不会一直延伸到正确的。下面屏幕截图的“右侧错误”部分显示了这个问题;没有红色箭头,因为它一点也不微妙。

如何让单元格背景框始终保持相同的大小?

注 1:我真正想要的是所有数据单元格的宽度完全相同,无论其内容如何。

注 2:真正的表格(MWE 从中删减而来)是机器生成的,所以我不关心标记有多丑陋。

注 3:本 MWE 中的“符号”为<1

MWE 的屏幕截图,显示了背景框尺寸错误的两种不同方式

\documentclass{article}
\usepackage[table]{xcolor}
\setlength{\tabcolsep}{1pt}
\begin{document}

\section*{Wrong on the left}

\begin{tabular}{l@{\hspace{6pt}}r@{\hspace{6pt}}rrr}
& (size) & aaa & bbb & ccc \\
Aaaa aaaa & $5\,130$ &\multicolumn{1}{c}{\cellcolor{blue!75}$1$} &\multicolumn{1}{c}{\cellcolor{blue!10}\color{black!50}$<$} &\cellcolor{blue!26}$.01$ \\
Bbbb bbbb & $7\,402$ &\multicolumn{1}{c}{\cellcolor{blue!10}\color{black!50}$<$} &\multicolumn{1}{c}{\cellcolor{blue!75}$1$} &\cellcolor{blue!33}$.08$ \\
Cccc cccc & $1\,336$ &\cellcolor{blue!26}$.01$ &\cellcolor{blue!33}$.08$ &\multicolumn{1}{c}{\cellcolor{blue!75}$1$} \\
\end{tabular}

\section*{Wrong on the right}

\begin{tabular}{l@{\hspace{6pt}}r@{\hspace{6pt}}rrr}
& (size) & aaa & bbb & ccc \\
Aaaa aaaa & $5\,130$ &\cellcolor{blue!75}$1$\hfill\hbox{} &\cellcolor{blue!10}\color{black!50}$<$\hfill\hbox{} &\cellcolor{blue!26}$.01$ \\
Bbbb bbbb & $7\,402$ &\cellcolor{blue!10}\color{black!50}$<$\hfill\hbox{} &\cellcolor{blue!75}$1$\hfill\hbox{} &\cellcolor{blue!33}$.08$ \\
Cccc cccc & $1\,336$ &\cellcolor{blue!26}$.01$ &\cellcolor{blue!33}$.08$ &\cellcolor{blue!75}$1$\hfill\hbox{} \\
\end{tabular}

\end{document}

答案1

获取右侧边界\cellcolor是一个常见问题。它无法适应不同的列分隔符,因此会将@{\hspace{6pt}}其抛出。一种解决方法是将水平空间附加到前一列,而不是修改列分隔符(在表格规范中使用<而不是@)。

至于使所有数据单元的大小相同,我建议定义一个新的列类型,R以设置所有数据列的宽度(请参阅这个答案)。

\documentclass{article}
\usepackage[table]{xcolor}
\setlength{\tabcolsep}{1pt}
\newcolumntype{R}{>{\raggedleft\arraybackslash}p{0.25in}}
\begin{document}

\section*{Correct on both}

\begin{tabular}{l@{\hspace{6pt}}r<{\hspace{6pt}}RRR}
& (size) & aaa & bbb & ccc \\
Aaaa aaaa & $5\,130$ &\multicolumn{1}{c}{\cellcolor{blue!75}$1$} &\multicolumn{1}{c}{\cellcolor{blue!10}\color{black!50}$<$} &\cellcolor{blue!26}$.01$ \\
Bbbb bbbb & $7\,402$ &\multicolumn{1}{c}{\cellcolor{blue!10}\color{black!50}$<$} &\multicolumn{1}{c}{\cellcolor{blue!75}$1$} &\cellcolor{blue!33}$.08$ \\
Cccc cccc & $1\,336$ &\cellcolor{blue!26}$.01$ &\cellcolor{blue!33}$.08$ &\multicolumn{1}{c}{\cellcolor{blue!75}$1$} \\
\end{tabular}

\end{document}

均正确

答案2

该软件包中nicematrix有专门用于解决此类问题的工具。

在您的第一个 MWE 的代码中,我已经加载nicematrix{tabular}{NiceTabular}密钥color-inside(别名colortbl-like:) 替换了。

输出直接符合预期(因为,使用nicematrix,彩色面板是用 PGF/Tikz 绘制的,而不是用 的机制绘制的colortbl)。

\documentclass{article}
\usepackage{xcolor}
\setlength{\tabcolsep}{1pt}

\usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{l@{\hspace{6pt}}r@{\hspace{6pt}}rrr}[color-inside]
& (size) & aaa & bbb & ccc \\
Aaaa aaaa & $5\,130$ &\multicolumn{1}{c}{\cellcolor{blue!75}$1$} &\multicolumn{1}{c}{\cellcolor{blue!10}\color{black!50}$<$} &\cellcolor{blue!26}$.01$ \\
Bbbb bbbb & $7\,402$ &\multicolumn{1}{c}{\cellcolor{blue!10}\color{black!50}$<$} &\multicolumn{1}{c}{\cellcolor{blue!75}$1$} &\cellcolor{blue!33}$.08$ \\
Cccc cccc & $1\,336$ &\cellcolor{blue!26}$.01$ &\cellcolor{blue!33}$.08$ &\multicolumn{1}{c}{\cellcolor{blue!75}$1$} \\
\end{NiceTabular}

\end{document}

上述代码的输出

此外,如果有几个相邻的单元格具有完全相同的颜色,则无论您使用哪种 PDF 查看器,都不会看到单元格之间的细白线。

相关内容