通过阅读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...