多行表格单元格中的垂直居中

多行表格单元格中的垂直居中

multirow 包的文档暗示,默认情况下,内容\multirow将垂直居中。在此示例中(由机器从 Word 文档生成,因此所有内容都是伪造的):

  • 第一行,第一个单元格跨越3行,其他单元格只是单元格;
  • 第二行,第一个单元格继续跨越,其他单元格均跨越2行;
  • 作者无意中添加了虚假的第三行,但这没关系,因为它必须存在才能接收第 1 行和第 2 行的跨度。

下面的代码输出 (忽略额外的规则:我仍在努力完善代码以使其正确)

问题是,第 1 列中的文本相对于它所跨越的 3 行而言未垂直居中。第 2 行上的单元格 2/3/4 本身已正确垂直居中。我可以尝试将fixup可选参数添加到\multirow,但这属于自动化过程,因此计算出要添加多少是有问题的,因为对于一般情况,没有简单的方法来计算数量。

\documentclass{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[margin=1in]{geometry}
\usepackage{array,multirow}
\pagestyle{empty}
\begin{document}
% code generated from Word OOXML via XSLT2
\begin{tabular}{@{}
    |>{\raggedright}p{3cm}
    |>{\raggedright}p{3cm}
    |>{\raggedright}p{3cm}
    |>{\raggedright}p{3cm}
    |@{}}\hline
% first row
\multirow{3}{3cm}[-2\baselineskip]{Tests:}
&\multicolumn{1}{|>{\raggedright}m{3cm}|}{Vortest}
&\multicolumn{1}{|>{\raggedright}m{3cm}|}{1. Nachtest}
&\multicolumn{1}{|>{\raggedright}m{3cm}|}{2. Nachtest}\\
% second row
&\multirow{2}{3cm}{Juni vor dem TSC}
&\multirow{2}{3cm}{September nach dem TSC}
&\multirow{2}{3cm}{Mai/Juni im Jahr nach dem TSC}
\\\cline{1-1} % this is line 24
% bogus third row
&&&\\\cline{1-1}\cline{2-2}\cline{3-3}\cline{4-4}
\end{tabular}
\end{document}

另一个问题是处理该文档时出现错误:

! Misplaced \omit.
\@cline #1-#2\@nil ->\omit 
                       \@multicnt #1\advance \@multispan \m@ne \ifnum \@...
l.24     \\\cline{1-1}

! Leaders not followed by proper glue.
<to be read again> 
               \hfill 
l.24     \\\cline{1-1}

答案1

默认情况下,multirow文本将垂直居中,但编译错误导致代码无法正常工作。您必须在列定义\arraybackslash后添加\raggedright。完成后,您可以删除基线调整。

另外,为了简化代码,您可以定义几个新的列类型:

\documentclass[preview,border=1px]{standalone}
\usepackage{array,multirow}
\pagestyle{empty}

\newcolumntype{P}{>{\raggedright\arraybackslash}p{3cm}}
\newcolumntype{M}{>{\raggedright\arraybackslash}m{3cm}}

\begin{document}
% code generated from Word OOXML via XSLT2
\begin{tabular}{@{}|P|P|P|P|@{}}\hline
% first row
\multirow{3}{3cm}{Tests:}
&\multicolumn{1}{M|}{Vortest}
&\multicolumn{1}{M|}{1. Nachtest}
&\multicolumn{1}{M|}{2. Nachtest}\\
% second row
&\multirow{2}{3cm}{Juni vor dem TSC}
&\multirow{2}{3cm}{September nach dem TSC}
&\multirow{2}{3cm}{Mai/Juni im Jahr nach dem TSC}
\\\cline{1-1} % this is line 24
% bogus third row
&&&\\\cline{1-1}\cline{2-2}\cline{3-3}\cline{4-4}
\end{tabular}
\end{document}

此处还修复了多条垂直线,方法是仅在列定义后添加行,而不是在列定义前后添加行:

在此处输入图片描述

但是,我不太清楚您想要实现什么,第二行中的多行对我来说有点令人困惑。您能解释一下您到底想要实现什么吗?

答案2

\documentclass{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[margin=1in]{geometry}
\usepackage{array,multirow}
\pagestyle{empty}
\begin{document}

\begin{tabular}{|p{3cm}|p{3cm}|p{3cm}|p{3cm}|}\hline
\multirow{3}{3cm}{Tests:} & Vortest & 1.Nachtest & 2. Nachtest \\\cline{2-4}
&\multicolumn{1}{r|}{\multirow{2}{3cm}{ Juni vor dem TSC}} & \multicolumn{1}{r|}{\multirow{2}{3cm}{September nach dem TSC}} &\multicolumn{1}{r|}{ \multirow{2}{3cm}{Mai/Juni im Jahr nach dem TSC }}\\
      &      &     & \\\cline{2-4}\hline
\end{tabular}

\end{document}

这似乎不需要指定制表位就可以工作。

在此处输入图片描述

相关内容