表格:奇数/偶数混合着色

表格:奇数/偶数混合着色

我有一份很大的文档(大约 100 页),里面有很多表格。我使用

\usepackage[table]{xcolor}
\definecolor{lightblue}{rgb}{0.93,0.95,1.0}
\rowcolors{1}{white}{lightblue} % odd = white, even = lightblue

用浅蓝色突出显示偶数行。这个方法效果很好,看起来也很好,符合我的要求。但现在我即将完成这份文档,我注意到有些表格混淆了奇数行和偶数行的颜色。有些表格用浅蓝色显示偶数行,有些则显示奇数行。就像下面的截图一样。

两个表格的屏幕截图

上面截图的最小工作示例:

\documentclass{report}
\usepackage[english]{babel}
\usepackage[table]{xcolor}
 \definecolor{lightblue}{rgb}{0.93,0.95,1.0}
 \rowcolors{1}{white}{lightblue}

\begin{document}
 \begin{table}[htb]
  \centering
  \begin{tabular}{r|r|r|r}
    N & R & C &   T \\ \hline % odd  
    5 & 8 & 5 & 640 \\        % even -- lightblue (OK)
    6 & 8 & 4 & 640 \\        % odd  
    7 & 7 & 7 & 949 \\        % even -- lightblue (OK)
  \end{tabular}
 \end{table}
 \begin{table}[htb]
  \centering
  \begin{tabular}{r|r|r|r}
    N & R & C &   T \\ \hline % odd -- lightblue (wrong)
    8 & 8 & 4 & 444 \\        % even 
    9 & 8 & 4 & 124 \\        % odd -- lightblue (wrong)
   10 & 8 & 4 & 672 \\        % even 
  \end{tabular}
 \end{table}
\end{document}

我不明白,这段代码有什么问题?默认行为应该是第一行始终为白色,第二行始终为浅蓝色(我的 80% 的表格都是这样)。

答案1

原因是行数的计算。该命令在命令开始时就开始计算行数\rowcolors。因此,文档的每一行都会被计算在内。

您可以使用以下代码重置计数器,该代码使用preto提供的命令etoolbox

\usepackage{etoolbox}
\makeatletter
\preto\tabular{\global\rownum=\z@}
\makeatother

除了使用之外,etoolbox您还可以使用以下包xpatch

\usepackage{xpatch}
\makeatletter
\xpreto\tabular{\global\rownum=\z@}
\makeatother

以下是完整的 MWE:

\documentclass{report}
\usepackage[english]{babel}
\usepackage[table]{xcolor}
 \definecolor{lightblue}{rgb}{0.93,0.95,1.0}
 \rowcolors{1}{white}{lightblue}
\usepackage{etoolbox}
\makeatletter
\preto\tabular{\global\rownum=\z@}
\makeatother
\begin{document}
 \begin{table}[htb]
  \centering
  \begin{tabular}{r|r|r|r}
    N & R & C &   T \\ \hline % odd  
    5 & 8 & 5 & 640 \\        % even -- lightblue (OK)
    6 & 8 & 4 & 640 \\        % odd  
    7 & 7 & 7 & 949 \\        % even -- lightblue (OK)
  \end{tabular}
 \end{table}
 \begin{table}[htb]
  \centering
  \begin{tabular}{r|r|r|r}
    N & R & C &   T \\ \hline % odd -- lightblue (wrong)
    8 & 8 & 4 & 444 \\        % even 
    9 & 8 & 4 & 124 \\        % odd -- lightblue (wrong)
   10 & 8 & 4 & 672 \\        % even 
  \end{tabular}
 \end{table}
\end{document}

相关内容