Como Usar Troff para Formatá PDF Documentos no Linux

Uma imagem das mãos de uma pessoa digitando em um teclado de laptop.

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.

A tela padrão do Libreoffice Writer.

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.

Uma sessão remota do OpenBSD executando o Troff.

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

Uma tela de terminal executando a flag -h no Troff.

Existem casos em que distribuições não incluem o Troff por padrão. Nesse caso, você pode instalá-lo procurando pelo pacote “groff”.

Uma janela de terminal executando o comando apt info para 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

Uma janela de terminal mostrando o comando apt install para 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.

Uma janela de terminal mostrando uma macro Troff complexa.

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.

instalar troff linux 08 ms macros manual 609x400

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.ms

Como 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

Uma janela de terminal mostrando um novo documento 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.

Uma janela de terminal mostrando um documento Troff básico.

A partir daqui, crie seu documento passando seu arquivo para o programa Troff.

groff -ms-Tpdf ./my-first-document.ms > output.pdf

Uma saída PDF de um documento Troff básico.

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 .B muda o texto para negrito.
  • O comando .I muda o texto para itálico.
  • .UL e .BX sã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.

Uma saída PDF de um documento Troff que mostra uma única palavra em negrito.

É 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. [...]

Uma saída PDF de um documento Troff que mostra a maior parte do corpo em itálico.

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.

Uma saída PDF de um documento Troff com um único cabeçalho numerado.

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.

Uma saída PDF de um documento Troff que mostra uma página com um cabeçalho aninhado numerado.

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.

Uma saída PDF de um documento Troff que mostra um cabeçalho aninhado não numerado.

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

Uma saída PDF de um documento Troff que mostra um item de lista simples.

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

Uma saída PDF de um documento Troff que mostra um único item de lista com um ponto de marcador.

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

Uma saída PDF de um documento Troff que mostra três itens de lista básicos com pontos de marcador.

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

Uma janela de terminal que mostra o arquivo fonte de um documento que usou macros para automatizar a criação de listas.

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.

Uma janela de terminal que mostra o código Troff convertido de um preprocessador.

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 .TS e .TE dizem 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.

Uma janela de terminal que mostra o script de preprocessador para Tbl.

Compilar um documento com Tbl é ligeiramente diferente de um arquivo Troff regular. Primeiro, carregue seu arquivo:

tbl my-first-document.ms > preprocessed.ms

Em seguida, alimente a saída do programa para o Troff:

groff -ms-Tpdf ./preprocessed.ms > output.pdf

Por último, automatize esse processo usando pipes do UNIX:

tbl my-first-document.ms | groff -ms-Tpdf> output.pdf

Uma saída PDF de um documento Troff que mostra uma tabela básica.

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.