Aligner du texte mathématique

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Aligner du texte mathématique

Messagepar Romain Janvier » Jeudi 13 Janvier 2011, 14:28

Bonjour,

En bidouillant un peu mon fichier sur les tableaux de proportionnalité pour afficher des égalité de fractions en mettant des fleches entre les dénominteurs et les numérateurs avec les simplications effectuées (par exemple ":3"), je me suis rendu compte que je n'arrivais pas à aligner correctement les fractions si elles n'avait pas la meme taille. Pour pouvoir mettre les fleches, j'utilise une picture, mais après lorsque je fais "add", ca foire un peu.

Code: Tout sélectionner
unitsize(1cm);
texpreamble("\newcommand{\dfrac}[2]{\displaystyle\frac{#1}{#2}}");

string s1="$\dfrac{4}{5}$";
string s2="$\dfrac{\ldots}{15}$";

pair[] calc(object o)
{
   pair[] rep;
   picture tmp;
   add(tmp,o);
   rep.push(size(tmp)/1cm);
   rep.push(min(tmp)/1cm);
   rep.push(max(tmp)/1cm);
   return rep;
}

object o1=Label(s1,(0,0),Align,basealign);
object o2=Label(s2,(0,0),Align,basealign);

pair[] rep1=calc(o1);
pair[] rep2=calc(o2);

label(s1,(0,0),Align,basealign);
label(s2,(1,0),Align,basealign);

//write(rep1);
//write(rep2);
add(o1,(2,0));
draw(shift((2,0))*box(rep1[1],rep1[2]));

add(o2,(3,0));
draw(shift((3,0))*box(rep2[1],rep2[2]));
dot((2,0));
dot((3,0));


object o3=Label(s1,(0,0),basealign);
object o4=Label(s2,(0,0),basealign);

pair[] rep3=calc(o3);
pair[] rep4=calc(o4);

label(s1,(0,-1),basealign);
label(s2,(1,-1),basealign);

//write(rep3);
//write(rep4);
add(o3,(2,-1));
draw(shift((2,-1))*box(rep3[1],rep3[2]));

add(o4,(3,-1));
draw(shift((3,-1))*box(rep4[1],rep4[2]));
dot((2,-1));
dot((3,-1));

test.png
test.png (4.7 Kio) Vu 1114 fois

Si j'utilise Align, les fractions sont bien alignées, mais elles ne sont pas centrées horizontalement autour du point de départ. Si je l'enlève, elle sont bien centrées, mais pas alignées verticalement.

Comment faire pour qu'elles soient centrées horizontalement et alignées verticalement ? Je n'ai pas encore testé, mais est-ce qu'il faut soustraire la largeur divisée par 2 et rajouter labelmargin ou un truc comme cela ?
Romain Janvier
Kilo-utilisateur
 
Messages: 146
Inscription: Lundi 23 Août 2010, 13:57
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Aligner du texte mathematique

Messagepar GMaths » Jeudi 13 Janvier 2011, 16:14

Je n'ai peut-être pas compris ce que tu veux mais le point me semble bien placé.

Voilà ce que l'on obtient en compilant un tex :

Image
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar Romain Janvier » Jeudi 13 Janvier 2011, 17:37

Mon probleme, c'est que je veux decouper les expressions en morceaux, du genre "4/5" "=" ".../15" pour pouvoir calculer les dimensions des fractions et ensuite les relier avec des fleches. Le probleme c'est pour les placer ensuite. Mon probleme c'est que je n'arrivais pas à les aligner comme je voulais, mais je crois que j'ai trouvé. Ca m'aidera aussi à ameliorer mon fichier pour les tableaux de proportionnalité.
Romain Janvier
Kilo-utilisateur
 
Messages: 146
Inscription: Lundi 23 Août 2010, 13:57
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar GMaths » Jeudi 13 Janvier 2011, 19:40

Romain Janvier a écrit:Mon probleme, c'est que je veux decouper les expressions en morceaux, du genre "4/5" "=" ".../15" pour pouvoir calculer les dimensions des fractions et ensuite les relier avec des fleches. Le probleme c'est pour les placer ensuite. Mon probleme c'est que je n'arrivais pas à les aligner comme je voulais

Pourtant, dans ton premier cas, les deux points sont sur la ligne jaune (de ma figure) donc il semble bien que tes deux labels séparés se soient placés correctement l'un vis à vis de l'autre et vis à vis des points matérialisant la ligne de base.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar Romain Janvier » Jeudi 13 Janvier 2011, 21:46

Oui, mais j'ai besoin d'avoir le point au milieu sur la ligne horizontale pour pouvoir ensuite placer mes fleches correctement, ou pour remplir mon tableau de proportionalité correctement (avec les nombres au milieu des cases). D'ailleurs cela semble etre un miracle que cela marche pour l'instant. Peut-etre parce que je n'utilisais pas de fractions...
Romain Janvier
Kilo-utilisateur
 
Messages: 146
Inscription: Lundi 23 Août 2010, 13:57
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar GMaths » Jeudi 13 Janvier 2011, 22:07

Pour donner des idées différentes :

Code: Tout sélectionner
real u=1;
unitsize(u*cm);
texpreamble("\newcommand{\dfrac}[2]{\displaystyle\frac{#1}{#2}}");
string[] s={"$\dfrac{4}{5}$",
            "$=$",
            "$\dfrac{\ldots\vphantom{1}}{15}$",
            "$=$",
            "$\dfrac{20}{\ldots}$",
            "$=$",
            "$\dfrac{4+\frac{?}{2}}{5+\dfrac{3}{2}}$"
            };
envelope[] env={box,
               box, // null ne fonctionne pas ! :-((
               box,
               box, // null ne fonctionne pas ! :-((
               box,
               box, // null ne fonctionne pas ! :-((
               roundbox
              };
pen[] couleur={red,
               nullpen, // pour compenser le problème précédent.
               blue,
               nullpen, // pour compenser le problème précédent.
               red,
               nullpen, // pour compenser le problème précédent.
               blue
              };
object[] obj=new object[s.length];
real dx=0;
for(int k=0; k<s.length; ++k){
    obj[k] = object(Label(s[k],(dx,0),Align,basealign),env[k],couleur[k]);
    dx+=((max(obj[k])-min(obj[k])).x/(u*cm));
}

frame o=pack(align=realEpsilon*E,obj[0],obj[1],obj[2],obj[3],obj[4],obj[5],obj[6]);
add(o);

draw((0,0)--(truepoint(E).x,0),dotted+red);

add(new void(picture pic, transform t) {
    draw(pic,point(obj[0],N,t){N}..tension 3 ..{S}point(obj[6],N,t),Arrow);
    draw(pic,"d\'elire",point(obj[6],SW,t){SW}.. {NW}point(obj[2],SE,t),.8green,Arrows);
});


Il y a au moins deux problèmes dans ce que je propose : je vous laisse les trouver. :-))

Je propose néanmoins l'exemple... car il a au moins une originalité : celle d'avoir utiliser une fonction que je n'avais jamais utilisée personnellement.

Image

PS : à ceux qui passeraient là par hasard, je vous rassure d'un point de vue mathématique : ce qui précède n'est qu'un exemple délirant... dont le petit intérêt n'est que la façon dont cela a été programmé, pour être capable d'aligner et de relier des expressions mathématiques de tailles différentes.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar Romain Janvier » Jeudi 13 Janvier 2011, 22:35

Wao, pas mal. Mais le truc c'est que je ne veux pas passer par le "add(new void(picture pic, transform t) {" parce que si jamais tu veux recuperer les coordonnées des textes sur les fleches pour faire autre chose, cela devient la galere.

Par contre, tu devrais mettre des ArcArrow et à mon avis le \vphantom ne sert à rien. Mais je n'ai jamais vu la commande pack, ni ce realEpsilon. Et c'est bizarre que le roundbox empiete un peu sur le 2 en bas à droite.
Romain Janvier
Kilo-utilisateur
 
Messages: 146
Inscription: Lundi 23 Août 2010, 13:57
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar GMaths » Jeudi 13 Janvier 2011, 22:42

Romain Janvier a écrit:Wao, pas mal. Mais le truc c'est que je ne veux pas passer par le "add(new void(picture pic, transform t) {" parce que si jamais tu veux recuperer les coordonnées des textes sur les fleches pour faire autre chose, cela devient la galere.

Quelle autre chose ? Un exemple ? :roll:
Romain Janvier a écrit:Par contre, tu devrais mettre des ArcArrow

J'aime bien celles que j'ai mises. :-)
Romain Janvier a écrit:et à mon avis le \vphantom ne sert à rien.

Regarde ta figure et la mienne... et tu comprendras pourquoi je l'ai mis.
Romain Janvier a écrit:Mais je n'ai jamais vu la commande pack, ni ce realEpsilon.

Pour pack : +1.
Romain Janvier a écrit:Et c'est bizarre que le roundbox empiete un peu sur le 2 en bas à droite.

Cela arrive avec roundbox. Utiliser xmargin ou y margin pour améliorer les choses.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar Romain Janvier » Jeudi 13 Janvier 2011, 23:17

Un truc comme cela par exemple :
cours-tableau-prop-prime2.png


Meme si là j'ai triché pour les fleches qui partent des autres fleches, mais on doit pouvoir le gerer plus facilement en utilisant ma "methode". Et puis honetement, j'avais bricolé avec ces void add(...) mais je ne comprends toujours pas ce que cela fait ni comment ca marche. Et si on les imbrique, cela devient n'importe quoi.

Pour le phantom, je pense qu'avec le Align et le basealign, ca passe, regarde mon premier exemple.
Romain Janvier
Kilo-utilisateur
 
Messages: 146
Inscription: Lundi 23 Août 2010, 13:57
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathématique

Messagepar GMaths » Vendredi 14 Janvier 2011, 00:10

Image

Cela complique un peu... mais on y arrive.

Il va de soi que si j'avais besoin d'une telle chose, très spécifique avec un signe égal une fois sur deux,
je peaufinerais en enlevant notamment la contrainte de devoir saisir ce qui les concerne dans les tableaux du départ.

Code: Tout sélectionner
real u=2;
unitsize(u*cm);
texpreamble("\newcommand{\dfrac}[2]{\displaystyle\frac{#1}{#2}}");
string[] s={"$\dfrac{4}{5}$",
            "$=$",
            "$\dfrac{\ldots\vphantom{1}}{15}$",
            "$=$",
            "$\dfrac{20}{\ldots}$",
            "$=$",
            "$\dfrac{\ldots\vphantom{1}}{20}$"
            };
envelope[] env={box,
               box, // null ne fonctionne pas ! :-((
               box,
               box, // null ne fonctionne pas ! :-((
               box,
               box, // null ne fonctionne pas ! :-((
               roundbox
              };
pen[] couleur={red,
               nullpen, // pour compenser le problème précédent.
               blue,
               nullpen, // pour compenser le problème précédent.
               red,
               nullpen, // pour compenser le problème précédent.
               blue
              };
object[] obj=new object[s.length];
real dx=0;
for(int k=0; k<s.length; ++k){
    obj[k] = object(Label(s[k],(dx,0),Align,basealign),env[k],couleur[k]);
    dx+=((max(obj[k])-min(obj[k])).x/(u*cm));
}

frame o=pack(align=realEpsilon*E,obj[0],obj[1],obj[2],obj[3],obj[4],obj[5],obj[6]);
add(o);

draw((0,0)--(truepoint(E).x,0),dotted+red);



add(new void(picture pic, transform t) {
    transform it=inverse(t);
    // Flèche noire
    draw(pic,point(obj[0],N,t){N}..tension 3 ..{S}point(obj[6],N,t),ArcArrows);
   
    // Flèche verte
    path flecheverte = point(obj[0],S,t){S}.. {N}point(obj[2],S,t);
    pair  posplus= point(flecheverte,.7);
    Label labplus=scale(.5)*"+",
          labelvert=Label(labplus,posplus);
    object lab = object(labelvert,box,nullpen);
   
    draw(pic,flecheverte,.8green,ArcArrows);

    // Flèche bleue
    draw(pic,(it*point(lab,S,t){SE}..tension 2 ..{N}point(obj[6],S,t)),blue,ArcArrow);
   
    // Ajout du +
    label(pic,labplus,posplus,Fill(white));
});
Dernière édition par GMaths le Vendredi 14 Janvier 2011, 22:37, édité 1 fois.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar GMaths » Vendredi 14 Janvier 2011, 00:21

Romain Janvier a écrit:Pour le phantom, je pense qu'avec le Align et le basealign, ca passe, regarde mon premier exemple.

Je te le citais comme exemple du problème !! :lol:
Je regarde l'image et je vois que cela ne passe pas : pour la dernière fraction, le cadre est incorrect : pas de place pour écrire, là où il y a les trois points. :wink:
Je n'ai pas recompilé l'exemple pour voir s'il donne quelque chose de mieux que ce que l'image montre.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathématique

Messagepar Romain Janvier » Vendredi 14 Janvier 2011, 06:25

Dans mon exemple, cela ne passe pas sur la 2e ligne parce que je n'ai pas mis le Align. Sinon sur la premiere ca passe.

Et bravo pour ton dernier exemple. Je me disais qu'avec une ellipse autour du + cela serait plus dur, mais en fait ca masque la jointure entre les fleches, donc ca doit etre encore plus simple...
Romain Janvier
Kilo-utilisateur
 
Messages: 146
Inscription: Lundi 23 Août 2010, 13:57
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathématique

Messagepar GMaths » Vendredi 14 Janvier 2011, 07:42

Romain Janvier a écrit:Sinon sur la premiere ca passe.

On ne doit pas parler de la même chose car voilà la première ligne (que j'ai vérifiée en compilant la première partie du code que tu as donné) et, en l'état, sans vphantom, la place pour compléter la dernière fraction n'est pas prévue !

Image

Pourtant, je pensais que ma phrase était claire :

pour la dernière fraction, le cadre est incorrect : pas de place pour écrire, là où il y a les trois points.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathématique

Messagepar Romain Janvier » Vendredi 14 Janvier 2011, 21:26

Mince, je n'avais pas fait attention à ca. Si j'avais utilisé un phantom, je n'aurai pas eu tous ces problemes, mais je voulais un resultat plus "systematique". C'est decevant au final...

En tout cas merci pour tes renseignements.
Romain Janvier
Kilo-utilisateur
 
Messages: 146
Inscription: Lundi 23 Août 2010, 13:57
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathématique

Messagepar GMaths » Vendredi 14 Janvier 2011, 23:01

Romain Janvier a écrit:... mais je voulais un resultat plus "systematique". C'est decevant au final...

Je ne vois pas trop comment tu veux faire autrement que de prendre en compte ce que renseignes comme "string"... car si tu prévois des cadres d'une hauteur fixe pour le problème des zones à compléter, tu perdras forcément la souplesse de mettre des formules de hauteurs différentes.
Donc il suffit de définir une commande \pts dans le préambule qui prennent en compte le vphantom, quelque chose du genre :

Code: Tout sélectionner
\newcommand{\pts}[1][1cm]{\makebox[#1][l]{\vphantom{1}\textcolor{gray}{\dotfill}}}


voire mieux : prévoir une commande de syntaxe \sol{...}, où tu indiques la solution attendue sans l'afficher : mais le fait de renseigner la réponse permet de calculer la place à laisser, et de calculer la longueur de pointillés nécessaires.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar c-top » Samedi 15 Janvier 2011, 09:36

Romain Janvier a écrit:Mais je n'ai jamais vu la commande pack, ni ce realEpsilon.


Tu as la liste complète (ou presque) des fonctions asymptote dans un petit fichier qui s'appelle
asy.list
À toi de le trouver dans ta distribution.
c-top
Déca-utilisateur
 
Messages: 42
Inscription: Samedi 11 Juillet 2009, 19:20
Statut actuel: Actif et salarié | Enseignant

Re: Aligner du texte mathematique

Messagepar GMaths » Samedi 15 Janvier 2011, 09:44

c-top a écrit:asy.list

Dans la version svn uniquement.
GMaths
Exa-utilisateur
 
Messages: 2031
Inscription: Lundi 01 Octobre 2007, 09:20
Statut actuel: Actif et salarié | Enseignant


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités