如何设置垂直多行对齐?

如何设置垂直多行对齐?

我有一张带有 的彩色表格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出现的许多特殊常量。

相关内容