Tableau de variation d'une fonction
J'ai écris un petit programme en Perl permettant de tracer
le tableau de variation d'une fonction, comme ci-dessus, en LaTeX.
Il faut plus le voir comme un exercice de programmation que comme
un programme vraiment utile, mais je veux bien croire qu'il puisse rendre des
services à certains.
0. Copyright
(S'il n'y en a pas, prendre celui du GNU.)
1. Installation
Il faut trois choses (en plus de LaTeX) :
- Perl
- Le module Tk pour Perl. Vous pouvez l'installer en tapant simplement
perl -MCPAN -e 'install Tk'
- Le programme lui-même.
Vous pouvez le télécharger ici.
http://zoonek.free.fr/LaTeX/Tableau_de_variations_0.07.tar.gz
Pour l'installer, il suffit de taper
tar zxvf Tableau_0.06.tar.gz
cd Tableau_0.06/
make install
Si vous voulez l'installer dans un endroit non standard,
par exemple $HOME/gnu
, il suffit de
le préciser :
make PREFIX=$HOME/gnu install
Vous pouvez avoir une version francisée en tapant
make LANG=fr install
Le programme se lance alors en tapant
Tableau &
2. Exemple commenté
Nous voulons réaliser le tableau de la fonction
f(x) = x^2.
- Lançons le programme
Tableau &
Cliquons sur « Line »
Traçons deux traits verticaux et un trait horizontal, comme sur la figure suivante.
Si vous ne savez plus sur quel bouton il faut cliquer, il suffit de regarder en
bas à droite de l'écran, on y rappelle la fonction des trois touches de la souris.
- Cliquons maintenant sur « centered text » et rajoutons le texte comme
sur la figure suivante.
Le texte est tapé directement au format LaTeX,
des choses arbitrairement compliquées, qui seront par défaut en mode
mathématique, comme dans l'exemple suivant.
- Comme vous l'avez remarqué, le texte est positionné exactement
sur les sommets de la grille : il est donc ainsi plus facile de faire
un dessin précis. Cela pose néanmoins un problème : le texte est trop éloigné
des lignes verticales. Le résultat pourrait d'ailleurs être encore pire
comme dans l'exemple suivant.
Pour y remédier, il suffit de placer le texte exactement sur la ligne verticale,
non pas en mode « centered text » mais en mode « left text » ou
« right text » selon le côté désiré.
Faisons-le sur notre exemple. (Il faut préalablement effacer le texte que
l'on avait tapé : pour cela, cliquez sur « delete » et sélectionnez ce
que vous voulez effacer.)
- Rajoutons une ligne pour la dérivée.
- Nous voulons maintenant terminer notre dessin et obtenir la figure suivante.
Mais nous n'avons pas laissé suffisemment de placer pour mettre
le reste !
Il est heureusement possible de rajouter (ou d'effacer)
des lignes (ou des colonnes). Pour cela, cliquons sur « add row »
puis cliquons à l'endroit où nous voulons rajouter une ligne (plusieures fois).
Nous pouvons alors achever le dessin.
- Sauvegardons notre oeuvre en cliquant sur « save » (ou « save as »)
dans le menu « file » et appelons-la « essai.tex ».
On peut enfin quitter le logiciel, en cliquant sur « quit » dans le menu « file ».
- Nous pouvons finalement l'inclure dans un fichier LaTeX, par exemple
de la manière suivante. Il faut charger l'extension « Xy-Pic ».
\documentclass[a4paper,12pt]{article}
\usepackage[latin1]{inputenc} % Cette ligne dit que je suis sur une machine UNIX
\usepackage[T1]{fontenc}
\usepackage{amsmath,amsfonts}
\usepackage[french]{babel}
\usersfrenchoptions{\overfullhboxmark}
\usepackage[all,dvips]{xy} % Cette ligne dit que j'utilise dvips
\newcommand{\RR}{\mathbb{R}}
\begin{document}
La fonction définie sur $\RR$ par
$f(x) = x^2$ est dérivable, de dérivée
$$ f'(x) = 2 x. $$
D'après le signe de la dérivée,
on déduit le sens de variation de la fonction,
comme résumé par le tableau suivant.
$$ \input{essai.tex} $$
\end{document}
- Vous devez désormais être capable de reproduire l'exemple
qui apparait tout en haut de cette page.
3. Détails supplémentaires
À écrire. (Il n'y a pas grand-chose d'autre.)
Les boites de dialogue disparaissent toutes seules.
Liste des menus.
Menu file : load, new, save as, save, quit.
Menu Help : info, help
Liste des fonctions.
Texte. Position (intersections, g/d), patience.
Flèches. Extrémité en cas d'ambiguité (ne s'affiche pas : l'un des défauts du logiciel).
lignes, lignes doubles.
ajout de ligne/colonne.
delete (pas de fonction undo : c'est l'un des gros défauts du logiciel).
La barre d'état.
Le mode courrant.
la fonction des touches de la souris dans ce mode.
Le nom du fichier courrant (dans la barre de titre rajoutées par le WM).
Les captures d'écran correspondent à la version 0.06.
4. Format du fichier
Le fichier utilisé est un fichier LaTeX tout à fait valable.
Il contient d'une part la description du dessin, sous une forme compréhensible
par le programme, dans des lignes qui pour LaTeX sont des commentaires.
Si on enlève le caractère « % » en début de ligne, c'est du code Perl tout à fait normal.
(En particulier, si vous voulez écrire vous-même un fichier dans ce format,
vous pouvez utiliser toute la puissance du langage : boucles, fonctions, etc. ; en
faisant lire un tel fichier par le programme et en le sauvant, vous obtiendrez
un code LaTeX correspondant. Cela dit, je ne vois pas pourquoi on voudrait faire une
telle chose...)
% Text->new(7,6,"1","center");
% Arrow->new(1,5,3,8);
% Text->new(1,6,"f","e");
% Text->new(8,3,"-","center");
% Text->new(3,5,"+\\infty","w");
...
Vient ensuite le code LaTeX générant la figure, grace à Xy-Pic.
Il est normal que ce soit illisible : ce n'est pas fait pour être lu.
\xy <0pt,0pt>;<1cm,0cm>:<0cm,-.5cm>::
(2,2) *+!L{\ -\infty}!C="11",
(6,6) *+!R{+\infty\ }!C="23",
(4,4) *+{0}="14",
(4,8) *+{0}="24",
(3,4) *+{-}="15",
(2,6) *+!L{\ +\infty}!C="25",
(5,4) *+{+}="16",
(4,2) *+{0}="7",
(2,2) *+!R{x\ }!C="17",
(2,4) *+!R{f'\ }!C="18",
(6,2) *+!R{+\infty\ }!C="9",
(2,7) *+!R{f\ }!C="19",
\ar@{-}(2,1);(2,9)
\ar@{-}(1,3);(6,3)
\ar@{-}(1,5);(6,5)
\ar@{-}(6,1);(6,9)
\ar@{-}(4,3);(4,5)
\ar "25";"24"
\ar "24";"23"
\endxy
5. Configuration
Il est possible de configurer le programme, à l'aide d'un
fichier ~/.tableaurc
, contenant du code Perl. Voici quelques exemples de
ce que l'on peut y mettre.
- Pour charger certaines de vos macros
$g_latex_preamble = '
\documentclass{minimal}
\usepackage{mymacros}
\usepackage{amsmath,amsfonts}
\begin{document}
$$
';
$g_latex_postamble = '$$\end{document}';
- Pour changer le fichier LaTeX créé à la fin : on peut par exemple vouloir
que le fichier puisse être lu tout seul, et non pas inclus dans un document
plus gros
$g_latex_final_preamble = '
\documentclass{minimal}
\usepackage{amsmath,amsfonts}
\usepackage[all,dvips]{xy}
\pagestyle{empty}
\begin{document}
' ;
$g_latex_final_postamble = '
\end{document}
';
- Pour changer les couleurs.
$w_top->setPalette( background => 'yellow' );
(C'est bien « background » et pas « -background ».)
Seule la couleur de fond est nécessaire, les autres seront des couleurs
par défaut ou se déduiront de celles qui ont été données.
Pour plus de détails, voir le fichier
Tk/Widget.pm
du module Tk.
- Il n'est probablement pas impossible de changer les fontes.
Si aucun widget (sauf le MainWindow) n'était
déjà défini, il suffirait de dire
$w_top->optionAdd('*font' => '-b&h-lucidabright-demibold-i-normal--0-0-100-100-p-0-iso8859-1');
Mais comme ils sont déjà (presque) tous là, c'est un peu plus compliqué.
On peut essayer
sub change_font {
my $w = shift;
$w->optionAdd('*font' =>
'-b&h-lucida-bold-r-normal-sans-0-0-100-100-p-0-iso8859-1');
$w->configure(-font =>
'-b&h-lucida-bold-r-normal-sans-0-0-100-100-p-0-iso8859-1');
foreach ($w->children){ change_font($_) }
}
change_font($w_top);
- Pour changer la taille de la zône de dessin
$w_canvas->configure( -height => 300, -width => 400);
- Pour changer la précision de la souris dans la zône de dessin.
$w_canvas->configure(-closeenough => 10);
- Pour changer le pas de la grille
$g_grid_x = 60;
$g_grid_y = 30;
- Pour rajouter des raccourcis-clavier
$w_top->bind("<Control-q>", \&file_quit);
$w_top->bind("<Control-s>", \&file_save);
$w_top->bind("<Control-l>", \&file_load);
Vous pouvez d'ailleurs créer vos propres fonctions.
sub file_save_and_quit { file_save(); file_quit(); }
$w_top->bind("<Control-x>", \&file_save_and_quit);
Pour plus de détails sur ce genre de choses, voir la documentation de Tk.
- Pour rajouter des entrées dans les menus.
sub file_toto { print STDERR "Toto\n"; }
menu_entry_set($w_file, "Toto", \&file_toto);
- Pour rajouter un menu
my $w_games = $w_menubar->Menubutton(-text => 'Games', -underline => 0);
menu_entry_set($w_games, "Quake2", sub{system "quake2"} );
$w_games->pack;
- Il n'est pas vraiment prévu de pouvoir retirer une entrée dans un menu.
- Pour changer certaines fonctions (lesquelles pourrait-on vouloir changer ?)
(Ça ne marche pas très bien.)
sub file_save { print STDERR "Operation prohibited!\n"; }
- Il n'est pas prévu de pouvoir changer la langue à l'exécution
(juste lors de l'installation).
6. Notes sur l'implémentation
...
Vincent Zoonekynd <zoonek@math.jussieu.fr>
Last modified: Tue Jun 1 12:37:29 MET DST 1999