クラインとnopagebreakを伴うlongtable複数行の問題

Apr 16 2012

パッケージlontableとmultirowを一緒に使用すると問題が発生します。

直後に\ cline {ij}を使用している場合、\ *はページの破損を回避していないようです。

test.pdfの元のコードは次のとおりです。

\documentclass{article}
\usepackage{longtable}
\usepackage{multirow}
\begin{document}
\begin{longtable}{|c|p{1cm}|p{2cm}|p{5cm}|}
\hline
{} & {\bf ID} & {\bf name} & {\bf short Description} \\ \hline
\multirow{2}{*}{\bf 1} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
....
\multirow{2}{*}{\bf 21} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 22} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 23} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
....
\multirow{2}{*}{\bf 35} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\end{longtable}
\end{document}

このテーブルの各レコードは2行で構成されています。

このコードの結果は、レコード22を2ページに分割することです。1ページの1行目と2ページの2行目です。これは、\ *が正しく機能していないことを意味します。

レコード22に対応する\ cline {2-4]を削除すると、\ *は正しく機能しているようです。これはソースコードです。

\documentclass{article}
\usepackage{longtable}
\usepackage{multirow}
\textheight=5\baselineskip
\begin{document}
\begin{longtable}{|c|p{1cm}|p{2cm}|p{5cm}|}
\hline
{} & {\bf ID} & {\bf name} & {\bf short Description} \\ \hline
\multirow{2}{*}{\bf 1} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 21} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 22} & \multirow{2}{*}{test1} & {name}& {short descrition} \\*
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 23} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 35} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\end{longtable}
\end{document}

レコード22はもう2ページに分割されていませんが、クラインはありません。

部分的な水平線を維持し、同時にページの切れ目を回避するにはどうすればよいですか?

回答

15 DavidCarlisle Apr 16 2012 at 16:59

longtable特別なことは何もしません\cline。おそらくそうすべきでしょう。これ\nobreakにより、が適切な場所に挿入されます。

\documentclass{article}
\usepackage{longtable}
\usepackage{multirow}
\textheight=5\baselineskip
\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}
\begin{longtable}{|c|p{1cm}|p{2cm}|p{5cm}|}
\hline
{} & {\bf ID} & {\bf name} & {\bf short Description} \\ \hline
\multirow{2}{*}{\bf 1} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 21} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 22} & \multirow{2}{*}{test1} & {name}& {short descrition} \\*
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 23} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\multirow{2}{*}{\bf 35} & \multirow{2}{*}{test1} & {name}& {short descrition} \\* \cline{3-4}
& & \multicolumn{2}{c|}{detailed description} \\ \hline
\end{longtable}
\end{document}

休憩が発生するのは次の\hline場合のみです。