LaTeX/Créer une extension ou une classe

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

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

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

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

Options s'appliquant aux extensions appelées

modifier

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

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

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

Dans votre installation LaTeX

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

Bibliographie

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