Alignement de figures avec du texte

Voir le sujet précédent Voir le sujet suivant Aller en bas

Alignement de figures avec du texte

Message  toumouye le Sam 18 Oct - 19:17

Bonjour,

Je souhaiterais encapsuler le code texgraph dans une boîte afin de pouvoir déplacer une figure, mais je n'y arrive pas.

Concrètement en utilisant le code :
Code:

\begin{enumerate}
\item Le texte est au milieu. La figure ne l'est pas.
\raisebox{-2cm}{
\begin{texgraph}[export=pgf]
Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0,0,0,0),
FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
\end{texgraph}
}
\end{enumerate}
produit une erreur à la compilation.
"Argument of \verbatim@ has an extra }.<inserted text> \par \end{texgraph}"

le code :
Code:

\begin{enumerate}
\item Le texte est au milieu. La figure ne l'est pas.
\parbox[b]{2cm}{
\begin{texgraph}[export=pgf]
Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0,0,0,0),
FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
\end{texgraph}
}
\end{enumerate}
produit également une erreur.

j'ai essayé alors avec minipage
Code:

\begin{enumerate}
\item Le texte est au milieu. La figure ne l'est pas.
\begin{minipage}[t]{4cm}
\begin{texgraph}[export=pgf]
Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0,0,0,0),
FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
\end{texgraph}
\end{minipage}
\end{enumerate}
Il n'y a pas d'erreur à la compilation, le texte est bien aligné avec le numéro, mais la figure n'est pas en position top. Que l'on mette \begin{minipage}[b] ou \begin{minipage}[t], cela ne change rien ?

Comment procéder ?

toumouye

Nombre de messages : 40
Age : 41
Date d'inscription : 13/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  P.Fradin le Sam 18 Oct - 19:42

toumouye a écrit:Bonjour,

Je souhaiterais encapsuler le code texgraph dans une boîte afin de pouvoir déplacer une figure, mais je n'y arrive pas.

Concrètement en utilisant le code :
Il n'y a pas d'erreur à la compilation, le texte est bien aligné avec le numéro, mais la figure n'est pas en position top. Que l'on mette \begin{minipage}[b] ou \begin{minipage}[t], cela ne change rien ?

Comment procéder ?

Bonjour toumouye,

Certaines commandes ne supportent pas de verbatim dans leur argument, comme raisebox, parbox, ..., mais je vais me renseigner, je crois qu'il y a une parade (d'ailleurs j'en profite pour signaler que ce même problème se pose aussi pour Asymptote).

Sinon ton idée d'une minipage est bonne, mais si tu veux qu'elle soit centrée verticalement il ne faut pas mettre d'option (ou plutôt c'et l'option par défaut). Par exemple, chez ce code fonctionne:

Code:

\begin{enumerate}
\item Le texte est au milieu. La figure ne l'est pas.
\begin{minipage}{4cm}
\begin{texgraph}[export=pgf]
Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0,0,0,0),
FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
\end{texgraph}
\end{minipage}
\end{enumerate}

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  toumouye le Sam 18 Oct - 19:50

Justement, je ne la veux pas centrée. Je voudrais que le haut de la figure soit aligné avec le texte, lui même aligné avec le numéro de enumerate !

toumouye

Nombre de messages : 40
Age : 41
Date d'inscription : 13/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  P.Fradin le Sam 18 Oct - 19:51

Ah oui! J'oubliais, il y a aussi une solution "moche":

Code:

\begin{texgraph}[name=figure1,export=pgf,auto=false]
Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0,0,0,0),
FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
\end{texgraph}

\begin{enumerate}
\item Le texte est au milieu. La figure ne l'est pas.
\raisebox{-2cm}{
\input{figure1.pgf}
}
\end{enumerate}

on crée le graphique en dehors du raisebox, on empêche l'input automatique avec l'option auto=false, et on charge soi-même le graphique dans le raisebox.

PS: cela montre au passage qu'un graphique créé une fois peut-être utilisé plusieurs fois dans un document.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  toumouye le Sam 18 Oct - 19:59

Merci Patrick, ça a le mérite de faire ce que je voulais !

toumouye

Nombre de messages : 40
Age : 41
Date d'inscription : 13/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  P.Fradin le Sam 18 Oct - 20:10

En fait le problème vient du minipage, et je pense que c'est peut-être liè au fait qu'il ne connait pas à l'avance la hauteur de son contenu (mais je ne suis pas sûr).

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  P.Fradin le Sam 18 Oct - 22:54

