限制文本行的长度,但允许换行

限制文本行的长度,但允许换行

在尝试回答时这个问题,我重读了 TeX Book 的第 14 章(关于 TeX 如何将段落分成行)。这让我开始思考:有没有办法限制文本字符串的长度,同时仍允许该文本跨行?例如,假设我想排版“Lorem Ipsum Dolor”,并且我希望它的长度正好是 3 厘米。我可以这样做(如果我只想用空格填充多余的长度,可以在末尾\hbox to 3cm{Lorem Ipsum Dolor}使用一个可选项)。这样做的问题是不会跨行。有没有办法做类似的事情,同时允许换行?换句话说,只要它们的总长度等于 3 厘米,我就可以接受“Lorem Ipsum”位于一行的末尾,“Dolor”位于下一行的开头。\hfill\hbox

编辑:我认为我不太清楚自己在寻找什么。考虑一下“发酵的液体会凝结成液体,而时间会充满痛苦”在此示例中:

换行示例

在这个例子中,这个句子被分成了两行。我希望能够明确设置“发酵了……”句子,无论它如何跨行拆分。在这个例子中,我可能希望 s_1 和 s_2 的长度之和等于 5in。这可以通过在单词之间添加粘连或在末尾用粘连填充来实现。如果我们知道字符串中不会有换行符,这很容易做到;然后我们可以使用 或\hbox spread 5in{}\hbox to 5in{}当字符串中确实出现换行符时,就会出现问题,因为该\hbox方法可能会强制字符串位于一行上。此外,如果字符串的自然长度大于\textwidth,那么\hbox将会溢出。

答案1

发布的问题的答案有点模糊

  • \spaceskip空格往往有一个粘合成分,除非你使用&去除粘合,否则很难预测它们的实际宽度\xspaceskip

  • 你真的是“限制”的意思,还是“扩大”的意思?如果文字太多,3cm 不够,就没有办法满足要求。

  • 这三个单词在一行上时,中间会有两个空格。在两行上时,中间只有一个空格。确保两种情况下使用的总空间相同会非常困难(事实上,我不知道如何在 TeX82 中做到这一点)。

  • 您确实想用 来填充多余的房间吗\hfill

无论如何,你可以尝试这样的事情:

\newdimen\mydimen
\mydimen=3cm
\setbox0=\hbox {Lorem Ipsum Dolor}\advance\mydimen-\wd0 \unhbox0\hskip\mydimen

这可能会或可能不会给您正好 3 厘米的结果,具体取决于段落的其余部分。

使用 LuaTeX 中的节点处理可以实现更精确的解决方案,但 TeX82 的换行例程中没有那么多钩子可以真正改变其行为。

答案2

一个简单的(尽管可能有点笨拙)解决方案,也在第 14 章(第 101 页,最后一个“危险曲线”段落)中,就是使用\parshape;总结一下,\parshape=n其中n是一个非负整数,后跟2n尺寸规格,\parshape=n i1 l1 i2 l2 ... in ln产生一个段落,其第一个n行的长度为l1, l2, ..., ln,并将从左边距缩进数量i1, ..., in。如果您的行数少于n行,其他规范将被忽略,如果您有更多规范,则将重复这些规范。您可以通过输入 来取消效果\parshape=0

因此,为了获得行长为 3 厘米的段落,您应该能够执行此操作\parshape=1 0 3cm然后继续输入(替换 0 会使其缩进一些)。

答案3

我想也许你想要简单的\parbox{width}{text}命令。

相关内容