我遇到了一个问题,一个表格跨越多页,并且跨越了多行的列。我的代码如下所示。问题是在第 1 页上,第 1 行显示 foo1、bar1 和 yikes1,没有任何问题。第 2 行和 foo2 也显示在第 1 页上,然后页面中断,bar2 和 yikes2 最终出现在第 2 页。我希望它中断,以便第 2 行的所有内容都出现在第二页上。表格会增大和缩小,所以我希望有一个动态解决方案。
\begin {supertabular}{|p{1.0in}|p{3.0in}|m{1.10in}|m{1.25in}|}
\hline
col 1
& col 2
& col 3
& col 4
\\\hline
\multirow{4}{*}
row 1
& foo1
& bar1
& yikes1
\\\cline{2-4}
& foo1
& bar1
& yikes1
\\\cline{2-4}
& foo1
& bar1
& yikes1
\\\cline{2-4}
& foo1
& bar1
& yikes1
\\\cline{2-4}
\\\hline
\multirow{4}{*}
row 2
& foo2
& bar2
& yikes2
\\\cline{2-4}
& foo2
& bar2
& yikes2
\\\cline{2-4}
& foo2
& bar2
& yikes2
\\\cline{2-4}
& foo2
& bar2
& yikes2
\\\cline{2-4}
\\\hline
\end {supertabular}
答案1
这与问题非常相似使用 cline 和 nopagebreak 的 longtable 多行问题。您还可以在那里查看如何制作正确的 MWE ;-)
与此相比,您的代码缺少以下内容:
- 你的语法好像有
\multirow
误:\multirow{4}{*}{row 1}
这里看起来更好。 - 您需要保护您的线路以免在 的范围内断裂
\multirow
。使用\\*
是第一步。 - 仍然有可能在 处断线
\cline
。David 给出了一个补丁来解决这个问题。
考虑到这些事情,我做出了以下 MWE:
\documentclass{article}
\usepackage{array,supertabular,multirow}
\makeatletter
\def\@cline#1-#2\@nil{%
\omit
\@multicnt#1%
\advance\@multispan\m@ne
\ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi
\@multicnt#2%
\advance\@multicnt-#1%
\advance\@multispan\@ne
\leaders\hrule\@height\arrayrulewidth\hfill
\cr
\noalign{\nobreak\vskip-\arrayrulewidth}}
\makeatother
\begin{document}
\vspace*{15cm}
\begin {supertabular}{|p{1.0in}|p{1.0in}|m{1.10in}|m{1.25in}|}
\hline
col 1
& col 2
& col 3
& col 4
\\\hline
\multirow{4}{*}{row 1}
& foo1
& bar1
& yikes1
\\*\cline{2-4}
& foo1
& bar1
& yikes1
\\\cline{2-4}
& foo1
& bar1
& yikes1
\\*\cline{2-4}
& foo1
& bar1
& yikes1
\\*\cline{2-4}
\\\hline
\multirow{4}{*}{row 2}
& foo2
& bar2
& yikes2
\\*\cline{2-4}
& foo2
& bar2
& yikes2
\\*\cline{2-4}
& foo2
& bar2
& yikes2
\\*\cline{2-4}
& foo2
& bar2
& yikes2
\\*\cline{2-4}
\\\hline
\end {supertabular}
\end{document}
但我仍然得到分页符 :-(
这似乎是一个supertabular
问题。乍一看supertabular
代码,我找不到明显的原因。
supertabular
在到处替换之后longtable
,它就可以工作了;-)