Preparazione di un documento

Transcript

Preparazione di un documento
Preparazione di un documento
Mauro Brunato
17 maggio 2006
Sommario
Spesso, la preparazione di un documento scientifico richiede di includere grafici o altre rappresentazioni di dati, a loro volta ottenuti da programmi. La produzione di un documento è un processo a più passi tra i
quali è facile perdersi.
1
Introduzione
Preparare un documento scientifico richiede spesso varie fasi di sviluppo. Talora
un documento deve contenere illustrazioni schematiche, come il grafo di figura 1,
oppure grafici di funzioni ricavate da simulazioni al calcolatore, come le figure 2–
4.
La creazione di questo documento ha richiesto vari passi:
• La scrittura del documento (nel nostro caso con un editor di testi, ma può
avvenire con un word processor).
• Il disegno del diagramma di figura 1 utilizzando un programma di creazione di diagrammi (nel nostro caso xfig, ovviamente ne esistono molti
altri).
• La traduzione del diagramma in un formato accettabile dal sistema di
preprazione dei documenti (figura bitmap nel caso di Word, file EPS nel
caso di Latex).
• La scrittura del programma per la generazione dei dati per le figure 2–4
(in linguaggio C, Maple, Mathematica o altro), seguita dalla generazione
vera e propria.
• La generazione dei grafici dai dati creati con il programma precedente
(tramite gnuplot, Excel o altri software).
• L’inclusione delle figure nel documento.
• La generazione del file PDF contenente il documento leggibile e stampabile.
1
Si può notare che i passi appena elencati non dipendono dal sistema di
composizione dei documenti utilizzato (Microsoft Word, OpenOffice, Latex),
ma sono tipici di qualunque documento basato su calcoli automatici.
1.1
Il problema
Supponiamo che si desideri modificare il programma che genera i dati. Tale
modifica verrà ad influire sul documento finale soltanto dopo che avremo ripetuto gran parte dei passaggi sopra elencati: ogni modifica a qualche anello della
catena comporta la ripetizione di una serie di passi prima di arrivare alla nuova
versione del documento.
Ad esempio, se si scopre un errore nel programma C (o Maple), è necessario
rieseguirlo per ottenere i dati corretti. A questo punto sarà necessario ricreare i
grafici e sostituire le vecchie versioni nel documento; infine, bisognerà rigenerare
la versione PDF.
La suite Microsoft Office automatizza alcuni passaggi attraverso la possibilità
di mantenere nei documenti Word link attivi a grafici generati con Excel. Un
metodo più diffuso in campo scientifico, dove si preferisce spesso Latex per
motivi di uniformità e di stile, è quello descritto nella Sezione 2.
2
Dipendenze
Il documento che state leggendo ora si basa sui seguenti elementi di base:
• Un testo Latex con comandi di suddivisione in sezioni, inclusione di figure
eccetera.
• Alcune figure, in particolare:
– Un diagramma creato con xfig;
– Tre grafici generati con gnuplot, i quali sono stati creati a partire
da tre diversi file di comandi e da un file dati in comune, creato dal
programma volterra.c compilato.
Il diagramma di figura 1 illustra le dipendenze fra i vari file utilizzati per
creare questo documento. In realtà, sotanto i sei file i cui nomi sono inquadrati sono stati creati dall’autore del documento. Gli altri sono stati generati
attraverso comandi automatici. In particolare,
• Il programma volterra.c viene compilato con il consueto comando per
ottenere l’eseguibile volterra:
gcc -o volterra volterra.c
• L’eseguibile volterra viene usato per creare il file pesci.dat, contenente
i dati da rappresentare in grafico:
./volterra > pesci.dat
2
evoluzione.pdf
evoluzione.dvi
evoluzione.tex
tempo.eps
tempo.plt
popolazione.eps
popolazione.plt
3d.eps
3d.plt
schema.eps
schema.fig
pesci.dat
volterra
volterra.c
Figura 1: Grafo delle dipendenze tra i vari file. I nomi in grassetto sono quelli
dei file originari.
• Il file tempo.plt contiene i comandi necessari per creare il grafico tempo.eps
a partire dai dati contenuti nel file pesci.dat, e cosı̀ gli altri file di comandi:
gnuplot tempo.plt
gnuplot popolazioni.plt
gnuplot 3d.plt
• Il file schema.fig va convertito con l’apposito comando nel file EPS:
fig2dev -L eps schema.fig schema.eps
• Una volta composte tutte le figure, avendo a disposizione il testo Latex
evoluzione.tex, è necessario creare il file DVI:
latex evoluzione
latex evoluzione
• Infine, si può creare il documento PDF:
dvipdf evoluzione
La modifica di qualunque file in questa catena costringe a ripetere una lunga
sequenza di comandi per ottenere il risultato finale.
3
La soluzione: il Makefile
I sistemi di programmazione mettono a disposizione uno strumento che permette
di automatizzare questa serie di operazioni attraverso la descrizione esplicita in
3
formato testo del grafo delle dipendenze di figura 1.
È necessario creare un file di testo, di nome Makefile e senza estensioni (quindi non Makefile.txt) contenente una serie di regole, ciascuna delle
quali esprime una delle dipendenze del grafo. Ciascuna regola ha la seguente
struttura:
obiettivo: premessa1 premessa2 . . . premessan
[tabulazione]comando1
[tabulazione]. . .
[tabulazione]comandom
Le regole sono introdotte da una riga che rappresenta le frecce di figura 1, e sono esplicitate dai comandi che servono per passare dalle “premesse”
all’“obiettivo”. Le righe che contengono i comandi devono iniziare con un carattere di tabulazione (non semplici spazi). La prima regola elencata rappresenta
l’obiettivo finale. Si veda il Makefile di questo documento per un esempio.
L’esecuzione dei comandi necessari è automatizzata dal comando make, che
legge il Makefile, si costruisce una rappresentazione interna delle dipendenze,
decide quali file è necessario creare e in quale ordine.
4
Esempio: le equazioni di Volterra-Lotka
Siano A ∈ R e B ∈ R le numerosità di due popolazioni. La prima popolazione
si ciba di vegetazione, che supporremo infinita, e in assenza di predatori segue
un modello malthusiano. La seconda popolazione si ciba esclusivamente della
prima. Allora
(
dA
dt = (α − βB) · A
(1)
dB
dt = (γA − δ) · B.
Discretizzando l’equazione (1), otteniamo:
(
A ← A + (α − βB) · A · ∆t
B ← B + (γA − δ) · B · ∆t.
(2)
Il programma Volterra.c utilizza l’equazione (2) per generare un elenco di
valori da rappresentare.
4
500
Prede
Predatori
450
400
Popolazione
350
300
250
200
150
100
50
0
0
50
100
150
200
250
300
350
400
450
500
450
500
Tempo
Figura 2: Andamento delle popolazioni nel tempo
500
450
400
Numero predatori
350
300
250
200
150
100
50
0
0
50
100
150
200
250
300
350
400
Numero prede
Figura 3: Andamento delle popolazioni, una rispetto all’altra
5
Numero predatori
500
450
400
350
300
250
200
150
100
50
0
0
50 100
150 200
250 300
350 400
Tempo
450 5000
500
450
400
350
300
250
200
Numero prede
150
100
50
Figura 4: Andamento delle popolazioni nel tempo
6