Présentation d’opérations avec la classe Beamer de LaTeX et le package xlop

mardi 30 janvier 2007
par  David Cobac
popularité : 1%

Il s’agit de faire une présentation d’une simple addition en faisant apparaître au fur et à mesure le calcul posé.
Pour ce faire, j’utilise la fabuleuse classe Beamer de LaTeX avec le non moins fabuleux package xlop.

Le code basique de mon opération avec xlop

Considérons le package xlop. Il permet d’effectuer des opérations en précision quelconque et de les présenter éventuellement sous forme posée.
Pour une opération basique posée :

\opadd{128.05}{43.1}

voici ce qui est obtenu :

PNG - 2.1 ko

On voit, hélas, tout apparaître. Nous allons décomposer l’opération en différentes étapes (comme à la main) :

Étape 1 : on enlève le résultat et la retenue

On les dessine donc en blanc (couleur de fond de page), la couleur blanche est obtenue avec le package xcolor en rajoutant la commande suivante dans notre entête de fichier LaTeX :
\newcommand{\blanc}{\textcolor{white}}
De plus, je réduis un peu la taille de la retenue.

Notre opération est donc :
\opadd[resultstyle=\blanc,carrystyle=\small\blanc]{128.05}{43.1}

PNG - 1.8 ko

Étape 2 : on ajoute les zéros inutiles

On remplace les « blancs » de l’opération par des zéros :
\opadd[resultstyle=\blanc,carrystyle=\small\blanc,deletezero=false]{128.05}{43.1}

PNG - 2 ko

Étape 3 : on met en évidence en rouge la première opération

La première est l’addition du 5 et du 0, on les colorie en rouge (couleur fabriquée de la même manière que précédemment, voir l’entête finale dans la suite) ; pour cela xlop possède une indexation par ligne et colonne des opérandes, un indice négatif corrspondant à une position derrière la virgule, un traitement identique se fera tout au long des étapes dans lesquelles les opérations effectuées seront mises en évidence alors que celles précédemment faites seront mises en noire.

\opadd[resultstyle=\blanc,carrystyle=\small\blanc,deletezero=false,%%
operandstyle.1.-2=\rouge,operandstyle.2.-2=\rouge,resultstyle.-2=\rouge]{128.05}{43.1}

PNG - 2.1 ko

Étape 4 : on efface l’opération précédente et on dessine en rouge la suivante

\opadd[resultstyle=\blanc,carrystyle=\small\blanc,deletezero=false,%%
operandstyle.1.-1=\rouge,operandstyle.2.-1=\rouge,resultstyle.-1=\rouge]{128.05}{43.1}

PNG - 1.9 ko

Étape 5 : traitement de la retenue

La retenue apparaît, on la met en plus petit et en rouge :

\opadd[resultstyle=\blanc,carrystyle=\small\rouge,deletezero=false,%%
operandstyle.1.1=\rouge,operandstyle.2.1=\rouge,resultstyle.1=\rouge]{128.05}{43.1}

PNG - 2 ko

Dernières étapes

Je vous laisse deviner la suite des événements c’est pas bien compliqué. Une fois, toutes les opérations intermédiares effectuées, il n’y plus qu’à réafficher l’ensemble, c’est-à-dire avec le résultat final.

Une présentation « à la Beamer »

Le squelette type d’un document beamer simple pour notre usage est le suivant :

\documentclass{beamer}
%% pour le français
\usepackage[frenchb]{babel}
%% pour des polices compatibles pdf
\usepackage{aeguill}
%% pour xlop et les couleurs
\usepackage{xlop}
\usepackage{xcolor}
%% définition de mes couleurs
\newcommand{\blanc}{\textcolor{white}}
\newcommand{\noir}{\textcolor{black}}
\newcommand{\rouge}{\textcolor{red}}
%% début du document
\begin{document}
%
\begin{frame}
Mon opération sera ici !
\end{frame}
%
\end{document}

Ce qui donne une fois compilé avec pdflatex la présentation suivante :

PNG - 5.9 ko

Intégration de l’opération dans Beamer

Il n’y a plus qu’à demander à Beamer de mettre sur la même page, une étape puis une autre etc. en superposant évidemment parfaitement pour éviter tout « saut » mal venu ; c’est ici qu’il faut penser à notre retenue : elle doit toujours être présente (même s’il n’est pas nécessaire de l’afficher, il faut la dessiner en blanc avec la bonne taille) pour que notre opération ne saute pas lorsqu’elle apparaît.

