非常に長い複数列の項目を使用すると、ひどいページ区切りが発生する

非常に長い複数列の項目を使用すると、ひどいページ区切りが発生する

私はsltablexを使用しています\multicolumn。問題は、単一の項目内に大量のテキストを導入する必要があり\multicolumn、テーブルが 2 つの異なるページに自動的に分割されると、最初のページの最後に大量の空白が残ることです。\multicolumn行ごとに分割するのではなく、下余白に達したときに項目を自動的に分割するためのヒントを見つけたいと思います。次に例を示します。

\begin{tabularx}{\linewidth}{| l | X | X | X | X | X | X | X |}
blabla & more blabla & \multicolumn{3}{c|}{merging cells} & \multicolumn{3}{c|}{more merging} \\
\multicolumn{8}{|p{\textwidth-2\tabcolsep-2\fboxrule}|}{a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, } \\
\hline
\multicolumn{8}{|p{\textwidth-2\tabcolsep-2\fboxrule}|}{a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, } \\
\hline
\multicolumn{8}{|p{\textwidth-2\tabcolsep-2\fboxrule}|}{a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, } \\
\hline
\multicolumn{8}{|p{\textwidth-2\tabcolsep-2\fboxrule}|}{a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, } \\
\hline
...
\multicolumn{8}{|p{\textwidth-2\tabcolsep-2\fboxrule}|}{a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, a very long text, } \\
\hline
\end{tabularx}

答え1

ここでを使用する必要はまったくありませんlongtable/ltablex(また、tabularx X 列を使用する必要もありません)。Tex を使用する場合、tabularxテーブルを再設定して最適な列幅を決定するのに多大な労力がかかりますが、スパン セルはフル幅で、個々のセルはその 8 分の 1 (または少なくとも、最初の列の最大エントリを引いた行幅の 7 分の 1) であることが事前にわかっています。そのため、TeX にその旨を伝えて、計算する手間を省くことができます。セル幅を修正すると、セルは同じテーブル内にある必要がなくなります。いずれにしてもセルは整列するため、スパン エントリを通常のテキストに置き換えることができます。垂直線が本当に必要な場合は、mdframed分割可能なフレームを使用できます。

注記

\textwidth-2\tabcolsep-2\fboxrule

ルールの幅が\arrayrulewidth正しくないため、正しい計算ではありません\fboxrule(もちろん、これらは同じ値になる場合があります)。

つまり、次のようになります。

ここに画像の説明を入力してください

\documentclass{article}

\addtolength\textheight{-30\baselineskip}
\addtolength\paperheight{-30\baselineskip}
\pdfpageheight\paperheight
\newenvironment{trow}
{\par
\begin{tabular}{|*8{p{\dimexpr(((\textwidth-\arrayrulewidth)/8)-2\tabcolsep-\arrayrulewidth)\relax}|}}
\hline}
{\\\hline\end{tabular}%
\par}
\begin{document}
\setlength\parindent{0pt}

\def\x{a very long text, a very long text, a very long text, a very long
text, a very long text, a very long text, a very long text, a very
long text, a very long text, a very long text, a very long text, a
very long text, a very long text, a very long text, a very long text,
a very long text, a very long text, a very long text, a very long
text, a very long text, a very long text, }

\x
\begin{trow}
red&yellow&blue&green&red&yellow&blue&green
\end{trow}
\begin{trow}
1&2&3&4&5&6&7&8
\end{trow}

\x
\begin{trow}
red&yellow&blue&green&red&yellow&blue&green
\end{trow}
\begin{trow}
1&2&3&4&5&6&7&8
\end{trow}

\x
\begin{trow}
red&yellow&blue&green&red&yellow&blue&green
\end{trow}
\begin{trow}
1&2&3&4&5&6&7&8
\end{trow}


\end{document}

関連情報