我怎样才能证明Linux中的纯文本?


16

我正在撰写一个包含左右对齐段落的纯文本(.txt)文档。我手动添加空格,必要时用连字符打破单词,直到线条长度均匀。要使用我的文档中的示例,可以使用以下段落:

这些幻想球有一些奇怪的属性,有些整洁,有些
有趣,其他只是表明懒惰的设计。他们几乎都是
由同样的设计缺陷引起的:游戏对待它们太像常规一样
球。

最终看起来像这样:

这些幻想球有一些奇怪的属性,
有些整洁,有些有趣,有些只是指示
懒惰的设计。他们几乎都是由
相同的设计缺陷:游戏对待它们太像了
常规球。

我怎样才能做到这一点?

可以添加空格(不会在行上打破单词),但我需要控制段落的目标宽度(以#字符表示)。上面的例子证明每行53个字符,但实际文档中的行宽从60到79不等。

如果有一个具有这种功能的文本编辑器,那也很棒。

我已经尝试过:

  • OpenOfficeTeX:他们只是使用格式来改变文本的显示方式。
  • nano的Justify命令不计算,因为它实际上并没有使线条均匀宽度。

我接受了以下答案,因为它是最适合我的那个。我发现emacs填充命令在答案中最容易使用,我很欣赏它甚至可以识别非空格缩进(对于像#和//注释这样的东西)。然而,其他答案都填补了他们自己的利基,我建议其他人访问这个问题来查看它们。


1
为什么?我真的很好奇。纯文本的一个优点是它独立于格式化,你可以将它打成Op​​enOffice或TeX并使它看起来不错。你对此有什么用?
道格哈里斯2010年

另外,您是否正在寻找此实用程序来进行半智能连字符?
道格哈里斯2010年

1
原因是因为它是GameFAQs的指南。GameFAQs只采用纯文本,TXT文档。至于连字符,我更喜欢它,但它不是绝对的要求。
Exp HP 2010年

Answers:


5

您可以使用fill-paragraph或在emacs中执行此操作fill-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.

这看起来不错。我正在为emacs安装软件包以查看此功能。
HP 2010年

好吧,习惯了不寻常的界面和术语需要相当多的修补(至少在今天的标准上是不寻常的),但这很好。Cx f 53,M-1 Mq。它肯定比我的计划B更容易(它本来就是编写我自己的Ruby脚本来证明文本的合理性),而且令我满意的是,它甚至可以识别缩进并在证明时将其考虑在内。尼斯。
HP 2010年

如何将填充列设置为53或我想要的任何其他值?我该如何检查它目前是什么?
HelloGoodbye 2015年

1
顺便说一句,你的答案中的链接被打破了。
HelloGoodbye 2015年

我更新了链接

18

你需要 par

例如,在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


1
我对此进行了测试,发现它非常敏感。即使在看似最无辜的情况下,它有时也会导致错误。与emacs命令相比,这是不可用的。
HP 2010年

能给我举个例子吗?对我来说似乎很稳定。
sml

1
你给出的命令不正确。它必须是par w80 j1,而不是par 80j。编辑:Orpar jw80
Gandaro 2014年

6

fmt 是老派的解决方案

从手册页:

fmt [-cmnps] [-d chars] [-l num] [-t num] [goal [maximum] | -width | -w width] [文件...]

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


有些版本fmt没有这些选项中的几个,也无法做到完全合理化。
丹尼斯威廉姆森2010年

抱歉,但您还没有明确说明如何正确使用文本fmt。此外,正如Dennis所说,在我的系统上,手册页没有提供您提到的任何此类文本,也没有说明如何证明。
jamadagni 2015年

2

这是一个名为Perl的脚本paradj,可以完全对齐和连字。

这里diff显示了我为支持添加左边距所做的一些更改:

12c12
< my ($indent, $newline);
---
> my ($indent, $margin, $newline);
15a16
>   "margin:i" => \$margin,
21a23
> $margin = 0 if (!$margin);
149a152
>     print " " x $margin;
187a191,193
>   print "--margin=n (or -m=n or -m n)  Add a left margin of n ";
>   print "spaces\n";
>   print "                                (defaults to 0)\n";

这个命令:

./paradj.pl -h --width=53 --both --indent=0 inputfile

产生的输出非常接近你的例子(额外的空间在不同的地方)。

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

一个很棒的解决方案,遗憾的是,我无法使用。大约一个月前,我试图在Perl中使用TeX,因为我想使用TeX :: Hyphen(针对此问题的另一个相关问题)。IIRC,我发现Ubuntu repos只有TeX库的某些部分可用,而Hyphen不在其中。我尝试手动安装Perl TeX库,但效果不佳。我最终破坏了Perl,并在接下来的几个小时里撤消了损坏。我不愿意再给它一次。我希望我有足够的代表,至少给你+1这个答案。
HP 2010年

@Exp HP:对不起你有这么多麻烦。我在Ubuntu 9.10系统上有这个,我没有问题。
丹尼斯威廉姆森2010年

0

我用Nano。

将文件重命名为较短的名称(8.3)。在Nano中打开,然后Alt- J为整个文档辩护。Alt- O保存。然后Alt- X退出 然后将文件重命名为原始名称。

听起来很麻烦,但它救了我很多时间在做手工EnterDeleteEnd向列限制为90纳米默认为72.我可以忍受的。


2
短文件名背后的魔力是什么?
Jawa 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.