我想要一个页面填充和分页功能longtable
,所以我决定尝试一下xltabular
。不幸的是,在正常环境中xltabular
似乎搞砸了规则,请参阅:booktabs
tabular
\documentclass{article}
\usepackage{booktabs, xltabular}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tabular}
\begin{document}
\begin{tabular}{ccc}
\toprule
col1 & col2 & col3 \\
\midrule
row 2: & more and moooooooooooore & test \\
\bottomrule
\end{tabular}
\end{document}
不加载xltabular
即可解决问题。
xltabular
我是否遗漏了某些软件包选项或某些不兼容性?有没有比不损坏的更好的软件包booktabs
?
(我使用的是 TeXLive 2019 并使用 lualatex 进行编译)
編輯 (由 Skillmon 刪除)
我把这个错误简化为以下 MWE(它本身没有多大意义),它看起来像是booktabs
试图智能地检测某些东西,但却失败了。
\documentclass{article}
\usepackage{longtable}
\let\xltabular\relax
\usepackage{booktabs}
\begin{document}
\begin{tabular}{ccc}
\toprule
col1 & col2 & col3 \\
\midrule
row 2: & more and moooooooooooore & test \\
\bottomrule
\end{tabular}
\end{document}
似乎只要longtable
加载并\xltabular
定义就足够了(即使只是\relax
)。
答案1
该bug在2019/10/08的1.6180339版本中被确认booktabs.sty
,不知道早期版本是否存在。
我已将该错误报告给 的维护者booktabs
。与此同时,看起来\@BTrule
在您的序言中对 进行以下重新定义就足够了:
\documentclass{article}
\usepackage{xltabular}
\usepackage{booktabs}
\makeatletter
\def\@BTrule[#1]{%
\ifx\longtable\undefined
\let\@BTswitch\@BTnormal
\else\ifx\hline\LT@hline
\nobreak
\let\@BTswitch\@BLTrule
\else
\let\@BTswitch\@BTnormal
\fi\fi
\global\@thisrulewidth=#1\relax
\ifnum\@thisruleclass=\tw@\vskip\@aboverulesep\else
\ifnum\@lastruleclass=\z@\vskip\@aboverulesep\else
\ifnum\@lastruleclass=\@ne\vskip\doublerulesep\fi\fi\fi
\@BTswitch}
\makeatother
\begin{document}
\begin{tabular}{ccc}
\toprule
col1 & col2 & col3 \\
\midrule
row 2: & more and moooooooooooore & test \\
\bottomrule
\end{tabular}
\begin{xltabular}{0.7\linewidth}{cXc}
\toprule
col1 & col2 & col3 \\
\midrule
row 2: & more and moooooooooooore & test \\
\bottomrule
\end{xltabular}
\end{document}