Lualatex 在编译大型文档后崩溃

Lualatex 在编译大型文档后崩溃

我使用 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}

相关内容