require(".zlconfig.php"); require("$webroot/cabecera.php"); ?> $navIdx->Asignar("groff_indice.php","Índice"); $navIzq->Asignar("groff_intro.php","Introducción"); $navDer->Asignar("groff_cap2.php","Capítulo 2") ?>
$graf_titulo = "$base_grafs/docs_head.png" ?> require("$webroot/titulos.php") ?>1. Conceptos básicos de un documento.
Una petición de troff consta de un punto al comienzo de línea seguido por la petición propiamente dicha seguido de uno o más parámetros. Los parámetros pueden ir pegados a la petición, pero nosotros los dejaremos separados por un carácter de espacio en blanco. Para introducirnos, veremos cómo se tratan los distintos niveles del documento a preparar y lo aplicaremos a una carta ejemplo.
Lo primero que debe hacerse a la hora de formatear un documento es definir los márgenes de salida final. El tamaño prefijado por troff es para un papel tipo Carta USA (8.5 por 11 pulgadas) y comienza en el extremo superior izquierdo del papel. Todos estos parámetros pueden modificarse como veremos a continuación
Veamos aquí las peticiones principales de este nivel.
Petición | Descripción |
.po n | Fija el margen izquierdo de página a n unidades. |
.ll n | Fija la longitud de la línea a n unidades. |
.pl n | Fija la longitud de la página impresa a n unidades. |
NOTA. Así, una petición en la forma .pl 9.5i fija la longitud de línea a 9.5 pulgadas que es justamente la longitud de un A4.
El margen superior no puede modificarse por defecto y lo que se hace es un espaciado vertical como el que sigue
Petición | Descripción |
.sp [n] | Salta n espacios verticales de la unidad actual. |
Como hemos dicho al comienzo de este punto, la longitud de la página por defecto es de 11 pulgadas para troff (66 líneas por página para nroff).
Por último observar que troff no proporciona automáticamente ruptura de páginas ni numeración de las mismas. Esto debe realizarse bajo el control de un macro definido por uno mismo (o con un macropaquete). Se puede provocar un salto de página insertando en puntos estratégicos del documento la petición
Petición | Descripción |
.bp | Inserta un salto de página. |
.sp 3 | Salta 3 espacios verticales (tres saltos de línea). |
que comenzaría a escribir en la página siguiente con un margen superior de tres espacios verticales.
El número de página actual se guarda en un registro que puede modificarse mediante el comando
Petición | Descripción |
.pn [+-]n | Aumenta/disminuye en n el valor del registro de página actual o lo pone a un valor n. |
A continuación se incluyen las unidades que se utilizan en troff
Unidad | Descripción |
u | Unidad interna. |
c | Centímetros. |
i | Pulgadas. Son 432 unidades internas en troff. |
v | Espacio de línea vertical. |
p | Punto (1/72 de pulgada). Son 6 unidades internas en troff. |
P | Pica (1/6 de pulgada). Son 72 unidades internas. |
m | Unidad m (tamaño de una letra 'm' en el tipo y estilo actual). |
n | Unidad n (tamaño de una letra 'n' en el tipo y estilo actual). |
NOTA. En troff una unidad n es la mitad de una unidad m, pero en nroff ambas tienen el mismo valor. El espacio de línea vertical v depende de cuáles son el tipo y tamaño de letra actual.
Por defecto, troff rellena y ajusta las líneas de texto. Esto significa que justifica las líneas a la longitud dada por el comando .ll si se ha definido o el valor que tuviera por defecto. No se tienen en cuenta los saltos de línea sino que se va construyendo el párrafo palabra a palabra. Cuando se encuentran dos saltos de línea seguidos troff considera que se trata de un párrafo nuevo.
Los justificados de párrafo pueden modificarse con los comandos
Petición | Descripción |
.ad l | Ajusta el margen izquierdo. |
.ad r | Ajusta el margen derecho. |
.ad c | Centra el párrafo. |
.ad b/n | Justificado el párrafo (por defecto). Las dos posibilidades son por compatibilidad con nroff. |
NOTA. Otra forma nás antigua de centrado de líneas es
Petición | Descripción |
.ce [N] | Centra la/s N línea/s siguiente/s. |
Por defecto, troff produce una salida a simple espacio en un párrafo. Esto puede modificarse mediante el comando
Petición | Descripción |
.ls [N] | Establece un espaciado de N entre las líneas del párrafo. |
También puede fijarse el espaciado vertical de las líneas con
Petición | Descripción |
.vs [n] | Dan un espaciado vertical de n puntos (Sin parámetro deja el estado anterior). |
Hay dos comandos para resaltar el texto en cursiva (fuerza cursivas en troff y subrayados en nroff)
Petición | Descripción |
.cu [N] | Pone en cursiva (subraya) el texto las N líneas siguiente/s. |
.ul [N] | Pone en cursiva (subraya) el texto las N líneas siguiente/s. |
En troff no existe diferencia alguna entre .cu y .ul. En ambos casos aparecerá el texto en cursiva. Sin embargo en nroff la diferencia sí que es apreciable. El comando .ul sólo subraya los caracteres alfanuméricos (no espacios en blanco ni tabuladores). Podemos verlo con el siguiente ejemplo:
troff
.ul
Hoy es 3 de Marzo > Hoy es 3 de Marzo
.cu
Hoy es 3 de Marzo > Hoy es 3 de Marzo
nroff
.ul
Hoy es 3 de Marzo >
Hoy
es
3
de
Marzo
.cu
Hoy es 3 de Marzo >
Hoy es 3 de Marzo
Para la elección del tipo de letra se utiliza el comando
Petición | Descripción |
.ft[RIBS] | Deja el tipo de letra Times normal (R), cursiva (I), negrita (B) o en símbolos griegos y matemáticos (S). |
Estos valores son los estándar, pero pueden encontrarse letras como H (Helvética), C (Courier), etc. También se puede modificar el tamaño de la letra (para nroff esto no es válido) con el comando
Petición | Descripción |
.ps N | Imprime las siguientes líneas/palabras en un tamaño de letra de N puntos. |
Hay dos comandos para el sangrado de párrafos
Petición | Descripción |
.ti n | Sangra la primera línea de los párrafos siguientes n unidades. |
.in [+-]n | Sangra todas las líneas de los párrafos siguientes [+-]n unidades. |
Una combinación adecuada de estos comandos permite crear todos los estilos de párrafo que se puedan desear. Vamos a verlo con un ejemplo. Para conseguir el siguiente párrafo
1. Un ejemplo simple de sangrado izquierdo con primera línea fuera del margen.
utilizaremos los comandos
.ll 14c \" Acortamos la longitud de la línea actual (16c).
.in +2c \" Sangra el texto 2 centímetros.
.ti -1c \" Sangra la primera línea 1 centímetro respecto al nuevo
1. Un ejemplo simple de sangrado izquierdo con primera línea
fuera del margen.
.ti \" Deja la primera línea en el sangrado anterior a la modificación
.in -2c \" Vuelve el sangrado total a 0
.ll \" Vuelve la longitud de línea a su valor anterior (16c).
1.2.4 Control de ruptura de líneas: líneas viudas.
Cuando se produce una ruptura en un párrafo (por ejemplo pon un final de página) o en una tabla, puede interesarnos que varias de líneas queden juntas. Una tabla, por ejemplo, no interesa que empiece a fin de página y continúe en la página siguiente.
Para evitar esto se utiliza el comando
Petición | Descripción |
.ne n | Comienza una nueva página si queda menos de n unidades en la página actual. |
La interpretación es simple. Si mientras se construye el párrafo faltan menos de n unidades para llegar al final de la página, se produce un salto de página y todo el párrafo pasa a la página siguiente.
Por defecto, troff inserta automáticamente guiones en las palabras para que el ajuste de texto sea mejor a la vista. Esta opción puede desactivarse o activarse con
Petición | Descripción |
.nh | Desactiva el proceso de separación automática de palabras con guiones. |
.hy [n] |
Activa la separación de guiones. El parámetro n tiene la siguiente
interpretación:
|
Por suerte, el programa groff interpreta de forma caracteres especiales como acentos, ñ, etc. Hay algunos caracteres especiales que se obtienen con el carácter de barra inversa (no lo llamaremos escape). Aquí tenemos unos ejemplos
Petición | Descripción |
\" | Comentario de todo lo que viene a continuación de línea. |
\& | Un carácter de anchura nula. |
\¦ | Un carácter de medio espacio. |
\- | Un signo menos en la fuente actual. |
\e | Un carácter de escape literal. |
\c | Un carácter de línea no rota. |
Los caracteres especiales se obtienen mediante la directiva \(xx.
En el Apéndice 3 se encuentra una relación de los principales caracteres especiales.
Para los casos en que el documento requiere un control mayor sobre la posición del texto en la página y con el propósito de aligerar el uso de repetitivo de comandos, se han creado dos comandos especiales que se verán a continuación.
Un macro es un conjunto de comandos que debe aparecer varias veces en el documento y a la que damos un nombre para simplificar el trabajo. El nombre del macro será sustituido por todo el conjunto de comandos en cada parte donde aparezca.
La forma de definir un macro es como sigue
.de XY
(conjunto de comandos troff)
..
donde XY es el nombre del comando en cuestión. Para usar un macro en el texto se referencia con su nombre de la siguiente forma
.XY
Veamos el siguiente ejemplo. Supongamos que hemos decidido que cada párrafo en el texto quede separado del anterior por dos espacios verticales y sangrado medio centímetro. Esto implica que cada vez que hay un nuevo párrafo tendremos que poner todos los comandos. Podemos, sin embargo, definirnos un macro de la forma siguiente
.de NP \" Definición del macro NP (nuevo párrafo)
.sp 2 \" Dos espacios a partir de aquí
.ne 3 \" Nos aseguramos que quepan tres líneas en la página
.ti +0.5c \" Sangramos la primera línea medio centímetro
.. \" Fin de la definición del macro
De esta forma, cada vez que necesitemos un nuevo párrafo con estas características sólo tendremos que escribir en el documento el nuevo comando
.NP
Un macro puede definirse en cualquier parte del documento y será a partir de ahí que tome su valor. Por ello es conveniente hacer toda la definición de macros al comienzo del documento con el fin de que desde el comienzo podamos hacer uso de ellos.
Un cepo es un macro que queremos que aparezca siempre en determinadas posiciones de la página. Un cepo indica un lugar en la página en el cual se va a invocar el macro. Su formato es el siguiente
.wh N XX
donde N es la posición de página en la cual el cepo se activará y XX es el nombre del macro que se sustituirá. Si la posición N es un número positivo la distancia se mide hacia abajo desde la parte superior de la página y si es negativo se mide desde la parte inferior de la página. Un número 0 significa parte superior de la página.
Como bien puede pensarse, un cepo se utiliza principalmente para crear cabeceras y pies de página. Veremos esto con unos ejemplos. Lo que vamos a hacer a continuación es crear un macro de encabezado EN y otro de pie de página PP y los activaremos con dos cepos.
.de EN
.sp 1c
.tl ''Encabezado del documento''
.sp 1c
..
.de PP
.sp 1c
.tl ''Página %''
.bp
..
.wh 0 EN
.wh -2.5c PP
De esta forma, cada vez que empiece una página, se activará el cepo que ejecutará el macro EN. Po otra parte, cuando falten 2.5 centímetros para el final de la página, se activará el macro PP que es el que indica el pie de página.
A continuación se indica el comando de generación e impresión de la carta ejemplo (carta.t)que aparece en el Apéndice 1 con el código troff observe cómo funciona el programa.
$ tbl carta.t ¦ eqn ¦ groff > carta.ps
Hemos tenido que utilizar los programas tbl y eqn para preprocesar la tabla y la ecuación insertadas (el orden de ejecución es muy importante: primero se preprocesa tbl y luego eqn). El programa groff incluye la funcionalidad de impresión de archivos PostScript por defecto, pero puede modificarse el tipo de dispositivo de salida de datos (investigar esto en los manuales de groff).
No incluimos el resultado impreso pues sería un poco grande el archivo gif, pero es fácil hacerse una idea de lo que sale. Por favor, ejecutadlo y visualizar el resultado con el GhostView, por ejemplo. Y si quereis lo enviais a la impresora (recordad que la salida es PostScript).
require("$webroot/pie.php") ?>