Je souhaite composer un article illustré de vignettes plus ou moins grandes.

Pour ce faire, j'aimerais délimiter une marge dans laquelle elles viendraient s'insérer. Si nécessaire, elles pourraient déborder sur la zone dévolue au texte, voire occuper toute la largeur de la page.

Je travaille au format A4, pourquoi pas avec koma-script, j'ai prévu une colonne de texte de 10 centimètres de large, une « marge » pour les images de 6 centimètres, des marges latérales de 2 centimètres et une binding correction de 1 centimètre, comme le montre l'exemple ci-dessous, où la zone dévolue au texte est figurée en gris clair :

alt text

Comment parvenir à ce résultat ?

Posée 10 Déc '15, 00:03

Pathe's gravatar image

Pathe ♦♦
7.5k42204251
Taux d'acceptation : 55%

Modifiée 18 Déc '16, 01:39

Le 2e et 4e cas sont faciles à faire avec \vadjust. Le cas n°3 est beaucoup plus délicat.

(10 Déc '15, 00:07) unbonpetit ♦♦ unbonpetit's gravatar image

Est-il possible de définir globalement la largeur du texte ? Ou dois-je utiliser \parshape tout au long de l'article ?

Par ailleurs, et si j'ai bien compris, \vadjust est une primitive TeX. Où trouver de la documentation à son sujet ? En effet, la commande texdoc tex renvoie un fichier peu accessible au néophyte.

(10 Déc '15, 12:35) Pathe ♦♦ Pathe's gravatar image

On peut trouver de la doc sur \vadjust dans le TeXbook ou sur « TeX pour l'impatient ».

Pour le cas n°3, je répète, pas de solution universelle entièrement automatique.

(10 Déc '15, 14:16) unbonpetit ♦♦ unbonpetit's gravatar image

La primitive \vadjust permet le placement vertical d'un objet. Mais mon problème (hors cas n\up{o} 3) est aussi de définir deux zones dans la page, l'une pour le texte, l'autre pour les images.

(10 Déc '15, 14:39) Pathe ♦♦ Pathe's gravatar image

Composer en largeur de 10cm est l'affaire du package geometry, c'est un problème très secondaire et sans difficulté me semble-t-il.

(10 Déc '15, 21:52) unbonpetit ♦♦ unbonpetit's gravatar image

S'il n'est pas nécessaire d'avoir des figures numérotées, voici une solution très simple qui utilise le jeu de macros génériques de insbox, combiné avec makebox[largeur].

Les commandes \InsertBoxL, \InsertBoxR et \InsertBoxC prennent deux arguments : le nombre de lignes de longueur normale avant insertion, et le contenu à insérer, plus un argument optionnel : le nombre de lignes supplémentaires utilisées, au cas où le nombre de lignes nécessaires ne serait pas correctement calculé.

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage{lipsum}
\usepackage{xcolor, graphicx}
\input{insbox}
\makeatletter
\@InsertBoxMargin =12pt
\makeatother

\begin{document}

\InsertBoxR{6}{\makebox[3cm][l]{\includegraphics{dejeuner1.jpeg}}}
\lipsum[1-2]

\end{document}

alt text

Lien permanent

Publiée 15 Déc '15, 01:25

Bernard's gravatar image

Bernard
4.6k15
Taux d'acceptation : 35%

Modifiée 11 Nov '18, 15:33

Le package wrapfig permet simplement de faire cela. Il est surtout fait pour répondre au cas numéro 3 (image empiétant sur le texte), mais en jouant sur les dimensions, il est possible de placer l'image entièrement dans la marge ou sur toute la colonne, et donc de répondre à tous les cas.

Pour le positionnement, on peut choisir r,l,i,o (droite, gauche, intérieur et extérieur). En majuscule R,L,I,O, les wrapfig sont flottant permettant de repousser un wrapfig à la page suivante si il se retrouve déborder à la fin d'une page.

Voilà un exemple minimal:

Ouvrir dans l'éditeur
\documentclass[a4paper]{article}
% Essai de reproduction du layout suggéré (à affiner)
\usepackage[left=2cm, marginparwidth=6cm, textwidth=10cm]{geometry}
\usepackage{lipsum}
\usepackage{todonotes} % Pour les missingfigure

\usepackage{wrapfig}

\begin{document}

\begin{wrapfigure}[12]{R}[6cm]{5.5cm}
%Figure sur [12] lignes, à d{R}oite,  dépassant de [6cm] dans la
%marge, d'une taille de {5.5cm} 
\missingfigure[figwidth=5.5cm]{Dans la marge}
\end{wrapfigure}
\lipsum[2-3]
\begin{wrapfigure}[12]{R}[6cm]{12cm}
%Figure sur [12] lignes, à d{R}oite,  dépassant de [6cm] dans la
%marge, d'une taille de {12cm} 
\missingfigure[figwidth=12cm]{Dans le texte}
\end{wrapfigure}
\lipsum[4]
\missingfigure[figwidth=16cm]{Pleine largeur}
\lipsum[6]

\end{document}

alt text

Lien permanent

Publiée 14 Déc '15, 13:53

the_alf's gravatar image

the_alf
5864
Taux d'acceptation : 27%

Modifiée 15 Déc '15, 17:38

Le problème de wrapfig et des extensions analogues est qu'elles fonctionnent très mal au voisinage des environnements de listes , que ce soient des listes proprement dites, ou des environnements du type théorème, quote, &c.

(15 Déc '15, 00:51) Bernard Bernard's gravatar image

Mouais, enfin ce problème sera rencontré dans tous les cas, que l'on utilise un package existant ou que l'on tente de bidouiller sa propre solution. Des packages existant permettent de résoudre simplement le problème dans la majorité des cas, il me semble plus efficace de les utiliser, tout en faisant attention à ne pas les placer en vis-à-vis de sections risquant de poser problème. Utilisant wrapfig — certes occasionnellement — je n'étais pas même conscient de ces problèmes…

(15 Déc '15, 10:32) the_alf the_alf's gravatar image

Auriez-vous un exemple où wrapfig pose problème ? Je n'arrive pas à trouver d'exemple.

(15 Déc '15, 17:47) the_alf the_alf's gravatar image

Voici une réponse avec deux macros \inlinephoto et \marginrightphoto. la première insère une image dans le paragraphe en cours en pleine largeur, juste après la ligne qui suit son appel.

La seconde insère une image dans la marge de droite juste en face de la ligne où est appelée \rightmarginphoto : le bas de la photo coïcide avec la bas de la ligne où figure \rightmarginphoto.

Dans les deux cas, \vadjust est mise à contribution.

Ouvrir dans l'éditeur
\documentclass{article}
\usepackage{mwe,graphicx}
\newcommand\marginrightphoto[2][2cm]{%
    \vadjust{\setbox0=\hbox{\hskip\dimexpr\linewidth+1em\relax\includegraphics[width=#1]{#2}}
    \wd0=0pt \dp0=0pt \ht0=0pt \box0 }%
}
\newcommand\inlinephoto[2][2cm]{%
    \vadjust{\vskip.5\baselineskip \hbox to \linewidth{\hss\includegraphics[width=#1]{#2}\hss}}%
}
\begin{document}
\def\texte{bla bla bla bla bla  bla bla bla bla}
\def\textephoto{ LIGNE PHOTO}

\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte
\textephoto\marginrightphoto{example-image}
\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte
\textephoto\marginrightphoto[1cm]{example-image}
\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte

\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte
\textephoto\inlinephoto{example-image}
\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte
\textephoto\inlinephoto[5cm]{example-image}
\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte\texte
\end{document}
Lien permanent

Publiée 10 Déc '15, 14:34

unbonpetit's gravatar image

unbonpetit ♦♦
1.8k18
Taux d'acceptation : 68%

Bon, j'ai un peu honte mais je propose une solution, pour la troisième configuration, qui n'est vraiment pas optimale. Les experts du codage vont me détester :

Ouvrir dans l'éditeur
\documentclass{article}
\usepackage{microtype}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage[latin]{babel}

\setlength{\unitlength}{1cm}
\newlength{\textlong}
\setlength{\textlong}{9cm}
\begin{document}
\lipsum[1]

\parshape=10
0pt \textlong
0pt \textlong
0pt \textlong
0pt \textlong
0pt \textlong
0pt \textlong
0pt \textlong
0pt \textlong
0pt \textlong
0pt \textwidth
\noindent\lipsum[1]

\vskip-13.5\baselineskip%
\hskip\textlong%
\colorbox{red}{\framebox(5,3){World}}
\vskip6\baselineskip%

\lipsum[1]
\end{document}

Notamment les \vskip pour placer l'image dans la marge. Je ne sais pas si on peut faire ça de manière moins empirique : les coefficients 13.5 et 6 sont calculés à la main :). Bon, la commande importante, c'est \parshape.

alt text

Lien permanent

Publiée 10 Déc '15, 03:59

pluton's gravatar image

pluton
1.2k22937
Taux d'acceptation : 34%

Modifiée 10 Déc '15, 11:58

Pathe's gravatar image

Pathe ♦♦
7.5k42204251

2

Ce que je voulais dire, c'est qu'il n'y a aucune solution automatique pour le cas n° 3. C'est d'ailleurs ce qui a été répondu à la question qu'a posée le PO dans le précédent fil « Comment faire couler du texte autour d'une image ».

Ensuite, il vaut mieux utiliser un package comme par exemple cutwin plutôt que de calculer les déplacements verticaux à la main par essai-erreur.

(10 Déc '15, 09:07) unbonpetit ♦♦ unbonpetit's gravatar image

Euh… Le PO ? Qu'est-ce donc ?

(10 Déc '15, 12:31) Pathe ♦♦ Pathe's gravatar image

@unbonpetit oui c'est vrai pour cutwin (qui n'est plus maintenu il me semble) mais de la petite expérience que j'en ai, on fait rapidement face à des difficultés et tout faire à la main peut faire gagner du temps.

(10 Déc '15, 16:58) pluton pluton's gravatar image
1

@Pathe le PO est le Posteur Originel, celui qui met le premier message, ici en l'occurrence, toi.

(11 Déc '15, 01:56) quark67 quark67's gravatar image

Le problème n'est pas de couler un texte autour de l'image (pas de solution auto a ma connaissance, effectivement) mais de placer une figure dans la marge dépassant dans le texte (donc faire couler le texte d'un coté seulement). Donc pas de problème, wrapfig va marcher ici (solution postée plus bas)

(14 Déc '15, 18:32) the_alf the_alf's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.