Problema con colortbl y makecell

Problema con colortbl y makecell

He aquí un ejemplo sencillo.

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{colortbl}
\usepackage{multirow, makecell}

\begin{document}
\begin{tabular}{c}
  longer text\\
  \cellcolor{teal}\\
  \cellcolor{teal}\multirowcell{-2}[0ex][r]{short\\short}
%   \cellcolor{teal}\multirow{-2}*{short} % is ok but can't break line or set alignment
\end{tabular}
\end{document}

ingrese la descripción de la imagen aquí

Cuando el texto en la celda de varias filas es más corto que el texto de la celda anterior, la celda no tendrá buen color. multirowestá bien, pero quiero romper la línea dentro de la celda y establecer la alineación.

Porque el código será generado por Python y es imposible acceder al ancho de la columna en el programa ni establecerlo en un valor adecuado, opciones como p, win arrayo Xin tabularxno se consideran.

Respuesta1

Con el uso el w{c}{...}tipo de columna es simple:

\documentclass{article}
\usepackage[table]{xcolor}  % it load colortbl
\usepackage{makecell}

\begin{document}
\begin{tabular}{w{c}{5em}}
  longer text       \\
\rowcolor{teal}
\makecell{short\\short}
\end{tabular}
\end{document}

ingrese la descripción de la imagen aquí

Apéndice: También es sencillo con el uso del nuevo tabularraypaquete:

\documentclass{article}
\usepackage{tabularray}
\usepackage{xcolor}  % with tabularray the colortbl is not needed

\begin{document}
\begin{tblr}{c}
  longer text       \\
  \SetRow{cyan!30}
{short\\short}
\end{tblr}
\end{document}

o

\documentclass{article}
\usepackage{tabularray}
\usepackage{xcolor}  

\begin{document}
\begin{tblr}{row{2}={cyan!30,c}, c}
  longer text       \\
{short\\short}
\end{tblr}
\end{document}

En ambos casos el resultado es el mismo:

ingrese la descripción de la imagen aquí

Respuesta2

El paquete nicematrix(≥ 4.0) proporciona herramientas para colorear celdas, filas y columnas de forma compatible con multirowy makecell:

\documentclass{article}
\usepackage{xcolor}
\usepackage{multirow, makecell}
\usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{c}[code-before = \rowcolor{teal!75}{2,3}]
 longer text\\
 \\
 \multirowcell{-2}[0ex][r]{shorter \\ short}
\end{NiceTabular}
\end{document} 

No tendrá las finas líneas blancas que ve en algunos visores de PDF en algunos niveles de zoom (consulte, por ejemplo, la respuesta de Bernard).

Resultado del código anterior

Respuesta3

Makecell puede tener problemas con las celdas coloreadas en las tablas. Como solución alternativa, sugiero utilizar \Centerstackdesde stackengineen un formato simple \multirow. No relacionado: cargar xcolorcon la opción [table], no tienes que cargar colortblya que el primero lo hace por ti.

\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{multirow, makecell}
\usepackage[usestackEOL]{stackengine}

\begin{document}

\begin{tabular}{c}
  longer text\\
  \cellcolor{teal!75}\\
  \cellcolor{teal!75}\multirowcell{-2}[0ex][r]{shorter \\ short}
% \cellcolor{teal}\multirow{-2}*{short} % is ok but can't break line or set alignment
\end{tabular}
\qquad
\begin{tabular}{c}
  longer text\\
  \cellcolor{teal!75}\\
  \cellcolor{teal!75}\multirow{-2}{*}{\Centerstack[r]{shorter \\ short}}
\end{tabular}

\end{document} 

ingrese la descripción de la imagen aquí

Respuesta4

Solución por David

usar una tabla anidada

\newcommand{\minitab}[2][l]{\begin{tabular}{@{}#1@{}}#2\end{tabular}}
\cellcolor{teal}\multirow{-2}*{\minitab[r]{short\\short}

información relacionada