Come usare Troff per formattare documenti PDF in Linux

Un'immagine delle mani di una persona che digita su una tastiera di laptop.

Troff è un processore di testo per documenti minimale ma potente per sistemi Linux. Ti consente di creare facilmente documenti pronti per la stampa compilando file sorgente dalla riga di comando. A differenza di LaTeX, Troff è incredibilmente leggero ed è preinstallato nella maggior parte dei sistemi Linux. Questo tutorial ti mostra come usare Troff per formattare documenti PDF in Ubuntu.

Indice

  • Cos’è Troff e perché usarlo
  • Installare Troff
  • Creare il tuo primo documento Troff
  • Comprendere il formato Troff
  • Creare testo in grassetto, corsivo e sottolineato
  • Creare nuove sezioni del documento
  • Creare elenchi in Troff
  • Creare tabelle con preprocessori in Troff
  • Domande frequenti

Cos’è Troff e perché usarlo

In un senso basilare, Troff è un programma di elaborazione testi che converte script simili a codice in documenti stampabili. A differenza dei processori di testo, Troff non si basa sul paradigma “WYSIWYG”. Invece, richiede di utilizzare specifici tipi di codice per gestire la formattazione.

Lo schermo predefinito di Libreoffice Writer.

Uno dei maggiori vantaggi di questo approccio è la semplicità. Un’installazione di base di Troff avrà tutto il necessario per creare un documento. Inoltre, la sua mancanza di un’interfaccia grafica significa che puoi creare un documento anche tramite SSH.

Una sessione remota di OpenBSD che esegue Troff.

Suggerimento: impara come inoltrare applicazioni GUI tramite SSH in Linux.

Installare Troff

Troff è spesso incluso per impostazione predefinita nella maggior parte delle distribuzioni Linux. Puoi controllare se è presente nel tuo sistema eseguendo il suo flag -h. Questo mostrerà un breve elenco di tutti i flag che la tua installazione di Troff accetta.

troff -h

Uno schermo del terminale che esegue il flag -h in Troff.

Ci sono casi in cui le distribuzioni non includono Troff per impostazione predefinita. In tal caso, puoi installarlo cercando il pacchetto “groff”.

Una finestra del terminale che esegue il comando apt info per groff.

Questa è una reimplementazione dei programmi Troff e Nroff da parte del Progetto GNU, che include una serie di nuove e moderne funzionalità.

Puoi installare groff in Ubuntu usando il seguente comando:

sudo apt install groff

Una finestra del terminale che mostra il comando apt install per groff.

Creare il tuo primo documento Troff

Simile al codice sorgente, ogni documento Troff è un file di testo che contiene istruzioni su come creare un documento. Queste includono la larghezza della pagina e dei margini, così come la spaziatura delle lettere e delle pagine.

Una finestra del terminale che mostra una macro Troff complessa.

Questo livello di controllo ti consente di manipolare il programma per creare qualsiasi tipo di documento. Per semplificare ciò, gli sviluppatori di Troff hanno creato “macro” che condensano questi comandi in una sintassi più semplice.

install troff linux 08 ms macros manual 609x400

Una delle macro più comuni che utilizzerai in Troff è “ms”. Essa creerà un documento in uno stile articolo. Puoi creare un documento ms usando il comando touch:

touch my-first-document.ms

Poiché tutti i documenti Troff sono testo, puoi aprire il tuo documento usando un editor di testo. Nel mio caso, sto usando vim. In alternativa, puoi usare uno di questi editor di testo per Linux.

vim my-first-document.ms

Una finestra del terminale che mostra un nuovo documento ms.

Comprendere il formato Troff

Tutti i documenti Troff seguono una struttura simile. Ogni comando di formattazione che fai deve essere su una riga separata nel contenuto che stai cercando di formattare. Pertanto, un tipico documento Troff apparirà in questo modo:

.COMMAND1  
Questo è un pezzo di contenuto in un documento Troff.  
  
.COMMAND2  
Questo è un pezzo diverso di contenuto in un documento Troff.

Due dei comandi più basilari che utilizzerai in ms sono .TL e .PP. Il primo converte il tuo testo in un titolo e lo centra nel tuo documento, mentre il secondo formatta il tuo testo per seguire uno stile simile a un paragrafo.

Ad esempio, il seguente estratto utilizza sia i comandi .TL che .PP:

