Tu possèdes une séries de données stockées dans un tableur et tu as besoin de les afficher dans un tableau sous ConTeXt. Au lieu de remplir ton tableau à l'aide de copier-coller, voici une méthode pour automatiser la chose.
Pour ce faire nous allons utiliser lua qui est un langage de script, facilement intégrable dans ConTeXt.
Pour cette fiche nous avons besoin d'un fichier texte contenant nos données. Tu trouveras dans cette fiche comment transférer dans un fichier texte des données issues d'un tableur. Nous allons utiliser un fichier contenant les consommations de bières des participants du Grand Concours de Buveur de Bière de Knokke-Le-Zoute. Les concurrents pour faire passer la bière avaient le droit d’ingurgiter des moules et des frites, valeurs qui sont également notées dans le fichier :
Les données sont séparées par des points-virgules ; le fichiers se nomme concours.txt
Pour intégrer du code lua dans un fichier ConTeXt, il faut l'encadrer par
La première chose à faire est de lire notre fichier concourt.txt
. Ceci ce fait par la commande lua
Le "r" signifie read (lire). Tu remplaces nom du fichier par le chemin complet si le fichier est dans un autre répertoire que celui de ton fichier ConTeXt, par exemple :
N'oublie pas les "
Il faut placer le fichier lu dans une variable que l'on va appeler fr
(pour fichier), tu mets le nom que tu veux.
Maintenant il nous faut faire deux chose :
Le lecture ligne par ligne se fait par :
Les . . . sont à remplacer par des commandes à exécuter pour chaque ligne.
Pour découper nos lignes nous utilisons la fonction :
Le c
est une variable, moi j'ai choisi c pour cellule, mais tu mets ce que tu veux (m pour mot, par exemple). string.gmatch
est la fonction de découpage. Le "%P+"
est un motif (pattern en anglais et en langage informatique) qui permet de découper la ligne à chaque Ponctuation.
Attention si des éléments de ton tableau contiennent des signes de ponctuation comme des chiffres décimaux cette méthode ne va pas marcher, il faudra employer un autre pattern.
Les . . . sont à remplacer par des commandes à exécuter pour chaque cellule.
Bien nous avons toutes les commandes lua nécessaires, il ne reste plus qu'a construire le tableau. Je te renvoie à la fiche ConTeXt et les tableaux qui te donnera tous les détails sur la fabrication des tableaux sous ConTeXt. Pour rappel
Donc le code suivant :
donne
Pour intégrer un environnement ConTeXt dans du code lua il faut le précéder de context. et suivre de ( ) vides. Donc les premières lignes d'un tableau :
Le même principe s'applique à tous les environnements, par exemple les listes :
Pour les autres commandes ou pour écrire dans le document final à partir d'une section de code lua il faut employer context()
:
produit :
En lua toute chaine de caractère doit être encadrée de " ". Le signe = attibue une valeur à une variable comme dans g="Ginette …"
. Si tu veux placer une commande ConTeXt dans une chaine de caractère tu dois la précéder de \, tu as donc 2 \\ comme pour crlf
qui permet de changer de paragraphe. crlf
n'est pas une variable donc doit être encadrée de " ".
Une petite remarque avant de poursuivre : en lua les commentaires débute avec --
et pas % qui provoquera des erreurs.
Passer une option à une commande ConTeXt est un peu subtil. Par exemple pour passer l'option 2 à \startitemize qui permet d'avoir les – français au lieu des • anglais il faut mettre le 2 dans les () en l'encadrand de {}, comme ceci
Si tu veux une liste numérotée, option n, comme ce n'est ni une variable ni un chiffre il faut en plus l'encadrée de " "
Pour des options du type clé=valeur, tu dois également des encadrer de {}, clé étant une variable, pas de "", mais valeur qui n'en est pas une en a besoin. Voici par exemple comment indiquer à un tableau de s'étaler sur plusieurs page s'il est trop grand :
Avec ConTeXt il est toujours possible de programmer l'aspect des divers éléments dans l'entête, donc tu ne devrais pas avoir besoin de jongler de cette façon.
On a tous les éléments pour fabriquer notre tableau. Le début du code :
On a chargé notre fichier concours.txt
dans la variable fr
Maintenant on ouvre notre tableau :
À chaque foi que l'on lit une ligne de notre fichier on crée un nouvelle ligne dans notre tableau :
On sépare chaque élément de la ligne et on rempli une cellule du tableau
On referme la ligne du tableau
On ferme le tableau
et l'on obtient le code complet qui donne après compilation :
Que l'on peut améliorer facilement par :
voire la fiche ConTeXt et les tableaux pour les explications.
Si ton tableau risque de s'étaler sur plusieurs pages tu ajoutes un :
Pour utiliser des ponctuations dans les données il faut utiliser un autre séparateur de champ. Lorsque tu transformes les données d'un tableur à un fichier texte tu choisis la tabulation comme séparateur de champ. Tu obtiens un fichiers du type :
Pour les tabulations le motif est "%C+"
. Donc avec le même code que ci-dessus en remplaçant
par
Tu obtiens :
Ce qui n'est pas terrible car il manque la première cellule vide sur la première ligne. En effet lors de la sauvegarde en fichier texte le tableur n'a pas ajouté de blanc pour indiquer une cellule vide. Il faut le rajouter à la main (indiqué par un _ dans l'exemple ci-dessous (tu ne mets pas _ dans ton texte, c'est juste pour que tu voies bien l'espace ajouté) :
Maintenant tu obtiens bien le résultat désiré :
Un autre pattern peut être utile est celui discriminant les espaces qui est "%S+", que l'on ne peut utiliser dans l'exemple ci-dessus car il ne permet pas de créer la première cellule vide.