[Résolu] Limiter la largeur d'un texte

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.

[Résolu] Limiter la largeur d'un texte

Messagepar cerise » Samedi 14 Janvier 2017, 20:23

Bonjour,

en faisant un calendrier sur lequel je peux noter des anniversaires ou événements, je suis amenée à écrire des textes dans des cases assez étroites.
J'ai d'abord fait mes calendriers "à la main", et si le texte était trop large, j'ajustais à la main avec un xscale :
Code: Tout sélectionner
label(xscale(x_scale)*nom,position,pen);


Mais j'ai ensuite programmé un formulaire web pour pouvoir générer le calendrier automatiquement, et là je me trouve embêtée pour pouvoir ajuster la largeur du texte... Ma question est donc :
- peut-on fixer la largeur d'un label (je voudrais modifier juste la largeur et pas la hauteur, donc modifier les proportions au besoin) ?
- ou alors récupérer la largeur d'un label pour pouvoir calculer le facteur x_scale en fonction de la largeur que je veux obtenir ?

Question subsidiaire pour des textes plus longs et en plusieurs mots : peut-on faire en sorte d'aller à la ligne automatiquement dans un label ?

Toute suggestion sera la bienvenue :)
Dernière édition par cerise le Samedi 21 Janvier 2017, 19:07, édité 1 fois.
Il fallait être Newton pour apercevoir que la Lune tombe quand tout le monde voit bien qu'elle ne tombe pas.
Paul Valéry
cerise
Méga-utilisateur
 
Messages: 448
Inscription: Mercredi 08 Juin 2005, 17:03
Statut actuel: Actif et salarié

Publicité

Re: Limiter la largeur d'un texte

Messagepar OG » Lundi 16 Janvier 2017, 21:02

Bonsoir

Je ne crois pas que la fonction Label puisse faire cela automatiquement (ça ne semble pas être une option).
On peut tout de même récupérer la longueur d'une étiquette en créant une "frame" contenant cette étiquette et utiliser min(f) et max(f). On obtient alors la longueur de l'étiquette en bp (ou pt). Là tu peux jouer et "ajuster"
automatiquement ton étiquette quand tu la traces. Voici un exemple


73cea833ccab5b0a7f00440bf4294f0f.png

Code: Tout sélectionner
size(3.0cm);
draw(unitsquare);

// rapport cm bp (Big point)
real factor=28.3464567;
// normalement une frame est en big point
frame f;
label(f,"Essai Essai");
//Write(min(f),max(f));
// largeur du label en big points
real L=max(f).x-min(f).x;
erase(f);

// factor/L donnera à peu près une étiquette
// de largeur 1cm
label(xscale(factor/L)*"Essai Essai",(1/2,0.3));
label("Essai",(1/2,.9));

frame f;
label(f,"Essai Essai Essai");
real L=max(f).x-min(f).x;
erase(f);
label(xscale(factor/L)*"Essai Essai Essai",(1/2,.7));


frame f;
label(f,"Essai Essai Essai Essai");
real L=max(f).x-min(f).x;
erase(f);
label(xscale(factor/L)*"Essai Essai Essai Essai",(1/2,.1));


frame f;
label(f,"Un autre texte long Un autre texte long");
real L=max(f).x-min(f).x;
erase(f);
label(xscale(factor/L)*"Un autre texte long Un autre texte long",(1/2,.5));


Ce n'est peut-être pas exacte (bp ou pt, marge ?), mais cela doit pouvoir aider. Après il faut automatiser.

Pour la question subsidiaire, il faut se tourner vers LaTeX avec la commande \parbox je pense.

O.G.
OG
Modérateur
 
Messages: 2214
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Limiter la largeur d'un texte

Messagepar cerise » Mardi 17 Janvier 2017, 20:47

Merci pour ta réponse ! :)
Je regarde ça attentivement dès que j'ai le temps !
Il fallait être Newton pour apercevoir que la Lune tombe quand tout le monde voit bien qu'elle ne tombe pas.
Paul Valéry
cerise
Méga-utilisateur
 
Messages: 448
Inscription: Mercredi 08 Juin 2005, 17:03
Statut actuel: Actif et salarié


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité