summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/guide-latex-fr/Chapitres/p3-images.tex
blob: 9e3804d00f2471b1c50c772806a5cbc56b6efcc1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
\chapter{Images}

\label{chap_img_anx}

\section{Une référence toute prête}

Les références, c'est bien. Les automatiser, c'est mieux. J'étais plutôt agacé d'écrire constamment \og (cf. \textsc{Figure} \textit{ref} p. \textit{page-ref}) \fg{}, d'autant plus que le mot \og \textsc{Figure} \fg{} peut varier selon la classe.

Puis, j'ai découvert la commande \verb?\figurename{}? : elle contient justement le nom utilisé dans la légende. Il est donc possible d'automatiser mon problème initial de la manière suivante :

\begin{code}{Une référence fraîche ! Une !}
\documentclass[a4paper, 12pt]{report} 

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage{graphicx, float}

\usepackage[hidelinks, breaklinks, linktoc = all]{hyperref}

\newcommand{\reffig}[1]{(cf. \figurename{} \ref{#1} p. \pageref{#1})}


\begin{document}

\begin{figure}[H]
\centering
%\includegraphics[width = 0.5\linewidth]{test.png}
\caption{La légende}
\label{essai}
\end{figure}

Toutes les explications sont disponibles ci-avant \reffig{essai}.

\end{document}
\end{code}

\section{L'environnement \texttt{subfigure}}

Il peut être intéressant d'afficher plusieurs images avec chacune sa légende, ainsi qu'une légende globale pour toutes les images. Une solution très simple à implémenter est possible grâce au package \verb?subcaption? :

\begin{itemize}[label = \ding{213}]
\item apport de l'environnement \verb?subfigure?, au fonctionnement identique à une \verb?minipage?,

\item apport de la commande \verb?\subcaption?, pour mettre une légende sous chaque image. \\
\end{itemize}

Un aperçu de cette solution prend la forme suivante :

\begin{code}{Utilisation de \texttt{subfigure}}
\documentclass[a4paper, 12pt]{report} 

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage{graphicx, float, subcaption}


\begin{document}

\begin{figure}[H]
% [t] en option : permet d'aligner correctement les images si les sous-légendes sont longues
\begin{subfigure}[t]{0.32\linewidth}
%\includegraphics[width = \linewidth]{image1.png}
\subcaption{Image 1}
\end{subfigure}
\hfill
\begin{subfigure}[t]{0.32\linewidth}
%\includegraphics[width = \linewidth]{image2.png}
\subcaption{Image 2 : avec une très longue légende}
\end{subfigure}
\hfill
\begin{subfigure}[t]{0.32\linewidth}
%\includegraphics[width = \linewidth]{image3.png}
\subcaption{Image 3}
\end{subfigure}
\caption{Images de test}
\end{figure}

% Pas le même rendu au niveau des légendes
\begin{figure}[H]
\begin{minipage}{0.32\linewidth}
%\includegraphics[width = \linewidth]{image1.png}
\caption{Image 1}
\end{minipage}
\hfill
\begin{minipage}{0.32\linewidth}
%\includegraphics[width = \linewidth]{image2.png}
\caption{Image 2}
\end{minipage}
\hfill
\begin{minipage}{0.32\linewidth}
%\includegraphics[width = \linewidth]{image3.png}
\caption{Image 3}
\end{minipage}
\caption{Images de test}
\end{figure}

% Les références doivent toujours fonctionner --> faire des essais et lire la documentation

\end{document}
\end{code}

\begin{conseilbox}{La petite subtilité}
La commande \verb?\subcaption? ne requiert pas l'utilisation systématique de l'environnement \verb?subfigure?. Elle peut très bien être utilisée avec une \verb?minipage?. \\

Toutefois, il faut bien comprendre qu'une \verb?\caption? ou \verb?\subcaption? n'est valide que dans un élément flottant soit dans un environnement global \verb?figure?.

De même, l'environnement \verb?subfigure? ne peut être utilisé que dans un environnement \verb?figure?, contrairement à une \verb?minipage? qui peut être utilisée n'importe quand. Cette dernière n'est donc pas considérée comme un flottant.
\end{conseilbox}

Enfin, le package \verb?subcaption? charge aussi le package \verb?caption?, ce qui permet d'utiliser la commande \verb?\caption*?. Cette dernière permet d'avoir une légende sans numéro. C'est toujours pratique de temps en temps.

\section{Insérer un grand nombre de fichiers}

Il est possible d'être amené, ponctuellement, à regrouper un grande nombre de fichiers (images, \texttt{PDF}, \dots{}) dans un seul et unique \texttt{PDF}. 

Si écrire toutes les lignes de code ou faire des copier-coller pour n'avoir qu'à modifier les noms de fichiers à la fin peut fonctionner, il existe une méthode plus élégante et efficace qui consiste à utiliser une boucle \verb?for?.

Ce n'est pas bien compliqué et tout est résumé dans le code ci-dessous :

\begin{code}{Insertion avec une boucle for}
\documentclass[a4paper, 12pt]{report}

\usepackage{graphicx, float} % Si images
\graphicspath{{./Images/}} % Chemin des images
\DeclareGraphicsExtensions{.jpg} % Pour définir l'extension des images

\usepackage{pgffor} % Pour la boucle for


\begin{document}

% Page de garde ou ce que tu veux

% Commande d'insertion avec la boucle for
% #1 = numéro début
% #2 = numéro fin
% #3 = nom devant le numéro
\newcommand*{\insertgraphicsfiles}[3]{\foreach \i in {#1,...,#2} {%
\begin{figure}[H]
\vspace*{\stretch{1}}
\centering
\includegraphics[width=0.99\linewidth]{#3\i}
\vspace*{\stretch{1}}
\end{figure}
}}

% Insertion images 001 à 009
\insertgraphicsfiles{1}{9}{00}

% Insertion images 010 à 099
\insertgraphicsfiles{10}{99}{0}

% Insertion images 100 à 151
\insertgraphicsfiles{100}{151}{}

% Il est possible de faire de même avec des PDF et \includepdf

\end{document}
\end{code}

Et voilà ! Si tu ne juges pas ce passage intéressant, la réalisation d'un trombinoscope peut constituer une application plus concrète de l'utilisation d'une boucle \verb?for? :

\begin{code}{Une autre application : le trombinoscope}
\documentclass[a4paper, 12pt]{report}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}

\usepackage{graphicx}
\graphicspath{{./Images/}} % Chemin des images
\DeclareGraphicsExtensions{.png} % Pour définir l'extension des images

\usepackage{array}
\usepackage{pgffor} % Pour les boucles

\setlength\parindent{0pt} % Pour supprimer les indentations (inutiles ici)

\newcommand*{\affichechoriste}[3]{\begin{tabular}{c} \includegraphics[width = 0.32\linewidth]{#1} \\ #2 \textsc{#3} \end{tabular}  }
% Attention, l'espace après le tabular est indispensable pour les renvois
% Sinon, tout s'affiche sur une seule ligne

\begin{document} 

\begin{center}
\Huge{\textsc{Titre}}
\end{center}

\foreach \prenom/\nom/\fichier in {%
Prénom/Nom/001,%
Prénom/Nom/002,%
Prénom/Nom/003,%
Prénom/Nom/004}{\affichechoriste{\fichier}{\prenom}{\nom}}
% Et ainsi de suite. Il vaut mieux ne pas mettre d'accent ni d'espace dans les noms de fichiers
% Le % en fin de ligne est indispensable au bon fonctionnement de \foreach pour éviter l'insertion de blancs qui troubleraient l'appel du fichier (et permet de faciliter la relecture du code)

\end{document}
\end{code}

Nous reviendrons plus tard, avec le chapitre sur \verb?TikZ?, sur des utilisations de la boucle \verb?for?.

\section{Insérer un fichier \texttt{.svg}}

Si, comme moi, tu apprécies ne pas avoir de gros pixels immondes au moindre zoom de ton fichier \texttt{.pdf}, il est possible d'importer un fichier \texttt{.svg} (image vectorielle donc pas de pixels au zoom) dans ton document.

Pour ce faire, aucun package supplémentaire n'est requis et il faut juste suivre la procédure suivante :

\begin{itemize}[label = \ding{118}]
\item exporter le fichier \texttt{.svg} sous \texttt{Inkscape} au format \texttt{.pdf},

\item dans les options, choisir ``Exclure le texte \dots{}'' et ``Utiliser la taille \dots{}'',

\item garder les DEUX fichiers générés (\texttt{.pdf} et \texttt{.pdf\_tex}),

\item utiliser le code suivant :

\begin{figure}[H]
\centering
\begin{minipage}{0.5\linewidth}
\begin{verbatim}
\begin{figure}[H]
\centering
\def\svgwidth{\columnwidth}
%\input{nom_fichier.pdf_tex}
\caption{Légende éventuelle}
\end{figure}
\end{verbatim}
\end{minipage}
\end{figure}

\item compiler, peu importe le mode (\verb?LaTeX?, \verb?PDFLaTeX?, \dots{}). \\
\end{itemize}

Et voilà, c'est tout ce qu'il y a à faire. Après, c'est vraiment se prendre le chou pour pas grand chose. Autant rester sous \texttt{Inkscape}, exporter l'image au format \texttt{.eps} et l'intégrer comme n'importe quelle image. 

Les pixels ne se verront toujours pas au zoom \dots{} et la compilation se fait sous \verb?LaTeX? comme sous \verb?PDFLaTeX? (création d'un fichier intermédiaire supplémentaire mais génération bien plus rapide). \\

Bref, c'était surtout une volonté personnelle d'explorer de nouveaux domaines sous \LaTeX{} mais il faut aussi savoir utiliser des solutions simples parfois.