16

Я сочиняю простой текстовый документ (.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.

будет выглядеть так:

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.

Как я могу это сделать?

Можно добавлять пробелы (не разбивая слова на строки), но мне нужно контролировать целевую ширину абзаца (в символах #). Приведенный выше пример оправдан до 53 символов в строке, но ширина строки в моем реальном документе варьируется от 60 до 79.

Также было бы здорово, если бы был текстовый редактор с такой функцией.

Я уже попробовал:

  • OpenOffice и TeX: они просто используют форматирование, чтобы изменить способ отображения текста.
  • Команда Nano Justify не считается, потому что она не делает линии одинаковой ширины.

Я принял следующий ответ, потому что это был тот, который работал лучше всего для меня. Я нашел команды заполнения emacs самыми простыми в использовании среди ответов, и я ценю то, как они распознают даже отступы без пробелов (для таких вещей, как # и // комментарии). Однако все остальные ответы занимают свои собственные ниши, и я рекомендую другим, посетившим этот вопрос, взглянуть на них.

5 ответов5

18

тебе нужен par

например, чтобы получить его на Ubuntu, выполните:

sudo aptitude install par

для выравнивания text.txt (на ширине 80 символов), сохраняя в newtext.txt:

par j1w80 < text.txt > newtext.txt

использовать par в vim или gvim:

:set formatprg=par\ j1w80

затем выделите текст, который вы хотите отформатировать, и используйте команду gq .

для получения дополнительной информации см. man par

6

fmt - решение старой школы

Со страницы руководства:

fmt [-cmnps] [-d chars] [-l num] [-t num] [цель [максимум] | ширина | -w ширина] [файл ...]

а также

Длина цели по умолчанию равна 65, а максимальная на 10 больше, чем длина цели. В качестве альтернативы, один параметр ширины может быть задан либо путем добавления к нему дефиса, либо с помощью -w. Например, fmt -w 72'', fmt -72 '' и `` fmt 72 72 '' выдают одинаковый результат.

5

Вы можете сделать это в Emacs, используя fill-paragraph или fill-region (fill docs).

Вам необходимо передать числовой префиксный аргумент. Столбец заполнения по умолчанию - 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

Вот сценарий 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.
0

Я использую Nano.

Переименуйте файл в более короткое имя (8.3). Откройте Nano, затем Alt - J, чтобы оправдать весь документ. Alt - O, чтобы сохранить. Затем Alt - X для выхода. Затем переименуйте файл обратно в исходное имя.

Может показаться громоздким, но это сэкономило мне много времени по сравнению с ручным вводом, удалением, окончанием, чтобы ограничить столбцы до 90. Нано по умолчанию 72. Я могу жить с этим.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .