Page 1 sur 1

Du texte à côté d'une image Asymptote dans un tex

Posté : sam. 19 juin 2010, 17:01
par GM
Deux problèmes :

1. Si, dans un fichier tex, vous avez essayé de créer une fonction pour mettre facilement du texte à côté d'une image (créée avec Asymptote via l'environnement asy), vous avez dû vous apercevoir qu'il y des problèmes de compilation.

Je répète bêtement ce qu'un autre a écrit intelligemment :
L'environnment asy est basé sur comments et est très chatouilleux, il n'accepte pas d'être en argument.


2. Si vous avez utilisé des environnements asymptote et/ou tikz avec des minipages juxtaposées, vous avez probablement rencontré des problèmes de positionnements du texte par rapport à l'image, car la figure, ainsi définie, est considérée comme une ligne de texte... et sa hauteur réelle n'est pas prise en compte ... ce qui fausse le positionnement.

Une proposition de solution, qui ne résout pas tout, à défaut de mieux pour l'instant :

  1. mettre dans un fichier de macros personnelles, le code suivant :

    Code : Tout sélectionner

    \newlength{\larg}
    \setlength{\larg}{5cm}
    %%%%%%% D'après une excellente idée de PG sur Mathematex
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%% 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
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \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}%
    }
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%% Ajout, pour le pb d'Asymptote, grâce à OG et FP sur Mathematex
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%% \begin{aliver}[c]...\end{aliver}
    %%%% \begin{aliver}[b]...\end{aliver}
    %%%% \begin{aliver}[t]...\end{aliver}
    %%%% \begin{aliver}[T]...\end{aliver}
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \newsavebox{\sfe@box}
    \newenvironment{aliver}[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

  2. et s'en servir avec des choses comme cela :

    Code : Tout sélectionner

    % \setlength{\larg}{.4\linewidth} %% on définira une valeur de \larg par défaut de son choix dans le fichier de macros.

    \begin{aliver}[T]  %%% les possibilités sont : [c]ou[b]ou[t]ou[T]
      \begin{minipage}{\linewidth-\larg-.5cm}
      •
      %%% texte, tableau ou figure %%%
      •
      \end{minipage}%
    \end{aliver}\hfill
    \begin{aliver}[T]
      %\begin{minipage}{\larg}
      •
      %%% texte, tableau ou figure %%%
      •
      %\end{minipage}%
    \end{aliver}

  • La seconde minipage n'est pas utile lorsque l'on souhaite mettre un environnement asy dans le second environnement aliver ;
  • On renommera bien sûr l'environnement aliver(alignement vertical) comme on veut... sachant que cela ne résout pas qu'un problème avec l'environnement asy : cela règle celui aussi des figures tikz. Pour ces dernières, la commande alignevert (définie initialement par PG) a le même effet ;
  • Toutes les suggestions d'améliorations sont les bienvenues.

Attention : les questions relatives à ce sujet sont à déposer dans le sous-forum, "Les demandes d'aide".
Il suffit de citer le sujet concerné en copiant-collant son lien : http://asy.gmaths.net/forum/autres-exemples-f23/du-texte-a-cote-d-une-image-asymptote-dans-un-tex-t106.html#p875.