
Вот простой пример.
\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}
Если текст в многострочной ячейке короче текста в ячейке выше, ячейка не будет правильно окрашена. multirow
Это нормально, но я хочу сделать разрыв строки внутри ячейки и задать выравнивание.
Поскольку код будет сгенерирован Python, а ширину столбца невозможно получить в программе или задать для нее подходящее значение, такие варианты, как p
, w
in array
или X
in tabularx
, не рассматриваются.
решение1
С использованием w{c}{...}
типа столбца все просто:
\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}
Приложение:
Также просто с использованием нового tabularray
пакета:
\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}
или
\documentclass{article}
\usepackage{tabularray}
\usepackage{xcolor}
\begin{document}
\begin{tblr}{row{2}={cyan!30,c}, c}
longer text \\
{short\\short}
\end{tblr}
\end{document}
В обоих случаях результат одинаков:
решение2
Пакет nicematrix
(≥ 4.0) предоставляет инструменты для раскрашивания ячеек, строк и столбцов способом, совместимым с multirow
и 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}
У вас не будет тонких белых линий, которые вы видите в некоторых программах для просмотра PDF-файлов при определенных уровнях масштабирования (см., например, ответ Бернарда).
решение3
Makecell может иметь проблемы с цветными ячейками в таблицах. В качестве обходного пути я предлагаю использовать \Centerstack
from stackengine
в plain \multirow
. Не имеет отношения к теме: загрузка xcolor
с option [table]
, вам не нужно загружать, colortbl
так как первый делает это за вас.
\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}
решение4
Решение Дэвида
использовать вложенную табличную
\newcommand{\minitab}[2][l]{\begin{tabular}{@{}#1@{}}#2\end{tabular}}
\cellcolor{teal}\multirow{-2}*{\minitab[r]{short\\short}