Discussion:
Superposition & subfigures
(trop ancien pour répondre)
Mathieu G
2007-09-29 20:55:07 UTC
Permalink
Bonjour,

Je souhaiterai obtenir une figure constituée de 3 subfigures, et
disposées de telle sorte que:

¤ sur chaque figure, une box remplie de blanc avec les références (a),
(b) ou (c) viennent se superposer ds le coin haut/gauche de chaque
subfigure...

¤ les textes de légende ne soient pas alignés/groupés avec leur figure
respective [dans l'idéal j'aimerai pouvoir utiliser la version
courte/optionnelle du caption pour les entrées de la LOF...]

Est-ce possible? Aucune de mes recherches/lectures n'aboutit, je
commence à désespérer.

Merci de toute piste que vous pourriez me donner!

Salutations,

Mathieu
Mathieu G
2007-09-29 21:03:44 UTC
Permalink
Post by Mathieu G
Bonjour,
Je souhaiterai obtenir une figure constituée de 3 subfigures, et
¤ sur chaque figure, une box remplie de blanc avec les références (a),
(b) ou (c) viennent se superposer ds le coin haut/gauche de chaque
subfigure...
¤ les textes de légende ne soient pas alignés/groupés avec leur figure
respective [dans l'idéal j'aimerai pouvoir utiliser la version
courte/optionnelle du caption pour les entrées de la LOF...]
Est-ce possible? Aucune de mes recherches/lectures n'aboutit, je
commence à désespérer.
Merci de toute piste que vous pourriez me donner!
Salutations,
Mathieu
J'ai oublié un ECM qui m'a été proposé sur un autre newsgroup.
Il correspond tout à fait à ce que je voudrais à la différence près que
je souhaiterai obtenir les références (a), (b) et (c), à l'intérieur de
l'image, sur fond blanc:


