Як я можу виправдати звичайний текст у Linux?


17

Я складаю звичайний текстовий (.txt) документ, що має ліві та праві обґрунтовані абзаци. Я вручну додаю пробіли, розбиваючи слова дефісами, якщо потрібно, поки рядки не будуть однаковою довжиною. Щоб використовувати приклад з мого документа, такий абзац:

Ці фантасмічні кульки мають деякі дивні властивості, деякі акуратні, деякі
цікавий та інші, що просто вказують на лінивий дизайн. Вони майже всі
викликаний одним і тим же недоліком дизайну: Гра ставиться до них занадто багато, як до звичайних
кульки.

нарешті виглядає так:

Ці фантасмічні кулі мають деякі дивні властивості,
деякі акуратні, деякі цікаві, а інші просто свідчать про те,
Тип лінивого дизайну. Вони майже всі спричинені
той же недолік дизайну: гра ставиться до них занадто сильно, як
звичайні кульки.

Як я можу це зробити?

Добре додавати пробіли (не розбиваючи слова на рядки), але мені потрібно контролювати цільову ширину абзацу (у # ​​символах). Наведений вище приклад виправданий 53 символами на рядок, але ширина рядка в моєму фактичному документі коливається від 60 до 79.

Було б також чудово, якби був текстовий редактор з такою функцією.

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

  • OpenOffice і TeX : вони просто використовують форматування, щоб змінити спосіб відображення тексту.
  • Нано команда Justify не враховується, оскільки фактично не робить рядки однаковою шириною.

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


1
Чому? Мені справді цікаво. Однією з переваг простого тексту є те, що він не залежить від форматування, і ви можете затиснути його у OpenOffice або TeX і зробити його гарним. Що для цього ви використовуєте?
Дуг Харріс

Крім того, чи шукаєте ви цю утиліту, щоб зробити напівінтелектуальну дефіс також?
Дуг Харріс

1
Причина в тому, що це посібник для GameFAQ. GameFAQ приймає лише звичайний текст, TXT документи. Щодо переносу, я вважаю за краще, але це не є абсолютною вимогою.
Exp HP

Відповіді:


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.

Це добре виглядає. Я встановлюю пакет для emacs зараз, щоб ознайомитися з цією функцією.
Exp HP

Гаразд, потрібно було трохи повозитися, щоб звикнути до незвичайного інтерфейсу та термінології (принаймні, незвично за сьогоднішніми стандартами), але це чудово. Cx f 53, M-1 Mq. Це, звичайно, простіше, ніж мій план B (який повинен був написати власний сценарій Ruby, який виправдав текст), і, на моє задоволення, він навіть визнає відступ і враховує це при виправданні. Приємно.
Exp HP

Як встановити стовпчик заповнення на 53 або на будь-яке інше значення, яке я хочу з цього питання? І як я можу перевірити, що це зараз?
HelloGoodbye

1
До речі, посилання у вашій відповіді порушено.
HelloGoodbye

Я оновив посилання
Дуг Харріс

18

тобі потрібно par

наприклад, щоб отримати його на ubuntu, зробіть:

sudo aptitude install par

виправдати text.txt(при ширині 80 символів), економлячи в newtext.txt:

par j1w80 < text.txt > newtext.txt

використовувати par in vim або gvim:

:set formatprg=par\ j1w80

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

для отримання додаткової інформації див man par


1
Я перевірив це і виявив, що це досить чутливо. Іноді це призводить до помилок навіть за тих, що, здавалося б, найбільш невинні обставини. Порівняно з командою emacs, це непридатно.
Exp HP

Чи можете ви навести приклад? Мені це здається досить стабільним.
sml

1
Команда, яку ви дали, не вірна. Це має бути par w80 j1, ні par 80j. Редагувати: Абоpar jw80
Гандаро

6

fmt - рішення старої школи

На чоловіковій сторінці:

fmt [-cmnps] [-d знаки] [-l число] [-t число] [ціль [максимум] | -ширина | -w width] [файл ...]

і

Довжина цілі за замовчуванням до 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 вручну, але це не вийшло добре. Я врешті-решт зламав Перл і витратив наступні години, скасовуючи збитки. Я неохоче йду на це ще раз. Хочеться, щоб у мене було достатньо представників, щоб принаймні дати вам +1 за цю відповідь.
Exp HP

@Exp HP: Вибачте, що у вас так багато проблем. У мене це в системі Ubuntu 9.10, і у мене немає проблем.
Призупинено до подальшого повідомлення.

0

Я використовую Nano.

Перейменуйте файл на скорочене ім’я (8.3). Відкрийте в Нано, потім Alt- Jдля обгрунтування всього документа. Alt- Oзекономити. Потім Alt- Xдля виходу. Потім перейменуйте файл назад у вихідне ім'я.

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


2
У чому полягає магія короткого імені файлу?
Jawa

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.