collcell、longtable 和/或 arydshln 之间是否存在不兼容性?

collcell、longtable 和/或 arydshln 之间是否存在不兼容性?

过去(可能是去年左右),我曾成功地将这三个包一起使用(并生成了一个有条件着色的长表)。该 tex 文件仍然可以很好地编译;但是,如果%删除任何符号(来自表定义),则以下 MWE 会产生错误。

更具体地说,如果行数大于 19 或任何行尾标记为不可中断 -- 即\\*-- 那么每种情况都会产生以下错误:

! Missing \endgroup inserted.< inserted text > \endgroup x

其中x行号是。

此外,如果arydshln还加载了该包,那么每种情况的错误数量都会增加三倍,并产生以下错误:

! Extra }, or forgotten \endgroup.< template > ... \endcollectcell \relax \d@llarend }\adl@colhtdp \unhbox \adl@... x 

! Missing \endgroup inserted.< inserted text >\endgroup x 

! Missing } inserted.< inserted text >} x

我怀疑包裹的顺序可能是原因,但事实并非如此。你知道为什么会发生这种情况吗?或者我该如何修复它?

%MWE
\documentclass[12pt,a4paper]{report}
\usepackage{longtable}
\usepackage{collcell}
%\usepackage{arydshln}

\newcolumntype{R}{>{\collectcell\fbox}r<{\endcollectcell}}%

\begin{document}
\begin{longtable}[c]{R}
     \hline    
    $n$ \\
     \hline
\endhead
     \hline
\endfoot
    1 \\%*
    2 \\
    3 \\
    4 \\
    5 \\
    6 \\
    7 \\
    8 \\%*
    9 \\
    10 \\
    11 \\
    12 \\
    13 \\
    14 \\
    15 \\
    16 \\
    17 \\
    18 \\
    19 \\
%    20 \\
%    20 \\
%    20 \\
\end{longtable}
\end{document}

答案1

我继续寻找解决方案,并找到了一个“肮脏的”修复方法。由于我总共花了 10 多个小时,我只是想发布我的解决方案,希望有一天它能帮助到别人。如果您有更好的修复方法或对潜在问题的解释,请写一个新的解决方案。

解决方案是在最后添加一个默认类型的“虚拟”列(lr、 ),因为只有最后一列是自定义类型时才会出现错误。请注意,仅更新列规范列表(例如)是不够的,还需要更新所有行结尾并添加一个空单元格(例如)。c\begin{longtable}[c]{Rr}1 & \\*

答案2

longtable机制以几行块的形式处理表格内容。\endgroup此处观察到的错误发生在这些块的末尾。这些块的大小由 LaTeX 计数器的值决定LTchunksize;默认值为 20,因此有一种解决方法,只需将该计数器设置为高于最大行数的某个值,例如通过将行

\setcounter{LTchunksize}{1000}

在序言中。TeX 需要更多内存,但在较新的计算机上这应该不是问题。

相关内容