Vai al menù, saltando i contenuti (access key "m")
Software per la grafica
Spesso si ha la necessità di creare delle figure schematiche, come diagrammi o schematizzazioni di situazioni reali.
Questo è tanto più vero quando si realizza un lavoro scientifico.
Il ricorso a strumenti non adatti allo scopo (Paint, Gimp, ecc...) è frequente ed è dettato dall'ignoranza di
strumenti ben più potenti che, oltre ad essere più adatti allo scopo, hanno la possibilità di creare immagini di tipo
vettoriale.
In questa pagina voglio raccogliere le mie esperienze nella realizzazione di immagini, grafici, illustrazioni per articoli, libri o semplici appunti. In particolare mi concentrerò sull'indirizzare il lettore verso lo strumento più adatto per ogni esigenza. Un accento particolare verrà messo tra l'interoperabilità dei vari programmi con LaTeX.
Prima di fare una lista dei programmi in questione vogliamo chiarire alcuni concetti basilari. Immagini raster e vettoriali.
Programmi di grafica raster
Gimp, Paint.NET
Programmi di grafica vettoriale
Per creare immagini vettoriali ci sono sostanzialmente due approcci: 1. testuale; 2. grafico.
Il primo è il più comune perché più naturale per un computer. Difatti una immagine vettoriale non è nient'altro
che un file di testo con una serie di comandi aderenti ad una certa specifica che poi viene interpretato da un
opportuno visualizzatore compatibile con quella specifica. Così funzionano tutti i formati vettoriali come il
pdf, ps, eps, svg, ecc... Tutti questi "linguaggi" non sono però adatti ad essere scritti a mano. Quelli più
simili ad un linguaggio di programmazione e più facilmente gestibili da un essere umano sono il METAPOST
, l'ambiente
figure
di LaTeX, ecc...
Sebbene i linguaggi come METAPOST
siano potentissimi e permettano di generare figure geometriche
di elevatissima qualità e precisione non sono certo banali da imparare a meno di dedicare molto tempo al loro studio.
Se non si ha quindi la necessità di questa precisione e ci si accontenta di una accuratezza non matematica, è decisamente
consigliato usare strumenti grafici. Stavolta saranno loro ad occuparsi della traduzione del vostro disegno
nei comandi della specifica usata.
Ecco una lista di programmi di grafica vettoriale che ritengo molto validi. Sono tutti multi-piattaforma e permettono di inserire formule matematiche secondo la sintassi di LaTeX.
- Inkscape: (multipiattaforma, 2010) ha la possibilità di aprire e salvare nei formati
vettoriali più importanti e anche di esportare nei formati raster di uso più comune.
Se una distribuzione TeX è installata sulla vostra macchina, Inkscape sarà in grado di produrre testo formattato secondo il linguaggio di LaTeX. Per fare questo avrete bisogno del plugin di Inkscape TeXtext, più potente di un altro plugin simile chiamato Inklatex. Inkscape permette anche l'inserimento di oggetti definiti matematicamente come per esempio grafici di funzioni. Vedi questo link. Un'altra funzionalità molto importante introdotta dalla versione 0.48 è la possibilità di esportare un grafico in modalità LaTeX, cioè viene esportato un file pdf o eps e insieme a esso un file .tex che in fase di compilazione sovrapporrà le etichette al disegno. In questo modo si avranno delle etichette perfettamente in linea con lo stile del testo. http://wiki.inkscape.org/wiki/index.php/LaTeX. - Ipe: (multipiattaforma, 2010) graphical vector editor with export capabilities. Permette di disegnare funzioni tramite una estensione (ipelet) oppure disegni di funzioni si possono importare (da pdf e da svg). Permette di inserire espressioni in LaTeX che verranno compilate e inserite nel grafico al momento del salvataggio.
- xfig (Lin 2009), WinFIG (Win, Lin, 2009), jfig (Java, 2009). Permettono sia l'inclusione di formule LaTeX, sia l'esportazione di un grafico in codice PSTricks.
- TpX: può esportare oltre che nei classici formati vettoriali, anche in codice PSTricks, picture, TkiZ e altri (Win, 2008)
- jPicEdt: graphical PSTricks, LaTeX picture and e/eepic generator with export options (Java, 2007)
- LaTeXDraw: esporta nei classici formati vettoriali e in codice PSTricks (Java, 2010)
- Jpgfdraw: graphical PGF and flowfram generator with export options. Permette anche la definizione di forme per il pacchetto shapepar (Java, 2009)
- GLE: linguaggio e relativa interfaccia QGLE (Win, Lin, Mac, 2009)
- Dia: diagram editor (2009)
- GeoGebra: Editor vettoriale euclideo (2009)
- C.a.R./CaRMetal: vector editor (2009)
- Geometria: disegni geometrici 2D e 3D (2009)
- Eukleides: linguaggio per disegni geometrici direttamente nel sorgente LaTeX. Ha anche una interfaccia grafica che permette di disegnare graficamente e salvare in eps, pdf, ecc... (2009)
- GCLC: linguaggio e relativa interfaccia per disegni geometrici 2D e 3D. L'autore è stato anche invitato dal prof. Stefano Marchiafava (uno dei miei prof) a presentare il suo software alla Sapienza! (2009)
- GeoNext: geometry
- GeoProof: geometry. See also this link.
- GeoView: geometry
- XCircuit: permette il disegno di circuiti elettrici (e non solo) tramite librerie di simboli.
Esiste poi in LaTeX l'ambiente picture che permette di creare delle figure
descrivendole con del codice sorgente tramite appositi comandi.
Analogamente all'ambiente picture sono stati creati degli ambienti simili ma molti più potenti.
Tra questi PSTricks (2009) e PGF/Tikz (2008). PSTricks è basato su Postscript e può quindi essere
compilato solo con il comando latex
. Il secondo invece è un linguaggio PGF con un
pacchetto di macro chiamato Tikz e può essere usato sia con latex
che con pdflatex
.
In entrambi i casi sono stati creati moltissimi pacchetti per estenderne le funzionalità
in vari ambiti. PSTricks è un po' più potente di PGF per motivi di precisione nei calcoli matematici che è in grado di fare
il postscript.
Infine ci sono dei linguaggi come quelli appena descritti ma che sono indipendenti da LaTeX, come ad esempio ePiX (2009) ed Asymptote (2009). Di cui però non conosco alcun frontend.
Immagini di alta qualità e piccola dimensione
Per realizzare un opera di qualità la qualità delle immagini è fondamentale. Quando si tratta di grafici o schemi è bene inoltre usare delle convenzioni ben precise. Per esempio una delle cose più importanti è usare pochi colori e sempre uguali. I libri scientifici ben composti usano solitamente 3 o al massimo 4 colori: bianco di base, nero per le scritte e un particolare tipo di rosso, non troppo acceso. Un altro colore potrebbe essere il blu, anch'esso non troppo acceso.
I grafici è bene che siano tutti immagini vettoriali. Se però avete un numero eccessivo di punti potete usare invece del pdf, il png.
Per ridurre il "peso" delle immagini potete agire solitamente su due fattori: la risoluzione e la profondità del colore. Il jpeg non supporta l'indicizzazione dei colori (indexed colors) mentre il png sì (1, 2, 4, 8 bit che corrispondono a 2, 4, 16, 256 colori). optipng, gimp, ...
Conversione di immagini tra diversi formati
La conversione tra formati raster e da vettoriale a raster è piuttosto semplice mentre la conversione tra formati vettoriali e da formato raster a vettoriale è più rara e difficile. Software: pstoedit. Per LaTeX: oletex package.
Da .jpeg a .eps
Una volta si doveva usare l'ottimo programma jpeg2ps per
motivi di dimensione dell'eps generato. Oggi non è più necessario. È sufficiente usare ImageMagick e specificare
che l'eps deve essere in Postscript di livello 3.
Un altro programma che sembra promettere molto bene ma che ancora non conosco è bmeps (per Windows
è disponibile nel progetto dklibs).
Da .png a .eps
Anche in questo caso, finora l'unico strumento che dava risultati eccellenti era
png2eps (un semplice script che
usa altri software, in particolare pngcheck, TIFF library, netpbm collection. Vedi GnuWin32).
Attualmente è sufficiente usare ImageMagick specificando che l'eps deve essere in Postscript di livello 3.
Un altro programma che sembra promettere molto bene ma che ancora non conosco è bmeps (per Windows
è disponibile nel progetto dklibs).
Da .tiff a .png
Per convertire immagini da un formato raster all'altro non c'è strumento migliore di ImageMagick. Inoltre, esiste un'utility, OptiPNG per ottimizzare il PNG (facoltativa nello script esposto sotto). Quest'ultima è un singolo file eseguibile. Per fare in modo che Windows sappia dove sia e quindi lo possa eseguire da qualunque directory, va modificata la PATH di Windows oppure l'eseguibile va copiato in una directory già compresa nella PATH (ad esempio nella cartella radice di ImageMagick).
Da .emf a .eps o .pdf
La conversione di immagini tra formati vettoriali è un campo ancora in evoluzione e con molte lacune, purtroppo non esiste uno strumento potente come lo è ImageMagick per i formati raster.
Una delle conversioni più comuni che vi può capitare tra formati vettoriali è quella da .emf (la nuova versione del .wmf) a .eps o .pdf. Infatti un file .emf è tipico dei sistemi Windows.
Dopo tante ricerche vi presento la maniera migliore per questo tipo di conversione.
Lo strumento che permette questa operazione è MetafileToEPSConverter.
Potete usarlo sia tramite la sua semplice interfaccia grafica sia da riga di comando.
Da riga di comando basta dare
metafile2eps input.emf output.eps
Ovviamente se vi serve avere un pdf anziché un eps, fate prima l'eps e poi convertitelo in pdf come già spiegato sotto.
Da .pdf o .eps a .emf
Provare il software EmfPrinter.
Da .pdf a .eps
Se avete delle immagini in .pdf e le volete convertire in .eps (senza alcuna perdita di qualità),
usate pdf2ps
e eps2eps
.
Da .eps a .pdf
Se avete delle immagini in .eps e le volete convertire in .pdf (senza alcuna perdita di qualità),
usate epstopdf
.
Script per le conversioni
Quanto visto finora può essere riassunto nei seguenti script. Vanno chiamati come volete (consiglio image2png.bat, image2eps.bat, image2pdf.bat) purché con estensione .bat e posti nella cartella SendTo del vostro utente. Ovviamente per farli funzionare dovete installare le dipendenze che vi interessano.
@echo off rem ********************************************************* rem BATCH SCRIPT FOR CONVERSION OF IMAGE IN EPS FORMAT rem rem Francesco Biccari rem 2009-11-22 rem ********************************************************* rem rem PATH SETTINGS set PATH=%PATH%;"C:\Program Files\gs\gs8.64\bin\" echo Converting... FOR %%A IN (%*) DO ( echo %%A rem eps to eps rem clean and crop the eps rem dependencies: MiKTeX, Ghostscript IF /I %%~xA==.eps ( eps2eps.bat %%A "%%~nA_opti.eps" ) rem pdf to eps rem dependencies: MiKTeX, Ghostscript, (another better tool is pdftops (xpdf)) IF /I %%~xA==.pdf ( pdf2ps.bat %%A "%%~nA_temp.ps" rem pdftops.bat %%A "%%~nA.ps" eps2eps.bat "%%~nA_temp.ps" "%%~nA.eps" del "%%~nA_temp.ps" ) rem png to eps rem dependencies: ImageMagick IF /I %%~xA==.png ( convert %%A "eps3:%%~nA.eps" ) rem tiff to eps rem dependencies: ImageMagick IF /I %%~xA==.tiff ( convert %%A "eps3:%%~nA.eps" ) rem jpg to eps rem dependencies: ImageMagick IF /I %%~xA==.jpg ( convert %%A "eps3:%%~nA.eps" ) rem emf to eps rem dependencies: MetafileToEPSConverter, MiKTeX, Ghostscript IF /I %%~xA==.emf ( metafile2eps.exe %%A "%%~nA_temp.eps" eps2eps.bat "%%~nA_temp.eps" "%%~nA.eps" del "%%~nA_temp.eps" ) rem wmf to eps rem dependencies: MetafileToEPSConverter, MiKTeX, Ghostscript IF /I %%~xA==.wmf ( metafile2eps.exe %%A "%%~nA_temp.eps" eps2eps.bat "%%~nA_temp.eps" "%%~nA.eps" del "%%~nA_temp.eps" ) )
@echo off @rem ********************************************************* @rem BATCH SCRIPT FOR CONVERSION OF IMAGE IN PDF FORMAT @rem Dependencies: @rem eps: MikTeX (epstopdf, set PATH) @rem png: ImageMagick (convert, set PATH), optipng @rem jpg: ImageMagick (convert, set PATH) @rem ********************************************************* echo Converting... FOR %%A IN (%*) DO ( echo %%A IF /I %%~xA==.png ( optipng.exe -o7 -q -out "%%~nA_opti.png" %%A convert.exe "%%~nA_opti.png" "%%~nA.pdf" del "%%~nA_opti.png" ) IF /I %%~xA==.jpg ( convert.exe %%A "%%~nA.pdf" ) IF /I %%~xA==.eps ( epstopdf.exe %%A ) )
@echo off @rem ********************************************************* @rem BATCH SCRIPT FOR CONVERSION OF IMAGE IN PNG FORMAT @rem Dependencies: @rem tiff: ImageMagick (convert, set PATH), optipng @rem jpg: ImageMagick (convert, set PATH), optipng @rem eps: ImageMagick (convert, set PATH), optipng @rem pdf: ImageMagick (convert, set PATH), optipng @rem ********************************************************* echo Converting... FOR %%A IN (%*) DO ( echo %%A IF /I %%~xA==.jpg ( convert -strip -quality 100 %%A "%%~nA.png" optipng -o7 -q "%%~nA.png" ) IF /I %%~xA==.tiff ( convert -strip -quality 100 %%A "%%~nA.png" optipng -o7 -q "%%~nA.png" ) IF /I %%~xA==.eps ( convert -strip -quality 100 %%A "%%~nA.png" optipng -o7 -q "%%~nA.png" ) IF /I %%~xA==.pdf ( convert -strip -quality 100 %%A "%%~nA.png" optipng -o7 -q "%%~nA.png" ) )
@echo off echo Cropping... FOR %%A IN (%*) DO ( echo %%A IF /I %%~xA==.pdf ( copy /Y %%A "%%~nA.pdf.old" cd "%%~dA%%~pA" pdfcrop.exe --margins 1 "%%~nA.pdf.old" "%%~nA.pdf" ) )
Lavorare con i pdf e i ps
Lettori di pdf
- Adobe Acrobat Reader
- Foxit Reader
- PDF XChange Viewer (FREE)
- SumatraPDF Viewer
La migliore visualizzazione la offre Adobe Acrobat Reader. A seguire Foxit Reader. Poi PDF XChange e SumatraPDF. Per quanto riguarda la possibilità di commentare i pdf vedi sotto. Foxit Reader va ancora bene per leggere i pdf sullo schermo, gli altri due no. Adobe Acrobat Reader ha invece una chiarezza dei font impressionante. Foxit Reader ha meno possibilità di commenti (anche se quelli base di solito sono sufficienti) rispetto a PDFXChange. Se si vuole usare un solo lettore consiglierei Foxit Reader. SumatraPDF è l'unico PDF viewer adatto per lo sviluppo di documenti in LaTeX. Io infatti uso Foxit Reader e SumatraPDF che sono anche programmi abbastanza leggeri. Se invece i pdf sostanzialmente li leggete e basta meglio Adobe Acrobat Reader, non permette i commenti, è enorme come dimensioni, però è veramente ben fatto.
Strumenti per i pdf
- MiKTeX: pdf2ps, ps2pdf, ...
- pdfsam
- pdfill
- pdftk
- xpdf: pdftops, pdftotext, pdfimages, pdfinfo, pdffonts
- Foxit IFilter
pdf2ps [-dLanguageLevel=3] input.pdf output.ps
Spesso si ha la necessità di ridurre la dimensione di un documento pdf. I font e la maniera in cui vengono inclusi nel pdf hanno un peso notevole. In LaTeX per esempio costa molto di più, in termini di spazio, usare i font di default piuttosto che i Times.
Molte volte il problema di una dimensione eccessiva di un pdf sono le immagini in esso contenute. Come sapete la maniera migliore è quella di ottimizzare le immagini in partenza (cosa facile con LaTeX ma difficile con programmi come Word od OpenOffice dove le immagini vengono "incluse" nel documento). C'è un modo però per diminuire la dimensione delle immagini raster contenute nel pdf direttamente tramite Ghostscript. Questo passaggio potrebbe risultare utile anche a chi ha già ottimizzato le immagini del proprio documento ma vuole realizzare una versione a "bassa risoluzione". Ecco il comando:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output_nomefile.pdf input_nomefile.pdf
Confronto lettori pdf
Caratteristica | Adobe Reader X | Foxit Reader | Nitro PDF Reader | PDF-XChange Viewer | SumatraPDF |
---|---|---|---|---|---|
Dimensione | 37 MB | 14 MB | 26 MB | 18 MB | 4.5 MB |
Qualità video | ottima | buona | buona | scarsa | buona |
Qualità stampa | ottima | scarsa | buona | buona | buona |
Sticky notes | yes | yes | yes | yes | no |
Highlight Text | yes | yes | yes | yes | no |
Underline Text | no | yes | yes | yes | no |
Strikeout Text | no | yes | yes | yes | no |
Drawing | no | yes | no | yes | no |
Measure Tools | no | yes | no | yes | no |
Text | yes | yes | yes | yes | no |
Link to file | no | yes | no | no | no |
Insert image | yes** | yes | yes** | yes** | no |
Insert A/V | no | yes | no | no | no |
Browser plugins | yes | yes | yes | yes | yes |
PDF IFilter | yes | no | no | yes | yes |
PDF printer | no | no | yes | no | no |
OCR | no | no | no | yes | no |
Other formats | - | - | - | - | eps*, ps*, djvu, chm, xps, cbz, cbr |
*: richiede Ghostscript
**: solo firma
Un'utile funzionalità è la possibilità di inserire immagini e video all'interno del pdf. Attenzione che questa funzionalità è diversa dall'Attach file che crea solo una nota in cui è possibile aprire un link esterno. L'inserimento di una immagine è piuttosto utile, considerate per esempio quando dovete aggiungere la vostra firma scannerizzata su un pdf.
Sotto la dicitura shell-extension ricadono due funzionalità. La prima consiste in un componente che permette al sistema operativo di mostrare al posto dell'icona generica un'icona personalizzata con l'immagine della prima pagina (anteprima). La seconda funzionalità consiste in un altro componente che permette al sistema operativo di indicizzare i file pdf al loro interno (ifilter).
Estrazione immagini da un pdf
Per prendere le immagini da un pdf hai varie possibilità:
La più veloce è usare lo snapshot del tuo lettore di pdf. Nelle opzioni devi mettere
la risoluzione fissa a valori di 300 px o più. Incolli l'immagine copiata in un programma
come gimp, fai le modifiche del caso e la salvi in formato png o jpg a seconda che è
un diagramma oppure una fotografia.
GIUDIZIO: facilissimo ma le immagini sono raster
Se devi estrarre tutte le immagini insieme puoi provare a installare xpdf (c'è sia
per Linux che Windows). Comprende vari programmini a riga di comando tra cui
pdfimages. Lanciando questo programma sul tuo pdf verranno salvate tutte le immagini
raster al suo interno. Questo significa che le immagini vettoriali NON vengono estratte.
GIUDIZIO: complicato per chi non sa usare la riga di comando. Le immagini prodotte
sono salvate in formato pnm/ppm oppure con un'opzione le immagini che originalmente erano
in jpg vengono salvate in jpg.
Puoi usare pdfill. Ha l'interfaccia grafica ma non permette di vedere dove si sta tagliando. Devi regolare numericamente le distanze dai bordi della pagina e basta.
GIUDIZIO: tedioso. Però ottieni immagini vettoriali (se lo erano in partenza) in pdf.
Puoi usare il programma briss che invece ti fa vedere dove stai tagliando (briss)
GIUDIZIO: in teoria ottimo ma non sono mai riuscito a farlo funzionare come si deve.
Ottieni immagini vettoriali in pdf (se lo erano in partenza).