Cómo usar Troff para formatear documentos PDF en Linux

Troff es un procesador de texto de documentos minimalista pero poderoso para sistemas Linux. Te permite crear documentos listos para imprimir fácilmente al compilar archivos fuente desde la línea de comandos. A diferencia de LaTeX, Troff es increíblemente ligero y está preinstalado en la mayoría de los sistemas Linux. Este tutorial te muestra cómo usar Troff para formatear documentos PDF en Ubuntu.
Tabla de Contenidos
- ¿Qué es Troff y por qué usarlo?
- Instalando Troff
- Creando tu primer documento Troff
- Entendiendo el formato Troff
- Creando texto en negrita, cursiva y subrayado
- Creando nuevas secciones de documentos
- Creando listas en Troff
- Creando tablas con preprocesadores en Troff
- Preguntas Frecuentes
¿Qué es Troff y por qué usarlo?
En un sentido básico, Troff es un programa de procesamiento de texto que convierte scripts similares a código en documentos imprimibles. A diferencia de los procesadores de texto, Troff no se basa en el paradigma “WYSIWYG”. En cambio, requiere que uses tipos específicos de código para manejar tu formato.

Una de las mayores ventajas de este enfoque es la simplicidad. Una instalación básica de Troff tendrá todo lo que necesitas para crear un documento. Además, su falta de una interfaz gráfica de usuario significa que puedes crear un documento incluso a través de SSH.

Consejo: aprende cómo reenviar aplicaciones GUI a través de SSH en Linux.
Instalando Troff
Troff a menudo viene incluido por defecto en la mayoría de las distribuciones de Linux. Puedes verificar si lo tienes en tu sistema ejecutando su bandera -h. Esto mostrará una breve lista de todas las banderas que tu instalación de Troff acepta.
troff -h
Hay casos en los que las distribuciones no incluyen Troff por defecto. En ese caso, puedes instalarlo buscando el paquete “groff”.

Esta es una reimplementación de los programas Troff y Nroff por el Proyecto GNU, que incluye una serie de características nuevas y modernas.
Puedes instalar groff en Ubuntu usando el siguiente comando:
sudo apt install groff
Creando tu primer documento Troff
Similar al código fuente, cada documento Troff es un archivo de texto que contiene instrucciones sobre cómo crear un documento. Estas incluyen el ancho de la página y los márgenes, así como el espaciado de letras y páginas.

Este nivel de control te permite manipular el programa para crear cualquier tipo de documento. Para simplificar eso, los desarrolladores de Troff crearon “macros” que condensan estos comandos a una sintaxis más simple.

Una de las macros más comunes que usarás en Troff es “ms”. Creará un documento en un estilo de artículo. Puedes crear un documento ms usando el comando touch:
touch my-first-document.msDado que todos los documentos Troff son texto, puedes abrir tu documento usando un editor de texto. En mi caso, estoy usando vim. Alternativamente, puedes usar cualquiera de estos editores de texto para Linux.
vim my-first-document.ms
Entendiendo el formato Troff
Todos los documentos Troff siguen una estructura similar. Cada comando de formato que realices necesita estar en una línea separada en el contenido que está tratando de formatear. Como tal, un documento Troff típico se verá algo así:
.COMMAND1
Este es un contenido en un documento Troff.
.COMMAND2
Este es un contenido diferente en un documento Troff.Dos de los comandos más básicos que usarás en ms son .TL y .PP. El primero convierte tu texto en un título y lo centra en tu documento, mientras que el segundo formatea tu texto para seguir un estilo de párrafo.
Por ejemplo, el siguiente extracto utiliza tanto los comandos .TL como .PP:
.TL
Mi primer documento Troff
.PP
Este es un contenido que quiero que se vea como un párrafo en mi documento final. No es un contenido muy largo, pero es mi primer documento Troff y estoy orgulloso de ello. Tiene aproximadamente tres oraciones de largo y debería ajustarse correctamente al documento.
Desde aquí, crea tu documento pasando tu archivo al programa Troff.
groff -ms-Tpdf ./my-first-document.ms > output.pdf
Consejo: si prefieres algo más simple, aprende cómo escribir en formato MLA en Google Docs.
Creando texto en negrita, cursiva y subrayado
Al igual que un procesador de texto regular, la mayoría de las macros de Troff suministran una serie de comandos de estilo para personalizar tu documento. Para ms, estos son .B, .I, .UL y .BX.
- El comando
.Bcambia el texto a negrita. - El comando
.Icambia el texto a cursiva. .ULy.BXson comandos que dibujan un subrayado y un cuadro alrededor de tu texto, respectivamente.
Similar a los comandos anteriores, usar estos en tu documento requiere que separes cada estilo en su propia línea:
.TL
Mi primer documento Troff
.PP
Este es
.B
contenido
.R
que quiero que se vea como un párrafo en mi documento final. [...]En este ejemplo, creé una nueva línea antes de la palabra “contenido” y añadí el comando .B para cambiarlo a negrita, luego creé una nueva línea y añadí el comando .R. Esto permite que Troff regrese a su estilo anterior.

