这是一个简单的例子。
\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
inarray
或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 查看器中看到的细白线(例如,参见 Bernard 的回答)。
答案3
Makecell 可能会在表格中出现彩色单元格问题。作为一种解决方法,我建议在普通的 中使用\Centerstack
from 。无关:使用 option加载,您不必加载,因为前者会为您完成。stackengine
\multirow
xcolor
[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
David 的解决方案
使用嵌套表格
\newcommand{\minitab}[2][l]{\begin{tabular}{@{}#1@{}}#2\end{tabular}}
\cellcolor{teal}\multirow{-2}*{\minitab[r]{short\\short}