Récupérer la hauteur d'une figure asylatex

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
alekhine
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 228
Inscription : samedi 18 août 2007, 21:57
Localisation : Caen

Récupérer la hauteur d'une figure asylatex

Message par alekhine »

Bonjour,

Est-il possible de récupérer la hauteur (et la largeur tant qu'on y est) d'une figure asymptote créée dans un fichier latex dans un environnement asy ?

Merci.
Dernière modification par alekhine le mardi 02 mars 2010, 18:32, modifié 1 fois.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [asylatex] hauteur figure

Message par GMaths »

alekhine a écrit :Est-il possible de récupérer la hauteur (et la largeur tant qu'on y est) d'une figure asymptote créer dans un fichier latex dans un environnement asy ?
Pour ?

Tu ne peux pas fixer la hauteur avec un size(0,hauteurchoisie) ?

alekhine
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 228
Inscription : samedi 18 août 2007, 21:57
Localisation : Caen

Re: [asylatex] hauteur figure

Message par alekhine »

Pour créer une minipage de la même hauteur que la figure afin d'écrire du texte à côté. Par exemple :

Code : Tout sélectionner

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage[ headheight=14pt, margin=2.8cm]{geometry}
\usepackage{graphics,asymptote}

\begin{document}
\begin{minipage}[][172.20335pt][t]{0.45\linewidth}
  Texte à côté de la figure (genre un magnifique énoncé d'exercice).
\end{minipage}
\hfill
\begin{minipage}[]{0.5\linewidth}
  \begin{center}
\begin{asy}
unitsize(0.65cm);
path chemin=(0,0)..(2,1)..(5,4)..cycle;
filldraw(chemin,red,1bp+black);
\end{asy}
  \end{center}
\end{minipage}
\end{document}
Pour la hauteur, je l'ai récupérée dans le log
GMaths a écrit :Tu ne peux pas fixer la hauteur avec un size(0,hauteurchoisie) ?
Si je veux créer des figures "en vraie grandeur" je ne maîtrise pas la hauteur finale.
Et puis ce serait pour pouvoir créer une commande, et donc récupérer automatiquement cette hauteur.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [asylatex] hauteur figure

Message par GMaths »

alekhine a écrit :Et puis ce serait pour pouvoir créer une commande, et donc récupérer automatiquement cette hauteur.
Il y a une chose que je ne comprends : la quantité de texte va être variable... donc :

Qu'espères-tu obtenir... si tu as moins de texte à mettre que de "place disponible" dans ta minipage de hauteur fixée ?
Qu'espères-tu obtenir... si tu as plus de texte à mettre que de "place disponible" dans ta minipage de hauteur fixée ?

alekhine
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 228
Inscription : samedi 18 août 2007, 21:57
Localisation : Caen

Re: [asylatex] hauteur figure

Message par alekhine »

GMaths a écrit : Qu'espères-tu obtenir... si tu as moins de texte à mettre que de "place disponible" dans ta minipage de hauteur fixée ?

Qu'espères-tu obtenir... si tu as plus de texte à mettre que de "place disponible" dans ta minipage de hauteur fixée ?
Dans les deux cas j'aimerais que le texte débute en haut de la figure. Quitte à ce qu'il dépasse en bas s'il y a plus de texte que la hauteur de la figure.

Mais je me rend compte avec ta question que ça ne marcherait que si le texte est plus court que la hauteur de la figure :(

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [asylatex] hauteur figure

Message par GMaths »

alekhine a écrit :Dans les deux cas j'aimerais que le texte débute en haut de la figure.
Cela, c'est possible sans chercher à calculer la hauteur... donc je ne vois pas ce que la hauteur de la figure va t'apporter... puisque tout va dépendre de la quantité de texte que tu décideras de mettre dans la minipage et de celle que tu décideras de mettre à la suite de la minipage.

Je te conseille de proposer des exemples qui ne font pas ce que tu veux... et on pourra alors te dire comment faire.

alekhine
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 228
Inscription : samedi 18 août 2007, 21:57
Localisation : Caen

Re: [asylatex] hauteur figure

Message par alekhine »

Donc je précise ma question :
comment faire pour qu'avec deux minipages côte à côte, l'une contenant du texte et l'autre une figure, le texte débute en haut de la figure.
Car si on ne passe pas d'options aux deux minipages, le texte est centré verticalement par rapport à la figure.

alekhine
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 228
Inscription : samedi 18 août 2007, 21:57
Localisation : Caen

Re: [asylatex] hauteur figure

Message par alekhine »

Voilà ce que je ne veux pas :

Code : Tout sélectionner

\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage[ headheight=14pt, margin=2.8cm]{geometry}
\usepackage{graphics,asymptote}

\begin{document}
\begin{minipage}{0.45\linewidth}
  Texte à côté de la figure (genre un magnifique énoncé d'exercice).
\end{minipage}
\hfill
\begin{minipage}{0.5\linewidth}
  \begin{center}
\begin{asy}
unitsize(0.65cm);
path chemin=(0,0)..(2,1)..(5,4)..cycle;
filldraw(chemin,red,1bp+black);
\end{asy}
  \end{center}
\end{minipage}
\end{document}
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par alekhine le mercredi 03 mars 2010, 20:37, modifié 1 fois.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [asylatex] hauteur figure

Message par GMaths »

alekhine a écrit :Donc je précise ma question :
comment faire pour qu'avec deux minipages côte à côte, l'une contenant du texte et l'autre une figure, le texte débute en haut de la figure.
Car si on ne passe pas d'options aux deux minipages, le texte est centré verticalement par rapport à la figure.
Il fallait commencer par cela. :-)

Tu écris ceci, en remplaçant les points par le texte et l'image...

Code : Tout sélectionner

\setlength{\largeurimage}{5cm}
\alignevert[T]{%[c]ou[b]ou[t]ou[T]
  \begin{minipage}{\textwidth-\largeurimage-.5cm}
  •
  \end{minipage}%
}\hfill
\alignevert[T]{%
  \begin{minipage}{\largeurimage}
  •
  \end{minipage}%
}
en ayant défini dans ton fichier perso :

Code : Tout sélectionner

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% PLACEMENT VERTICAL DES IMAGES ET TABLEAUX %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Définition de la commande \alignevert (ajout du 28/03/09)
%%%% \alignevert[c]{objet} place le centre de l'objet au milieu d'un x
%%%% \alignevert[b]{objet} place le bas de l'objet sur la ligne de base
%%%% \alignevert[t]{objet} place le haut de l'objet sur la ligne de base
%%%% \alignevert[T]{objet} place le haut de l'objet au niveau du haut d'un H
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\largeurimage}
\setlength{\largeurimage}{5cm}
\makeatletter
\newlength{\temp@alignevert@length}
\newsavebox{\temp@alignevert@box}
\long\def\alignevert[#1]#2{%
\sbox{\temp@alignevert@box}{#2}%
\ifx#1c%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}/2*(-1)+0.5ex}%
\else\ifx#1t%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)}%
\else\ifx#1T%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)+\heightof{I}}%
\else\ifx#1b%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\else\PackageWarning{alignevert}{option #1 unknown, using b instead}%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\fi\fi\fi\fi
\raisebox{\temp@alignevert@length}{\usebox\temp@alignevert@box}%
}
\makeatother
Et après, on dit : merci à pg. :-)

alekhine
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 228
Inscription : samedi 18 août 2007, 21:57
Localisation : Caen

Re: [asylatex] hauteur figure

Message par alekhine »

Il faut que je regarde de plus près car pour l'instant LaTeX m'envoie balader pour une accolade en trop.

Code : Tout sélectionner

 Argument of \ProcessAsymptoteLine has an extra }.
<inserted text> 
                \par 
l.63 }
Et puis avec ça ce serait bien d'obtenir automatiquement la LARGEUR de l'image :roll:

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [asylatex] hauteur figure

Message par GMaths »

J'ai le problème : cela fonctionnerait avec des figures tikz... et pas avec l'environnement asy ?
Je vais tester aussi... (mais seulement un peu... car je suis débordé)

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [asylatex] hauteur figure

Message par OG »

Bonsoir

C'est normal (réponse de prof). L'environnment asy est basé sur comments et est très chatouilleux, il n'accepte pas d'être en argument. Mis à part cela, j'ai recopié, adapté la solution de subfloat sans du tout comprendre (le prof en action donc). Comme je suis tex-incompétent, je n'arrive pas à faire passer l'argument t,T,c,b de \begin{machin}{t} blabla \end{machin} à alignevert (alignevert m'écrit option b unknow, using b instead, quel comique !, une histoire de cattruc ?)

Un expert TeX pourra certainement améliorer et faire un \begin{machin}[t,T,b ou c].
En attendant, j'ai défini 4 {t,T,c,b}alignevert environnements

Code : Tout sélectionner

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% PLACEMENT VERTICAL DES IMAGES ET TABLEAUX %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Définition de la commande \alignevert (ajout du 28/03/09)
%%%% \alignevert[c]{objet} place le centre de l'objet au milieu d'un x
%%%% \alignevert[b]{objet} place le bas de l'objet sur la ligne de base
%%%% \alignevert[t]{objet} place le haut de l'objet sur la ligne de base
%%%% \alignevert[T]{objet} place le haut de l'objet au niveau du haut d'un H
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\largeurimage}
\setlength{\largeurimage}{5cm}
\makeatletter
\newlength{\temp@alignevert@length}
\newsavebox{\temp@alignevert@box}
\long\def\alignevert[#1]#2{%
\sbox{\temp@alignevert@box}{#2}%
\ifx#1c%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}/2*(-1)+0.5ex}%
\else\ifx#1t%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)}%
\else\ifx#1T%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)+\heightof{I}}%
\else\ifx#1b%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\else\PackageWarning{alignevert}{option #1 unknown, using b instead}%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\fi\fi\fi\fi
\raisebox{\temp@alignevert@length}{\usebox\temp@alignevert@box}%
}
\newsavebox{\sfe@box}
\newenvironment{balignevert}{%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup\alignevert[b]%
{\usebox{\sfe@box}}}
\newenvironment{Talignevert}{%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup\alignevert[T]%
{\usebox{\sfe@box}}}
\newenvironment{talignevert}{%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup\alignevert[t]%
{\usebox{\sfe@box}}}
\newenvironment{calignevert}{%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup\alignevert[c]%
{\usebox{\sfe@box}}}
\makeatother

Code : Tout sélectionner

\begin{calignevert}
\begin{minipage}{\textwidth-\largeurimage-.5cm}
Voici le texte de l'exercice, 
Voici le texte de l'exercice, Voici le texte de l'exercice, Voici le
texte de l'exercice, Voici le texte de l'exercice,  
\end{minipage}
\end{calignevert}
\hfill H
\begin{Talignevert}
\begin{minipage}{4cm}
\begin{asy}
size(4cm,0);
draw(unitcircle);
\end{asy}
\end{minipage}
\end{Talignevert}
O.G.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [asylatex] hauteur figure

Message par GMaths »

Merci Olivier de t'être penché sur le problème.

J'ai lu, pas testé (je le ferai plus tard)... et vais retourner à mes copies (urgentes !) pour laisser éventuellement des spécialistes $\TeX$ répondre à ta demande.

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [Asymptote] Hauteur d'une figure asylatex

Message par OG »

J'ajoute que comme l'environnement asy est basé sur comments, qu'il ne faut absolument pas indenter \begin{asy} et \end{asy}.

Bon courage à Gaëtan pour ses copies.
O.G.

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Hauteur d'une figure asylatex

Message par GMaths »

GMaths a écrit :Merci Olivier de t'être penché sur le problème.

J'ai lu, pas testé (je le ferai plus tard)...
Je viens de le faire avec ce qui suit.

Code : Tout sélectionner

% !TEX TS-program = pdflatex
% !TEX encoding = Latin1
\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage[a4paper,%
            landscape=false,%
            hmargin={1cm,1cm},%
            vmargin={1cm,1cm},%
            headheight=15pt,%
            includeheadfoot]{geometry}
\usepackage{graphics,asymptote}
\usepackage{calc}
\usepackage{lipsum}
\setlength{\parindent}{0pt}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% PLACEMENT VERTICAL DES IMAGES ET TABLEAUX %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Définition de la commande \alignevert (ajout du 28/03/09)
%%%% \alignevert[c]{objet} place le centre de l'objet au milieu d'un x
%%%% \alignevert[b]{objet} place le bas de l'objet sur la ligne de base
%%%% \alignevert[t]{objet} place le haut de l'objet sur la ligne de base
%%%% \alignevert[T]{objet} place le haut de l'objet au niveau du haut d'un H
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\largeurimage}
\setlength{\largeurimage}{5cm}
\makeatletter
\newlength{\temp@alignevert@length}
\newsavebox{\temp@alignevert@box}
\long\def\alignevert[#1]#2{%
\sbox{\temp@alignevert@box}{#2}%
\ifx#1c%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}/2*(-1)+0.5ex}%
\else\ifx#1t%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)}%
\else\ifx#1T%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)+\heightof{I}}%
\else\ifx#1b%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\else\PackageWarning{alignevert}{option #1 unknown, using b instead}%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\fi\fi\fi\fi
\raisebox{\temp@alignevert@length}{\usebox\temp@alignevert@box}%
}
\newsavebox{\sfe@box}
\newenvironment{balignevert}{%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup\alignevert[b]%
{\usebox{\sfe@box}}}
\newenvironment{Talignevert}{%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup\alignevert[T]%
{\usebox{\sfe@box}}}
\newenvironment{talignevert}{%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup\alignevert[t]%
{\usebox{\sfe@box}}}
\newenvironment{calignevert}{%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup\alignevert[c]%
{\usebox{\sfe@box}}}
\makeatother

\begin{document}

\setlength{\largeurimage}{4cm}
\begin{Talignevert}
\begin{minipage}{\linewidth-\largeurimage-1cm}
\lipsum[0-1]
\end{minipage}
\end{Talignevert}
\hfill
\begin{Talignevert}
\begin{minipage}{\largeurimage}
\begin{asy}
size(4cm,0);
draw(unitcircle,red);
\end{asy}
\end{minipage}
\end{Talignevert}

\begin{enumerate}
\item 
\setlength{\largeurimage}{4cm}
\begin{Talignevert}%
\begin{minipage}{\linewidth-\largeurimage-1cm}
\lipsum[0-1]
\end{minipage}
\end{Talignevert}
\hfill
\begin{Talignevert}
\begin{minipage}{\largeurimage}
\begin{asy}
size(4cm,0);
draw(polygon(7),blue);
\end{asy}
\end{minipage}
\end{Talignevert}
\item Cela fonctionne bien, non ?
\end{enumerate}
\end{document}
Cela fonctionne, merci...
... et effectivement si un expert de TeX pouvait nous trouver un truc pour retrouver la syntaxe initiale... ce serait sympa.

fp
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 751
Inscription : mercredi 24 février 2010, 08:04

Re: [Asymptote] Hauteur d'une figure asylatex

Message par fp »

GMaths a écrit :
GMaths a écrit :Merci Olivier de t'être penché sur le problème.

J'ai lu, pas testé (je le ferai plus tard)...
Je viens de le faire avec ce qui suit.

...

Cela fonctionne, merci...
... et effectivement si un expert de TeX pouvait nous trouver un truc pour retrouver la syntaxe initiale... ce serait sympa.

Je suis loin d'être un expert, mais je propose ceci :

Code : Tout sélectionner

\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage[a4paper,%
            landscape=false,%
            hmargin={1cm,1cm},%
            vmargin={1cm,1cm},%
            headheight=15pt,%
            includeheadfoot]{geometry}
\usepackage{graphics,asymptote}
\usepackage{calc}
\usepackage{lipsum}
\setlength{\parindent}{0pt}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% PLACEMENT VERTICAL DES IMAGES ET TABLEAUX %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Définition de la commande \alignevert (ajout du 28/03/09)
%%%% \alignevert[c]{objet} place le centre de l'objet au milieu d'un x
%%%% \alignevert[b]{objet} place le bas de l'objet sur la ligne de base
%%%% \alignevert[t]{objet} place le haut de l'objet sur la ligne de base
%%%% \alignevert[T]{objet} place le haut de l'objet au niveau du haut d'un H
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\largeurimage}
\setlength{\largeurimage}{5cm}
\makeatletter
\newlength{\temp@alignevert@length}
\newsavebox{\temp@alignevert@box}
\long\def\alignevert[#1]#2{%
\sbox{\temp@alignevert@box}{#2}%
\ifx#1c%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}/2*(-1)+0.5ex}%
\else\ifx#1t%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)}%
\else\ifx#1T%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)+\heightof{I}}%
\else\ifx#1b%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\else\PackageWarning{alignevert}{option #1 unknown, using b instead}%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\fi\fi\fi\fi
\raisebox{\temp@alignevert@length}{\usebox\temp@alignevert@box}%
}

\newsavebox{\sfe@box}
\newenvironment{alignementvert}[1][c]{%
\ifx#1b\gdef\place{0}\else\ifx#1c\gdef\place{1}\else\ifx#1t\gdef\place{2}\else\ifx#1T\gdef\place{3}\fi\fi\fi\fi%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup%
\ifcase\place
\alignevert[b]{\usebox{\sfe@box}}%
\or
\alignevert[c]{\usebox{\sfe@box}}%
\or
\alignevert[t]{\usebox{\sfe@box}}%
\or
\alignevert[T]{\usebox{\sfe@box}}%
\fi}
\makeatother


\begin{document}

\setlength{\largeurimage}{4cm}
\begin{alignementvert}[b]
\begin{minipage}{\linewidth-\largeurimage-1cm}
\lipsum[0-1]
\end{minipage}
\end{alignementvert}
\hfill
\begin{alignementvert}[b]
\begin{minipage}{\largeurimage}
\begin{asy}
size(4cm,0);
draw(unitcircle,red);
\end{asy}
\end{minipage}
\end{alignementvert}

\begin{enumerate}
\item
\setlength{\largeurimage}{4cm}
\begin{alignementvert}[T]%
\begin{minipage}{\linewidth-\largeurimage-1cm}
\lipsum[0-1]
\end{minipage}
\end{alignementvert}
\hfill
\begin{alignementvert}[T]
\begin{minipage}{\largeurimage}
\begin{asy}
size(4cm,0);
draw(polygon(7),blue);
\end{asy}
\end{minipage}
\end{alignementvert}
\item Cela fonctionne bien, non ?
\end{enumerate}
\end{document}
FP

GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2036
Inscription : lundi 01 octobre 2007, 10:20

Re: [Asymptote] Hauteur d'une figure asylatex

Message par GMaths »

fp a écrit :Je suis loin d'être un expert, mais je propose ceci :

Code : Tout sélectionner

\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage[a4paper,%
            landscape=false,%
            hmargin={1cm,1cm},%
            vmargin={1cm,1cm},%
            headheight=15pt,%
            includeheadfoot]{geometry}
\usepackage{graphics,asymptote}
\usepackage{calc}
\usepackage{lipsum}
\setlength{\parindent}{0pt}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% PLACEMENT VERTICAL DES IMAGES ET TABLEAUX %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Définition de la commande \alignevert (ajout du 28/03/09)
%%%% \alignevert[c]{objet} place le centre de l'objet au milieu d'un x
%%%% \alignevert[b]{objet} place le bas de l'objet sur la ligne de base
%%%% \alignevert[t]{objet} place le haut de l'objet sur la ligne de base
%%%% \alignevert[T]{objet} place le haut de l'objet au niveau du haut d'un H
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\largeurimage}
\setlength{\largeurimage}{5cm}
\makeatletter
\newlength{\temp@alignevert@length}
\newsavebox{\temp@alignevert@box}
\long\def\alignevert[#1]#2{%
\sbox{\temp@alignevert@box}{#2}%
\ifx#1c%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}/2*(-1)+0.5ex}%
\else\ifx#1t%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)}%
\else\ifx#1T%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)+\heightof{I}}%
\else\ifx#1b%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\else\PackageWarning{alignevert}{option #1 unknown, using b instead}%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\fi\fi\fi\fi
\raisebox{\temp@alignevert@length}{\usebox\temp@alignevert@box}%
}

\newsavebox{\sfe@box}
\newenvironment{alignementvert}[1][c]{%
\ifx#1b\gdef\place{0}\else\ifx#1c\gdef\place{1}\else\ifx#1t\gdef\place{2}\else\ifx#1T\gdef\place{3}\fi\fi\fi\fi%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup%
\ifcase\place
\alignevert[b]{\usebox{\sfe@box}}%
\or
\alignevert[c]{\usebox{\sfe@box}}%
\or
\alignevert[t]{\usebox{\sfe@box}}%
\or
\alignevert[T]{\usebox{\sfe@box}}%
\fi}
\makeatother


\begin{document}

\setlength{\largeurimage}{4cm}
\begin{alignementvert}[b]
\begin{minipage}{\linewidth-\largeurimage-1cm}
\lipsum[0-1]
\end{minipage}
\end{alignementvert}
\hfill
\begin{alignementvert}[b]
\begin{minipage}{\largeurimage}
\begin{asy}
size(4cm,0);
draw(unitcircle,red);
\end{asy}
\end{minipage}
\end{alignementvert}

\begin{enumerate}
\item
\setlength{\largeurimage}{4cm}
\begin{alignementvert}[T]%
\begin{minipage}{\linewidth-\largeurimage-1cm}
\lipsum[0-1]
\end{minipage}
\end{alignementvert}
\hfill
\begin{alignementvert}[T]
\begin{minipage}{\largeurimage}
\begin{asy}
size(4cm,0);
draw(polygon(7),blue);
\end{asy}
\end{minipage}
\end{alignementvert}
\item Cela fonctionne bien, non ?
\end{enumerate}
\end{document}
FP
Cela m'a l'air très bien : merci beaucoup.

Et je viens de réaliser que la minipage autour de l'environnement asy ne semble plus utile.
(Je ne sais plus quand et pourquoi... je l'avais ajoutée. Il faudra que je réessaie avec une figure tikz... et avec du texte au dessus et en dessous de la figure.)

Code : Tout sélectionner

\documentclass[11pt]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage[a4paper,%
landscape=false,%
hmargin={1cm,1cm},%
vmargin={1cm,1cm},%
headheight=15pt,%
includeheadfoot]{geometry}
\usepackage{graphics,asymptote}
\usepackage{calc}
\usepackage{lipsum}
\setlength{\parindent}{0pt}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% PLACEMENT VERTICAL DES IMAGES ET TABLEAUX %%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% Définition de la commande \alignevert (ajout du 28/03/09)
%%%% \alignevert[c]{objet} place le centre de l'objet au milieu d'un x
%%%% \alignevert[b]{objet} place le bas de l'objet sur la ligne de base
%%%% \alignevert[t]{objet} place le haut de l'objet sur la ligne de base
%%%% \alignevert[T]{objet} place le haut de l'objet au niveau du haut d'un H
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\largeurimage}
\setlength{\largeurimage}{5cm}
\makeatletter
\newlength{\temp@alignevert@length}
\newsavebox{\temp@alignevert@box}
\long\def\alignevert[#1]#2{%
\sbox{\temp@alignevert@box}{#2}%
\ifx#1c%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}/2*(-1)+0.5ex}%
\else\ifx#1t%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)}%
\else\ifx#1T%
\setlength{\temp@alignevert@length}{\heightof{\usebox\temp@alignevert@box}*(-1)+\heightof{I}}%
\else\ifx#1b%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\else\PackageWarning{alignevert}{option #1 unknown, using b instead}%
\setlength{\temp@alignevert@length}{\depthof{\usebox\temp@alignevert@box}}%
\fi\fi\fi\fi
\raisebox{\temp@alignevert@length}{\usebox\temp@alignevert@box}%
}

\newsavebox{\sfe@box}
\newenvironment{alignementvert}[1][c]{%
\ifx#1b\gdef\place{0}\else\ifx#1c\gdef\place{1}\else\ifx#1t\gdef\place{2}\else\ifx#1T\gdef\place{3}\fi\fi\fi\fi%
\setbox\sfe@box\hbox\bgroup\color@setgroup}%
{\color@endgroup\egroup%
\ifcase\place
\alignevert[b]{\usebox{\sfe@box}}%
\or
\alignevert[c]{\usebox{\sfe@box}}%
\or
\alignevert[t]{\usebox{\sfe@box}}%
\or
\alignevert[T]{\usebox{\sfe@box}}%
\fi}
\makeatother


\begin{document}

\setlength{\largeurimage}{4cm}
\begin{alignementvert}[b]
\begin{minipage}{\linewidth-\largeurimage-1cm}
\lipsum[0-1]
\end{minipage}
\end{alignementvert}
\hfill
\begin{alignementvert}[b]
\begin{asy}
size(4cm,0);
draw(unitcircle,purple);
\end{asy}
\end{alignementvert}

\begin{enumerate}
\item
\setlength{\largeurimage}{4cm}
\begin{alignementvert}[T]%
\begin{minipage}{\linewidth-\largeurimage-1cm}
\lipsum[0-1]
\end{minipage}
\end{alignementvert}
\hfill
\begin{alignementvert}[T]
\begin{asy}
size(4cm,0);
draw(polygon(9),orange);
\end{asy}
\end{alignementvert}
\item Cela fonctionne bien, non ?
\end{enumerate}
\end{document}