Bon, en fouillant la doc du package subfig (qui parle de ce problème d'arguments contenant du verbatim), j'ai trouvé un moyen de contourner le problème pour raisebox (mais on peut l'adapter à d'autres commandes). Avant le \begin{document}, on déclare un nouvel environnement que j'ai appelé Raisebox, défini par:

Code:

\makeatletter
\newbox\fig@box
\newenvironment{Raisebox}[1]%
  {\def\sf@one{#1}%
  \setbox\fig@box\hbox
    \bgroup}%
  {\egroup
  \raisebox{\sf@one}{\box\fig@box}
  }%
\makeatother

cet environnement prend un argument, c'est le premier argument habituel de raisebox, puis on met tout le contenu de l'environnement dans une boite (appelée \fig@box), puis quand c'est fait, on appelle raisebox avec le premier argument (\sf@one) et le contenu de la boite (qui contient le graphique). Exemple:

Code:

\begin{enumerate}
\item Le texte est au milieu. La figure ne l'est pas
\begin{Raisebox}{-2.4cm}
  \begin{texgraph}[name=figure1,export=pgf]
  Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0,0,0,0),
  FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
  LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
  A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
  \end{texgraph}
\end{Raisebox}

\end{enumerate}

cela peut donner des idées pour d'autres situations analogues.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  P.Fradin le Dim 19 Oct - 0:10

Je continue à peaufiner, cette fois-ci plus la peine de faire un nouvel environnement pour chaque commande à problème. Voici l'environnement à déclarer avant le \begin{document}:

Code:

\makeatletter
\newbox\fig@box
\newenvironment{execbox}[1]%
  {\def\sf@one{#1}%
  \setbox\fig@box\hbox
    \bgroup}%
  {\egroup
  \sf@one{\box\fig@box}
  }%
\makeatother

cet environnement prend un argument qui est la commande dans laquelle on veut mettre le code texgraph. Par exemple si on tape: \fbox{\begin{texgraph}...\end{texgraph}}: plantage à cause du verbatim, mais si on fait:

\begin{execbox}{\fbox}
\begin{texgraph}...\end{texgraph}
\end{execbox}


plus de problème, on a bien le graphique avec un cadre.

Exemple avec subfloat (package subfig) et raisebox:

Code:

\begin{figure}
\centering
\begin{execbox}{\subfloat[exemple1]}
\begin{texgraph}[name=figure1,export=pgf]
   Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0,0,0,0),
   FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
   LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
   A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
\end{texgraph}
\end{execbox}
\begin{execbox}{\subfloat[exemple2]}
\begin{texgraph}[name=figure1,export=pgf]
   Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0,0,0,0),
   FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
   LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
   A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
\end{texgraph}
\end{execbox}
\caption{essai}
\end{figure}

\begin{enumerate}
\item Le texte est au milieu. La figure ne l'est pas
\begin{execbox}{\raisebox{-2.4cm}}
\begin{texgraph}[name=figure6,export=pgf]
   Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0,0,0,0),
   FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
   LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
   A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
   \end{texgraph}
\end{execbox}

\end{enumerate}

donne:

On pourrait aussi envisager d'ajouter un second argument qui correspondrait aux arguments à mettre après le graphique.

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  toumouye le Dim 19 Oct - 1:36

En effet, cela fonctionne merci ! Cependant, il y a des limitations que je ne saurais expliquer.

Par exemple, le code
Code:

\begin{document}

\begin{execbox}{}
  \begin{texgraph}[export=pgf]
Fenetre(-1.5+1.5*i,2.5-2.5*i,0.8*(1+0.8*i)),Marges(0,0,0.5,0),
FillStyle:=none, Arrows:=1, xylabelpos:=top+left,Axes(0,1+i,2),
LabelAxe(x, Xmax, "$x$", 2),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
A:=Seq(t+i*(t^4/4-2*t^2/2+1.3*t^2/2+0.2*t-0.6),t,-2,4,0.05), Color:=black, Ligne(A,0),
\end{texgraph}
\end{execbox}

\end{document}
fonctionne, ce qui est pratique si on veut mettre une figure dans un tableau par ex.

Afin de faire une syntaxe plus courte, j'ai fait le code suivant :

Code:

\newcommand{\texgraphbox}[1]{ %
 \begin{execbox}{}
 \begin{texgraph}[export=pgf]
 #1 \end{texgraph} \end{execbox}
}

\begin{document}

\texgraphbox{
Fenetre(-1.5+1.5*i,2.5-2.5*i,0.8*(1+0.8*i)),Marges(0,0,0,0),
FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
A:=Seq(t+i*(t^3-2*t+1.3*t+0.2),t,-2,4,0.05), Color:=black, Ligne(A,0),
}

\end{document}
qui se solde par un message d'erreur. Je ne vois pas pourquoi. Même problème avec \newenvironment

toumouye

Nombre de messages : 40
Age : 41
Date d'inscription : 13/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  toumouye le Dim 19 Oct - 5:27

On pourrait imaginer une modification dans le fichier texgraph.sty afin d'obtenir une sortie qui soit directement dans une boîte ?

toumouye

Nombre de messages : 40
Age : 41
Date d'inscription : 13/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  toumouye le Dim 19 Oct - 5:46

Code:

\newenvironment{texgraph}[1][]{%
\addtocounter{imgcount}{1}
\setkeys{Tg}{#1}%
\setbox\fig@box\hbox
\bgroup
\bgroup
\@dep}%
{\@enddep%
\egroup%
\@loading
\egroup
\fbox{\raisebox{0cm}{\box\fig@box}}
}%

Ce code fonctionne, il ne reste plus qu'à mettre un paramètre à la place de la commande \raisebox{0cm}

toumouye

Nombre de messages : 40
Age : 41
Date d'inscription : 13/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  toumouye le Dim 19 Oct - 6:47

J'ai apporté les modifs suivantes dans texgraph.sty

Code:

\define@key{Tg}{cmd}{\def\@cmd{#1}}%
\define@key{Tg}{cmdii}{\def\@cmdii{#1}}%


...

\ifDefaultCall
\presetkeys{Tg}{name=\jobname\theimgcount,export=\DefaultExport,call,auto,file=false,cmd=\raisebox{0cm},cmdii=\raisebox{0cm}}{}%
\else
\presetkeys{Tg}{name=\jobname\theimgcount,export=\DefaultExport,call=false,auto,file=false,cmd=\raisebox{0cm},cmdii=\raisebox{0cm}}{}%
\fi

\newbox\fig@box

\newenvironment{texgraph}[1][]{%
 \addtocounter{imgcount}{1}
 \setkeys{Tg}{#1}%
 \setbox\fig@box\hbox
 \bgroup
 \bgroup
 \@dep}%
 {\@enddep%
 \egroup%
 \@loading
 \egroup
 \@cmdii{\@cmd{\box\fig@box}}
}%




Le code

Code:

\begin{enumerate}
\item bonjour
\begin{texgraph}[cmd=\raisebox{-5cm},cmdii=\fbox]
Fenetre(-1.5+1.5*i,2.5-2.5*i,0.8*(1+0.8*i)),Marges(0,0,0.5,0),
FillStyle:=none, Arrows:=1, xylabelpos:=top+right,Axes(0,1+i,0),
LabelAxe(x, Xmax, "$x$", 2),LabelAxe(y, i*Ymax, "$y$",1),Arrows:=0,
A:=Seq(t+i*(t^4/4-2*t^2/2+1.3*t^2/2+0.5*t-0.6),t,-2,4,0.05), Color:=black, Ligne(A,0)
\end{texgraph}
\end{enumerate}
est alors fonctionnel et produit une figure décalée vers le bas, l'encadré étant fait sur la figure + le décalement.

toumouye

Nombre de messages : 40
Age : 41
Date d'inscription : 13/10/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  P.Fradin le Dim 19 Oct - 12:15

Bonjour toumouye,

C'est bien ce que j'ai l'intention de faire dans le texgraph.sty, par contre j'ai mis par défaut cmd et cmdii à vide.

Une remarque: on peut faire l'encadré directement dans le graphique avec la commande Border(1), mais s'il y a des graduations il vaut mieux mettre une petite marge d'abord:

Code:

\begin{texgraph}[name=figure3, cmd=\raisebox{-2.9cm}, export=pgf]
   Fenetre(-0.8+3.5*i,3.5-0.5*i,0.6*(1+i)),Marges(0.25,0.25,0.25,0.25), Border(1),
   FillStyle:=none, Arrows:=1, xylabelpos:=bottom+left,Axes(0,1+i,2),
   LabelAxe(x, Xmax, "$x$", 1),LabelAxe(y, i*Ymax, "$y$",2),Arrows:=0,
   A:=Seq(t+i*((t-1)^2-3*(t-1)+2),t,-2,4,0.01), Color:=black, Ligne(A,0),
\end{texgraph}

_________________
P.Fradin

P.Fradin
Admin

Nombre de messages : 1133
Age : 55
Date d'inscription : 19/01/2008

Voir le profil de l'utilisateur http://texgraph.tuxfamily.org/

Revenir en haut Aller en bas

Re: Alignement de figures avec du texte

Message  Contenu sponsorisé Aujourd'hui à 5:56


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum