# GNU Texmacs

GNU TeXmacs è un editor di testo WYSIWYG e allo stesso tempo un sistema di tipografia digitale destinato particolarmente a scopi di tipo scientifico come la scrittura di libri, articoli e presentazioni. È ispirato a TeX e Emacs, ma sviluppato in maniera completamente indipendente da questi programmi. L'ideatore e sviluppatore principale è Joris van der Hoeven, coadiuvato da un gruppo di collaboratori. Il programma genera documenti strutturati mediante un'interfaccia utente WYSIWYG. Gli utenti possono creare nuovi stili per i documenti; l'editor rende disponibili algoritmi di alta qualità per la tipografia permettendo di ottenere documenti dall'aspetto professionale.

## Editing interattivo di documenti strutturati (anni 1980-2020)

TeXmacs è l'erede moderno di programmi quali Interleaf (pubblicato nel 1985), Framemaker (1986), SoftQuad Author/Editor, Lilac, Grif e Thot, sviluppati negli anni 1980 e 1990 con l'obiettivo di rendere possibile l'editing interattivo di documenti strutturati. In questi stessi anni, l'interesse nei sistemi per l'editing interattivo di costrutti tipografici complessi rappresentati con delle strutture logiche si era espresso, per esempio, nell'editor di equazioni presentato nella tesi di dottorato di Clement Shin Tai-Yin e nell'editor grafico implementato nella tesi di dottorato di Paul Asente (in questo lavoro la grafica è generata con Dum, un linguaggio procedurale, che può essere controllato attraverso un editor che agisce direttamente sulla grafica, Dee).
Negli anni 2000 e 2010, l'interesse per l'editing interattivo di documenti strutturati ha stimolato lo sviluppo di programmi rivolti agli studiosi di discipline umanistiche; un esempio di tali programmi è il "CWRC-Writer", un editor visuale XML con "Close-to-WYSIWYG editing and enrichment of scholarly texts with meaningful visual representations of markup" ("Editing quasi-WYSIWYG e arricchimento di testi accademici con rappresentazioni visive del markup espressive").
In un'altra regione del mondo dell'editing e della preparazione di documenti, un programma per l'interazione visuale con testi strutturati scritti in LaTeX è LyX, che non mira all'editing WYSIWYG ma piuttosto alla rappresentazione visiva della struttura (WYSIWYM).

## Caratteristiche

Come in molti editor WYSIWYG (per esempio Microsoft Word), gli utenti manipolano sullo schermo un documento dalla disposizione grafica simile a quella che il documento avrà una volta stampato. L'obiettivo di TeXmacs è fornire un editor WYSIWYG che renda possibile scrivere testi scientifici in maniera strutturata. TeXmacs non è un front-end per LaTeX ma i documenti TeXmacs possono essere convertiti in formato LaTeX; è anche possibile importare documenti LaTeX (l'importazione è limitata a un insieme di comandi). Inoltre ci sono filtri per l'importazione da ed esportazione verso i formati HTML, Scheme, "Verbatim", e XML. È disponibile la conversione nel formato MathML, e nei formati PDF e PostScript per ottenere versioni stampabili del documento.
TeXmacs permette la scrittura di formule matematiche in maniera efficiente, supporta tabelle, immagini, riferimenti interni e bibliografici e può interfacciarsi con diversi programmi con un'interattività simile a una shell (Maxima, mupad, python, scypy, Mathematica, Bash). È distribuito con la licenza GNU GPL v3. TeXmacs supporta il linguaggio di estensione Guile permettendo così di estendere la funzionalità del programma.
Fra gli stili di TeXmacs è incluso uno stile per presentazioni; il programma comprende inoltre un piccolo editor grafico. A partire dalla versione 1.99.12 è possibile inserire dei fogli di calcolo che possono sfruttare alcuni dei plugin (ad esempio Python o Maxima) per le loro operazioni.
Attualmente ci sono eseguibili TeXmacs per la maggior parte delle architetture basate su Unix fra le quali Linux, FreeBSD, Cygwin e macOS. Al fianco della versione Cygwin è presente un port nativo per Microsoft Windows.

### L'editor di TeXmacs

Nell'editor di TeXmacs sono rappresentati sia la struttura sia l'aspetto del documento; la struttura viene evidenziata con delle cornici di "focus" grigie o ciano che racchiudono le suddivisioni logiche del documento e vengono mostrate o nascoste a seconda della posizione del cursore, che è finemente controllabile. Nell'editor sono presenti il modo "testo" (WYSIWYG e cornici di struttura) e il modo "sorgente"; alcuni comandi supportano la composizione delle macro.

### Inserimento delle formule matematiche

