codici sorgente in documenti latex
TRANSCRIPT
5/11/2018 Codici sorgente in documenti LaTeX - slidepdf.com
http://slidepdf.com/reader/full/codici-sorgente-in-documenti-latex 1/6
DEV DEVeloping Software Solutions — n. 120 — luglio-agosto 2004
Codici sorgente in documenti
LaTeXdi Gianluca Pignalberi
La nostra documentazione ha bisogno di porzioni di codice sorgen-te, e la nostra fissazione nell’usare LaTeX ci permette di farlo in manierarapida, automatizzata, elegante e con soluzioni grafiche spesso vincenti.
Gianluca Pignalberi
E laureato in Scienzedell’Informazione pressol’Universita La Sapienzadi Roma. Si occupa, perpassione, di AlgoritmiGenetici applicati all’e-laborazione delle imma-gini, ma e stato a lungooccupato, per profes-sione, in problematichelegate all’elaborazionedi testi: riconoscimentodella lingua, compres-sione, retrieval. Il tuttosempre per sistemi Unix.
5/11/2018 Codici sorgente in documenti LaTeX - slidepdf.com
http://slidepdf.com/reader/full/codici-sorgente-in-documenti-latex 2/6
pubblicato su
WWW.INFOMEDIA.IT
stampa digitale da
Lulu Enterprises Inc.
stores.lulu.com / infomedia
Infomedia
Infomedia e l’impresa editoriale che da quasi venti an-
ni ha raccolto la voce dei programmatori, dei sistemi-
sti, dei professionisti, degli studenti, dei ricercatori e dei
professori d’informatica italiani.
Sono piu di 800 gli autori che hanno realizzato per le te-
state Computer Programming, Dev, Login, Visual Basic
Journal e Java Journal, molte migliaia di articoli tecnici,
presentazioni di prodotti, tecnologie, protocolli, strumen-ti di lavoro, tecniche di sviluppo e semplici trucchi e stra-
tagemmi. Oltre 6 milioni di copie distribuite, trentamila
pagine stampate, fanno di questa impresa la piu grande ed
influente realta dell’editoria specializzata nel campo della
programmazione e della sistemistica.
In tutti questi anni le riviste Infomedia hanno vissuto del-
la passione di quanti vedono nella programmazione non
solo la propria professione ma un’attivita vitale e un vero
divertimento.
Nel 2009, Infomedia e cambiata radicalmente adottando
un nuovo modello aziendale ed editoriale e si e organiz-
zata attorno ad una idea di Impresa Sociale di Comunita,
partecipata da programmatori e sistemisti, separando le
attivita di gestione dell’informazione gestite da un board
comunitario professionale e quelle di produzione gesti-
te da una impresa strumentale. Questo assetto e in linea
con le migliori esperienze internazionali e rende Infome-
dia ancora di piu parte della Comunita nazionale degli
sviluppatori di software.
Infomedia e media-partner di manifestazioni ed eventi in
ambito informatico, collabora con molti dei pi u impor-tanti editori informatici italiani come partner editoriale e
fornitore di servizi di localizzazione in italiano di testi in
lingua inglese.
L’impaginazione automatica di questa rivista e realizzata al
100% con strumenti Open Source usando OpenOffice,
Emacs, BHL, LaTeX, Gimp, Inkscape e i linguaggi Lisp,
Python e BASH
For copyright information about the contents of DEV, please see the section “Copyright” at the end of each ar-
ticle if exists, otherwise ask authors. Infomedia contents
is© 2004 Infomedia and released as Creative Commons
2.5 BY-NC-ND. Turing Club content is © 2004 Turing
Club released as Creative Commons 2.5 BY-ND.
Le informazioni di copyright sul contenuto di DEV so-
no riportate nella sezione “Copyright” alla fine di cia-
scun articolo o vanno richieste direttamente agli autori.
Il contenuto Infomedia e© 2004 Infomedia e rilasciato
con Licenza Creative Commons 2.5 BY-NC-ND. Il con-
tenuto Turing Club e © 2004 Turing Club e rilasciato
con Licenza Creative Commons 2.5 BY-ND. Si applicano
tutte le norme di tutela dei marchi e dei segni distintivi.
` E in ogni caso ammessa la riproduzione parziale o tota-
le dei testi e delle immagini per scopo didattico purch´ e
vengano integralmente citati gli autori e la completa
identificazione della testata.
Manoscritti e foto originali, anche se non pubblicati, non
si restituiscono.
Contenuto pubblicitario inferiore al 45%.
La biografia dell’autore riportata nell’articolo e sul
sito www.infomedia.it e di norma quella disponibi-
le nella stampa dell’articolo o aggiornata a cu-
ra dell’autore stesso. Per aggiornarla scrivere a
[email protected] o farlo in autonomia all’indirizzo
http: // mags.programmers.net / moduli / biografia
5/11/2018 Codici sorgente in documenti LaTeX - slidepdf.com
http://slidepdf.com/reader/full/codici-sorgente-in-documenti-latex 3/6
Trovandoci nella necessità di
dover documentare i nostri pro-
grammi, avremo verosimilmente
bisogno di includere porzioni di
codice sorgente nei nostri
manuali, libri, relazioni.
Leslie Lamport, che aveva ben presente
questa necessità, pensò bene di dotare il
suo LaTeX [3] di un ambiente in grado di
formattare un testo come un codice sor-
gente. Pur coprendo parte delle esigenze
dell’utenza, questo ambiente offre funzio-
nalità piuttosto spartane. Per ovviare a ciò,
altri TeX-nici (come vengono chiamati in
gergo i programmatori TeX) hanno fornito
dei package in grado di espandere le capa-
cità di siffatta funzione.In questo articolo vedremo come sfruttare
al meglio questi ausili.
L’ambiente verbatimIl set base di macro offerto da LaTeX com-
prende l’ambiente verbatim per inserire dei
codici sorgente all’interno di un documento.
La prima modalità per comporre un codice
all’interno di un documento è la seguente:
\begin{verbatim}
<codice sorgente>
\end{verbatim}
Il codice sorgente verrà composto con un
carattere di tipo typewriter (quindi equispa-
ziato), allo stesso modo di come è stato
scritto nel sorgente del documento; i carat-
teri “tab” saranno però sostituiti con lo spa-
zio semplice. Come molti ambienti, anche
verbatim ha una versione starred . Scrivere
\begin{verbatim*}
<codice sorgente>
\end{verbatim*}
equivale ad ottenere il codice sorgente for-
mattato come appena detto, ma con glispazi evidenziati. Un esempio delle due
modalità è mostrato in Figura 1.
In caso volessimo scrivere dei pezzi di sor-
gente, o evidenziare dei comandi da ese-
guire, all’interno di un paragrafo, non
dovremmo faticare molto: LaTeX ci fornisce
il comando \verb , e il corrispondente star-
red . Il loro uso è molto semplice, e consiste
nel far seguire al comando il testo da ren-
dere, racchiuso da un carattere delimitato-
re. Ad esempio
\verb+printf(const char *format, ...);+
compone il testo racchiuso entro i caratteri
“+” come visibile in Figura 1. Questo è quan-
to: LaTeX non è in grado di fare altro per trat-
tare i nostri sorgenti. Purtroppo a noi docu-
mentatori folli (e incontentabili) questo non
basta: vorremmo, ad esempio, numerare le
righe dei sorgenti per riferirci ad esse piùfacilmente, o includere i sorgenti senza
doverli scrivere fisicamente nel documento
(un po’ come le direttive al precompilatore
del C o il comando \input di LaTeX).
Compito: più funzionalità.Voto: D+Per estendere le possibilità offerte dall’am-
biente verbatim, è stato implementato il
package omonimo [5]. Vediamone alcune
caratteristiche.
Mentre l’ambiente originale non permette di
scrivere \end {verbatim} (con lo spazio in
mezzo) e deve leggere tutto il testo com-preso tra \begin{verbatim} e \end{verbatim}
prima di poterlo comporre (eventualmente
eccedendo i limiti di memoria di TeX), il
nuovo package supera questi limiti (di mino-
re entità il primo, più serio il secondo).
Introduce però un’incompatibilità: se in
LaTeX base scrivessimo del testo dopo il
comando \end{verbatim} e sulla stessa
riga, questo verrebbe riconosciuto come
testo e composto correttamente; il package
verbatim invece scarterebbe questo testo,
avvertendo che ogni carattere compreso tra
il comando e la fine della riga è stato scar-
tato (è il prezzo da pagare per poter inseri-re degli spazi tra \end e {verbatim} !).
Viene anche fornito l’ambiente comment ,
che fa ignorare al compilatore il testo com-
preso tra l’inizio e la fine dell’ambiente.
La nostra
documentazione habisogno di porzionidi codice sorgente,
e la nostrafissazione
nell’usare LaTeX cipermette di farlo in
maniera rapida,automatizzata,elegante e con
soluzioni grafichespesso vincenti
94 DEV > n. 120 luglio/agosto 2004>>
Codici sorgente indocumenti LaTeX
di Gianluca Pignalberi > [email protected]
5/11/2018 Codici sorgente in documenti LaTeX - slidepdf.com
http://slidepdf.com/reader/full/codici-sorgente-in-documenti-latex 4/6
I due ambienti non possono essere annidati. Naturalmente,
dell’ambiente verbatim viene fornita anche la versione star-
red , con la stessa caratteristica dell’originale.
Pur potendo ricorrere al cut and paste , inserire dei sorgen-
ti in un documento può essere scomodo e tedioso. Per evi-
tare ciò c’è il comando \verbatiminput{<nome file>} .
Questo inserisce il sorgente nel punto voluto, formattando-
lo propriamente. La versione starred di questo comando,
come intuibile, evidenzia gli spazi.
Notiamo una cosa: senza il package verbatim avremmo
potuto ottenere la stessa cosa aggiungendo nel sorgente le
righe di inizio e fine ambiente, usando il comando
\input{<nome sorgente>} ; ma a questo punto il sorgente
non sarebbe più compilabile, a meno di non averne fatto
una copia. Come vediamo, anche se il nostro lavoro di
documentatori è stato semplificato, questo non ci basta: ad
esempio, vorremmo poter contrassegnare le righe del
nostro codice con dei numeri per riferirci più velocemente
ad esse, al fine di documentare determinate funzionalità.
Per poter espletare quest’altra funzione ricorreremo al pac-
kage moreverb [1]. Questo fornisce un insieme di ambien-
ti riconducibili a quello cosiddetto listing .
L’ambiente principale, per l’appunto listing , si apre con laseguente sintassi:
\begin{listing}[<intervallo>]{<riga iniziale>}
Il parametro riga iniziale indica da quale numero si inizia a
numerare le righe (numero assunto dalla prima riga), men-
tre il parametro opzionale intervallo indica quali righe avran-
no il numero scritto accanto (quelle il cui numero mod inter-
vallo = 0).
Ovviamente può capitare di voler suddividere il sorgente da
mostrare in varie parti all’interno del documento, e di voler
continuare la numerazione da dove l’avevamo lasciata.
L’ambiente che per noi riprende tale numerazione è listing-
cont .
Entrambi i comandi visti hanno la versione starred (Figura
2). Purtroppo hanno il “difetto” di volere la hard copy del
codice all’interno del documento. Per ovviare a questo
inconveniente c’è l’ambiente listinginput , che non dispone
della versione starred . La sintassi di inclusione è:
\listinginput[<intervallo>]{<riga iniziale>}{<nome file>}
Tutti questi ambienti non sfruttano una capacità del packa-
ge: non espandono i “tab”. Il package moreverb permette
di definire la dimensione dei caratteri di tabulazione, per
comporli correttamente. I due ambienti che permettono ciò
sono verbatimtab e verbatimtabinput . Entrambi prendono
come parametro opzionale la dimensione della tabulazione;
il secondo prende un ulteriore parametro, obbligatorio, che
è il nome del file da includere nel documento. Non dando la
dimensione del “tab”, il package assume che sia 8 carat-
teri; possiamo variare in tutto il documento questo valore di
default ridefinendo \verbatimtabsize come segue:
\renewcommand\verbatimtabsize{<valore>\relax}
A detta dell’autore, il comando TeX \relax è fondamentale
per la corretta esecuzione della composizione.
Altri due ambienti sono forniti da questo package: verba-
timwrite e boxedverbatim. Il primo scrive nel file di cui
abbiamo fornito il nome come parametro tutto ciò che c’è
scritto nel suo corpo; il secondo ci mostra il contenuto del
suo corpo circondato da un rettangolo di dimensioni corret-
te, e comunque migliori di come verrebbe se volessimo
farlo in modo “casereccio”.
Un altro package di notevole aiuto alla nostra funzione di
documentatori è sverb [6].
Parte delle sue caratteristiche sono state ricreate in altri
package, ma alcune sono molto interessanti (l’autore ha
creato questo package per comporre dei programmi scrittiin un particolare assembly).
L’ambiente listing compone il codice come verbatim, ma il
margine sinistro sarà più interno rispetto a quello del testo
DEV > n. 120 luglio/agosto 2004 95 <<
Intermediate
LISTATO 1Sorgente LaTeX che genera un documentoin cui il comando di chiusura dell’ambiente
può essere inserito nel codice sorgente damostrare
\documentclass[12pt]{article}
\usepackage{sverb}
\usepackage{multicol}
\begin{document}
Prima di inserire un sorgente scriviamo un po’ di testo,
tanto per vedere dove diavolo sar\`a schiaffato il
codice\ldots
\begin{listing*}{<fine-lista>}
\begin{listing}
#include <stdio.h>
main() {
printf(“Hello, world!\n”);
}
\end{listing}
<fine-lista>
\end{document}
FIGURA 1Codice sorgente inserito nel documentoe all’interno di un paragrafo,sia in versione normale che starred
FIGURA 3
Risultato di testo verbatim così comecomposto dall’ambiente listing* di sverb.Questo ambiente ci permette di definirela stringa che funge da terminatoredell’ambiente stesso
FIGURA 2 Pezzi di codice sorgente inseritinel documento e con le righe numerate
5/11/2018 Codici sorgente in documenti LaTeX - slidepdf.com
http://slidepdf.com/reader/full/codici-sorgente-in-documenti-latex 5/6
(per default 1 em, cioè la larghezza approssimativa del
carattere ‘M’ reso nel corpo considerato). Di questo
ambiente esiste la versione starred , che però non funziona
come gli ambienti visti finora. All’apertura dell’ambiente
daremo un parametro, che contiene la stringa che indica la
terminazione dell’ambiente stesso. In questo modo pos-
siamo includere il comando di chiusura dell’ambiente
listing all’interno del codice da comporre. Vediamo un
esempio in Figura 1, che è generata dal codice mostrato
nel Listato 1. Tralasciamo di vedere gli ambienti per scri-
vere un file su disco e per leggerlo da disco per la compo-
sizione, concentrandoci sull’ambiente demo . Questo per-
mette di visualizzare, uno a fianco all’altro o uno sull’altro,
il testo originale e il suo output. La sintassi è la seguente:
\begin{demo}[<forma>]{<titolo>}...\end{demo}
dove la forma può essere n (narrow ) o w (wide ): per default
la scelta è narrow , che posiziona le due sezioni affiancate.
Il seguente testo:
\begin{demo}{Formula}
\[n! = n \cdot (n - 1)!
= \prod_{i = 1}^n i\]
\end{demo}
genera il testo mostrato in Figura 4.
Voglio il meglioPer aumentare le funzionalità fin qui viste sono stati scritti
altri due package: fancyvrb [7] e fvrb-ex [2], scritto intorno
al primo. Il package fancyvrb aggiunge al “capostipite” alcu-
ne funzionalità: la prima è che i comandi verbatim possono
essere usati nelle note a pié di pagina, cosa impossibile
originariamente. Per abilitare tale funzione ricorreremo al
comando
\VerbatimFootnote
Possiamo inoltre definire un’abbreviazione per il verbatim
inline , in sostituzione del comando \verb . Ad esempio
\DefineShortVerb{\|}
ci permette di ottenere l’effetto visibile in Figura 5, cioè
possiamo comporre un testo verbatim con l’apposito
comando o con la sua abbreviazione. Il package fancyvrb
ridefinisce anche l’ambiente verbatim, chiamandolo
Verbatim. Questo ambiente è ampiamente personalizzabile;
tra le varie opzioni, che qui non vedremo, ci sono la defini-
zione di un carattere per commentare delle porzioni di
testo; l’opzione in questione è commentchar . Ovviamente
l’effetto di commentare una riga di testo del codice è quel-lo di non far comporre la riga in oggetto, e quindi non farla
comparire nel codice accluso al documento finale.
Possiamo anche eseguire un comando prima della format-
tazione del testo verbatim (opzione formatcom) o scegliere
il font con cui scrivere il testo del codice (opzione fontfa-
mily ) e la sua dimensione (opzione fontsize ). Abbiamo
anche la possibilità di far circondare il codice da una corni-
ce (frame ) di cui possiamo specificare la posizione, lo spes-
sore e il colore delle linee, il colore di riempimento, la
dimensione dello spazio vuoto tra cornice e testo e l’eti-
chetta della cornice stessa (come fatto con l’ambiente
demo poc’anzi visto, e visibile in Figura 4).
Altre possibilità offerte sono: numerazione delle righe,
automaticamente o arbitrariamente; scelta delle parti di
codice da includere nel documento; evidenziazione degli
spazi (per cui è offerto il solito ambiente starred ).
La sola descrizione di tutte le opzioni di fancyvrb giustifi-
cherebbe la stesura di un articolo a sé stante; il lettore
volenteroso potrà trovare in [7] tutto ciò che serve sapere.
Il package fvrb-ex è stato scritto per incrementare la quan-
tità di ambienti di esempio, la maggior parte dei quali è
devoto all’inserimento di elementi grafici. L’autore ci mette
in guardia sul fatto che il suo uso non è garanzia di risulta-
to su tutti i sistemi a causa della gestione dei caratteri a 8
bit di alcune versioni di TeX. La cosa più utile è la definizio-
ne degli stili di evidenziazione di codice, da cui desumiamo
dei comandi speciali per “colorare” il codice sia nella ver-
sione bianco e nero che a colori (opzioni baw e color ).
Presentazioni ancora più belleIn [4] abbiamo visto come creare delle presentazioni “ani-
mate” tramite il package pdfscreen. Tra le sue opzioni ricor-
diamo esserci code , che fornisce i comandi per la format-
tazione del codice, allo stesso modo dell’ambiente verba-
tim. Le “parentesi angolari” saranno trattate in maniera
speciale, quando vengono trattate entro l’ambiente verba-
tim. Infatti, tutto ciò che verrà da esse delimitato viene trat-
tato come se fosse un’opzione di un comando, e quindi for-
mattato in modo da evidenziare questa particolarità (lo
stesso effetto che desideriamo formattando regole gram-
maticali, a cui riserveremo un articolo a sé).
Se invece vogliamo inserire dei singoli caratteri di maggio-
re e minore, dobbiamo aggiungere un carattere di escape (raddoppiando il carattere), pena un errore in compilazione.
Inserendo il seguente codice otteniamo quanto mostrato in
basso in Figura 6:
96 DEV > n. 120 luglio/agosto 2004>>
Intermediate
FIGURA 4L’ambiente demo mostra il testosorgente e l’output da esso risultanteuno accanto all’altro
FIGURA 5La possibilità di abbreviare il comandoper il verbatim inline ci permetteuna sintassi compatta
FIGURA 6 Testo e codice formattati quandosi usa il package pdfscreen
5/11/2018 Codici sorgente in documenti LaTeX - slidepdf.com
http://slidepdf.com/reader/full/codici-sorgente-in-documenti-latex 6/6
\begin{verbatim}
\usepackage[<options>]{<package>}
#include <<stdio.h>>
\end{verbatim}
Nel package in oggetto è stato definito l’ambiente decl , chevisualizza il testo racchiudendolo in un riquadro. Siccome il
testo al suo interno non è trattato come un codice, dobbia-
mo usare alcuni accorgimenti (ad esempio circondare i
comandi con ‘|’), ma potremo trattare molto facilmente i
parametri di funzioni, grazie a due comandi introdotti appo-
sitamente: \arg e \oarg .Il seguente codice genera il testo visibile in alto in Figura 6:
\begin{decl}
|\usepackage|\oarg{options}\arg{package}
\end{decl}
ConclusioniLe possibilità che LaTeX offre di base per inserire del codice,
formattandolo come un sorgente, non sono moltissime.
L’opera di scrittura di package in TeX ha fatto sì che queste
possibilità fossero aumentate grandemente.
Nel corso del presente articolo abbiamo visto alcuni di que-
sti package (senz’altro i più diffusi) e buona parte delle loro
capacità. I lettori interessati potranno partire da qui per ren-
dere i propri documenti visivamente professionali e coerenti.
Maggiori competenze potranno essere acquisite riferendosi
sempre ai manuali di ogni package, ed eventualmente pren-
dendo dai siti appropriati altri strumenti adatti ai propri scopi.
Bibliografia[1] R. Fairbairns, The moreverb package, www.ctan.org,
1997.
[2] D. Girou, The ‘fvrb-ex’ package, www.ctan.org, 1998.
[3] L. Lamport, LaTeX: A Document Preparation System,
Addison Wesley, Reading, MA., 2a edizione, 1994.[4] G. Pignalberi, Presentazioni e manuali integrati conpdfLaTeX, Dev , n. 117, Gruppo Editoriale Infomedia,
Apr. 2004.
[5] R. Schöpf, B. Raichle, and C. Rowley, A New Implementation of LaTeX’s verbatim and verbatim*Environments, www.ctan.org, 2001.
[6] M. Wooding, The sverb package, www.ctan.org, 1996.
[7] T. Van Zandt, The ‘fancyvrb’ package, www.ctan.org,
1998.
È laureato in Scienze dell’Informazione presso l’Università La Sapienza di Roma. Si occupa, per passione, di Algoritmi Genetici applicati all’elaborazione delle immagini, ma è stato a lungo occupato, per professione, in problematiche legate all’elaborazione di testi: riconoscimento della lingua,compressione, retrieval. Il tutto sempre per sistemi Unix.
Intermediate
Gianluca Pignalberi
Download del progetto
Scarica il progetto completo di questo articolo all’indirizzo:
ftp://ftp.infomedia.it/pub/DEV./Listati/Dev118/ls-latex.zip