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

Exemples inclassables dans les sous-forums précédents...
... et des trucs et astuces à connaitre.
Règles du forum
ATTENTION ! Il est demandé de ne déposer dans ce forum que des exemples en langage Asymptote
  • finalisés
  • que l'on pense intéressants et optimisés
  • et qui se rapportent au thème du forum.
Si certains exemples déposés donnent lieu à de nombreuses modifications, ils seront déplacés et remplacés par un nouveau sujet dans ce forum avec la ou les meilleures propositions.
Pour les demandes d'aide ... il y a un forum spécifique !
Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1512
Enregistré le : dim. 7 mars 2010, 14:50

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

Message non lu par GM » sam. 19 juin 2010, 17:01

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.
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