我有一张带有 的彩色表格multirows
。我发现,当我使用 时multirow
,有时,尤其是当文本必须换行时,表格会失去垂直对齐。如何将第 1 列和第 1-2 行的文本对齐到中间?
如果允许另一个问题,我该如何正确地为这个特定的单元格着色,仍然使用booktabs
?
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{rotating}
\usepackage{booktabs}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{array}
\usepackage{colortbl}
\begin{document}
\begin{table}
\centering
\begin{tabular}{c*2{>{\centering\arraybackslash}m{3cm}}}
\cmidrule{2-3}
& \textbf{Column 1} & \textbf{Column 2}\\
\midrule
\textbf{Row 1} & \multirow{2}{3cm}{ \cellcolor{yellow}A longer text for line break 1} & Text row 1\\
\cmidrule{1-1}\cmidrule{3-3}
\textbf{Row 2} & & \cellcolor{yellow} A longer text for line break 2\\
\midrule
\textbf{Row 3} & Text row 3 & A longer text for line break 3\\
\midrule
\end{tabular}
\end{table}
\end{document}
答案1
您需要决定哪些可以自动计算,哪些必须设置为恒定尺寸。您的表格似乎具有恒定的单元格宽度(在您的情况下为 3 厘米,较长的文本必须分成更多行)。因此,使用\halign
这样的表格有点不切实际。另一方面,您需要自动计算单元格高度,并且需要将文本居中(垂直)。此任务可以通过完成\valign
。只有一个小问题:您需要像在转置表中一样设置数据\valign
,即逐列设置。可以通过以下代码完成:
\def\Yellow{\pdfliteral{0 0 1 0 k}}
\def\Green{\pdfliteral{.7 0 .7 0 k}}
\def\Black{\pdfliteral{0 g}}
\def\vcc#1{\medskip\vfil\vc{#1}\vfil\medskip\hrule}
\def\vc#1{\vbox{\hsize=3cm \leftskip=3pt plus1fill \rightskip=\leftskip
\noindent\vbox to10pt{}#1\unskip\strut}}
\def\scc#1{\medskip\vfil\hbox{\kern5pt\bf#1\kern5pt}\vfil\medskip\hrule}
\def\cvcc#1#2{\medskip\setbox0=\vc{#2}\dimen0=\ht0 \advance\dimen0 by\dp0
#1\leaders\hrule width3cm\vskip\dimen0 plus1fil
\Black \kern-\dimen0 \box0
#1\leaders\hrule width3cm\vfil
\Black \medskip \hrule
}
\valign{\hrule\vcc{#}&\vcc{#}&\vcc{#}&\vcc{#}\cr
\omit\scc{} & \omit\scc{Row 1} & \omit\scc{Row 2} & \omit\scc{Row 3} \cr
\bf Column 1 &
\multispan2 \cvcc\Yellow{A longer text for line break} &
\omit\cvcc\Green{Text row 3} \cr
\bf Column 2 &
Text row 1 &
\omit\cvcc\Green{A longer text for line break 2} &
A longer text for line break 3 \cr
}
\bye
使用标准 LaTeX 表格无法解决此任务,因为它们\halign
内部使用的是 TeX 基元,不\valign
。因此,我使用\valign
原生代码,并在纯 TeX 中测试了此代码(当然,因为我不喜欢 LaTeX)。但我希望此代码(基于 TeX 基元和标准纯 TeX 宏)也能在 LaTeX 中工作(我没有尝试过)。
\halign
您无法使用(别名使用标准 LaTeX 表)完成您的任务,除非猜测每次\multirow
出现的许多特殊常量。