# Texinfo

Texinfo è una sintassi di composizione tipografica sviluppata per semplificare il processo di creazione di documentazione che può essere facilmente convertita in vari formati, come HTML per la visualizzazione online o PDF per la stampa. Il tutto partendo da un singolo file sorgente. È implementato da un programma open source che adotta lo stesso nome. Il programma Texinfo è stato sviluppato all'interno del progetto GNU e distribuito dalla Free Software Foundation.
Texinfo è progettato per rendere semplice la creazione di manuali software. Analogamente a quanto avviene in LaTeX (altro linguaggio di markup molto utilizzato per la composizione tipografica di documenti complessi) vengono messe a disposizione le funzionalità tipiche di un libro, come capitoli, sezioni, riferimenti incrociati, tabelle e indici. Una delle caratteristiche distintive di Texinfo è la capacità di generare e mantenere aggiornate diverse forme di documentazione partendo da un unico file sorgente. Ad esempio, è possibile generare documentazione online (come pagina web HTML) e documentazione stampata (come PDF) usando lo stesso file sorgente.
La documentazione ufficiale di Texinfo afferma che prima sillaba di "Texinfo" si pronuncia in modo da fare rima con "speck" (quindi come "teck") e non con "hex". Questo perché la pronuncia è derivata da quella di TeX, dove la "X" rappresenta la lettera greca chi (χ) e non la lettera inglese "x". La pronuncia corretta di "TeX" risulta quindi simile a "tech" (come in "technology").
"Texinfo" dovrebbe essere scritto con la sola "T" maiuscola e il resto delle lettere in minuscolo. Questo stile di scrittura aiuta a mantenere la coerenza e l'identità visiva del nome nel contesto del progetto GNU.

## Formati di output

L'aggiornamento simultaneo di più formati di output della documentazione con Texinfo è reso possibile grazie a diversi convertitori di sintassi, tra cui texi2any.
Questi tool traducono il file sorgente Texinfo (.texi) in altri formati tra cui:

### HTML

    (Generato tramite texi2any --html) Essendo HTML il linguaggio standard per i documenti sul web, questo formato viene utilizzato la documentazione online. Il manuale nota che iltexi2anyL'output è volutamente piuttosto semplice per la massima portabilità e accessibilità.texi2anyL'output HTML di texi2any è altamente personalizzabile.

### DVI

    (Generato tramite texi2dvi) Il formato DVI è il formato di output del linguaggio di impaginazione TeX e contiene i comandi per riscostruire il contenuto della pagina indipendente dal dispositivo di uscita. Può quindi essere stampato o visualizzato dopo essere stato convertito in PostScript (file .ps).

### PDF

    (Generato tramite texi2dvi --pdf o texi2pdf) Basato sul linguaggio PostScript, questo formato è stato sviluppato da Adobe Systems. Rappresenta l'aspetto esatto del documento e supporta il ridimensionamento. È indipendente dalla piattaforma e può essere visualizzato con un'ampia gamma di software. Per impostazione predefinita, Texinfo utilizza il programma pdftex, una variante di TeX, per la generazione di file PDF.

### LaTeX

    (Generato tramite texi2any --latex) Si tratta di un sistema di composizione basato su TeX. L'output LaTeX può essere ulteriormente elaborato in DVI, PostScript o PDF.

### DocBook

    (Generato tramite texi2any --docbook) Si tratta di un linguaggio di markup basato su XML che viene utilizzato principalmente per scrivere documentazione tecnica. Presenta alcune somiglianze con Texinfo. È possibile convertire i file Docbook in Texinfo, utilizzando il programma docbook2X.

### EPUB

    (Generato tramite texi2any --epub3) EPUB è un formato file standard e aperto per la pubblicazione e distribuzione di libri elettronici. È un derivato dell'HTML in grado di adattarsi automaticamente alla dimensione dello schermo del dispositivo di lettura, migliorando l'esperienza di lettura

### XML

    (Generato tramite texi2any --xml) A differenza di tutti gli altri formati di output, è una traslitterazione della sorgente Texinfo, piuttosto che un output finito. Lo scopo dell'output XML di Texinfo è consentire un'ulteriore elaborazione da parte degli strumenti XML.

### Info

    (Generato tramite texi2any) Si tratta di un formato file utilizzato per la documentazione online in ambiente Unix e Unix-like. Creato dal progetto GNU, è progettato per fornire un sistema di aiuto specifico che essenzialmente è una traslitterazione in testo normale della sorgente Texinfo originale, con l'aggiunta di alcuni caratteri di controllo per separare i nodi e fornire elementi di navigazione per menu, riferimenti incrociati, indici e così via. I file in formato Info possono essere esplorati con il programma info che viene distribuito insieme a Texinfo.

### Plain text (testo semplice)

    (Generato tramite texi2any --plaintext) Assomiglia molto all'output Info ma manca di elementi di navigazione, riferimenti ecc.

### Man output

Texinfo non fornisce direttamente output in formato man perché la struttura e lo scopo delle pagine man differiscono notevolmente da quelli di Texinfo.
D'altronde, le pagine man (o "man pages") sono normalmente utilizzate come guide di riferimento rapido che forniscono sintesi e informazioni essenziali sui comandi mentre Texinfo è pensato per creare documentazione più esaustiva, che può includere tutorial dettagliati e manuali di riferimento completi.
Proprio per questa diversità di scopo, gli sviluppatore di Texinfo hanno pensato che non si avrebbe ottenuto nessun vantaggio nel tradurre il contenuto di Texinfo nel formato man.
Inoltre, molti progetti GNU scelgono di non creare o aggiornare le pagine man regolarmente e di fornire invece una pagina man di base che indirizza i lettori alla documentazione Info, che è più dettagliata e completa.

## File sorgente Texinfo

Texinfo permette di strutturare un documento come un libro, con capitoli, sezioni, riferimenti incrociati e indici. Il file sorgente è quasi testo semplice, ma tecnicamente è testo formattato con comandi che iniziano con il carattere "@". Ecco un esempio di una parte di un file sorgente:
In questo esempio:
* @chapter introduce un nuovo capitolo.
* @section introduce una nuova sezione all'interno del capitolo.
* @xref crea un riferimento incrociato ad un altro capitolo o sezione.
* @printindex stampa un indice, in questo caso un indice concettuale (cp).

## Storia e stato dell'arte

Texinfo è rilasciato sotto la licenza GNU General Public License ed è utilizzato come sistema di documentazione ufficiale per il progetto GNU.
La sua nascita fonda le proprie radici negli anni '70. All'epoca, Richard M. Stallman sviluppò Emacs, un editor di testo basato su TECO (Text Editor and COrrector). Durante questo periodo, Stallman si ispirò al sistema ipertestuale di Douglas Engelbart e iniziò a lavorare su un sistema di documentazione online chiamato Info.
Successivamente, negli anni '80, presso il MIT, Stallman lavorò su un sistema chiamato Bolio, utilizzato per la documentazione della Lisp Machine. Questo sistema fu convertito per utilizzare TeX come linguaggio di composizione tipografica, dando vita a BoTeX.
Stallman combinando BoTeX e Info creò Texinfo, un linguaggio di markup progettato per creare documenti che potevano essere letti sia online che in formato stampato. Questo permetteva di mantenere una singola fonte di verità per la documentazione, riducendo la duplicazione e facilitando la manutenzione
Texinfo è "vagamente basato sul Scribe di Brian Reid e su altri linguaggi di formattazione dell'epoca". ("loosely based on Brian Reid's Scribe and other formatting languages of the time")