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
    1. specificare il range di variazione delle ascisse e delle ordinate (che dipende dai dati che state analizzando)
    2. specificare quali colonne volete usare per le curve
    3. associare un nome ad ogni curva
    4. 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
    1. specificare il tipo di dispositivo grafico che si vuole usare
    2. specificare il nome del file in cui salvare il grafico
    3. "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
    1. includere le figure nei documenti
    2. creare indici in modo automatico
    3. creare bibliografie
    4. 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: 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:
    1. un preambolo che contiene
      1. le specifiche dello stile del documento (stile, layout, ecc.)
      2. i comandi e le macro che definiscono dei pattern utilizzati comunemente nel testo
    2. 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:
    1. article, per definire rapporti tecnici: fornisce comandi per scrivere il titolo iniziale, le sezioni, la bibliografia, ecc.
    2. book, per definire libri, tesi, ecc.: fornisce comandi per la suddivisione in capitoli, sezioni, ecc.
    3. babel, pacchetto per selezionare la lingua (il default è l'inglese)
    4. graphics, permette di inserire figure PostScript
    5. ...
    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ò
  • 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)
    1. 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)
    2. 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 è é à á ò ó &egrave; &eacute; &agrave; &aacute; &ograve; &oacute;
    \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è
    1. \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
      
      
    2. \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 ...