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}
这似乎不需要指定制表位就可以工作。