Cellcolor 在表格中创建了过宽的彩色区域,且没有内部单元格边距

Cellcolor 在表格中创建了过宽的彩色区域,且没有内部单元格边距

摘要:我能否得到一个表格,其列较窄(约 5 毫米),一些单元格中有正常大小的大写字母,并且一些单元格有颜色(用图案填充也可以)?

完整问题:

我正在尝试创建一个表格,表格的列非常窄(5 毫米),其中有些单元格是灰色的。有些单元格(但绝不是灰色单元格,如果这很重要的话)将包含一个大写字母。为了保持列窄且字母保持默认字体,我将每列定义为 @{} m{5mm} @{},从而消除了列分隔。这种方法效果很好;结合使用小的 \vspace,我可以让字母垂直居中,使用 \centering{} 也可以水平居中。

问题是,当我尝试使用 \cellcolor 填充单个单元格时,颜色实际上延伸到单元格边框的两侧。命令 \columncolor 有一个悬垂选项,但据我所知,\cellcolor 没有这个选项。有办法解决这个问题吗?

我迄今为止的代码:

\documentclass{article}
\usepackage[table]{xcolor} 
\begin{document}

\begin{tabular}{| @{} m{5mm} @{} | @{} m{5mm} @{} | @{} m{5mm} @{} |@{} m{0pt} @{} }
  \hline
  & \vspace{.75mm}\centering{E} & \vspace{.75mm}\centering{C} &\\
  \hline 
  \vspace{0.75mm}
  \centering{P} & \cellcolor{gray!50} & &\\
  \hline 
  \vspace{0.75mm}
  \centering{M} & & &\\
  \hline 
\end{tabular}

\end{document}

示例注释:

1) 最右边的 0 毫米列之所以存在,是因为最右边的列由于某种原因无法包含 \centering。如果有更好的解决方案,我愿意倾听。

2) \vspace{0.75mm} 只是为了使单元格变成正方形(或非常接近正方形)。

可能的解决方法:我曾考虑过不使用 \cellcolor,而是在每个单元格中插入一张拉伸到正确尺寸的灰色图片。除了在图片下方、\hline 之前创建一个小的白色间隙外,这种方法是可行的。我可以使用 \[-1.3 mm] 向上移动行,但如果我在最后一行这样做,每列之间的垂直线就会突出到底部。两种解决方案都可以,我早就放弃了优雅代码的想法……

答案1

这是一个解决方案,并对您的代码进行了一些简化。但您真的需要为 设定0pt\tabcolsep吗?

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

\begin{document}

{\setlength{\tabcolsep}{0pt}%
\begin{tabular}{| >{\centering}m{5mm} | >{\centering} m{5mm} | >{\centering\arraybackslash}m{5mm} |}
  \hline
  & \vspace{.75mm}E & \vspace{.75mm} C \\
  \hline
  \vspace{0.75mm}
   P & \cellcolor{gray!50} & \\
  \hline
  \vspace{0.75mm} M & & \\
  \hline
\end{tabular}}% 

\end{document}

在此处输入图片描述

答案2

通过{NiceTabular}nicematrix自己的表格着色系统,您可以直接获得预期的输出。

\documentclass{article}
\usepackage{nicematrix}
\begin{document}

\begin{NiceTabular}{| @{} m{5mm} @{} | @{} m{5mm} @{} | @{} m{5mm} @{} |@{} m{0pt} @{} }[colortbl-like]
  \hline
  & \vspace{.75mm}\centering E & \vspace{.75mm}\centering C &\\
  \hline 
  \vspace{0.75mm}
  \centering P & \cellcolor{gray!50} & &\\
  \hline 
  \vspace{0.75mm}
  \centering M & & &\\
  \hline 
\end{NiceTabular}

\end{document}

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

上述代码的输出

相关内容