\documentclass{article}
\usepackage{caption,subfig,graphicx,lipsum}
\captionsetup[figure]{labelformat=empty}
\captionsetup[subfloat]{%
singlelinecheck=false%
,margin=0pt%
,labelsep=none%
,labelformat=parens%
,captionskip=0pt%
,position=top%
}
\begin{document}
\begin{figure}
\subfloat[LOF Entry
1][]{\includegraphics[width=.4\textwidth]{Lena}\label{fig:1}}%
\hfill%
\subfloat[LOF Entry
2][]{\includegraphics[width=.4\textwidth]{Lena}\label{fig:2}}%
\\%
\subfloat[LOF Entry
3][]{\includegraphics[width=.4\textwidth]{Lena}\label{fig:3}}%
\hfill%
\begin{minipage}[t]{0.4\textwidth}%
\caption[LOF Main Entry]{%
\subref{fig:1} is very nice;\\%
\subref{fig:2} is nicer still;\\%
\subref{fig:3} is the nicest of them all!%
}%
\label{fig:test}%
\end{minipage}
\end{figure}
\lipsum
\end{document}
Jean-Côme Charpentier
2007-09-30 01:07:42 UTC
Permalink
Post by Mathieu G
[...]
J'ai oublié un ECM qui m'a été proposé sur un autre newsgroup.
Il correspond tout à fait à ce que je voudrais à la différence près que
je souhaiterai obtenir les références (a), (b) et (c), à l'intérieur de
C'est un peu plus compliqué que prévu parce que si on demande uen
légende en haut des sous-figures, la légende est composée *avant* la
figure, donc, si on place la légende au niveau de la figure, l'image va
écraser la légende. Pas tip top.
Donc, pas trop le choix : ou on fait des bidouilles infâmes dans
l'extension subfig (ou caption), ou on place la légende en bas. Je
prends la seconde option.
Pour avoir quand même la légende placée plutôt en haut de l'image, il
va falloir effectuer des décalages. Ceux-ci sont précisés avec les
longueurs \decalageh et \decalagev (point de référence = coin inférieur
gauche de l'image, décalages positifs vers la droite et vers le haut).
Celui qui fait tout le boulot, c'est le \DeclareCaptionLabelFormat qui
permet toute les fantaisies (ou presque). Désolé pour l'aspect assez
Plain TeX du code. Il est tard et j'ai la flemme de traduire cela en bon
LaTeX (à coup de \makebox et autre \parbox). L'idée, c'est que la
légende est composée dans une boîte de largeur et de hauteur nulle mais
avec de gros décalage de son contenu.
Voili-voilou. À part cette définition, le code est comme le votre,
sauf le labelformat=number et le position=bottom. J'i aussi ajouté un
labelsep=none pour la légende principale, sinon on avait un deux-points
qui traînait bêtement tout seul. Évidemment, il faut indiquer les
valeurs de \decalageh et \decalagev avant que les légendes ne soient
composer. Ces valeurs ont été prises en tenant compte de l'image lena,
une autre image demandera certainement d'autres valeurs.

\documentclass{article}
\usepackage{caption,subfig,graphicx,lipsum}
\captionsetup[figure]{labelformat=empty, labelsep=none}
\usepackage{xcolor}
\newlength{\decalageh}
\newlength{\decalagev}
\DeclareCaptionLabelFormat{number}{%
\hbox to 0pt{%
\vbox to 0pt{\vss
\hspace*{\decalageh}\colorbox{white}{#2}
\vspace*{\decalagev}%
}%
\hss
}%
}
\captionsetup[subfloat]{%
singlelinecheck=false,
margin=0pt,
labelsep=none,
labelformat=number,
captionskip=0pt,
position=bottom
}

\begin{document}
\begin{figure}
\setlength{\decalagev}{4.3cm}
\setlength{\decalageh}{1em}
\subfloat[LOF Entry 1][]
{\includegraphics[width=.4\textwidth]{lena}\label{fig:1}}%
\hfill%
\subfloat[LOF Entry 2][]
{\includegraphics[width=.4\textwidth]{lena}\label{fig:2}}%
\\%
\subfloat[LOF Entry 3][]
{\includegraphics[width=.4\textwidth]{lena}\label{fig:3}}%
\hfill%
\begin{minipage}[b]{0.4\textwidth}%
\caption[LOF Main Entry]{%
\subref{fig:1} is very nice;\\%
\subref{fig:2} is nicer still;\\%
\subref{fig:3} is the nicest of them all!%
}%
\label{fig:test}%
\end{minipage}
\end{figure}
\lipsum
\end{document}

Jean-Côme Charpentier
--
C'est facile de donner de bonnes solutions compliquées, mais le summum
du snobisme sur fctt c'est quand même de donner une mauvaise solution
simple :
-+- Guillaume C. in fr.comp.text.tex -+-
Mathieu G
2007-10-02 13:56:00 UTC
Permalink
Post by Jean-Côme Charpentier
Post by Mathieu G
[...]
J'ai oublié un ECM qui m'a été proposé sur un autre newsgroup.
Il correspond tout à fait à ce que je voudrais à la différence près que
je souhaiterai obtenir les références (a), (b) et (c), à l'intérieur de
C'est un peu plus compliqué que prévu parce que si on demande uen
légende en haut des sous-figures, la légende est composée *avant* la
figure, donc, si on place la légende au niveau de la figure, l'image va
écraser la légende. Pas tip top.
Donc, pas trop le choix : ou on fait des bidouilles infâmes dans
l'extension subfig (ou caption), ou on place la légende en bas. Je
prends la seconde option.
Pour avoir quand même la légende placée plutôt en haut de l'image, il
va falloir effectuer des décalages. Ceux-ci sont précisés avec les
longueurs \decalageh et \decalagev (point de référence = coin inférieur
gauche de l'image, décalages positifs vers la droite et vers le haut).
Celui qui fait tout le boulot, c'est le \DeclareCaptionLabelFormat qui
permet toute les fantaisies (ou presque). Désolé pour l'aspect assez
Plain TeX du code. Il est tard et j'ai la flemme de traduire cela en bon
LaTeX (à coup de \makebox et autre \parbox). L'idée, c'est que la
légende est composée dans une boîte de largeur et de hauteur nulle mais
avec de gros décalage de son contenu.
Voili-voilou. À part cette définition, le code est comme le votre,
sauf le labelformat=number et le position=bottom. J'i aussi ajouté un
labelsep=none pour la légende principale, sinon on avait un deux-points
qui traînait bêtement tout seul. Évidemment, il faut indiquer les
valeurs de \decalageh et \decalagev avant que les légendes ne soient
composer. Ces valeurs ont été prises en tenant compte de l'image lena,
une autre image demandera certainement d'autres valeurs.
\documentclass{article}
\usepackage{caption,subfig,graphicx,lipsum}
\captionsetup[figure]{labelformat=empty, labelsep=none}
\usepackage{xcolor}
\newlength{\decalageh}
\newlength{\decalagev}
\DeclareCaptionLabelFormat{number}{%
\hbox to 0pt{%
\vbox to 0pt{\vss
\hspace*{\decalageh}\colorbox{white}{#2}
\vspace*{\decalagev}%
}%
\hss
}%
}
\captionsetup[subfloat]{%
singlelinecheck=false,
margin=0pt,
labelsep=none,
labelformat=number,
captionskip=0pt,
position=bottom
}
\begin{document}
\begin{figure}
\setlength{\decalagev}{4.3cm}
\setlength{\decalageh}{1em}
\subfloat[LOF Entry 1][]
{\includegraphics[width=.4\textwidth]{lena}\label{fig:1}}%
\hfill%
\subfloat[LOF Entry 2][]
{\includegraphics[width=.4\textwidth]{lena}\label{fig:2}}%
\\%
\subfloat[LOF Entry 3][]
{\includegraphics[width=.4\textwidth]{lena}\label{fig:3}}%
\hfill%
\begin{minipage}[b]{0.4\textwidth}%
\caption[LOF Main Entry]{%
\subref{fig:1} is very nice;\\%
\subref{fig:2} is nicer still;\\%
\subref{fig:3} is the nicest of them all!%
}%
\label{fig:test}%
\end{minipage}
\end{figure}
\lipsum
\end{document}
Jean-Côme Charpentier
Bonjour,
Comme d'habitude, ca marche du feu de Dieu, merci!
Cependant je dois avoir un conflit avec mes paramètres de figures, c.f.
ECM suivant. Ds le block de 3 figures, je n'obtiens plus la légende en
position [2,2] comme avec l'ECM précédent.
Je poursuis mes recherches mais si qqun a un conseil, je suis preneur!
Aussi qqun aurait il des information quant à la traduction de la
documentation floatrow?
Salutations,
Mathieu

\documentclass[12pt,fleqn]{book}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[english]{babel}
\usepackage{lipsum,xcolor}
\usepackage{floatrow,caption,graphicx,subfig}
%For the blocks of 3 floats + 1 caption:
\newlength{\ShiftHori}\newlength{\ShiftVert}
\DeclareCaptionLabelFormat{SubFigRef}{%
\hbox to 0pt{\vbox to
0pt{\vss\hspace*{\ShiftHori}\colorbox{white}{#2}\vspace*{\ShiftVert}}\hss}%
}


\begin{document}
\setcounter{lofdepth}{2}
%\floatsetup[figure]{capbesidewidth=sidefill}
\floatplacement{figure}{H}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\InsFig}[5]{%
\begin{figure}%
\floatbox[\capbeside]{figure}[\FBwidth]%
{\caption[#4]{#5}\label{#2}}%
{\includegraphics[width=#1 \textwidth]{./Figures/#3}}%
\end{figure}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\captionsetup{
format=hang
,margin=0pt
,indention=-15mm
,labelfont=bf
,textfont=it
,font=footnotesize
,labelsep=endash
,justification=justified
,singlelinecheck=true
,aboveskip=15pt
,belowskip=0pt
}
\captionsetup[subfloat]{
singlelinecheck=false
,labelsep=none
,labelformat=SubFigRef
,captionskip=0pt
,position=bottom
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\listoffigures
\InsFig{.33}{Label1}{Lena}{ShortCaption1}{LongCaption1\\\lipsum[2]}
\newpage
\InsFig{.50}{Label2}{Lena}{ShortCaption2}{LongCaption2\\\lipsum[2]}
\newpage
\InsFig{.66}{Label3}{Lena}{ShortCaption3}{LongCaption3\\\lipsum[2]}
\newpage
\begin{figure}
\setlength{\ShiftVert}{55mm}%Value to be adjusted manually
\setlength{\ShiftHori}{1em}
\subfloat[LOF Entry
a][]{\includegraphics[width=.475\textwidth]{./Figures/Lena}\label{fig:block:a}}\hfill%
\subfloat[LOF Entry
b][]{\includegraphics[width=.475\textwidth]{./Figures/Lena}\label{fig:block:b}}\\%
\subfloat[LOF Entry
c][]{\includegraphics[width=.475\textwidth]{./Figures/Lena}\label{fig:block:c}}\hfill%
\begin{minipage}[b]{.475\textwidth}%
\caption[LOF Main Entry]{%
\lipsum[2]%
\subref{fig::a} is very nice;\\%
\subref{fig::b} is nicer still;\\%
\subref{fig::c} is the nicest of them all!%
}\label{fig:block}%
\end{minipage}
\end{figure}
\end{document}
Mathieu G
2007-11-02 11:24:08 UTC
Permalink
Post by Mathieu G
Bonjour,
Comme d'habitude, ca marche du feu de Dieu, merci!
Cependant je dois avoir un conflit avec mes paramètres de figures, c.f.
ECM suivant. Ds le block de 3 figures, je n'obtiens plus la légende en
position [2,2] comme avec l'ECM précédent.
Je poursuis mes recherches mais si qqun a un conseil, je suis preneur!
Aussi qqun aurait il des information quant à la traduction de la
documentation floatrow?
Salutations,
Mathieu
\documentclass[12pt,fleqn]{book}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[english]{babel}
\usepackage{lipsum,xcolor}
\usepackage{floatrow,caption,graphicx,subfig}
\newlength{\ShiftHori}\newlength{\ShiftVert}
\DeclareCaptionLabelFormat{SubFigRef}{%
\hbox to 0pt{\vbox to
0pt{\vss\hspace*{\ShiftHori}\colorbox{white}{#2}\vspace*{\ShiftVert}}\hss}%
}
\begin{document}
\setcounter{lofdepth}{2}
%\floatsetup[figure]{capbesidewidth=sidefill}
\floatplacement{figure}{H}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\InsFig}[5]{%
\begin{figure}%
\floatbox[\capbeside]{figure}[\FBwidth]%
{\caption[#4]{#5}\label{#2}}%
{\includegraphics[width=#1 \textwidth]{./Figures/#3}}%
\end{figure}}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\captionsetup{
format=hang
,margin=0pt
,indention=-15mm
,labelfont=bf
,textfont=it
,font=footnotesize
,labelsep=endash
,justification=justified
,singlelinecheck=true
,aboveskip=15pt
,belowskip=0pt
}
\captionsetup[subfloat]{
singlelinecheck=false
,labelsep=none
,labelformat=SubFigRef
,captionskip=0pt
,position=bottom
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\listoffigures
\InsFig{.33}{Label1}{Lena}{ShortCaption1}{LongCaption1\\\lipsum[2]}
\newpage
\InsFig{.50}{Label2}{Lena}{ShortCaption2}{LongCaption2\\\lipsum[2]}
\newpage
\InsFig{.66}{Label3}{Lena}{ShortCaption3}{LongCaption3\\\lipsum[2]}
\newpage
\begin{figure}
\setlength{\ShiftVert}{55mm}%Value to be adjusted manually
\setlength{\ShiftHori}{1em}
\subfloat[LOF Entry
a][]{\includegraphics[width=.475\textwidth]{./Figures/Lena}\label{fig:block:a}}\hfill%
\subfloat[LOF Entry
b][]{\includegraphics[width=.475\textwidth]{./Figures/Lena}\label{fig:block:b}}\\%
\subfloat[LOF Entry
c][]{\includegraphics[width=.475\textwidth]{./Figures/Lena}\label{fig:block:c}}\hfill%
\begin{minipage}[b]{.475\textwidth}%
\caption[LOF Main Entry]{%
\lipsum[2]%
\subref{fig::a} is very nice;\\%
\subref{fig::b} is nicer still;\\%
\subref{fig::c} is the nicest of them all!%
}\label{fig:block}%
\end{minipage}
\end{figure}
\end{document}
Bonjour,

Je m'en sors pas je ne vois aucune raison pour ce dysfonctionnement.
Personne n'a d'indice à me donner SVP?

Salutations,

Mathieu

Loading...