ltablex 和 booktabs

ltablex 和 booktabs

我需要一張大於一頁的表格,而且它應該有固定的大小。為了改善外觀,我使用了書籤。然而,除了最後一頁之外,並非所有頁面的表腳都很好。 在此輸入影像描述 這是我的 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根本不需要,這是一個簡單的規則,你只能設定它的寬度。在我的範例中,我將刪除它,並在表的最後添加一條額外的規則。

%! *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。因此,我建議您僅使用一種規則寬度,例如\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,從而避免雙重規則。然而,有一個副作用:這種操作會佔用額外的一行垂直空間,因此每頁可以少處理一行。要看到這一點,請註解掉 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}

在此輸入影像描述

相關內容