Mentre in MiKTeX viene attivato automaticamente un processo di installazione se hai, ad esempio, \usepackage{beamer}
in un preambolo del documento senza il pacchetto corrispondente installato, non esiste tale funzionalità su TeX Live.
L'ultima affermazione in realtà non è vera, come sottolineato da wasteofspace nei commenti c'è il pacchetto texliveonfly che implementa l'installazione on demand in TeX Live 2010 e successivi. Non l'ho mai testato e non so se ha degli svantaggi.
Tuttavia, se installi la raccolta completa (o quasi completa) di pacchetti TeX Live (~2400) non avrai bisogno di aggiungere nuovi pacchetti, un tlmgr update -all
periodico si occuperà di tutto, inclusa l'installazione dei pacchetti aggiunti alla collezione TeX Live dopo la prima installazione completa. Questa caratteristica è spiegata nel tlmgr
Manuale.
Analogamente, se un pacchetto è stato aggiunto a una raccolta sul server anch'essa installata localmente, verrà aggiunto all'installazione locale. Questo si chiama
auto-install
ed è annunciato come tale quando si usa l'opzione--list
. Questa installazione automatica può essere soppressa utilizzando l'opzione--no-auto-install
Il manuale contiene molte informazioni sui comandi utili ed è una lettura consigliata per ogni utente.
Lo svantaggio è ovviamente che hai bisogno del set completo di pacchetti installati sulla tua macchina, il che potrebbe essere un problema se non hai abbastanza spazio libero. Se davvero non puoi risparmiare 2 GB dal tuo HD, è anche possibile installare TeX Live in una chiavetta USB, ad esempio, da 4 GB e vivere felici e contenti :)
Tutto quello che ho appena scritto richiede l'installazione di TeX Live con uno dei metodi qui descritti. Se decidi di utilizzare i pacchetti TeX dalla tua distribuzione sei obbligato a seguire la loro politica di aggiornamento, che è diversa per le diverse distribuzioni
texliveonfly
Come accennato nei commenti, esiste un pacchetto TeX Live chiamato texliveonfly
che puoi usare con texliveonfly filename.tex
e scaricherà automaticamente i pacchetti TeX Live corretti.
Questo funziona anche per i pacchetti per i quali il nome del pacchetto LaTeX e il nome del pacchetto TeX Live non corrispondono (ad esempio LaTeX rubikrotation
pacchetto è contenuto nel rubik
pacchetto TeX Live) e tiene conto anche delle dipendenze del pacchetto.
Utilizzo
Installazione È uno script Python, quindi richiede l'installazione di Python. Puoi quindi installarlo come al solito con tlmgr install texliveonfly
. Se devi usare sudo tlmgr
qui dovrai usare sudo texliveonfly
più tardi.
Correre Se vai nel tuo terminale nella directory del tuo filename.tex
file, puoi eseguirlo con texliveonfly filename.tex
.
Altri compilatori Al momento utilizza pdflatex
per impostazione predefinita, ma puoi configurarlo per l'esecuzione con altri motori di compilazione utilizzando --compiler
(o -c
) flag, quindi come texliveonfly --compiler=lualatex filename.tex
.
Flag del compilatore Puoi passare i flag per il compilatore che usi a texliveonfly
utilizzando il --arguments
(o -a
), quindi ad esempio se in precedenza hai utilizzato latexmk -shell-escape -pdf filename.tex
allora ora usi texliveonfly --compiler=latexmk --arguments='-shell-escape -pdf' filename.tex
.
Problemi noti
- Ci sono alcuni casi di pacchetti mancanti che falliscono con un messaggio di errore non standard, ad esempio babel quando mancano le lingue, nel qual caso
texliveonfly
non li scarica. Al momento è noto che i seguenti pacchetti devono essere installati manualmente:(modifica se ne trovi altri)
- Le lingue Babel, ad esempio per le lingue europee, installano
collection-langeuropean
pacchetto - Stili Biblatex, ad es. per lo stile della natura è necessario il
biblatex-nature
pacchetto - codifiche fontenc, ad es. per ottenere
t2aenc.def
ti serve ilcyrillic
pacchetto e per ottenere illy1enc.def
ti serve illy1
pacchetto. - Pacchetti coinvolti quando si utilizza il pacchetto coniato, che sono
minted fvextra upquote lineno xstring framed caption
(grazie a pablgonz per il test) - Quando si eseguono programmi esterni come
texcount
nel tuo file LaTeX, texliveonfly non rileva che hai bisogno deltexcount
pacchetto.
- Quando si danno opzioni a texliveonfly, ad esempio per un compilatore diverso, a volte si blocca senza una ragione apparente durante l'installazione dei pacchetti. Molto probabilmente puoi aggirare il problema eseguendo prima texliveonfly senza opzioni, quindi
texliveonfly main.tex
(quindi scaricherà i pacchetti) e quindi eseguendo ciò che si desidera, ad esempiolatexmk main.tex
.
Sfondo
Essenzialmente texliveonfly è uno strumento di compilazione come latexmk (che è uno script Perl), avvolge il motore TeX. Nota tuttavia che puoi concatenarli con texliveonfly --compiler=latexmk filename.tex
.
È uno script python che funziona tentando di eseguire il tuo file LaTeX e, se fallisce perché manca un pacchetto, tenterà di installare quel pacchetto.
Inoltre su ctan.org/pkg/texliveonfly puoi vedere la fonte su ctan.org/tex-archive/support/texliveonfly o su latex.org/forum
PS L'ho testato su Arch Linux 4.19.4 e su Travis CI (Ubuntu 14.04).
Il mio approccio piuttosto semplicistico è stato cercare \usepackage
, estrai il contenuto e installalo utilizzando il gestore pacchetti della distribuzione.
cat *.tex | sed -n 's/^[^%]*\\usepackage[^{]*{\([^}]*\)}.*$/tex\(\1.sty\)/p' | paste -sd ' ' -
Questo restituisce un elenco di pacchetti con .sty
e circondato da tex()
, per esempio. tex(amsmath.sty) tex(enumitem.sty) tex(graphicx.sty)
. Posso passarli direttamente a yum
/dnf
(Sto usando Fedora).
sudo dnf install $( cat *.tex | sed -n 's/^[^%]*\\usepackage[^{]*{\([^}]*\)}.*$/tex\(\1.sty\)/p' | paste -sd ' ' - )
C'erano un paio di pacchetti che avevo diviso su più righe che il sed
expression missed, che ho installato manualmente utilizzando sudo dnf install 'tex(some-package-name.sty)'
.
Si spera che ci sia un semplice .sty
installazione equivalente per apt-get
su Ubuntu.