Se vuoi subito scoprire come installare pacchetti per LaTeX vai direttamente al riepilogo, se invece vuoi leggere le mie (tutto sommato inutili) peripezie per aggiungere un pacchetto puoi leggere tutto il post.
Da un po' di tempo mi sto dilettando a scrivere testi con
LaTeX. Qualche giorno fa avevo la necessità di installare un nuovo
pacchetto LaTeX, per la precisione il pacchetto
empheq. Ho dovuto navigare un po' su Internet prima di trovare la soluzione, mettendo insieme varie guide trovate in giro. Per altro, alla fine del mio peregrinare ho scoperto che avrei potuto molto più facilmente installare (per esempio da
Synaptic) in Ubuntu il pacchetto
texlive-latex-extra che fornisce poco meno di 500 pacchetti LaTeX (
qui potete leggere l'elenco dei pacchetti forniti nella versione presente in Ubuntu Jaunty).
In attesa di vedere in un futuro non troppo lontano in Ubuntu la versione 2008 della distribuzione
TeX Live, con cui pare sia molto semplice installare nuovi pacchetti LaTeX (anche quelli non presenti in
texlive-latex-extra), spiegherò come ho fatto.
La guida che ho seguito inizialmente è stata
http://www.guit.sssup.it/installazione/pacchetti.php. Per prima cosa, per installare un nuovo pacchetto, è necessario ovviamente scaricarlo. Nel mio caso, per ottenere il pacchetto
empheq ho scaricato l'archivio
http://theory.uwinnipeg.ca/scripts/CTAN/macros/latex/contrib/mh.zip. L'ho scompattato e ho compilato il file
empheq.dtx in modo da ottenere il file
empheq.sty. Il problema che sorgeva a questo punto era posizionare il pacchetto in una cartella in cui LaTeX sarebbe stato in grado di trovarlo. Infatti, compilando un sorgente LaTeX che includeva
empheq ottenevo il seguente messaggio di errore:
! LaTeX Error: File `empheq.sty' not found.
In realtà, compilando il sorgente da terminale, quando compare questo messaggio di errore è possibile inserire il percorso del pacchetto, ma ovviamente questa non è una soluzione molto pratica. Una cartella in cui si potrebbero inserire i pacchetti affinché LaTeX sia in grado di utilizzarli è
/usr/share/texmf/tex/latex/, ma personalmente preferisco per svariati motivi salvare queste cose all'interno della home (anche per evitare ogni volta di dover
diventare root per aggiungere o modificare un pacchetto). Sul
forum GUIT avevo letto che per sapere qual è la cartella in cui salvare il pacchetto bisogna dare nel terminale il seguente comando
kpsexpand '$TEXMFHOME'
che mi ha restituito come output
/home/luke/texmf
Ho quindi spostato il pacchetto nella cartella indicata (che ho creato perché non esisteva) e provato a ricompilare il sorgente però ricevendo sempre il precedente messaggio di errore. Con un po' di fortuna ho trovato un altro comando per trovare le cartelle in cui salvare i pacchetti:
kpsepath tex
che ha restituito questo output un po' illeggibile:
.:/home/luke/.texmf-config/tex/kpsewhich//:/home/luke/.texmf-var/tex/kpsewhich//:/home/luke/texmf/tex/kpsewhich//:/etc/texmf/tex/kpsewhich//:!!/var/lib/texmf/tex/kpsewhich//:!!/usr/local/share/texmf/tex/kpsewhich//:!!/usr/share/texmf/tex/kpsewhich//:!!/usr/share/texmf-texlive/tex/kpsewhich//:/home/luke/.texmf-config/tex/generic//:/home/luke/.texmf-var/tex/generic//:/home/luke/texmf/tex/generic//:/etc/texmf/tex/generic//:!!/var/lib/texmf/tex/generic//:!!/usr/local/share/texmf/tex/generic//:!!/usr/share/texmf/tex/generic//:!!/usr/share/texmf-texlive/tex/generic//:/home/luke/.texmf-config/tex///:/home/luke/.texmf-var/tex///:/home/luke/texmf/tex///:/etc/texmf/tex///:!!/var/lib/texmf/tex///:!!/usr/local/share/texmf/tex///:!!/usr/share/texmf/tex///:!!/usr/share/texmf-texlive/tex///
È un elenco che utilizza i due punti come separatore fra le cartelle (più qualche punto esclamativo messo con non so quale criterio). Per renderlo un po' più comprensibile ho utilizzato 3 pipe che restringessero inoltre il campo alle cartelle contenute nella home:
kpsepath tex | sed 's/:/\n/g' | tr -d '!' | grep home
con questo output:
/home/luke/.texmf-config/tex/kpsewhich//
/home/luke/.texmf-var/tex/kpsewhich//
/home/luke/texmf/tex/kpsewhich//
/home/luke/.texmf-config/tex/generic//
/home/luke/.texmf-var/tex/generic//
/home/luke/texmf/tex/generic//
/home/luke/.texmf-config/tex///
/home/luke/.texmf-var/tex///
/home/luke/texmf/tex///
In particolare ha attirato la mia attenzione l'ultima cartella,
/home/luke/texmf/tex/ (lasciate stare gli slash in più alla fine dei percorsi). Ho quindi creato la cartella
/home/luke/texmf/tex/ e spostato nuovamente il pacchetto
empheq.sty in questa cartella. Provando a ricompilare il sorgente però continuavo a ricevere sempre lo stesso errore che segnala pacchetto non trovato. Nella guida
http://wiki.ubuntu-it.org/Ufficio/Latex ho letto che per aggiornare l'elenco dei pacchetti era necessario dare il comando
sudo texhash
Leggendo però il
manuale del comando (nel terminale:
man texhash) ho scoperto che quel comando non aggiorna l'elenco dei pacchetti contenuti nella home. Per fare ciò bisogna dare quindi il comando
texhahs ~/texmf
(ricordo che la tilde
~ è un'abbreviazione del percorso della home dell'utente corrente) e finalmente sono riuscito a compilare il sorgente.
Riepilogo delle operazioni da fare: scaricare il pacchetto e posizionare il file
.sty nella cartella
~/texmf/tex (ovviamente creandola se non esiste). Se nell'archivio che si è scaricato non è presente un file
.sty ma un
.ins o un
.dtx bisogna compilare questi file per ottenere il
.sty, come spiegato
qui. Quindi bisogna aggiornare l'elenco dei pacchetti LaTeX presenti nella cartella con il comando
texhash ~/texmf
e si può finalmente compilare il sorgente che include il nuovo pacchetto.
In realtà sarebbe sufficiente anche inserire il pacchetto nella stessa cartella in cui si trova il sorgente senza dover usare ulteriori comandi, ma trovo questa soluzione poco pratica nel caso in cui si dovessero avere sorgenti LaTeX in numerose cartelle diverse.
Precisazione del 18/8/2009: rileggendo con più attenzione di quanto non avessi fatto inizialmente la guida http://www.guit.sssup.it/installazione/pacchetti.php mi sono accorto che c'era scritto:copiare il relativo file .sty nella sotto-cartella /tex/latex/ di uno dei tre alberi (eventualmente creando tale sotto-cartella, se non ci fosse già);
Quindi senza perdere tutto il tempo che ho perso avrei potuto subito notare che era necessario mettere i pacchetti nella sottocartella tex/latex/ di ~/texmf (in realtà a me funziona anche solo con tex/, non ho avuto bisogno di creare anche la sottocartella latex/). Resta comunque valido il procedimento descritto nel riepilogo.