“hbox 组” 和 “调整后的 hbox 组” 之间的区别?

“hbox 组” 和 “调整后的 hbox 组” 之间的区别?

eTeX\currentgrouptype区分两种类型的\hbox组类型

\hbox{\showthe\currentgrouptype} % 3 "adjusted hbox group"
\noindent
\hbox{\showthe\currentgrouptype} % 2 "hbox group"

看着tex.web,我看到几个地方hbox_group发生以下情况:

@d hbox_group=2 {code for `\.{\\hbox}\grp'}
@d adjusted_hbox_group=3 {code for `\.{\\hbox}\grp' in vertical mode}

@<Initiate the construction of an hbox or vbox, then |return|@>=
...
  if (box_context<box_flag)and(abs(mode)=vmode) then
    scan_spec(adjusted_hbox_group,true)
  else scan_spec(hbox_group,true)

@<Cases of |handle...@>=
hbox_group: package(0);
adjusted_hbox_group: begin adjust_tail:=adjust_head; package(0);
  end;

我不明白这adjust_tail:=adjust_head是什么意思。也许与命令有关\vadjust

答案1

每当 TeX 开始新的分组级别时,它都会记录当前的分组类型,以便在分组结束时可以执行正确的操作。如果构建了水平框,它会区分水平模式(组代码 2)和垂直模式(组代码 3)的水平框。

两者的区别在于,在垂直情况下ins_nodemark_nodeadjust_node节点(来自\insert\mark\vadjust)会移出盒子进入外部。

它们在hpack例程中被收集到以指针 为起点的列表中adjust_head。然后,当组结束时(组代码 3),此列表的头部被分配给以 为终点的列表的尾部adjust_tail,这就是您在上面的代码中看到的情况。

另请参阅§647。

相关内容