Wie kann ich Klartext in Linux rechtfertigen?

7791
Exp HP

Ich schreibe ein Textdokument (.txt), das links und rechts ausgerichtete Absätze hat. Ich füge manuell Leerzeichen hinzu und unterhalte die Wörter ggf. mit Bindestrichen, bis die Zeilen gleich lang sind. Um ein Beispiel aus meinem Dokument zu verwenden, einen Absatz wie folgt:

Diese phantasmischen Kugeln haben einige merkwürdige Eigenschaften, einige ordentlich, manche interessant, und andere zeigen nur faul Design. Sie sind fast alle verursacht durch den gleichen Designfehler: Das Spiel behandelt sie zu sehr wie normal Bälle.

wird am Ende so aussehen:

Diese phantasmischen Kugeln haben einige seltsame Eigenschaften, einige ordentlich, einige interessant und andere nur faul Design. Sie sind fast alle durch die verursacht gleicher Designfehler: Das Spiel behandelt sie zu sehr reguläre Bälle.

Wie kann ich das machen?

Es ist in Ordnung, Leerzeichen hinzuzufügen (ohne Wörter über Zeilen zu brechen), aber ich muss die Zielbreite des Absatzes steuern (in # Zeichen). Das obige Beispiel ist mit 53 Zeichen pro Zeile gerechtfertigt, aber die Linienstärke in meinem aktuellen Dokument variiert zwischen 60 und 79.

Es wäre auch toll, wenn es einen Texteditor mit einer solchen Funktion gäbe.

Ich habe es schon versucht:

  • OpenOffice und TeX : Sie verwenden lediglich Formatierungen, um die Darstellung des Textes zu ändern.
  • Der Justify-Befehl von Nano zählt nicht, weil er die Linien tatsächlich nicht einheitlich macht.

Ich habe die folgende Antwort akzeptiert, weil sie für mich am besten funktioniert hat . Ich fand die Emacs-Fill-Befehle unter den Antworten am einfachsten zu verwenden, und ich schätze es, wie sie auch Einrückungen von Nicht-Whitespaces erkennt (für Dinge wie # und //). Die anderen Antworten füllen jedoch alle ihre eigenen Nischen und ich empfehle anderen, diese Frage zu besuchen, um sie ebenfalls zu betrachten.

15
Warum? Ich bin echt neugierig. Einer der Vorteile von Klartext ist, dass er unabhängig von der Formatierung ist und Sie ihn in OpenOffice oder TeX einfügen können, damit er schön aussieht. Wozu verwendest du das? Doug Harris vor 14 Jahren 1
Suchen Sie auch nach diesem Dienstprogramm, um auch halbintelligente Silbentrennung durchzuführen? Doug Harris vor 14 Jahren 0
Der Grund ist, dass dies ein Leitfaden für GameFAQs ist. GameFAQs akzeptiert nur Klartext, TXT-Dokumente. Was die Silbentrennung angeht, würde ich es vorziehen, aber es ist keine absolute Voraussetzung. Exp HP vor 14 Jahren 1

5 Antworten auf die Frage

18
sml

du brauchst par

Um es zB auf Ubuntu zu bekommen, tun Sie:

sudo aptitude install par 

zu rechtfertigen text.txt(in der Breite von 80 Zeichen), Einsparung von newtext.txt:

par j1w80 < text.txt > newtext.txt 

par in vim oder gvim verwenden:

:set formatprg=par\ j1w80 

Markieren Sie dann den zu formatierenden Text und verwenden Sie den gqBefehl.

Weitere Informationen finden Sie unter man par

Ich habe das getestet und fand es ziemlich empfindlich. Dies führt manchmal zu Fehlern, auch wenn die Umstände am unschuldigsten erscheinen. Dies ist im Vergleich zum Befehl emacs unbrauchbar. Exp HP vor 14 Jahren 1
Kannst du ein Beispiel geben? Es scheint mir ziemlich stabil zu sein. sml vor 14 Jahren 0
Der Befehl, den Sie gegeben haben, ist nicht korrekt. Es muss "par w80 j1" sein, nicht "par 80j". Edit: Oder "par jw80" Gandaro vor 10 Jahren 1
6
dmckee

fmt ist die Lösung der alten Schule

Aus der Manpage:

fmt [-cmnps] [-d Zeichen] [-l num] [-t num] [Ziel [Maximum] | -Breite | -w width] [Datei ...]

und

Die Ziellänge ist standardmäßig auf 65 und das Maximum auf 10 mehr als die Ziellänge eingestellt. Alternativ kann ein einzelner Breitenparameter angegeben werden, indem entweder ein Bindestrich vorangestellt oder -w verwendet wird. Beispielsweise fmt -w 72'',erzeugen fmt -72 '' und `` fmt 72 72 '' alle eine identische Ausgabe.

Einige Versionen von `fmt` haben einige dieser Optionen nicht und können keine vollständige Rechtfertigung geben. Dennis Williamson vor 14 Jahren 0
Es tut uns leid, aber Sie haben nicht eindeutig gesagt, wie Sie den Text mit 'fmt' genau ausrichten können. Wie bereits gesagt, liefert die Manpage auf meinem System keinen Text, wie Sie erwähnt haben, und sagt nicht, wie Sie dies rechtfertigen sollen. jamadagni vor 8 Jahren 0
4
Doug Harris

Sie können dies in emacs tun, indem Sie fill-paragraphoder fill-region(( doc docs )) verwenden.

Sie müssen ein numerisches Präfixargument übergeben. Die Standardfüllspalte ist 70.

Wählen Sie den zu befüllenden Text aus M-3 M-x fill-region.

Ich habe die Füllungsspalte für Ihren Beispieltext auf 53 gesetzt und erhielt:

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. 
Das sieht gut aus. Ich installiere das Paket für emacs jetzt, um einen Blick auf diese Funktion zu werfen. Exp HP vor 14 Jahren 0
Okay, es dauerte ein wenig, um sich an die ungewöhnliche Schnittstelle und Terminologie zu gewöhnen (zumindest für heutige Verhältnisse ungewöhnlich), aber das ist großartig. Cxf 53, M-1 Mq. Es ist auf jeden Fall einfacher als mein Plan B (der mein eigenes Ruby-Skript geschrieben hätte, das den Text rechtfertigt), und zu meiner Zufriedenheit erkennt er sogar die Einrückung und berücksichtigt dies bei der Rechtfertigung. Nett. Exp HP vor 14 Jahren 0
Wie stelle ich die Füllungsspalte auf 53 oder einen anderen Wert ein, den ich dafür möchte? Und wie kann ich überprüfen, was es aktuell ist? HelloGoodbye vor 9 Jahren 0
Der Link in Ihrer Antwort ist übrigens unterbrochen. HelloGoodbye vor 9 Jahren 1
Ich habe den Link aktualisiert Doug Harris vor 9 Jahren 0
Um den aktuellen Wert zu überprüfen, überprüfen Sie den Wert der Variablen "fill-column" ("Ch v", um die Variable anzuzeigen, geben Sie dann den Namen ein). Zum Einstellen drücken Sie "Cx f" Doug Harris vor 9 Jahren 0
1
Dennis Williamson

Hier ist ein Perl-Skriptparadj, das vollständige Ausrichtung und Silbentrennung ausführen kann.

Hier sind diffeinige Änderungen, die ich vorgenommen habe, um das Hinzufügen eines linken Rands zu unterstützen:

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

Dieser Befehl:

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

produziert die Ausgabe sehr nahe an Ihrem Beispiel (die zusätzlichen Leerzeichen befinden sich an verschiedenen Stellen).

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. 
Eine großartige Lösung, die ich leider nicht verwenden kann. Vor etwa einem Monat habe ich versucht, TeX in Perl zu bekommen, weil ich TeX :: Hyphen verwenden wollte (für ein anderes, aber verwandtes Problem mit dieser Frage). IIRC, was ich entdeckte, war, dass die Ubuntu-Repos nur bestimmte Teile der TeX-Bibliothek zur Verfügung haben, und Hyphen ist nicht darunter. Ich habe versucht, die Perl TeX-Bibliothek manuell zu installieren, aber das hat nicht gut funktioniert. Am Ende habe ich Perl gebrochen und die nächsten Stunden damit verbracht, den Schaden zu beheben. Ich zögere, es noch einmal zu versuchen. Ich wünschte, ich hätte genug Vertreter, um Ihnen für diese Antwort zumindest ein +1 zu geben. Exp HP vor 14 Jahren 0
@Exp HP: Es tut mir leid, dass Sie so viel Ärger hatten. Ich habe dies auf einem Ubuntu 9.10 System und ich habe keine Probleme. Dennis Williamson vor 14 Jahren 0
0
Daniel

Ich benutze Nano.

Benennen Sie die Datei in einen kürzeren Namen um (8.3). Dann in Nano öffnen Alt- Jum das ganze Dokument zu rechtfertigen. Alt- um Ozu sparen. Dann Alt- um Xzu beenden. Benennen Sie die Datei dann wieder in den ursprünglichen Namen um.

Könnte umständlich klingen, aber es hat mich gerettet viel Zeit über das Handbuch zu tun Enter, Delete, um Enddie Spalten 90. Nano standardmäßig auf 72 zu begrenzen, ich kann damit leben.

Was ist der Zauber hinter dem kurzen Dateinamen? Jawa vor 11 Jahren 2