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