Programmare una classe
Questo articolo è ancora in fase di scrittura e potrebbe contenere errori o imprecisioni. Se hai delle correzioni da suggerire, non esitare a farlo!
Attenzione
Il codice qui riportato è puramente illustrativo. Scrivere mi è stato d'aiuto per guidarmi nella creazione della classe unitnthesis
. Per una guida completa si consiglia di consultare la documentazione ufficiale di LaTeX3.
Lasciate ogne speranza, voi ch'intrate
Il codice lato programmatore LaTeX è notoriamente complesso e difficile da comprendere. Quindi a meno che non vogliate diventare degli sviluppatori di pacchetti LaTeX e abbiate una buona dose di pazienza e determinazione, vi scoraggio dall'approfondire troppo questo argomento.
In questo articolo vedremo come programmare una classe in LaTeX3. Per fare ciò, useremo il pacchetto expl3
che ci permette di definire nuovi comandi e variabili in modo più semplice e flessibile rispetto a quanto si possa fare con il LaTeX2e tradizionale.
Perché creare una classe?
Perché creare una classe? Creare una classe in LaTeX ci permette di definire un insieme di comandi e stili che possono essere riutilizzati in diversi documenti. Ad esempio, possiamo creare una classe per scrivere tesi di laurea 😉
Il motivo principale per cui è nata unitnthesis
è quello di fornire uno stile coerente per le tesi di laurea dell'Università di Trento. Questo stile include la formattazione del frontespizio, dell'intestazione e del piè di pagina, dei capitoli, delle sezioni, delle tabelle e delle figure, inoltre fornisce dei comandi personalizzati. Il tutto per assicurare che tutte le tesi di laurea dell'Università di Trento presentino lo stesso stile e la medesima formattazione, rispettando le linee guida specifiche di ciascun dipartimento dell'Università di Trento (che sono molti, 15, e ognuno con le proprie peculiarità).
Vantaggi di una classe
- Riutilizzabilità: una classe può essere riutilizzata in diversi documenti senza dover ripetere lo stesso codice ogni volta;
- Coerenza: una classe garantisce che tutti i documenti creati con essa abbiano lo stesso stile e la stessa formattazione;
- Personalizzazione: una classe può essere personalizzata per adattarsi alle esigenze specifiche di un documento;
- Facilità di manutenzione: una classe permette di modificare facilmente lo stile di tutti i documenti creati con essa.
- Condivisione: una classe può essere condivisa con altri utenti in modo che possano utilizzarla nei loro documenti.
- Estendibilità: una classe può essere estesa con nuove funzionalità e comandi.
- Modularità: una classe può essere divisa in moduli per facilitare la manutenzione e l'estensione.
Classe o pacchetto?
La differenza tra una classe e un pacchetto in LaTeX è che una classe definisce il layout di un intero documento, mentre un pacchetto definisce funzionalità aggiuntive che possono essere utilizzate all'interno di un documento.
Creare un file di classe
Per creare una classe in LaTeX, dobbiamo creare un file con estensione .cls
che conterrà tutto il codice della classe. Il nome del file deve corrispondere al nome della classe che stiamo creando. Ad esempio, se stiamo creando una classe chiamata unitnthesis
, il nome del file sarà unitnthesis.cls
.
Distribuire la classe
Una volta creata la classe, dobbiamo distribuirla in modo che altri utenti possano utilizzarla. Ci sono diversi modi per distribuire una classe in LaTeX:
- CTAN: il modo più comune per distribuire una classe in LaTeX è caricarla su CTAN, il Comprehensive TeX Archive Network;
- GitHub : un altro modo per distribuire una classe è caricarla su GitHub e condividerla tramite le release di GitHub;
- Overleaf: se si utilizza Overleaf, è possibile caricare la classe come template di Overleaf;
- Sito Web: molti autori di classi LaTeX distribuiscono le loro classi tramite il loro sito web nella quale tengono aggiornata la documentazione e il changelog.
In alternativa è possibile distribuire la classe in formato cartaceo stampandola su carta e inviandola per posta \s
Dichiarare la classe
Per creare una classe, dobbiamo definire un file con estensione .cls
che conterrà il codice della classe. Ad esempio, questa è il codice iniziale per la classe unitnthesis
:
\ProvidesExplClass{unitnthesis}
{2024/11/28}
{0.1.0}% semantic versioning: major.minor.patch
{LaTeX3 class for Academic Theses at the University of Trento (UniTN).}
Il comando \ProvidesExplClass
è un comando di expl3
che ci permette di definire i metadati della classe.
Metadati della classe
I metadati della classe sono informazioni che descrivono la classe stessa. Queste informazioni vengono utilizzate per identificare la classe e per fornire informazioni aggiuntive su di essa.
Importare il pacchetto expl3
Dal 2020 non è più necessario importare il pacchetto expl3
per utilizzare i comandi di expl3
; questo perché expl3
è stato integrato nel kernel di LaTeX. Tuttavia, se si utilizza una versione di LaTeX precedente al 2020, è necessario importare il pacchetto expl3
con il comando \usepackage{expl3}
.
In particolare, i parametri sono:
unitnthesis
è il nome della classe che stiamo creando. Questo nome sarà utilizzato per caricare la classe nel documento principale.
\documentclass{unitnthesis}
2024/11/28
: la data di ultima modifica della classe;0.1.0
: la versione della classe, dovrebbe seguire il versioning semantico utilizzando il formatomajor.minor.patch
;LaTeX3 class for Academic Theses at the University of Trento (UniTN).
: una breve descrizione della classe che verrà visualizzata nel log del documento.
Inoltre dichiarare una classe con il comando \ProvidesExplClass
implicitamente esegue anche il comando \ExplSyntaxOn
: This enables the use of LaTeX3 programming syntax, which is more powerful and flexible than traditional LaTeX.
Definire le opzioni della classe
Le classi in LaTeX possono avere delle opzioni che permettono di personalizzare il loro comportamento.