list 与 skip 的关系是什么意思?(David 在说什么?)

list 与 skip 的关系是什么意思?(David 在说什么?)

在前两个问题中何时使用 \unskip 是良好做法什么是代币?默认含义LaTeX 中的标记以及行为\unskip。然而第一个问题的答案是:

\unskip原语将从当前列表中删除最后一个跳过

什么是列表是什么意思?

答案1

TeX 在各个层面上发挥作用。

  1. 最初它处理输入人物在文件中。这些永远不会存储在 TeX 的内部结构中,它们由其“眼睛”解析并转换为标记。字符标记封装了字符及其类别代码,或引用其他 TeX 构造的 csname 标记。

  2. 标记列表是 TeX 宏语言的主要数据结构,当您#1在定义中使用时,它是一个被传入以便在该点进行处理的标记列表。

  3. 一旦宏和其他可扩展标记被扩展,TeX 就会执行第一个不可扩展标记。此级别的操作包括各种赋值,也包括排版的实际过程。

  4. TeX 用来表示排版材料的结构在 TeX 中显示为(水平或垂直)框,并且框的内容是(水平或垂直列表)。

与操作标记列表相比,TeX 提供的用于操作这些排版列表的功能非常有限。(LuaTeX 提供的主要技术差异是它提供 Lua 回调以任意方式操作这些列表。)基本上,您唯一能做的就是确定最后的列表中的项目(e-TeX\lastnodetype原语、和\lastskip以及\lastpenalty类似的朋友)并删除最后一项\lastbox, \unskip \unpenalty。但请注意,没有完整的\un...原语集:您不能删除特殊项或\write节点或\rules(虽然您可以使用 删除,但\leaders\unskip无法区分\leaders胶水,因此如果删除它们,则无法将它们放回原处)。

考虑

\tracingoutput1
\showboxbreadth\maxdimen\showboxdepth\maxdimen

abc def \hskip 1pt \vrule


\bye

在文件中,字符列表被(abc def \hskip 1pt \vrule一次一个)转换为标记a_11,,,,,,...b_11_10\hskip1_12

当每个(不可扩展)标记被处理时,它会导致 Tex 执行相应的命令,在这种情况下,主要是将内容添加到当前水平列表中。日志文件显示列表如下:

### horizontal mode entered at line 5
\hbox(0.0+0.0)x20.0
\tenrm a
\tenrm b
\kern0.27779
\tenrm c
\glue 3.33333 plus 1.66666 minus 1.11111
\tenrm d
\tenrm e
\tenrm f
\glue 3.33333 plus 1.66666 minus 1.11111
\glue 1.0
\rule(*+*)x0.4
spacefactor 1000

正如我在最后提出的规则,列表不能通过经典的 TeX 解构,但如果没有它,经典的方法就是通过列表向后操作。

\setbox0\hbox{abc def \hskip 1pt

\showthe\lastnodetype
\showthe\lastskip
\unskip

\showthe\lastnodetype
\showthe\lastskip
\unskip

\showthe\lastnodetype

生产

(./lists.tex
> 11.
l.9 \showthe\lastnodetype

? 
> 1.0pt.
l.10 \showthe\lastskip

? 
> 11.
l.13 \showthe\lastnodetype

? 
> 3.33333pt plus 1.66666pt minus 1.11111pt.
l.14 \showthe\lastskip

? 
> 0.
l.17 \showthe\lastnodetype

? 
 )

这表明,从后往前算,您有一个类型为 11(粘合)的节点,其大小为 11pt,该节点已被删除,然后另一个来自空格标记的类型为 11(粘合)的节点也被删除。然后有一个类型为 0(字符节点)的节点,它实际上是 ,f但在经典 TeX 中,您无法看到f列表中位于它之前的任何其他项目。

相关内容