如何在man手册中避免换行

4

我已经重构了一个man页的段落,使每个句子都成为自己的一行。当使用man ./somefile.3进行渲染时,输出略有不同。

让我举个例子:

This is line 1. This is line 2.

对比。

This is line 1.
This is line 2.

以下是渲染方式:

第一步:

This is line 1. This is line 2.

其次:

This is line 1.  This is line 2.

句子之间有额外的空格。请注意,我已经确保没有额外的空白。我在使用Latex、asciidoc和markdown方面有更多的经验,并且可以在这些软件上控制它,但在troff/groff上是否可能呢?如果可能的话我想避免这种情况。我不认为应该出现这样的问题。


1
注意,你的标签非常少。对于groff/troff,我会添加一个[unix]标签,而不是linux。以下是很好的侦探工作。有时这就是你所拥有的,但是我已经很久没有使用过troff了。祝你好运! - shellter
哦,天啊@shellter,你是对的,感谢提供信息。 - mmlb
2个回答

3
troff输入标准要求每个句子结尾处都有一个换行符,并让排版工具自动完成填充任务。(虽然我怀疑这并非其本意,但它确实使得源代码控制更加方便。)因此,它认为以句号(或?!,后面可以跟'"*])或†)结尾的行即为句子结尾,且句子之间应该有两个空格。这种行为很可能源于贝尔实验室当时的印刷标准。值得注意的是,这种行为无法通过任何填充模式进行设置。 groff提供了一种设置“句间”间距的方法,即使用扩展的.ss请求

.ss word_space_size [sentence_space_size]

更改单词之间的空格大小。它以当前字体的空间宽度参数的1/12作为单位。最初,word_space_size和sentence_space_size均为12。在填充模式下,这些值指定了最小距离。

如果给ss请求传递了两个参数,则第二个参数将设置句间距大小。如果未提供第二个参数,则句间距大小将设置为word_space_size。句间距大小在以下两种情况下使用:如果在填充模式下,句子的结尾出现在一行的末尾,则会添加一个单词间距和一个句间距;如果在一行中句子结尾后跟着两个空格,则第二个空格是句间距。如果从未向ss请求传递第二个参数,则UNIX troff的行为与GNU troff相同。在GNU troff和UNIX troff中,句子应始终后跟换行符或两个空格。

因此,您可以通过发出以下请求来指定“句间距”为零宽度:
.ss 12 0

据我所知,这是groff的一个扩展;heirloom troff支持它,但旧版的dwb派生版本可能不支持。
例如:
This is line 1. This is line 2.

This is line 1.  This is line 2.

This is line 1.
This is line 2.

SET SENTENCE SPACING

.ss 12 0
This is line 1. This is line 2.

This is line 1.  This is line 2.

This is line 1.
This is line 2.

结果:

$ groff -T ascii spaces.tr  |sed -n -e/./p
This is line 1. This is line 2.
This is line 1.  This is line 2.
This is line 1.  This is line 2.
SET SENTENCE SPACING
This is line 1. This is line 2.
This is line 1. This is line 2.
This is line 1. This is line 2.

2
所以以下方法可行,但我希望有更好的选择。
This is line 1. \
This is line 2.

渲染为

This is line 1. This is line 2.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接