喂食
\documentclass{article}
\showoutput
\begin{document}\noindent
A B\\
A\ B\\
A\hskip\fontdimen2\font plus\fontdimen3\font minus\fontdimen4\font B
\end{document}
在 DVI 文件中产生latex
三倍相同的“AB”,没有任何明显差异。但是,控制台输出中的拉伸和收缩值确实不同:
....\OT1/cmr/m/n/10 A
....\glue 3.33333 plus 1.66498 minus 1.11221
....\OT1/cmr/m/n/10 B
....\penalty 10000
....\glue 0.0 plus 1.0fil
....\penalty -10000
....\glue(\rightskip) 0.0
...\penalty 150
...\glue(\baselineskip) 5.16669
...\hbox(6.83331+0.0)x345.0, glue set 327.0833fil
....\OT1/cmr/m/n/10 A
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 B
....\penalty 10000
....\glue 0.0 plus 1.0fil
....\penalty -10000
....\glue(\rightskip) 0.0
...\penalty 150
...\glue(\baselineskip) 5.16669
...\hbox(6.83331+0.0)x345.0, glue set 327.0833fil
....\OT1/cmr/m/n/10 A
....\glue 3.33333 plus 1.66666 minus 1.11111
....\OT1/cmr/m/n/10 B
差别很小(plus 1.66498 minus 1.11221
第一行与第二行相比)。plus 1.66666 minus 1.11111
第二行和第三行),但仍然存在。为什么会发生这种情况?以下TeXbook,我以为这就是我们在命令后\
排版通常空格的方式(比如,与),而语义上没有任何区别,但显然,我错了。\foo\
\foo
答案1
添加的空间是字体尺寸指定的空间,调整了
\spacefactor
,具体来说,plus
组件乘以,\spacefactor/1000
通常\spacefactor
为 1000,但在大写字母后为 999,因此值相差 999/1000 倍,不受影响,\
并且\spacefactor
始终在标点符号(或大写字母)后添加标准单词空间。minus
组件类似,但乘以1000/\spacefactor
\documentclass{article}
\showoutput
\begin{document}\noindent
A B\\
A\ B\\
A\hskip\fontdimen2\font plus\fontdimen3\font minus\fontdimen4\font B\\
A\dimen0=\fontdimen3\font
\multiply\dimen0 \spacefactor % = 999 not 1000
\divide\dimen0 1000
\dimen2=\fontdimen4\font
\multiply\dimen2 1000
\divide\dimen2 \spacefactor
A\hskip\fontdimen2\font plus\dimen0 minus\dimen2 B
a\showthe\spacefactor A\showthe\spacefactor
\end{document}
这显示了四种胶水设置
....\glue 3.33333 plus 1.66498 minus 1.11221
....\glue 3.33333 plus 1.66666 minus 1.11111
....\glue 3.33333 plus 1.66666 minus 1.11111
....\glue 3.33333 plus 1.66498 minus 1.11221
显示最后一行计算与胶水相匹配。