我有一份很大的文档(大约 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}