LaTeX/Programmer avec LaTeX

Un livre de Wikilivres.
Aller à : navigation, rechercher

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

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

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

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

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

Extension calc[modifier | modifier le wikicode]

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

L'extension multido permet de faire une boucle itérative incrémentale.

Exemple[modifier | modifier le wikicode]

\usepackage{multido}
...
\multido{\i=1+1}{50}{%
  la valeur est \i{}
}

Extension ifthen[modifier | modifier le wikicode]

L'extension ifthen fournit des structures de contrôle : exécutions conditionnelles et boucles conditionnelles.

Mettre du code interprété par le visualiseur[modifier | modifier le wikicode]

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

Bibliographie[modifier | modifier le wikicode]

  • 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