如何根据宽度对列标题进行着色 makecell

如何根据宽度对列标题进行着色 makecell

在我回答问题时如何使用 tcolorbox 内的 longtable 在每一页上重复第一个表格行?

我建议(和其他人一样)使用 makecell 包来定义表头,后来我发现第一行的颜色与预期不符。它没有覆盖所有行。然后我尝试使用构造来纠正这个问题,当你使用(上述问题的简化 MWE)cellcolor时应该可以正确完成:multicolumn

\documentclass[12pt]{article}
    \usepackage[utf8]{inputenc}

    \usepackage[table]{xcolor}
    \usepackage{longtable}
    \usepackage{makecell}
\renewcommand\theadfont{\bfseries}

\usepackage[active,tightpage]{preview}
\PreviewEnvironment{longtable}%
    \setlength\PreviewBorder{1em}

    \begin{document}
\begin{longtable}{|*{9}{b{\dimexpr 0.11\linewidth-2\tabcolsep}|}}
    \hline
    \multicolumn{8}{|c|}{\cellcolor{gray!30}{\thead{head\\ 1}}}
    & \cellcolor{gray!30}{\thead{head\\ 2}}   \\    \hline
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\
    \hline\hline
\endfirsthead
    \hline
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\
    \hline\hline
\endhead
A & B & C & D & E & F & G & H & I  \\
J & K & L & M & N & O & P & Q & R  \\
S & T & U & V & W & X & Y & Z &    \\
    \hline\hline
\end{longtable}
    \end{document}

并发现头部multicolumn没有足够的宽度,因此头部背景颜色不能填满整个单元格。

在此处输入图片描述

我查看了makecell文档,但没有找到有关如何拉伸实际头部以覆盖整个单元格的有用信息。如何实现整个多列单元格背景都着色?

附录: 对于这种特殊情况,可以按照以下方式进行\thead整体拉伸:而不是\multicolumn

\multicolumn{8}{|c|}{\thead{\hfill head\hfill\\ 1}}

多列单元格应定义为

\multicolumn{8}{|p{\dimexpr 0.88\linewidth-\tabcolsep}|}{\thead{\hfill head\hfill\\ 1}}

其中\dimexpr 0.88\linewidth-\tabcolsep是多列单元格的宽度。结果为:

在此处输入图片描述

不过,下面的答案给出了一般的解决方案。

答案1

如果你把在 中\thead,它就会起作用(有点多余……):\multicolumn{|c|}\colorbox

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}

\usepackage{xcolor}%[table]
\usepackage{array, colortbl}
\usepackage{longtable, ltablex}
\usepackage{makecell}
\renewcommand\theadfont{\bfseries}

\usepackage[active,tightpage]{preview}
\PreviewEnvironment{longtable}%
\setlength\PreviewBorder{1em}

\begin{document}

\begin{longtable}{|*{9}{b{\dimexpr 0.11\linewidth-2\tabcolsep}|}}%
  \hline
  \rowcolor{gray!30}\multicolumn{8}{|c|}{{\colorbox{gray!30}{\thead{head\\ 1}}}}
  & \thead{head\\ 2} \\ \hline
  1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\
  \hline\hline
  \endfirsthead
  \hline
  1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\
  \hline\hline
  \endhead
  A & B & C & D & E & F & G & H & I \\
  J & K & L & M & N & O & P & Q & R \\
  S & T & U & V & W & X & Y & Z & \\
  \hline\hline
\end{longtable}

\end{document} 

在此处输入图片描述

答案2

我不认为这makecell与 完全兼容colortbl。但是,您可以轻松模拟\thead

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}

\usepackage[table]{xcolor}
\usepackage{longtable}
\newcommand{\thead}[1]{%
  \bfseries
  \begin{tabular}{@{}c@{}}
  \vrule height 1.2\ht\strutbox width 0pt\ignorespaces
  #1
  \unskip\vrule depth 1.2\dp\strutbox width 0pt
  \end{tabular}%
}

\begin{document}

\begin{longtable}{|*{9}{b{\dimexpr 0.11\linewidth-2\tabcolsep-\arrayrulewidth}|}}
\hline
\multicolumn{8}{|c|}{\cellcolor{gray!30}{\thead{head\\ 1}}}
    & \cellcolor{gray!30}{\thead{head\\ 2}}   \\
\hline
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\
\hline
\endfirsthead
\hline
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 \\
\hline
\endhead
A & B & C & D & E & F & G & H & I  \\
J & K & L & M & N & O & P & Q & R  \\
S & T & U & V & W & X & Y & Z &    \\
\hline
\end{longtable}

\end{document}

在此处输入图片描述

这是一个简单的例子:

\documentclass[12pt]{article}

\usepackage[table]{xcolor}
\usepackage{makecell}
\renewcommand{\theadfont}{\bfseries}

\begin{document}

\begin{tabular}{|c|c|c|}
\hline
\multicolumn{2}{|c|}{\cellcolor{gray!30}\thead{head\\1}} & \thead{head\\2} \\
\hline
111 & 222 & 333 \\
\hline
\end{tabular}

\end{document}

在此处输入图片描述

使用\rowcolor并不能解决问题。

相关内容