Installazione
Su Arch
Installa texlive-most
yay -S texlive-installer
Limitati ad installare solo una configurazione funzionante minimale (circa 200MB).
install-tl
Assicurati che tlmgr
sia nel $PATH
e usa tlmgr
per installare texliveonfly
.
Richiede python.
sudo tlmgr install texliveonfly
Poi, usa texliveonfly
per compilare il file di destinazione.
Verranno installati tutti i pacchetti necessari.
sudo texliveonfly <input file>
Dipendenze esterne
Potrebbe essere necessario installare alcune dipendenze esterne manualmente.
# Utilizzato per aggiungere il supporto per la lingua italiana a babel
sudo tlmgr install babel-italian
# Utilizzato da minted per fare l'highlighting del codice
pip3 install Pygments
Script comodi
% PlantUML diagrams
% Usage: \plantuml[textwidth percentage]{path/to/diagram}{caption}{label}
\newcommand{\plantuml}[4][1]{
\begin{figure}[h]
\begin{adjustbox}{width=#1\textwidth,center}
\input{#2}
\end{adjustbox}
\caption{#3}\label{dg:#4}
\end{figure}
}
Package birichini
Minted: shell escape e come evitarlo
minted
è un pacchetto che permette di evidenziare il codice nei documenti LaTeX in base al linguaggio di programmazione utilizzato.
Il suo funzionamento si basa sulla libreria Pygments
, scritta in Python.
Di conseguenza, l’opzione shell-escape
deve essere abilitata durante la compilazione del documento per invocare l’interprete Python.
Comprensibilmente, ci sono molte situazioni in cui ciò non è permesso (ad esempio su ArXiv).
Per evitare il problema, puoi utilizzare il pacchetto minted
istruendolo a memorizzare su cache il codice evidenziato.
Prima di tutto, compila il documento con l’opzione --shell-escape
abilitata.
Puoi farlo in locale, sulla tua macchina, o utilizzare un servizio come Overleaf.
Assicurati di includere il pacchetto minted
con l’opzione finalizecache
abilitata:
\usepackage[finalizecache,cachedir=.]{minted}
Se stai compilando localmente su VsCode con l’estensione LaTeX Workshop, devi abilitare l’opzione --shell-escape
nel file settings.json
:
// In .vscode/settings.json
{
"latex-workshop.latex.tools": [
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"%DOC%"
],
"env": {}
}
]
}
Una volta completata la compilazione con successo, assicurati di raccogliere i file di cache di minted (quelli con estensione .pyg{style,tex}
) e includerli nell’elaborato finale.
A questo punto puoi cambiare il parametro finalizecache
in frozencache
per evitare di aver bisogno dell’opzione --shell-escape
in futuro:
\usepackage[frozencache,cachedir=.]{minted}
Il principale svantaggio di questo approccio è che è necessario ricompilare il documento ogni volta che si modifica il codice, pertanto è consigliabile utilizzarlo solo quando il documento è nella sua forma finale, prima della consegna.
Glossaries: .latexmkrc personalizzato
latexmk
è uno strumento in grado di creare alcuni target e di eseguire tutti i comandi LaTeX nell’ordine corretto per produrre l’output desiderato.
Poiché alcuni pacchetti, come glossaries
, necessitano di alcuni passaggi di compilazione specifici, può diventare tedioso ripeterli manualmente tra ogni compilazione.
Per risolvere il problema si può ricorrere all’aggiunta di un file di configurazione .latexmkrc come questo:
# Aggiunge makeglossaries alla lista dei comandi
add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
add_cus_dep('acn', 'acr', 0, 'run_makeglossaries');
# Ripulisce i file temporanei dopo aver eseguito latex, pdflatex,
push @generated_exts, 'glo', 'gls', 'glg';
push @generated_exts, 'acn', 'acr', 'alg';
$clean_ext .= ' %R.ist %R.xdy';
sub run_makeglossaries {
my ($base_name, $path) = fileparse( $_[0] ); # gestisce il parametro -outdir dividendo il percorso e il file, ...
pushd $path; # ... si sposta nella cartella di destinazione, per eseguire makeglossaries, ...
if ( $silent ) {
if ( "$^O" eq "MSWin32" ) {
system "makeglossaries", "-q", "$base_name";
} else {
system "makeglossaries -q $base_name";
}
}
else {
if ( "$^O" eq "MSWin32" ) {
system "makeglossaries", "$base_name";
} else {
system "makeglossaries $base_name";
}
};
popd; # ... torna alla cartella precedente.
}