\cellcolor 删除 \hline

\cellcolor 删除 \hline

我有一张表格,其中的一些单元格被填充为灰色。效果很好。但问题是,表格的水平线也变成了灰色。我该如何解决这个问题,让线条保持为黑线,单元格颜色为灰色?

我的问题图片: 在此处输入图片描述

完整的代码示例可以在网上找到这里或者在此代码中:

\documentclass{article}
\usepackage{slashbox,pict2e}
\usepackage{color, colortbl}
\usepackage{amssymb}

\definecolor{Gray}{gray}{0.9}

\begin{document}

\begin{table}
\centering
\begin{tabular}{|l|c|c|c|}
    \hline\backslashbox{Enhed}{Interface} & ED    & DDG   & \textit{Server} \\
    \hline  ED      & \checkmark        & \checkmark        & {\cellcolor{Gray}} \\
    \hline DDG     & \checkmark        & {\cellcolor{Gray}}  & \checkmark \\
    \hline \textit{Server}  & {\cellcolor{Gray}}  & \checkmark        & {\cellcolor{Gray}}\\\hline
\end{tabular}
\caption{Oversigt over interfaces mellem enhederne.}
\label{tab:interfacesMellemEnheder}
\end{table}
\end{document}

答案1

正如您在评论中看到的,tex 代码从来没有问题。唯一的问题是 pdf 查看器。放大时线条再次可见。打印页面时这不会成为问题。

答案2

(≥ 4.0 2020-05-08)环境{NiceTabular}为该nicematrix问题提供了解决方案。

colortbl,一个\hline,并且如果下一行有一个彩色单元格,则绘制彩色矩形水平规则。即使规则和彩色矩形的位置在数学上是精确的,几乎所有 PDF 查看器都会优先考虑彩色矩形(在 PDF 中明确绘制在后面):他们认为,在较低的缩放级别下,之前绘制的规则只是细节上不太重要(这就是为什么很难说这是查看器的“问题”)。

nicematrix,这个问题就解决了,因为所有的规则都是彩色矩形(行、列、单元格等)。

此外,还nicematrix提供了一个命令\diagbox和一个键hvlines来绘制所有规则。

\documentclass{article}
\usepackage{xcolor}
\usepackage{amssymb}
\usepackage{nicematrix}

\begin{document}

\begin{table}
\centering
\begin{NiceTabular}{wl{2.2cm}ccc}[hvlines]
\CodeBefore
  \cellcolor{lightgray}{2-4,3-3,4-2,4-4}
\Body
\rule[-3mm]{0pt}{9mm}
\diagbox{Enhed}{Interface} & ED    & DDG   & \textit{Server}  \\
  ED                       & \checkmark    & \checkmark     &  \\
 DDG                       & \checkmark    &                & \checkmark \\
 \textit{Server}           &               & \checkmark     & \\
\end{NiceTabular}
\caption{Oversigt over interfaces mellem enhederne.}
\label{tab:interfacesMellemEnheder}
\end{table}
\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的结果

答案3

抱歉,评论太长了。应 FireFly3000 的要求,下面是一个booktabs只有几条规则的示例:

平均能量损失

在这种类型的表中 diagbox没有实用程序,因此您可以将“Interface”放在前一行的多列中,并在单元格中只留下“Enhed”,或者如果您希望此标签垂直居中,请使用包multirow

\documentclass{article}
\usepackage{colortbl, booktabs}
\usepackage{multirow}
\usepackage{amssymb}
\definecolor{Gray}{gray}{0.9}
\begin{document}
\begin{table}
\centering
\begin{tabular}{lccc}
\toprule
\multirow{2}{*}{Enhed} & \multicolumn{3}{c}{Interface} \\
\cmidrule{2-4}
            & ED                &  DDG             & \textit{Server} \\
\midrule
ED               & \checkmark        & \checkmark       & \cellcolor{Gray} \\
DDG              & \checkmark        & \cellcolor{Gray} & \checkmark       \\
\textit{Server}  & \cellcolor{Gray}  & \checkmark       & \cellcolor{Gray} \\
\bottomrule
\end{tabular}

\caption{Oversigt over interfaces mellem enhederne.}
\label{tab:interfacesMellemEnheder}
\end{table}
\end{document}

答案4

一个简单的解决方案就是增加表格线宽。这样 PDF 查看器就不会再出现此问题了。

\setlength\arrayrulewidth{1pt} %Increasing linewidth \begin{table} (...) \end{table} \setlength\arrayrulewidth{0.4pt} %Back to default

相关内容