Comment écrire des classes et des extensions ?

Il n'y a rien de particulièrement extraordinaire dans les commandes que vous utilisez lors de l'écriture d'une extension :

  • vous regroupez simplement un ensemble de commandes \(re)newcommand et \(re)newenvironment. La lecture de la question « À quoi servent “\makeatletter” et “\makeatother” ? » pourra d'ailleurs vous éviter une erreur sur la gestion du caractère « @ » ;
  • vous les enregistrez en un fichier mon-extension.sty ;
  • et c'est fait !

Cependant, vos extensions pourront demander un peu plus de sophistication :

  • des informations sur les commandes \LaTeX utilisées pour cette tâche se trouvent dans le document « Class and package programming guide » (en PDF ici) ;
  • une bonne connaissance de \TeX lui-même est importante et des livres comme le TeXbook ou TeX by topic sont ici précieux. Dès lors, il vous sera possible d'utiliser la source documentée de \LaTeXe comme matériel de référence. Cette source peut être obtenue en compilant le fichier « source2e.tex » ou en consultant directement sa version PDF ;
  • les sources documentées (fichiers « dtx ») des extensions sont également une bonne aide.

Écrire de bonnes classes n'est pas chose facile. Il est recommandé avant tout d'en lire quelques-unes telles les classes standard. Les autres classes sont généralement basées sur celles-ci et commencent par charger la classe standard avec \LoadClass. Un exemple de cette technique peut être vu dans le document « Class and package programming guide ».

Une version annotée de la classe article, tel qu'elle apparaît dans classes.dtx, a été publiée en anglais dans le TUGboat 28:1. Cet article, de Peter Flynn, est un bon guide pour comprendre classes.dtx.


Source: Learning to write LaTeX classes and packages

1_generalites/documentations_libres/apprendre_a_ecrire_des_classes_et_des_packages.txt · Dernière modification: 2021/02/10 13:33 par yannick.tanguy
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0