Vai al contenuto

LaTeX

Pubblicato:

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.
}