当创建高度规则的表格时,我非常喜欢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}}}