>{\kern-\tabcolsep} 在 p 列中不起作用

>{\kern-\tabcolsep} 在 p 列中不起作用

如果为表格中的某一行着色,@{}则不会删除侧边栏的颜色,如下图所示。

在此处输入图片描述

要去除颜色,您可以使用 将字距调整到表格列中>{\kern-\tabcolsep},如下图所示:

在此处输入图片描述

但是,如果您要调整字距的列是 -column,则此方法不起作用p。相反,单元格内容不再与下一个单元格对齐,如下所示:

在此处输入图片描述

为什么?是否可以\kern以某种方式使用(我知道设置\tabcolsep为零可能会产生相同的效果,但这样做会产生一些副作用)?

梅威瑟:

\documentclass[table]{article}
\usepackage{lmodern, microtype, xcolor}

\begin{document}

\begin{tabular}{@{}lcr@{}}

\rowcolor{lightgray}test&test&test\\\hline
test&test&test\\
\rowcolor{lightgray}test&test&test\\

\end{tabular}
\vspace{1cm}

\begin{tabular}{>{\kern-\tabcolsep}lcr<{\kern-\tabcolsep}}

\rowcolor{lightgray}test&test&test\\\hline
test&test&test\\
\rowcolor{lightgray}test&test&test\\
\end{tabular}

\vspace{1cm}

\begin{tabular}{>{\kern-\tabcolsep}p{1cm}cr<{\kern-\tabcolsep}}

\rowcolor{lightgray}test&test&test\\\hline
test&test&test\\
\rowcolor{lightgray}test&test&test\\
\end{tabular}

\end{document}

答案1

对于固定宽度的列,您可以添加\leavevmode或使用\hskip

\documentclass[table]{article}
\usepackage{lmodern, microtype, xcolor}

\begin{document}

\begin{tabular}{@{}lcr@{}}

\rowcolor{lightgray}test&test&test\\\hline
test&test&test\\
\rowcolor{lightgray}test&test&test\\

\end{tabular}
\vspace{1cm}

\begin{tabular}{>{\kern-\tabcolsep}lcr<{\kern-\tabcolsep}}

\rowcolor{lightgray}test&test&test\\\hline
test&test&test\\
\rowcolor{lightgray}test&test&test\\
\end{tabular}

\vspace{1cm}

\begin{tabular}{>{\leavevmode\kern-\tabcolsep}p{1cm}cr<{\kern-\tabcolsep}}

\rowcolor{lightgray}test&test&test\\\hline
test&test&test\\
\rowcolor{lightgray}test&test&test\\
\end{tabular}

\vspace{1cm}

\begin{tabular}{>{\hskip-\tabcolsep}p{1cm}cr<{\kern-\tabcolsep}}

\rowcolor{lightgray}test&test&test\\\hline
test&test&test\\
\rowcolor{lightgray}test&test&test\\
\end{tabular}

\end{document} 

在此处输入图片描述

添加:如果您有一个固定宽度的列,如果单元格有多行,则只有第一行具有负字距。一种解决方法是将单元格内容包含在一个\parbox[t]{\hsize}(可选的是由 @Sveinung 建议的 - 谢谢!)。如果您使用环境[t],这也适用于列类型。Xtabularx

对于L, R, C, J中的列类型tabulary,似乎您还必须为最后一列添加\leavevmode(或使用\hskip),即使它不是固定宽度的列。

相关内容