====== PTab ======
Ce petit script perl permet de générer le code LaTeX d'un tableau de valeurs d'un fichier dat, txt...
===== Utilisation =====
Supposons qu'on veuille créer un tableau avec les valeurs d'un fichier externe ''val.txt''.
Alors dans notre document LaTeX ''monfichier.tex'', on insert la ligne suivante :
.t /mon/chemin/val.txt
On execute alors ''ptab'' :
ptab monfichier.tex
===== Fonctionnement =====
Lors de l'utilisation de ptab, il se crée un fichier val.tex contenant le code tex du tableau uniquement, puis dans le fichier //maître// tex, les lignes de //commandes// sont commentées et une ligne d'inclusion ''\include{val}'' est rajoutée.
La notation //acceptée// des nombres est celle qu'accepte perl (la notation avec E pour les puissances de 10 est correctement traitée).
===== Exemple =====
On a le fichier de valeurs ''dat.dat'' suivant :
1.001 2 3.7 4.34 5.0 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
et le fichier ''test.tex'' suivant :
\documentclass[a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{amsmath}
\begin{document}
Du text qui se répète... Du text qui se répète... Du text qui se
répète... Du text qui se répète... Du text qui se répète... Du text
qui se répète... Du text qui se répète... Du text qui se répète... Du
text qui se répète...
\section{Une section}
.pt formatage 2
.t /fichiers/programation/perl/dat.dat
\end{document}
On execute ptab :
$> ptab test.tex
Alors le fichier ''dat.tex'' est créé au //niveau// de ''test.tex'' :
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
\hline
1.00&2.00&3.70&4.34&5.00&6.00&7.00&8.00&9.00&10.00\\\hline
11.00&12.00&13.00&14.00&15.00&16.00&17.00&18.00&19.00&20.00\\\hline
21.00&22.00&23.00&24.00&25.00&26.00&27.00&28.00&29.00&30.00\\\hline
\end{tabular}
et le fichier ''test.tex'' est devenu :
\documentclass[a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{amsmath}
\begin{document}
Du text qui se répète... Du text qui se répète... Du text qui se
répète... Du text qui se répète... Du text qui se répète... Du text
qui se répète... Du text qui se répète... Du text qui se répète... Du
text qui se répète...
\section{Une section}
%@patb .pt formatage 2
%@ptab .t /fichiers/programation/perl/dat.dat
\include{dat}
\end{document}
Il reste alors à faire une compilation LaTeX !
===== Options =====
De manière générale, pour définir des //paramètres// on utilise la ligne suivante dans le document LaTeX :
.pt
La définition des paramètres n'est pas valable pour le document entier, elle n'est valable que //jusqu'à// une prochaine définition de paramètres. Par exemple, on peut très bien faire :
//code latex//
.pt math ( )
.t /mon/chemin/dat1.dat
//code latex//
.pt tableau
.t /mon/chemin/dat2.dat
//code latex//
==== Modes ====
Il existe deux modes, tableau classique avec l'environnement ''tabular'', et tableau //mathématiques// avec l'environnement ''array''.
Le mode classique est le mode par défaut, il n'y a pas d'option particulière...
**Remarque** Pour revenir en mode tableau, on utilise la commande :
.pt tableau
=== Mode math ===
Pour se mettre en mode math :
//code latex//
.pt math ( )
.t /mon/chemin/val.txt
//code latex//
== Parenthèses -- Crochets ==
On règle, en plus de passé en mode math, les délimiteurs. Ceci se fait après l'indication ''math'' en rentrant le délimiteur gauche et le droit séparés par **un espace**. Ci-dessus, on a choisi les parenthèses, on obtiendra donc une matrice avec parenthèse.
==== Formatage ====
Cette option permet de formater l'affichage des décimales des valeurs dans le tableau.
Par exemple :
//code latex//
.pt formatage 3
.pt math [ ]
.t /mon/chemin/val.txt
//code latex//
permet d'afficher les nombres avec trois chiffres après la virgule.
===== code =====
Téléchargement : {{:mc:ptab.zip|}}
#!/usr/bin/perl
# -----------------------------------------------------------------------------
# PTAB 05/11/08
# Maxime Chupin
# -----------------------------------------------------------------------------
# version 1.0
use Cwd;
# récupération du chemin d'exécution ------------------------------------------
my $chemin = cwd();
#------------------------------------------------------------------------------
# nom du fichier de travail ---------------------------------------------------
($nomw =$ARGV[0]) =~ s/.tex/.w/;
#------------------------------------------------------------------------------
# paramètres par défaut -------------------------------------------------------
$type="tabular";
$deliml="";
$delimr="";
$inter="|";
$separvert="\\hline";
$formatdec = 2;
#------------------------------------------------------------------------------
# lecture du fichier de travail .w --------------------------------------------
open(WORK,,"$chemin/$ARGV[0]") or die "Impossible d'ouvrir $ARGV[0]"; #on ouvre le fichier tex original contenant les commandes ptab
open(WTEX, ">$chemin/$nomw"); # ouverture en ecriture d'un fichier .w (de travail)
while (){ #pour chaque ligne du document original
@ligne = split; # on séparer chaque mots de chaque ligne
if($ligne[0] eq ".pt"){ # on lit le paramétrage
if($ligne[1] eq "math"){ # si math
$type="array";
$deliml="\\[\\left$ligne[2]";
$delimr="\\right$ligne[3]\\]";
$inter="";
$separvert="";
}
if($ligne[1] eq "tableau"){ # si tableau
$type="tabular";
$deliml="";
$delimr="";
$inter="|";
$separvert="\\hline";
}
if($ligne[1] eq "formatage"){
$formatdec = $ligne[2];
}
print(WTEX "%\@patb $_"); # on laisse une trace de la commande de paramerage dans le document final
}
elsif($ligne[0] eq ".t"){ # la command ptab .t
$toutligne = $_;
@chemindat = split('/', $ligne[1]);
$fichierdat = $chemindat[-1]; #on recupere le nom complet du fichier dat, txt...
@tabpref = split('\.', $chemindat[-1]);
$prefixe = $tabpref[0]; #on recupere le prefixe
open(DAT, "$ligne[1]") or die "Impossible d'ouvrir $ligne[1]"; #on ouvre ce fichier
open(DATTEX, ">$chemin/$prefixe\.tex"); # on cree un fichier $prefixe.tex dans lequel il y aura le tableau en latex
$taille = split ' ', ; #on recupere le nombre de colonne
close(DAT);
open(DAT, "$ligne[1]");
for($i=1;$i<=$taille;$i++){$c.="c$inter";} #on concatene des c autant que de colonne
print(DATTEX "$deliml\\begin\{$type\}\{$inter$c\}\n$separvert\n"); # on commence notre tableau (ca depend des options)
while(){
@lignedat= split;
$tail= @lignedat;
for($i=0;$i<$tail;$i++){
$format = sprintf("%.${formatdec}f",$lignedat[$i]); # on format les nombres apres la virgule
print(DATTEX "$format");
if($i!=($tail-1)){
print(DATTEX '&');
}
}
print(DATTEX "\\\\$separvert\n");
}
print(DATTEX "\\end\{$type\}$delimr\n"); #on ferme le tableau
close(DAT);
print(WTEX "%\@ptab $toutligne \n"); # on commente la ligne ou se trouve l'instruction .t
print(WTEX "\\include{$prefixe}\n"); # et on inclut le fichier creer tex
}
else{
print(WTEX $_); # sinon on recopie normalement le fichier dans lui meme...
}
}
close(WTEX);
close(WORK);
rename($nomw, "$ARGV[0]");