L'input di formule matematiche in TeXmacs è reso snello dalla possibilità di inserire simboli usando combinazioni di tasti. Per esempio, il simbolo $\Rightarrow$ può essere inserito con la sequenza di tasti =>.
Simboli che non sono rappresentati con sequenze di tasti (per esempio $\Uparrow$) sono suddivisi in gruppi; ogni gruppo è assegnato a un tasto e gli elementi del gruppo sono successivamente raggiungibili tramite la pressione ripetuta del tasto tab (per esempio la sequenza di tasti che permette di ottenere $\Uparrow$ è => tab tab).

## Il formato di TeXmacs

Tutti i documenti di TeXmacs (e ogni loro parte) possono essere visti come alberi. Per esempio, l'albero
rappresenta la formula
$x+y+{\frac {1}{2}}+{\sqrt {y+z}}$
(qui scritta con il markup TeX usato da Wikipedia) ed è resa da TeXmacs col suo proprio sistema di typesetting come rappresentato dalla seguente immagine:
Gli alberi di TeXmacs sono rappresentati su disco come stringhe, e nell'editor di TeXmacs come la rappresentazione tipografica del documento combinata con la sua interattività. Nella rappresentazione su schermo degli alberi di TeXmacs, il movimento del cursore coincide con il movimento all'interno dell'albero.

## Composizione tipografica e controllo del documento

Il processo di composizione tipografica converte gli alberi di TeXmacs in "scatole". La trasformazione degli alberi in scatole avviene attraverso riduzione di primitive, o in altre parole a ogni macro viene sostituito il suo risultato. Le primitive per la composizione tipografica sono state progettate in modo tale da essere molto veloci e sono integrate nell'editor; il rendering di molte delle primitive può essere modificato attraverso le variabili d'ambiente integrate nell'editor stesso; i fogli di stile supportano un linguaggio con il quale gli utenti possono aggiungere nuove primitive nella forma di macro.

### Controllo dei documenti

I documenti possono essere controllati con un sistema di macro nativo o usando Guile-Scheme. È possibile personalizzare i menu dell'editor e le scorciatoie da tastiera e manipolare programmaticamente gli alberi di TeXmacs.

#### Le macro di TeXmacs

Le macro di TeXmacs sono un modo di effettuare l'input strutturato (come in TeX/LaTeX) e sono rese tipograficamente in tempo reale, mantenendo allo stesso tempo campi di input editabili.

#### Controllo dei documenti tramite Scheme

Scheme è integrato in TeXmacs attraverso Guile. L'editor stesso può essere controllato in questo modo, personalizzando i menu e le scorciatoie da tastiera. I comandi di Scheme possono essere invocati interattivamente dai documenti di TeXmacs, possono essere invocati dalla linea di comando e all'interno delle macro. Gli alberi di TeXmacs sono passati a Scheme in varie forme: come "alberi passivi" (una buona rappresentazione per la manipolazione del contenuto attraverso l'azione di routine di Scheme su liste), "alberi attivi" (che contengono l'informazione sulla posizione dell'albero all'interno dell'albero globale del documento e possono essere usati per la modifica programmatica dei documenti) e in una rappresentazione "ibrida".

#### Grafica

Gli oggetti grafici sono parte del formato di TeXmacs e possono essere manipolati programmaticamente attraverso Scheme. Gli oggetti grafici generati tramite una sessione Scheme sono accessibili e modificabili anche dall'editor grafico, perché vengono inseriti nel documento come alberi; se invece i programmi scritti in Scheme sono eseguiti attraverso la macro di TeXmacs extern, solo il materiale già composto tipograficamente appare nel documento, e ulteriori modifiche possono essere fatte solo nel codice Scheme. Un esempio di grafica generata in una sessione di Scheme in TeXmacs è mostrato qui di seguito, assieme con il codice usato per generarla. È anche possibile nascondere il codice usato per generare la grafica che quindi appare integrata nel documento senza soluzione di continuità (vedi sezione Embedding dell'output dei plugin).

## Back-end supportati

TeXmacs supporta molti back-end:
Linguaggi di programmazione: CLISP, CMUCL, Python, R, Shell
Sistemi di calcolo simbolico: Axiom, Giac, Macaulay 2, Mathematica, Maxima, MuPAD, PARI/GP, Reduce, SageMath, Yacas
Sistemi di calcolo numerico: GNU Octave, Matlab, Scilab
Programmi per la rappresentazione grafica delle funzioni: Gnuplot, Graphviz, XYpic, Mathemagix
Altri: DraTeX, Eukleides, GTybalt, Lush, Juris-M or Zotero (programmi per la ricerca di referenze e la gestione delle bibliografie).

### Embedding dell'output dei plugin

L'output dei plugin può essere incorporato in documenti TeXmacs usando i cosiddetti "executable switches"; in questo modo è possibile passare in entrambe le direzioni da un dato input all'output corrispondente, facendo sì che l'output sia incorporato nel documento senza soluzione di continuità (in particolare il prompt del plugin non è presente) rimanendo però modificabile.