使用没有列间距的 \cellcolor 时颜色会超出范围

使用没有列间距的 \cellcolor 时颜色会超出范围

当创建高度规则的表格时,我非常喜欢C下面显示的自定义列类型,它可以接受宽度并使内容居中,而不必担心列间空间会弄乱所有内容。

现在,当尝试为这样的单元格着色时,会出现许多奇怪的事情:

太多了!

我怎样才能摆脱虚假的过冲?

\documentclass{article}
\usepackage{colortbl}
\newcolumntype{C}[1]{@{}>{\centering\arraybackslash}p{#1}@{}}
\begin{document}
\begin{tabular}{|C{2em}|C{2em}|}
\hline
a & \cellcolor{red}b \\\hline
c & d \\\hline
\end{tabular}
\end{document}

答案1

您可以使用来代替@{}以避免列类型中的分隔空间(或者另外,如果您想保留它)\setlength{\tabcolsep}{0pt}。这消除了颜色溢出。由于这是一个全局选项,因此您必须将表放在另一个环境中,以避免对其他表产生副作用。

% from question
\newcolumntype{C}[1]{@{}>{\centering\arraybackslash}p{#1}@{}}
\begin{tabular}{|C{2em}|C{2em}|}
\hline
a & {\cellcolor{red}}b \\ \hline
c & d \\ \hline
\end{tabular}

% implemented answer
{
  \setlength{\tabcolsep}{0pt}
  \newcolumntype{C}[1]{@{}>{\centering\arraybackslash}p{#1}@{}}
  \begin{tabular}{|C{2em}|C{2em}|}
  \hline
  a & {\cellcolor{red}}b \\ \hline
  c & d \\ \hline
  \end{tabular}
}

在此处输入图片描述

答案2

好的,您必须将colortbl列的悬垂设置为0pt符合@{}规范。作为副作用,这将使所有C单元格具有不透明的白色背景:

\newcolumntype{C}[1]{@{}>{\columncolor{white}[0pt]\centering\arraybackslash}p{#1}@{}}

正确着色

或者如果您想使用非零列间距:

\newcolumntype{C}[1]{@{\hspace{10pt}}>{\columncolor{white}[10pt]\centering\arraybackslash}p{#1}@{\hspace{10pt}}}

带间距着色

相关内容