Vue d’ensemble de LaTeX
Qu’est-ce que LaTeX?
LaTeX est un système de composition de document. Il fut à l’origine créé par Leslie Lamport et est desormais maintenu par un groupe de volontaires (http://latex-project.org). Il est largement utilisé, en particulier pour les documents complexes et techniques, tels que ceux impliquant des mathématiques.
Un utilisateur LaTeX écrit un fichier d’entrée contenant le texte d’un document avec des commandes qui y sont intercalées pour décrire comment le texte doit être formaté. LaTeX est mis en œuvre comme un ensemble de commandes liées s’interfaçant avec le programme de composition TeX de Donald E. Knuth (le terme technique est que LaTeX est un paquet de macros pour le moteur TeX). L’utilisateur produit le document de sortie en donnant ce fichier d’entrée au moteur TeX.
Le terme LaTeX est aussi parfois utilisé pour signifier le langage à balises dans lequel le code source du document est écrit, c.-à-d. pour signifier l’ensemble des commandes à la disposition d’un utilisateur de LaTeX.
Le nom LaTeX est l’abréviation de “Lamport TeX”. On le prononce LA-TÈQUE. Au sein du document, on produit le logo avec \LaTeX. Là où l’utilisation du logo n’est pas raisonnable, comme dans du texte brut, écrivez le ‘LaTeX’.

Début et fin
Les fichiers LaTeX ont une structure globale simple, avec un début et une fin standards. Voici un exemple « Bonjour le monde » :

\documentclass{article}
\begin{document}
Bonjour le monde \LaTeX.
\end{document}

Ici ‘article’ et ce qu’on appelle la classe de document, implémentée dans une fichier article.cls. N’importe quelle classe de document peut être utilisée. Quelques classes de document sont définies par LaTeX lui-même, et un grand nombre d’autres sont largement disponibles. Voir Document classes.
Vous pouvez inclure d’autres commandes LaTeX entre les commandes \documentclass et \begin{document} (cette zone est appelée le préambule).
Le code \begin{document} ... \end{document} est ce qu’on appelle un environnement ; l’environnement ‘document’ (et aucun autre) est obligatoire dans tous les documents LaTeX (voir document). LaTeX fournit lui-même beaucoup d’environnements, et bien plus encore sont définis séparément. Voir Environments.
Les rubriques suivantes discutent de la façon de produire des PDF et d’autres format de sortie à partir d’un fichier d’entrée LaTeX.

Fichiers de sortie
LaTeX produit un fichier de sortie principal et au moins deux fichiers accessoires. Le nom du fichier de sortie principal se termine soit en .dvi soit en .pdf.
.dvi 	 Si il est invoqué avec la commande système latex, alors il produit un fichier « DeVice Independent[1] » (.dvi). Vous pouvez visualiser ce fichier avec une commande comme xdvi, ou le convertir en fichier PostScript .ps avec dvips ou en fichier « Portable Document Format[2] » .pdf avec dvipdfmx. Un grand nombre d’autres progammes utilitaires DVI sont disponibles (http://mirror.ctan.org/dviware).
[1] Indépendant du périphérique de sortie, ce n’est toutefois pas un format portable de document
[2] Format portable de document
.pdf 	 Si LaTeX est invoqué avec la commande système pdflatex, parmi d’autres commandes (voir TeX engines), alors la sortie principale est un fichier “Portable Document Format” (.pdf). Typiquement, il s’agit d’un fichier autonome, avec toutes les polices et images incorporées.
LaTeX produit aussi au moins deux fichier supplémentaires.
.log 	 Ce fichier de transcription, ou fichier journal, contient des informations sommaires telles que la liste des paquetages chargés. Il contient aussi des messages de diagnostic et possiblement des informations supplémentaires concernant toutes erreurs.
.aux 	 De l’information auxiliaire est utilisée par LaTeX pour des choses telles que les doubles renvois. Par exemple, la première fois que LaTeX trouve un renvoi en aval — une double référence à quelque-chose qui n’est pas encore apparu dans le code source — il apparaîtra dans la sortie comme un double point d’interrogation ??. Quand l’endroit auquel le renvoi fait référence finit par appraître dans le code source, alors LaTeX écrit son information de localisation dans ce fichier .aux. À l’invocation suivante, LaTeX lit l’inforlation de localisation à partir de ce fichier et l’utilise pour résoudre le renvoi, en remplaçant le double point d’interrogation avec la localisation mémorisée.
LaTeX peut produire encore d’autres fichiers, caractérisés par la terminaison du nom de fichier. Ceux-ci incluent un fichier .lof qui est utilisé pour fabriquer la liste des figures, un fichier .lot utilisé pour fabriquer une liste des tableaux, et un fichier .toc utilisé pour fabriquer une table des matières. Une classe de document particulière peut en créer d’autres ; cette liste n’a pas de fin définie.

Les moteurs TeX
LaTeX est défini comme un ensemble de commande qui sont exécutées par une implémentation TeX (voir Overview). Cette section donne une vue d’ensemble laconique des principaux programmes.
latex 	pdflatex 	 Dans TeX Live (http://tug.org/texlive, si LaTeX est invoqué avec les commandes système latex ou pdflatex, alors le moteur pdfTeX est exécuté (http://ctan.org/pkg/pdftex). Selon qu’on invoque latex ou pdflatex, la sortie principale est respectivement un fichier .dvi ou un fichier .pdf.
pdfTeX incorpore les extensions qu’e-TeX apporte au programme original de Knuth (http://ctan.org/pkg/etex), ce qui inclut des caractéristiques supplémentaires de programmation et la composition bi-directionnelle, et a lui-même de nombreuses extentions. e-TeX est lui-même disponible par la commande système etex, mais le langage du fichier d’entrée est du TeX de base (et le fichier produit est un .dvi).
Dans d’autres distributions TeX, latex peut invoquer e-TeX plutôt que pdfTeX. Dans tous les cas, on peut faire l’hyptohèse que les extension e-TeX sont disponibles en LaTeX.
lualatex 	 Si LaTeX est invoqué avec la commandes systèmes lualatex, alors le moteur LuaTeX est exécuté (http://ctan.org/pkg/luatex). Ce programme permet que du code écrit dans le langage script Lua (http://luatex.org) intéragisse avec la compostion faite par TeX. LuaTeX traite nativement l’entrée en Unicode UTF-8, peut traiter les polices OpenType et TrueType, et produit un fichier .pdf par défaut. Il y a aussi dvilualatex pour produire un fichier .dvi, mais cela est rarement utilisé.
xelatex 	 Si LaTeX est invoqué avec la commandes système xelatex, le moteur XeTeX est exécuté (http://tug.org/xetex). Comme LuaTeX, XeTeX prend en charge nativement UTF-8 Unicode et les polices TrueType et OpenType, bien que l’implementation soit complètement différente, utilisant principalement des bibliothèque externe plutôt que du code interne. XeTeX produit un fichier .pdf en sortie ; il ne prend pas en charge la sortie DVI.
En interne, XeTeX crée un fichier .xdv file, une variante de DVI, et traduit cela en PDF en utilisant le programme (x)dvipdfmx, mais ce processus est automatique. Le fichier .xdv n’est utile que pour le débogage.
D’autres vairantes de LaTeX et TeX existent, par ex. pour fournir une prise en charge supplémentaires du japonais des d’autres langages ([u]pTeX, http://ctan.org/pkg/ptex, http://ctan.org/pkg/uptex).

Syntaxe des commandes LaTeX
Dans le fichier d’entrée LaTeX, un nom de commande commence avec une contr’oblique, \. Le nom lui-même consiste soit en (a) une chaîne de lettres ou (b) une unique non-lettre.
Les noms de commandes LaTeX sont sensibles à la casse de sorte que \pagebreak diffère de \Pagebreak (ce dernier n’est pas une commande standarde). La plupart des noms de commandes sont en bas de casse, mais en tout cas vous devez saisir toutes les commandes dans la même casse où elles sont définies.
Une commande peut être suivie de zéro, un ou plus d’arguments. Ces arguments peuvent être soit obligatoires, soit optionnels. Les arguments obligatoires sont entre accolades, {...}. Les arguments optionnels sont entre crochets, [...]. En général, mais ce n’est pas universel, si la commande prend un argument optionnel, il vient en premier, avant tout argument obligatoire.
Au sein d’un argument optionnel, pour utiliser le crochet fermant (]) cachez le au sein d’accolades, comme dans \item[crochet fermant {]}]. De même, si un argument optionnel vient en dernier, sans argument obligatoire à sa suite, alors pour qie le premier caractère dans le texte suivant soit un crochet ouvrant, cachez le entre accolades.
LaTeX a la convetion que certaines commandes ont une forme en a * qui est en relation avec la forme sans le *, telles que \chapter et \chapter*. La différence exacte de comportement dépend de la commande.
Ce manuel décrit toutes les options accepté et les formes en * pour les commandes dont il traite (à l’exeption des omissions involontaires, ou bogues de ce manuel).

Les environnements
Synopsis :

\begin{nom environnement}
  ...
\end{nom environnement}

Une zone du code source LaTeX, au sein de laquelle il y a un comportement différent. Par exemple, pour la poésie en LaTeX mettez les lignes entre \begin{verse} et \end{verse}.

\begin{verse}
    There once was a man from Nantucket \\
     ...
\end{verse}

Voir Environments pour une liste des environnements.
Le nom environnement au début doit s’accorder exactement avec celui à la fin. Ceci comprend le cas où nom environnement se termine par une étoile(*) ; l’argument à la fois de \begin et \end doit comprendre l’étoile.
Les environnements peuvent avoir des arguments, y compris des arguments optionnels. L’exemple ci-dessous produit un tableau. Le premier argument est optionnel (et implique de la table est alignée verticalement sur sa première ligne) alors que le second argument et obligatoire (il spécifie le format des colonnes).

\begin{tabular}[t]{r|l}
  ... lignes du tableau ...
\end{tabular}

Les déclarations de commandes
Une commande qui change la valeur, ou change la signification, d’une autre commande ou paramètre. Par exemple, la commande \mainmatter change le réglage de la numérotation des pages en passant de numéros romains à des numéros arabes.

\makeatletter et \makeatother
Synopsis :

\makeatletter
  ... définition de commande comprenant @ dans leur nom ..
\makeatother

Utilisé pour redéfinir des commandes internes de LaTeX. \makeatletter a pour effet que le caractère arobe @ ait le code de catégorie des lettres, c.-à-d. 11. \makeatother règle de code de catégorie de @ à 12, sa valeur d’origine.
À mesure que chaque caractère est lu par TeX pour LaTeX, un code de catégorie lui est assigné. On appelle aussi ce code catcode pour faire court. Par exemple, la contr’oblique \ reçoit le catcode 0, qui correspond aux catactères qui commencent une commande. Ces deux commandes altèrent le catcode assigné à @.
Cette altération est nécessaire parce que beaucoup des commandes de LaTeX utilisent @ dans leur nom, de sorte à empécher les utilisateurs de définir accidentellement une commande qui remplacerait l’une des commandes privées de LaTeX. Les noms de commandes consistent en un caractère de catégorie 0, d’ordinaire une contr’oblique, suivi de lettres, c.-à-d. des caractères de catégorie 11 (à ceci près q’un nom de commande peut aussi consister d’un catactère de catégorie 0 suivi d’un seul symbole non-lettre). Ainsi sous le régime par défaut de codes de catégorie, les commandes définies par l’utilisateur ne peuvent pas contenir de @. Mais \makeatletter et \makeatother permettent aux utilisateurs de définir et re-définir des commandes dont le nom comprend un @.
À utiliser dans un fichier .tex, dans le préambule. Ne pas utiliser dans des fichiers .sty ou .cls puisque les commandes \usepackage et \documentclass règlent le code de catégorie de l’arobe à celui d’une lettre.
Pour une liste complète des macros contenant un arobe dans leur nom, voir le document http://ctan.org/pkg/macros2e. Ces macros sont surtout à l’intention des auteurs de classes et de paquetages.
L’exemple ci-après est typique. Une commande \these@nomuniversite se trouve dans le fichier de classe de l’utilisateur. L’utilisateur veut changer sa définition. Pour cela, il suffit d’insérer les trois lignes suivantes dans le préambule, avant le \begin{document} :

\makeatletter
\renewcommand{\these@nomuniversite}{Université Lyon III Jean Moulin}
\makeatother

\@startsection
Synopsis :

\@startsection{nom}{niveau}{retrait}{avant}{après}{style}

Cette commande permet de redéfinir les commandes de rubricage telles que \section ou \subsection.
Notez que le paquetage titlesec rend la manipulation du rubricage plus facile. De plus, bien que la plupart des exigences concernant les commandes de rubricage peuvent être remplies avec \@startsection, ce n’est pas le cas de toutes. Par exemple, dans les classes LaTeX standardes book et report les commandes \chapter et \report ne sont pas construite de cette manière. Pour fabriquer une telle commande il est possible d’utiliser la commande \secdef.
Techniquement, cette commande a la forme :

\@startsection{nom}{niveau}{retrait}{avant}{après}{style}
    *[titretdm]{titre}

de sorte que faire :

\renewcommand{\section}{\@startsection{nom}{niveau}{retrait}%
     {avant}{après}{style}}

redéfinit \section en gardant sa forme standarde d’appel \section*[titretdm]{titre}. Voir Sectioning et les exemples plus bas.
nom 	Nom du compteur (qui doit être défini séparément) utilisé pour numéroter le titre de rubrique. Ceux le plus communément utilisés sont section, subsection, ou paragraph. Bien que dans ces trois cas le nom du compteur soit le même que celui de la commande elle-même, utiliser le même nom n’est pas exigé.
Alors \thename affiche le numéro de titre, et \namemark sert aux en-têtes de page.
niveau 	Un entier donnant la profondeur de la commande de rubricage, par ex. 0 pour chapter (ceci ne s’applique qu’aux classes standardes book et report), 1 pour section, 2 pour subsection, 3 pour subsubsection, 4 pour paragraph et 5 pour subparagraph. Dans les classes book et report, part a pour niveau -1, alors que dans la classe article, part a pour niveau 0.
Si niveau est inférieur ou égal à la valeur de secnumdepth alors les titres pour cette commande de rubricage sont numérotés. Par ex. dans un article, si secnumdepth vaut 1 alors une commande \section{Introduction} produira en sortie quelque chose du genre de 1 Introduction alors que \subsection{Historique} produit en sortie quelque chose du genre de Historique, sans numéro en préfixe. Voir Sectioning/secnumdepth.
Si niveau est inférieur ou égal à la valeur de secnumdepth alors la table des matières aura un article pour cette rubrique. Par exemple, dans un article, si tocdepth vaut 1 alors la table des matières listera les sections, mais pas les subsections.
retrait 	Une longueur donnant le renfoncement de toutes les lignes du titre relativement à la marge. Pour un renfoncement nul, utilisez 0pt. Une valeur négative telle que -1em cause un débord du titre dans la marge.
avant 	Longueur dont la valeur absolue est la longueur de l’espace vertical à insérer avant le titre de la rubrique. Cet espacement est ignoré si la rubrique commence au début d’une page. Si en plus avant est négatif, alors le premier paragraphe suivant immédiatement le titre n’est pas renfoncé, s’il est positif ou nul il l’est. (Notez que l’opposé de 1pt plus 2pt minus 3pt est -1pt plus -2pt minus -3pt).
Par exemple si avant vaut -3.5ex plus -1ex minus -0.2ex alors pour commencer la nouvelle rubrique, LaTeX ajoute environ 3,5 fois la hauteur d’une lettre x en espace veritical, et le premier paragraphe de la rubrique n’est pas renfoncé. Utiliser une longueur élastique, c.-à-d. comprenant plus et minus, est une bonne pratique ici car cela donne à LaTeX plus de latitude lors de la fabrication de la page.
La quantité totale d’espace vertical entre la ligne de base de la ligne précédant le titre de cette rubrique est la ligne de base du titre est la somme du \parskip dans la police du corps de texte, du \baselineskip de la police du titre, et de la valeur absolue de l’argument avant. Cet espace est typiquement élastique et peut se dilater ou se contracter. (Si la rubrique commence en début d’une page de sorte que cet espace soit ignoré, alors la ligne de base du titre correspond à la ligne de base qu’aurait la première ligne de texte sur cette page si celle-ci commençait par du texte).
après 	Longueur. Lorsque elle est positive ou nulle, il s’agit de l’espace vertical à insérer après le titre de la rubrique. Lorsque elle est négative, alors le titre fait corps avec le paragraphe le suivant immédiatement. Dans ce cas la valeur absolue de la longueur donne l’espace horizontal entre la fin du titre et le début du paragraphe suivant. (Notez que l’opposé de 1pt plus 2pt minus 3pt est -1pt plus -2pt minus -3pt).
Comme c’est le cas avec avant, utiliser une longueur élastique avec des composantes plus et minus est une bonne pratique ici puisque elle donne à LaTeX plus de latitude pour assembler la page.
Si après est positif ou nul alors la quantité totale d’espace vertical entre la ligne de base du titre de la rubrique et la ligne de base de la première ligne du paragraphe suivant est la somme du \parskip de la police du titre, de \baselineskip de la police du corps de texte, et de la valeur de après. Cet espace est typiquement élastique de sorte qu’il puisse se dilater ou se contracter. (Notez que du fait que le signe d’après contrôle que le titre soit indépendant du texte le suivant, ou fasse corps avec lui, vous ne pouvez pas utiliser un après négatif pour annuler une partie du \parskip).
style 	Contrôle le style du titre, voir les exemples plus bas. Les commandes typiquement utilisées ici sont \centering, \raggedright, \normalfont, \hrule, ou \newpage. La dernière commande au sein de style peut être une commande prenant un argument, telle que \MakeUppercase ou \fbox. Le titre de la rubrique est passé en argument à cette commande. Par exemple régler style à \bfseries\MakeUppercase a pour effet de produire des titres gras et en capitales.
Voici des exemples. Pour les utiliser mettez les soit au sein d’un fichier de paquetage ou de classe, ou placez les dans le préambule d’un document LaTeX entre des commandes \makeatletter et \makeatother. (Le message d’erreur You can't use `\spacefactor' in vertical mode. est le plus probable lorsque on oublie de faire cela). Voir \makeatletter and \makeatother.
L’exemple suivant redéfinit la commande de rubricage \section pour qu’elle centre le titre et le mette en gras :

\renewcommand\section{%
  \@startsection{section}% nom.
  {1}% niveau.
  {0pt}% retrait.
  {-3.5ex plus -1ex minus -.2ex}% avant.
  {2.3ex plus.2ex}% après.
  {\centering\normalfont\Large\bfseries}}% style.

Cet exemple met les titres de subsection en petites capitales, et leur fait faire corps avec le paragraphe suivant.

\renewcommand\subsection{%
  \@startsection{subsection}%  nom.
    {2}% niveau.
    {0em}% retrait.
    {-1ex plus 0.1ex minus -0.05ex}% avant.
    {-1em plus 0.2em}% après.
    {\scshape}% style.
  }

Les exemples précédents redéfinissait les commandes de titre de rubriques existantes. celui-ci en définit une nouvelle, illustrant la nécessité d’un compteur et de macros pour son affichage.

\setcounter{secnumdepth}{6}% affiche les compteur justqu'à ce niveau
\newcounter{subsubparagraph}[subparagraph]% compteur pour la
                                          % numérotation
\renewcommand{\thesubsubparagraph}%
   {\thesubparagraph.\@arabic\c@subsubparagraph}% comment afficher
                                                % la numérotation
\newcommand{\subsubparagraph}{\@startsection
                         {subsubparagraph}%
                         {6}%
                         {0em}%
                         {\baselineskip}%
                         {0.5\baselineskip}%
                         {\normalfont\normalsize}}
\newcommand*\l@subsubparagraph%
  {\@dottedtocline{6}{10em}{5em}}% pour la table des matières
\newcommand{\subsubparagraphmark}[1]{}% pour les en-têtes de page

\@ifstar
Vous l’avez sans doute remarqué, beaucoup d’environnements ou commandes standards de LaTeX existent sous une variante étoilée. Vous pouvez avoir envie de reprendre cette idée quand vous définissez vos commandes et arguments.
Si vous avez lu \newenvironment & \renewenvironment, vous aurez compris que c’est immédiat pour les environnements car l’étoile est un caractère autorisé dans les noms d’environnements. Il vous suffit donc de faire \newenvironment{monenv} et \newenvironment{monenv*} avec les définitions souhaitées.
Pour les commandes, c’est plus compliqué car l’étoile ne peut pas faire partie du nom de la commande. Il y aura donc une première commande, qui devra être capable de regarder si elle est ou non suivie d’une étoile et d’adapter son comportement en conséquence. Cette première commande ne pourra pas accepter d’argument, mais pourra faire appel à des commandes qui en acceptent. Par ailleurs, on utilise la commande \@ifstar interne du noyau LaTeX et vous pouvez vous reportez à « \makeatletter and \makeatother » pour comprendre pourquoi cela implique l’usage d’un bloc \makeatletter...\makeatother.
Dans cet exemple, on définit \ciel comme une commande avec un argument obligatoire et admettant une variante étoilée \ciel* également avec un argument obligatoire :

\makeatletter
\newcommand*\ciel@starred[1]{ciel #1 étoilé}
\newcommand*\ciel@unstarred[1]{ciel #1 non étoilé}
\newcommand\ciel{\@ifstar{\ciel@starred}{\ciel@unstarred}}
\makeatother

ainsi, \ciel{bleu} composera « ciel bleu non étoilé » tandis que \ciel*{nocturne} composera « ciel nocturne étoilé ».
Notez que les commandes intermédiaires \ciel@starred et \ciel@unstarred comportent un @ dans leur nom ce qui est possible puisque elles apparaissent au sein d’un bloc \makeatletter...\makeatother. Ceci assure qu’elles ne puissent pas être utilisées directement dans le document. L’utilisation de @ dans le nom comporte certes un risque de collision avec une commande interne du noyeau LaTeX, mais une telle collision est facile à détecter et corriger car \newcommand*{\cmd} vérifie que si la commande \cmd n’est pas déjà définie et génère une erreur si c’est le cas.
Voici un autre exemple où la commande \agentsecret comporte deux arguments et sa variante étoilée \agentsecret* un seul :

\makeatletter
\newcommand*\agentsecret@starred[1]{\textsc{#1}}
\newcommand*\agentsecret@unstarred[2]{\textit{#1} \textsc{#2}}
\newcommand\agentsecret{\@ifstar{\agentsecret@starred}{\agentsecret@unstarred}}
\makeatother

Avec cette définition la célèbre réplique de l’agent 007 :

Je m'appelle \agentsecret*{Bond}, \agentsecret{James}{Bond}.

est équivalente à :

Je m'appelle \textsc{Bond}, \textit{James} textsc{Bond}.

Un dernier mot : contrairement aux noms d’environnement où l’étoile fait partie du nom lui-même, et pourrait donc être à n’importe quelle position, dans le nom d’une commande l’étoile est comme une sorte d’argument optionnel. D’un point de vue purement TeXnique il est donc possible de mettre un nombre indéfini d’espaces entre la commande et l’étoile. Ainsi \agentsecret*{Bond} et \agentsecret *{Bond} sont équivalents. Toutefois la pratique commune est de ne jamais insérer de tels espaces.