Closed da-liii closed 9 years ago
多余空格的问题如图所示:
出现多余空格的原因是 man 工具默认将会对文档每行分散对齐,对齐依据是半角空格。这对英文等文档很正常,因为英文词间都是空格,分散对齐不会显得奇怪,实在有哪行排不开还会从英文单词分词处剖开分两行,用连字符连接。
但是中文文档的问题是,英文空格很少,纯中文没有空格。但是中英文排版时如果出现了空格,就会被排版系统认为是一个十分长的词;而中文又不适用分词换行系统,故常常会出现一行内容比行长度少很多的情况,导致分散对齐时出现很多空白。这不仅是 ronn 的问题,最重要的是 man 的排版没有对东亚文字做过特殊处理。
段落不换行不是解决方法;如果持续不换行,排版系统会想尽可能进行换行:包括在空格处换行,或者对中英文混排时的英文进行分词换行。
一个可能的解决办法是禁用分散对齐;统一左对齐,使得空格都在一行右侧。请参考由 docbook 生成的 groff 文档,在 XML 文档根元素指定了 xml:lang 为 zh_cn 后,groff 文档采用的默认选项即有采用左对齐的命令。
GNU现在主打texinfo,man排版的后端groff目前处于无人维护的状态,所以希望短期解决东亚字体排版的问题是不太可能了。
groff确实很老了,很多代码不适合现在了。作为一个排版工具,它里面还包括了很多跟硬件打交道的东西, 不仅仅是对中亚文字,即便是英语本身的排版也是乱七八糟,就像wayland会取代X,或许在不久的将来groff就会被取代吧。不过开源界向来行动缓慢,我觉得还有的等,我们在这里做的事至少还可以帮助一大批人。
而且现在大多人还是很喜欢使用man手册,喜欢它的vim样式的快捷键绑定,国内国外很多人都在想变通的办法,现在一些软件如aria2c通过命令的help参数来实现手册,然后重定向到less来看,效果也是半斤八两吧。毕竟less支持的格式更少。当然这个项目是跟man手册有关的,我们就事论事吧。
hoiset说的办法我没有尝试过,不过还有一种方法在wiki里面有介绍,就是固定每行的列数,当然这也是本项目的精髓了,你可以通过COLUMS变量来设置换行,但shell emulator也会像man传递一个列数,而且优先级更高,如果能把这个问题解决掉,就不会出现你图片中的问题了,我有时间会继续研究这个问题。
最近比较忙,这些都是在手机上打的,不能言明的地方请多包涵。
感谢。
解决方案: