Comment puis-je justifier du texte brut sous Linux?

17

Je compose un document en texte brut (.txt) qui contient des paragraphes justifiés à gauche et à droite. J'ajoute manuellement des espaces, brisant les mots avec des tirets si nécessaire, jusqu'à ce que les lignes soient de longueur uniforme. Pour utiliser un exemple de mon document, un paragraphe comme celui-ci:

Ces boules fantasmatiques ont des propriétés étranges, certaines soignées, d'autres
intéressant, et d'autres juste révélateur d'un design paresseux. Ils sont presque tous
causé par le même défaut de conception: le jeu les traite trop comme des
des balles.

finira par ressembler à ceci:

Ces boules fantasmatiques ont d'étranges propriétés,
certains soignés, certains intéressants et d’autres
tive du design paresseux. Ils sont presque tous causés par
même défaut de conception: le jeu les traite trop comme
balles régulières.

Comment puis-je faire ceci?

Il est normal d'ajouter des espaces (sans casser les mots sur les lignes), mais je dois contrôler la largeur cible du paragraphe (en caractères #). L'exemple ci-dessus est justifié à 53 caractères par ligne, mais la largeur de ligne dans mon document réel varie de 60 à 79.

Ce serait également bien s'il y avait un éditeur de texte avec une telle fonctionnalité.

J'ai déjà essayé:

  • OpenOffice et TeX : ils utilisent simplement la mise en forme pour changer la façon dont le texte est affiché.
  • La commande Justifier de nano ne compte pas car elle ne rend pas les lignes uniformément larges.

J'ai accepté la réponse suivante parce que c'était celle qui fonctionnait le mieux pour moi . J'ai trouvé que les commandes de remplissage emacs étaient les plus faciles à utiliser parmi les réponses, et j'apprécie la façon dont il reconnaît même l'indentation non blanche (pour des choses comme # et // commentaires). Cependant, les autres réponses remplissent toutes leurs propres niches et je recommande aux autres personnes visitant cette question de les examiner également.

Exp HP
la source
1
Pourquoi? Je suis vraiment curieux. L'un des avantages du texte brut est qu'il est indépendant du formatage et vous pouvez le gifler dans OpenOffice ou TeX et le rendre joli. Quelle est votre utilité pour cela?
Doug Harris
Aussi, recherchez-vous cet utilitaire pour effectuer également une césure semi-intelligente?
Doug Harris
1
La raison en est que c'est un guide pour les GameFAQ. GameFAQs ne prend que du texte brut, des documents TXT. Quant à la césure, je la préférerais, mais ce n'est pas une exigence absolue.
Exp HP

Réponses:

5

Vous pouvez le faire dans emacs en utilisant fill-paragraphou fill-region( remplir les documents ).

Vous devez passer un argument de préfixe numérique. La colonne de remplissage par défaut est 70.

Sélectionnez le texte à remplir et à faire M-3 M-x fill-region.

J'ai mis la colonne de remplissage à 53 pour votre exemple de texte et j'ai obtenu:

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
la source
Ça à l'air bon. J'installe le package pour emacs en ce moment pour jeter un œil à cette fonctionnalité.
Exp HP
D'accord, il a fallu un peu de bricolage pour s'habituer à l'interface et à la terminologie inhabituelles (inhabituelles au moins selon les normes d'aujourd'hui), mais c'est génial. Cx f 53, M-1 Mq. C'est certainement plus facile que mon plan B (qui aurait été d'écrire mon propre script Ruby qui justifiait le texte), et à ma grande satisfaction, il reconnaît même l'indentation et en tient compte lors de la justification. Agréable.
Exp HP
Comment puis-je définir la colonne de remplissage à 53 ou à toute autre valeur que je veux d'ailleurs? Et comment puis-je vérifier ce que c'est actuellement?
HelloGoodbye
1
Soit dit en passant, le lien dans votre réponse est rompu.
HelloGoodbye
J'ai mis à jour le lien
Doug Harris
18

vous avez besoin par

par exemple pour l'obtenir sur ubuntu, faites:

sudo aptitude install par

justifier text.txt(à la largeur de 80 caractères), en économisant newtext.txt:

par j1w80 < text.txt > newtext.txt

utiliser par dans vim ou gvim:

:set formatprg=par\ j1w80

puis mettez en surbrillance le texte que vous souhaitez formater et utilisez la gqcommande.

pour plus d'informations, voir man par

sml
la source
1
J'ai testé cela et l'ai trouvé assez délicat. Il en résulte parfois des erreurs, même dans ce qui semble être le plus innocent des circonstances. Par rapport à la commande emacs, c'est inutilisable.
Exp HP
Pouvez-vous donner un exemple? Cela me semble assez stable.
sml
1
La commande que vous avez donnée n'est pas correcte. Ce doit être le cas par w80 j1, non par 80j. Edit: Oupar jw80
Gandaro
6

fmt est la solution à l'ancienne

Depuis la page de manuel:

fmt [-cmnps] [-d chars] [-l num] [-t num] [objectif [maximum] | -largeur | -w largeur] [fichier ...]

et

La longueur du but par défaut est de 65 et le maximum à 10 de plus que la longueur du but. Alternativement, un paramètre de largeur unique peut être spécifié en lui ajoutant un trait d'union ou en utilisant -w. Par exemple, fmt -w 72'',fmt -72 '' et `` fmt 72 72 '' produisent tous une sortie identique.

dmckee
la source
Certaines versions de fmtn'ont pas plusieurs de ces options et ne peuvent pas faire de justification complète.
pause jusqu'à nouvel ordre.
Désolé mais vous n'avez pas clairement expliqué comment justifier le texte fmt. De plus, comme l'a dit Dennis, sur mon système, la page de manuel ne fournit aucun texte comme vous l'avez mentionné et ne dit pas comment justifier.
jamadagni
2

Voici un script Perl appeléparadj qui peut faire une justification complète et une césure.

Voici diffquelques modifications que j'ai apportées pour prendre en charge l'ajout d'une marge gauche:

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

Cette commande:

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

produit une sortie très proche de votre exemple (les espaces supplémentaires sont à différents endroits).

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.
En pause jusqu'à nouvel ordre.
la source
Une excellente solution que, malheureusement, je ne peux pas utiliser. Il y a environ un mois, j'ai essayé d'obtenir TeX en Perl parce que je voulais utiliser TeX :: Hyphen (pour un problème différent mais lié à cette question). IIRC, ce que j'ai découvert, c'est que les dépôts Ubuntu ne disposent que de certaines parties de la bibliothèque TeX, et Hyphen n'en fait pas partie. J'ai essayé d'installer manuellement la bibliothèque Perl TeX, mais cela n'a pas bien fonctionné. J'ai fini par casser Perl et j'ai passé les prochaines heures à réparer les dégâts. J'hésite à recommencer. J'aimerais avoir assez de représentants pour au moins vous donner un +1 pour cette réponse, cependant.
Exp HP
@Exp HP: Je suis désolé que vous ayez eu tant de mal. Je l'ai sur un système Ubuntu 9.10 et je n'ai aucun problème.
pause jusqu'à nouvel ordre.
0

J'utilise Nano.

Renommez le fichier avec un nom plus court (8.3). Ouvrir à Nano, alors Alt- Jpour justifier l'ensemble du document. Alt- Opour sauver. Ensuite Alt- Xpour quitter. Renommez ensuite le fichier en son nom d'origine.

Peut paraître lourd mais il m'a sauvé beaucoup de temps sur faire le manuel Enter, Delete, Endpour limiter les colonnes à 90. Nano par défaut à 72. Je peux vivre avec ça.

Daniel
la source
2
Quelle est la magie derrière le nom de fichier court?
Jawa
0

Tu peux essayer reformat.

Vous pouvez l'installer sur Debian / Ubuntu, en exécutant sudo apt-get install reformat.

Utilisez-le comme ceci:

reformat -w 80 -j < mytext.txt

Le texte justifié sera écrit sur la sortie standard.

Flux
la source