\chapter{Les moteurs de compilation sous \LaTeX{}}

\epigraph{L'aérodynamique, c'est pour les personnes qui ne savent pas construire de moteurs.}{Enzo \textsc{Ferrari}}

\label{compilation-details}\lettrine{G}{râce} à \LaTeX{}, l'utilisateur peut rédiger ses documents tout en séparant le fond et la forme. Cette séparation requiert l'emploi d'un ``moteur de compilation'' pour transformer le code \LaTeX{} en un fichier PDF.

\section{Présentation des différents moteurs}

Jusqu'à présent, j'ai toujours recommandé de compiler avec le moteur \pdfLaTeX{}. Toutefois, si tu es un peu curieux, tu as pu te rendre compte qu'il existe plein d'autres possibilités pour la compilation rapide avec \Texmaker{}. Certaines d'entre elles contiennent justement de nouveaux moteurs de compilation \LaTeX{}. \\

Pour rappel, la rédaction d'un document sous \LaTeX{} passe par 3 grandes étapes, que nous pouvons résumer ainsi : la rédaction du contenu (en \LaTeX{}), la compilation (via un moteur \LaTeX{}) et l'obtention du document final, au format PDF de préférence.

\begin{figure}[H]
\centering
\resizebox{0.95\linewidth}{!}{\input{./Images/compilation_schema}}
\caption{Les 3 étapes pour rédiger un document sous \LaTeX{}}
\end{figure}

