¿Cómo puedo justificar texto sin formato en Linux?

17

Estoy redactando un documento de texto plano (.txt) que tiene párrafos justificados de izquierda a derecha. Agrego espacios manualmente, separando palabras con guiones si es necesario, hasta que las líneas tengan una longitud uniforme. Para usar un ejemplo de mi documento, un párrafo como este:

Estas bolas fantasmales tienen algunas propiedades extrañas, algunas ordenadas, algunas
interesante, y otros solo indicativos de un diseño perezoso. Son casi todos
causado por el mismo defecto de diseño: el juego los trata demasiado como si fueran normales
pelotas.

terminará luciendo así:

Estas bolas fantasmales tienen algunas propiedades extrañas,
algunos aseados, algunos interesantes y otros solo indicativos
Tive de diseño perezoso. Casi todos son causados ​​por el
mismo defecto de diseño: el juego los trata demasiado como
Bolas regulares.

¿Cómo puedo hacer esto?

Está bien agregar espacios (sin dividir palabras sobre líneas), pero necesito controlar el ancho objetivo del párrafo (en # caracteres). El ejemplo anterior se justifica a 53 caracteres por línea, pero el ancho de línea en mi documento real varía de 60 a 79.

También sería genial si hubiera un editor de texto con tal característica.

Ya probé:

  • OpenOffice y TeX : solo usan el formato para cambiar la forma en que se muestra el texto.
  • El comando Justify de nano no cuenta porque en realidad no hace que el ancho de las líneas sea uniforme.

Acepté la siguiente respuesta porque fue la que mejor funcionó para . Encontré que los comandos de relleno de emacs son los más fáciles de usar entre las respuestas, y aprecio cómo reconoce incluso las sangrías que no son espacios en blanco (para cosas como # y // comentarios). Sin embargo, todas las otras respuestas llenan sus propios nichos y recomiendo a otras personas que visiten esta pregunta que las vean también.

Exp HP
fuente
1
¿Por qué? Soy realmente curioso. Una de las ventajas del texto plano es que es independiente del formato y puede incluirlo en OpenOffice o TeX y hacer que se vea bien. ¿Cuál es tu uso para esto?
Doug Harris
Además, ¿está buscando esta utilidad para hacer una separación silábica semiinteligente también?
Doug Harris
1
La razón es porque es una guía para GameFAQs. GameFAQs solo toma texto sin formato, documentos TXT. En cuanto a la separación silábica, lo preferiría, pero no es un requisito absoluto.
Exp HP el

Respuestas:

5

Puede hacer esto en emacs usando fill-paragrapho fill-region( llenar documentos ).

Debe pasar un argumento de prefijo numérico. La columna de relleno predeterminada es 70.

Seleccione el texto para llenar y hacer M-3 M-x fill-region.

Establecí la columna de relleno en 53 para su texto de muestra y obtuve:

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
fuente
Eso se ve bien. Estoy instalando el paquete para emacs ahora mismo para ver esta característica
Exp HP el
De acuerdo, tomó un poco de tiempo para acostumbrarse a la interfaz y la terminología inusuales (al menos inusual para los estándares actuales), pero esto es genial. Cx f 53, M-1 Mq. Ciertamente es más fácil que mi Plan B (que habría sido escribir mi propio script Ruby que justificaba el texto), y para mi satisfacción, incluso reconoce la sangría y lo toma en cuenta al justificar. Agradable.
Exp HP el
¿Cómo configuro la columna de relleno en 53 o en cualquier otro valor que quiera para ese asunto? ¿Y cómo puedo verificar qué es actualmente?
HelloGoodbye
1
Por cierto, el enlace en su respuesta está roto.
HelloGoodbye
He actualizado el enlace
Doug Harris,
18

necesitas par

por ejemplo, para obtenerlo en ubuntu, haga:

sudo aptitude install par

para justificar text.txt(en el ancho de 80 caracteres), guardando en newtext.txt:

par j1w80 < text.txt > newtext.txt

para usar par en vim o gvim:

:set formatprg=par\ j1w80

luego resalte el texto que desea formatear y use el gqcomando.

Para más información, ver man par

sml
fuente
1
Probé esto y me pareció bastante delicado. A veces resulta en errores incluso en lo que parece ser la más inocente de las circunstancias. En comparación con el comando emacs, esto no se puede usar.
Exp HP el
¿Puede dar un ejemplo? Me parece bastante estable.
sml
1
El comando que dio no es correcto. Tiene que ser par w80 j1, no par 80j. Editar: Opar jw80
Gandaro
6

fmt es la solución de la vieja escuela

Desde la página del manual:

fmt [-cmnps] [-d caracteres] [-l num] [-t num] [objetivo [máximo] | -ancho | -w ancho] [archivo ...]

y

La longitud del objetivo se establece por defecto en 65 y el máximo en 10 más que la longitud del objetivo. Alternativamente, se puede especificar un parámetro de ancho simple ya sea anteponiéndole un guión o usando -w. Por ejemplo, fmt -w 72'',fmt -72 '' y `` fmt 72 72 '' producen una salida idéntica.

dmckee
fuente
Algunas versiones de fmtno tienen varias de esas opciones y no pueden hacer una justificación completa.
Pausado hasta nuevo aviso.
Lo sentimos, pero no has dicho claramente cómo justificar exactamente el texto usando fmt. Además, como dijo Dennis, en mi sistema, la página de manual no proporciona ningún texto como el que ha mencionado y no dice cómo justificarlo.
jamadagni
2

Aquí hay un script de Perl llamadoparadj que puede hacer una justificación completa y un guión.

A continuación, se diffmuestran algunos cambios que hice para admitir la adición de un margen izquierdo:

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

produce resultados muy cercanos a su ejemplo (los espacios adicionales están en diferentes lugares).

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 hasta nuevo aviso.
fuente
Una gran solución que, desafortunadamente, no puedo usar. Hace aproximadamente un mes, intenté obtener TeX en Perl porque quería usar TeX :: Hyphen (para un problema diferente pero relacionado con esta pregunta). IIRC, lo que descubrí fue que los repositorios de Ubuntu solo tienen ciertas partes de la biblioteca TeX disponibles, y Hyphen no está entre ellas. Intenté instalar manualmente la biblioteca Perl TeX, pero eso no funcionó bien. Terminé rompiendo Perl y pasé las siguientes horas deshaciendo el daño. Soy reacio a darle otra oportunidad. Sin embargo, desearía tener suficiente representante para al menos darte un +1 por esta respuesta.
Exp HP el
@Exp HP: Lamento que hayas tenido tantos problemas. Tengo esto en un sistema Ubuntu 9.10 y no tengo problemas.
Pausado hasta nuevo aviso.
0

Yo uso Nano.

Cambie el nombre del archivo a un nombre más corto (8.3). Abrir en Nano, entonces Alt, Jpara justificar todo el documento. Alt- Opara salvar. Entonces Alt, Xpara salir. Luego cambie el nombre del archivo al nombre original.

Puede sonar complicado, pero me salvó un montón de tiempo durante el que hace el manual Enter, Delete, Endpara limitar las columnas a 90. Los valores predeterminados de nano a 72. Puedo vivir con eso.

Daniel
fuente
2
¿Cuál es la magia detrás del nombre de archivo corto?
Jawa
0

Puedes intentarlo reformat.

Puede instalarlo en Debian / Ubuntu, ejecutando sudo apt-get install reformat.

Úselo así:

reformat -w 80 -j < mytext.txt

El texto justificado se escribirá en la salida estándar.

Flujo
fuente