TeX 容量超出,抱歉

TeX 容量超出,抱歉

通过阅读tex.web,我注意到分组级别和语义嵌套(即数学、水平和垂直模式的嵌套)之间存在差异。我能想到一些在不改变模式的情况下增加分组级别的命令:\begingroup\bgroup。是否有命令可以嵌套模式而不影响分组级别,是否有可能达到过程中看到的溢出“语义嵌套大小” push_nest

@p procedure push_nest; {enter a new semantic level, save the old}
begin if nest_ptr>max_nest_stack then
  begin max_nest_stack:=nest_ptr;
  if nest_ptr=nest_size then overflow("semantic nest size",nest_size);
@:TeX capacity exceeded semantic nest size}{\quad semantic nest size@>
  end;
nest[nest_ptr]:=cur_list; {stack the record}
incr(nest_ptr); head:=get_avail; tail:=head; prev_graf:=0; mode_line:=line;
end;

天真

\def~{\hbox\bgroup}
\edef~{~~~~}
\edef~{~~~~}
\edef~{~~~~}
\edef~{~~~~}
~ % 256 times \hbox\bgroup

导致 TeX 的容量因分组级别数量而超出。

答案1

我想到的第一个方法是以垂直模式开始一个段落,这会将 TeX 设置为水平模式而不进行分组。

\def~{x\vbox\bgroup}
\edef~{~~~~}
\edef~{~~~~}
\edef~{~~~~}
\edef~{~~~~}
~

这产生了

! TeX capacity exceeded, sorry [semantic nest size=500].
<to be read again>
                   x
~...x\vbox \bgroup x\vbox \bgroup x\vbox \bgroup x
                                                  \vbox \bgroup x\vbox \bgro...

相关内容