colortbl 和 makecell 的问题

colortbl 和 makecell 的问题

这是一个简单的例子。

\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 生成,并且列的宽度不可能在程序中访问,也无法设置为合适的值,所以不考虑pwinarrayXin等选项。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)提供了以兼容的方式为单元格,行和列着色的工具multirowmakecell

\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 可能会在表格中出现彩色单元格问题。作为一种解决方法,我建议在普通的 中使用\Centerstackfrom 。无关:使用 option加载,您不必加载,因为前者会为您完成。stackengine\multirowxcolor[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}

相关内容