重新审视 hhline 和单元格颜色问题

重新审视 hhline 和单元格颜色问题

因此,我读到了很多有关单元格颜色和单元格边框的问题。我尝试按如下方式修复它们:

我使用 hhline 来打印水平单元格边框。

如果我位于多行单元格的中间,我会使用与单元格相同的颜色打印 hhline。这样可以避免中间出现白线。

但是,我的多行单元格中间仍然有浅色线条。它们不是白色,但比单元格颜色浅。

这是一个 MWE。

\documentclass[]{article}


\usepackage{array}
\usepackage{tabularx}
\usepackage{siunitx}
\usepackage[table]{xcolor}
\usepackage{multirow}
\usepackage{hhline}

\begin{document}


This looks bad:
\begin{tabularx}{1\textwidth}{m{0.333\textwidth} m{0.333\textwidth} m{0.333\textwidth} }

\hhline{---}
\multicolumn{1}{|c|}{\cellcolor[RGB]{255, 255, 0} a cell} &
\multicolumn{1}{c|}{\cellcolor[RGB]{255, 192, 203} middle} &
\multicolumn{1}{c|}{right cell} \tabularnewline

\hhline{|-|-|-|}

\multicolumn{1}{|c|}{\cellcolor[RGB]{255, 255, 0} a cell} &
\multicolumn{2}{c|}{\cellcolor[RGB]{255, 165, 0} } \tabularnewline

\hhline{|-|>{\arrayrulecolor[RGB]{255, 165, 0}}-->{\arrayrulecolor{black}}|}

\multicolumn{1}{|c|}{\cellcolor[RGB]{255, 255, 0} a cell} &
\multicolumn{2}{c|}{\multirow{-2}{*}{\cellcolor[RGB]{255, 165, 0} multirow cell with pale line through the middle}} \tabularnewline

\hhline{|-|--|}

\end{tabularx}


\end{document}

这只是我的特定 PDF 查看器的问题吗?有简单的解决方法吗?

答案1

当两个有颜色的表面完全接触时,就会出现这种线条。消除它们的唯一方法是确保表面稍微重叠,在间隙上涂漆,或者只有一个表面:

\documentclass[]{article}
\usepackage[table]{xcolor}
\usepackage{tikz}

\begin{document}

{\color{red}\rule{1cm}{1cm}\rule{1cm}{1cm}}

{\color{red}\rule{1cm}{1cm}\hspace{-0.1pt}\rule{1cm}{1cm}}    

{\color{red}\rule{1cm}{1cm}\rule{1cm}{1cm}\tikz[overlay]\draw(-1,0)--++(0,1);}

{\color{red}\rule{2cm}{1cm}}

\end{document}

在此处输入图片描述

我认为使用 \hhline 没什么用,因为这样线条和彩色单元格之间就会有间隙。但你可以将第二行稍微向上移动一点:

\documentclass[]{article}
\usepackage{array}
\usepackage{tabularx}
\usepackage{siunitx}
\usepackage[table]{xcolor}
\usepackage{multirow}
\usepackage{hhline,tikz}

\begin{document}


\begin{tabularx}{1\textwidth}{m{0.333\textwidth} m{0.333\textwidth} m{0.333\textwidth} }

\hhline{---}
\multicolumn{1}{|c|}{\cellcolor[RGB]{255, 255, 0} a cell} &
\multicolumn{1}{c|}{\cellcolor[RGB]{255, 192, 203} middle} &
\multicolumn{1}{c|}{right cell} \tabularnewline

\hhline{|-|-|-|}

\multicolumn{1}{|c|}{\cellcolor[RGB]{255, 255, 0} a cell} &
\multicolumn{2}{c|}{\cellcolor[RGB]{255, 165, 0} } 
\tabularnewline[-0.5pt] % a a bit up.

\multicolumn{1}{|c|}{\cellcolor[RGB]{255, 255, 0} a cell} &
\multicolumn{2}{c|}{\multirow{-2}{*}{\cellcolor[RGB]{255, 165, 0}multirow cell with pale line through the middle}} \tabularnewline

\hhline{|-|--|}

\end{tabularx}


\end{document}

在此处输入图片描述

答案2

某些 PDF 查看器(例如使用 MuPDF 的 SumatraPDF)会在两个相邻的同色矩形之间绘制一条细白线。当矩形fill在 PDF 流中的两个不同指令中绘制时,就会出现这种现象(fillPostScript 运算符实际上是f在 PDF 流中用 编码的)。如果矩形由同一条指令绘制fill,则不会显示细白线。

该软件包nicematrix提供了避免该问题的工具(以及与表格中规则显示相关的其他工具)。

考虑以下代码:

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{ccc}
\CodeBefore
  \rowcolor{red!15}{1,2,3}
\Body
A & B & C \\
A & B & C \\
A & B & C \\
A & B & C \\
\end{NiceTabular}

\end{document}

在生成的 PDF(流解压缩后)中,我们有以下代码:

0.0 26.40134 57.58482 -11.95532 re  
0.0 14.44601 57.58482 -11.95532 re  
0.0  2.49069 57.58482 -11.95532 re  
f

每个运算符re(对于rectangle)都会向当前路径添加一个矩形,但只有一个运算符f(对于fill)可以填充完整路径。

PDF 查看器中不会出现细白线,即使在 SumatraPDF 中也是如此。

上述代码的输出

相关内容