Le moteur de compilation \LaTeX{} utilisé (\pdfLaTeX{} jusqu'à présent) fonctionne un peu comme une boîte noire. Personnellement, je ne sais pas comment elle fonctionne. Je sais qu'un fichier \verb?.tex? est inséré en entrée, le moteur de compilation tourne et fournit en sortie le fichier \verb?.pdf? espéré.

\begin{figure}[H]
\centering
\begin{tikzpicture}[every node/.style = {align = center}]
\node (rect) at (0,0) [draw, thick, text width = 2.5cm, minimum width = 3cm, minimum height = 1.5cm, orange] {Moteur de compilation};
\draw[<-, > = Stealth] (rect.west) --++ (-1,0) node[left, text width = 1.5cm, red] {Fichier \verb?.tex?};
\draw[->, > = Stealth] (rect.east) --++ (1,0) node[right, text width = 1.5cm, Green] {Fichier \verb?.pdf?};
\end{tikzpicture}
\caption{Schématisation d'un moteur de compilation}
\end{figure}

Si nous devons lister les différents moteurs de compilation, nous pouvons en relever 3 principaux :

\begin{itemize}[label = \ding{213}]
\item le moteur \pdfLaTeX{}, utilisé jusqu'à présent ;

\item le moteur \LaTeX{}\footnote{Moteur éponyme au langage utilisé, attention aux possibles confusions à venir.}, qui fournit un fichier \verb?.dvi? qu'il faut convertir par le choix \verb?Dvi -> PS? puis \verb?PS -> PDF? ;

\item le moteur \XeLaTeX{} ;
\end{itemize}

\noindent{}accompagnés d'autres moteurs annexes avec leur utilité et leur fonction : \begin{itemize}[label = \ding{213}]
\item le moteur \BibTeX{}, pour générer des bibliographies ;

\item le moteur MakeIndex, pour générer des index.
\end{itemize}

Il en existe d'autres comme \LuaLaTeX{}, voire des solutions plus exotiques avec \KaTeX{} pour inclure des formules \LaTeX{} dans du HTML par exemple.

\begin{attention}{Une question ?}
\og Je ne comprends pas à quoi peuvent bien servir ces nouveaux modes de compilation. Après tout, \pdfLaTeX{} fonctionne très bien jusqu'à présent\dots{} \fg{} \\

En effet, tu as tout à fait raison. Et la conclusion de ce chapitre ira dans ce sens. Mais il existe aussi des classes (\verb?powerdot? par exemple) ou des packages (\verb?pstricks?) qui ne fonctionnent pas sous \pdfLaTeX{}. Il faut donc parfois recourir à un autre moteur de compilation.

\begin{figure}[H]
\centering
\begin{tikzpicture}[every node/.style = {align = center}]
\node (rect) at (0,0) [draw, thick, text width = 2.5cm, minimum width = 3cm, minimum height = 1.5cm, orange] {\LaTeX{} \linebreak ou \linebreak \XeLaTeX{}};
\draw[<-, > = Stealth] (rect.west) --++ (-1,0) node[left, text width = 1.5cm, red] {Fichier \verb?.tex?};
\draw[->, > = Stealth] (rect.east) --++ (1,0) node[right, text width = 1.5cm, Green] {Fichier \verb?.pdf?};
\draw[<-, > = Stealth] (rect.north) --++ (0,1) node[above, cyan] {Contraintes};
\end{tikzpicture}
\caption{Schématisation de l'utilisation d'un autre moteur de compilation}
\end{figure}
\end{attention}

Bien, voyons un peu ces contraintes (classes, packages) qui nous obligent à utiliser un autre moteur de compilation que \pdfLaTeX{}.

\section{Utilisation des différents moteurs de compilation}

Selon ce que tu désires comme document final, il te faut utiliser des classes et/ou des packages spécifiques parfois. Et il s'avère que certains requièrent l'emploi d'un moteur de compilation bien spécifique.

\`A l'heure actuelle, pour rédiger un document sous \LaTeX{}, j'ai recensé les cas d'utilisation suivants, avec le(s) moteur(s) associé(s)  :

\begin{tableaubilan}{0.45\linewidth}{0.45\linewidth}{Cas d'utilisation}{Moteur à utiliser}
Générer un PDF ``simple'' \par (rapport normal, avec des commandes ``basiques'' et des images) & \pdfLaTeX{} ou \XeLaTeX{} $\Rightarrow$ images au format \verb?.png? ou \verb?.jpg? \par \LaTeX{} $\Rightarrow$ images au format \verb?.eps? (convertir les images si besoin) \\ \\

Changer la police d'écriture & Si package de police, \pdfLaTeX{} ou \LaTeX{} \par Sinon, \XeLaTeX{} \& package \verb?fontspec? \par (cf. détails p. \pageref{chgt-police}) \\ \\

Inclure et/ou fusionner des fichiers PDF dans le document (cf. p. \pageref{fusion-pdf}) & Package \verb?pdfpages? \par \pdfLaTeX{} ou \XeLaTeX{} \\ \\

Générer une bibliographie (cf. p. \pageref{generer-bibliographie}) & \pdfLaTeX{} ou \LaTeX{} \par \BibTeX{} pour la biliographie \\ \\

Générer un index (cf. p. \pageref{generer-index}) & \pdfLaTeX{} ou XeLaTeX ou \LaTeX{} \par MakeIndex pour l'index \\ \\

Générer un PDF avec des dessins (schémas, circuits électriques, diagrammes, etc.) & Package \verb?pstricks? : \LaTeX{} (le plus rapide) ou \XeLaTeX{} \par Package \verb?tikz? (cf. p. \pageref{chap-tikz}) : \pdfLaTeX{} (le plus rapide et simple) ou \LaTeX{} ou \XeLaTeX{} \\ \\

Réaliser des présentations (\textit{slides}) & Classe \verb?beamer? (cf. p. \pageref{chap-beamer}) : \pdfLaTeX{} ou \LaTeX{} ou \XeLaTeX{} \par Classe \verb?powerdot? : \LaTeX{} ou \XeLaTeX{}
\end{tableaubilan}

\begin{attention}{Une question ?}
\og Pour le changement de police, tu mentionnes dans ton tableau des ``packages de police''. Qu'est-ce donc exactement ? \fg{} \\

Il est possible d'appeler un autre package que \verb?lmodern? dans le préambule. Par exemple, un package disponible est \verb?times?, qui donne accès à une police équivalente au \verb?Times New Roman?.

Cependant, il y a toujours un risque relatif à l'utilisation d'une autre police : comment se comporte la police de manière générale ? qu'en est-il des mathématiques ? etc. Tu peux avoir de mauvaises surprises. \\

\textbf{C'est pourquoi je recommande de toujours utiliser la police native de \LaTeX{}} (\verb?Computer Modern?, avec le package \verb?lmodern?). 

Si tu dois la changer, c'est vraiment parce que tu dois faire un rapport et qu'une police spécifique est imposée. \\

Pour tous les détails supplémentaires, je te renvoie à la page \pageref{chgt-police}.
\end{attention}

\begin{conseil}{Insertion d'images au format \texttt{.eps}}
Le format \verb?.eps? n'est pas l'apanage du moteur \LaTeX{}. Tu peux très bien en insérer avec \pdfLaTeX{} (conversion automatique en PDF avant insertion) ou \XeLaTeX{}.

Il s'agit d'un format un peu obsolète, utile pour insérer facilement des images vectorielles (format \verb?.svg?), par exemple.
\end{conseil}

\section{Bilan}

Toujours en vie ? Je veux bien croire cette partie un peu technique et indigeste. Elle demande un peu de pratique et il faut faire des essais, rencontrer des erreurs pour comprendre le fonctionnement et l'utilisation des moteurs de compilation.

\begin{regles}{En résumé}
Actuellement, tout est possible et envisageable avec le moteur \pdfLaTeX{}. Techniquement, les moteurs les plus modernes sont \XeLaTeX{} et \LuaLaTeX{}. Ils constituent un bon substitut à \pdfLaTeX{} le cas échéant. Mais le temps de compilation reste important, encore plus sur les gros documents (développement et améliorations en cours). \\

\textbf{C'est bien pourquoi, depuis le début de ce guide, je recommande d'utiliser le moteur \pdfLaTeX{}.} C'est le moteur le plus simple et pratique à utiliser. Il convertit directement ton fichier \verb?.tex? en un PDF.

Tu peux normalement tout faire avec : rapports, présentations, schémas, bibliographie, index, glossaire, nomenclature, insérer des images et des PDF, etc. \\

Enfin, sous \Texmaker{}, le raccourci de \og compilation rapide \fg{} est plus développé pour le moteur \pdfLaTeX{} : automatisation de la bibliographie avec l'ajout de \BibTeX{}. 

Ce n'est par exemple pas le cas pour \XeLaTeX{}. Il faut donc lancer les différents moteurs à la main à chaque fois, ce qui se révéler fastidieux et pénible sur le long terme !
\end{regles}

\begin{attention}{Ce qu'il faut bannir !}
Avec le recul, la compilation avec le moteur \LaTeX{} et la série de conversion inhérente est peu recommandée.

Cette série de conversions se révèle efficace sur de petits documents mais le passage \verb?PS2PDF? devient plus long sur des documents plus importants. Le format \verb?.eps? est aussi obligatoire pour les images. Il faut donc aussi convertir toutes les images que tu souhaites insérer (images généralement obtenues sur Internet donc au format \verb?.jpg? ou \verb?.png?). \\

Ce moteur se révèle donc long, laborieux et pas toujours pratique : à bannir autant que possible !
\end{attention}

%%% Diagramme %%%

Et pour finir, tu trouveras ci-après (page \pageref{compilation-diagramme}) un diagramme réalisé par mes soins qui rend un peu plus explicite l'usage des différents moteurs de compilation, agrémenté de quelques précisions.

\begin{table}[H]
\centering
\caption{Détails sur les fichiers annexes}
\begin{minipage}[t]{0.45\linewidth}
\subcaption{Principaux fichiers annexes}
\begin{tabular}{p{0.38\linewidth}p{0.62\linewidth}}
\verb?.aux? & Références \LaTeX{} \\
\verb?.log? & Rapport compilation \\
\verb?.out? & Signets du PDF \par (package \verb?hyperref?) \\
\verb?.synctex.gz? & Visionneuse \Texmaker{} \\
\verb?.toc? & Table des matières \par (\verb?\tableofcontents?) \\
\verb?.lof? & Table des figures \par (\verb?\listoffigures?) \\
\verb?.lot? & Table des tableaux \par (\verb?\listoftables?)
\end{tabular}
\end{minipage}
\hfill
\begin{minipage}[t]{0.45\linewidth}
\subcaption{Autres fichiers annexes}
\begin{tabular}{p{0.38\linewidth}p{0.62\linewidth}}
\verb?.bbl? & Bibliographie mise en forme \\
\verb?.blg? & Rapport compilation bibliographie \\
\verb?.idx? & Index brut \\
\verb?.ind? & Index mis en forme \\
\verb?.ilg? & Rapport compilation index
\end{tabular}
\end{minipage}
\end{table}

\newpage

\begin{landscape}
\thispagestyle{plain}
\label{compilation-diagramme}
\vspace*{\fill}

\resizebox{\linewidth}{!}{\input{./Images/compilation_diagramme}}

\vspace{2\baselineskip}

\begin{itemize}[label = \ding{118}, leftmargin = *]
\item Si génération d'un glossaire (package \verb?glossaries?), le fonctionnement serait similaire à celui d'un index.

\item Si génération d'une bibliographie et d'un index, \Texmaker{} se charge de lancer tous les moteurs (\pdfLaTeX{}, \BibTeX{} et MakeIndex) dans le bon ordre (compilation rapide).
\end{itemize}

\vspace*{\fill}
\end{landscape}

%%% FIN diagramme %%%