LaTeX/Créer une extension ou une classe

Un livre de Wikilivres.

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[modifier | modifier le wikicode]

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
\NeedsTeXFormat{LaTeX2e}

\ProvidesPackage{monextension}[2007/09/19 Extension personnelle, V1.0]

% extensions

\RequirePackage[latin1]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage{lmodern}
\RequirePackage{graphicx}
\RequirePackage[frenchb]{babel}

% commandes personnelles

\newcommand{\langue}{\emph} % mots en langues étrangères
\newcommand{\citital}{\emph} % citation en italique
\newcommand{\nomprog}{\texttt} % nom de programme en police teletype

Le fichier .tex sera alors typiquement

\documentclass[a4paper, 11pt]{article}

\usepackage{monextension}

\begin{document}
...

Classe personnelle[modifier | modifier le wikicode]

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
\NeedsTeXFormat{LaTeX2e}

\ProvidesClass{maclasse}[2007/09/19 Classe personnelle, V1.0]

% classe de base

\LoadClass[a4paper, 11pt]{article}

% extensions

\RequirePackage[latin1]{inputenc}
\RequirePackage[T1]{fontenc}
\RequirePackage{lmodern}
\RequirePackage{graphicx}
\RequirePackage[frenchb]{babel}

% commandes personnelles

\newcommand{\langue}{\emph} % mots en langues étrangères
\newcommand{\citital}{\emph} % citation en italique
\newcommand{\nomprog}{\texttt} % nom de programme en police teletype

Le fichier .tex sera alors typiquement

\documentclass{maclasse}

\begin{document}
...

Gestion des options[modifier | modifier le wikicode]

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

Options s'appliquant aux extensions appelées[modifier | modifier le wikicode]

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

\RequirePackageWithOptions{babel}

le fichier .tex contiendra alors

\usepackage[frenchb]{monextension}

ou bien

\documentclass[frenchb]{maclasse}

Options s'appliquant à la classe appelée[modifier | modifier le wikicode]

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 :

\LoadClassWithOptions{article}

et pour le fichier .tex :

\documentclass[a4paper, 11pt]{maclasse}

Options personnelles[modifier | modifier le wikicode]

Vous pouvez aussi définir vos propres options. Il suffit pour cela d'utiliser, dans le fichier .sty ou .cls :

\DeclareOption{''NomDeLOption''}{''commandes''}
\ProcessOptions

(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

\RequirePackage{geometry}

\DeclareOption{petitemarge}{\geometry{lmargin=1cm,rmargin=1cm}}
\DeclareOption{grandemarge}{\geometry{lmargin=3cm,rmargin=3cm}}

et ensuite avoir dans le fichier .tex

\documentclass[petitemarge]{maclasse}

ou bien

\usepackage[petitemarge]{monextension}

Les commandes \PassOptionsToPackage et \PassOptionsToclass permettent de passer des options à une extension ou à une classe :

\PassOptionsToPackage{''option''}{''extension''}
\PassOptionsToClass{''option''}{''classe''}

par exemple

\RequirePackage{geometry}

\DeclareOption{petitemarge}{%
   \PassOptionsToPackage{lmargin=1cm,rmargin=1cm}{geometry}}
\DeclareOption{grandemarge}{%
   \PassOptionsToPackage{lmargin=3cm,rmargin=3cm}{geometry}}

On peut placer les commandes dans un fichier à part, portant l'extension .clo, et donc utiliser

\DeclareOption{petitemarge}{\input{petitemarge.clo}}

Voir aussi[modifier | modifier le wikicode]

Dans votre installation LaTeX[modifier | modifier le wikicode]

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

Bibliographie[modifier | modifier le wikicode]

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