\chapter{Traitement des erreurs}

\label{chap_erreurs}Les erreurs peuvent être nombreuses sous \LaTeX{} et pas toujours évidentes à corriger. Tout d'abord, nous appelons \og erreur \fg{} en \LaTeX{} tout bout de code qui nuit à la compilation du document et l'empêche de se poursuivre. Une erreur ne permet donc pas au compilateur de produire le fichier PDF espéré.

Ensuite, il est important de savoir que toutes les erreurs qui vont être abordées sont retournées par \LaTeX{}, suite à la compilation. Ces erreurs sont affichées par \Texmaker{}, dans une fenêtre spécifique tout en bas (bouton \og \verb?Messages/Log? \fg{} en bas à gauche pour faire apparaître la fenêtre \og Informations du compilateur \fg{} si inexistante).

\begin{figure}[H]
\includegraphics[width = \linewidth]{aide_LaTeX1.png}
\caption{Rappel de l'organisation de l'interface de \Texmaker{}}
\end{figure}

\textbf{Quand il y a une erreur, cette fenêtre t'indique aussi la ligne de code qui pose problème à \LaTeX{} pour compiler} (colonne \verb?Line?). 90 \% du temps, c'est sur cette ligne ou dans ses environs qu'il faut relire son code et chercher l'erreur.

Voyons maintenant la liste des erreurs couramment rencontrées quand tu débutes avec \LaTeX{}, et mes conseils personnels pour les éviter, synthétisée sous forme d'un tableau. \\

\begin{longtable}{p{0.45\linewidth}p{0.45\linewidth}}
% Définition des headers & footers du longtable
{\hspace*{\fill}\textsc{Les erreurs courantes}\hspace*{\fill}} & {\hspace*{\fill}\textsc{Comment les corriger}\hspace*{\fill}} \\ \hline
\endhead
& \hfill\textit{(suite sur la page suivante)} \\
\endfoot
\multicolumn{2}{@{\hrulefill}c@{\hrulefill}}{\raisebox{-3pt}{~~\textsc{Fin du tableau}~~}}
\endlastfoot
% Contenu du longtable
\verb?Missing $ inserted? & 2 cas fréquents : \begin{itemize}[label = \ding{213}, leftmargin = *]
\item oubli de fermer un mode mathématiques $\Rightarrow$ le fermer avec le symbole \verb?$? manquant ;
\item emploi d'un symbole propre au mode mathématiques (\verb?^? ou \verb?_? par exemple) $\Rightarrow$ supprimer le \verb?^? inutile ou utiliser la commande \verb?\_? pour afficher un \textit{underscore} en mode texte.
\end{itemize} \\

\verb?Missing } inserted? \par ou \par \verb?I suspect you have? \par \verb?forgotten a `}'? & Très probablement, oubli de fermer une commande par une accolade \verb?}? $\Rightarrow$ Commencer par chercher les erreurs parmi les lignes de codes écrites ou modifiées depuis la dernière compilation. \par Au début, \textbf{compiler régulièrement son code} permet de simplifier la correction de cette erreur.\footnote{C'est plus pratique de corriger plein de petites erreurs que de s'arracher les cheveux sur un très grand nombre.} \\ \\

\verb?! Too many }'s.? & Plus rare : oubli d'une accolade ouvrante. Mêmes conseils que ci-dessus. \\ \\

\verb?There's no line to end here? & Saut de ligne incompris par \LaTeX{} (après un environnement \verb?center? par exemple). \par $\Rightarrow$ Commencer par regarder le résultat sans saut de ligne : certains environnements laissent un peu de blanc avant et après (comme \verb?center? justement). Autrement, utiliser la commande \verb?\vspace?. \\ \\

\verb?undefined control sequence? & 2 cas possibles : \begin{itemize}[label = \ding{213}, leftmargin = *]
\item oubli d'un élément à un endroit, comme une virgule lors d'un espace insécable (\verb?\13? \textit{vs} \verb?\,13?) ;
	
\item appel d'une commande inexistante ou appel d'une nouvelle commande bien définie mais faute de frappe lors de son écriture.
\end{itemize} \par $\Rightarrow$ Vérifier le code et le corriger. \\ \\

\verb?Package inputenc Error:? \par \verb?Unicode char?, suivi éventuellement d'un caractère et de son code UTF-8 & Utilisation d'un caractère du clavier interdit avec ce moteur de compilation. \par L'exemple le plus courant : symbole \degres{} (commande \verb?\degres{}? sous PDF\LaTeX{} ; appel ``normal'' au clavier sous Xe\LaTeX{}).\footnote{Les moteurs de compilation sont abordés dans la partie suivante si tu es intéressé.} \par ~ \par Erreur fréquente si texte copier-collé d'un autre document (Word, PDF, page Internet) \par $\Rightarrow$ Dans un 1\up{er} temps, reprendre tous les accents et les apostrophes.\footnote{Dans ce cas, la fonction \verb?Remplacer? de \Texmaker{} peut se révéler très utile.} \\ \\

\verb?Option clash for package? \par \verb?<nom_package>? & Conflit entre certains packages. \par $\Rightarrow$ Charger les packages dans un ordre bien précis. (exemple : package \verb?xcolor? avanr \verb?wallpaper?). \\ \\

\verb?Extra alignment tab has? \par \verb?been changed to \cr? & Erreur dans un tableau : oubli hautement probable d'indiquer un changement de ligne (\verb?\\?). \par $Rightarrow$ Ajouter le \verb?\\? manquant. \\ \\

\verb?! [...] \begin{document}? \par \verb?ended by \end{<env>}? \par ou \par \verb?! [...] \begin{<env>}? \par \verb?[...] ended by \end{document}? & Environnement mal ouvert ou fermé. Très fréquent à cause de l'auto-complétion. \par $\Rightarrow$ Aller à la ligne indiquée par l'erreur, regarder l'environnement concerné, corriger selon le besoin.
\end{longtable}

Voilà dans les grandes lignes les principales erreurs que j'ai recensées jusqu'à présent. Avec l'expérience, tu verras que tu en feras de moins en moins ou que tu les corrigeras très rapidement. 

Sache aussi que tu peux te rendre sur \url{http://fr.wikibooks.org/wiki/LaTeX/\%C3\%80_l\%27aide_!} si tu veux des informations complémentaires.

\begin{conseil}{Mon conseil le plus important}
Dès que tu ouvres un \verb?$? ou un \verb?\[? ou un \verb?{? ou un délimiteur, ferme-le en suivant. Puis, tu reviens en arrière et tu écris ton code. Le nombre d'erreurs devrait diminuer.

L'auto-complétion de \texttt{Texmaker} est aussi très pratique pour éviter ce genre de désagréments. 
\end{conseil}

Par ailleurs, je souhaite revenir sur l'erreur \verb?Option clash for package?. Si jamais tu veux tester un nouveau package pour ton rapport ou adapter un code trouvé sur Internet, \textbf{\color{orange!65!red}ne jamais le faire sur ton document final !} C'est le meilleur moyen de perdre du temps (compilation et adaptation du code). Il vaut mieux procéder par étapes : \begin{enumerate}
\item Copie du code à adapter sur un nouveau fichier \verb?.tex? de test, avec juste les packages absolument nécessaires.

\item 1\up{ère} compilation pour s'assurer que le code copié fonctionne. Suppression des éléments inutiles et/ou gênants pour la compilation (commandes définies par l'utilisateur et non fournies par exemple).

\item Adaptation du code jusqu'à obtention du résultat souhaité.

\item Copie du code final dans ton rapport, ajout du/des package(s) requis, compilation et gestions des dernières potentielles erreurs.
\end{enumerate}

Tu verras que tu perdras moins de temps à compiler, à étudier le résultat dans l'affichage \Texmaker{} et tu travailles sur un fichier de test, sans pollué ton rapport. 

\begin{regles}{La règle absolue avec les packages}
Par défaut, \emph{toujours} charger le package \verb?hyperref? \emph{en dernier} ! (sauf indication contraire : cf. la documentation du package \verb?menukeys? par exemple).
\end{regles}

\vspace{\baselineskip}

Et voilà, la première partie de ce guide est (enfin) terminée. Toutes mes félicitations si tu es arrivé jusqu'ici ! J'espère avoir pu t'être d'une aide quelconque et que mes explications étaient assez claires.

Ce n'est pas absolument pas évident de débuter en \LaTeX{}. Et si je commence à avoir pas mal de repères et d'expériences, la route est encore longue avant de pouvoir maîtriser les innombrables facettes de ce langage. \\

Tu trouveras dans la partie suivante mes notes personnelles sur du code \LaTeX{} plus poussé, pour arriver à produire des résultats de plus en plus complexes. Je tenais initialement à les regrouper dans ce guide pour mon usage personnel mais je me suis rendu compte qu'elles peuvent aussi aider mes lecteurs. \\

\begin{center}
\begin{LARGE}
\bfseries{}Bon courage pour la suite et, surtout, n'oublie pas : \\[\baselineskip]
\LaTeX{}, c'est la vie !
\end{LARGE}
\end{center}