Problem mit ColorTbl und MakeCell

Problem mit ColorTbl und MakeCell

Hier ist ein einfaches Beispiel.

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

Bildbeschreibung hier eingeben

Wenn der Text in der mehrzeiligen Zelle kürzer ist als der Text in der darüber liegenden Zelle, wird die Zelle nicht gut eingefärbt. multirowist ok, aber ich möchte die Zeile innerhalb der Zelle umbrechen und die Ausrichtung festlegen.

Da der Code von Python generiert wird und die Spaltenbreite im Programm nicht zugänglich ist und auch nicht auf einen passenden Wert eingestellt werden kann, werden Optionen wie p, win arrayoder Xin tabularxnicht berücksichtigt.

Antwort1

Bei Verwendung w{c}{...}ist der Spaltentyp einfach:

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

Bildbeschreibung hier eingeben

Nachtrag: Auch mit dem neuen tabularrayPaket ist es einfach:

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

oder

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

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

In beiden Fällen ist das Ergebnis das gleiche:

Bildbeschreibung hier eingeben

Antwort2

Das Paket nicematrix(≥ 4.0) bietet Tools zum Einfärben von Zellen, Zeilen und Spalten auf eine Weise, die kompatibel ist mit multirowund 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} 

Sie werden nicht die dünnen weißen Linien sehen, die Sie in einigen PDF-Viewern bei bestimmten Zoomstufen sehen (siehe beispielsweise Bernards Antwort).

Ergebnis des obigen Codes

Antwort3

Makecell hat möglicherweise Probleme mit farbigen Zellen in Tabellen. Als Workaround schlage ich vor, \Centerstackfrom stackenginein einem einfachen zu verwenden \multirow. Unabhängig davon: Laden xcolormit Option [table], Sie müssen nicht laden, colortblda ersteres dies für Sie erledigt.

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

Bildbeschreibung hier eingeben

Antwort4

Lösung von David

Verwenden Sie eine verschachtelte Tabelle

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

verwandte Informationen