J'en reviens à mes interrogations concernant la classe standalone que, je le rappelle, j'utilise avec régularité pour créer des pdf de taille variable, juxtaposant deux images qui sont entourées d'une marge de 5 millimètres.

Récemment sur ce forum, grâce @denis, j'ai ajouté l'option varwidth à cette classe.

Et surprise, si j'augmente la taille des images, leur positionnement change !

Ainsi cet ECM, où les images ont une hauteur de 5 centimètres :

Ouvrir dans l'éditeur Overleaf
\documentclass[varwidth, border = 5 mm]{standalone}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[light, largesmallcaps]{kpfonts}
\usepackage{mwe}
\begin{document}
\fbox{\includegraphics[keepaspectratio=true, height = 5 cm]{example-image-a}}
\fbox{\includegraphics[keepaspectratio=true, height = 5 cm]{example-image-b}}

du texte
\end{document}

À comparer avec celui-ci, où les images ont une hauteur de 6 centimètres :

Ouvrir dans l'éditeur Overleaf
\documentclass[varwidth, border = 5 mm]{standalone}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[light, largesmallcaps]{kpfonts}
\usepackage{mwe}
\begin{document}
\fbox{\includegraphics[keepaspectratio=true, height = 6 cm]{example-image-a}}
\fbox{\includegraphics[keepaspectratio=true, height = 6 cm]{example-image-b}}

du texte
\end{document}

Or, si j'ôte l'option varwidth et le texte faisant suite aux images, le fichier compose les deux images côte à côte, même si elles sont une taille largement supérieure aux 6 centimètres qui déclenchaient la superposition des images dans l'exemple précédent :

Ouvrir dans l'éditeur Overleaf
\documentclass[border = 5 mm]{standalone}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[light, largesmallcaps]{kpfonts}
\usepackage{mwe}
\begin{document}
\fbox{\includegraphics[keepaspectratio=true, height = 16 cm]{example-image-a}}
\fbox{\includegraphics[keepaspectratio=true, height = 16 cm]{example-image-b}}
\end{document}

Dans la classe standalone équipée de l'option varwidth, comment contrôler à la fois la taille des images et leur positionnement ?

Posée 22 Avr '19, 14:21

Pathe's gravatar image

Pathe ♦♦
7.4k28196245
Taux d'acceptation : 55%

Modifiée 22 Avr '19, 15:35

Au doigt mouillé, je dirais que, dans le second cas, la place manquant sur la ligne pour placer deux images de 6cm de large, LaTeX déplace automatiquement la 2e à la ligne suivante.

