編輯 (由 Skillmon 刪除)

編輯 (由 Skillmon 刪除)

我想要一个页面填充和分页功能longtable,所以我决定尝试一下xltabular。不幸的是,在正常环境中xltabular似乎搞砸了规则,请参阅:booktabstabular

\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 在正常表格环境中打破 booktabs

不加载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}

在此处输入图片描述

相关内容