Wie kann ich einfachen Text unter Linux ausrichten?

17

Ich erstelle ein Nur-Text-Dokument (.txt) mit rechts- und linksbündigen Absätzen. Ich füge manuell Leerzeichen hinzu und brich Wörter bei Bedarf mit Bindestrichen, bis die Linien eine einheitliche Länge haben. So verwenden Sie ein Beispiel aus meinem Dokument:

Diese phantasmischen Kugeln haben einige seltsame Eigenschaften, einige ordentliche, einige
interessant, und andere nur ein Hinweis auf 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
faulen Designs. Sie werden fast alle durch die verursacht
Gleicher Designfehler: Das Spiel behandelt sie zu sehr wie
regelmäßige Bälle.

Wie kann ich das machen?

Es ist in Ordnung, Leerzeichen hinzuzufügen (ohne Wörter über Zeilen zu setzen), aber ich muss die Zielbreite des Absatzes (in # Zeichen) steuern. Das obige Beispiel ist auf 53 Zeichen pro Zeile ausgerichtet, aber die Zeilenbreite in meinem tatsächlichen Dokument variiert von 60 bis 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 nur die Formatierung, um die Darstellung des Texts zu ändern.
  • Der Justify-Befehl von nano zählt nicht, weil dadurch die Linienbreite nicht einheitlich wird.

Ich habe die folgende Antwort akzeptiert, weil sie für mich am besten funktioniert hat . Ich fand, dass die emacs-Füllbefehle unter den Antworten am einfachsten zu verwenden sind, und ich schätze, dass sie sogar Einrückungen ohne Leerzeichen erkennen (für Dinge wie # und // Kommentare). Die anderen Antworten füllen jedoch alle ihre eigenen Nischen und ich empfehle anderen, diese Frage zu besuchen, um sie ebenfalls anzusehen.

Exp HP
quelle
1
Warum? Ich bin wirklich 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 gut aussieht. Was nützt dir das?
Doug Harris
Suchen Sie nach diesem Dienstprogramm, um auch eine halbintelligente Silbentrennung durchzuführen?
Doug Harris
1
Der Grund ist, dass es eine Anleitung für GameFAQs ist. GameFAQs akzeptieren nur TXT-Dokumente im Klartext. Was die Silbentrennung angeht, würde ich es vorziehen, aber es ist keine absolute Voraussetzung.
Exp HP

Antworten:

5

Sie können dies in Emacs mit fill-paragraphoder fill-region( Dokumente ausfüllen ) tun .

Sie müssen ein numerisches Präfix-Argument übergeben. Die Standardfüllspalte ist 70.

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

Ich habe die Füllspalte für Ihren Beispieltext auf 53 gesetzt und Folgendes erhalten:

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
quelle
Das sieht gut aus. Ich installiere gerade das Paket für Emacs, um mir diese Funktion anzuschauen.
Exp HP
Okay, es hat einiges an Bastelarbeit gekostet, um sich an die ungewöhnliche Benutzeroberfläche und Terminologie zu gewöhnen (zumindest für heutige Verhältnisse ungewöhnlich), aber das ist großartig. Cx f 53, M & ndash; 1 Mq. Es ist sicherlich einfacher als mein Plan B (der mein eigenes Ruby-Skript geschrieben hätte, das den Text ausrichtete), und zu meiner Zufriedenheit erkennt er sogar Einrückungen und berücksichtigt diese bei der Begründung. Nett.
HP
Wie setze ich die Füllspalte auf 53 oder einen anderen gewünschten Wert? Und wie kann ich überprüfen, was es aktuell ist?
HelloGoodbye
1
Übrigens ist der Link in Ihrer Antwort unterbrochen.
HelloGoodbye
Ich habe den Link aktualisiert
Doug Harris
18

du brauchst par

zB um es auf Ubuntu zu bekommen, mache:

sudo aptitude install par

zu rechtfertigen text.txt(bei einer Breite von 80 Zeichen), speichern in 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

sml
quelle
1
Ich habe das getestet und festgestellt, dass es ziemlich empfindlich ist. Es führt manchmal zu Fehlern, selbst unter den scheinbar harmlosesten Umständen. Dies ist im Vergleich zum Befehl emacs unbrauchbar.
Exp HP
Kannst du ein Beispiel geben? Es scheint mir ziemlich stabil zu sein.
sml
1
Der von Ihnen eingegebene Befehl ist nicht korrekt. Es muss par w80 j1nicht sein par 80j. Edit: Oderpar jw80
Gandaro
6

fmt ist die Old-School-Lösung

Von der Manpage:

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

und

Die Torlänge beträgt standardmäßig 65 und das Maximum 10 mehr als die Torlänge. 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.

dmckee
quelle
Einige Versionen von fmtverfügen nicht über mehrere dieser Optionen und können nicht vollständig gerechtfertigt werden.
Bis auf weiteres angehalten.
Tut mir leid, aber Sie haben nicht genau angegeben, wie Sie Text mithilfe von ausrichten sollen fmt. Wie Dennis bereits sagte, enthält die Manpage auf meinem System keinen der von Ihnen erwähnten Texte und gibt keine Hinweise zur Rechtfertigung.
Jamadagni
2

Hier ist ein Perl-Skript mit dem Namenparadj , das eine vollständige Rechtfertigung und Silbentrennung ermöglicht.

Im diffFolgenden sind einige Änderungen aufgeführt, 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

Erzeugt eine Ausgabe, die Ihrem Beispiel sehr nahe kommt (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.
Bis auf weiteres angehalten.
quelle
Eine großartige Lösung, die ich leider nicht nutzen kann. Vor ungefähr einem Monat habe ich versucht, TeX in Perl zu installieren, weil ich TeX :: Hyphen verwenden wollte (für ein anderes, aber mit dieser Frage verwandtes Problem). IIRC, was ich entdeckte, war, dass die Ubuntu-Repos nur bestimmte Teile der TeX-Bibliothek zur Verfügung haben und Hyphen nicht darunter ist. Ich habe versucht, die Perl TeX-Bibliothek manuell zu installieren, aber das hat nicht gut funktioniert. Am Ende habe ich Perl kaputt gemacht und die nächsten Stunden damit verbracht, den Schaden zu beheben. Ich zögere es, es noch einmal zu versuchen. Ich wünschte, ich hätte genug Repräsentanten, um dir zumindest eine +1 für diese Antwort zu geben.
Exp HP
@Exp HP: Es tut mir leid, dass du so viel Ärger hattest. Ich habe dies auf einem Ubuntu 9.10-System und ich habe keine Probleme.
Bis auf weiteres angehalten.
0

Ich benutze Nano.

Benennen Sie die Datei in einen kürzeren Namen um (8.3). Öffnen Sie in Nano, dann Alt- Jauf das gesamte Dokument zu rechtfertigen. Alt- um Ozu retten. Dann Alt- Xzum Verlassen. 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.

Daniel
quelle
2
Was ist die Magie hinter dem kurzen Dateinamen?
Jawa
0

Sie können es versuchen reformat.

Sie können es unter Debian / Ubuntu installieren, indem Sie es ausführen sudo apt-get install reformat.

Benutze es so:

reformat -w 80 -j < mytext.txt

Der ausgerichtete Text wird in die Standardausgabe geschrieben.

Fluss
quelle