过去(可能是去年左右),我曾成功地将这三个包一起使用(并生成了一个有条件着色的长表)。该 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 多个小时,我只是想发布我的解决方案,希望有一天它能帮助到别人。如果您有更好的修复方法或对潜在问题的解释,请写一个新的解决方案。
解决方案是在最后添加一个默认类型的“虚拟”列(l
、r
、 ),因为只有最后一列是自定义类型时才会出现错误。请注意,仅更新列规范列表(例如)是不够的,还需要更新所有行结尾并添加一个空单元格(例如)。c
\begin{longtable}[c]{Rr}
1 & \\*
答案2
该longtable
机制以几行块的形式处理表格内容。\endgroup
此处观察到的错误发生在这些块的末尾。这些块的大小由 LaTeX 计数器的值决定LTchunksize
;默认值为 20,因此有一种解决方法,只需将该计数器设置为高于最大行数的某个值,例如通过将行
\setcounter{LTchunksize}{1000}
在序言中。TeX 需要更多内存,但在较新的计算机上这应该不是问题。