如何实现表格中两行同时交替显示行颜色?因此,两行应具有相同的颜色,然后是另外两行,依此类推。在以下示例中
Bla1 & reference1 \\
& Description1 \\
应该有一种颜色,
Bla2 & reference2 \\
& Description2 \
应该再来一次。然后开始再次交替。如何实现呢?
\documentclass[a4paper]{scrartcl}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[table]{xcolor}
\begin{document}
\section{Section}
\begin{tabular}{lp{10cm}}
\hline
\textbf{Col 1} & \textbf{Col 2} \\ \hline
Bla1 & reference1 \\
& Description1 \\
Bla2 & reference2 \\
& Description2 \\ \hline
\end{tabular}
\end{document}
Gonzalo Medina 的解决方案效果很好,但是如果使用该glossaries
包,缩写表也会有行颜色。我该如何防止缩写表出现这种行为?
答案1
这是一个可能的解决方案;其想法是使用一个辅助计数器来计数行,并且根据该计数器模块 4 的值,将\rownum
(内部用于决定将哪种颜色应用于某一行)设置为 0 或 1;该etoolbox
包用于修补tabular
以将计数器设置row
为 0:
\documentclass[a4paper]{scrartcl}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[table]{xcolor}
\usepackage{array}
\usepackage{pgf}
\usepackage{etoolbox}
\rowcolors{1}{white}{blue!10}
\newcounter{row}
\newcolumntype{L}{%
>{\stepcounter{row}%
\pgfmathtruncatemacro{\j}{int(Mod(\therow,4))}
\ifnum\j<2
\global\rownum=1
\else
\global\rownum=0
\fi}%
l}
\BeforeBeginEnvironment{tabular}{\setcounter{row}{0}}
\begin{document}
\section{Section}
\begin{tabular}{Lp{10cm}}
\rowcolor{blue!10}Bla1 & reference1 \\
& Description1 \\
Bla2 & reference2 \\
& Description2 \\
Bla3 & reference3 \\
& Description3 \\
Bla4 & reference4 \\
& Description4 \\
Bla5 & reference5 \\
& Description5 \\
Bla6 & reference6 \\
& Description6 \\
\end{tabular}
\end{document}
答案2
您可以使用xcolor
package\rowcolors
命令,但只需稍加修改即可更改每隔一行。
\documentclass[a4paper]{scrartcl}
\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[table]{xcolor}
\rowcolors{0}{red}{yellow}
\newcount\xrownum
\makeatletter
\def\@rowc@lors{\noalign{%
\global\advance\xrownum\@ne
\ifodd\xrownum
\global\advance\rownum\@ne
\fi
}\@rowcolors}
\makeatother
\begin{document}
\section{Section}
\begin{tabular}{lp{10cm}}
\hline
\textbf{Col 1} & \textbf{Col 2} \\ \hline
Bla1 &{reference1} \\
Bla1 &{reference1} \\
Bla1 &{reference1} \\
Bla1 &{reference1} \\
Bla1 &{reference1} \\
& Description1 \\
& Description1 \\
Bla2 & {reference2} \\
& Description2 \\ \hline
\end{tabular}
\end{document}
答案3
在 ConTeXt 中,与 Gonzalo 的解决方案相同的想法可以通过以下方式实现:
\definecolor[lightblue][r=0.8,g=0.8,b=1]
\defineconversion[tablecolor][lightblue,lightblue,white,white]
\startsetups doublerow:color
\setupTABLE[row][each]
[background=color,
backgroundcolor={\convertnumber{tablecolor}{\positiverow}}]
\stopsetups
\starttext
\startTABLE[setups={doublerow:color}]
\dorecurse{10}
{\NC One \NC Two \NC Three \NC \NR}
\stopTABLE
\stoptext
答案4
使用nicematrix
。 (2021-08-10 版本 6.0)。
无论您使用哪种 PDF 查看器,都不会在彩色面板中看到细白线。
\usepackage{nicematrix}
\begin{document}
\section{Section}
\begin{NiceTabular}{lp{10cm}}[color-inside]
\rowlistcolors{blue!15,=,white,=}
Bla1 & reference1 \\
& Description1 \\
Bla2 & reference2 \\
& Description2 \\
Bla3 & reference3 \\
& Description3 \\
Bla4 & reference4 \\
& Description4 \\
Bla5 & reference5 \\
& Description5 \\
Bla6 & reference6 \\
& Description6 \\
\end{NiceTabular}
\end{document}
在指令中\rowlistcolors{blue!15,=,white,=}
,符号=
用于指定与列表中前一个颜色相同的颜色。
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。