Alignement de figures avec du texte
2 participants
Page 1 sur 1
Alignement de figures avec du texte
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 :
"Argument of \verbatim@ has an extra }.<inserted text> \par \end{texgraph}"
le code :
j'ai essayé alors avec minipage
Comment procéder ?
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}
"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}
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}
Comment procéder ?
toumouye- Nombre de messages : 40
Age : 49
Date d'inscription : 13/10/2008
Re: Alignement de figures avec du texte
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}
Re: Alignement de figures avec du texte
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 : 49
Date d'inscription : 13/10/2008
Re: Alignement de figures avec du texte
Ah oui! J'oubliais, il y a aussi une solution "moche":
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.
- 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.
Re: Alignement de figures avec du texte
Merci Patrick, ça a le mérite de faire ce que je voulais !
toumouye- Nombre de messages : 40
Age : 49
Date d'inscription : 13/10/2008
Re: Alignement de figures avec du texte
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).
Re: Alignement de figures avec du texte
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:
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:
cela peut donner des idées pour d'autres situations analogues.
- 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.
Re: Alignement de figures avec du texte
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}:
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:
donne:
On pourrait aussi envisager d'ajouter un second argument qui correspondrait aux arguments à mettre après le graphique.
- 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.
Re: Alignement de figures avec du texte
En effet, cela fonctionne merci ! Cependant, il y a des limitations que je ne saurais expliquer.
Par exemple, le code
Afin de faire une syntaxe plus courte, j'ai fait le code suivant :
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}
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}
toumouye- Nombre de messages : 40
Age : 49
Date d'inscription : 13/10/2008
Re: Alignement de figures avec du texte
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 : 49
Date d'inscription : 13/10/2008
Re: Alignement de figures avec du texte
- 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 : 49
Date d'inscription : 13/10/2008
Re: Alignement de figures avec du texte
J'ai apporté les modifs suivantes dans texgraph.sty
Le code
- 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}
toumouye- Nombre de messages : 40
Age : 49
Date d'inscription : 13/10/2008
Re: Alignement de figures avec du texte
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:
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}
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum