如果某个组内的 TEX 内部参数发生改变,则当该组在 TeX? 中结束时,该参数的先前内容将被恢复。

如果某个组内的 TEX 内部参数发生改变,则当该组在 TeX? 中结束时,该参数的先前内容将被恢复。

我在书的第21页看到这句话TeXbook,但我看不懂。你能举个例子解释一下吗?

如果某个组内的 TEX 内部参数发生改变,则当该组以 TeX? 结尾时,该参数的先前内容将被恢复。

我认为该参数的先前内容不需要恢复,因为它从未被参数改变。

答案1

考虑一个内部参数,例如\baselineskip

如果你

\baselineskip=100pt
{ \baselineskip=5pt }
\showthe\baselineskip

然后你会看到\baselineskip 组内是 5pt,但在组结束时恢复为 100pt。

答案2

这取决于你认为的内部参数是什么。对于其中许多,行为是尊重分组。但也有一些微妙之处。

例如,连字符分配始终是全局的,因此您不能说

{\hyphenation{some-long-word}<text of a paragraph containing somelongword>\par}

并期望当组结束时 TeX 会忘记给定的连字异常。

同样,字体分配也总是全局的,TeXbook 的意思是

\fontdimen<number><font>=<dimen>
\hyphenchar<font>=<number>
\skewchar<font>=<number>

其中<font>是一个字体选择器(参见 TeXbook 中的相关部分)。

在这方面,盒子大小的分配有点奇怪。考虑

This is TeX, Version 3.141592653 (TeX Live 2023) (preloaded format=tex)
**\relax

*\newbox\test

*\setbox\test=\hbox{test}

*\showthe\wd\test
> 16.16669pt.
<*> \showthe\wd\test
                    
? 

*\begingroup\wd\test=100pt\endgroup

*\showthe\wd\test
> 100.0pt.
<*> \showthe\wd\test

但看似相似的会议

This is TeX, Version 3.141592653 (TeX Live 2023) (preloaded format=tex)
**\relax

*\newbox\test

*\setbox\test=\hbox{test}

*\showthe\wd\test
> 16.16669pt.
<*> \showthe\wd\test
                    
? 

*\begingroup\setbox\test=\hbox{different test}\wd\test=100pt\showthe\wd\test
> 100.0pt.
<*> ...fferent test}\wd\test=100pt\showthe\wd\test
                                                  
? 

*\endgroup

*\showthe\wd\test
> 16.16669pt.
<*> \showthe\wd\test

有不同的结果。将宽度分配给框寄存器会全局影响最后的框的化身。因此,在第一个会话中,分配\wd\test=100pt会影响上层的框,但在第二个会话中则不会。

赋值本质上也是全局的。和也是\spacefactor一样。还有一些维度参数不受分组影响,即\prevgraf\deadcycles\insertpenalties

\prevdepth  \pagegoal  \pagetotal  \pagestretch  \pagefilstretch
\pagefillstretch  \pagefilllstretch  \pageshrink  \pagedepth

与页面制作相关的。

相关内容