.TL  
Il mio primo documento Troff  
  
.PP  
Questo è un contenuto che voglio sembrare un paragrafo nel mio documento finale. Non è un contenuto molto lungo ma è il mio primo documento Troff e ne sono orgoglioso. È lungo circa tre frasi e dovrebbe adattarsi correttamente nel documento.

Una finestra del terminale che mostra un documento Troff di base.

Da qui, crea il tuo documento passando il tuo file al programma Troff.

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

Un output PDF di un documento Troff di base.

Suggerimento: se preferisci qualcosa di più semplice, impara come scrivere in formato MLA in Google Docs.

Creare testo in grassetto, corsivo e sottolineato

Proprio come un normale processore di testi, la maggior parte delle macro Troff fornisce una serie di comandi di stile per personalizzare il tuo documento. Per ms, questi sono .B, .I, .UL e .BX.

  • Il comando .B cambia il testo in grassetto.
  • Il comando .I cambia il testo in corsivo.
  • .UL e .BX sono comandi che disegnano una sottolineatura e una cornice attorno al tuo testo, rispettivamente.

Simile ai comandi sopra, utilizzare questi nel tuo documento richiede di separare ogni stile su una propria riga:

.TL  
Il mio primo documento Troff  
  
.PP  
Questo è  
.B  
contenuto  
.R  
che voglio sembrare un paragrafo nel mio documento finale. [...]

In questo esempio, ho creato una nuova riga prima della parola “contenuto” e ho aggiunto il comando .B per cambiarlo in grassetto, poi ho creato una nuova riga e ho aggiunto il comando .R. Questo consente a Troff di tornare al suo stile precedente.

Un output PDF di un documento Troff che mostra una singola parola in grassetto.

È importante notare che devi sempre aggiungere il comando .R quando cambi stile. Ad esempio, il seguente estratto non terminerà il comando .I poiché Troff non ha visto un .R dopo di esso:

.TL  
Il mio primo documento Troff  
  
.PP  
Questo è  
.I  
contenuto  
che voglio sembrare un paragrafo nel mio documento finale. [...]

Un output PDF di un documento Troff che mostra la maggior parte del corpo in corsivo.

Creare nuove sezioni del documento

Simile a LaTeX, Troff supporta anche sezioni e rilevamento della gerarchia, quindi non è necessario organizzare e abbinare il livello di ciascun intestazione quando si modifica.

Per creare una nuova sezione nel tuo documento, usa il comando .NH seguito dal nome del tuo intestazione.

.TL  
Il mio primo documento Troff  
  
.NH  
La mia prima intestazione  
.PP  
Questo è un contenuto che voglio sembrare un paragrafo nel mio documento finale.

Un output PDF di un documento Troff che mostra un'unica intestazione numerata.

Per impostazione predefinita, ogni intestazione Troff ha un valore di livello che determina come il programma struttura e visualizza il suo contenuto nel documento finale. Sapendo ciò, puoi cambiare questo valore per regolare il livello di un’intestazione.

Ad esempio, il seguente crea un’intestazione di livello 2 immediatamente sotto il suo genitore:

.TL  
Il mio primo documento Troff  
  
.NH  
La mia prima intestazione  
.NH 2  
La mia prima sottotitolo  
.PP  
Questo è un contenuto che voglio sembrare un paragrafo nel mio documento finale.

Un output PDF di un documento Troff che mostra una pagina con un'intestazione annidata numerata.

Oltre alle intestazioni numerate regolari, Troff può anche creare intestazioni vuote che seguiranno comunque la gerarchia di livello del documento.

Per fare ciò, sostituisci .NH con il comando .SH:

.TL  
Il mio primo documento Troff  
  
.SH  
La mia prima intestazione  
.SH 2  
La mia prima sottotitolo  
.PP  
Questo è un contenuto che voglio sembrare un paragrafo nel mio documento finale.

Un output PDF di un documento Troff che mostra un'intestazione annidata non numerata.

Suggerimento: scopri come cambiare i margini in Google Docs.

Creare elenchi in Troff

La semplicità di Troff ti consente anche di piegare il suo comportamento a qualsiasi cosa tu abbia bisogno. Ad esempio, gli elenchi non sono inclusi per impostazione predefinita né in Troff né nelle macro ms. Nonostante ciò, puoi comunque creare un elenco combinando alcuni comandi ms.

Ogni elenco in Troff consiste di tre parti: un rientro, un punto elenco e il contenuto. Per creare il rientro, usa i comandi .RS e .RE. Questi sposteranno il livello di rientro corrente di qualsiasi testo all’interno di essi di quattro spazi.

.RS  
Questo è il mio primo elemento.  
.RE

Un output PDF di un documento Troff che mostra un semplice elemento dell'elenco.

Successivamente, crea il punto elenco per il tuo elemento dell’elenco usando .IP. Questo è il comando “indent paragraph” che fissa il margine sinistro del tuo testo a una certa larghezza.

Il comando .IP consente anche di impostare un punto elenco personalizzato e lo spazio tra esso e il tuo testo. In questo caso, sto impostando il mio punto elenco su “[1]” e gli darò quattro spazi.

.RS  
.IP [1]4  
Questo è il mio primo elemento.  
.RE

Un output PDF di un documento Troff che mostra un singolo elemento dell'elenco con un punto elenco.

Ora copia e incolla il tuo comando .IP per creare ulteriori elementi dell’elenco.

.RS  
.IP [1]4  
Questo è il mio primo elemento.  
.IP [2]4  
Questo è il mio secondo elemento.  
.IP [3]4  
Questo è il mio terzo elemento.  
.RE

Un output PDF di un documento Troff che mostra tre elementi di base dell'elenco con punti elenco.

Infine, automatizza questo processo creando una macro personalizzata. Ad esempio, il seguente estratto lega il mio comando .IP a .QW:

.de QW  
.IP [-]4  
..  
  
.RS  
.QW  
Questo è il mio primo elemento.  
.QW  
Questo è il mio secondo elemento.  
.QW  
Questo è il mio terzo elemento.  
.RE

Una finestra del terminale che mostra il file sorgente di un documento che ha utilizzato macro per automatizzare la creazione dell'elenco.

Creare tabelle con preprocessori in Troff

Una particolarità di Troff è che la maggior parte delle sue funzionalità esistono come “preprocessori”. Per la maggior parte, questi sono binari esterni al programma che funzionano creando “script contenitore per preprocessori” e convertendoli in codice Troff a basso livello.

Una finestra del terminale che mostra il codice Troff convertito da un preprocessore.

Tbl è un ottimo esempio di un preprocessore Troff. È un programma che gestisce le tabelle in un documento. Un contenitore Tbl di base appare in questo modo:

.TS  
allbox ;  
c c c.  
item1  item2  item3  
item4  item5  item6  
  
.TE
  • I comandi .TS e .TE dicono a Tbl che questo è un ambiente che può leggere.
  • La seconda riga dice al programma come formattare questa tabella.
  • La terza riga è un campo separato da spazi che determina il numero di colonne e il loro allineamento nella tua tabella.
  • Le righe quarta e quinta sono campi separati da tabulazioni che contengono i contenuti della tua tabella.

Una finestra del terminale che mostra lo script del preprocessore per Tbl.

Compilare un documento con Tbl è leggermente diverso rispetto a un file Troff regolare. Prima, carica il tuo file:

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

Successivamente, alimenta l’output del programma a Troff:

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

Infine, automatizza questo processo utilizzando pipe UNIX:

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

Un output PDF di un documento Troff che mostra una tabella di base.

Buono a sapersi: scopri di più sulle pipe UNIX e la redirezione dei file con sed.

Domande frequenti

È possibile usare Troff in Windows?

Per impostazione predefinita, né Troff né Groff sono ufficialmente portati su Windows. Nonostante ciò, puoi comunque utilizzare Groff insieme ad altre utility GNU installando il Windows Subsystem for Linux.

Troff ha una funzione di tracciamento della bibliografia?

Sì. Refer è un semplice preprocessore che utilizza un file di bibliografia esterno per tracciare automaticamente i riferimenti in un documento Troff. Puoi saperne di più su come funziona visitando la sua pagina manuale eseguendo man refer.

Come posso risolvere l’errore “missing DESC” durante la compilazione di Troff?

Questo problema è molto probabilmente dovuto a una dipendenza mancante nel tuo sistema o a un file di versione non corrispondente. Per risolvere questo, installa il pacchetto groff corretto dal repository della tua distribuzione.

Crediti immagine: Simon Hattinga Verscheure via Unsplash. Tutte le modifiche e gli screenshot di Ramces Red.