Visualizzazione post con etichetta Latex. Mostra tutti i post
Visualizzazione post con etichetta Latex. Mostra tutti i post

domenica 28 novembre 2010

Bibtex e lo stile della bibliografia IEEE

Linux e Latex sono due strumenti fantastici anche solo per il fatto che sono io a decidere come voglio che qualcosa si comporti, e non il computer. Ho una particolare esigenza? Sulla rete c'è una mole tale di documentazione che è impossibile non trovare informazioni su come impartire una certa istruzione al sistema in modo che faccia, esattamente, quello che voglio.

Oggi sto lavorando con Latex e Beamer e come stile della bibliografia ho scelto lo stile IEEE (IEEEtran.bst). Il problema di questo stile è che ha un comportamento particolare: se nella bibliografia vengono citati si seguito due articoli con i medesimi autori allora nel secondo i nomi di questi ultimi verranno sostituiti con dei trattini. Qualcosa di questo tipo:

C. Caio, and S. Sempronio, “Titolo dell'articolo”
in Conferenza, 2010, pp. 111–222.
——, “Titolo di un altro articolo con gli stessi autori” 
in Qualche altra conferenza, 2009, pp. 11–22.

Non so per quale assurdo motivo si comporti in questo modo. So che è veramente insopportabile.

Ecco come risolvere il problema.
Per prima cosa è necessario inserire nel file .bib incriminato la seguente direttiva: 

@IEEEtranBSTCTL{IEEEexample:BSTcontrol,
  CTLdash_repeated_names    = "no"
}

Per attivare la direttiva basta inserire nel documento Latex che utilizza quel file .bib il comando 

\bstctlcite{IEEEexample:BSTcontrol}

subito dopo l'inizio del documento (\begin{document}).

Il comando Latex \bstctlcite si trova nel pacchetto IEEEtrantools che potete scaricare da qui. Scaricate il file IEEEtrantools.sty, inseritelo da qualche parte nella vostra directory di lavoro e includetelo con il comando: 

\usepackage{style/IEEEtrantools}

Et voilà!

Beamer e Kile

Beamer è una classe Latex che permette di creare delle presentazioni davvero eccezzionali senza dover ricorrere ad odiati programmi WYSIWYG (What You See is What You Get) come Impress di OpenOffice o addirittura PowerPoint di Office.

Si può installare sotto Sabayon con un semplice:

sudo equo install beamer

Dopo averlo installato, per fare in modo che Kile non si lamenti con un

beamer.cls not found

e che voi usciate pazzi provando a capire per quale motivo avete installato Beamer ma Kile se ne frega, provate a dare un

sudo mktexlsr

e mi ringrazierete.

venerdì 5 marzo 2010

Inserire formule latex nelle immagini create con Inkscape

A volte, quando si scrive un articolo scientifico, si guarda anche all'eleganza e all'aspetto delle cose. Tra i fattori che contribuiscono all'eleganza espositiva in un articolo, quello al quale io tengo di più è la coerenza nello stile. Se nel corpo del testo utilizzo un particolare font per un simbolo o una formula, ci tengo che lo stesso font venga utilizzato anche nelle figure e nelle tabelle in cui quel simbolo o quella formula viene richiamata. Se, per quanto riguarda le tabelle, questo risultato è semplice da ottenere (dato che le tabelle si realizzano comunque in latex), per le figure si potrebbe anche uscire pazzi.

Solitamente, per realizzare le figure da inserire nei miei articoli, utilizzo Inkscape. La versione che ho attualmente installata sulla mia Sabayon è la 0.47. In questa versione, non risulta attivo il supporto al randering di formule latex all'interno delle immagini. Questo strumento è invece utilissimo proprio per ottenere il risultato suddetto. Inserendo direttamente nell'immagine il codice latex utilizzato nel corpo del testo, siamo assolutamente certi che la formula o il simbolo saranno perfettamente uguali anche nell'immagine che stiamo creando. Ci sono due metodi per inserire in Inkscape questa nuova funzionalità.

