ltablex と booktabs

ltablex と booktabs

1 ページよりも大きい表が必要で、サイズは固定されている必要があります。見栄えを良くするために、ブックタブを使用します。ただし、最後のページを除いて、すべてのページで表のフッターが見栄えがよくありません。 ここに画像の説明を入力してください これが私の MWE です。

\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage{blindtext}
\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\toprule
\endhead
\bottomrule
\endfoot
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\
\end{tabularx}
\end{document}

ある行がページの最後の行になるかどうかを検出する方法はありますか?そうすれば二重線を避けることができます。次の疑似コードのように

is row last row of the page than \bottomrule else \midrule

\bottomrule各ページの最後に二重線は入れたくないのですが

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

答え1

解決策A)質問の趣旨に沿っているか分かりませんが、\bottomruleまったく必要ありません。これは幅のみを設定できる単純なルールです。私の例では、これを削除し、表の最後に 1 つのルールを追加しています。

%! *latex mal-ltablex-a.tex
\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage{blindtext}

\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\toprule
\endhead
%\bottomrule
\endfoot
\blindtext & \blindtext\\*\midrule 
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\end{tabularx}
\end{document}

1 メートル

編集、解決策B)本当に必要な場合に備えて、私はこのトリックをパッチとして使用しています。\label各行の末尾にページ番号 ( ) に関する情報を保存し、TeX の次回の実行時にタイプセットするかどうかを決定します\midrule(\bottomrule実際の行と次の行を比較しています。これは先読みの状況です)。

テーブルの一番最後に置きたい場合は、最後の行の前に書いてある\bottomruleコメントアウトしてください。\mycounting

%! *latex mal-ltablex-b.tex
\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage{blindtext}
\usepackage{refcount}

\let\oldmidrule=\midrule
\newcount\malic 
\global\malic=0
\newcount\maltempa \maltempa=0
\newcount\maltempb \maltempb=0

\def\midrule{%
\mycounting
\ifnum\maltempa=\maltempb
  \\*\oldmidrule
\else
  \\*\bottomrule[6pt]
\fi
}%End of \midrule...

\def\mycounting{%
\global\advance\malic by 2%
\maltempb=\getpagerefnumber{mycounter-\the\malic}%
\global\advance\malic by -1%
\maltempa=\getpagerefnumber{mycounter-\the\malic}%
\typeout{\the\maltempa, \the\maltempb}
\label{mycounter-\the\malic}%
}% End of \mycounting...


\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\toprule
\endhead
%\bottomrule
\endfoot
\blindtext & \blindtext \midrule 
\blindtext & \blindtext \midrule
\blindtext & \blindtext \midrule
\blindtext & \blindtext \midrule 
\blindtext & \blindtext \midrule
\blindtext & \blindtext \midrule
\blindtext & \blindtext \midrule 
%\blindtext & \blindtext \midrule
\end{tabularx}

\mycounting % Comment out this line in case you would like to have \bottomrule at the very end of the table...
\end{document}

2 メートル

答え2

\topruleあなたの例では、タイポグラフィ的に言えば、「太い」罫線(とによって生成\bottomrule)と「細い」罫線( によって生成)の両方を持つことにはあまり意味がないようです。したがって、の場合は、\midruleなどの 1 つの罫線幅のみを使用することをお勧めします。\heavyrulewidthすべてのルールこのような設定を実装する方法は次のとおりです。

\documentclass{scrartcl}
\usepackage{booktabs,ltablex,blindtext}
\setlength\lightrulewidth{\heavyrulewidth}
\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\ \toprule
\endhead
\bottomrule % use \bottomrule only on final page
\endlastfoot
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\
\end{tabularx}
\end{document}

逆に、すべての罫線の厚さを にしたい場合は\lightrulewidth、次の命令を発行します。

\setlength\heavyrulewidth{\lightrulewidth}

答え3

これは、偽物\bottomrule(\raiseboxコンテンツ) を垂直方向に上に移動して残りの部分を覆い\midrule、二重の罫線が表示されないようにすることで、問題に対処します。ただし、副作用があります。この操作によって垂直方向のスペースが 1 行余分に取られるため、ページごとに操作する行が 1 つ少なくなります。これを確認するには、my をコメント アウトして\raisebox元のコメントを解除する\bottomruleと、「X Y」行がページ 2 の上部からページ 1 の下部に移動することがわかります。

\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex}
\usepackage{blindtext}
\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\toprule
\endhead
\raisebox{9pt}{\smash{\makebox[.972\textwidth]{\rule{\textwidth}{1pt}}}}%
%\bottomrule
\endfoot
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
X & Y\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\*\midrule
\blindtext & \blindtext\\
\end{tabularx}
\end{document}

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

答え4

本当の解決策ではありません:

\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage{ltablex,tabu}
\usepackage{blindtext}
\begin{document}
\begin{tabularx}{\linewidth}{XX}
left & right\\\midrule[\heavyrulewidth]
\endhead
\multicolumn{2}{@{}c@{}}{continues next page} \\*\bottomrule
\endfoot
\bottomrule
\endlastfoot
\blindtext & \blindtext\\\midrule
\blindtext & \blindtext\\\midrule
\blindtext & \blindtext\\
\end{tabularx}
\end{document}

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

関連情報