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

\label{compilation_details}

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

Revenons un instant sur l'interface \texttt{Texmaker}. Jusqu'à présent, tu as toujours compiler sous \texttt{PDFLaTeX}, comme je t'ai dit de faire. Normalement, à l'exception du code et de l'aperçu, ta fenêtre \texttt{Texmaker} devrait ressembler à :

\begin{figure}[H]
\includegraphics[width = \linewidth]{Aide_LaTeX7.png}
\caption{Ta fenêtre \texttt{Texmaker}}
\end{figure}

Il est là dans ce but donc intéressons-nous au cadre rouge sur cette image. Normalement, c'est l'état dans lequel il se trouve. Depuis tes débuts sous \texttt{Texmaker}, il y a de grandes chances que tu cliques sur la flèche horizontale à gauche pour lancer la compilation et que tu demandes l'affichage du résultat avec la flèche de droite.

Déjà, sache qu'il est possible d'aller beaucoup plus vite avec le clavier. En effet, \texttt{Texmaker} a mis en place des raccourcis, configurables dans \verb?Options? $\rightarrow$ \verb?Configurer Texmaker? $\rightarrow$ \verb?Raccourcis?. Par défaut, appuyer sur \keys{F6} permet de lancer la compilation sous \verb?PDFLaTeX? et, \textbf{une fois que cette dernière est terminée}, appuyer sur \keys{F7} permet d'afficher le résultat. \\

Il est même possible d'aller encore plus vite grâce à la compilation rapide (propriété propre à \texttt{Texmaker}, pas à \LaTeX{}). \texttt{Texmaker} est un bon logiciel car il permet justement de combiner à notre guise différentes options pour la compilation et de les réunir sous un seul bouton. La compilation rapide est paramétrable depuis \verb?Options? $\rightarrow$ \verb?Configurer Texmaker? $\rightarrow$ \verb?Compil rapide?. Par défaut, elle est assigné au bouton \keys{F1}.

Prenons un fichier \verb?.tex? quelconque et choisissons de mettre la compilation rapide sous \verb?PdfLaTeX + Voir PDF?. Appuyons sur \keys{F1} : normalement, la compilation s'est lancée toute seule et le résultat apparaît\footnote{Hormis à l'ouverture d'un document, il peut arriver qu'il faille appuyer deux fois sur \keys{F1} pour forcer l'affichage (petit bug technique de \texttt{Texmaker}).}. C'est plus pratique, ne trouves-tu pas ? \\

Si tu es un peu curieux, tu as pu te rendre compte qu'il existe plein d'autres possibilités pour la compilation rapide. Certaines d'entre elles contiennent justement de nouveaux modes de compilation \LaTeX{}. Un mode de compilation, c'est un peu comme une grosse boîte qui prend en entrée un fichier \verb?.tex? pour donner un fichier \verb?.pdf? en sortie. Je n'en sais pas plus sur leur fonctionnement respectif mais je vais tâcher d'être clair par la suite avec quelques schémas :

\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] {Mode de compilation};
\draw[<-, > = triangle 60] (rect.west) --++ (-1,0) node[left, text width = 1.5cm, Red] {Fichier \texttt{.tex}};
\draw[->, > = triangle 60] (rect.east) --++ (1,0) node[right, text width = 1.5cm, Green] {Fichier \texttt{.pdf}};
\end{tikzpicture}
\caption{Schématisation d'un mode de compilation}
\end{figure}

Ensuite, si nous devons lister les différents modes de compilation, nous pouvons en relever 3 principaux :

\begin{itemize}[label = \ding{213}]
\item le mode \verb?PDFLaTeX?,

\item le mode \verb?LaTeX? puis \verb?Dvi -> PS? puis \verb?PS -> PDF?,

\item le mode \verb?XeLaTeX?.
\end{itemize}

Il en existe d'autres comme \verb?LuaLaTeX?, voire des solutions plus exotiques (\verb?KaTeX? pour du web par exemple). Ces 3 vont nous suffire pour tout le reste.

\begin{attentionbox}{Une question ?}
\og Je ne comprends pas à quoi peuvent bien servir ces nouveaux modes de compilation. Après tout, \verb?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 ou des situations particulières qui ne fonctionnent pas sous \verb?PDFLaTeX? \dots{} mais chaque chose en son temps !
\end{attentionbox}

\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] {\texttt{LaTeX} \linebreak ou \linebreak \texttt{XeLaTeX}};
\draw[<-, > = triangle 60] (rect.west) --++ (-1,0) node[left, text width = 1.5cm, Red] {Fichier \texttt{.tex}};
\draw[->, > = triangle 60] (rect.east) --++ (1,0) node[right, text width = 1.5cm, Green] {Fichier \texttt{.pdf}};
\draw[<-, > = triangle 60] (rect.north) --++ (0,1) node[above, Cyan] {Contraintes};
\end{tikzpicture}
\caption{Schématisation de l'utilisation d'un mode de compilation}
\end{figure}

