texte avec différentes couleurs

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
Diane
Messages : 3
Enregistré le : dim. 28 oct. 2012, 12:08

texte avec différentes couleurs

Message non lu par Diane » dim. 28 oct. 2012, 14:17

Bonjour,

Je voudrais écrire une phrase avec des mots de différentes couleurs du type mot1 mot2 etc... pour pouvoir l'afficher sur un graphe.
J'imaginais faire différents labels avec différentes couleurs, mais je ne sais pas comment placer chaque label de façon à ce que l'intervalle entre les mots soit constant.

Merci d'avance.

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: texte avec différentes couleurs

Message non lu par GM » dim. 28 oct. 2012, 15:45

Bonjour,

Diane a écrit :Je voudrais écrire une phrase avec des mots de différentes couleurs du type mot1 mot2 etc... pour pouvoir l'afficher sur un graphe.


Un graphe... de la théorie des graphes ? Ou un autre type de graphique ? Avec un peu plus de précision sur l'ensemble, cela peut permettre d'affiner la réponse.
Je pense notamment à l'ensemble de ces mots... doit-il ensuite avoir une position particulière par rapport à un autre élément du graphique ?

Diane a écrit :je ne sais pas comment placer chaque label de façon à ce que l'intervalle entre les mots soit constant.

Y aura-t-il quelque chose de particulier à faire avec ces mots ensuite ? les relier à d'autres choses ?
L'espace constant entre ces mots doit-il s'adapter à quelque chose dans la figure ?

Je propose tout de même quelque chose si le texte n'a pas à dépendre de la position d'un autre élément de la figure :

