Como Usar Troff para Formatá PDF Documentos no Linux

Troff é um processador de texto minimalista, mas poderoso, para sistemas Linux. Ele permite que você crie documentos prontos para impressão facilmente, compilando arquivos fonte a partir da linha de comando. Ao contrário do LaTeX, o Troff é incrivelmente leve e vem pré-instalado na maioria dos sistemas Linux. Este tutorial mostra como usar o Troff para formatar documentos PDF no Ubuntu.
Índice
- O que é Troff e por que usá-lo
- Instalando o Troff
- Criando seu primeiro documento Troff
- Entendendo o formato Troff
- Criando texto em negrito, itálico e sublinhado
- Criando novas seções de documento
- Criando listas no Troff
- Criando tabelas com preprocessadores no Troff
- Perguntas frequentes
O que é Troff e por que usá-lo
De forma básica, o Troff é um programa de processamento de texto que converte scripts semelhantes a código em documentos imprimíveis. Ao contrário dos processadores de texto, o Troff não depende do paradigma “WYSIWYG”. Em vez disso, ele exige que você use tipos específicos de código para lidar com sua formatação.

Uma das maiores vantagens dessa abordagem é a simplicidade. Uma instalação básica do Troff terá tudo o que você precisa para criar um documento. Além disso, sua falta de uma interface gráfica significa que você pode criar um documento mesmo via SSH.

Dica: aprenda como encaminhar aplicativos GUI via SSH no Linux.
Instalando o Troff
O Troff geralmente vem incluído por padrão na maioria das distribuições Linux. Você pode verificar se o tem em seu sistema executando sua flag -h. Isso exibirá uma lista breve de todas as flags que sua instalação do Troff aceita.
troff -h
Existem casos em que distribuições não incluem o Troff por padrão. Nesse caso, você pode instalá-lo procurando pelo pacote “groff”.

Esta é uma reimplementação dos programas Troff e Nroff pelo Projeto GNU, que inclui uma série de novos e modernos recursos.
Você pode instalar o groff no Ubuntu usando o seguinte comando:
sudo apt install groff
Criando seu primeiro documento Troff
Semelhante ao código fonte, cada documento Troff é um arquivo de texto que contém instruções sobre como criar um documento. Isso inclui a largura da página e das margens, bem como o espaçamento entre letras e páginas.

Esse nível de controle permite que você manipule o programa para criar qualquer tipo de documento. Para simplificar isso, os desenvolvedores do Troff criaram “macros” que condensam esses comandos em uma sintaxe mais simples.

Uma das macros mais comuns que você usará no Troff é a “ms”. Ela criará um documento em estilo de artigo. Você pode criar um documento ms usando o comando touch:
touch my-first-document.msComo todos os documentos Troff são texto, você pode abrir seu documento usando um editor de texto. No meu caso, estou usando o vim. Alternativamente, você pode usar qualquer um desses editores de texto para Linux.
vim my-first-document.ms
Entendendo o formato Troff
Todos os documentos Troff seguem uma estrutura semelhante. Cada comando de formatação que você faz precisa estar em uma linha separada no conteúdo que está tentando formatar. Assim, um documento Troff típico parecerá algo assim:
.COMMAND1
This is a piece of content in a Troff document.
.COMMAND2
This is a different piece of content in a Troff document.Dois dos comandos mais básicos que você usará no ms são .TL e .PP. O primeiro converte seu texto em um título e o centraliza em seu documento, enquanto o último formata seu texto para seguir um estilo semelhante a parágrafo.
Por exemplo, o seguinte trecho usa tanto os comandos .TL quanto .PP:
.TL
My First Troff Document
.PP
This is content that I want to look like a paragraph in my final document. It is not a very long content but it is my first Troff document and it is something that I am proud of. It is about three sentences long and it should wrap around the document properly.
A partir daqui, crie seu documento passando seu arquivo para o programa Troff.
groff -ms-Tpdf ./my-first-document.ms > output.pdf
Dica: se você prefere algo mais simples, aprenda como escrever no formato MLA no Google Docs.
Criando texto em negrito, itálico e sublinhado
Assim como um processador de texto comum, a maioria das macros do Troff fornece uma série de comandos de estilo para personalizar seu documento. Para ms, esses são .B, .I, .UL e .BX.
- O comando
.Bmuda o texto para negrito. - O comando
.Imuda o texto para itálico. .ULe.BXsão comandos que desenham um sublinhado e uma caixa ao redor do seu texto, respectivamente.
Semelhante aos comandos acima, usar esses em seu documento requer que você separa cada estilo em sua própria linha:
.TL
My First Troff Document
.PP
This is
.B
content
.R
that I want to look like a paragraph in my final document. [...]Neste exemplo, eu criei uma nova linha antes da palavra “content” e adicionei o comando .B para mudá-la para negrito, depois criei uma nova linha e adicionei o comando .R. Isso permite que o Troff retorne ao seu estilo anterior.

É importante notar que você sempre precisa adicionar o comando .R ao mudar de estilo. Por exemplo, o seguinte trecho não encerrará o comando .I uma vez que o Troff não viu um .R após ele:
.TL
My First Troff Document
.PP
This is
.I
content
that I want to look like a paragraph in my final document. [...]
Criando novas seções de documento
Semelhante ao LaTeX, o Troff também suporta seções e detecção de hierarquia, então você não precisa organizar e combinar o nível de cada cabeçalho ao editar.
Para criar uma nova seção em seu documento, use o comando .NH seguido pelo nome do seu cabeçalho.
.TL
My First Troff Document
.NH
My First Heading
.PP
This is content that I want to look like a paragraph in my final document.
Por padrão, cada cabeçalho Troff tem um valor de nível que dita como o programa estrutura e exibe seu conteúdo no documento final. Sabendo disso, você pode mudar esse valor para ajustar o nível de um cabeçalho.
Por exemplo, o seguinte cria um cabeçalho de nível 2 imediatamente abaixo de seu pai:
.TL
My First Troff Document
.NH
My First Heading
.NH 2
My First Subheading
.PP
This is content that I want to look like a paragraph in my final document.
Além de cabeçalhos numerados regulares, o Troff também pode criar cabeçalhos em branco que ainda seguirão a hierarquia de nível do documento.
Para fazer isso, substitua .NH pelo comando .SH:
.TL
My First Troff Document
.SH
My First Heading
.SH 2
My First Subheading
.PP
This is content that I want to look like a paragraph in my final document.
Dica: descubra como mudar margens no Google Docs.
Criando listas no Troff
A simplicidade do Troff também permite que você molde seu comportamento para o que precisar. Por exemplo, listas não vêm por padrão em nenhum dos macros do Troff ou ms. Apesar disso, você ainda pode criar uma lista combinando alguns comandos ms.
Cada lista no Troff consiste em três partes: uma indentação, um marcador e o conteúdo. Para criar a indentação, use os comandos .RS e .RE. Esses moverão o nível de indentação atual de qualquer texto dentro dele em quatro espaços.
.RS
This is my first item.
.RE
Em seguida, crie o marcador para seu item de lista usando .IP. Este é o comando “indent paragraph” que fixa a margem esquerda do seu texto a uma certa largura.
O comando .IP também permite que você defina um ponto de marcador personalizado e o espaço entre ele e seu texto. Neste caso, estou definindo meu marcador como “[1]” e dando-lhe quatro espaços.
.RS
.IP [1]4
This is my first item.
.RE
Agora copie e cole seu comando .IP para criar itens de lista adicionais.
.RS
.IP [1]4
This is my first item.
.IP [2]4
This is my second item.
.IP [3]4
This is my third item.
.RE
Finalmente, automatize esse processo criando uma macro personalizada. Por exemplo, o seguinte trecho vincula meu comando .IP ao .QW:
.de QW
.IP [-]4
..
.RS
.QW
This is my first item.
.QW
This is my second item.
.QW
This is my third item.
.RE
Criando tabelas com preprocessadores no Troff
Uma peculiaridade do Troff é que a maioria de seus recursos existe como “preprocessadores”. Na maior parte, esses são binários fora do programa que funcionam criando “scripts de contêiner de preprocessador” e convertem esses em código Troff de baixo nível.

Tbl é um ótimo exemplo de um preprocessador Troff. É um programa que gerencia tabelas em um documento. Um contêiner Tbl básico parece algo assim:
.TS
allbox ;
c c c.
item1 item2 item3
item4 item5 item6
.TE - Os comandos
.TSe.TEdizem ao Tbl que este é um ambiente que ele pode ler. - A segunda linha diz ao programa como formatar esta tabela.
- A terceira linha é um campo separado por espaços que dita a quantidade de colunas e seu alinhamento na sua tabela.
- As linhas quarta e quinta são campos separados por tabulações que contêm os conteúdos da sua tabela.

Compilar um documento com Tbl é ligeiramente diferente de um arquivo Troff regular. Primeiro, carregue seu arquivo:
tbl my-first-document.ms > preprocessed.msEm seguida, alimente a saída do programa para o Troff:
groff -ms-Tpdf ./preprocessed.ms > output.pdfPor último, automatize esse processo usando pipes do UNIX:
tbl my-first-document.ms | groff -ms-Tpdf> output.pdf
Bom saber: aprenda mais sobre pipes do UNIX e redirecionamento de arquivos com sed.
Perguntas frequentes
É possível usar Troff no Windows?
Por padrão, nem o Troff nem o Groff estão oficialmente portados para Windows. Apesar disso, você ainda pode usar o Groff junto com outras utilidades GNU instalando o Windows Subsystem for Linux.
O Troff tem um recurso de rastreamento de bibliografia?
Sim. Refer é um preprocessador simples que usa um arquivo de bibliografia externo para rastrear automaticamente referências em um documento Troff. Você pode aprender mais sobre como funciona visitando sua página de manual executando man refer.
Como posso corrigir o erro “missing DESC” ao compilar o Troff?
Esse problema é mais provável devido a uma dependência ausente em seu sistema ou a um arquivo de versão incompatível. Para corrigir isso, instale o pacote groff apropriado do repositório da sua distribuição.
Crédito da imagem: Simon Hattinga Verscheure via Unsplash. Todas as alterações e capturas de tela por Ramces Red.