Il primo metodo, che è quello che io ho utilizzato finora, consiste nel ricompilare Inkscape con la USE flag postscript attivata. E' inoltre necessario ricompilare pstoedit con la USE flag plotutils attivata e python con la USE flag tk attivata:
$ sudo echo media-gfx/inkscape postscript >> /etc/portage/package.use
$ sudo echo media-gfx/pstoedit plotutils  >> /etc/portage/package.use
$ sudo echo dev-lang/python tk >> /etc/portage/package.use
$ sudo emerge python && emerge inkscape
Fatto ciò, riavviando Inkscape, troveremo la nuova voce "Latex formula" nel menu Extension->Render. Cliccandoci, si aprirà una finestra nella quale potremo inserire il nostro codice latex. Inkscape provvederà a farne il rendering e a inserire la formula o il simbolo definito nell'immagine in forma vettoriale. Da quel momento in poi, potremo manipolarla come un qualunque altro oggetto della nostra immagine.

Uno dei problemi di questo approccio è che non è possibile modificare la formula latex ,una volta che questa è stata inserita. Dobbiamo cancellare e rifare tutto da capo. Il secondo metodo che vi propongo risolve anche questo problema e consiste semplicemente nell'installare una estensione di Inkscape, di nome TexText, che trovate qui. Scaricate l'ultima versione del pacchetto, scompattate il suo contenuto in ~/.config/inkscape/extensions e assicuratevi sempre di aver compilato pstoedit con la USE flag plotutils attivata. In questo caso, riavviando Inkscape, troverete una nuova voce TexText nel menu Extension, dal quale inserire il vostro codice latex. L'oggetto ottenuto dal rendering può essere modificato selezionandolo e richiamando nuovamente la funzionalità TexText. Meglio di così?

lunedì 11 gennaio 2010

Font embedded in immagini eps

Nel post di ieri mi sono occupato di descrivere come inserire i font embedded all'interno di un file pdf prodotto tramite latex. Se però nel file sono presenti delle immagini prodotte con inkscape o gnuplot che presentano del testo probabilmente il comando
$ pdffonts mypdf.pdf
vi risponderà con qualcosa del genere:
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
XUWBUR+NimbusRomNo9L-ReguItal        Type 1C           yes yes no      16  0
YXMBPZ+NimbusRomNo9L-Medi            Type 1C           yes yes no      14  0
XGMSCW+CMSY10                        Type 1C           yes yes no      12  0
LSNASR+NimbusRomNo9L-Regu            Type 1C           yes yes no      10  0
PKDQII+NimbusSanL-Regu               Type 1C           yes yes no       8  0
CVCBUP+CMMI12                        Type 1C           yes yes no      28  0
GQHPRH+CMMI8                         Type 1C           yes yes no      37  0
RHZTYV+NimbusRomNo9L-MediItal        Type 1C           yes yes no      35  0
URIFNC+NimbusSanL-ReguItal           Type 1C           yes yes no      46  0
EKJBZX+CMMI10                        Type 1C           yes yes no      44  0
KNVWMN+NimbusMonL-Regu               Type 1C           yes yes no      53  0
WNGVSG+CMR12                         Type 1C           yes yes no      60  0
OZBJDZ+CMMI6                         Type 1C           yes yes no      72  0
SYGRQK+CMSY8                         Type 1C           yes yes yes     78  0
YICAIF+CMR8                          Type 1C           yes yes no      76  0
VMCEHD+CMEX10                        Type 1C           yes yes yes     74  0
OTJKZH+CMR7                          Type 1C           yes yes no      96  0
YGZXPE+CMSY7                         Type 1C           yes yes no      94  0
QSBHWY+CMR10                         Type 1C           yes yes no      92  0
EHWOBO+CMMI7                         Type 1C           yes yes no      90  0
Helvetica                            Type 1            no  no  no     103  0
dove il font Helvetica viene indicato come non embedded. Questo creerà dei problemi se cerchiamo di sottomettere il pdf al controllo automatico effettuato dal sito IEEE PDF eXpress.
Vediamo una procedura abbastanza veloce che ci permette di fare in modo che all'interno delle nostre immagini eps vengano inseriti i font embedded.

Consideriamo una immagine eps qualsiasi: myimage.eps. Per prima cosa è necessario convertirla in formato pdf in modo che vengano inseriti i font:
$ ps2pdf14 -dPDFSETTINGS=/prepress myimage.eps myimage_with_font.pdf

Possiamo verificare che i font sono stati inseriti sempre con il comando visto nel post di ieri:
$ pdffonts myimage_with_font.pdf

Il risultato sarà:
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
BNMWKJ+Helvetica                     Type 1C           yes yes no       8  0

Ora il font Helvetica è embedded. Se vogliamo compilare il nostro articolo con pdflatex abbiamo finito. Basterà includere nel documento le immagini così convertite in pdf e il documento sarà perfetto. Se invece vogliamo compilare il nostro documento con latex (e non con pdflatex) quello che si deve fare è riconvertire il file in eps:
$ pdftops -eps myimage_with_font.pdf myimage_with_font.eps
e poi eliminare il contorno bianco che inevitabilmente si sarà formato intorno all'immagine:
$ ps2eps myimage_with_font.eps
Questo comando creerà un'immagine myimage_with_font.eps.eps. Rinominiamola come preferiamo, includiamo l'immagine nel nostro documento e poi ricompiliamo il nostro articolo in latex.
Adesso tutti i font saranno embedded:
name                                 type              emb sub uni object ID                                                                                                      
------------------------------------ ----------------- --- --- --- ---------                                                                                                      
XUWBUR+NimbusRomNo9L-ReguItal        Type 1C           yes yes no      16  0                                                                                                      
YXMBPZ+NimbusRomNo9L-Medi            Type 1C           yes yes no      14  0                                                                                                      
XGMSCW+CMSY10                        Type 1C           yes yes no      12  0                                                                                                      
LSNASR+NimbusRomNo9L-Regu            Type 1C           yes yes no      10  0                                                                                                      
PKDQII+NimbusSanL-Regu               Type 1C           yes yes no       8  0                                                                                                      
CVCBUP+CMMI12                        Type 1C           yes yes no      28  0
GQHPRH+CMMI8                         Type 1C           yes yes no      37  0
RHZTYV+NimbusRomNo9L-MediItal        Type 1C           yes yes no      35  0
URIFNC+NimbusSanL-ReguItal           Type 1C           yes yes no      46  0
EKJBZX+CMMI10                        Type 1C           yes yes no      44  0
KNVWMN+NimbusMonL-Regu               Type 1C           yes yes no      53  0
WNGVSG+CMR12                         Type 1C           yes yes no      60  0
OZBJDZ+CMMI6                         Type 1C           yes yes no      72  0
SYGRQK+CMSY8                         Type 1C           yes yes yes     78  0
YICAIF+CMR8                          Type 1C           yes yes no      76  0
VMCEHD+CMEX10                        Type 1C           yes yes yes     74  0
OTJKZH+CMR7                          Type 1C           yes yes no      96  0
YGZXPE+CMSY7                         Type 1C           yes yes no      94  0
QSBHWY+CMR10                         Type 1C           yes yes no      92  0
EHWOBO+CMMI7                         Type 1C           yes yes no      90  0
BNMWKJ+Helvetica                     Type 1C           yes yes no     104  0
AIKPBX+Helvetica                     Type 1C           yes yes no     107  0

domenica 10 gennaio 2010

Font embedded con latex

Se lavorate nel settore della ricerca, può esservi capitato, a volte, di avere la necessità di sottomettere un lavoro ad una conferenza che richiede l'utilizzo del sito IEEE PDF eXpress, per verificare se il vostro pdf rispetta le specifiche di compatibilità del sito IEEE Xplore PDF, nel quale avviene la pubblicazione online dei lavori.
Se vi è capitato, quasi sicuramente vi siete imbattuti in un errore di questo tipo:

Errors were found on pages 1-14. Font Helvetica, Times-Italic, Times-Roman, Times-Bold, Times-BoldItalic, Helvetica-Oblique, Courier is not embedded (1659x on pages 1-14).

Tale errore indica che i font che il vostro pdf richiede non sono inglobati nel pdf stesso. Questo comporta che, se un utente scarica il vostro articolo dal sito IEEE Xplore PDF e non ha installati sulla propria macchina i font che il pdf richiede, non sarà in grado di leggerlo correttamente. Proprio per questo la verifica dei font embedded è una delle prime effettuate dal tool automatico di verifica presente in IEEE PDF eXpress.

Esiste un comando che vi permette di verificare se il vostro pdf presenta dei font embedded o no e quali sono quelli non inclusi:
$ pdffonts mypdf.pdf

