ปัญหา multirow longtable กับ cline และ nopagebreak

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 ในสองหน้า: บรรทัดแรกในหน้า 1 และบรรทัดที่สองในหน้าที่ 2 นั่นหมายความว่า \ * ทำงานไม่ถูกต้อง

\ * ดูเหมือนจะทำงานได้ถูกต้องถ้าฉันลบ \ cline {2-4] ที่ตรงกับเรกคอร์ด 22 นี่คือซอร์สโค้ด:

\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 ไม่ได้ถูกแบ่งเป็นสองหน้าอีกต่อไป แต่ไม่มีซีไลน์

ฉันจะรักษาเส้นแนวนอนบางส่วนได้อย่างไรและในขณะเดียวกันก็หลีกเลี่ยงการแบ่งหน้า

คำตอบ

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เพียง: