Esercitazione n. 6
In questa esercitazione vediamo (molto brevemente) come si usa il
programma gnuplot che vi servirà per il corso di CDI.
Poi, visto che questo programma vi permette di salvare dei file
che contengono dei grafici, impareremo ad inserire questi file
all'interno di documenti scritti con Word - ma noo!!! -
scritti con LaTeX, di cui vedremo solo i comandi di base.
Come sempre, si lavora con la shell, quindi entro una console
gnuplot
[per maggiori informazioni guardate anche le
pagine del corso di CDI]
a command-driven interactive function and data plotting program,
cioè un programma che vi permette di fare dei grafici usando delle funzioni oppure delle
tabelle di dati.
|
Digitando da shell il comando $ gnuplot si entra nell'interfaccia interattiva del
programma e viene presentato un prompt (gnuplot>) in attesa di comandi.
I comandi naturalmente devono essere consistenti con la sintassi di gnuplot.
Figura 1: L'interfaccia di gnuplot (versione per Windows)
Come si genera un grafico usando gnuplot?
Digitando i comandi seguenti, gnuplot crea i grafici delle funzioni sin(x) e cos(x)
gnuplot> plot sin(x)
gnuplot> plot cos(x)
Figura 2: I grafici di sin(x) e cos(x)
Digitando i comandi seguenti (osservate la differenze con quelli di prima),
gnuplot crea un solo grafico con entrambe le funzioni sin(x) e cos(x)
gnuplot> plot sin(x)
gnuplot> replot cos(x)
Figura 3: Il grafico delle due funzioni sin(x) e cos(x)
Esercizio
Aprite gnuplot e provate a costruire i grafici di altre funzioni, ad esempio
log10(x) o exp(x)
È possibile visualizzare una griglia nel grafico e anche stabilire il range
di variazione per i valori delle ascisse e delle ordinate. I comandi sono i seguenti:
gnuplot> set grid
gnuplot> set xrange[x1:x2]
gnuplot> set yrange[y1:y2]
Esercizio
Provate ad applicare i comandi precedenti, sostitutendo ai valori x1,x2,y1,y2 dei
numeri interi oppure con virgola (usando la notazione con il ".", es 1.5)
Oltre a costruire grafici per funzioni standard, gnuplot permette anche di costruire dei
grafici a partire da tabelle di dati.
Salvate il file di esempio
che contiente più colonne di dati; con i comandi di gnuplot potete
- specificare il range di variazione delle ascisse e delle ordinate (che
dipende dai dati che state analizzando)
- specificare quali colonne volete usare per le curve
- associare un nome ad ogni curva
- scegliere uno stile per le curve
Tutte queste opzioni si possono scrivere con pochi comandi come quelli seguenti
(specificando dei valori numerici per x1,x2,y1,y2)
gnuplot> set grid
gnuplot> set xrange[x1:x2]
gnuplot> set yrange[y1:y2]
gnuplot> show label
gnuplot> plot 'esempio.dati' using 1:2 title 'curva1' with line 1
gnuplot> replot 'esempio.dati' using 1:3 title 'curva2' with points 2
gnuplot> replot 'esempio.dati' using 1:4 title 'curva3' with line 3
Dopo l'esecuzione di questi comandi viene generato un grafico con tre curve,
tutte costruite a partire dal file di dati esempio.dati che avete fornito
in input a gnuplot. La prima curva è costruita a partire dalle prime due colonne
di dati, come specificato da using 1:2, si chiama curva1, come
specificato da title 'curva1', ed è formata da una linea di tipo
1 with line 1, ...
Se non avete voglia di digitare i comandi in modo interattivo
potete anche usare la modalità batch. Si deve creare un file di comandi,
di nome per esempio "comandi", uguale all'esempio precedente (senza il prompt gnuplot>)
e dentro gnuplot digitare
gnuplot> load 'comandi'
Come faccio a salvare il grafico su un file?
Gnuplot supporta vari dispositivi per l'output dei grafici. Quando entrate nell'ambiente
gnuplot, il dispositivo di output di default è il video (infatti i grafici vengono
visualizzati all'interno di finestre sullo schermo).
Uscite da gnuplot (mediante il comando exit) e rilanciatelo.
Prima del prompt osservate la scritta Terminal ...
che definisce il dispositivo di output di default.
Terminal type set to 'x11'
gnuplot>
Esistono dei comandi che permettono di specificare quale tipo di output generare.
Supponiamo di voler creare un file JPEG per il grafico della funzione sin(x).
I passi da seguire sono i seguenti
- specificare il tipo di dispositivo grafico che si vuole usare
- specificare il nome del file in cui salvare il grafico
- "plottare" la funzione sin(x)
Nella sintassi di gnuplot scriveremo
gnuplot> set terminal jpeg
gnuplot> set output 'sin.jpg'
gnuplot> plot sin(x)
Il file JPEG così generato può essere usato per produrre una relazione,
per esempio in HTML.
NB: i tipi di linee e punti (lines 1, points 2, lines 3) dipendono
dal terminale di output e potrebbero cambiare a seconda della scelta fatta (x11, JPEG,
PostScript, GIF, LaTeX, ...)
Poichè vedremo qualcosa su LaTeX, vediamo ancora
come generare un file di output di tipo Encapsulated PostScript (EPS) supportato da questo
pacchetto software. Dobbiamo scrivere
gnuplot> set terminal postscript eps
gnuplot> set output 'sin.eps'
gnuplot> plot sin(x)
Esercizio
Provate a generare dei file JPEG e EPS partendo dalle vostre curve e poi proseguite
NB: molto probabilmente per il corso di CDI i dati vi verranno forniti all'interno
di un file Excel. Ricordate che è necessario esportare il file Excel in formato solo
testo (colonne di dati separate da tabulazione).
[per maggiori informazioni guardate anche le
pagine del corso di CDI]
LaTeX
LaTeX è un pacchetto software (basato sul software TeX) che
permette di costruire documenti formattati in maniera sofisticata.
Introdotto da Donald Knuth nel 1977, TeX è diventato popolare (lo standard
de facto) negli ambienti accademici e di ricerca, per la produzione
dei documenti, soprattutto per quei documenti che contenevano formule matematiche.
TeX is a new typesetting system intended for the creation of beautiful books - and
especially for books that contain a lot of mathematics. By preparing a manuscript in TeX
format you will be telling a computer exactly how the manuscript is to be
transformed into pages whose typographic quality is comparable to that of the world's
finest printers.
|
Agli inizi del 1980, Leslie Lamport ha iniziato a lavorare ad un sistema per la produzione
dei documenti chiamato LaTeX che si basava sulle primitive di formattazione fornite
da TeX. Questo nuovo sistema aggiungeva
un nuovo livello di astrazione al TeX permettendo all'utente di concentrasi maggiormente
sulla struttura del documento piuttosto che sui dettagli di formattazione. Sono stati
infatti introdotti nuovi comandi per comporre "facilmente" i documenti.
Le nuove funzionalità di LaTeX (facendo uso anche di alcuni programmi ausiliari) permettono di
- includere le figure nei documenti
- creare indici in modo automatico
- creare bibliografie
- creare riferimenti a paragrafi, formule, figure, ... in modo automatico
Come funziona LaTeX?
NB: In pochi minuti si possono vedere solo pochissimi aspetti di LaTex, chi fosse
interessato può consultare per esempio:
www.maths.tcd.ie/~dwilkins/LaTeXPrimer
LaTeX legge e scrive vari file (Figura 4) e la loro descrizione è il punto di partenza
per capirne il comportamento.
Figura 4: Alcuni file (non tutti!) usati da LaTeX
Il file più importante è il file sorgente che contiene il documento
vero e proprio (un file in formato solo testo con estensione .tex).
I file che contengono le definizioni dei vari layout standard (class e package)
vengono memorizzati in directory standard e possono essere richiamati all'interno
del file sorgente.
LaTeX viene distribuito con 5 classi di documento standard: article, report,
book, slides, e letter. Queste classi di base possono essere personalizzate
specificando nuove opzioni (ma naturalmente non vedremo questi argomenti "avanzati").
Le caratteristiche dei caratteri sono specificate in altri file (.tfm, TeX font metrics)
... vi ricorda qualcosa?
L'output di LaTeX è costituito da un insieme di file. Uno di questi, il file con
estensione .dvi, contiene una rappresentazione del testo formattato. Il file con
estensione .aux contiene informazioni sul cross-referencing per costruire le
numerazioni degli oggetti (figure, formule, paragrafi,...) e i riferimenti ad essi.
Per produrre la bibliografia si deve usare il programma BibTeX. Di solito, tutto
il database dei riferimenti bibliografici si scrive all'interno di un file con estensione
.bib. Ad ogni riferimento bibliografico viene associato un nome logico (una chiave
univoca) che viene usata all'interno del file sorgente .tex.
BibTeX, usando il file .aux prodotto da LaTeX, genera la bibliografia associata
al documento sorgente e la memorizza in un file con estensione .bbl
... a parole sembra più difficile di quello che è in realtà ...
Per vedere il documento prodotto occorre compilare il file
nomefile.tex usando il comando
$ latex nomefile.tex (oppure $ latex nomefile)
Così facendo, si produce un file di output con estensione .dvi visualizzabile
a video mediante l'applicazione xdvi. Basta scrivere nella shell dei
comandi
$ xdvi nomefile.dvi (oppure $ xdvi nomefile)
NB: digitando
$ xdvi nomefile &
l'applicazione xdvi che permette di
visualizzare i documenti DVI viene lanciata in background (ne abbiamo parlato
in una esercitazione precedente) e la shell restituisce immediatamente il prompt.
A questo punto, se modificate il file sorgente e lo ri-compilate, le modifiche saranno
immediatamente visibili nell'applicazione xdvi
Un file DVI può a sua volta essere trasformato in un file PostScript (.ps) o
PDF (.pdf) in modo da essere stampato. Riepilongando:
- Prima bisogna creare il file sorgente nomefile.tex (con un qualsiasi editor
di testo) che contiene il testo del documento e i comandi di formattazione ...
vi ricorda qualcosa?
- Tramite shell si possono poi digitare i seguenti comandi
- [da .tex a .dvi] $ latex nomefile.tex (crea il file DVI)
- [visualizzazione .dvi] $ xdvi nomefile.dvi
- [da .dvi a .ps] $ dvips nomefile.dvi -o nomefile.ps
(crea, a partire dal file DVI, un file PostScript)
- [da .dvi a .pdf] $ dvipdf nomefile.dvi -o nomefile.pdf
(crea, a partire dal file DVI, un file PDF)
Durante la compilazione il programma LaTeX potrebbe rilevare degli
errori interrompendo l'esecuzione come si può vedere qui sotto. In
questo caso si deve digitare ''x'', correggere gli errori, salvare il file
.tex modificato e lanciare di nuovo la compilazione.
Esempio di messaggio di errore
This is TeX, Version 3.14159 (MiKTeX 2.1) (preloaded format=latex
2000.11.28) 3 NOV 2002 21:23 **root.tex (root.tex LaTeX2e
<2001/06/01> Babel and hyphenation patterns for english,
french, german, ngerman, du mylang, nohyphenation, loaded. File:
ulasy.fd 1998/08/17 v2.2e LaTeX symbol font definitions ) !
Undefined control sequence. l.17
? x
Fin qui tutto OK ma ... come è fatto un file .tex?
Beh ... LaTeX è un linguaggio di markup. Quindi incontreremo nuovamente
l'idea di marcatori - che in LaTeX sono detti comandi - e che ci permettono
di separare il contenuto di un documento dalla sua forma. Anche qui,
i comandi hanno effetto sul testo (sulle formule, sulle immagini, ...) che essi contengono.
Esattamente come abbiamo visto nel caso di HTML ... solo che LaTeX (e TeX) sono stati introdotti prima
e (nota dolente) a prima vista sembrano molto più complicati di HTML.
Vi ricordo che il concetto di markup nasce con l'editoria tradizionale: quando un
autore (o un editore) consegnava un manoscritto alla persona responsabile della sua impaginazione,
le passava anche tutte le informazioni relative al layout (annotate a mano
sul manoscritto stesso).
Con l'introduzione del calcolatore queste annotazioni manuali sono state sostituite da
sistemi di codici speciali. All'inizio la situazione era piuttosto confusa: ogni casa editrice
aveva il proprio linguaggio di markup proprietario ma, fino a quando le case editrici si sono
occupate della composizione elettronica e dell'impaginazione finale dei documenti, non ci sono stati
problemi. Ben presto, però, gli
stessi autori hanno cominciato a produrre i propri documenti in formato elettronico e si
è sentita l'esigenza di un "linguaggio comune": LaTeX è un esempio di linguaggio
comune che può essere condiviso tra gli autori e le case editrici.
|
Vediamo ora la struttura di un file LaTeX. Esso è formato da:
- un preambolo che contiene
- le specifiche dello stile del documento (stile, layout, ecc.)
- i comandi e le macro che definiscono dei pattern utilizzati
comunemente nel testo
- dal corpo del documento che contiene il testo e i comandi di
formattazione
In generale un file LaTeX ha un aspetto come quello seguente
(il simbolo % introduce una linea di commento che non viene utilizzata
per produrre il documento di output)
% Preambolo
% Stile
\documentclass{...}
\usepackage[...]{...}
...
% Comandi
\newcommand{...}{...}
\renewcommand{...}{...}
% Corpo del testo
\begin{document}
...
\end{document}
Esempio
\documentclass{article}
\usepackage[italian]{babel}
\title{Esempio di documento LaTeX}
\author{Mario Rossi}
\begin{document}
\maketitle
\section{Introduzione}
Questo è il mio primo documento LaTeX.
Imparerò a scrivere dei paragrafi e ad inserire delle figure.
\section{Descrizione dell'esperimento fatto con gnuplot}
Inserisco qui la descrizione dell'esperimento
\subsection{Grafici}
Inserisco qui delle figure che contengono i grafici che ho realizzato
con gnuplot
\end{document}
Esercizio
Copiate il sorgente, create un file con estensione .tex, e provate ad usare i comandi
di compilazione (latex e xdvi)
Preambolo di un file .tex: classi e package
I documenti LaTeX hanno uno stile principale (classe) e una
serie di opzioni dichiarate attraverso il comando
\documentclass[opzioni]{nomeclasse}
Una classe corrisponde ad un pacchetto predefinito (ad es.
article.cls, book.cls) distribuito insieme a LaTeX o definito
dall'utente. Inoltre si possono importare degli stili secondari
tramite il comando
\usepackage[opzioni]{nomepackage}
Alcuni esempi di classi e package sono:
- article, per definire rapporti tecnici: fornisce comandi per
scrivere il titolo iniziale, le sezioni, la bibliografia, ecc.
- book, per definire libri, tesi, ecc.: fornisce comandi per la
suddivisione in capitoli, sezioni, ecc.
- babel, pacchetto per selezionare la lingua (il default è l'inglese)
- graphics, permette di inserire figure PostScript
- ...
Esempio
\documentclass[12pt]{book}
\usepackage[italian]{babel}
\usepackage{graphics}
Oltre ai comandi LaTeX (che vedremo in seguito) è possibile
definire nuovi comandi, ovvero delle macro che rappresentano
serie di simboli/stili usati frequentemente. I comandi possono
avere dei parametri ed esiste una sintassi per la loro definizione (che non
vedremo nei dattagli):
\newcommand{\nomecomando}[numero di argomenti]{definizione}
I comandi definiti dall'utente vengono richiamati inserendo nel sorgente LaTeX
usando il nome del comando stesso (\nomecomando ...)
Corpo del testo
Il testo del documento deve essere racchiuso
nell'ambiente definito dalla coppia di comandi seguenti ... vi ricorda qualcosa?
\begin{document}
...
\end{document}
All'interno di un documento si può
- richiamare altri file tramite il comando \input
- inserire testo
- inserire formule matematiche
- inserire figure (tramite comandi definiti da package appositi)
- invocare comandi di formattazione (predefiniti dallo stile
selezionato o definiti dall'utente)
- inserire ed annidare ambienti (tabelle, elenchi, equazioni,
teoremi, definizioni, center, ecc.)
- ...
Inserimento testo
Il testo si inserisce insieme alle annotazioni per la
formattazione (come in HTML). Il layout della pagina è definito
dallo stile prescelto (article, ecc.) ma può
essere ridefinito utilizzando i comandi opportuni ...
Per forzare il fine linea (ovvero per andare a capo)
- se si lascia almeno una riga vuota nel sorgente si
termina un paragrafo nel documento risultante (si va a capo e la
riga successiva viene indentata a destra)
- se si usa il comando \\ si va a capo nel documento
risultante
Esattamente come nel caso di HTML, esiste tutta una serie di comandi per
modificare l'aspetto del testo.
Ecco alcuni esempi
Comandi LaTeX |
Risultato |
HTML |
\`e \'e \`a \'a \`o \`u
|
è
é
à
á
ò
ó
|
è
é
à
á
ò
ó
|
\textit{corsivo}
oppure {\em corsivo} |
corsivo |
<i>corsivo</i>
|
\textbf{grassetto}
oppure {\bf grassetto} |
grassetto
|
<b>grassetto</b>
|
Esercizio
Riprendete il file .tex, e provate ad inserire del testo usando anche i comandi
di formattazione per creare parti in grassetto e corsivo.
NB: ogni volta,
per vedere le modifiche dovete ricompilare il file!
Elenchi
Come in HTML, anche in LaTeX esistono i comandi per creare elenchi puntati ed elenchi numerati
%elenco puntato
\begin{itemize}
\item Primo elemento
\item Secondo elemento
\item ...
\end{itemize}
%elenco numerato
\begin{enumerate}
\item Primo elemento
\item Secondo elemento
\item ...
\end{enumerate}
Esercizio
Riprendete il file .tex, e aggiungete due elenchi di tipo diverso
Figure
Per inserire una figura si deve usare la coppia di comandi
\begin{figure}
...
\end{figure}
All'interno di questi comandi si può "disegnare" la figura con opportuni
comandi LaTeX (difficile) oppure si può specificare il nome del file
che contiene la figura che deve essere inclusa. Ad esempio, per
includere un grafico in formato EPS (ad esempio graf1.eps) nel nostro file .tex,
scriveremo
%nel preambolo
\usepackage{graphics}
%nel corpo del testo
\begin{figure}[t]
\centerline{\includegraphics{graf1.eps}}
\caption{Grafico ottenuto mediante gnuplot.}
\end{figure}
Se il file graf1.eps non si trova nella stessa directory in cui
si trova il file .tex, si dovrà specificare il pathname relativo
... vi ricorda qualcosa?
Il comando \caption{...} permette di specificare la didascalia della figura.
Il valore [t] dice a LaTeX che la figura deve stare in alto ("top")
nella pagina, si può anche scrivere [b] (per "bottom"), [h]
(per "here").
NB: ci sono anche altre soluzioni per includere file .eps in documenti .tex
Riferimenti agli oggetti nel documento
Riprendiamo il file iniziale e aggiungiamo i comandi che
permettono di creare i riferimenti agli oggetti (cross-referencing), cioè
- \label{nome_oggetto} che permette di associare un nome univoco
ad ogni oggetto della pagina (capitolo, paragrafo, equazione matematica, figura, ...).
Si devono usare sempre nomi diversi e senza spazi bianchi; se per errore
si usa più volte lo stesso nome nel comando \label, durante la fase
di compilazione LaTeX visualizza un messaggio di warning come quello seguente:
LaTeX Warning: There where multiply-defined labels
- \ref{nome_oggetto} che permette di creare un riferimento all'oggetto.
Considerate nuovamente l'esempio che segue, osservando con particolare attenzione
l'uso dei comandi \label{...} e \ref{...} che permettono di
creare i riferimenti all'interno del documento. LaTeX si occupa di gestire la
numerazione degli oggetti e i loro riferimenti (grazie al file .aux). Quindi,
se spostate o cancellato qualche oggetto nel documento, LaTeX rifarà tutti
i calcoli per voi, a patto di aver usato bene i due comandi precedenti.
\documentclass[14pt]{article}
\usepackage[italian]{babel}
\usepackage{graphics}
\title{Esempio di documento LaTeX}
\author{Mario Rossi}
\begin{document}
\maketitle
\section{Introduzione}
\label{sec:intro}
Questo è il mio primo documento LaTeX.
Imparerò a scrivere dei paragrafi e ad inserire delle figure.
\section{Descrizione dell'esperimento fatto con gnuplot}
\label{sec:descr}
Inserisco qui la descrizione dell'esperimento, bla bla bla
Le figure \ref{fig:esp1} e \ref{fig:esp2} nel paragrafo \ref{sec:graf}
contengono i grafici relativi ai primi due esperimenti che abbiamo fatto.
\subsection{Grafici}
\label{sec:graf}
Come abbiamo appena detto nel paragrafo \ref{sec:decr}, riportiamo ora i grafici
degli esperimenti, bla bla bla
\begin{figure}[t]
\centerline{\includegraphics{graf1.eps}}
\caption{Grafico del primo esperimento.}
\label{fig:esp1}
\end{figure}
Bla bla bla
\begin{figure}[t]
\centerline{\includegraphics{graf2.eps}}
\caption{Grafico del secondo esperimento.}
\label{fig:esp2}
\end{figure}
Bla bla bla
\end{document}
Esercizio
Provate anche voi ! Per vedere la numerazione dovete compilare due volte il
file .tex (la prima volta viene generata la numerazione, la seconda volta vengono realizzati
i riferimenti)
Altri comandi
Si tratta di semplici comandi, per
%andare in una nuova pagina
\newpage
%centrare del testo
\begin{center}
...
\end{center}
%allineare del testo a destra
\begin{flushright}
...
\end{flushright}
Inoltre ...
LaTeX permette di costruire tabelle, inserire formule matematiche (anche molto sofisticate)
e molto altro ... ma per questo ci vuole un manuale ...