多列覆盖行颜色

多列覆盖行颜色

我正在尝试创建一个具有交替行颜色的表格。使用以下命令可以很好地完成此操作:

\rowcolors{1}{gray!20}{white}

但是,从这里开始就变得有点复杂了。由于我的表格的最后一行需要 6 列,所以我需要使用注释\multicolumn,这会导致所有多列部分不继承 命令指定的颜色\rowcolors

代码示例:

\begin{table}[!ht]
\rowcolors{1}{gray!20}{white}
\begin{tabular}{|p{0.184\linewidth}|p{0.452\linewidth}*{4}{|c}|}\hline
\bf{Item} & \multicolumn{5}{l|}{\bf{Description}}\\ \hline
\bf{Goal} & \multicolumn{5}{l|}{Goal of this}\\ \hline
\bf{Procedure} & \multicolumn{5}{l|}{How to do it}\\ \hline
\bf{Specification} & \multicolumn{5}{l|}{Think of this and that while doing this} \\ \hline
\bf{Comments} & & \bf{Pass} & \bf{Fail} & \bf{Pass} & \bf{Fail}\\ \cline{3-6}
& & $\circ$ & $\circ$ & $\circ$ & $\circ$\\ \hline
\end{tabular}
\end{table}

指定\multicolumn颜色如下:

\multicolumn{5}{>{\columncolor{gray!20}{some text here}}l|}{}

将强制多列颜色,但我需要 从该行的命令{gray!20}继承部分。\rowcolors

答案1

一种方法是修改命令\multicolumn以动态选择行颜色。行颜色保存在两个宏中:

  • \@oddrowcolor- 为了奇怪的
  • \@evenrowcolor- 为了甚至

而计数器则\rownum跟踪当前行号。下面是一个最小工作示例,显示了修改的结果,由新创建的激活\mcinherit

在此处输入图片描述

\documentclass{article}
\usepackage[table]{xcolor}% http://ctan.org/pkg/xcolor
\let\oldmc\multicolumn
\makeatletter
\newcommand{\mcinherit}{% Activate \multicolumn inheritance
  \renewcommand{\multicolumn}[3]{%
    \oldmc{##1}{##2}{\ifodd\rownum \@oddrowcolor\else\@evenrowcolor\fi ##3}%
  }}
\makeatother
\begin{document}
\begin{table}[!ht]
  \rowcolors{1}{gray!20}{white} \mcinherit
  \begin{tabular}{|>{\bfseries}p{0.184\linewidth}|p{0.452\linewidth}*{4}{|c}|}\hline
    Item          & \multicolumn{5}{l|}{\textbf{Description}}\\ \hline
    Goal          & \multicolumn{5}{l|}{Goal of this}\\ \hline
    Procedure     & \multicolumn{5}{l|}{How to do it}\\ \hline
    Specification & \multicolumn{5}{l|}{\cellcolor{green}Think of this and that while doing this} \\ \hline
    Comments      & & \bf{Pass} & \bf{Fail} & \bf{Pass} & \bf{Fail}\\ \cline{3-6}
                  & & $\circ$ & $\circ$ & $\circ$ & $\circ$\\ \hline
  \end{tabular}
\end{table}
\end{document}

我还擅自修改了您的列格式。例如,第 1 列包含仅有的 粗体条目,可以使用列规范进行格式化>{\bfseries}- 这会\bfseries在每个条目之前插入(由array包裹)。

请注意,由于插入了第三个参数,因此重新定义\multicolumn仍然允许您将单元格颜色更改为其他颜色颜色变化。因此,局部变化将覆盖继承的颜色。只需做一点工作,就可以根据您是否使用行颜色来自动继承。但是,目前尚不清楚您的使用程度,因此开关* \mcinherit就足够了。

最后,使用\textbf而不是\bf。有关更多信息,请参阅双字母字体样式命令 (\bf,\it,...) 会在 LaTeX 中复活吗?

*请注意,如果您混合使用一些有色和无色的表格,则应在本地进行重新定义。如果您\mcinherittable环境内部调用,则这是“自动”的。同样,通过一些工作,重新定义可以变得更加方便。

答案2

{NiceTabular}您可以使用轻松创建此表nicematrix

  • 在中{NiceTabular},您可以使用命令垂直和水平合并单元格\Block

  • 该密钥hvlines将绘制所有规则,但块除外。

  • 内置命令\rowcolors将交替地为行着色(就像 一样\rowcolorscolortbl,并且当使用键时respect-blocks,将尊重块。

  • 在所有 PDF 查看器中,所有缩放级别下的结果都将是完美的(规则似乎不会消失)。

但是,您需要多次编译(因为nicematrix使用 PGF/Tikz 节点)。

\documentclass{article}
\usepackage{nicematrix}
\usepackage{xcolor}

\begin{document}
\begin{NiceTabular}{>{\bfseries}p{0.184\linewidth}p{0.452\linewidth}*{4}{c}}[hvlines]
\CodeBefore
  \rowcolors{1}{gray!20}{}[respect-blocks]
\Body
  Item          & \Block[l]{1-5}{\textbf{Description}} \\ 
  Goal          & \Block[l]{1-5}{Goal of this} \\
  Procedure     & \Block[l]{1-5}{How to do it} \\
  Specification & \Block[l]{1-5}{Think of this and that while doing this} \\
  \Block{2-1}{} \RowStyle{\bfseries}
  Comments      & \Block{2-1}{} & Pass    & Fail    & Pass    & Fail    \\
                &               & $\circ$ & $\circ$ & $\circ$ & $\circ$ \\ 
\end{NiceTabular}

\end{document}

上述代码的输出

相关内容