如何在 Linux 中对齐纯文本?

如何在 Linux 中对齐纯文本?

我正在编写一个纯文本 (.txt) 文档,其中包含左右对齐的段落。我手动添加空格,必要时用连字符分隔单词,直到行的长度一致。以我的文档为例,段落如下:

这些幻影球有一些奇怪的特性,有些很巧妙,有些
有些很有趣,有些则只是懒惰的设计。它们几乎都是
都是由相同的设计缺陷造成的:游戏把它们当成普通的
球。

最终看起来会像这样:

这些幻影球有一些奇怪的特性,
有些很巧妙,有些很有趣,还有一些只是表明
懒惰设计造成的。它们几乎都是由
相同的设计缺陷:游戏对待他们太像
普通球。

我怎样才能做到这一点?

可以添加空格(不分行),但我需要控制段落的目标宽度(以 # 个字符为单位)。上面的示例设置为每行 53 个字符,但我的实际文档中的行宽从 60 到 79 不等。

如果有具有此类功能的文本编辑器就太好了。

我已经尝试过了:

  • 开发办公室TeX:他们只是使用格式来改变文本的显示方式。
  • 纳米的 Justify 命令不算数,因为它实际上并没有使线条宽度均匀。

我接受了以下答案,因为它最适合我发现 emacs fill 命令是所有答案中最容易使用的,而且我很欣赏它如何识别非空白缩进(例如 # 和 // 注释)。但是,其他答案都各有千秋,我建议访问此问题的其他人也看看它们。

答案1

您可以在 emacs 中使用fill-paragraphfill-region填写文件)。

您需要传递一个数字前缀参数。默认填充列为 70。

选择要填充的文本并执行M-3 M-x fill-region

我将您的示例文本的填充列设置为 53,并得到:

These phantasmic balls  have some strange properties,
some   neat,  some   interesting,  and   others  just
indicative of lazy  design. They're almost all caused
by  the same design  flaw: The  game treats  them too
much like regular balls.

答案2

你需要par官方网站源代码Repology 上的包状态

例如,要在 ubuntu 上获取它,请执行以下操作:

sudo aptitude install par

对齐text.txt(宽度为 80 个字符),保存为newtext.txt

par j1w80 < text.txt > newtext.txt

在 vim 或 gvim 中使用 par:

:set formatprg=par\ j1w80

然后突出显示要格式化的文本并使用该gq命令。

有关详细信息,请参阅man par

答案3

fmt是老派的解决方案

从手册页中:

fmt [-cmnps] [-d 字符] [-l 数字] [-t 数字] [目标 [最大值] | -宽度 | -w 宽度] [文件 ...]

目标长度默认为 65,最大为比目标长度多 10。或者,可以通过在其前面添加连字符或使用 -w 来指定单个宽度参数。例如,fmt -w 72'',fmt -72'' 和“fmt 72 72”都产生相同的输出。

答案4

您可以尝试 Perl 脚本reformat。但是,它无法正确对齐多字节字符的文本,并且不使用连字符。

您可以通过运行在 Debian/Ubuntu 上安装它sudo apt-get install reformat

使用方式如下:

reformat -w 53 -j < mytext.txt

对齐的文本将被写入标准输出:

These phantasmic balls have  some strange properties,
some  neat,  some   interesting,  and  others    just
indicative of lazy design.  They're almost all caused
by the same  design  flaw: The game  treats  them too
much like regular balls.

相关内容