Como usar o Troff para formatar documentos PDF no Linux

Como usar o Troff para formatar documentos PDF no Linux

Troff é um processador de texto de documento mínimo, mas poderoso, para sistemas Linux. Ele permite que você crie facilmente documentos prontos para impressão compilando arquivos de origem 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.

O que é Troff e por que usá-lo

Em um sentido básico, o Troff é um programa de processamento de texto que converte scripts semelhantes a códigos em documentos imprimíveis. Ao contrário dos processadores de texto, o Troff não depende do paradigma “WYSIWYG”. Em vez disso, exige que você use tipos específicos de código para lidar com a 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, a falta de uma interface gráfica do usuário significa que você pode criar um documento até mesmo por SSH.

Uma sessão remota do OpenBSD executando o Troff.

Instalando o Troff

O Troff geralmente é incluído por padrão na maioria das distribuições do Linux. Você pode verificar se o possui em seu sistema executando seu -hsinalizador. Isso exibirá uma breve lista de todos os sinalizadores que sua instalação do Troff aceita.

troff -h

Uma tela de terminal executando o sinalizador -h no Troff.

Existem casos em que as distribuições não agrupam 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 vários recursos novos e modernos.

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, todo documento Troff é um arquivo de texto que contém instruções sobre como criar um documento. Isso inclui a largura da página e da margem, bem como o espaçamento entre letras e páginas.

Uma tela de janela de terminal mostrando uma complexa macro Troff.

Este 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 é “ms”. Ele criará um documento em um estilo de artigo. Você pode criar um documento ms usando o touchcomando:

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. Como alternativa, 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. Como tal, um documento Troff típico será mais ou menos 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 .TLe .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 de parágrafo.

Por exemplo, o trecho a seguir usa os comandos .TLe :.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 em PDF de um documento Troff básico.

Criação de texto em negrito, itálico e sublinhado

Assim como um processador de texto comum, a maioria das macros Troff fornece vários comandos de estilo para personalizar seu documento. Para ms, estes são .B, .I, .ULe .BX.

  • O .Bcomando altera o texto para negrito.
  • O .Icomando altera 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, usá-los em seu documento requer que você separe 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, criei uma nova linha antes da palavra “content” e adicionei o .Bcomando para mudar para negrito, depois criei uma nova linha e adicionei o .Rcomando. Isso permite que Troff volte ao seu estilo anterior.

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

É importante observar que você sempre precisa adicionar o .Rcomando ao alterar o estilo. Por exemplo, o trecho a seguir não encerrará o .Icomando, pois Troff não viu um .Rdepois dele:

.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 oferece suporte à detecção de seções e hierarquia, portanto, você não precisa organizar e corresponder ao nível de cada cabeçalho ao editar.

Para criar uma nova seção em seu documento, use o .NHcomando seguido do nome do título.

.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 determina como o programa estrutura e exibe seu conteúdo no documento final. Sabendo disso, você pode alterar esse valor para ajustar o nível de um título.

Por exemplo, o seguinte cria um título 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 título aninhado numerado.

Além dos 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 .NHpelo .SHcomando:

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

Criando Listas no Troff

A simplicidade do Troff também permite que você dobre seu comportamento para o que você precisa. Por exemplo, as listas não vêm por padrão nas macros Troff ou ms. Apesar disso, você ainda pode criar uma lista combinando alguns comandos ms.

Cada lista no Troff consiste em três partes: um recuo, um marcador e o conteúdo. Para criar o recuo, use os comandos .RSe . .REIsso moverá o nível de recuo atual de qualquer texto dentro dele em quatro espaços.

.RS
This is my first item.
.RE

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

Em seguida, crie o marcador para o item da lista usando .IP. Este é o comando “recuar parágrafo” que corrige a margem esquerda do seu texto para uma certa largura.

O .IPcomando também permite definir um marcador personalizado e o espaço entre ele e o texto. Nesse caso, estou definindo meu marcador como “[1]” e darei 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 marcador.

Agora copie e cole seu .IPcomando 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 básicos de lista com marcadores.

Por fim, automatize esse processo criando uma macro personalizada. Por exemplo, o trecho a seguir limita meu .IPcomando a .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 de origem de um documento que usou macros para automatizar a criação de listas.

Criando tabelas com pré-processadores no Troff

Uma peculiaridade do Troff é que a maioria de seus recursos existe como “pré-processadores”. Na maioria das vezes, esses são binários fora do programa que funcionam criando “scripts de contêiner de pré-processador” e convertendo-os em código Troff de baixo nível.

Uma janela de terminal que mostra o código Troff convertido de um pré-processador.

Tbl é um ótimo exemplo de um pré-processador Troff. É um programa que gerencia tabelas em um documento. Um contêiner Tbl básico se parece com isto:

.TS
allbox ;
c c c.
item1 <Tab> item2 <Tab> item3
item4 <Tab> item5 <Tab> item6

.TE

  • Os comandos .TSe .TEinformam 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ço que determina a quantidade de colunas e seu alinhamento em sua tabela.
  • A quarta e a quinta linhas são campos separados por tabulações que contêm o conteúdo da sua tabela.
Uma janela de terminal que mostra o script do pré-processador para Tbl.

Compilar um documento com Tbl é um pouco diferente de um arquivo Troff normal. 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 fim, automatize esse processo usando pipes UNIX:

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

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

perguntas frequentes

É possível usar o Troff no Windows?

Por padrão, nem Troff nem Groff são oficialmente transferidos para o Windows. Apesar disso, você ainda pode usar o Groff junto com outros utilitários GNU instalando o Windows Subsystem for Linux.

O Troff tem um recurso de rastreamento de bibliografia?

Sim. Referé um pré-processador simples que usa um arquivo de bibliografia externa para rastrear automaticamente as 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 provavelmente ocorre 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 screenshots por Ramces Red.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *