在表格中一次交替两行颜色

在表格中一次交替两行颜色

如何实现表格中两行同时交替显示行颜色?因此,两行应具有相同的颜色,然后是另外两行,依此类推。在以下示例中

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

您可以使用xcolorpackage\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 节点)。

上述代码的输出

相关内容