Bon, voyons un peu ces ``contraintes'' (classes, packages, \dots{}) qui nous obligent à utiliser un mode de compilation plutôt qu'un autre. \\

\textcolor{BrickRed}{\textbf{Attention :}} je risque de citer des packages ou classes jamais abordés jusqu'à présent. Certes, selon le préambule, tu peux/dois aller te renseigner à leur sujet. Toutefois, sache aussi que je les présente plus loin dans ce guide.

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

Si \LaTeX{} est très puissant, il connaît quelques limites et incompatibilités qui empêchent de générer certains résultats. C'est d'ailleurs le but du projet d'amélioration de \LaTeX{} : s'affranchir de ces limites, entre autres. Nom de code : \LaTeX{}3Project ; site officiel : \url{http://www.latex-project.org/latex3/}. \\

\`A l'heure actuelle, j'ai recensé les différents cas d'utilisation possibles suivants :

\begin{enumerate}
\item générer un \texttt{PDF} ``simple'' (rapport normal, avec juste des images et des commandes ``basiques''),

\item générer un \texttt{PDF} avec des dessins faits sous \texttt{PSTricks} (schémas, circuits électriques, \dots{}),

\item changer la police d'écriture (cf. p. \pageref{chgt_police}),

\item inclure et/ou fusionner des fichiers \texttt{PDF} dans le rapport (cf. p. \pageref{fusion_pdf}),

\item insérer des images vectorielles \texttt{.eps},

\item générer une bibliographie,

\item générer un index (cf. p. \pageref{index}) ;
\end{enumerate}

\noindent{}et du coup, pour chaque cas, il est donc possible de compiler de la manière suivante, \textcolor{RoyalPurple}{\textbf{avec les contraintes associées :}}

\begin{enumerate}
\item \verb?PDFLaTeX? $\Rightarrow$ images au format \verb?png? ou \verb?jpg?

\item[OU] \verb?LaTeX? $\Rightarrow$ images au format \verb?eps? $\Rightarrow$ convertir les images si besoin, \\ % Petit truandage pour que ça rende bien

\item \verb?LaTeX? $\Rightarrow$ le plus rapide

\item[OU] \verb?XeLaTeX? $\Rightarrow$ le plus long \dots{} \\

\item \verb?XeLaTeX? : attention, certaines commandes ne sont plus interprétées (le symbole \degres{} ne fonctionne plus avec \verb?\degres{}? mais s'écrit directement au clavier ; idem pour \verb?\og? et \verb?\fg? qui peuvent être appelés de manière plus générique par \verb?\guillemotleft{}? et \verb?\guillemotright{}?), \\

\item \verb?PDFLaTeX? OU \verb?XeLaTeX?, \\

\item \verb?PDFLaTeX? OU \verb?LaTeX?, \\

\item \verb?PDFLaTeX? OU \verb?LaTeX?, \\

\item \verb?PDFLaTeX? OU \verb?LaTeX? ou \verb?XeLaTeX?. \\
\end{enumerate}

Il faut donc bien comprendre que, \textit{a priori}, certaines combinaisons sont impossibles à réaliser :

\begin{itemize}[label = \ding{213}]
\item dessiner et inclure des \texttt{PDF} $\Rightarrow$ passer sous \verb?XeLaTeX? $\Rightarrow$ génération plus longue \dots{}

\item dessiner et générer une bibliographie $\Rightarrow$ passer sous \verb?LaTeX? $\Rightarrow$ génération rapide,

\item dessiner, générer une bibliographie ET inclure des \texttt{PDF} : \textbf{IMPOSSIBLE} \dots{} avec \texttt{PSTricks}. \\
\end{itemize}

Après plusieurs recherches et tentatives de réussir à tout générer sous \verb?PDFLaTeX?, comme en témoigne la génération d'index et ce guide, il existe une et une seule manière de réussir à tout combiner (dessins, bibliographie, index, inclusion de \texttt{PDF} et même écrire du code comme je l'ai fait tout le long de ce guide) : dessiner avec \texttt{TikZ}. 

Si tu es intéressé, tu peux aller te renseigner sur Internet ou profiter du chapitre à ce sujet, p. \pageref{chap_dessin_tikz}.

\begin{attentionbox}{Et les classes ?}
\og Tu as dit que des classes peuvent poser problèmes mais tu n'as cité que des packages pour l'instant. Essaierais-tu de nous tromper ? \fg{} \\

Ah, il y en a qui suit, cela fait plaisir. Non, je n'ai pas oublié. Je profite au contraire de la possibilité de générer de telles apartés pour en parler.

Actuellement, je n'ai rencontré qu'une seule classe qui oblige à compiler sous \verb?LaTeX? : \verb?Powerdot?, pour faire des diaporamas professionnels. Comme il peut être vite pénible d'avoir à convertir une multitude d'images au format \verb?.eps?, une solution consiste à utiliser \verb?Beamer?, qui a le bon goût de fonctionner sous \verb?PDFLaTeX?. \\

Pour plus d'informations sur \verb?Beamer?, je te renvoie à la page \pageref{beamer} de ce guide.
\end{attentionbox}

\section{Bilan}

Toujours en vie ? Je veux bien croire cette partie un peu technique. Elle demande un peu de pratique et de se frotter aux erreurs pour comprendre le fonctionnement et l'utilisation des modes de compilation. \\

Hormis le changement de police, il existe toujours un moyen de compiler sous \verb?PDFLaTeX? (mode rapide et simple à utiliser pour rappel). Et si les explications précédentes sont un peu indigestes de prime abord, j'ai finalisé ce chapitre par un arbre synthétique quant au choix d'un mode de compilation :

\begin{center}
\begin{tikzpicture}[grow cyclic, text width = 1.3cm, align = center, color = Red, level/.style = {level distance = 2cm, ->, > = triangle 60}, level 1/.style = {level distance = 2.5cm, sibling angle = 60}, level 3/.style = {sibling angle = 45}]
\tikzstyle{PDFstyle} = [Green]
\tikzstyle{Lastyle} = [Orange]
\tikzstyle{Xestyle} = [Cyan]

\node{\large{}Fichier \texttt{.tex}}
	child [color = Orchid] { node {Police}
		child [color = Black] { node {Native}
			child { node[PDFstyle] {\texttt{PDFLaTeX}}}
			child { node[Xestyle] {\texttt{XeLaTeX}}}
		}
		child [color = Black] { node {Externe}
			child { node[Xestyle] {\texttt{XeLaTeX}}}
		}
	}
	child [color = Orchid] { node {Inclure \texttt{PDF}}
		child { node[PDFstyle] {\texttt{PDFLaTeX}}}
		child { node[Xestyle] {\texttt{XeLaTeX}}}
	}
	child [color = Orchid] { node {Images}
		child [color = Black] { node {\texttt{.jpg} \linebreak \texttt{.png}}
			child { node[PDFstyle] {\texttt{PDFLaTeX}}}
			child { node[Xestyle] {\texttt{XeLaTeX}}}
		}
		child [color = Black] { node {\texttt{.eps}}
			child { node[PDFstyle] {\texttt{PDFLaTeX}}}
			child { node[Xestyle] {\texttt{XeLaTeX}}}
			child { node[Lastyle] {\texttt{LaTeX}}}
		}
	}
	child [color = Orchid] { node {Biblio.}
		child { node[PDFstyle] {\texttt{PDFLaTeX}}}
		child { node[Lastyle] {\texttt{LaTeX}}}
	}
	child [color = Orchid] { node {Index}
		child { node[PDFstyle] {\texttt{PDFLaTeX}}}
		child { node[Xestyle] {\texttt{XeLaTeX}}}
	}
	child [color = Orchid] { node {Dessiner}
		child [color = Black] { node {\texttt{PSTricks}}
			child { node[Lastyle] {\texttt{LaTeX}}}
			child { node[Xestyle] {\texttt{XeLaTeX}}}
		}
		child [color = Black] { node {\texttt{TikZ}}
			child { node[PDFstyle] {\texttt{PDFLaTeX}}}
			child { node[Xestyle] {\texttt{XeLaTeX}}}
		}
	};
\end{tikzpicture}
\end{center}

% Petit bilan dans une boite : PDFLaTeX = le plus générique et pratique (conversion directe du tex en pdf) ; LaTeX = série de transformation (rapide sur de petits documents ; plus de temps sur les plus longs car conversion eps to pdf ; emploi obligatoire de l'eps) ; XeLaTeX = un équivalent à PDFLaTeX (moins rapide, quelques rares différences dans les commandes ; utilisation de toutes les polices d'écriture)

Du coup, si tu veux utiliser plusieurs fonctionnalités, dès lors qu'elles débouchent sur le même mode de compilation, c'est bon, tu peux les utiliser facilement. Sinon, il faut trouver une autre solution ou essayer une autre approche.

%\begin{boite}[colback = Goldenrod, boxrule = 3 pt, coltitle = White]{Petit bilan}{BrickRed}
\begin{boite}{Petit bilan}{Gold}
Nous avons à disposition 3 modes de compilation :

\begin{itemize}[label = \ding{118}]
\item \verb?PDFLaTeX? : le plus pratique et simple à utiliser ; conversion directe du fichier \verb?.tex? en \verb?.pdf?, \\

\item \verb?LaTeX? et co. : série de transformations (efficaces sur de petits documents mais conversion \verb?PS -> PDF? plus longue sur des documents plus importants) ; emploi obligatoire du format \verb?.eps? pour les images, \\

\item \verb?XeLaTeX? : équivalent à \verb?PDFLaTeX? (moins rapide, quelques rares différences dans les commandes pour le texte) ; utilisation possible de n'importe quelle police d'écriture (\textit{Calibri}, \textit{Arial}, \dots{}).
\end{itemize}
\end{boite}

Bien, je crois avoir assez parlé de théorie désormais. Repassons à un peu plus de pratique sous \LaTeX{}.