jeudi 17 janvier 2013

Liste d'exercices avec LaTeX

Chaque année je remet à jours mes polycopiés des cours de mathématiques que je donne à l'IUT de Lannion. J'essaye pour chaque cours de créer des polycopiés les plus complets possibles (c'est le seul document que j'autorise au DS)  contenant théorèmes, démonstrations, méthodes et surtout quelques exercices (souvent  corrigés). Cette année j'ai décidé d'y ajouter une table des exercices, pour faciliter le travail personnel des étudiants, l'occasion de vérifier que  LaTeX est un système de création  de document infiniment supérieur à n'importe quel autre traitement de texte.



Mes exercices sont tous placés dans un environnement spécifique, qui est défini comme suit dans le fichier *.sty qui contient toutes mes macros  personnelles :

\usepackage{frcursive}
\newcounter{Ex}[section]
\renewcommand{\theEx}{\arabic{section}.\arabic{Ex}}
\newtheorem{Exem}[Ex]{\smallpencil }
\newenvironment{exem}[1]{%
\begin{Exem}{\bf #1}%
\begin{cursive}}
{\end{cursive}\end{Exem}}

il  s'utilise dans le corps du document de la manière suivante:

\begin{exem}{Titre}
texte de l'exercice ...
\end{exem}

ce qui donne dans le document final quelque-chose de la forme suivante :


(le symbole "crayon"  est généré par  la commande  \smallpencil  qui peut être obtenue via le package dingbat ).  Pour réaliser cette modification, avec n'importe quel logiciel de traitement de texte, il aurait certainement fallu, au pire,  lister un a un les exercices  pour les mettre dans une table ou, au mieux, modifier un a un les exercices pour que leur liste soit récupérable  dans une table des matières. Avec Latex il suffit de modifier légèrement la définition de l'environnement  exem pour récupérer la liste des exercices en utilisant la commande \addcontentsline  :
 
\usepackage{frcursive}
\newcounter{Ex}[section]
\renewcommand{\theEx}{\arabic{section}.\arabic{Ex}}
\newtheorem{Exem}[Ex]{\smallpencil }
\newenvironment{exem}[1]{%
\begin{Exem}{\bf #1}%
\addcontentsline{lex}{Exem}{\protect\numberline{\theEx}{#1}}%
\begin{cursive}}
{\end{cursive}\end{Exem}}

Il  reste à créer la commande  qui va afficher la liste des exercices à l'endroit souhaité :

\newcommand{\listofexercices}{%
\addcontentsline{toc}{chapter}{Liste des Exercices}%
\section*{\listexosname}\@starttoc{lex}}
\newcommand{\l@Exem}{%
\@dottedtocline{0}{0em}{2.3em}}
\newcommand{\listexosname}{\smallpencil Liste des exercices}

Maintenant il suffit d'ajouter \listofexercices là où l'on désire insérer la table des exercices pour obtenir une liste comme ci-dessous :


Vous allez me dire "c'est bien beau tout ça, mais il faut déjà un bon niveau en LaTeX pour concevoir une telle macro, et moi j'ai pas le niveau et pas le temps de chercher!" . Je vous répondrais que moi non plus j'ai pas le niveau, mais ce qu'il y a de bien avec LaTeX c'est que quand on arrive pas à le faire soit même on demande (gentiment) comment faire à ceux qui sont plus fort que vous et ils vous donneront la réponse et en plus au passage vous apprendre à comprendre un peu mieux le fonctionnement de LaTeX :-) Pour ma part je pose toujours mes questions relatives à LaTeX sur fr.comp.text.tex  et cette fois encore j'ai eu la réponse en moins d'une heure ... moins de temps que pour écrire cette liste d'exercices à la main , et moins que le temps nécessaire pour trouver comment faire ça avec Word, OpenOffice, et autre traitement de texte Wysiwyg!

3 commentaires:

  1. Chouette package (frcursive), merci pour le tuyau.

    RépondreSupprimer
  2. frcursive c'est pour suggérer aux étudiants qu'ils devraient écrire comme ça quand ils rédigent ... efficacité limité, mais au moins c'est joli :-) Il y a aussi chalkduster qui imite l'écriture "à la craie" et affecte l'écriture en mode math, mais je préfère frcursive qui est plus aérée.

    RépondreSupprimer
  3. Je vais essayer la craie aussi alors (mais c'est un package juste pour le fun je suppose).

    RépondreSupprimer

Pour écrire des formules mathématiques vous pouvez utiliser la syntaxe latex en mettant vos formules entre des "dollars" $ \$....\$ $ par exemple :
- $\sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}$ s'obtient avec \sum_{n=1}^\infty {1\over n^2}={\pi^2\over 6}
- $\mathbb R$ s'obtient avec {\mathbb R} et $\mathcal D$ s'obtient avec {\mathcal D}
- pour les crochets $\langle .,. \rangle$ dans les commentaires utilisez \langle .,. \rangle
vous pouvez écrire du html dans les commentaires :
- italique <i> ... </i> gras <b> ... </b>
- lien <a href="http://adresse "> .... </a>