GNU Emacs, come ho già avuto modo di dire, è un potente editor di testo che permette di fare di tutto e di più. Esistono numerose funzioni che permettono di facilitare la scrittura di codici in numerosi linguaggi di programmazioni, compreso, ovviamente
LaTeX (anche se in questo caso il nome "linguaggio di programmazione" non è del tutto adeguato). Uno dei tanti motivi per cui Emacs è molto apprezzato è la sua possibilità di personalizzazione ed espansione: esistono centinaia di estensioni che aumentano notevolmente le potenzialità di questo editor di testo oltre le funzioni fornite nativamente. Esiste (ovviamente) una estensione anche per LaTeX:
AUCTeX (ma è utile anche per ConTeXt, docTeX, Texinfo e TeX puro: molte delle impostazioni che vedremo varranno per tutti questi linguaggi, anche se mi riferirò generalmente solo a LaTeX).
Non è mia intenzione spiegare qui come si installa Emacs né tanto meno AUCTeX (anche perché questi pacchetti sono forniti dalla maggior parte delle distribuzioni GNU/Linux, l'installazione è quindi molto semplice se si conosce il funzionamento del proprio gestore pacchetti), ma piuttosto illustrare quali sono le opzioni di AUCTeX (e qualcuna propria di Emacs) che ho trovato personalmente utili. Darò per scontato che si abbia un minimo di familiarità con Emacs, con la notazione delle scorciatoie e dei comandi e anche con AUCTeX (qualche volta però ricorderò come eseguire alcune operazioni). Prima di iniziare ricordo che si può consultare il manuale (in inglese) di AUCTeX all'indirizzo
http://www.gnu.org/software/auctex/manual/auctex.html oppure direttamente dentro Emacs con
C-h i d m AUCTeX RET
. Per la modifica di buona parte delle opzioni seguenti AUCTeX dovrà essere già caricato. Non sono un grande esperto di Emacs, potrei dire a volte delle sciocchezze, spero che mi perdoniate e sono graditi consigli (a ogni modo vi posso assicurare che seguendo questa guida non vi scoppierà il pc :-D).
In AUCTeX è possibile eseguire varie operazioni come compilazione, esecuzione di
bibtex
, esecuzione di
makeindex
, cancellazione dei file temporanei, ecc... usando
C-c C-c
(seguito dal comando che si desidera usare). La cancellazione dei file temporanei viene eseguita usando l'elenco delle estensioni dei file salvato nella variabile
LaTeX-clean-intermediate-suffixes
. Per modificare questa variabile (come tutte le variabili di Emacs, naturalmente sostituendo il nome dove opportuno) si può usare il comando (ricordo che i comandi possono essere inseriti con
M-x
, dove
M
è il cosiddetto tasto Meta e può essere ottenuto con l'ALT, oppure, se non è presente tale tasto, con ESC (rilasciare ESC dopo averlo premuto)):
customize-variable RET LaTeX-clean-intermediate-suffixes RET
Per aggiungere nuove estensioni selezionare
INS
e inserire di fianco a
Regexp:
l'
espressione regolare (per maggiori informazioni sulle espressioni regolari in Emacs si può consultare il manuale di Elisp in Emacs oppure vedere
qui) corrispondente all'estensione che si vuole aggiungere. Per esempio io ho aggiunto le estensioni
.tex~
(i file di backup creati da Emacs) e
.run.xml
(file usati per creare la bibliografia con il pacchetto
biblatex
) con le seguenti espressioni regolari:
\.tex~
\.run\.xml
Per rendere definitiva la modifica selezionare
Save for future sessions
(bisognerà fare lo stesso ogni volta che si usa
customize-variable
).
Emacs si preoccupa anche di
indentare correttamente il codice, compresi i vari ambienti. Si può in particolare impostare l'editor in modo che quando viene premuto il tasto di Invio (o, nella notazione di Emacs,
RET
) il cursore si porti, nel rigo successivo, nella giusta posizione richiesta da una corretta indentazione. Per fare ciò bisogna modificare la variabile
TeX-newline-function
con il comando:
customize-variable RET TeX-newline-function RET
Selezionare
Value Menu
e scegliere
newline-and-indent
. È possibile anche modificare il comportamento di Emacs nell'indentazione all'interno di determinati ambienti modificando la variabile
LaTeX-indent-environment-list
, sempre con il comando:
customize-variable RET LaTeX-indent-environment-list RET
Io, per esempio, ho aggiunto l'ambiente
lstlisting
per fare in modo che Emacs non aggiungesse automaticamente il rientro per il testo inserito in questo ambiente. Per fare ciò ho selezionato
INS
, scritto
lstlisting
di fianco a
Environment:
e dopo aver messo la spunta a
Function:
ho scritto nel relativo spazio
current-indentation
(proprio come risulta di default per l'ambiente
verbatim
).
Emacs permette anche l'
evidenziazione della sintassi di LaTeX, ma in alcuni (rari) casi può andare in difficoltà. Per esempio ho avuto problemi con il già citato ambiente
lstlisting
in quanto AUCTeX 11.86 non conosce bene il suo funzionamento (per esempio l'inserimento del simbolo del dollaro
$
rovina tutta l'evidenziazione del documento). Per fortuna è possibile spiegargli che lo deve trattare allo stesso modo dell'ambiente
verbatim
(in pratica tutto ciò che si trova all'interno di questo ambiente non viene interpretato da Emacs per quanto riguarda l'evidenziazione della sintassi) modificando la variabile
LaTeX-verbatim-environments
:
customize-variable RET LaTeX-verbatim-environments RET
aggiungete
lstlisting
(penso che ormai avrete capito come funziona questo tipo di interfaccia di modifica delle variabili) e il gioco è fatto.
In maniera predefinita Emacs compila i documenti in formato
DVI. Se invece si vuole impostare in maniera predefinita il formato
PDF bisogna modificare il valore della variabile
TeX-PDF-mode
:
customize-variable RET TeX-PDF-mode RET
Selezionare
Toggle
fino ad arrivare a
on (non-nil)
.
Se si è installata una distribuzione di LaTeX in un percorso non riconosciuto immediatamente da Emacs e AUCTeX bisognerà modificare alcune variabili. Per esempio, io ho installato TeX Live 2010 seguendo
questa guida di Enrico Gregorio e tutti i file di LaTeX si trovano in sottocartelle di
/usr/local/texlive/2010/
(in cui Emacs e AUCTeX normalmente non cercano). Fra le variabili che potrebbero dover essere cambiate ci sono
TeX-macro-global
(contiene, ricorsivamente, le cartelle in cui AUCTeX cercherà i file di stile) e
exec-path
(contiene i percorsi in cui Emacs cerca i programmi da eseguire). La modifica di queste variabili è simile a quanto visto finora. Per la prima variabile ho aggiunto il percorso
/usr/local/texlive/2010/texmf-dist/tex/
, mentre per
exec-path
ho aggiunto
/usr/local/texlive/2010/bin/i386-linux/
(su architetture diverse dal 32 bit questo percorso sarà sicuramente diverso. Controllate per bene la posizione in cui avete installato la distribuzione).
Per modificare il programma con cui viene aperto il documento di output (sia esso in formato DVI, PDF, HTML, ecc) tramite
C-c C-c View RET
bisogna modificare la variabile
TeX-view-program-selection
. Come al solito per personalizzare la variabile si può usare
customize-variable RET TeX-view-program-selection RET
Le impostazioni viste finora vengono salvate automaticamente da Emacs nel file di inizializzazione
~/.emacs
(ricordo che la tilde
~
è un'abbreviazione del percorso della propria cartella home, mentre i file che hanno il nome che inizia con un punto sono
nascosti). Tutte queste impostazioni possono essere anche memorizzate modificando manualmente il file
.emacs
(per poter fare ciò autonomamente bisogna però conoscere il linguaggio
Emacs Lisp). Vediamo ora qualche altra utile opzione che imposteremo modificando direttamente il file
.emacs
(queste comunque possono sempre essere impostate anche utilizzando l'interfaccia di
customize-variable
).
Il
manuale di AUCTeX suggerisce di aggiungere a
.emacs
le seguenti linee:
(setq TeX-auto-save t)
(setq TeX-parse-self t)
in modo che ottenere supporto per i pacchetti LaTeX che vengono usati nei propri documenti (l'opzione
TeX-parse-self
fa effettuare a Emacs il
parsing del documento e le informazioni verranno raccolte in una sottocartella della directory del documento modificato chiamata
auto/
. Se non si desidera affollamento nelle proprie cartelle si potrebbe non voler attivare queste due opzioni).
Se si usa frequentemente suddividere i propri documenti LaTeX in più parti da includere nel file principale con i comandi
\input
o
\include
può essere utile aggiungere al file
.emacs
l'opzione
(setq-default TeX-master nil)
In questo modo, all'apertura dei documenti LaTeX Emacs chiederà qual è il file principale associato (su cui dovrà, per esempio, eseguire i comandi di compilazione).
Si può far in modo che all'apertura di un documento LaTeX Emacs esegua il controllo ortografico al volo aggiungendo a
.emacs
l'opzione
(add-hook 'TeX-mode-hook 'flyspell-mode)
Inoltre, se si usa spesso LaTeX per comporre documenti matematici potrebbe essere utile aggiungere l'opzione
(add-hook 'TeX-mode-hook 'LaTeX-math-mode)
che permette il rapido inserimento di numerosi simboli matematici (vedi
manuale). Infine, per fare in modo che il cursore vada a capo dopo l'inserimento di un numero prefissato di caratteri per rigo (ovviamene Emacs è intelligente, non spezza una parola in due, va a capo in modo che il rigo risulti lungo
al massimo il numero prefissato di caratteri) si può aggiungere l'opzione
(add-hook 'TeX-mode-hook 'turn-on-auto-fill)
Il numero di caratteri per rigo dopo il quale Emacs dovrà andare a capo è salvato nella variabile
fill-column
. Lascio per esercizio scoprire come si modifica tale variabile (ok, lascio un indizio: si può usare sempre il solito comando :-D).
Per effettuare un controllo della sintassi al volo si può inserire questo codice nel file di inizializzazione:
(require 'flymake)
(defun flymake-get-tex-args (file-name)
(list "chktex" (list "-q" "-v0" file-name)))
(add-hook 'LaTeX-mode-hook 'flymake-mode)
I dettagli di questa istruzioni e sue alternative sono illustrati nel post
Emacs: effettuare il controllo della sintassi di documenti LaTeX.