Problema com colortbl e makecell

Problema com colortbl e makecell

Aqui está um exemplo simples.

\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}

insira a descrição da imagem aqui

Quando o texto na célula multilinha for menor que o texto da célula acima, a célula não ficará bem colorida. multirowestá ok, mas quero quebrar a linha dentro da célula e definir o alinhamento.

Como o código será gerado por python e a largura da coluna não pode ser acessada no programa nem definida com um valor adequado, opções como p, win arrayou Xin tabularxnão são consideradas.

Responder1

Com o uso, o w{c}{...}tipo de coluna é simples:

\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}

insira a descrição da imagem aqui

Termo aditivo: Também é simples usar o novo tabularraypacote:

\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}

ou

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

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

Em ambos os casos o resultado é o mesmo:

insira a descrição da imagem aqui

Responder2

O pacote nicematrix(≥ 4.0) fornece ferramentas para colorir células, linhas e colunas de forma compatível com multirowe 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} 

Você não terá as finas linhas brancas que vê em alguns visualizadores de PDF em alguns níveis de zoom (veja, por exemplo, a resposta de Bernard).

Resultado do código acima

Responder3

Makecell pode ter problemas com células coloridas em tabelas. Como solução alternativa, sugiro usar \Centerstackfrom stackengineem um arquivo \multirow. Não relacionado: carregando xcolorcom option [table], você não precisa carregar, colortblpois o primeiro faz isso por você.

\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} 

insira a descrição da imagem aqui

Responder4

Solução de David

use uma tabela aninhada

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

informação relacionada