Es importante notar que siempre necesitas añadir el comando .R al cambiar de estilo. Por ejemplo, el siguiente extracto no terminará el comando .I ya que Troff no vio un .R después de él:
.TL
Mi primer documento Troff
.PP
Este es
.I
contenido
que quiero que se vea como un párrafo en mi documento final. [...]
Creando nuevas secciones de documentos
Similar a LaTeX, Troff también soporta secciones y detección de jerarquía, por lo que no necesitas organizar y emparejar el nivel de cada encabezado cuando estás editando.
Para crear una nueva sección en tu documento, usa el comando .NH seguido del nombre de tu encabezado.
.TL
Mi primer documento Troff
.NH
Mi primer encabezado
.PP
Este es un contenido que quiero que se vea como un párrafo en mi documento final.
Por defecto, cada encabezado Troff tiene un valor de nivel que dicta cómo el programa estructura y muestra su contenido en el documento final. Sabiendo eso, puedes cambiar este valor para ajustar el nivel de un encabezado.
Por ejemplo, lo siguiente crea un encabezado de nivel 2 inmediatamente debajo de su padre:
.TL
Mi primer documento Troff
.NH
Mi primer encabezado
.NH 2
Mi primer subtítulo
.PP
Este es un contenido que quiero que se vea como un párrafo en mi documento final.
Aparte de los encabezados numerados regulares, Troff también puede crear encabezados en blanco que aún seguirán la jerarquía de niveles del documento.
Para hacer esto, reemplaza .NH con el comando .SH:
.TL
Mi primer documento Troff
.SH
Mi primer encabezado
.SH 2
Mi primer subtítulo
.PP
Este es un contenido que quiero que se vea como un párrafo en mi documento final.
Consejo: descubre cómo cambiar los márgenes en Google Docs.
Creando listas en Troff
La simplicidad de Troff también te permite adaptar su comportamiento a lo que necesites. Por ejemplo, las listas no vienen por defecto en Troff ni en las macros ms. A pesar de eso, aún puedes crear una lista combinando algunos comandos ms.
Cada lista en Troff consiste en tres partes: una sangría, un viñeta y el contenido. Para crear la sangría, usa los comandos .RS y .RE. Estos moverán el nivel de sangría actual de cualquier texto dentro de ellos cuatro espacios.
.RS
Este es mi primer ítem.
.RE
A continuación, crea la viñeta para tu ítem de lista usando .IP. Este es el comando “indent paragraph” que fija el margen izquierdo de tu texto a un cierto ancho.
El comando .IP también te permite establecer un punto de viñeta personalizado y el espacio entre él y tu texto. En este caso, estoy configurando mi viñeta a “[1]” y le daré cuatro espacios.
.RS
.IP [1]4
Este es mi primer ítem.
.RE
Ahora copia y pega tu comando .IP para crear ítems de lista adicionales.
.RS
.IP [1]4
Este es mi primer ítem.
.IP [2]4
Este es mi segundo ítem.
.IP [3]4
Este es mi tercer ítem.
.RE
Finalmente, automatiza este proceso creando una macro personalizada. Por ejemplo, el siguiente extracto vincula mi comando .IP a .QW:
.de QW
.IP [-]4
..
.RS
.QW
Este es mi primer ítem.
.QW
Este es mi segundo ítem.
.QW
Este es mi tercer ítem.
.RE
Creando tablas con preprocesadores en Troff
Una peculiaridad de Troff es que la mayoría de sus características existen como “preprocesadores”. En su mayor parte, estos son binarios fuera del programa que funcionan creando “scripts contenedores de preprocesadores” y convierten esos a código Troff de bajo nivel.

Tbl es un gran ejemplo de un preprocesador de Troff. Es un programa que gestiona tablas en un documento. Un contenedor básico de Tbl se ve algo así:
.TS
allbox ;
c c c.
item1 item2 item3
item4 item5 item6
.TE - Los comandos
.TSy.TEle dicen a Tbl que este es un entorno que puede leer. - La segunda línea le dice al programa cómo formatear esta tabla.
- La tercera línea es un campo separado por espacios que dicta la cantidad de columnas y su alineación en tu tabla.
- Las líneas cuarta y quinta son campos separados por tabulaciones que contienen los contenidos de tu tabla.

Compilar un documento con Tbl es ligeramente diferente a un archivo Troff regular. Primero, carga tu archivo:
tbl my-first-document.ms > preprocessed.msA continuación, alimenta la salida del programa a Troff:
groff -ms-Tpdf ./preprocessed.ms > output.pdfPor último, automatiza este proceso usando tuberías de UNIX:
tbl my-first-document.ms | groff -ms-Tpdf> output.pdf
Bueno saber: aprende más sobre tuberías de UNIX y redirección de archivos con sed.
Preguntas Frecuentes
¿Es posible usar Troff en Windows?
Por defecto, ni Troff ni Groff están oficialmente portados a Windows. A pesar de eso, aún puedes usar Groff junto con otras utilidades de GNU instalando el Subsistema de Windows para Linux.
¿Troff tiene una función de seguimiento de bibliografía?
Sí. Refer es un preprocesador simple que utiliza un archivo de bibliografía externo para rastrear automáticamente las referencias en un documento Troff. Puedes aprender más sobre cómo funciona visitando su página de manual ejecutando man refer.
¿Cómo puedo solucionar el error “missing DESC” al compilar Troff?
Este problema se debe probablemente a una dependencia faltante en tu sistema o a un archivo de versión incompatible. Para solucionarlo, instala el paquete groff adecuado desde el repositorio de tu distribución.
Crédito de la imagen: Simon Hattinga Verscheure a través de Unsplash. Todas las alteraciones y capturas de pantalla por Ramces Red.