LaTeX/Programmer avec LaTeX
Il est possible de mettre du code TeX dans un fichier LaTeX ; le langage TeX contient des structures de programmation (voir Programmation TeX). Mais il est aussi possible de programmer avec du LaTeX, moyennant l'utilisation d'extensions spécifiques.
Cela permet de faire des commandes personnelles (macros) à comportement « variable », par exemple en calculant la largeur et la hauteur du texte passé en paramètre.
Variables
modifierIl existe trois manières de créer des variables en LaTeX : avec des commandes, des longueurs ou des compteurs. Dans tous les cas, le nom de la variable suit le formalisme des commandes personnelles : il commence par une contre-oblique et ne doit contenir que des lettres.
L'avantage des longueurs et des compteurs est qu'ils ont des commandes dédiées pour les manipuler (définition, addition, utilisation, …).
Commandes
modifierLes commandes personnelles sont des variables de base. Par exemple, on peut définir
\usepackage{graphicx}
...
\newcommand{\echelle}{0.125}
\includegraphics[scale=\echelle]{image1}
\includegraphics[scale=\echelle]{image2}
\includegraphics[scale=\echelle]{image3}
Longueurs
modifierUne longueur doit contenir un nombre, entier ou décimal (le séparateur étant le point) et une unité accolée (cf. Éléments de base > Espaces et changements de ligne). La déclaration d'une longueur se fait avec la commande \newlength
, et l'assignation de la valeur se fait avec \setlength
, par exemple :
\newlength{\malongueur}
\setlength{\malongueur}{1.5em}
crée une longueur \malongueur
et lui donne la valeur d'un cadratin et demi. Autre exemple :
\usepackage{graphicx}
...
\newlength{\largeur}{0.125}
\setlength{\largeur}{10cm}
\includegraphics[width=\largeur]{image1}
\includegraphics[width=\largeur]{image2}
\includegraphics[width=\largeur]{image3}
On peut assigner la longueur d'un objet, d'un mot, avec \settowidth
:
\newlength{\malongueur}
\settowidth{\malongueur}{Bonjour}
la longueur \malongueur
aura pour valeur la taille du mot « Bonjour » dans la police courante. La longueur s'utilise ensuite à la place des valeurs dans les commandes, par exemple :
\hspace{\malongueur}
On peut ajouter une valeur à une longueur avec \addtolength
:
\addtolength{\malongueur}{1em}
augmente la longueur \malongueur
d'un cadratin.
Voir aussi LaTeX/Mise en forme du texte (avancé)#Déformation du texte.
LaTeX possède des longueurs prédéfinies qui ajustent la mise en forme du texte. Pour ce qui est des marges et de l'interligne, on préfèrera faire confiance aux extensions dédiées geometry
(cf. Mise en page), fancyhdr
et setspace
(cf. Mise en forme du texte (avancé) > Espacement interligne). On peut avoir la liste des longueurs de mise en page avec l'extension [francais]{layout}
, qui définit une commande \layout
affichant une page avec la définition des longueurs.
Voici quelques longueurs utiles :
- paragraphes :
\parindent
: alinéa (retrait de paragraphe),\parskip
: espacement entre les paragraphes,\baselineskip
: interligne ;
- tableaux :
\tabcolsep
: moitié de la longueur séparant deux colonnes,\arrayrulewidth
: largeur des filets,\doublerulesep
: espacement entre deux filets pour un filet double ;
- cadres :
\fboxrule
: épaisseur du filet,\fboxsep
: espacement entre le cadre et le contenu.
Compteurs
modifierUn compteur est une variable entière. Elle est créée par la commande \newcounter
et prend la valeur nulle. On peut lui attribuer une valeur autre avec \setcounter
:
\newcounter{moncompteur}
\setcounter{moncompteur}{4}
On peut afficher cette valeur avec la commande \the
:
\themoncompteur
On peut l'incrémenter avec la commande \addtocounter
:
\addtocounter{moncompteur}{2}
ajoute 2 au compteur moncompteur
. Les compteurs sont utilisés par LaTeX pour les listes ordonnées et les numérotations de chapitres, sections, sous-sections, …
Extensions spécifiques
modifierExtension calc
modifier
L'extension calc
permet d'effectuer des calculs arithmétiques sur les compteurs et les longueurs (par défaut, on ne peut que multiplier des valeurs dans LaTeX). Par exemple, pour ajouter deux compteurs « cA = cB + cC » on peut écrire
\usepackage{calc}
...
\newcounter{cA}
\newcounter{cB}
\newcounter{cC}
...
\setcounter{cA}{\value{cB} + \value{cC}}
au lieu de
\newcounter{cA}
\newcounter{cB}
\newcounter{cC}
...
\setcounter{cA}{\value{cB}}
\addtocounter{cA}{\value{cC}}
Par ailleurs, l'extension permet aussi de multiplier et de diviser avec les symboles standards *
et /
. Il existe toutefois quelques restrictions ; en particulier, on ne peut — évidemment — pas ajouter un compteur avec une longueur, et un compteur contient toujours un nombre entier (si le résultat est décimal, il est tronqué). Par ailleurs, si l'on veut multiplier une longueur par un nombre, il faut mettre la longueur en premier : 1em*2
.
Extension multido
modifier
L'extension multido
permet de faire une boucle itérative incrémentale.
Exemple
modifier\usepackage{multido}
...
\multido{\i=1+1}{50}{%
la valeur est \i{}
}
Extension ifthen
modifier
L'extension ifthen
fournit des structures de contrôle : exécutions conditionnelles et boucles conditionnelles.
Mettre du code interprété par le visualiseur
modifierLa commande \special{code}
permet de mettre du code qui sera écrit tel quel dans le fichier DVI. Il sera ainsi interprété et exécuté par le visualiseur DVI.
La commande \pdfcatalog{code}
a le même rôle pour les fichiers PDF.
Voir aussi
modifierBibliographie
modifier- D. Bitouzé, J.-C. Charpentier, LaTeX — Synthèse de cours & exercices, éd. Pearson Education, (ISBN 2-7440-7187-0), p. 264–270, 273, 276–278
- C. Rolland, LaTeX par la pratique, éd. O'Reilly (1999), (ISBN 2-84177-073-7), p. 141–148, 341–342, 354–355