(22 Avr '19, 14:49) denis ♦♦ denis's gravatar image

Ce n'est pas exactement ça : s'il n'y a pas de texte au-dessous des images, et pas d'option varwidth, on peut créer sans souci un document avec des images de 15 cm de haut placées côte à côte. Je modifie la question en conséquence : un troisième ECM ne saurait nuire.

(22 Avr '19, 15:05) Pathe ♦♦ Pathe's gravatar image

Vous pouvez utiliser varwidth=200cm, ou varwidth=\maxdimen.

(22 Avr '19, 19:40) touhami touhami's gravatar image

La réponse brève à votre question est d'utiliser l'option varwidth avec une dimension suffisamment grande : varwidth=200cm ou varwidth=\maxdimen.

Par défaut, le contenu d'un document standalone est sauvegardé dans une boite \hbox grâce à la commande \sbox. Les dimensions d'une boite sans celles de son contenu. On peut donc avoir un document assez large ou assez long. Le problème qui se pose est qu'on est en mode horizontale restreint et les commandes : \par, \\, \newline, \vspace{1cm}... sont sans effet (...). Une solution immédiate est de mettre le texte dans une \parbox ou une minipage, mais alors on perd la fonctionnalité principale de la classe standalone : la largeur du document ne s'adapte plus à la largeur du contenu. Pour contourner ce problème, la classe propose l'utilisation de l'option varwidth. Avec cet option, le contenu du document est formaté dans une boite verticale à la minipage mais plus flexible (ou plus intelligente) que cette dernière.

Pour préciser la largeur maximale du document, il suffit d'utiliser l'option varwidth=LARGEURMAXI. Les variantes varwidth et varwidth=true existent et sont équivalentes à varwidth=\linewidth\linewidth=\columnwidth=\textwidth=345pt (par défaut) ou \linewidth=\columnwidth =~= \textwidth/2 (avec twocolumn) à cause de la classe article chargée par la classe standalone.

N.B. 345pt est la valeur par défaut de \textwidth, c'est-à-dire avec l'option de classe 10pt.

Lien permanent

Publiée 25 Avr '19, 00:28

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 25 Avr '19, 12:14

Cette explication claire et détaillée m'est d'une grande utilité.

(26 Avr '19, 17:33) Pathe ♦♦ Pathe's gravatar image

L'explication gît, il me semble, dans cet extrait de la documentation (p. 11) : varwidth définit pour largeur maximale \linewidth. Je n'ai pas les chiffres en tête, mais il y a de bonnes chances que vos deux images, avec l'option keepaspectratio, plus 4 \fboxsep, dépasse cette valeur par défaut.

This option uses the varwidth package to wrap the content into a varwidth environment, which is based on > minipage , but will always use the natural width of the content if it is smaller than the given maximum width. The resulting effect is that the created paragraph will not cause any additional width and that multiple paragraphs can be included as part of the content. The used maximal width (which is provided to the underlying minipage environment) is linewidth by default, but can be set by provided a width as value to the option. Doing so will also switch the option on.

Lien permanent

Publiée 22 Avr '19, 17:41

Bernard's gravatar image

Bernard
4.6k15
Taux d'acceptation : 35%

Modifiée 22 Avr '19, 18:44

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

Le valeur défaut de varwidth est 12.12364cm < 2*6cm+4*0.10542cm

(22 Avr '19, 19:04) samcarter samcarter's gravatar image
1

D'autant que c'est la hauteur qui mesure 6cm, la largeur est supérieure à cause de keepaspectratio.

(22 Avr '19, 19:13) Bernard Bernard's gravatar image

@Bernhard Oh, tu as raison ! Dans ce cas 12.12364cm < (2*6.67cm+4*0.10542cm)=13.76cm

(22 Avr '19, 20:13) samcarter samcarter's gravatar image

@Bernard & @samcarter : j'ai lu la documentation de standalone ainsi que celle, très succincte, de varwidth. On y fait bien référence à la valeur par défaut de \linewidth, mais... où avez-vous donc trouvé celle-ci ?

C'est le fait de taper du texte sous les images qui déclenche la référence à \linewidth ? Car j'ai l'impression que sans texte, un document standalone peut être très large !

(23 Avr '19, 12:54) Pathe ♦♦ Pathe's gravatar image

@Pathe c'est l'option varwidth qui fait ça. Par défaut, le document (standalone) est dans une boite \hbox dont les dimensions sont celles de son contenu.

(23 Avr '19, 14:27) touhami touhami's gravatar image

@Pathe Pour obtenir la valeur par défaut de \linewidth on peut utiliser l'extension printlen

Pouvez vous fair un ECM avec varwidth et sans texte qui produit un document très large?

(23 Avr '19, 14:39) samcarter samcarter's gravatar image

@Pathe: le texte que j'ai reproduit se trouve dans le § 5.2 Class options, aux explications sur la clef varwidth, p.11.

(23 Avr '19, 14:46) Bernard Bernard's gravatar image
1

Essayer de compiler l'ECM suivant, avec et sans l'option varwidth:

\documentclass[varwidth,border=5mm]{standalone} \usepackage{mwe} \begin{document} \lipsum[1-2] \end{document}

(23 Avr '19, 22:46) touhami touhami's gravatar image

@Bernard : j'ai bien vu le texte. La valeur de \linewidth ne me semble pas y être définie, si ?

@touhami : l'exemple est très parlant. Preuve, s'il en était besoin, de vos talents de pédagogue !

(24 Avr '19, 10:25) Pathe ♦♦ Pathe's gravatar image

@Pathe: Elle n'est pas définie parce qu'elle est variable: elle désigne la largeur des lignes de l'environnement courant. Si l'on n'est pas dans un environnement qui les modifie, c'est tout bonnement \textwidth. Dans une liste, ce sera \textwidth — \leftmargin (en général: enumitem permet de modifier \rightmargin, qui vaut 0 par défaut). Dans une minipage, ce sera la valeur donnée en argument, &c.

(24 Avr '19, 14:32) Bernard Bernard's gravatar image

@Bernard : merci pour l'explication. Dans mes ECM, qu'est-ce qui définit cette valeur ? Comment se fait-il qu'une image passe ou non à la ligne ? Je ne comprends toujours pas. Et rien n'est spécifié dans la succincte documentation de varwidth, alors que c'est l'appel à cette option qui déclenche ce comportement... incontrôlable en l'état actuel de mes modestes connaissances !

(24 Avr '19, 16:06) Pathe ♦♦ Pathe's gravatar image
2

Eh bien, il semble que ce soit la valeur par défaut de textwidth, puisque l'exemple avec une hauteur de 6cm tient sur une seule ligne rien qu'en chargeant geometry, qui modifie les valeurs par défaut même si l'on ne spécifie rien.

(24 Avr '19, 16:16) Bernard Bernard's gravatar image
Affichage de 5 parmi 12 Afficher 7 commentaire(s) en plus
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.