# LaTeX/Créer une extension ou une classe

LATEX
* Généralités
* Premiers pas
** Installer LaTeX
** Premier exemple
** Lettre
** Éléments de base
** Les classes
** Structuration du texte
** Mise en forme du texte
** Faire des tableaux
** Inclure des images
** Options de mise en forme avancées
** Écrire des mathématiques
** Écrire de la physique
** Écrire des formules chimiques
** Créer une feuille de style
** À l'aide !
* Structure du document
* Gestion de la bibliographie
* Tableaux
* Images
* Éléments flottants
* Mise en forme du texte
* Choix de la police
* Mise en page
* Mathématiques
* Gestion des gros documents
* Faire des présentations
* LaTeX pour enseignants
* Arts et loisirs
** Écrire de la musique
** Dessiner des échiquiers
* Dessiner avec LaTeX
** Dessiner en LaTeX pur
** Dessiner avec PSTricks
** Dessiner avec PGF et TikZ
** Dessiner des molécules
** Réalisation de graphiques mathématiques
* Créer une extension ou une classe
* Programmer avec LaTeX
Annexes
* Vadémécum
* Conversion vers d'autres formats
* Glossaire de typographie
* Index
* Commandes
* Liens externes
Nous avons vu précédemment que l'on pouvait placer le préambule (appels d'extensions et commandes personnelles) dans un fichier .tex et appeler celui-ci avec la commande \input, placée entre la déclaration de classe et le \begin{document}.
Vous avez également la possibilité de créer votre propre classe ou votre propre extension.
Dans un premier temps, on peut voir une extension ou une classe comme un fichier de préambule, mais le potentiel est beaucoup plus important.

## Extension personnelle

Une extension (package) est un fichier texte dont le nom se termine par .sty. Si son contenu est similaire à un fichier .tex, il existe quelques différences :
* il doit commencer par la déclaration du format de LaTeX pour lequel il a été conçu : \NeedsTeXFormat{LaTeX2e} pour LaTeX-2ε ;
* il faut indiquer que c'est une extension et indiquer le nom du fichier (sans le .sty) : \ProvidesPackage{NomDuFichier} ; il est recommandé d'indiquer des informations comme le numéro de version et la date afin de faciliter la mise à jour : \ProvidesPackage{NomDuFichier}[informations sur la version].
Si l'on veut appeler une extension au sein de cette extension, on n'utilise pas \usepackage mais \RequirePackage.
Voici un exemple d'extension élémentaire reprenant simplement le préambule général des fichiers .tex :

### Fichier monextension.sty

Le fichier .tex sera alors typiquement

## Classe personnelle

Une classe (class) est un fichier texte dont le nom se termine par .cls. Si son contenu est similaire à un fichier .tex, il existe quelques différences :
* il doit commencer par la déclaration du format de LaTeX pour lequel il a été conçu : \NeedsTeXFormat{LaTeX2e} pour LaTeX-2ε ;
* il faut indiquer que c'est une classe et indiquer le nom du fichier (sans le .cls) : \ProvidesClass{NomDuFichier} ; il est recommandé d'indiquer des informations comme le numéro de version et la date afin de faciliter la mise à jour : \ProvidesClass{NomDuFichier}[informations sur la version] les informations sur la version doivent commencer par un chiffre, par exemple une date ou un numéro de version.
À moins de tout construire de zéro, on fait appel à une classe préexistante, à laquelle on va ajouter des éléments ou définir des paramètres. On utilise pour cela la commande \LoadClass, qui s'utilise comme \documentclass d'un fichier .tex.
Comme pour les extensions personnelles, si l'on veut appeler une extension au sein de cette classe, on n'utilise pas \usepackage mais \RequirePackage.
Voici un exemple de classe élémentaire reprenant simplement le préambule général des fichiers .tex :

### Fichier maclasse.cls

Le fichier .tex sera alors typiquement

## Gestion des options

On peut passer des options à une classe ou à une extension.

### Options s'appliquant aux extensions appelées

La classe ou l'extension personnelle peut faire appel à d'autres extensions. Dans ce cas-là, les options peuvent être définies « en dur » comme nous l'avons fait ci-dessus, mais les options peuvent aussi être transmises lors de l'appel de l'extension ou de la classe personnelle.
Par exemple, si l'on veut laisser le choix de la langue, on utilise dans le fichier .cls ou .sty
le fichier .tex contiendra alors
ou bien

### Options s'appliquant à la classe appelée

De même, lorsque l'on appelle une classe standard dans une classe personnelle, on peut laisser le choix des options de classe dans le fichier .tex, par exemple, pour le fichier .cls :
et pour le fichier .tex :

### Options personnelles

Vous pouvez aussi définir vos propres options. Il suffit pour cela d'utiliser, dans le fichier .sty ou .cls :
(ne pas oublier le \ProcessOptions à la fin de la déclaration des options, sinon on obtient des messages d'erreurs.)
Par exemple, dans le fichier .sty ou .cls
et ensuite avoir dans le fichier .tex
ou bien
Les commandes \PassOptionsToPackage et \PassOptionsToclass permettent de passer des options à une extension ou à une classe :
par exemple
On peut placer les commandes dans un fichier à part, portant l'extension .clo, et donc utiliser

## Voir aussi
### Dans votre installation LaTeX

* le document clsguide : rechercher ce nom de fichier sur le disque dur, ou bien taper texdoc clsguide en ligne de commande.

### Bibliographie

* C. Rolland, LaTeX par la pratique, éd. O'Reilly (1999), (ISBN 2-84177-073-7), p. 353–380