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


17

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

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

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

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

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

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

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

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

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

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


1
Почему? Мне искренне любопытно. Одно из преимуществ обычного текста в том, что он не зависит от форматирования, и вы можете добавить его в OpenOffice или TeX и сделать его красивым. Что вы используете для этого?
Даг Харрис

Кроме того, вы ищете эту утилиту для выполнения полуинтеллектуальных переносов?
Даг Харрис

1
Причина в том, что это руководство для GameFAQ. GameFAQs принимает только простой текст, документы TXT. Что касается переноса слов, я бы предпочел, но это не является абсолютным требованием.
Опыт HP

Ответы:


5

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

Ладно, потребовалось немало усилий, чтобы привыкнуть к необычному интерфейсу и терминологии (необычно по сегодняшним меркам, по крайней мере), но это здорово. Cx f 53, M-1 Mq. Это, конечно, проще, чем мой План Б (который должен был написать мой собственный скрипт на Ruby, который оправдывал текст), и к моему большому удовлетворению, он даже распознает отступы и учитывает их при оправдании. Ницца.
Опыт HP

Как мне установить для столбца заполнения значение 53 или любое другое значение, которое я хочу? И как я могу проверить, что это в настоящее время?
Здравствуйте, до свидания

1
Кстати, ссылка в вашем ответе не работает.
Здравствуйте, до свидания

Я обновил ссылку
Даг Харрис

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


1
Я проверил это и нашел его довольно обидчивым. Иногда это приводит к ошибкам даже в условиях, которые кажутся наиболее невинными. По сравнению с командой emacs это невозможно.
Опыт HP

Можете привести пример? Это кажется довольно стабильным для меня.
Sml

1
Команда, которую вы дали, неверна. Должно быть par w80 j1, нет par 80j. Изменить: илиpar jw80
Гандаро

6

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

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

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

и

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


Некоторые версии fmtне имеют нескольких из этих опций и не могут сделать полное обоснование.
Приостановлено до дальнейшего уведомления.

Извините, но вы четко не сказали, как именно обосновать использование текста fmt. Кроме того, как сказал Деннис, в моей системе на странице руководства нет такого текста, как вы упомянули, и не говорится, как это оправдать.
Джамадагни

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.

Отличное решение, которое, к сожалению, я не могу использовать. Около месяца назад я пытался получить TeX в Perl, потому что я хотел использовать TeX :: Hyphen (для другой, но связанной с этим вопросом проблемы). IIRC обнаружил, что в репозиториях Ubuntu доступны только определенные части библиотеки TeX, а Hyphen среди них нет. Я попытался вручную установить библиотеку Perl TeX, но это не сработало. Я закончил тем, что сломал Perl и провел следующие несколько часов, устраняя ущерб. Я не хочу дать ему еще один шанс. Хотелось бы, чтобы у меня было достаточно повторений, чтобы хотя бы дать вам +1 за этот ответ.
Опыт HP

@Exp HP: Мне жаль, что у тебя было так много проблем. Я получил это в системе Ubuntu 9.10, и у меня нет проблем.
Приостановлено до дальнейшего уведомления.

0

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

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

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


2
В чем заключается магия короткого имени файла?
Джава

0

Вы можете попробовать reformat.

Вы можете установить его в Debian / Ubuntu, запустив sudo apt-get install reformat.

Используйте это так:

reformat -w 80 -j < mytext.txt

Выровненный текст будет записан в стандартный вывод.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.