我使用 Lualatex 是因为它具有动态扩展自身内存的属性。目前我使用 longtabu 就是这样的
\setlength{\tabcolsep}{1mm}
\begin{longtabu} to \textwidth {|
p{30mm}|
p{20mm}|
p{20mm}|
p{30mm}|
p{20mm}|
p{35mm}|
p{15mm}|
p{15mm}|
p{15mm}|
p{30mm}|
p{30mm}|}
\hline\tableHeaderStyle
\raisebox{-0.7mm}[0mm][12mm]{ \thead[l]{ Папка \textnumero } } &
\raisebox{-4mm}[0mm][12mm]{ \thead[l]{ Пореден \\ \textnumero ~ на \\ документ } } &
\raisebox{-4mm}[0mm][12mm]{ \thead[l]{ Машинен \\ \textnumero \\ документ } } &
\raisebox{-0.7mm}[0mm][12mm]{ \thead[l]{ Документ \textnumero } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Дата на \\ документа } } &
\raisebox{-4mm}[0mm][12mm]{ \thead[l]{ Дата на \\ въвеждане \\ на документа } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Потре- \\ бител } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Тест\\ 1} } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Тест\\ 2} } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[r]{ ~~~~~~~~~~~~~~~~~~~ Стойност \\ дебит } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[r]{ ~~~~~~~~~~~~~~~~~~~ Стойност \\ кредит } }
\\ \hline \endhead
让我们添加两行。
1 &
5000 &
3000 &
2 &
25.04.2018 &
25.04.2018 15:21:27 &
test &
1 &
&
\multicolumn{1}{r|}{ 1 000.00 } &
\multicolumn{1}{r|}{ }
\\
\tabucline[1pt on 10pt off 3pt]{1-11}
\multicolumn{11}{|p{280mm}|}{ Забележка: Latin } \\ % sum of all column widths + some extra from cell padding
\hline
这会起作用。如果最后两行重复 1000 次,它也会起作用。但我尝试生成的文档非常大。这两行重复了 10 000 到 20 000 次。只有这样我才会收到此错误:
! Missing } inserted.
有人能至少给我指出正确的方向吗?谢谢。
编辑
这是完整的代码,只有 2 行。由于限制,我不能在这里放 100 行或 10,000 次。
\documentclass[paper=a4,fontsize=18pt]{article}
\usepackage{geometry}
\geometry{
% verbose,
landscape, % page orientation (landscape or portrait)
a4paper, % paper size
tmargin=20mm, % page top margin
bmargin=20mm, % page bottom margin
lmargin=5mm, % page left margin
rmargin=5mm % page right maring
}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\setsansfont{Arial}
%\setdefaultlanguage{bulgarian}
%\usepackage[defaultsans]{opensans} %font
%\usepackage[T1, T2A]{fontenc}
\usepackage[english,bulgarian]{babel}
\usepackage{fancyhdr}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{tabu}
\usepackage{colortbl}
\usepackage{xcolor}
\usepackage{makecell}
%\usepackage[lutf8x]{luainputenc}
\usepackage{tabularx}
\usepackage{tabulary}
\usepackage{array}
\usepackage{ragged2e}
\usepackage{xparse}
\usepackage{hhline}
\usepackage{textcomp}
% ============================== PAGE ==============================
\pagestyle{fancy}
\fancyhf{}
\rhead{\tcbd{
\fontsize{8}{10}\selectfont
25.04.2018 03:23:45
}}
\lhead{\tcbd{
\fontsize{8}{10}\selectfont
"Тест" ЕООД
}}
\rfoot{\tcbd{
Стр. \thepage
}}
\lfoot{\tcbd{
\fontsize{8}{10}\selectfont
Тест
}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
% ============================== TABLES ==============================
\definecolor{clTableHeaderBackground}{RGB}{192,192,192}
\definecolor{clTableHeaderText}{RGB}{0,0,0}
\newcommand{\mc}[2]{\multicolumn{ #1 }{c}{ #2 }} % snippet for multicolumn
% Table Header Style
\newcommand{\tableHeaderStyle}{
\rowfont{\color{clTableHeaderText}\bfseries}
\rowcolor{clTableHeaderBackground}
}
\tabulinesep =_0.5mm^1mm % table cell vertical padding (top and bottom)
\arrayrulewidth=0.8pt % line width
% ============================== OTHER ==============================
\renewcommand{\familydefault}{\sfdefault}
\newcommand{\resetFont}{
\fontsize{9}{12}\selectfont
}
\newenvironment{nscenter}
{\parskip=0pt\par\nopagebreak\centering}
{\par\noindent\ignorespacesafterend}
%define "Twig Curly Braces Divider"
\newcommand{\tcbd}{}
%define Wrap
\ExplSyntaxOn
\NewDocumentCommand{\separator}{ }
{
\mode_if_math:TF { \allowbreak } { \- }
}
\NewDocumentCommand{\wrap}{ m }
{
\mathers_wrap:n { #1 }
}
\seq_new:N \l_mathers_input_seq
\seq_new:N \l_mathers_output_seq
\seq_new:N \l_mathers_temp_seq
\cs_new_protected:Npn \mathers_wrap:n #1
{
\seq_clear:N \l_mathers_output_seq
\seq_set_split:Nnn \l_mathers_input_seq { ~ } { #1 }
\seq_map_inline:Nn \l_mathers_input_seq
{
\seq_set_split:Nnn \l_mathers_temp_seq { } { ##1 }
\seq_put_right:Nx \l_mathers_output_seq
{ \seq_use:Nn \l_mathers_temp_seq { \allowbreak } }
}
\seq_use:Nn \l_mathers_output_seq { ~ }
}
\ExplSyntaxOff
\tabulinesep =_0.5mm^1mm % table cell vertical padding (top and bottom)
\begin{document}
\fontsize{15}{13}\selectfont
\begin{nscenter}
\textbf{Хронологичен опис на счетоводните записвания}
\end{nscenter}
\\ \vspace{-5mm}
\fontsize{12}{10}\selectfont
\begin{nscenter}
За периода: 25.04.2018 - 25.04.2018
\end{nscenter}
\vspace{-5mm}
\fontsize{9}{11}\selectfont
\def\arraystretch{1.4}
\setlength{\tabcolsep}{1mm}
\begin{longtabu} to \textwidth {|
p{30mm}|
p{20mm}|
p{20mm}|
p{30mm}|
p{20mm}|
p{35mm}|
p{15mm}|
p{15mm}|
p{15mm}|
p{30mm}|
p{30mm}|}
\hline\tableHeaderStyle
\raisebox{-0.7mm}[0mm][12mm]{ \thead[l]{ Папка \textnumero } } &
\raisebox{-4mm}[0mm][12mm]{ \thead[l]{ Пореден \\ \textnumero ~ на \\ документ } } &
\raisebox{-4mm}[0mm][12mm]{ \thead[l]{ Машинен \\ \textnumero \\ документ } } &
\raisebox{-0.7mm}[0mm][12mm]{ \thead[l]{ Документ \textnumero } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Дата на \\ документа } } &
\raisebox{-4mm}[0mm][12mm]{ \thead[l]{ Дата на \\ въвеждане \\ на документа } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Потре- \\ бител } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Сметка \\ дебит } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Сметка \\ кредит } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[r]{ ~~~~~~~~~~~~~~~~~~~ Стойност \\ дебит } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[r]{ ~~~~~~~~~~~~~~~~~~~ Стойност \\ кредит } }
\\ \hline \endhead
1 &
5000 &
3000 &
2 &
25.04.2018 &
25.04.2018 15:23:45 &
test &
1 &
&
\multicolumn{1}{r|}{ 1 000.00 } &
\multicolumn{1}{r|}{ }
\\
\tabucline[1pt on 10pt off 3pt]{1-11}
\multicolumn{11}{|p{280mm}|}{ Забележка: Latin } \\ % sum of all column widths + some extra from cell padding
\hline
\end{longtabu}
\end{document}
最小示例(编辑)
这是一个最小的测试文件
\documentclass{article}
\usepackage{longtable}
\usepackage{tabu}
\usepackage{xinttools}
\begin{document}
\begin{longtabu} to \textwidth {|c|}
\hline\endhead
\romannumeral\xintreplicate{9999}\\
% \\ % comment this out to trigger the problem
\end{longtabu}
\end{document}
我(jfbu)尝试摆弄 texmfcnf.lua 中的设置,但没有效果。
编辑实际上,pdflatex 也出现了同样的问题,因此 Ed. 注释掉了他最初使用的 Emacs 缓冲变量。
但令人惊讶的是,它恰好在 10000 次迭代时出现,而不是在 9999 次迭代时出现。
答案1
您可以使用一个小的测试文件来重现错误,方法是将要重复的行替换为
\testlined
被定义为
\def\testline{1 &
5000 &
3000 &
2 &
25.04.2018 &
25.04.2018 15:23:45 &
test &
1 &
&
\multicolumn{1}{r|}{ 1 000.00 } &
\multicolumn{1}{r|}{ }
\\
}
\def\testlinea{\testline\testline\testline\testline\testline\testline\testline\testline\testline\testline}%10
\def\testlineb{\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea}%100
\def\testlinec{\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb}%1000
\def\testlined{\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec}%10000
这个longtable
包是为像这样的 ling 表设计的(名字里有一个线索:-)所以将它改为longtable
输出表。 \rowfont
在这种情况下没有定义,这里我只是把它注释掉了,但你可以通过将字体声明添加到你的 p 列说明符来获得相同的字体。
这将产生 358 页的表格
\documentclass[paper=a4,fontsize=18pt]{article}
\usepackage{geometry}
\geometry{
% verbose,
landscape, % page orientation (landscape or portrait)
a4paper, % paper size
tmargin=20mm, % page top margin
bmargin=20mm, % page bottom margin
lmargin=5mm, % page left margin
rmargin=5mm % page right maring
}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\setsansfont{Arial}
%\setdefaultlanguage{bulgarian}
%\usepackage[defaultsans]{opensans} %font
%\usepackage[T1, T2A]{fontenc}
\usepackage[english,bulgarian]{babel}
\usepackage{fancyhdr}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{tabu}
\usepackage{colortbl}
\usepackage{xcolor}
\usepackage{makecell}
%\usepackage[lutf8x]{luainputenc}
\usepackage{tabularx}
\usepackage{tabulary}
\usepackage{array}
\usepackage{ragged2e}
\usepackage{xparse}
\usepackage{hhline}
\usepackage{textcomp}
% ============================== PAGE ==============================
\pagestyle{fancy}
\fancyhf{}
\rhead{\tcbd{
\fontsize{8}{10}\selectfont
25.04.2018 03:23:45
}}
\lhead{\tcbd{
\fontsize{8}{10}\selectfont
"Тест" ЕООД
}}
\rfoot{\tcbd{
Стр. \thepage
}}
\lfoot{\tcbd{
\fontsize{8}{10}\selectfont
Тест
}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
% ============================== TABLES ==============================
\definecolor{clTableHeaderBackground}{RGB}{192,192,192}
\definecolor{clTableHeaderText}{RGB}{0,0,0}
\newcommand{\mc}[2]{\multicolumn{ #1 }{c}{ #2 }} % snippet for multicolumn
% Table Header Style
\newcommand{\tableHeaderStyle}{
% \rowfont{\color{clTableHeaderText}\bfseries}
% \rowcolor{clTableHeaderBackground}
}
\tabulinesep =_0.5mm^1mm % table cell vertical padding (top and bottom)
\arrayrulewidth=0.8pt % line width
% ============================== OTHER ==============================
\renewcommand{\familydefault}{\sfdefault}
\newcommand{\resetFont}{
\fontsize{9}{12}\selectfont
}
\newenvironment{nscenter}
{\parskip=0pt\par\nopagebreak\centering}
{\par\noindent\ignorespacesafterend}
%define "Twig Curly Braces Divider"
\newcommand{\tcbd}{}
\def\testline{1 &
5000 &
3000 &
2 &
25.04.2018 &
25.04.2018 15:23:45 &
test &
1 &
&
\multicolumn{1}{r|}{ 1 000.00 } &
\multicolumn{1}{r|}{ }
\\
}
\def\testlinea{\testline\testline\testline\testline\testline\testline\testline\testline\testline\testline}%10
\def\testlineb{\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea\testlinea}%100
\def\testlinec{\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb\testlineb}%1000
\def\testlined{\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec\testlinec}%10000
%define Wrap
\ExplSyntaxOn
\NewDocumentCommand{\separator}{ }
{
\mode_if_math:TF { \allowbreak } { \- }
}
\NewDocumentCommand{\wrap}{ m }
{
\mathers_wrap:n { #1 }
}
\seq_new:N \l_mathers_input_seq
\seq_new:N \l_mathers_output_seq
\seq_new:N \l_mathers_temp_seq
\cs_new_protected:Npn \mathers_wrap:n #1
{
\seq_clear:N \l_mathers_output_seq
\seq_set_split:Nnn \l_mathers_input_seq { ~ } { #1 }
\seq_map_inline:Nn \l_mathers_input_seq
{
\seq_set_split:Nnn \l_mathers_temp_seq { } { ##1 }
\seq_put_right:Nx \l_mathers_output_seq
{ \seq_use:Nn \l_mathers_temp_seq { \allowbreak } }
}
\seq_use:Nn \l_mathers_output_seq { ~ }
}
\ExplSyntaxOff
\tabulinesep =_0.5mm^1mm % table cell vertical padding (top and bottom)
\begin{document}
\fontsize{15}{13}\selectfont
\begin{nscenter}
\textbf{Хронологичен опис на счетоводните записвания}
\end{nscenter}
\\ \vspace{-5mm}
\fontsize{12}{10}\selectfont
\begin{nscenter}
За периода: 25.04.2018 - 25.04.2018
\end{nscenter}
\vspace{-5mm}
\fontsize{9}{11}\selectfont
\def\arraystretch{1.4}
\setlength{\tabcolsep}{1mm}
\begin{longtable}{|
p{30mm}|
p{20mm}|
p{20mm}|
p{30mm}|
p{20mm}|
p{35mm}|
p{15mm}|
p{15mm}|
p{15mm}|
p{30mm}|
p{30mm}|}
\hline\tableHeaderStyle
\raisebox{-0.7mm}[0mm][12mm]{ \thead[l]{ Папка \textnumero } } &
\raisebox{-4mm}[0mm][12mm]{ \thead[l]{ Пореден \\ \textnumero ~ на \\ документ } } &
\raisebox{-4mm}[0mm][12mm]{ \thead[l]{ Машинен \\ \textnumero \\ документ } } &
\raisebox{-0.7mm}[0mm][12mm]{ \thead[l]{ Документ \textnumero } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Дата на \\ документа } } &
\raisebox{-4mm}[0mm][12mm]{ \thead[l]{ Дата на \\ въвеждане \\ на документа } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Потре- \\ бител } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Сметка \\ дебит } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[l]{ Сметка \\ кредит } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[r]{ ~~~~~~~~~~~~~~~~~~~ Стойност \\ дебит } } &
\raisebox{-2.3mm}[0mm][12mm]{ \thead[r]{ ~~~~~~~~~~~~~~~~~~~ Стойност \\ кредит } }
\\ \hline \endhead
\testlined
\tabucline[1pt on 10pt off 3pt]{1-11}
\multicolumn{11}{|p{280mm}|}{ Забележка: Latin } \\ % sum of all column widths + some extra from cell padding
\hline
\end{longtable}
\end{document}
jfbu 缩小了问题范围。longtabu
实际上禁用了longtables
对长表的支持,这样它就可以将整个表保存在内存中以处理X
列,它可以解决这个问题,因为机器比 1990 年的更大,所以 longtable chunksize 设置为 10000,而不是 longtables 的默认值 20。在这里我将其设为 \maxdimen(TeX 可以容纳的最大整数)
使用 jfbu 添加的较小示例
\documentclass{article}
\usepackage{longtable}
\usepackage{tabu}
\makeatletter
\renewcommand*\longtabu {\tabu@longtrue
\ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi
\def\tabu@{\longtable}\def\endlongtabu{\endlongtable}%
\LTchunksize=\maxdimen
\expandafter\let\csname tabu*\endcsname \tabu
\expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}%
\let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts }
\tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
}% {longtabu}
\makeatother
\def\x{\\\hline}
\usepackage{xinttools}
\begin{document}
\makeatletter\errorcontextlines\maxdimen
\begin{longtabu} to \textwidth {|c|}
\hline\endhead
\romannumeral\xintreplicate{9999}\x
\x % comment this out to trigger the problem
\end{longtabu}
\end{document}