如何在 TL 2021 上使用 lualatex 增加设置 dest_names_size?

如何在 TL 2021 上使用 lualatex 增加设置 dest_names_size?

问题概述:我收到错误

TeX capacity exceeded, sorry [number of destination names (dest_names_size)=1
31072]

但无法找到如何增加dest_names_size值以避免此错误。

详细问题

我在 Windows 10 Linux 子系统下的 Linux ubuntu 上使用 TL 2021。我 3 天前才更新了 TL 2021。这台电脑有 64 GB 的 RAM。

我每天编译几次这个大型 latex 文件。编译成 pdf 大约需要 25 分钟。pdf 大约有 23,000 页。

现在,在添加了一些方程式和几个表格之后,lualatex 突然出现了一个我从未见过的错误。

添加\errorcontextlines=400到序言中,以便能够看到错误的更多背景信息。这给出了

This is LuaHBTeX, Version 1.13.2 (TeX Live 2021)
 restricted system commands enabled.
(./index.tex
LaTeX2e <2021-11-15>

...... 10 minutes later....

(./OUTPUT/5360_Friday_November_19_2021_06_04_43_AM/index.tex

Package fancyhdr Warning: \headheight is too small (12.0pt):
(fancyhdr)                Make it at least 13.59999pt, for example:
(fancyhdr)                \setlength{\headheight}{13.59999pt}.
(fancyhdr)                You might also make \topmargin smaller to compensate:

(fancyhdr)                \addtolength{\topmargin}{-1.59999pt}.

[23189]) (./toLua.txt)

Package fancyhdr Warning: \headheight is too small (12.0pt):
(fancyhdr)                Make it at least 13.59999pt, for example:
(fancyhdr)                \setlength{\headheight}{13.59999pt}.
(fancyhdr)                You might also make \topmargin smaller to compensate:

(fancyhdr)                \addtolength{\topmargin}{-1.59999pt}.

[23190
! TeX capacity exceeded, sorry [number of destination names (dest_names_size)=1
31072].
<argument> ...not:N \tex_shipout:D \box_use:N \l_shipout_box
                                                  \__shipout_drop_firstpage_...

\use_ii:nn #1#2->#2

<argument> ...t@typeset@protect \hook_use:n {shipout/after}}}
                                                  \cs_set_eq:NN \protect \__...

\use_ii:nn #1#2->#2

<to be read again> \__shipout_execute_cont:
                         \endgroup \set@typeset@protect
\pbs_outputpage_orig: ...thefoot }\color@endbox }}
                                                  \global \let \if@newlist \...

\@opcol ...lumn \@outputdblcol \else \@outputpage
                                                  \fi \global \@mparbottom \...

<output> ... <-\@M \@specialoutput \else \@makecol \@opcol
                                                  \@startcolumn \@whilesw \i...

\newpage ...prevdepth \fi \fi \vfil \penalty -\@M

\clearpage ...opskip \hbox {}\fi \fi \fi \newpage
                                                  \write \m@ne {}\vbox {}\pe...

l.386315     \clearpage

 374627 words of node memory still in use:
   7001 hlist, 78 vlist, 3690 rule, 452 disc, 75 local_par, 1 dir, 82 math, 342
8 glue, 4183 kern, 213 penalty, 80 sub_mlist, 12 margin_kern, 1834 glyph, 49010
 attribute, 127 glue_spec, 49010 attribute_list, 1 temp, 2 if_stack, 2 write, 2
 pdf_annot, 26 pdf_dest, 4013 pdf_colorstack nodes
   avail lists: 1:10,2:61547,3:22514,4:30380,5:164656,6:6911,7:1158535,8:1240,9
:191326,10:89,11:10289
!  ==> Fatal error occurred, no output PDF file produced!
Transcript written on index.log.
>

我在谷歌上搜索了一下,TeX capacity exceeded, sorry [number of destination names找到了 2003 年的https://tug.org/pipermail/pdftex/2003-January/003464.html 也就是说设置

   obj_tab_size = 300000

所以我做到了。我把它设为 900000,所以我的现在texmf.cnf看起来像

>cat /usr/local/texlive/2021/texmf.cnf
buf_size=90000000
pool_size=9000000
main_memory=9000000
obj_tab_size=900000
>

但这没有帮助。我再次编译了 index.tex,错误仍然显示在同一行。

线路386314就那样\clearpage。没什么特别的。

....
\ifdefined\HCode
\noindent\rule{\textwidth}{0.4pt}
\fi
\clearpage                         <<<< line 386314
\subsection{problem 19}
\hypertarget{5361}{}

什么可能导致此错误?还有什么建议可以尝试?日志文件显示

If you really absolutely need more capacity,
you can ask a wizard to enlarge me.

因此我在这里询问 Latex 中的向导我需要做什么。

如果您需要更多信息,我们将很乐意提供。我将 index.log 文件放在此文件夹中 https://12000.org/tmp/112021/ 如果需要的话可以下载。(安全文件夹,在我自己的页面上)

更新 我发现了类似的问题miktex-配置目标名称-pdflatex 的大小 但当我按照那里的建议去做时,却没有帮助。它说要添加dest_names_size=900000

但它不起作用。仍然出现相同的错误。我想知道是否texmf.cnf按原样读取,还是我需要刷新某些内容?

>cat  /usr/local/texlive/2021/texmf.cnf
buf_size=90000000
pool_size=9000000
main_memory=9000000
obj_tab_size=900000
dest_names_size=900000

所以我现在不知道还能尝试什么。

也有类似的问题如何设置 dest_names_size 的值?,但没有答案。

其他参考我发现从 2002 年起

% These are pdftex-specific.
obj_tab_size = 200000 % PDF objects
dest_names_size=300000 % destinations

lualatex 手册

dest_names_size       pdf destination table size

更新

这肯定是设置问题。我刚刚从 Latex 文件中删除了最后添加的 10 个问题,错误就消失了。所以我只需要找到如何dest_names_size为 lualatex 增加这个值。可能是 lualatex 没有dest_names_sizetexmf.cnf文件中读取值?我需要另一种方法来更新 lualatex 的这个值吗?

答案1

默认情况下,hyperref 每个页面创建一个目标,名为page.1page.2等等。

通常仅在您生成索引或使用 backref 时才需要这些目标,其中 hyperref 应该能够从页码跳回。

由于这可能不是这种情况,你可以使用以下方法禁用生成

  \hypersetup{pageanchor=false}

这将为您节省约 23,000 个指定目的地。

相关内容