pfgiac est un script PERL qui s'exécute sous LINUX. Il produit des figures au format MetaPost, figures calculées par GIAC/XCAS.
Version actuelle : 1.0 (6 juillet 2011) - pfgiac.tar.gz
Ce script est en cours de développement, il est fourni sans garantie de bon fonctionnement. La documentation est très certainement imprécise, n'hésitez pas à me pour me signaler un bug ou obtenir des compléments d'informations, j'en profiterai pour affiner la documentation.
C'est d'aller vite dans le calcul de certaines figures de géométrie plane... La syntaxe et les possibilités de Giac/Xcas permettent cela : il suffit d'écrire, à la suite, les instructions définissant les objets de l'historique de la figure. Ensuite, les éléments étant récupérés, il ne reste plus qu'à utiliser MetaPost pour construire la figure. L'élaboration d'une figure est ainsi décomposée en deux phases bien séparées : le calcul des éléments par giac et leur représentation par MetaPost.
Dans l'archive vous trouverez le script pfgiac à placer dans un répertoire accessible par la variable PATH
de votre shell ainsi que le fichier svgnames.mp à placer dans votre répertoire texmf
préféré (ou à laisser dans votre répertoire de travail).
Pour s'exécuter pfgiac à besoin des modules PERL suivants:
Math::Complex
(pour les conversions des complexes en couples de coordonnées).YAML::Tiny
(pour l'enregistrement d'une session en vue de réutilisations futures).Ces modules sont disponibles dans les dépôts de toutes les distributions, sinon ils sont, bien sûr, dans CPAN.
Si vous souhaitez construire des animations le programme pdftk sera nécessaire, lui aussi se trouve dans les dépôts de toutes les bonnes distributions.
Des exemples sont présentés dans la base MetaPost, quelques sources sont dans l'archive.1 Comme vous le constaterez, pfgiac utilise des fichiers texte d'un genre un peu particulier...
Il fallait leur donner un nom... Ce sont des fichiers sectionnés par des chaînes de la forme %@XXXX:
en tête de ligne. À la lecture, ces éléments sont interprétés de la façon suivante:
%@XXXX:
n'est suivie d'aucun caractère, le script considère qu'il s'agit du début d'un bloc dont la portée va jusqu'au prochain bloc ou la fin du fichier.%@XXXX:
est suivie de caractères, le script considère qu'il s'agit d'un paramètre et affecte ce qui termine la ligne (vidé des blancs initiaux et finaux) à la clé XXXX
.pfgiac ne prend en compte que les blocs GIAC
, STYLE
, MP
et le paramètre ANIMATION
d'un fichier Wanda, tout le reste est ignoré, mais peut servir à autre chose, dans un autre contexte...
Une fois les fichiers installés, il est temps d'essayer...
$> pfgiac napoleon.w
Dans le répertoire de travail vous trouverez alors un certain nombre de fichiers :
napoleon.tg
: la séquence de commande envoyée à giac,nappoleon.fg
: tout ce qui est retourné par giac sur la sortie standard et sur celle d'erreur,napoleon.yml
: tout ce qui a été compris par pfgiac au format YAML,2napoleon.mp
: le code source de la figure au format MetaPost,napoleon.pdf
: la figure au format PDF.Les deux premiers fichiers seront effacés et le troisième ne sera pas créé en fixant l'option -clean
.
$> pfgiac -clean napoleon.w
La compilation du fichier metapost n'aura pas lieu si vous fixez l'option -nopdf
.
$> pfgiac -nopdf napoleon.w
Le contenu d'un bloc GIAC est exécuté, en l'état, par... giac, sa syntaxe est donc celle de xcas. Après exécution pfgiac va en scanner la sortie pour identifier les objets graphiques.
Dans ce bloc sont définies toutes les options destinées à préciser le mode de représentation des objets capturés par pfgiac. Ce bloc est lu ligne par ligne. Une ligne est significative si elle commence par la séquence global:
ou par le nom d'un objet ou une séquence de noms séparés par une virgule suivi de deux points (:
). À la suite, les options sont présentées sous la forme clé=valeur
séparées par des espaces (mais sans espaces intérieurs).
Il sert à définir des options globales ou des options par défaut.
L'unité par défaut est 1cm, vous pouvez le modifier:
global: unite=1.5cm
Par défaut la figure est construite dans un cadre [-10,-10,10,10]3 dans l'unité choisie; c'est utile pour la représentation des droites, elles sont coupées sur les bordures du cadre. Pour modifier les dimensions du cadre:
global: cadre=[-4,-2,3,5]
Une grille de pas 1 unité est tracée par défaut sur le cadre (pour permettre des ajustements), vous pouvez la désactiver:
global: grille=0
L'usage des blocs MP est peu développé encore, l'objectif est d'ajouter la possibilité d'insérer des instructions MetaPost de façon à enrichir la figure.
Sa présence provoque la construction d'une animation, sa valeur spécifie la boucle de construction des images.
Par exemple, la mention suivante :
%@ANIMATION:x,0,10,2
provoquera la contruction de 10 images au format PDF obtenues en remplaçant la chaîne $!x!
dans le bloc GIAC par 10 valeurs uniformément réparties entre 0 et 2.
Les images PDF sont alors concaténées en un seul fichier PDF à l'aide de pdftk. Vous pourrez alors visualiser l'animation en faisant défiler les pages; le fichier PDF obtenu étant assez lourd, un moyen d'alléger la chose est de le convertir dans le format SWF à l'aide de pdf2swf.
Voir le code source des animations suivantes:
La plupart de ces premiers exemples sont extraits de la documentation de XCAS↩
Ce fichier est destiné à être exploité lors de réutilisations futures (non encore implémenté), pour l'instant il me sert beaucoup pour le débogage.↩
Les deux premiers nombres correspondent au coin inférieur gauche, les deux derniers au coin supérieur droit.↩