\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.