我已经创建了一个带有表格和单元格颜色的表格,并且您知道会发生什么:单元格颜色与边框重叠。
我发现这个问题通常可以通过 hhline 来解决。为了改变彩色单元格上线条的颜色,我读到使用 arrayrulecolor 很有用。换句话说,为了避免这种情况:
上表由以下 LaTex 代码定义:
\begin{table}[h]
\centering
\setlength\arrayrulewidth{0.8pt}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hhline{-------}
\rowcolor[HTML]{EFEFEF} \cellcolor[HTML]{EFEFEF} & \cellcolor[HTML]{EFEFEF} & \cellcolor[HTML]{EFEFEF} &
\multicolumn{4}{c|}{\cellcolor[HTML]{EFEFEF}\textbf{Acción}} \\
\hhline{~~~----}
\rowcolor[HTML]{EFEFEF} \multirow{-2}{*}{\cellcolor[HTML]{EFEFEF}\textbf{$n_{d}$}} &
\multirow{-2}{*}{\cellcolor[HTML]{EFEFEF}\textbf{$n_{o}$}} &
\multirow{-2}{*}{\cellcolor[HTML]{EFEFEF}\textbf{Estado}} &
\textbf{Avance} &\textbf{Retroceso} &
\textbf{\begin{tabular}[c]{@{}c@{}}Giro\\ Antihorario\end{tabular}} &
\textbf{\begin{tabular}[c]{@{}c@{}}Giro\\ Horario\end{tabular}} \\
\hhline{-------}
\cellcolor[HTML]{FFF1F1} 0 & \cellcolor[HTML]{FFF1F1}\textbf{0} & \cellcolor[HTML]{FFF1F1}\textbf{0} &
\textit{0} & \textit{0} & \textit{0} & \textit{0} \\
\hhline{~------}
\cellcolor[HTML]{FFF1F1} & \cellcolor[HTML]{FFF1F1}\textbf{1} & \cellcolor[HTML]{FFF1F1}\textbf{1} &
\textit{0} & \textit{0} & \textit{0} & \textit{0} \\
\hhline{-------}
\end{tabular}
\end{table}
我尝试使用以下方法来避免白线(但没有成功):
\definecolor{tgray}{HTML}{EFEFEF}
\definecolor{tblack}{HTML}{000000}
[...]
\hhline{>{\arrayrulecolor{tgray}}->{\arrayrulecolor{tgray}}->{\arrayrulecolor{tgray}}->{\arrayrulecolor{tblack}}----}
结果是一整条黑线:
如您所见,我的问题无法通过 arrayrulecolor 解决。您知道如何成功解决吗?
即便如此,如果您知道另一种制作不依赖于 pdf 查看器的表格的方法(使用我在此处展示的解决方案,在某些 ZOOM 级别下某些线条仍然不会出现),这对我来说将非常有利可图。
谢谢。
答案1
以下是如何使用 进行操作hhline
。对于线条的彩色部分,我将您的颜色替换为命名的颜色svgnames
(几乎与您的颜色相同),以获得更短的代码。
\documentclass{article}
\usepackage{array, multirow}
\usepackage[table, svgnames]{xcolor}
\usepackage{hhline}
\newcommand*{\arb}{\arrayrulecolor{black}}
\newcommand*{\argr}{\arrayrulecolor{Gainsboro!50}}
\begin{document}
\begin{table}[h]
\centering
\setlength\arrayrulewidth{0.8pt}
\begin{tabular}{|c|c|c|c|c|c|c|}
\hhline{-------}
\rowcolor{Gainsboro!50} & & &
\multicolumn{4}{c|}{\textbf{Acción}} \\%[HTML]{EFEFEF}r[HTML]{EFEFEF} \cellcolor[HTML]{EFEFEF}
\hhline{|>{\argr}->{\arb}|>{\argr}->{\arb}|>{\argr}->{\arb}|----|}
\rowcolor{Gainsboro!50} \multirow{-2}{*}{\textbf{$n_{d}$}} &
\multirow{-2}{*}{\textbf{$n_{o}$}} &
\multirow{-2}{*}{\textbf{Estado}} &
\textbf{Avance} &\textbf{Retroceso} &
\textbf{\begin{tabular}[c]{@{}c@{}}Giro\\ Antihorario\end{tabular}} &
\textbf{\begin{tabular}[c]{@{}c@{}}Giro\\ Horario\end{tabular}} \\
\hhline{-------}
\cellcolor[HTML]{FFF1F1} 0 & \cellcolor[HTML]{FFF1F1}\textbf{0} & \cellcolor[HTML]{FFF1F1}\textbf{0} &
\textit{0} & \textit{0} & \textit{0} & \textit{0} \\
\hhline{|>{\arrayrulecolor{MistyRose!50}}->{\arb}|------}
\cellcolor[HTML]{FFF1F1} & \cellcolor[HTML]{FFF1F1}\textbf{1} & \cellcolor[HTML]{FFF1F1}\textbf{1} &
\textit{0} & \textit{0} & \textit{0} & \textit{0} \\
\hhline{-------}
\end{tabular}
\end{table}
\end{document}
答案2
我已经编辑了这个答案,因为有了最新版本nicematrix
(5.6),我们不再需要makecell
这里了。
您可以使用 轻松做到这{NiceTabular}
一点nicematrix
。
\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{nicematrix}
\begin{document}
\NiceMatrixOptions{cell-space-top-limit=2pt,cell-space-bottom-limit=1pt}
\begin{NiceTabular}{ccccccc}[hvlines]
\CodeBefore
\rowcolor{Gainsboro!50}{1,2}
\rectanglecolor{MistyRose!50}{3-1}{4-3}
\Body
\Block{2-1}{$n_d$}&\Block{2-1}{$n_0$}& \Block{2-1}{Estado} & \Block{1-4}{Acción} \\
&&& Avance & Retroceso & \Block{}{Giro\\ Antihorario} & \Block{}{Giro\\Horario} \\
\Block{2-1}{0}
& 0 & 0 & 0 & 0 & 0 & 0 \\
& 1 & 1 & 0 & 0 & 0 & 0 \\
\end{NiceTabular}
\end{document}
在 中,您可以水平或垂直地
{NiceTabular}
使用 合并单元格。\Block
\Block
如果您想使用,您也可以只对一个单元格使用\\
。使用密钥
hvlines
,您可以绘制块中不包括的所有规则。您有工具来设置颜色、行、列和单元格。使用这些工具,您不会在某些 PDF 查看器中看到伪影,而有时使用 的工具时,会出现伪影
colortbl
。