Definir su propio \rowfont (sin usar tabú)

Definir su propio \rowfont (sin usar tabú)

Dado que el futuro tabuno es tan seguro, estoy intentando definir una \rowfontmacro propia. Esto es lo que tengo hasta ahora:

\documentclass{article}

\usepackage{array,tabularx}
\usepackage[table]{xcolor}
\usepackage{xparse,etoolbox}

\ExplSyntaxOn\makeatletter

\int_new:N \l_@@_last_rownum_int

\cs_new_nopar:Npn \@@_current_rowfont: { }

\NewDocumentCommand { \rowfont } { m } {
   \cs_gset_nopar:Npn \@@_current_rowfont: { #1 }
   #1
}

\newcolumntype { L } {
   >{
      \int_compare:nNnTF { \int_use:N \l_@@_last_rownum_int } = { \number \rownum } {
         \@@_current_rowfont:
      } {
         \cs_gset_nopar:Npn \@@_current_rowfont: { }
         \@@_current_rowfont:
      }
   }
   l
   <{
      \int_gset:Nn \l_@@_last_rownum_int { \number \rownum }
   }
}
\newcolumntype { x } {
   >{
      \int_compare:nNnTF { \int_use:N \l_@@_last_rownum_int } = { \number \rownum } {
         \@@_current_rowfont:
      } {
         \cs_gset_nopar:Npn \@@_current_rowfont: { }
         \@@_current_rowfont:
      }
   }
   X
   <{
      \int_gset:Nn \l_@@_last_rownum_int { \number \rownum }
   }
}

\rowcolors { 0 } { } { }

\ExplSyntaxOff\makeatother

\begin{document}
tabular:
\begin{tabular}{LLL}
   \rowcolor{black}\rowfont{\color{red}}
   1 & 2 & 3 \\
   1 & 2 & 3 \\
\end{tabular}

\bigskip

tabularx:
\begin{tabularx}{0.5\textwidth}{xxx}
   \rowcolor{black}\rowfont{\sffamily\footnotesize\color{red}}
   1 & 2 & 3 \\
   1 & 2 & 3 \\
\end{tabularx}
\end{document}

resultado

Problemas

  • En {tabularx}la fila, el uso \rowfontse amplía cuando el argumento de \rowfontcontiene \color.
  • Sólo funciona cuando se usa \rowcolors.
  • Sólo se puede utilizar con tipos de columnas especiales.

Quizás sea posible solucionar los problemas con otra definición…

Respuesta1

Como alternativa al tabupaquete, tabularrayel paquete proporciona una manera fácil de configurar fuentes y colores de filas:

\documentclass{article}
\usepackage{tabularray}
\usepackage{xcolor}
\begin{document}
\begin{tblr}{
   width = 0.5\textwidth, colspec = {X[1]X[2]X[3]}, hlines,
   row{1} = {bg=gray9, fg=red3, font=\sffamily\footnotesize},
}
   1 & 2 & 3 \\
   1 & 2 & 3 \\
\end{tblr}
\end{document}

información relacionada