
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}
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. multirow
está 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
, w
in array
o X
in tabularx
no 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}
Apéndice:
También es sencillo con el uso del nuevo tabularray
paquete:
\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:
Respuesta2
El paquete nicematrix
(≥ 4.0) proporciona herramientas para colorear celdas, filas y columnas de forma compatible con multirow
y 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).
Respuesta3
Makecell puede tener problemas con las celdas coloreadas en las tablas. Como solución alternativa, sugiero utilizar \Centerstack
desde stackengine
en un formato simple \multirow
. No relacionado: cargar xcolor
con la opción [table]
, no tienes que cargar colortbl
ya 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}
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}