为什么这两个例子会产生不同的结果?
\parindent=0pt \leavevmode
\hbox to 0pt{\hskip -\parindent \bf 8.}%
Lorem ipsum dolor sit amet.
\bye
\noindent
\hbox to 0pt{\hskip -\parindent \bf 8.}%
Lorem ipsum dolor sit amet.
\bye
顺便说一下,在这个帖子提到,\noindent
独立于工作\parindent
,但这究竟意味着什么?
答案1
这两个例子显然会产生不同的结果,至少因为\hbox
在第一种情况下会过满,而在第二种情况下会不足。
示例代码
\tracingonline=1
\showboxbreadth=\maxdimen
\showboxdepth=\maxdimen
\setbox0=\vbox{
\parindent=0pt \leavevmode
\hbox to 0pt{\hskip -\parindent \bf 8.}%
Lorem.
}\showbox0
\setbox0=\vbox{
\noindent
\hbox to 0pt{\hskip -\parindent \bf 8.}%
Lorem.
}\showbox0
\bye
第一个框的输出
Overfull \hbox (8.9444pt too wide) detected at line 8
\tenbf 8.|
\hbox(6.44444+0.0)x0.0
.\glue 0.0
.\tenbf 8
.\tenbf .
.\rule(*+*)x5.0
> \box0=
\vbox(6.83331+0.0)x469.75499
.\hbox(6.83331+0.0)x469.75499, glue set 439.0327fil
..\hbox(0.0+0.0)x0.0
..\hbox(6.44444+0.0)x0.0
...\glue 0.0
...\tenbf 8
...\tenbf .
...\rule(*+*)x5.0
..\tenrm L
..\tenrm o
..\tenrm r
..\tenrm e
..\tenrm m
..\tenrm .
..\penalty 10000
..\glue(\parfillskip) 0.0 plus 1.0fil
..\glue(\rightskip) 0.0
! OK.
第一个框的输出
Underfull \hbox (badness 10000) detected at line 15
\tenbf 8.
\hbox(6.44444+0.0)x0.0
.\glue -20.0
.\tenbf 8
.\tenbf .
> \box0=
\vbox(6.83331+0.0)x469.75499
.\hbox(6.83331+0.0)x469.75499, glue set 439.0327fil
..\hbox(6.44444+0.0)x0.0
...\glue -20.0
...\tenbf 8
...\tenbf .
..\tenrm L
..\tenrm o
..\tenrm r
..\tenrm e
..\tenrm m
..\tenrm .
..\penalty 10000
..\glue(\parfillskip) 0.0 plus 1.0fil
..\glue(\rightskip) 0.0
! OK.
您可以清楚地看到第一种情况下的“过满”消息和第二种情况下的“不足”消息。盒子
\hbox to 0pt{\hskip -\parindent\bf 8.}
当且仅当 与粗体字样\parindent
的宽度相同时,才会既不过满也不会不足。8.
我们还可以检查之后显示的内容\box0=
,除了\parindent
应用于的值之外,唯一的区别\skip
在于,在第一种情况下,有对应于缩进框的(如果的值是默认值\hbox(0.0+0.0)x0.0
,则为),而在第二种情况下缺少它,因为启动水平模式但不添加缩进框。\hbox(0.0+0.0)x20.0
\parindent
\noindent
不清楚你想要什么。如果你需要的是悬挂段落,数字与左边距齐平,悬挂缩进等于\parindent
,你可以这样做
Lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet.
\hangindent=\parindent
\hangafter=1
\leavevmode
\llap{\hbox to\parindent{\bf 8.\hfil}}%
Lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet
lorem ipsum dolor sit amet lorem ipsum dolor sit amet.
\bye
\noindent
最后,独立于 是什么意思呢\parindent
?简单来说,无论参数是什么值,它的行为都是一样的\parindent
:它启动水平模式而不添加缩进框(如果 TeX 已经处于水平模式,则不执行任何操作)。