普通 TeX 提供了\centerline
居中文本行的功能,但没有提供居中段落的功能。LaTeX 提供了居中\centering
环境\center
。查看 LaTeX 代码,它与 Bechtolsheim 在“TeX 实践”中提供的内容非常相似:
\rightskip = 1in plus 4em
\leftskip = \rightskip
\spaceskip = .3333em
\xspaceskip = .5em
\parfillskip = 0pt
\noindent
On the other hand there are sometimes cases where you want to have a
sequence of lines, all centered, but you do not want to make the line
breaking decisions all by yourself. So here is a sample where \TeX{}
did all the work.
\bye
Bechtolsheim 还使用此代码提供了一个类似于开始/结束环境的示例。
先前的 stackexchange 问题中有类似的代码:纯 TeX 的中心环境
我的问题是,为什么 Bechtolsheim 建议使用\spaceskip
和\xspaceskip
,他是如何得出这些数字的?为什么 LaTeX(我相信)和 @egreg 在上一个问题中提供的解决方案避开了它们?
无可否认,我并不完全理解,\(x)spaceskip
因此解释一下会很有帮助。
附言:我知道 TUGboat 和 Amazon 对 Bechtolsheim 作品(TeX in Practice)的评价只是有些好评,但我认为这些书很棒。是的,有印刷和编辑错误,但内容很棒,我发现冗长的示例非常有用和有价值。我绝对鼓励任何想要了解 TeX 细节的人去看看它们。然而,人们应该至少先读一读 Knuth 的“The TeX Book”(最初避免危险的弯路),因为 Bechtolsheim 确实假设读者对 TeX 有基本的了解。
更新:很棒的回答和评论。我认为 ragged2e latex 包文档很好地解释了这个问题,并指出 ragged 的 Plain TeX 版本在某些方面优于默认的 LaTeX,并尝试通过本质上将字体的 fontdim2 值(如果可用)设置为\spaceskip
提供最佳间距同时保留连字符能力(不幸的是,在使用时会丢失)来修复它以及centering 和 raggedleft 环境。我认为一个好的 Plain TeX 居中实现应该做类似的事情。Schröder 的包在左/右跳过寄存器中使用了Bechtolsheim 的而不是 Bechtolsheim 的,fil
这也有点有趣。2em
4em
答案1
那里的设置使用了有限的拉伸量,因此文本不会也不规则(类似ragged2e
package \RaggedRight
)。但如果不考虑它本身,则意味着任何行拉伸都将在边距和单词间空间之间共享,因此 spaceskip 设置会将它们冻结为固定值。
乳胶版本在边缘处使用无限胶水拉伸,因此这自然会迫使所有单词间的胶水恢复到其自然长度,因为所有拉伸都在边缘处被吸收。