Le package somedefs

Alan Jeffrey Traduction française par Denis Barbier^{∗}

v0.03

Présentation générale

Ce package est un exemple de « boîte à outils pour programmeurs », pour les auteurs de package. Il leur permet de fournir des options qui activent ou désactivent des définitions. Par exemple, un package fred pourrait définir un grand nombre de commandes, parmi lesquelles \test et \hop, et

    \usepackage{fred}

utiliserait beaucoup de mémoire, même si \test et \hop sont les seules commandes utilisées. Cependant, si l’auteur de fred utilisait le package somedefs, alors l’utilisateur pourrait écrire :

    \usepackage[only,test,hop]{fred}

et seules les commandes \test et \hop seront définies.

Pour utiliser le package somedefs dans vos propres packages et classes, vous écrivez :

    \RequirePackage{somedefs}

Vous pouvez alors utiliser les quatre commandes :

– \UseAllDefinitions : toutes les commandes du fichier doivent être définies.

– \UseSomeDefinitions : seules les commandes spécifiées par \UseDefinition

doivent être définies.

– \UseDefinition{⟨nom⟩} : la commande \nom doit être définie.

– \ProvidesDefinition{⟨définition⟩} : ajoute une définition, de la forme

  \commandededefinition{\commande}...

Par exemple, le package fred pourrait écrire :

    \RequirePackage{somedefs}
    \UseAllDefinitions
    \DeclareOption{only}{\UseSomeDefinitions}
    \DeclareOption*{\UseDefinition{\CurrentOption}}
    \ProcessOptions
    \ProvidesDefinition{\newcommand{\test}{...}}
    \ProvidesDefinition{\newcommand{\hop}{...}}

∗Dernière mise à jour le 30/01/2000

Une des commandes \UseAllDefinitions ou \UseSomeDefinitions doit tou-

jours être utilisée. Vous pouvez avoir des commandes qui ont besoin d’autres commandes, auquel cas vous devez déclarer les options manuellement. Par exemple, si la commande \hop a besoin de la commande \laboum, vous devriez écrire :

    \DeclareOption{hop}{\UseDefinition{hop}\UseDefinition{laboum}}

Pour un exemple plus complet de l’utilisation du package somedefs, regardez le

package rawfonts.

Code source

Le générateur de la documentation que vous êtes en train de lire.

1 ⟨∗driver⟩

 2 \documentclass{ltxdoc}

3 ⟨/driver⟩

4 ⟨∗driver⟩

 5 \begin{document}
 6 \DocInput{f-somedefs.dtx}
 7 \end{document}

8 ⟨/driver⟩

Ceci est un package L^{A}TEX 2ε.

9 ⟨∗package⟩

10 \NeedsTeXFormat{LaTeX2e}
11 \ProvidesPackage{somedefs}[1994/06/01 Toolkit for optional definitions]
\UseSomeDefinitions \UseAllDefinitions \UseDefinition \ProvidesDefinition \@providesdefinition \@provides@definition \@unprovided@definition Le package fonctionne ainsi : \UseDefinition{⟨nom⟩} définit \nom comme
étant \@unprovided@definition. Si \UseSomeDefinitions a été appelé, alors
\ProvidesDefinition vérifiera que \nom est \@unprovided@definition. Si
\UseAllDefinitions a été appelé, alors \ProvidesDefinition ne fait rien. Si

ni l’un ni l’autre n’ont été appelés, alors \ProvidesDefinition affiche un message d’erreur.

12 \def\UseSomeDefinitions{%
13 \let\ProvidesDefinition\@providesdefinition

14 }

15 \def\UseAllDefinitions{%
16 \let\ProvidesDefinition\@firstofone

17 }

18 \def\UseDefinition#1{%
19 \expandafter\let\csname#1\endcsname\@unprovided@definition

20 }

21 \def\ProvidesDefinition#1{%
22 \PackageError{somedefs}%
23  {No \noexpand\UseSomeDefinitions or \string\UseAllDefinitions}%
24  {The package which used the `somedefs' package has an error.}%

25 }

26 \def\@providesdefinition#1{\@provides@definition#1\relax
27 \@provides@definition}
28 \def\@provides@definition#1#2#3\@provides@definition{%
29 \ifx#2\@unprovided@definition
30  #1#2#3%

31 \fi

32 }

33 \def\@unprovided@definition{%
34 \PackageError{somedefs}%
35  {Package `somedefs' error: this command was never defined}%
36  {You have requested a command which does not exist.}%

37 }

38 \@onlypreamble\UseSomeDefinitions
39 \@onlypreamble\UseAllDefinitions
40 \@onlypreamble\UseDefinition
41 \@onlypreamble\ProvidesDefinition
42 \@onlypreamble\@providesdefinition
43 \@onlypreamble\@provides@definition

C’est fini !

44 ⟨/package⟩