troff ( / ˈ t iː r ɒ f / ), abreviatura de "typesetter roff", es el componente principal de un sistema de procesamiento de documentos desarrollado por Bell Labs para el sistema operativo Unix . troff y el nroff relacionado se desarrollaron a partir del roff original .
Mientras que nroff fue pensado para producir salida en terminales e impresoras de línea, troff fue pensado para producir salida en sistemas de composición tipográfica , específicamente el Graphic Systems CAT que se había introducido en 1972. Ambos usaban el mismo lenguaje de marcado subyacente y normalmente nroff o troff podían usar un solo archivo fuente sin cambios.
troff incluye comandos para designar fuentes, espaciado, párrafos, márgenes, notas al pie y más. A diferencia de muchos otros formateadores de texto, troff puede ubicar caracteres arbitrariamente en una página, incluso superponiéndolos, y tiene un lenguaje de entrada totalmente programable. Se utilizan preprocesadores separados para una producción más conveniente de tablas, diagramas y matemáticas. Las entradas a troff son archivos de texto sin formato que se pueden crear con cualquier editor de texto.
Se han creado paquetes de macros extensos para varios estilos de documentos. Una distribución típica de troff incluye las macros me para formatear documentos de investigación, las macros man y mdoc para crear páginas de manual de Unix , las macros mv para crear transparencias montables y las macros ms y mm para cartas, libros, memorandos técnicos e informes.
Los orígenes de troff se remontan a un programa de formato de texto llamado RUNOFF , que fue escrito por Jerome H. Saltzer para el sistema operativo CTSS del MIT a mediados de los años 1960. (El nombre supuestamente proviene de la frase I'll run off a document ).
Bob Morris lo portó a la arquitectura GE 635 y llamó al programa roff (una abreviatura de runoff ). [ cita requerida ] Fue reescrito como rf para el PDP-7 , y al mismo tiempo (1969), Doug McIlroy reescribió una versión extendida y simplificada de roff en el lenguaje de programación BCPL .
La primera versión de Unix se desarrolló en un PDP-7 que se encontraba en los Laboratorios Bell . En 1971, los desarrolladores querían conseguir un PDP-11 para seguir trabajando en el sistema operativo. Para justificar el coste de este sistema, propusieron implementar un sistema de formato de documentos para el departamento de patentes de los Laboratorios Bell. [1] Este primer programa de formato fue una reimplementación del roff de McIllroy , escrito por Joe F. Ossanna .
Cuando necesitaron un lenguaje más flexible, se escribió una nueva versión de roff llamada nroff ( más reciente "roff" ), que proporcionó la base para todas las versiones futuras. Cuando obtuvieron una fotocomponedora CAT de Graphic Systems , Ossanna modificó nroff para que admitiera múltiples fuentes y espaciado proporcional . Bautizada como troff , por el fotocomponedor roff , su sofisticada salida sorprendió al fabricante de la máquina tipográfica y confundió a los revisores pares , que pensaron que los manuscritos que usaban troff se habían publicado antes. [ 2] [3] Como tal, el nombre troff se pronuncia / ˈt iːr ɒ f / en lugar de * / ˈt r ɒ f / .
Con troff llegó nroff (en realidad eran casi el mismo programa), que servía para generar salidas para impresoras de línea y terminales de caracteres . Entendía todo lo que hacía troff e ignoraba los comandos que no eran aplicables, por ejemplo, los cambios de fuente .
El troff de Ossanna fue escrito en lenguaje ensamblador PDP-11 y producía una salida específicamente para la fotocomponedora CAT . Lo reescribió en C , aunque ahora tenía 7000 líneas de código sin comentarios y aún dependía del CAT. A medida que el CAT se volvió menos común y el fabricante ya no lo soportaba, la necesidad de que admitiera otros dispositivos se convirtió en una prioridad. Ossanna murió antes de que se completara esta tarea, por lo que Brian Kernighan asumió la tarea de reescribir troff . La versión recientemente reescrita produjo un código independiente del dispositivo que era muy fácil de leer y traducir para los posprocesadores a los códigos de impresora adecuados. Además, esta nueva versión de troff (a menudo llamada ditroff por troff independiente del dispositivo ) tenía varias extensiones, que incluían funciones de dibujo. [4] La documentación del programa define el formato de salida de ditroff , que es utilizado por muchos clones modernos de troff como GNU groff .
En 1983, troff fue una de las varias herramientas UNIX disponibles para el sistema operativo UNOS de Charles River Data Systems bajo la licencia de Bell Laboratories . [5]
La colección de herramientas troff (que incluía preprocesadores y posprocesadores) se denominó Documenter's WorkBench (DWB) y estuvo en continuo desarrollo en Bell Labs y, más tarde, en la empresa derivada Unix System Laboratories (USL) hasta 1994. En ese momento, SoftQuad se hizo cargo del mantenimiento, aunque Brian Kernighan siguió mejorando troff por su cuenta. Por lo tanto, existen al menos las siguientes variantes del troff original de Bell Labs en uso:
Aunque troff ha sido reemplazado por otros programas como Interleaf , FrameMaker y LaTeX , todavía se utiliza bastante. Sigue siendo el formateador predeterminado para la documentación de UNIX .
El software fue reimplementado como groff para el sistema GNU a principios de 1990. Además, debido al código abierto de los sistemas UNIX antiguos , así como de los sucesores modernos como las versiones de código abierto basadas en ditroff que se encuentran en OpenSolaris y Plan 9 de Bell Labs , hay varias versiones de AT&T troff (basadas en CAT y ditroff [6] ) disponibles bajo varias licencias de código abierto.
En general, no se recomienda utilizar troff directamente, sino utilizar una interfaz más sencilla de usar. [7] [8] Troff incluye macros que se ejecutan antes de comenzar a procesar el documento. Estas macros incluyen la configuración de encabezados y pies de página, la definición de nuevos comandos y la influencia en el formato de la salida. El argumento de la línea de comandos para incluir un conjunto de macros es -m name , lo que ha llevado a que muchos conjuntos de macros se conozcan como el nombre de archivo base con una m inicial . [9]
Los conjuntos de macros estándar, con m inicial, son:
mandoc
es una fusión que admite ambos conjuntos de comandos manuales. [14]Las macros ms fueron las primeras de estas, desarrolladas en AT&T, antes de que fueran suplantadas por las macros mm. [18] Uno de los objetivos de las macros mm era que pudieran ser utilizadas por el grupo de mecanógrafos de Bell Labs y, con el tiempo, esto sucedió y las macros mm se convirtieron en un estándar en Bell Labs. [19] AT&T puso las macros mm a disposición comercial para System V Unix. [18] Por el contrario, las macros me se desarrollaron en Berkeley. [18]
Un ejemplo de una carta comercial sencilla preparada con las macros mm sería:
.ND "10 de enero de 1993".AU "Señorita Jane Smith".AT "Próxima cita".MT 5.DSReferencia #A12345.sp 4Señor Samuel JonesDirector de campo, Oficina de Inspecciones1010 Plaza del GobiernoCiudad del Capitolio, ST.sp 3Estimado señor Jones:.sp 2.PAGEn relación con la obligación de someter a la inspección estatal nuestro nuevo proceso de producción, solicitamos que se considere la posible inadecuación de someter las tecnologías innovadoras del mañana a las exigencias, en gran medida anticuadas, del pasado. Si nuestro gran estado ha de prosperar en el siglo XXI, debemos tomar medidas..B ahora ,en.yo estoAño de.yo estoLa próxima década preparará nuestra base industrial para la competencia interestatal e internacional que seguramente surgirá. Nuestro nuevo proceso hace precisamente eso. No permitamos que se destruya por un entorno regulatorio que ya no es adecuado..PAGGracias por considerar nuestra posición..FC Atentamente.SG
Generalmente, en una tmac(5)
página del manual se incluye una lista completa de las macros disponibles . [14]
A medida que troff evolucionó, y dado que hay varias cosas que no se pueden hacer fácilmente en troff , se desarrollaron varios preprocesadores . Estos programas transforman ciertas partes de un documento en una entrada de troff , lo que encaja de forma natural en el uso de "canalizaciones" en Unix: enviar la salida de un programa como entrada a otro (ver canalizaciones y filtros ). Normalmente, cada preprocesador traduce solo las secciones del archivo de entrada que están especialmente marcadas, y pasa el resto del archivo sin cambios. Las instrucciones de preprocesamiento integradas están escritas en un lenguaje de programación simple específico de la aplicación, lo que proporciona un alto grado de potencia y flexibilidad.
Tres preprocesadores proporcionan a troff capacidades de dibujo al definir un lenguaje específico del dominio para describir la imagen.
Además, hay un comando soelim que elimina .so
las directivas de inclusión del texto de entrada. [24]
Una estructura típica de la tubería podría ser:
soelim file | refer | ideal | pic | tbl | eqn | troff
Aún más preprocesadores permiten dibujar imágenes más complejas al generar una salida para pic .
Se han desarrollado varios otros front-ends que pretenden ser interfaces más amigables para troff.
Uno de ellos es Sanscribe , desarrollado originalmente en Berkeley y luego mejorado durante la década de 1980 por varios usuarios, incluidos Intel e InterACT . Sanscribe se utiliza para escribir notas, informes y documentos y se basa en comandos troff básicos, así como en las macros me y varios preprocesadores y posprocesadores como soelim, eqn, tbl, grap y pic. Sin embargo, es un binario de programa principal, no un preprocesador. La capacidad de inclusión condicional lo hace especialmente útil para mantener manuales de referencia multiplataforma. Sin embargo, Sanscribe es frágil y propenso a dar errores crípticos o producir resultados con formatos extraños. [28]
Un front-end de propósito especial es vgrind , que genera listados de programas fuente bien formateados, con características como poner comentarios en cursiva, palabras clave en negrita y nombres de funciones resaltados en los márgenes. Puede ejecutarse como un filtro o como un programa principal con su salida siendo pasada a troff. Tiene soporte para los lenguajes que se usan en las instalaciones de Bell Labs, incluyendo no solo Fortran , C y C++ sino también herramientas específicas del dominio como Bourne shell y yacc así como otras más avanzadas como Emacs Lisp e Icon . [24]
El conjunto de herramientas CADiZ emplea un enfoque diferente para la notación Z. En lugar de que el cadiz
programa sea un preprocesador al frente de la tubería, interactúa varias veces con troff
como entrada y salida, utilizando archivos guardados en lugar de una tubería. CADiZ también contiene su propio conjunto de macros, llamadas .ZA
a través de .ZZ
. [29]