Figure asymptote 4da152e235fb8c268d1bcb4aa3cba510
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. size(5cm);
  2. texpreamble("
  3. \usepackage{xcolor}
  4. \newcommand{\bl}[1]{\textcolor{blue}{#1}}
  5. \newcommand{\ro}[1]{\textcolor{red}{#1}}
  6. \newcommand{\ve}[1]{\textcolor{green}{#1}}
  7. ");
  8.  
  9.  
  10. label("\bl{un} \ro{essai} \ve{concluant}",(0,0));
  11. label("\ro{un} \ve{essai} \bl{concluant}",(1,1));


Si c'est destiné à être une figure embarquée dans un tex, alors avec l'option [inline], la partie dans texpreamble peut-être déportée dans le préambule du tex.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Diane
Messages : 3
Enregistré le : dim. 28 oct. 2012, 12:08

Re: texte avec différentes couleurs

Message non lu par Diane » lun. 29 oct. 2012, 16:39

Bonjour,

Je n'ai pas été très claire, je cherche à faire une sorte de schéma explicatif à partir d'une phrase, avec des mots de couleurs différentes (partie qui me posait problème), des cadres, des flèches... Donc vous avez bien répondu à mon problème, merci, "l'essai est concluant".

Je devrais m'en sortir pour l'instant.

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: texte avec différentes couleurs

Message non lu par GM » lun. 29 oct. 2012, 20:20

Je viens de bricoler quelque chose qui peut donner des idées.

Ce serait incontestablement à revoir s'il faut donner de la souplesse pour avoir notamment un nombre variable de mots... et s'il y a d'autres choses sur la figure.

Figure asymptote 30e834f8e2a1eaa382bbfc1ebb7ce192
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. real marge=1mm;
  2. pair z1=(0,0);
  3. pair vectsep=2*E;
  4. object mot1 = align(object(Label(baseline("Un"),blue),box,marge),vectsep);
  5. add(mot1,z1);
  6. pair z2 = z1 + vectsep+realmult(unit(vectsep),size(mot1.f));
  7. object mot2 = align(object(Label(baseline("essai"),green),ellipse,marge),vectsep);
  8. add(mot2,z2);
  9. pair z3 = z2 + vectsep+realmult(unit(vectsep),size(mot2.f));
  10. object mot3 = align(object(Label(baseline("concluant"),red),roundbox,marge),vectsep);
  11. add(mot3,z3);



Figure asymptote 69dcca4d917d01d4c63d91302a7fdf40
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. real marge=1mm;
  2. pair z1=(0,0);
  3. pair vectsep=20*E;
  4. object mot1 = align(object(Label(baseline("Un"),blue),box,marge),vectsep);
  5. add(mot1,z1);
  6. pair z2 = z1 + vectsep+realmult(unit(vectsep),size(mot1.f));
  7. object mot2 = align(object(Label(baseline("essai"),green),ellipse,marge),vectsep);
  8. add(mot2,z2);
  9. pair z3 = z2 + vectsep+realmult(unit(vectsep),size(mot2.f));
  10. object mot3 = align(object(Label(baseline("concluant"),red),roundbox,marge),vectsep);
  11. add(mot3,z3);


Figure asymptote 23e5a231e68557d5e767767553ece343
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. real marge1=1mm, marge2=20mm;
  2. pair z1=(0,0);
  3. pair vectsep=50*E;
  4. object mot1 = align(object(Label(baseline("Un"),blue),box),vectsep);
  5. add(mot1,z1);
  6. pair z2 = z1 + vectsep+realmult(unit(vectsep),size(mot1.f));
  7. object mot2 = align(object(Label(baseline("essai"),green),ellipse,marge1),vectsep);
  8. add(mot2,z2);
  9. pair z3 = z2 + vectsep+realmult(unit(vectsep),size(mot2.f));
  10. object mot3 = align(object(Label(baseline("concluant"),red),roundbox,marge2),vectsep);
  11. add(mot3,z3);
  12. draw(shift(z1)*point(mot1,S){S}..{N}shift(z2)*point(mot2,S),Arrow());
  13. draw(shift(z1)*point(mot1,N){NE}..{S}shift(z3)*point(mot3,N),Arrow());



Figure asymptote c5e58ac724c5bec04d69f7ebfea4edf5
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. real marge=2mm;
  2. pair z1=(0,0);
  3. pair vectsep=10*S;
  4. object mot1 = align(object(Label(baseline("Un"),blue),box,marge),vectsep);
  5. add(mot1,z1);
  6. pair z2 = z1 + vectsep+realmult(unit(vectsep),size(mot1.f));
  7. object mot2 = align(object(Label(baseline("essai"),green),ellipse,marge),vectsep);
  8. add(mot2,z2);
  9. pair z3 = z2 + vectsep+realmult(unit(vectsep),size(mot2.f));
  10. object mot3 = align(object(Label(baseline("concluant"),red),roundbox,marge),vectsep);
  11. add(mot3,z3);
  12. draw(shift(z1)*point(mot1,SW){W}..{E}shift(z2)*point(mot2,W),Arrow());
  13. draw(shift(z1)*point(mot1,E){E}..{SW}shift(z3)*point(mot3,NE),Arrow());
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Diane
Messages : 3
Enregistré le : dim. 28 oct. 2012, 12:08

Re: texte avec différentes couleurs

Message non lu par Diane » mar. 30 oct. 2012, 15:18

Merci de ces précisions, mais je bute encore sur quelque chose, comment pourais-je n'encadrer/entourer qu'un seul mot, "essai" par exemple, et laisser le reste de la phrase tel quel, sans effet?
Autrement dit, associer du texte avec une fonte standart et un mot, qui lui, serait en couleur, entouré, relié par une flêche.
Je dois pour l'instant réaliser un schéma général, dont on pourra par la suite adapter le contenu.
(J'espère être assez claire)

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

Re: texte avec différentes couleurs

Message non lu par GM » mar. 30 oct. 2012, 17:31

Une deuxième source d'inspiration.

Figure asymptote c9a2a4b282cee95498d7c9ab3da23822
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. real u=2cm;
  2. unitsize(u);
  3.  
  4. // Liste des formes
  5. path p[] = {unitsquare,
  6. shift(2,.5)*scale(.5)*unitcircle,
  7. shift(3,0)*xscale(1.5)*unitsquare
  8. };
  9. draw(p);
  10.  
  11.  
  12. // Liste des chaines... qui vont être transformées en "object" avec des paramètres individuels
  13. string Smots[]={"carr\'e","rectangle","cercle","triangle"};
  14. object Omots[];
  15. envelope Emots[]={box,box,box,box};
  16. pen PSmots[]={blue,blue,red,blue};
  17. pen PEmots[]={invisible,invisible,blue,invisible};
  18.  
  19. real marge=1mm;
  20.  
  21. frame fr;
  22. pair z[]={(0,0)}, vectsep=2*E;
  23.  
  24. for(int k=0; k<Smots.length; ++k){
  25. // "Push" (ajout à la fin) de chaque objet (avec alignement et mise en forme) à la liste des objets
  26. Omots.push(align(object(Label(baseline(Smots[k]),PSmots[k]),Emots[k],marge,PEmots[k]),vectsep));
  27. // On ajoute le dernier objet de la liste à la frame avec le "bon décalage".
  28. add(fr,Omots[k],z[k]);
  29. // On calcule le "bon décalage" de l'objet suivant qui tiendra compte des dimensions de l'objet courant.
  30. z.push( z[k] + vectsep + realmult(unit(vectsep),size(Omots[k].f)) );
  31. }
  32. pair posmots=(1,3);
  33. dot(posmots,red);
  34. add(fr,posmots);
  35.  
  36. // Une fonction pour faciliter le tracé de plusieurs flèches
  37. void relier(int numpath, int numstring, pen stylo=currentpen, real m=.05){
  38. pair po1=(.5(min(p[numpath])+max(p[numpath])).x,max(p[numpath]).y+m), // point au dessus de la forme
  39. po2=shift(posmots+z[numstring]/u)*(point(Omots[numstring],S)/u); // point en dessous de la chaine
  40. draw(po1{N}..{N}po2,stylo,Arrow());
  41. }
  42.  
  43. relier(0,0);
  44. relier(1,2,red);
  45. relier(2,1,gray+dashed);


Ces problèmes de frame et de labels ne sont pas simples : j'ai un peu beaucoup bricolé pour pouvoir faire l'exemple précédent, le temps de réaliser l'astuce des "/u".
Il était facile de placer les formes et les mots... mais pour avoir les flèches, c'était un peu chaud... et cela donne ce code pas si simple à comprendre.


Figure asymptote ed2b930bf39e29f4d4fde2ba1ba43e8b
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. real u=2cm;
  2. unitsize(u);
  3.  
  4. // Liste des formes
  5. path p[] = {unitsquare,
  6. shift(2,1)*scale(.5)*unitcircle,
  7. shift(3,1)*xscale(1.5)*unitsquare
  8. };
  9. draw(p);
  10.  
  11.  
  12. // Liste des chaines... qui vont être transformées en "object" avec des paramètres individuels
  13. string Smots[]={"carr\'e","rectangle","cercle","triangle"};
  14. object Omots[];
  15. envelope Emots[]={box,box,box,box};
  16. pen PSmots[]={blue,blue,red,blue};
  17. pen PEmots[]={invisible,invisible,blue,invisible};
  18.  
  19. real marge=1mm;
  20.  
  21. frame fr;
  22. pair z[]={(0,0)}, vectsep=20*WSW;
  23.  
  24. for(int k=0; k<Smots.length; ++k){
  25. // "Push" (ajout à la fin) de chaque objet (avec alignement et mise en forme) à la liste des objets
  26. Omots.push(align(object(Label(baseline(Smots[k]),PSmots[k]),Emots[k],marge,PEmots[k]),vectsep));
  27. // On ajoute le dernier objet de la liste à la frame avec le "bon décalage".
  28. add(fr,Omots[k],z[k]);
  29. // On calcule le "bon décalage" de l'objet suivant qui tiendra compte des dimensions de l'objet courant.
  30. z.push( z[k] + vectsep + realmult(unit(vectsep),size(Omots[k].f)) );
  31. }
  32. pair posmots=(1,4);
  33. dot(posmots,red);
  34. add(fr,posmots);
  35.  
  36. // Une fonction pour faciliter le tracé de plusieurs flèches
  37. void relier(int numpath, int numstring, pen stylo=currentpen, real m=.05){
  38. pair po1=(.5(min(p[numpath])+max(p[numpath])).x,max(p[numpath]).y+m), // point au dessus de la forme
  39. po2=shift(posmots+z[numstring]/u)*(point(Omots[numstring],S)/u); // point en dessous de la chaine
  40. draw(po1{N}..{N}po2,stylo,Arrow());
  41. }
  42.  
  43. relier(0,0);
  44. relier(1,2,red);
  45. relier(2,1,gray+dashed);
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Répondre