Come usare Troff per formattare documenti PDF in Linux

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.

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.

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
Ci sono casi in cui le distribuzioni non includono Troff per impostazione predefinita. In tal caso, puoi installarlo cercando il pacchetto “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
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.

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.

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.msPoiché 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
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.
Da qui, crea il tuo documento passando il tuo file al programma Troff.
groff -ms-Tpdf ./my-first-document.ms > output.pdf
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
.Bcambia il testo in grassetto. - Il comando
.Icambia il testo in corsivo. .ULe.BXsono 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.

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

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

Compilare un documento con Tbl è leggermente diverso rispetto a un file Troff regolare. Prima, carica il tuo file:
tbl my-first-document.ms > preprocessed.msSuccessivamente, alimenta l’output del programma a Troff:
groff -ms-Tpdf ./preprocessed.ms > output.pdfInfine, automatizza questo processo utilizzando pipe UNIX:
tbl my-first-document.ms | groff -ms-Tpdf> output.pdf
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.