Search code examples
latex

Alternating row colors in tabular(*|x)?


I’m trying to create a table in my document that resembles more or less the table in the picture below:

Example table with alternate row coloring

This table is supposed to be stretched horizontally to \textwidth. My first attempt with tabular* looked like this:

\documentclass{scrartcl}
\usepackage[table]{xcolor}
\definecolor{tableShade}{gray}{0.9}

\begin{document}
  \rowcolors{3}{tableShade}{white}  %% start alternating shades from 3rd row
  \noindent\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}lrrr}
    Something & foo & bar & baz \\
    Something & foo & bar & baz \\
    Something & foo & bar & baz \\
    Something & foo & bar & baz \\
    Something & foo & bar & baz \\
  \end{tabular*}
\end{document}

The result was:

Example table with tabular*

Well, the alternate row coloring works but tabular* inserts space between columns to stretch the whole table to \textwidth. Browsing through my LaTeX companion I found that tabularx should be able to do what I want. So I changed my code to look like that:

\documentclass{scrartcl}
\usepackage[table]{xcolor}
\usepackage{tabularx}
\definecolor{tableShade}{gray}{0.9}

\begin{document}
  \rowcolors{3}{tableShade}{white}  %% start alternating shades from 3rd row
  \noindent\begin{tabularx}{\textwidth}{Xrrr}
    Something & foo & bar & baz \\
    Something & foo & bar & baz \\
    Something & foo & bar & baz \\
    Something & foo & bar & baz \\
    Something & foo & bar & baz \\
  \end{tabularx}
\end{document}

Now, this looks more like it. But tabularx ignores the starting row for the coloring and starts with the first row.

Example table with tabularx

Now I’ve run out of ideas. Any suggestions?


Solution

  • Luckily, such things are no longer a problem with the tabularray package:

    \documentclass{scrartcl}
    
    \usepackage{xcolor}
    \usepackage{tabularray}
    
    \begin{document}
    
    \noindent%
    \begin{tblr}{
      colspec={XXXX},
      row{odd}={bg=lightgray},  
      row{1}={bg=black,fg=white},
    }
      Something & foo & bar & baz \\
      Something & foo & bar & baz \\
      Something & foo & bar & baz \\
      Something & foo & bar & baz \\
      Something & foo & bar & baz \\
    \end{tblr}  
      
    \end{document}
    

    enter image description here