Como justificar texto sem formatação no Linux?

17

Estou compondo um documento em texto sem formatação (.txt) com parágrafos justificados à esquerda e à direita. Eu adiciono espaços manualmente, quebrando palavras com hífens, se necessário, até que as linhas tenham comprimento uniforme. Para usar um exemplo do meu documento, um parágrafo como este:

Essas bolas fantasmáticas têm algumas propriedades estranhas, algumas limpas, outras
interessante e outros apenas indicativos de design preguiçoso. Eles são quase todos
causada pela mesma falha de design: o jogo os trata muito como se fosse um jogo normal
bolas.

vai acabar assim:

Essas bolas fantasmáticas têm algumas propriedades estranhas,
alguns são legais, outros interessantes e outros apenas indicam
projeto preguiçoso. Eles são quase todos causados ​​pelo
mesma falha de design: o jogo os trata muito como
bolas regulares.

Como posso fazer isso?

Não há problema em adicionar espaços (sem quebrar as palavras sobre as linhas), mas eu preciso controlar a largura do parágrafo do parágrafo (em # caracteres). O exemplo acima é justificado para 53 caracteres por linha, mas a largura da linha no meu documento real varia de 60 a 79.

Também seria ótimo se houvesse um editor de texto com esse recurso.

Eu já tentei:

  • OpenOffice e TeX : Eles apenas usam a formatação para alterar a forma como o texto é exibido.
  • O comando Justify do nano não conta, porque na verdade não torna as linhas de largura uniforme.

Aceitei a resposta a seguir, porque foi a que melhor funcionou para mim . Eu achei os comandos de preenchimento do emacs os mais fáceis de usar entre as respostas, e aprecio como ele reconhece até mesmo a indentação sem espaço em branco (para coisas como # e // comentários). No entanto, todas as outras respostas preenchem seus próprios nichos e eu recomendo que outras pessoas que visitam esta pergunta também as examinem.

Exp HP
fonte
11
Por quê? Eu sou genuinamente curioso. Uma das vantagens do texto simples é a independência da formatação e você pode inseri-lo no OpenOffice ou TeX e torná-lo bonito. Qual é a sua utilidade para isso?
Doug Harris
Além disso, você está procurando esse utilitário para fazer hifenização semi-inteligente também?
Doug Harris
11
O motivo é porque é um guia para os GameFAQs. Os GameFAQs usam apenas texto simples, documentos TXT. Quanto à hifenização, eu preferiria, mas não é um requisito absoluto.
Exp HP

Respostas:

5

Você pode fazer isso no emacs usando fill-paragraphou fill-region( preencher documentos ).

Você precisa passar um argumento de prefixo numérico. A coluna de preenchimento padrão é 70.

Selecione o texto para preencher e preencher M-3 M-x fill-region.

Defino a coluna de preenchimento como 53 para o seu texto de exemplo e obtive:

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
fonte
Isso parece bom. Estou instalando o pacote para o emacs agora mesmo para dar uma olhada neste recurso.
Exp HP
Ok, demorou bastante para se acostumar com a interface e a terminologia incomuns (incomuns pelos padrões atuais, pelo menos), mas isso é ótimo. Cx f 53, M-1 Mq. É certamente mais fácil do que o meu Plano B (que teria sido escrever meu próprio script Ruby que justifica o texto) e, para minha satisfação, ele até reconhece o recuo e leva isso em consideração ao justificar. Agradável.
Exp HP
Como defino a coluna de preenchimento para 53 ou para qualquer outro valor que eu queira? E como posso verificar o que é atualmente?
HelloGoodbye
11
A propósito, o link na sua resposta está quebrado.
HelloGoodbye
Eu atualizei o link
Doug Harris
18

você precisa par

por exemplo, para obtê-lo no ubuntu, faça:

sudo aptitude install par

para justificar text.txt(na largura de 80 caracteres), economizando em newtext.txt:

par j1w80 < text.txt > newtext.txt

para usar par in vim ou gvim:

:set formatprg=par\ j1w80

destaque o texto que você deseja formatar e use o gqcomando

Para mais informações, veja man par

sml
fonte
11
Eu testei isso e achei bastante sensível. Às vezes, resulta em erros, mesmo sob o que parece ser a mais inocente das circunstâncias. Em comparação com o comando emacs, isso é inutilizável.
Exp HP
Você pode dar um exemplo? Parece bastante estável para mim.
SML
11
O comando que você deu não está correto. Tem que ser par w80 j1, não par 80j. Edit: Orpar jw80
Gandaro
6

fmt é a solução da velha escola

Na página do manual:

fmt [-cmnps] [-d chars] [-l num] [-t num] [objetivo [máximo] | largura | -w largura] [arquivo ...]

e

O comprimento da meta é padronizado em 65 e o máximo em 10 a mais que o comprimento da meta. Como alternativa, um único parâmetro de largura pode ser especificado adicionando um hífen a ele ou usando -w. Por exemplo, fmt -w 72'',fmt -72 '' e `` fmt 72 72 '' produzem saída idêntica.

dmckee
fonte
Algumas versões fmtdo não têm várias dessas opções e não podem justificar completamente.
Pausado até novo aviso.
Desculpe, mas você não disse claramente como justificar o uso do texto fmt. Além disso, como disse Dennis, no meu sistema, a página de manual não fornece nenhum texto como você mencionou e não diz como justificar.
28415 jamadagni
2

Aqui está um script Perl chamadoparadj que pode fazer justificação e hifenização completas.

A seguir, diffmostramos algumas alterações que fiz para oferecer suporte à adição de uma margem esquerda:

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

Este comando:

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

produz resultados muito próximos do seu exemplo (os espaços extras estão em lugares diferentes).

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.
Pausado até novo aviso.
fonte
Uma ótima solução que, infelizmente, não posso usar. Há cerca de um mês, tentei obter o TeX no Perl porque queria usar o TeX :: Hyphen (para um problema diferente, mas relacionado a esta pergunta). IIRC, o que eu descobri foi que os repositórios do Ubuntu só têm certas partes da biblioteca TeX disponíveis, e o Hyphen não está entre elas. Tentei instalar manualmente a biblioteca Perl TeX, mas isso não funcionou bem. Acabei quebrando Perl e passei as próximas horas desfazendo o dano. Estou relutante em tentar de novo. Eu gostaria de ter representante suficiente para, pelo menos, dar-lhe um +1 para esta resposta, no entanto.
Exp HP
@ Exp HP: Sinto muito, você teve tantos problemas. Eu tenho isso em um sistema Ubuntu 9.10 e não tenho problemas.
Pausado até novo aviso.
0

Eu uso o Nano.

Renomeie o arquivo para um nome mais curto (8.3). Abra no Nano, então Alt- Jpara justificar todo o documento. Alt- Opara salvar. Então Alt- Xpara sair. Em seguida, renomeie o arquivo para o nome original.

Pode parecer complicado, mas ele me salvou um monte de tempo sobre fazer o manual Enter, Delete, Endpara limitar as colunas a 90. defaults nano para 72. Eu posso viver com isso.

Daniel
fonte
2
Qual é a mágica por trás do nome curto do arquivo?
Jawa
0

Você pode tentar reformat.

Você pode instalá-lo no Debian / Ubuntu, executando sudo apt-get install reformat.

Use-o assim:

reformat -w 80 -j < mytext.txt

O texto justificado será gravado na saída padrão.

Fluxo
fonte