Esempio di Emacs Org Mode con delle tabelle.

Esempio di Emacs Org Mode con delle tabelle.

Image by Leonardo Finetti

Tabelle e formule in un file di testo?

Avere delle tabelle e delle formule interattive in un file di testo potrà sembrare una cosa impensabile alla maggior parte delle persone. Siamo infatti abituati a vedere i file di testo come una serie di parole, senza formattazione e senza particolari funzionalità.

Quando dobbiamo lavorare con tabelle e formule ci si appoggia ai fogli di calcolo o, in alcuni casi, alla loro integrazione all’interno dei word processor (es. OLE su Microsoft Office e LibreOffice).

Se però stiamo scrivendo un semplice file di testo e dobbiamo inserire una tabella con delle formule? Come possiamo fare?

Con i normali editor di testo non si può. Con Emacs invece si può fare anche questo, però in effetti non lo si può classificare come “normale editor di testo”.

C’è sempre di mezzo Org Mode

Org Mode è una modalità di Emacs che permette la scrittura di file di testo interattivi e tra le sue funzionalità permette appunto di inserire tabelle con formule.

Chi, come me, usa molto Org Mode per scrivere, prima o poi si trova a dover scrivere una tabella e dover calcolare banalmente una somma o una media di una colonna. Ed ecco che Org Mode è pronto per aiutare anche in questo compito grazie all’ottimo supporto per le tabelle e le formule testuali.

Uno dei vantaggi di questo metodo è che se si esporta il file la tabella viene mantenuta nel formato di destinazione (PDF, LaTeX, ODT, HTML).

Come creare una tabella in Org Mode

Per creare una tabella con Emacs Org Mode basta cominciare una riga con il simbolo | e poi usare lo stesso simbolo per separare le colonne. Arrivati alla fine della riga si può premere il tasto TAB per andare a capo ed automaticamente viene creata una seconda riga con già pronte le colonne. Premendo il tasto TAB o S+TAB si passa alla cella successiva o precedente.

1
2
| Colonna uno | Colonna due | Colonna tre |
|           1 |           2 |           3 |

Esportando il file in formato HTML si ottiene questo risultato:

Colonna uno Colonna due Colonna tre
1 2 3

Si può anche creare una separazione tra la prima riga di intestazione e le righe sottostanti semplicemente scrivendo |- all’inizio riga e poi premendo TAB:

1
2
3
| Colonna uno | Colonna due | Colonna tre |
|-------------+-------------+-------------|
|           1 |           2 |           3 |

Esportazione HTML della tabella:

Colonna uno Colonna due Colonna tre
1 2 3

Allo stesso modo nella fine della tabella si può anche creare una riga di riepilogo finale aggiungendo una riga di separazione:

1
2
3
4
5
6
7
| Colonna uno | Colonna due | Colonna tre |
|-------------+-------------+-------------|
|           1 |           2 |           3 |
|           4 |           5 |           6 |
|           7 |           8 |           9 |
|-------------+-------------+-------------|
| Colonna uno | Colonna due | Colonna tre |

L’esportazione in HTML sarà una cosa di questo tipo:

Come inserire delle formule

Se, ad esempio, voglio calcolare la somma delle tre colonne nella tabella vista qui sopra, basta creare le rispettive tre formule usando la funzione vsum().

Le formule vanno posizionate dopo la tabella e cominciano ciascuna con la stringa #+TBLFM: ed hanno la seguente struttura:

#+TBLFM: cella di destinazione = formula da calcolare

Ecco il codice completo in formato Org Mode:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
| Colonna uno | Colonna due | Colonna tre |
|-------------+-------------+-------------|
|           1 |           2 |           3 |
|           4 |           5 |           6 |
|           7 |           8 |           9 |
|-------------+-------------+-------------|
|             |             |             |
#+TBLFM: @>$1=vsum(@2..@-1)
#+TBLFM: @>$2=vsum(@2..@-1)
#+TBLFM: @>$3=vsum(@2..@-1)

Per calcolare il risultato di una formula ed inserirlo nella cella specificata, basta posizionarsi con il cursore sulla riga della formula e premere la combinazione di tasti C-c C-c (che in Emacs vuol dire CTRL+C CTRL+C) e si otterrà:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
| Colonna uno | Colonna due | Colonna tre |
|-------------+-------------+-------------|
|           1 |           2 |           3 |
|           4 |           5 |           6 |
|           7 |           8 |           9 |
|-------------+-------------+-------------|
|          12 |          15 |          18 |
#+TBLFM: @>$1=vsum(@2..@-1)
#+TBLFM: @>$2=vsum(@2..@-1)
#+TBLFM: @>$3=vsum(@2..@-1)

Una volta esportata in HTML, la tabella sarà più o meno così:

Riferimenti alle celle

Nelle formule vediamo due simboli particolari: @ e $. Questi stanno ad indicare rispettivamente la riga e la colonna.

Ad esempio @> è l’ultima riga, mentre $1 è la prima colonna. Quindi si possono combinare per indicare la coordinata dell’ultima cella nella prima colonna: @>$1.

Se devo inserire un range, ad esempio la seconda colonna, escludendo la prima e l’ultima cella, che sarebbero una l’intestazione ed una la destinazione del risultato della formula, scrivo: @2..@-1. Essendo una colonna, la colonna selezionata sarà quella della destinazione. @2 è la seconda riga, @-1 è la penultima riga.

Per mostrare (e poi nascondere) le coordinate di righe e colonne basta posizionarsi all’interno della tabella e premere C-c }. In questo modo si ha tutta la situazione sotto controllo.

Per maggiori dettagli sul funzionamento del foglio di calcolo di Emacs Org Mode rimando ovviamente alla guida ufficiale .

Leonardo Finetti

Leonardo Finetti
Si occupa di informatica dalla metà degli anni novanta principalmente in ambito web con tecnologie Open Source. Esperto di Drupal e di SEO offre consulenze in tali ambiti e nel tempo libero si diletta scrivendo articoli di informatica ed anche di design, ergonomia, usabilità e sicurezza.

Se ti piace questo sito puoi usare il link di affiliazione Amazon cliccando qui.