Dove metto i miei file .sty o .cls, per renderli disponibili a tutti i miei file .tex?

So come definire un pacchetto o una classe, ma come lo rendo disponibile (a me stesso) in ogni momento?

Diciamo che ho il file di pacchetto commonstuff.sty (o myprettyclass.cls), che voglio poter includere in qualsiasi file .tex che creo sul mio computer. Dove lo metto? Ho bisogno di eseguire qualche programma di installazione su di esso, o è sufficiente tenerlo in una certa cartella?

Nota: so che posso semplicemente metterlo nella stessa cartella del file .tex, ma non è quello che sto cercando. Sto cercando un modo per "installare" il pacchetto centralmente sul mio computer.

Soluzione

Potresti creare una cartella sotto la tua home directory di TeX e metterci il tuo file .sty. Usa questo comando al prompt dei comandi per scoprire dove:

kpsewhich -var-value=TEXMFHOME

Sul mio computer mostra

C:/Users/stefan/texmf

ma potrebbe anche essere ~/texmf/ su un computer Linux o Unix.

Seguendo la struttura delle directory di TeX, dovresti mettere il tuo file in una sottodirectory come ~/texmf/tex/latex/commonstuff/, secondo il commento di Arthur qui sotto. Questo ha il vantaggio che non è necessario aggiornare il database dei pacchetti poiché TeX cerca direttamente nel tuo albero personale texmf. Se c'è un file ls-R nel tuo albero di casa texmf puoi tranquillamente cancellarlo perché TeX non lo userà comunque. (Nota: questo presuppone che il tuo albero personale sia su un file system locale: gli utenti con cartelle home montate in remoto potrebbero avere ancora bisogno dell'hash).

Per quanto riguarda MiKTeX, dai un'occhiata alla sezione "Installazione di file sty o cls" nella risposta alla domanda Come posso installare manualmente un pacchetto su MikTex (Windows).

Puoi quindi verificare con quale file verrà utilizzato:

kpsewhich filename.sty

Questo mostrerà il percorso del file prelevato dall'implementazione di TeX.

Commentari (15)

I file .sty devono essere messi in qualche sottodirectory di tex/latex in un albero texmf. Questi alberi hanno una struttura piuttosto fissa, ma la loro posizione può variare a seconda del tuo sistema operativo e della distribuzione di TeX. Se usi Unix (incluso Mac OS) e TeX Live, c'è di default una gerarchia

/usr/local/texlive/2009/texmf
/usr/local/texlive/2009/texmf-dist
/usr/local/texlive/texmf-local

così come altre directory. Si vuole metterlo nella directory texmf-local, non nelle altre directory che sono gestite dal programma di installazione di TeX Live; quando si aggiorna TeX Live, il proprio pacchetto potrebbe essere sovrascritto. La gerarchia texmf-local, come suggerisce il nome, è per i pacchetti locali gestiti da te; non sarà toccata dagli aggiornamenti (che è anche il motivo per cui è direttamente sotto la directory texlive, e non texlive/2009, per esempio).

Puoi anche scegliere di creare una directory chiamata texmf nella tua home directory, e il pacchetto sarà visibile solo a te, non agli altri utenti sul tuo computer.

Su Windows con MiKTeX, credo che la directory per le installazioni locali sia C:\Localtexmf di default.

In ogni caso e qualunque sia la tua distribuzione, devi mettere il file .sty dentro .../texmf-local/tex/latex e non direttamente nella directory principale; altrimenti non funziona.

Quindi, se hai installato il pacchetto nella tua home directory, non hai niente da fare. Se hai messo in texmf-local, invece, devi eseguire l'utility mktexlsr (o texhash, è un alias).

Commentari (1)

Su Linux, puoi scegliere qualsiasi directory che ti piace, e poi aggiungere una linea come

export TEXINPUTS=".:~/latex:"

al tuo file .bashrc (puoi aggiungere più directory, separate da due punti. Penso che tu abbia bisogno del '.' all'inizio). Potrebbe esserci qualcosa di simile in Windows. Io lo trovo più facile, dato che separa la "mia" roba dall'albero texmf. Probabilmente non è il massimo se stai scrivendo un grosso pacchetto, ma è comodo per alcune piccole cose che vuoi condividere tra tutti i tuoi progetti.

Commentari (10)