Jak mogę uzasadnić zwykły tekst w systemie Linux?

17

Tworzę dokument w formacie zwykłego tekstu (.txt), który zawiera akapity wyrównane do lewej i prawej strony. Ręcznie dodaję spacje, w razie potrzeby dzieląc słowa łącznikami, aż wiersze mają jednolitą długość. Aby użyć przykładu z mojego dokumentu, akapit taki jak ten:

Te fantazyjne kule mają pewne dziwne właściwości, niektóre schludne, niektóre
ciekawe, a inne tylko wskazują na leniwy design. Są prawie wszyscy
spowodowane tą samą wadą projektową: gra traktuje je zbyt często jak zwykłe
kulki.

skończy wyglądać tak:

Te fantasmatyczne kule mają dziwne właściwości,
niektóre schludne, niektóre interesujące, a inne tylko indyk-
leniwy design. Prawie wszystkie są spowodowane przez
ta sama wada projektu: gra traktuje ich zbyt podobnie
zwykłe piłki.

W jaki sposób mogę to zrobić?

Można dodawać spacje (bez dzielenia słów na linie), ale muszę kontrolować docelową szerokość akapitu (w # znakach). Powyższy przykład jest uzasadniony do 53 znaków w wierszu, ale szerokość wiersza w moim rzeczywistym dokumencie wynosi od 60 do 79.

Byłoby również świetnie, gdyby istniał edytor tekstu z taką funkcją.

Próbowałem już:

  • OpenOffice i TeX : Po prostu używają formatowania, aby zmienić sposób wyświetlania tekstu.
  • Polecenie justowania nano nie ma znaczenia, ponieważ tak naprawdę nie wyrównuje szerokości linii.

Zaakceptowałem następującą odpowiedź, ponieważ ta była dla mnie najlepsza . Znalazłem najłatwiejsze w użyciu polecenia wypełniania emacsa i doceniam sposób, w jaki rozpoznaje nawet wcięcia niebiałe (dla rzeczy takich jak # i // komentarze). Jednak wszystkie pozostałe odpowiedzi wypełniają swoje własne nisze i polecam innym osobom odwiedzającym to pytanie, aby również je zobaczyć.

Exp HP
źródło
1
Dlaczego? Jestem naprawdę ciekawa. Jedną z zalet zwykłego tekstu jest to, że jest niezależny od formatowania i można go spoliczkować do OpenOffice lub TeX i sprawić, że będzie ładnie wyglądać. Jaki jest twój cel?
Doug Harris
Czy też szukasz tego narzędzia do pół-inteligentnego dzielenia wyrazów?
Doug Harris
1
Powodem jest to, że jest to przewodnik po GameFAQ. GameFAQ przyjmuje tylko zwykły tekst, dokumenty TXT. Jeśli chodzi o dzielenie wyrazów, wolałbym to, ale nie jest to absolutny wymóg.
Exp HP

Odpowiedzi:

5

Możesz to zrobić w emacsie, używając fill-paragraphlub fill-region( wypełnij dokumenty ).

Musisz przekazać argument prefiksu numerycznego. Domyślna kolumna wypełnienia to 70.

Wybierz tekst do wypełnienia i wykonaj M-3 M-x fill-region.

Dla przykładowego tekstu ustawiłem kolumnę wypełnienia na 53 i otrzymałem:

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.
Doug Harris
źródło
To wygląda dobrze. Instaluję teraz pakiet dla emacsa, aby zobaczyć tę funkcję.
Exp HP
Ok, zajęło mi trochę majsterkowania, aby przyzwyczaić się do nietypowego interfejsu i terminologii (przynajmniej nietypowych jak na dzisiejsze standardy), ale to świetnie. Cx f 53, M-1 Mq. Jest to z pewnością łatwiejsze niż mój Plan B (którym byłoby napisanie własnego skryptu Ruby, który uzasadniał tekst), i ku mojemu zadowoleniu, nawet rozpoznaje wcięcia i bierze to pod uwagę przy uzasadnianiu. Ładny.
Exp HP
Jak ustawić kolumnę wypełnienia na 53 lub dowolną inną wartość, którą chcę w związku z tym? Jak mogę sprawdzić, co to jest obecnie?
HelloGoodbye,
1
Nawiasem mówiąc, link w twojej odpowiedzi jest zepsuty.
HelloGoodbye,
Zaktualizowałem link
Doug Harris,
18

potrzebujesz par

np. aby pobrać na Ubuntu, wykonaj:

sudo aptitude install par

uzasadnić text.txt(przy szerokości 80 znaków), oszczędzając w newtext.txt:

par j1w80 < text.txt > newtext.txt

aby używać par w vim lub gvim:

:set formatprg=par\ j1w80

następnie zaznacz tekst, który chcesz sformatować, i użyj gqpolecenia.

Aby uzyskać więcej informacji, zobacz man par

sml
źródło
1
Przetestowałem to i stwierdziłem, że jest dość drażliwy. Czasami powoduje błędy, nawet w najbardziej niewinnych okolicznościach. W porównaniu z poleceniem emacs jest to bezużyteczne.
Exp HP
Czy możesz podać przykład? Wydaje mi się to dość stabilne.
sml
1
Wydane polecenie jest nieprawidłowe. To musi być par w80 j1, nie par 80j. Edytuj: Lubpar jw80
Gandaro
6

fmt jest oldschoolowym rozwiązaniem

Ze strony podręcznika:

fmt [-cmnps] [-d znaki] [-l num] [-t num] [bramka [maksymalna] | szerokość | -w szerokość] [plik ...]

i

Długość celu domyślnie wynosi 65, a maksymalnie 10 więcej niż długość celu. Alternatywnie, pojedynczy parametr szerokości można określić, dodając do niego łącznik lub używając -w. Na przykład fmt -w 72'',fmt -72 '' i `` fmt 72 72 '' dają identyczne wyniki.

dmckee
źródło
Niektóre wersje fmtnie mają kilku z tych opcji i nie mogą w pełni uzasadnić.
Wstrzymano do odwołania.
Przepraszamy, ale nie powiedziałeś wyraźnie, jak dokładnie uzasadnić tekst za pomocą fmt. Ponadto, jak powiedział Dennis, w moim systemie strona podręcznika nie zawiera żadnego tekstu, o którym wspominałeś i nie mówi, jak uzasadnić.
jamadagni
2

Oto skrypt o nazwie Perl,paradj który może wykonać pełne uzasadnienie i dzielenie wyrazów.

Oto diffkilka zmian, które wprowadziłem, aby wesprzeć dodanie lewego marginesu:

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";

To polecenie:

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

daje wynik bardzo zbliżony do twojego przykładu (dodatkowe spacje znajdują się w różnych miejscach).

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.
Wstrzymano do odwołania.
źródło
Świetne rozwiązanie, którego niestety nie mogę użyć. Mniej więcej miesiąc temu próbowałem uzyskać TeX w Perlu, ponieważ chciałem użyć TeX :: Hyphen (w przypadku innego, ale powiązanego problemu z tym pytaniem). IIRC, odkryłem, że repozytoria Ubuntu mają dostępne tylko niektóre części biblioteki TeX, a Hyphen nie ma wśród nich. Próbowałem ręcznie zainstalować bibliotekę Perl TeX, ale nie wyszło to dobrze. W końcu złamałem Perla i następne kilka godzin poświęciłem na zniszczenie obrażeń. Niechętnie wypuszczę to jeszcze raz. Jednak chciałbym mieć wystarczającą liczbę przedstawicieli, aby przynajmniej dać +1 za tę odpowiedź.
Exp HP
@Exp HP: Przepraszam, że miałeś tyle problemów. Mam to w systemie Ubuntu 9.10 i nie mam problemów.
Wstrzymano do odwołania.
0

Używam Nano.

Zmień nazwę pliku na krótszą nazwę (8.3). Otwórz w Nano, a następnie Alt- Jaby uzasadnić cały dokument. Alt- Oaby zapisać. Następnie Alt- Xaby wyjść. Następnie zmień nazwę pliku z powrotem na pierwotną nazwę.

Może to wydawać kłopotliwe, ale uratował mnie dużo czasu na robienie podręcznik Enter, Delete, Endaby ograniczyć do kolumny 90. Nano domyślnych do 72. Mogę z tym żyć.

Daniel
źródło
2
Jaka jest magia skróconej nazwy pliku?
Jawa
0

Można spróbować reformat.

Możesz zainstalować go na Debian / Ubuntu, uruchamiając sudo apt-get install reformat.

Użyj tego w ten sposób:

reformat -w 80 -j < mytext.txt

Wyjustowany tekst zostanie zapisany na standardowe wyjście.

Strumień
źródło