Page 1 sur 1
texte avec différentes couleurs
Posté : dim. 28 oct. 2012, 14:17
par Diane
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.
Re: texte avec différentes couleurs
Posté : dim. 28 oct. 2012, 15:45
par GM
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 :
*** 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
size(5cm);
texpreamble("
\usepackage{xcolor}
\newcommand{\bl}[1]{\textcolor{blue}{#1}}
\newcommand{\ro}[1]{\textcolor{red}{#1}}
\newcommand{\ve}[1]{\textcolor{green}{#1}}
");
label("\bl{un} \ro{essai} \ve{concluant}",(0,0));
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.
Re: texte avec différentes couleurs
Posté : lun. 29 oct. 2012, 16:39
par Diane
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.
Re: texte avec différentes couleurs
Posté : lun. 29 oct. 2012, 20:20
par GM
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.
*** 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
real marge=1mm;
pair z1=(0,0);
pair vectsep=2*E;
object mot1 = align(object(Label(baseline("Un"),blue),box,marge),vectsep);
add(mot1,z1);
pair z2 = z1 + vectsep+realmult(unit(vectsep),size(mot1.f));
object mot2 = align(object(Label(baseline("essai"),green),ellipse,marge),vectsep);
add(mot2,z2);
pair z3 = z2 + vectsep+realmult(unit(vectsep),size(mot2.f));
object mot3 = align(object(Label(baseline("concluant"),red),roundbox,marge),vectsep);
add(mot3,z3);
*** 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
real marge=1mm;
pair z1=(0,0);
pair vectsep=20*E;
object mot1 = align(object(Label(baseline("Un"),blue),box,marge),vectsep);
add(mot1,z1);
pair z2 = z1 + vectsep+realmult(unit(vectsep),size(mot1.f));
object mot2 = align(object(Label(baseline("essai"),green),ellipse,marge),vectsep);
add(mot2,z2);
pair z3 = z2 + vectsep+realmult(unit(vectsep),size(mot2.f));
object mot3 = align(object(Label(baseline("concluant"),red),roundbox,marge),vectsep);
add(mot3,z3);
*** 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
real marge1=1mm, marge2=20mm;
pair z1=(0,0);
pair vectsep=50*E;
object mot1 = align(object(Label(baseline("Un"),blue),box),vectsep);
add(mot1,z1);
pair z2 = z1 + vectsep+realmult(unit(vectsep),size(mot1.f));
object mot2 = align(object(Label(baseline("essai"),green),ellipse,marge1),vectsep);
add(mot2,z2);
pair z3 = z2 + vectsep+realmult(unit(vectsep),size(mot2.f));
object mot3 = align(object(Label(baseline("concluant"),red),roundbox,marge2),vectsep);
add(mot3,z3);
draw(shift(z1)*point(mot1,S){S}..{N}shift(z2)*point(mot2,S),Arrow());
draw(shift(z1)*point(mot1,N){NE}..{S}shift(z3)*point(mot3,N),Arrow());
*** 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
real marge=2mm;
pair z1=(0,0);
pair vectsep=10*S;
object mot1 = align(object(Label(baseline("Un"),blue),box,marge),vectsep);
add(mot1,z1);
pair z2 = z1 + vectsep+realmult(unit(vectsep),size(mot1.f));
object mot2 = align(object(Label(baseline("essai"),green),ellipse,marge),vectsep);
add(mot2,z2);
pair z3 = z2 + vectsep+realmult(unit(vectsep),size(mot2.f));
object mot3 = align(object(Label(baseline("concluant"),red),roundbox,marge),vectsep);
add(mot3,z3);
draw(shift(z1)*point(mot1,SW){W}..{E}shift(z2)*point(mot2,W),Arrow());
draw(shift(z1)*point(mot1,E){E}..{SW}shift(z3)*point(mot3,NE),Arrow());
Re: texte avec différentes couleurs
Posté : mar. 30 oct. 2012, 15:18
par Diane
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)
Re: texte avec différentes couleurs
Posté : mar. 30 oct. 2012, 17:31
par GM
Une deuxième source d'inspiration.
*** 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
real u=2cm;
unitsize(u);
// Liste des formes
path p[] = {unitsquare,
shift(2,.5)*scale(.5)*unitcircle,
shift(3,0)*xscale(1.5)*unitsquare
};
draw(p);
// Liste des chaines... qui vont être transformées en "object" avec des paramètres individuels
string Smots[]={"carr\'e","rectangle","cercle","triangle"};
object Omots[];
envelope Emots[]={box,box,box,box};
pen PSmots[]={blue,blue,red,blue};
pen PEmots[]={invisible,invisible,blue,invisible};
real marge=1mm;
frame fr;
pair z[]={(0,0)}, vectsep=2*E;
for(int k=0; k<Smots.length; ++k){
// "Push" (ajout à la fin) de chaque objet (avec alignement et mise en forme) à la liste des objets
Omots.push(align(object(Label(baseline(Smots[k]),PSmots[k]),Emots[k],marge,PEmots[k]),vectsep));
// On ajoute le dernier objet de la liste à la frame avec le "bon décalage".
add(fr,Omots[k],z[k]);
// On calcule le "bon décalage" de l'objet suivant qui tiendra compte des dimensions de l'objet courant.
z.push( z[k] + vectsep + realmult(unit(vectsep),size(Omots[k].f)) );
}
pair posmots=(1,3);
dot(posmots,red);
add(fr,posmots);
// Une fonction pour faciliter le tracé de plusieurs flèches
void relier(int numpath, int numstring, pen stylo=currentpen, real m=.05){
pair po1=(.5(min(p[numpath])+max(p[numpath])).x,max(p[numpath]).y+m), // point au dessus de la forme
po2=shift(posmots+z[numstring]/u)*(point(Omots[numstring],S)/u); // point en dessous de la chaine
draw(po1{N}..{N}po2,stylo,Arrow());
}
relier(0,0);
relier(1,2,red);
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.
*** 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
real u=2cm;
unitsize(u);
// Liste des formes
path p[] = {unitsquare,
shift(2,1)*scale(.5)*unitcircle,
shift(3,1)*xscale(1.5)*unitsquare
};
draw(p);
// Liste des chaines... qui vont être transformées en "object" avec des paramètres individuels
string Smots[]={"carr\'e","rectangle","cercle","triangle"};
object Omots[];
envelope Emots[]={box,box,box,box};
pen PSmots[]={blue,blue,red,blue};
pen PEmots[]={invisible,invisible,blue,invisible};
real marge=1mm;
frame fr;
pair z[]={(0,0)}, vectsep=20*WSW;
for(int k=0; k<Smots.length; ++k){
// "Push" (ajout à la fin) de chaque objet (avec alignement et mise en forme) à la liste des objets
Omots.push(align(object(Label(baseline(Smots[k]),PSmots[k]),Emots[k],marge,PEmots[k]),vectsep));
// On ajoute le dernier objet de la liste à la frame avec le "bon décalage".
add(fr,Omots[k],z[k]);
// On calcule le "bon décalage" de l'objet suivant qui tiendra compte des dimensions de l'objet courant.
z.push( z[k] + vectsep + realmult(unit(vectsep),size(Omots[k].f)) );
}
pair posmots=(1,4);
dot(posmots,red);
add(fr,posmots);
// Une fonction pour faciliter le tracé de plusieurs flèches
void relier(int numpath, int numstring, pen stylo=currentpen, real m=.05){
pair po1=(.5(min(p[numpath])+max(p[numpath])).x,max(p[numpath]).y+m), // point au dessus de la forme
po2=shift(posmots+z[numstring]/u)*(point(Omots[numstring],S)/u); // point en dessous de la chaine
draw(po1{N}..{N}po2,stylo,Arrow());
}
relier(0,0);
relier(1,2,red);
relier(2,1,gray+dashed);