问题概述:我收到错误
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
dest_names_size pdf destination table size
更新
这肯定是设置问题。我刚刚从 Latex 文件中删除了最后添加的 10 个问题,错误就消失了。所以我只需要找到如何dest_names_size
为 lualatex 增加这个值。可能是 lualatex 没有dest_names_size
从texmf.cnf
文件中读取值?我需要另一种方法来更新 lualatex 的这个值吗?
答案1
默认情况下,hyperref 每个页面创建一个目标,名为page.1
,page.2
等等。
通常仅在您生成索引或使用 backref 时才需要这些目标,其中 hyperref 应该能够从页码跳回。
由于这可能不是这种情况,你可以使用以下方法禁用生成
\hypersetup{pageanchor=false}
这将为您节省约 23,000 个指定目的地。