我正在尝试创建一个具有交替行颜色的表格。使用以下命令可以很好地完成此操作:
\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 中复活吗?
*请注意,如果您混合使用一些有色和无色的表格,则应在本地进行重新定义。如果您\mcinherit
从table
环境内部调用,则这是“自动”的。同样,通过一些工作,重新定义可以变得更加方便。
答案2
{NiceTabular}
您可以使用轻松创建此表nicematrix
。
在中
{NiceTabular}
,您可以使用命令垂直和水平合并单元格\Block
。该密钥
hvlines
将绘制所有规则,但块除外。内置命令
\rowcolors
将交替地为行着色(就像 一样\rowcolors
)colortbl
,并且当使用键时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}