Как я могу оправдать простой текст в Linux?

7673
Exp HP

Я сочиняю простой текстовый документ (.txt) с выровненными по левому и правому краю абзацами. Я вручную добавляю пробелы, разбивая слова с дефисами, если необходимо, до тех пор, пока строки не станут одинаковой длины. Чтобы использовать пример из моего документа, такой абзац:

Эти призрачные шары имеют некоторые странные свойства, некоторые аккуратные, некоторые интересно, а другие просто показательны для ленивого дизайна. Они почти все вызвано тем же недостатком дизайна: игра воспринимает их слишком как обычные мячи.

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

Эти призрачные шары имеют некоторые странные свойства, некоторые аккуратные, некоторые интересные, а другие просто ленивый дизайн. Они почти все вызваны тот же недостаток дизайна: игра воспринимает их слишком обычные шары.

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

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

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

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

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

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

15
Зачем? Мне искренне любопытно. Одно из преимуществ обычного текста в том, что он не зависит от форматирования, и вы можете добавить его в OpenOffice или TeX и сделать его красивым. Что вы используете для этого? Doug Harris 13 лет назад 1
Кроме того, вы ищете эту утилиту для выполнения полу-интеллектуальных переносов тоже? Doug Harris 13 лет назад 0
Причина в том, что это руководство для GameFAQ. GameFAQs принимает только простой текст, документы TXT. Что касается переноса слов, я бы предпочел, но это не является абсолютным требованием. Exp HP 13 лет назад 1

5 ответов на вопрос

18
sml

тебе нужно 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

Я проверил это и нашел его довольно обидчивым. Иногда это приводит к ошибкам даже в условиях, которые кажутся наиболее невинными. По сравнению с командой emacs это невозможно. Exp HP 13 лет назад 1
Можете привести пример? Это кажется довольно стабильным для меня. sml 13 лет назад 0
Команда, которую вы дали, неверна. Это должен быть `par w80 j1`, а не` par 80j`. Редактировать: Или `par jw80` Gandaro 9 лет назад 1
6
dmckee

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

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

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

а также

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

Некоторые версии `fmt` не имеют нескольких из этих опций и не могут сделать полное обоснование. Dennis Williamson 13 лет назад 0
Извините, но вы точно не сказали, как именно выровнять текст с помощью `fmt`. Кроме того, как сказал Деннис, в моей системе на странице руководства нет такого текста, как вы упомянули, и не говорится, как это оправдать. jamadagni 8 лет назад 0
4
Doug Harris

Вы можете сделать это в Emacs, используя fill-paragraphили 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 прямо сейчас, чтобы взглянуть на эту функцию. Exp HP 13 лет назад 0
Ладно, потребовалось немало усилий, чтобы привыкнуть к необычному интерфейсу и терминологии (необычно по сегодняшним меркам, по крайней мере), но это здорово. Cx f 53, M-1 Mq. Это, конечно, проще, чем мой План Б (который должен был написать мой собственный скрипт на Ruby, который оправдывал текст), и к моему большому удовлетворению, он даже распознает отступы и учитывает их при оправдании. Ницца. Exp HP 13 лет назад 0
Как установить для столбца заполнения значение 53 или любое другое значение, которое я хочу? И как я могу проверить, что это в настоящее время? HelloGoodbye 8 лет назад 0
Кстати, ссылка в вашем ответе не работает. HelloGoodbye 8 лет назад 1
Я обновил ссылку Doug Harris 8 лет назад 0
Чтобы проверить текущее значение, проверьте значение переменной `fill-column` (` Ch v`, чтобы показать переменную, затем введите имя). Чтобы установить, нажмите `Cx f` Doug Harris 8 лет назад 0
1
Dennis Williamson

Вот сценарий 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. 
Отличное решение, которое, к сожалению, я не могу использовать. Около месяца назад я пытался получить TeX в Perl, потому что я хотел использовать TeX :: Hyphen (для другой, но связанной с этим вопросом проблемы). IIRC, я обнаружил, что репозитории Ubuntu имеют только определенные части библиотеки TeX, и Hyphen среди них нет. Я попытался вручную установить библиотеку Perl TeX, но это не сработало. В итоге я сломал Perl и потратил следующие несколько часов на устранение ущерба. Я не хочу дать ему еще один шанс. Хотелось бы, чтобы у меня было достаточно повторений, чтобы хотя бы дать вам +1 за этот ответ. Exp HP 13 лет назад 0
@Exp HP: Мне жаль, что у тебя было так много проблем. У меня это в системе Ubuntu 9.10, и у меня нет проблем. Dennis Williamson 13 лет назад 0
0
Daniel

I use Nano.

Rename the file to a shorter name (8.3). Open in Nano, then Alt-J to justify the whole document. Alt-O to save. Then Alt-X to exit. Then rename the file back to the original name.

Might sound cumbersome but it saved me a lot of time over doing the manual Enter, Delete, End to limit the columns to 90. Nano defaults to 72. I can live with that.

Какова магия короткого имени файла? Jawa 10 лет назад 2