摘要:我能否得到一个表格,其列较窄(约 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 节点)。