Ma question s'adresse à GM.
Comme vous le savez depuis l'autre jour, je réutilise un de vos codes en tâtonnant afin d'"automatiser" la création d'un tableau, simple pour l'instant.
Cependant, la taille de mes étiquettes n'est pas bonne et je ne vois pas comment y remédier.
Y a quelque chose qui me dit que ça doit venir du calcul de mon "larg" et de ma "haut"...
Code : Tout sélectionner
unitsize(1cm);
//<-------- Début de la picture tabsgn ----------------------------------->
picture tabsgn(string[][] tab, real ul=1, real kx=1.1, real ky=1.2 ,
pen p=0.5bp+black){
picture pic;
real larg,haut,xlarg, xhaut, ul=1, kx=1.1, ky=1.2 ;
pen stylo1=fontsize(ul*10pt)+black,
stylo2=fontsize(ul*10pt)+red;
int n=tab.length, // nb de lignes
m=tab[0].length; // Nb de colonnes
object[][] obj=new object[n][m]; //Tableau d'objet de taille nxm
//Une boucle qui détermine la largeur et la hauteur maximales des formules à
//écrire
for(int k=0; k<n; ++k){
for(int l=0; l<m; ++l){
obj[k][l]=object(Label(tab[k][l],stylo1));//création d'un objet
//(texte entouré d'une
//enveloppe de forme
//rectangulaire) qui a une
//largeur et une hauteur
larg=max(larg,(max(obj[k][l])-min(obj[k][l])).x);//les coordonnées x et
// y d'un vecteur
//"diagonale" qui est
//(max(obj[k])-min(obj[k])
haut=max(haut,(max(obj[k][l])-min(obj[k][l])).y);
}
}
//Fin de la boucle
//label(format("haut=%f",haut),(2,-1));
// label(format("larg=%f",larg),(2,-1.5));
//label(format("Nb ligne tableau=%i",n),(2,-1));
//label(format("Nb colonne tableau=%i",m),(2,-1.5));
//------------------------------------------------------------------------>
//------------------------------------------------------------------------>
path th=(0,0)--(m*larg,0), // premier trait horizontal
tv=(0,0)--(0,n*haut); // premier trait vertical
//<--------- Tracer des colonnes 1,2,3,4 ... --------------------->
for(int i=0; i<=m; i=i+1){
draw(shift((larg,0))^i*tv,10bp+black);
}
//<--------- Fin Tracer des colonnes 1,2,3,4 ... ------------------>
//<--------- Tracer des lignes 1,2,3,4 ... ----------------------->
for(int j=0; j<n+1; j=j+1){
draw(shift((0,haut))^j*th,10bp+black);
}
//<--------- Fin Tracer des lignes 1,2,3,4 ... -------------------->
//--------------------------------------------------------------------->
//--------------------------------------------------------------------->
//<-----placement des objets---------------------------->
for(int k=0; k<n; ++k){
for(int l=0; l<m; ++l){
label(pic,Label(tab[k][l],((2*l+1)/2*larg,(2*k+1)/2*haut),p));
}
}
//<------ Fin placement des objets -------------------->
return pic;
}
//<-------- Fin de la picture tabsgn ----------------------------------->
//<----- On entre les valeurs du tableau -------------------------------->
string[][] tab={
{"00","01","02","03","04"},
{"10","11","12","13","Eric"},
{"20","21","22","23",""},
{"30","31","32","","$f(x)$"}
};
//<----- Fin entrée des valeurs du tableau ------------------------------>
//<---- Afficher le tableau ------------------------------------->
picture tab0=tabsgn(tab,ul=1,kx=1.2,ky=1.2,p=1bp+blue);
add(tab0);
//<---- Fin Affichage du tableau --------------------------------->