因此,我读到了很多有关单元格颜色和单元格边框的问题。我尝试按如下方式修复它们:
我使用 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 流中的两个不同指令中绘制时,就会出现这种现象(fill
PostScript 运算符实际上是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 中也是如此。