L'output è qualcosa del genere:
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
[none]                               Type 3            yes no  no      11  0
Helvetica                            Type 1            no  no  no       8  0
Times-Italic                         Type 1            no  no  no      14  0
Times-Roman                          Type 1            no  no  no       9  0
Times-Bold                           Type 1            no  no  no      13  0
[none]                               Type 3            yes no  yes     26  0
[none]                               Type 3            yes no  yes     35  0
Times-BoldItalic                     Type 1            no  no  no      33  0
Helvetica-Oblique                    Type 1            no  no  no      44  0
[none]                               Type 3            yes no  no      43  0
Courier                              Type 1            no  no  no      51  0
[none]                               Type 3            yes no  yes     62  0
[none]                               Type 3            yes no  no      73  0
[none]                               Type 3            yes no  no     109  0
[none]                               Type 3            yes no  no      93  0
[none]                               Type 3            yes no  no      90  0
[none]                               Type 3            yes no  no      88  0
[none]                               Type 3            yes no  no     154  0
[none]                               Type 3            yes no  no     152  0
[none]                               Type 3            yes no  no     150  0
[none]                               Type 3            yes no  yes    148  0

Tutti i no nella 3° colonna sotto emb sono i responsabili dell'errore che ci infastidisce.

Bando alle ciance come è possibile inserire i font all'interno del pdf in modo che questo errore scompaia? Niente di più semplice. Basta utilizzare il comando updmap per configurare pdflatex e tutti gli altri tool latex in modo da inserire i font all'interno dei file di output generati. In particolare basterà lanciare la seguente serie di comandi:

$ updmap --setoption pdftexDownloadBase14 true
$ updmap --setoption dvipsPreferOutline true
$ updmap --setoption dvipsDownloadBase35 true
$ updmap --setoption dvipdfmDownloadBase14 true

Compilando il vostro sorgente latex e rilanciando il comando

$ pdffonts mypdf.pdf
adesso otterremo un output come il seguente output:

name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
XUWBUR+NimbusRomNo9L-ReguItal        Type 1C           yes yes no      16  0
YXMBPZ+NimbusRomNo9L-Medi            Type 1C           yes yes no      14  0
XGMSCW+CMSY10                        Type 1C           yes yes no      12  0
LSNASR+NimbusRomNo9L-Regu            Type 1C           yes yes no      10  0
PKDQII+NimbusSanL-Regu               Type 1C           yes yes no       8  0
CVCBUP+CMMI12                        Type 1C           yes yes no      28  0
GQHPRH+CMMI8                         Type 1C           yes yes no      37  0
RHZTYV+NimbusRomNo9L-MediItal        Type 1C           yes yes no      35  0
URIFNC+NimbusSanL-ReguItal           Type 1C           yes yes no      46  0
EKJBZX+CMMI10                        Type 1C           yes yes no      44  0
KNVWMN+NimbusMonL-Regu               Type 1C           yes yes no      53  0
WNGVSG+CMR12                         Type 1C           yes yes no      60  0
OZBJDZ+CMMI6                         Type 1C           yes yes no      72  0
SYGRQK+CMSY8                         Type 1C           yes yes yes     78  0
YICAIF+CMR8                          Type 1C           yes yes no      76  0
VMCEHD+CMEX10                        Type 1C           yes yes yes     74  0
OTJKZH+CMR7                          Type 1C           yes yes no      96  0
YGZXPE+CMSY7                         Type 1C           yes yes no      94  0
QSBHWY+CMR10                         Type 1C           yes yes no      92  0
EHWOBO+CMMI7                         Type 1C           yes yes no      90  0
Helvetica                            Type 1            no  no  no     103  0

Come vedete i font vengono adesso riconosciuti e abbiamo tutta una serie di yes nella terza colonna sotto emb. Noterete che è presente un solo no in corrispondenza del font Helvetica. Nel mio caso tale font è utilizzato solo all'interno delle immagini inserite nell'articolo. Per fare in modo che le immagini eps o pdf prodotte da tool come gnuplot o inkscape (sono i tool che utilizzo io) presentino anch'esse i font embedded sarà necessario qualche accorgimento che sarà oggetto di un prossimo post.


PS: una procedura più semplice:

$ pdftops mypdf.pdf
$ mv mypdf.ps mypdf_ok.ps
$ ps2pdf -dEmbedAllFonts=true -dPDFSETTINGS=/prepress mypdf_ok.ps