Solución inteligente de formato de filas de tablas

Solución inteligente de formato de filas de tablas

Hace un tiempo, @robintw hizo una pregunta práctica: Poner la primera fila de la tabla en negrita.

Utiliza el paquete de matriz para inyectar inteligentemente código de formato en las columnas de la fila del encabezado.

Solución inteligente de formato de filas de tablas

\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}} % Always set currentrowstyle to \relax in case no \rowstyle is used
\newcolumntype{^}{>{\currentrowstyle}} % set \currentrowstyle to \bfseries or whatever (>{\bfseries}c)
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}% set global definition for \currentrowstyle
  #1\ignorespaces
}

El código problemático

Me gustaría ver compatibilidad con varias columnas y varias filas. Intenté lo siguiente basado enhttps://tex.stackexchange.com/a/4816/13552, que no funciona.

\documentclass{article}
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\currentrowstyle}}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
  #1\ignorespaces
}

\begin{document}
\begin{tabular}{$l^c^c^r}
\rowstyle{\bfseries}
%\multicolumn{2}{^l}{span2} & \multicolumn{2}{^r}{span2} \\ % Uncomment this to see problem
col1 & col2 & col3 & col4 \\
dat1 & dat2 & dat3 & dat4 \\
\end{tabular}
\end{document}

Respuesta1

El problema tiene que ver con el hecho de que el $>tipo de columna nunca se utiliza en absoluto en la primera fila de la tabla.

Puede solucionar esto utilizando:

\multicolumn{2}{$l}{}

Para el primer conjunto de columnas distribuidas. Sin embargo, el problema entonces es que las cosas se hacen en el orden equivocado. \rowstyle{\bfseries}ahora está antes del inicio de la primera celda. Para solucionar esto, puede incluirlo en la especificación de la primera celda.

\multicolumn{2}{$l}{\rowstyle{\bfseries}span2}

que produce

estilos de filas distribuidas

que, si he entendido bien, es el resultado esperado.

código completo

\documentclass{article}
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\currentrowstyle}}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
  #1\ignorespaces
}

\begin{document}
  \begin{tabular}{$l^c^c^r}
    \multicolumn{2}{$l}{\rowstyle{\bfseries}span2} & \multicolumn{2}{^r}{span2} \\ % Uncomment this to see problem
    col1 & col2 & col3 & col4 \\
    dat1 & dat2 & dat3 & dat4 \\
  \end{tabular}
\end{document}

información relacionada