\chapter{Structurer ses projets} \epigraph{Or les gens ne s'aperçoivent pas qu'ils ne connaissent pas l'essence de chaque chose. Ainsi, croyant la connaître, ils ne s'accordent pas sur ce qui constitue le point de départ de l'examen, et, lorsqu'ils avancent, il est normal qu'ils en paient le prix : car ils ne sont d'accord ni avec eux-mêmes, ni les uns avec les autres.}{\textsc{Platon}, \textit{Phèdre}, 237c} \label{structure-docs}\lettrine{L}{a} rédaction de rapports ou de guides peut très vite contenir un nombre important de lignes (préambule et les commandes définies, chapitres, contenu). Dès lors, la relecture devient indigeste et difficile. Il est grand de reprendre le contrôle sur l'organisation de ses documents \LaTeX{} ! \section{Un peu de rangement} Pour commencer, nous supposons que ton projet \LaTeX{} tient dans un dossier racine, identifié de manière relative par la formulation \textcolor{orange}{\verb?./?}. Nous proposons de ranger ce dossier racine de la manière suivante : \begin{itemize}[label = \ding{118}] \item un sous-dossier \verb?Chapitres?, qui va contenir tout le contenu du projet, ainsi que les packages appelées et la configuration (des packages ou personnelle) utilisée ; \item un sous-dossier \verb?Images?, pour archiver toutes les images qui vont être utilisées dans le projet ; \item le fichier principal \verb?main.tex?, qui va jouer l'équivalent de chef d'orchestre du projet. \\ \end{itemize} Nous pouvons alors représenter cette structuration du projet par l'arborescence suivante : \begin{figure}[H] \centering \begin{tikzpicture}[grow via three points = {one child at (0.5,-0.7) and two children at (0.5,-0.7) and (0.5,-1.4)}, edge from parent path = {(\tikzparentnode.south) |- (\tikzchildnode.west)}, every node/.style = {right, font = \ttfamily}, thick] % Aucune ligne vierge après le node ! (pas d'aération du code possible) \node {\folder{} \textcolor{orange}{./}} child { node {\folder{} \textbf{Chapitres}} child { node {main-biblio.bib}} child { node {chap1.tex}} child { node {\dots{}}} child { node {configuration.tex}} child { node {packages.tex}} } child[missing] {} % Saut de ligne à cause des "sous-enfants" précédents child[missing] {} child[missing] {} child[missing] {} child[missing] {} child { node {\folder{} \textbf{Images}} child { node {image1.jpg}} child { node {\dots{}}} } child[missing] {} child[missing] {} child { node {\textbf{main.tex}}}; \end{tikzpicture} \caption{Arborescence du projet} \end{figure} Bien entendu, il s'agit d'une première proposition minimaliste, que tu peux étoffer par la suite selon ton besoin (sous-dossiers supplémentaires, fichiers \verb?.tex? plus nombreux\dots{}). \begin{attention}{Chemin absolu et chemin relatif} Par la suite, nous allons devoir indiquer à \LaTeX{} où sont rangés les différents fichiers \verb?.tex? ou images à appeler dans le document. Nous pouvons fonctionner avec un chemin absolu, c'est-à-dire en indiquant très précisément son emplacement sur le disque. Par exemple : \verb?C://Projets/LaTeX/?. \\ Cette méthode présente un inconvénient majeur : tu dois modifier dans ton code \LaTeX{} tous les chemins indiqués si jamais tu changes de dossier ! \textbf{C'est pourquoi il faut utiliser un chemin relatif.} \textcolor{orange}{\verb?./?} renvoie au dossier courant, en l'occurrence celui de \verb?main.tex? (fichier \LaTeX{} principal qui va générer le rapport). Et s'il faut revenir en arrière dans l'arborescence, ``remonter en arrière d'un dossier'' en quelque sorte, la notation \textcolor{orange}{\verb?../?} existe aussi. \end{attention} Voyons maintenant les différentes options possibles pour appeler tous ces fichiers dans notre fichier principal \verb?main.tex?. \section{Commandes disponibles} Pour une fois, je vais faire un travail de traduction car d'autres personnes ont admirablement bien synthétisé les 3 commandes que je veux vous présenter et leurs propriétés : \url{https://tex.stackexchange.com/questions/246/when-should-i-use-input-vs-include}. \begin{enumerate} \item \verb?\?\verb?input{.//}? : importation brute du fichier \verb?.tex? (copier-coller du contenu). Cette commande se révèle donc utile pour renseigner le préambule (chargement des packages) ou importer du code \LaTeX{} ponctuellement. Par exemple, je pense notamment à des schémas, graphes ou encore des formules mathématiques alambiquées que tu ne veux pas recopier. Cette solution garantit alors l'homogénéité de ton code dans ton document : il suffit de changer le fichier \verb?.tex? d'origine et les changements s'appliqueront sur tout le rapport. \item \verb?\?\verb?include{.//}? : importation plus sophistiquée du fichier \verb?.tex?, avec un \verb?\clearpage? avant et après. Cette commande prend alors tout son sens pour importer des parties logiques de ton rapport -- \verb?chapter? principalement, pour ne pas être impacté par le \verb?\clearpage?. \textbf{C'est pourquoi cette commande a toute son utilité au sein du fichier principal \verb?main.tex?.} Des propriétés notables sont à retenir : \begin{itemize}[label = \ding{118}] \item un fichier \verb?.aux? est généré. Il contient toutes les références et la pagination associée, ce qui octroie un léger gain de temps à partir de la 2\up{ème} compilation. Si tu génères ton rapport entier puis que tu veux travailler que sur un seul fichier, tu conserves ainsi la pagination finale ; \item l'ajout natif de la commande \verb?\clearpage? empêche l'utilisation de \verb?\?\verb?include? dans le préambule ou pour des petits morceaux de code ; \item il est impossible d'utiliser \verb?\?\verb?include? dans un fichier déjà appelé par cette commande (probablement pour éviter les conflits et les gestions de multiples fichiers \verb?.aux?). \end{itemize} \item \verb?\?\verb?includeonly{.//,...}? : génération du rapport en appelant seulement les fichiers indiqués et appelés par \verb?\?\verb?include?. \textbf{Son appel se fait uniquement dans le \emph{préambule} !} Il ne faut pas non plus mettre des espaces dans la commande. La virgule joue le rôle de séparateur des différents fichiers. Dans ce cas, si tu souhaites travailler sur une partie bien spécifique de ton rapport, tu gagnes un coup de \textit{boost} considérable lors de la compilation ! En effet, \LaTeX{} va compiler uniquement le(s) fichier(s) indiqué(s), et non le rapport dans sa totalité. C'est peut-être anodin sur de petits documents mais c'est extrêmement puissant si le rapport dépasse 30 pages. \item \verb?\graphicspath{{./Images/}}? : commande spécifique au package \verb?graphicx?, elle permet d'indiquer le chemin pour intégrer les images. Ainsi, les images sont appelées simplement (cf. \ref{chap-img} \nameref{chap-img}, p. \pageref{chap-img}), sans avoir besoin d'écrire à chaque fois le chemin complet. Plusieurs chemins peuvent être renseignés avec cette commande, même si je n'en vois pas trop l'utilité : nous cherchons ici à structurer, pas à éparpiller le contenu. \end{enumerate} \begin{regles}{Bilan concis} \verb?\?\verb?input? est une macro ``bas niveau'' qui importe le contenu d'un fichier donné, comme s'il avait été copié-collé manuellement. \verb?\?\verb?include? permet de gérer le fichier comme une unité logique à part entière (\verb?chapter?). Cette commande permet aussi de compiler des fichiers bien spécifiques grâce à \verb?\?\verb?includeonly{fichier1,fichier2,...}?, ce qui garantit un considérable gain de temps à la compilation ! \end{regles} \section{La pratique} La théorie, c'est toujours très sympathique mais, dans ce guide, il y a des éléments concrets. Voyons donc tout de suite l'allure que prend notre fichier principal \verb?main.tex?\footnote{Pour rappel, il s'agit du fichier à partir duquel est lancé la compilation.} : \begin{code}{Le fichier \verb?main.tex?} \documentclass[a4paper, 12pt]{report} % ICI, enlever les % devant les commandes % (mis en pour éviter les conflits avec l'arborescence Texmaker de mon projet) % Chargement des packages et de la configuration utilisés %\input{./Chapitres/packages} %\input{./Chapitres/configuration} %\includeonly{./Chapitres/chap1,./Chapitres/chap3} %\usepackage{graphicx} % Pour les images %\graphicspath{{./Images/}} % Sous-répertoire pour les images \begin{document} \everymath{\displaystyle} %\part{Partie I} %\include{./Chapitres/chap1} %\include{./Chapitres/chap2} %\part{Partie II} %\include{./Chapitres/chap3} %\include{./Chapitres/chap4} \end{document} \end{code} Comme tu peux le constater, tu dois écrire le chemin relatif -- \verb?./Chapitres/? -- à chaque fois. Mais, quand tu y réfléchis, tu ne changes pas tes dossiers tous les 4 matins. Et quand tu le fais, la fonction \og Remplacer \fg{} est la bienvenue ! \\ De plus, c'est raisonnable quand tu penses au temps de compilation gagné par la suite. Ce n'est pas la même chose d'attendre 1 seconde (compilation d'un fichier) ou 4 secondes (compilation d'un gros rapport), surtout si tu dois souvent compiler pour vérifier le code et le rendu. \begin{conseil}{La petite astuce \Texmaker{}} Tu dois trouver pénible d'écrire une partie de ton rapport puis de devoir basculer sur le fichier \verb?main.tex? pour compiler. Et je te comprends ! \\ Fort heureusement, \Texmaker{} propose une solution toute simple : le \og document maître \fg{}. Cette solution permet de définir le fichier principal \verb?main.tex? comme référence : toutes les compilations se font alors depuis ce fichier, \textbf{même si tu travailles sur un autre !} Pour activer cette option, ouvrir \verb?main.tex?, aller sur la barre de menus, choisir \verb?Options? puis \verb?Définir le document courant...?. Et c'est tout. Tu peux même constater que ce choix a bien été pris en compte. Il te suffit de regarder en bas à droite de la fenêtre \Texmaker{}. \\ Et si jamais tu veux réaliser des tests ou générer un fichier annexe alors que tu travailles sur ton rapport, tu peux soit fermer \Texmaker{} (après avoir sauvegardé ton travail) soit refaire la même procédure et choisir alors l'option \verb?Mode normal?. \end{conseil} \begin{attention}{Les noms de fichiers} Pour la clarté de ce guide, j'ai choisi d'appeler les fichiers \verb?chap1?, \verb?chap2?, etc. \textbf{Toutefois, je ne recommande pas d'utiliser une telle nomenclature !} \\ En effet, tu dois penser à tout changer le jour où tu veux ajouter un nouveau chapitre 1 ou 2 (noms de fichiers et commande \verb?\?\verb?include?). Selon moi, il est donc préférable d'appeler explicitement ses fichiers (\verb?chap-texte?, \verb?page-garde?, \verb?annexes?, etc.). \\ De plus, \textbf{les espaces sont prohibés} dans les noms de fichiers (\verb?.tex? ou images) ! Autrement, les erreurs seront importantes. \end{attention} \section{D'autres solutions} Les éléments proposés jusqu'à présent constituent une introduction de ma part. Rien ne t'oblige à suivre à la lettre cette structure. Libre à toi de créer plus de dossiers pour ranger tes fichiers et images, voire des sous-dossiers. L'arborescence proposée peut évoluer très facilement une fois le concept compris et assimilé. Tu es aussi libre de créer des fichiers \verb?.tex? qui te sont propres, comme une page de garde personnalisée, une introduction, le sommaire, des annexes, ou encore une 4\up{ème} de couverture. \\ Il existe aussi un package qui permet de distinguer dans la commande le chemin relatif et le nom du fichier à importer : \verb?import?. Mais le problème reste le même selon moi, comme il faut indiquer le chemin à chaque fois (à moins de définir une commande générique, point qui reste à valider). \\ La page \url{http://blog.dorian-depriester.fr/latex/template-these/template-complet-pour-manuscrit-de-these} peut aussi t'apporter une aide considérable et te donner de nouvelles pistes à explorer ! Des points intéressants sont abordés, comme générer un mini-sommaire en début de chaque chapitre, plusieurs bibliographies, utiliser un \textit{backref} (bibliographie), et bien d'autres encore.