Beamer dispose de tout un lot de fonctionnalités d’affichage ou de non affichage sur la page ; qui plus est, il n’est pas nécessaire de connaître le numéro de notre transparent, Beamer le calcule seul. Je vais utiliser la commande \only<+>{mon operation}

\only permet d’être exclusif sur l’affichage avec le numéro de transparent qui va suivre. Ici le numéro de transparent est +, il s’agit d’une incrémentation automatique du numéro.

Voici donc à quoi ressemblera l’étape 1 :
\only<+>{\opadd[resultstyle=\blanc,carrystyle=\small\blanc]{128.05}{43.1}}

Raffinements et découverte frame par frame de l’opération

Voilà, tout est fin prêt mais...un peu petit pour une présentation.
Je vais donc imposer un [12pt] en option de la classe beamer et un \Huge pour avoir quelque chose de vraiment grand.
Nous devons alors refaire calculer les espacements par xlop et en plus j’impose un columnwidth=2ex pour encore mieux espacer. De plus vous avez sans doute noter que, par défaut, le séparateur décimal est le point alors cela nécessite un petit réglage supplémentaire, ainsi je fais finalement :

\begin{frame}[t]
 \Huge
 \opset{decimalsepsymbol={,},columnwidth=2ex,lineheight=\baselineskip}%
...

Pour conclure, je centre ce qui suit avec un environnement center

Voilà donc le code final :

\documentclass[12pt]{beamer}
\usepackage[frenchb]{babel}
\usepackage{aeguill}
\usepackage{xlop}
\usepackage{xcolor}
\newcommand{\blanc}{\textcolor{white}}
\newcommand{\noir}{\textcolor{black}}
\newcommand{\rouge}{\textcolor{red}}
\begin{document}
\begin{frame}
 \Huge
 \opset{decimalsepsymbol={,},columnwidth=2ex,lineheight=\baselineskip}%
 \begin{center}
 \only<+>{\opadd[resultstyle=\blanc,carrystyle=\small\blanc]%%
   {128.05}{43.1}}%% %%
 \only<+>{\opadd[resultstyle=\blanc,carrystyle=\small\blanc,deletezero=false]%%
   {128.05}{43.1}}%% %%
 \only<+>{\opadd[resultstyle=\blanc,carrystyle=\small\blanc,deletezero=false,%%
   operandstyle.1.-2=\rouge,operandstyle.2.-2=\rouge,resultstyle.-2=\rouge]%%
   {128.05}{43.1}}%% %%
 \only<+>{\opadd[resultstyle=\blanc,carrystyle=\small\blanc,deletezero=false,%%
   operandstyle.1.-1=\rouge,operandstyle.2.-1=\rouge,resultstyle.-1=\rouge]%%
   {128.05}{43.1}}%% %%
 \only<+>{\opadd[resultstyle=\blanc,carrystyle=\small\rouge,deletezero=false,%%
   operandstyle.1.1=\rouge,operandstyle.2.1=\rouge,resultstyle.1=\rouge]%%
   {128.05}{43.1}}%% %%
 \only<+>{\opadd[resultstyle=\blanc,carrystyle=\small\rouge,deletezero=false,%%
   operandstyle.1.2=\rouge,operandstyle.2.2=\rouge,resultstyle.2=\rouge]%%
   {128.05}{43.1}}%% %%
 \only<+>{\opadd[resultstyle=\blanc,carrystyle=\small\blanc,deletezero=false,%%
   operandstyle.1.3=\rouge,operandstyle.2.3=\rouge,resultstyle.3=\rouge]%%
   {128.05}{43.1}}%%
 %%
 \only<+>{\opadd[carrystyle=\small,deletezero=false]{128.05}{43.1}}%%
\end{center}
\end{frame}
\end{document}

Le fichier final est joint à cet article.

Quelques liens


Documents joints

PDF - 48.7 ko
PDF - 48.7 ko

Commentaires

Annonces

Annuaire LibreNord

Retrouvez l’annuaire de logiciels libres créé par l’association Club Linux Nord-Pas de Calais sur le site suivant http://www.librenord.org