%%% Copyright (C) 2015-2024 Vincent Goulet
%%%
%%% Ce fichier fait partie du projet
%%% «Rédaction avec LaTeX»
%%% https://gitlab.com/vigou3/formation-latex-ul
%%%
%%% Cette création est mise à disposition sous licence
%%% Attribution-Partage dans les mêmes conditions 4.0
%%% International de Creative Commons.
%%% https://creativecommons.org/licenses/by-sa/4.0/

\chapter{Principes de base}
\label{chap:bases}

Un système de mise en page tel que {\LaTeX} repose sur une logique de
séparation entre l'apparence d'un document et sa structure. Si vous
avez l'habitude d'utiliser un traitement de texte, vous devrez fort
probablement vous défaire d'une vilaine habitude: vous préoccuper sans
cesse, au moment de la rédaction, de la disposition du texte.

Ce principe accepté, il vous faudra néanmoins indiquer au logiciel la
structure du document. Avec {\LaTeX} cela s'effectue par le biais de
diverses instructions que l'on insère au fil du texte. À la base, les
logiciels de traitements de texte n'opèrent pas différemment, sauf
qu'ils cachent les codes aux utilisateurs\footnote{%
 Le leader du traitement de texte jusqu'au milieu des années 1990,
 Word~Perfect, offrait l'option d'afficher l'ensemble des codes de
 mise en page. C'est malheureusement une caractéristique brillante
 que Microsoft Word et les autres progiciels développés depuis ont
 choisi d'omettre.}. %
Sous prétexte de simplicité d'utilisation, ils causent en fait bien
des mots de tête. Qui ne s'est pas déjà demandé, en utilisant un
traitement de texte moderne: «Pourquoi donc mon texte est-il
soudainement en gras?»

Ce chapitre explique comment aborder la rédaction d'un document avec
{\LaTeX} ainsi que la syntaxe de base des différents types
d'instructions que l'on peut insérer dans un texte pour en spécifier
la structure et la mise en forme.


\section{Séparation du contenu et de l'apparence}
\label{sec:bases:separation}

Lors de la rédaction avec un système de mise en page tel que {\LaTeX},
on se concentre sur le contenu et la \emph{structure} du document, et
non pas sur son \emph{apparence}. Par exemple:
\begin{itemize}
\item au lieu de prescrire qu'un titre de section doit être en gras
 14~points, on indique simplement à {\LaTeX} que le texte doit être
 traité comme un titre de section;
 \begin{demo}
   \begin{minipage}{0.45\linewidth}
\begin{lstlisting}
\textbf{\large Titre}
\end{lstlisting}
   \end{minipage}
   \hfill \faArrowRight \hfill
   \begin{minipage}{0.45\linewidth}
\begin{lstlisting}
\section{Titre}
\end{lstlisting}
   \end{minipage}
 \end{demo}
\item au lieu de décider qu'un mot sur lequel l'on souhaite insister
 sera en italique, on indique à {\LaTeX} de mettre de l'emphase sur
 ce mot sans se soucier de la mise en forme.
 \begin{demo}
   \begin{minipage}{0.45\linewidth}
\begin{lstlisting}
\textit{texte}
\end{lstlisting}
   \end{minipage}
   \hfill \faArrowRight \hfill
   \begin{minipage}{0.45\linewidth}
\begin{lstlisting}
\emph{texte}
\end{lstlisting}
   \end{minipage}
 \end{demo}
\end{itemize}

L'apparence du texte sera prise en charge par {\LaTeX}. Comme les
gabarits sont l'{\oe}uvre de spécialistes en typographie, il est
généralement préférable de ne pas les modifier. À titre d'exemple,
{\LaTeX} détermine automatiquement la largeur des marges en fonction
de la taille de la police de manière à ce que les lignes de texte
comptent approximativement 70~caractères. La raison: lorsqu'une ligne
de texte est trop longue, notre {\oe}il a de la difficulté à la suivre
sur toute sa longueur. Il a tendance à passer à la ligne inférieure,
ce qui rend la lecture plus difficile.


\section{Règles de saisie}
\label{sec:bases:saisie}

Une fois le principe de séparation du contenu et de l'apparence
compris et accepté, veillez à respecter les règles simples suivantes
lors de la saisie du texte.
\begin{enumerate}
\item On sépare les mots par une ou plusieurs \emph{espaces}. Qu'il y
 en ait une ou un millier, seule la première compte et la mise en
 page sera la même.
 \begin{demo}
   \begin{texample}
\begin{lstlisting}
Les espaces délimitent les
mots. Leur nombre n'a pas
d'importance.
\end{lstlisting}
     \producing
     Les espaces délimitent les
     mots. Leur nombre n'a pas
     d'importance.
   \end{texample}
   \begin{texample}
\begin{lstlisting}[showstringspaces=true]
Les  espaces   délimitent
les                 mots.
Leur    nombre  n'a pas
d'importance.
\end{lstlisting}
     \producing
     Les  espaces   délimitent
     les                 mots.
     Leur    nombre  n'a pas
     d'importance.
   \end{texample}
 \end{demo}
%
\item On sépare les paragraphes par une ou plusieurs lignes blanches.
 Celles-ci n'apparaitront pas nécessairement dans le texte final; les
 gabarits standards identifient les paragraphes par un retrait de
 première ligne.
 \begin{demo}
   \begin{texample}
\begin{lstlisting}
Les lignes blanches
délimitent les paragraphes.

Une ou plusieurs, ça ne fait
aucune différence!
\end{lstlisting}
     \producing
Les lignes blanches
délimitent les
paragraphes.

       Une ou plusieurs, ça ne fait aucune différence!
   \end{texample}
\begin{texample}
\begin{lstlisting}
Les lignes blanches
délimitent les paragraphes.



Une ou plusieurs, ça ne fait
aucune différence!
\end{lstlisting}
     \producing
       Les lignes blanches  délimitent
       les paragraphes.



       Une ou plusieurs, ça ne fait aucune différence!
   \end{texample}
 \end{demo}
%
\item On utilise des \emph{commandes} pour indiquer la structure du
 texte dans le texte. Celles-ci débutent presque toujours par
 le symbole «{\bs}». À la différence des logiciels de traitement de
 texte, les instructions de mise en forme du document sont donc
 toujours visibles et, par conséquent, modifiables facilement et sans
 surprise (on ne se demande donc jamais où se termine le gras).
 \begin{demo}
   \begin{texample}
\begin{lstlisting}
Les commandes sont visibles
dans le \textbf{texte},
mais évidemment pas dans le
\emph{document} fini.
\end{lstlisting}
     \producing
     Les commandes sont visibles
     dans le \textbf{texte},
     mais évidemment pas dans le
     \emph{document} fini.
   \end{texample}
 \end{demo}
\end{enumerate}


\section{Structure d'un fichier}
\label{sec:bases:structure}

Un fichier source {\LaTeX} --- dont vous trouverez un exemple simple à la
\autoref{fig:bases:parties} --- est toujours composé de deux parties:
le préambule et le corps du document.

\begin{figure}
 \centering
 \begin{minipage}{0.75\linewidth}
\begin{lstlisting}[numbers=left, numberstyle=\tiny]
\documentclass[11pt,french]{article} `\label{lst:bases:preambule_debut}'
 \usepackage{babel}
 \usepackage[autolanguage]{numprint}
 \usepackage[utf8]{inputenc}
 \usepackage[T1]{fontenc} `\label{lst:bases:preambule_fin}'

\begin{document} `\label{lst:bases:corps_debut}'

Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Donec quam nulla, bibendum
vitae ipsum vel, fermentum pellentesque
orci.

\end{document} `\label{lst:bases:corps_fin}'
\end{lstlisting}
 \end{minipage}
 \caption[Fichier source {\LaTeX} simple comportant les deux parties
 obligatoires: le préambule et le corps du document]{%
   Fichier source {\LaTeX} simple comportant les deux parties
   obligatoires: le préambule (lignes
   \ref*{lst:bases:preambule_debut}--\ref*{lst:bases:preambule_fin})
   et le corps du document (lignes
   \ref*{lst:bases:corps_debut}--\ref*{lst:bases:corps_fin}).}
 \label{fig:bases:parties}
\end{figure}

\begin{description}
\item[Préambule] Suite de commandes spécifiant la mise en forme
 globale du document (format du papier, marges, entête et pied de
 page, etc.). Il contient au minimum la commande
 \cmd{\documentclass}. Les commandes contenues dans le préambule ont
 un effet global sur le document. Les lignes
 \ref*{lst:bases:preambule_debut}--\ref*{lst:bases:preambule_fin}
 forment le préambule dans l'exemple de la
 \autoref{fig:bases:parties}.
\item[Corps du document] Contenu du document en tant que tel. Il
 débute par \verb=\begin{document}= et se termine par
   \verb=\end{document}=. Le corps du document peut aussi contenir
 des commandes, mais l'effet de celles-ci demeure presque toujours
 local. Les lignes
 \ref*{lst:bases:corps_debut}--\ref*{lst:bases:corps_fin} du code de
 la \autoref{fig:bases:parties} forment le corps du document.
\end{description}


\section{Classes et paquetages}
\label{sec:bases:classes}

La première commande du préambule est normalement la déclaration de la
\emph{classe} du document. La forme de la déclaration est la suivante:
\begin{lstlisting}
\documentclass`\oarg{options}\marg{classe}'
\end{lstlisting}
Les classes standards de {\LaTeX} sont \class{article},
\class{report}, \class{book}, \class{letter} et \class{slides}. La
\autoref{sec:organisation:classe} traite des différences entre les
diverses classes et des \meta{options} disponibles.

Les \emph{paquetages} permettent de modifier des commandes ou
d'ajouter des fonctionnalités à {\LaTeX}. On charge les paquetages
dans le préambule avec des commandes de la forme
\begin{lstlisting}
\usepackage`\marg{paquetage}'
\usepackage`\oarg{options}\marg{paquetage}'
\usepackage`\marg{paquetage1,paquetage2, ...}'
\end{lstlisting}
La première et la troisième forme permettent de charger un ou
plusieurs paquetages sans options. La seconde permet de spécifier des
\meta{options} au chargement du paquetage. Il n'est évidemment pas
possible de préciser des options avec la troisième forme puisque
{\LaTeX} ne saurait à quel paquetage celles-ci se rapportent.

Certains paquetages permettent que leurs options apparaissent parmi
les \meta{options} de la commande \cmdprint{\documentclass}. Elles
sont ainsi plus «visibles» pour d'autres paquetages. Par exemple,
l'option \code{french} que l'on retrouve dans la déclaration de la
classe à la \autoref{fig:bases:parties} est en fait une option du
paquetage \pkg{babel}.


\section{Commandes}
\label{sec:bases:commandes}

J'ai déjà fait référence à quelques reprises au concept de commande
{\LaTeX}. Cette section se penche sur leur syntaxe.

Les formes générales des commandes {\LaTeX} sont:
\begin{lstlisting}
\`\meta{nomcommande}\oarg{arg\_optionnel}\marg{arg\_obligatoire}'
\`\meta{nomcommande}'*`\oarg{arg\_optionnel}\marg{arg\_obligatoire}'
\end{lstlisting}
Ici, \meta{nomcommande} est le nom de la commande. Il débute par le
symbole «{\bs}» et il est exclusivement formé de lettres,
habituellement des minuscules ({\LaTeX} est sensible à la casse). La
forme étoilée d'une commande réalise généralement une action
légèrement différente de la version sans étoile. Par exemple, la
commande \cmd{\section} crée une nouvelle section numérotée, alors que
\cmd{\section*} n'insère aucune numérotation.

Lorsque la commande accepte des arguments, les arguments obligatoires
sont placés entre accolades \verb={ }= et les arguments optionnels
sont placés entre crochets \verb=[ ]=.

Certaines commandes n'ont aucun argument. Leur forme est alors
\begin{lstlisting}
\`\meta{nomcommande}
\end{lstlisting}
Dans ce cas, le nom de la commande se termine par tout symbole qui
n'est pas une lettre --- y compris l'espace! Cette règle fait en sorte
qu'une espace après le nom d'une commande est considérée comme un
marqueur de la fin du nom de la commande. Cette règle joue parfois de
vilains tours en «avalant» l'espace entre une commande et le mot qui
suit; voir l'\autoref{exemple:base:commandes} et
l'\autoref{ex:base:commandes}.

La portée d'une commande est limitée à la zone entre accolades
\verb={ }=, le cas échéant.

\begin{exemple}
 \label{exemple:base:commandes}
 \enlargethispage{5mm}
 Voici trois exemples de commandes {\LaTeX}: une sans argument, une
 avec un seul argument obligatoire et une commande avec deux
 arguments obligatoires et un argument optionnel.
 \begin{enumerate}
 \item La commande \cmd{\LaTeX} permet de composer de logo {\LaTeX}.
   \begin{demo}
     \begin{texample}
\begin{lstlisting}
Apprendre \LaTeX c'est
formidable!
\end{lstlisting}
       \producing
       Apprendre \LaTeX c'est
       formidable!
     \end{texample}
   \end{demo}
   Vous pouvez constater ici que l'espace suivant le nom de la
   commande a été interprétée par {\LaTeX} comme un marqueur de la
   fin de la commande et qu'elle a été supprimée du texte. Deux
   possibilités pour contourner cette particularité du langage:
   fournir un argument vide à la commande, ou placer celle-ci entre
   accolades pour limiter sa portée à elle-même:
   \begin{demo}
     \begin{texample}
\begin{lstlisting}
Apprendre \LaTeX{} c'est
formidable!
\end{lstlisting}
       \producing
       Apprendre \LaTeX{} c'est
       formidable!
     \end{texample}
     \begin{texample}
\begin{lstlisting}
Apprendre {\LaTeX} c'est
formidable!
\end{lstlisting}
       \producing
       Apprendre {\LaTeX} c'est
       formidable!
     \end{texample}
   \end{demo}
   %
 \item La commande \cmd{\emph} met de l'emphase (en général sous
   forme d'italique) sur le ou les mots en argument.
   \begin{demo}
     \begin{texample}
\begin{lstlisting}
Il est \emph{essentiel} de
connaitre la syntaxe de
{\LaTeX}.
\end{lstlisting}
       \producing
       Il est \emph{essentiel} de
       connaitre la syntaxe de
       {\LaTeX}.
     \end{texample}
   \end{demo}
   %
 \item La commande \cmd{\rule} produit un rectangle plein. Elle a
   deux arguments obligatoires: la longueur et la hauteur du
   rectangle, dans l'ordre. Un argument optionnel permet de surélever
   le rectangle au-dessus de la ligne de base (voir le
   \autoref{chap:boites} pour plus de détails).
   \begin{demo}
     \begin{texample}
\begin{lstlisting}
Réglure de 1~cm de long et
3~mm d'épais surélevée de
2~points au-dessus de la
ligne de base:
\rule[2pt]{1cm}{3mm}.
\end{lstlisting}
       \producing
       Réglure de $1$~cm de long et
       $3$~mm d'épais surélevée de
       $2$~points au-dessus de la
       ligne de base: \rule[2pt]{1cm}{3mm}.
     \end{texample}
   \end{demo}
 \end{enumerate}
 \qed
\end{exemple}

\begin{exemple}
 La commande \cmd{\bfseries} sélectionne une police
 grasse pour tout le texte qui suit.
 \begin{demo}
   \begin{texample}
\begin{lstlisting}
En typographie, la \bfseries
graisse est l'épaisseur d'un
trait ou d'un caractère.
\end{lstlisting}
     \producing
     En typographie, la \bfseries
     graisse est l'épaisseur d'un
     trait ou d'un caractère.
   \end{texample}
 \end{demo}
 Pour limiter le changement à une zone de texte, il faut la délimiter
 par des accolades.
\begin{demo}
   \begin{texample}
\begin{lstlisting}
En typographie, la {\bfseries
graisse est l'épaisseur d'un
trait} ou d'un caractère.
\end{lstlisting}
     \producing
     En typographie, la {\bfseries
     graisse est l'épaisseur d’un
     trait} ou d’un caractère.
   \end{texample}
 \end{demo}
 \qed
\end{exemple}

Vous pouvez définir des nouvelles commandes {\LaTeX} à loisir. Ceci
est expliqué au \autoref{chap:commandes}.


\section{Environnements}
\label{sec:bases:environnements}

Un environnement {\LaTeX} est une zone de texte délimitée par une
construction du type
\begin{lstlisting}
\begin`\marg{environnement}'
  ...
\end`\marg{environnement}'
\end{lstlisting}
Le contenu d'un environnement est traité différemment du reste du
texte en fonction des paramètres de l'environnement. Par exemple, le
texte à l'intérieur d'un environnement \Ie{center} est centré sur la
page.

Les changements induits par un environnement s'appliquent uniquement à
l'intérieur de celui-ci. Il en va de même des commandes utilisées à
l'intérieur d'un environnement.

\begin{exemple}
 L'environnement \Ie{quote} sert à composer des citations. Le texte à
 l'intérieur de l'environnement sera placé dans un bloc séparé du
 texte principal et en retrait des marges gauche et droite.
 \begin{demo}
   \begin{texample}
\begin{lstlisting}
La phrase
\begin{quote}
 Attention aux bogues dans
 le code ci-dessus; je ne
 l'ai pas testé, j'ai
 seulement prouvé qu'il
 était correct.
\end{quote}
est une citation célèbre du
créateur de {\TeX}, Donald
Knuth.
\end{lstlisting}
     \producing
     La phrase
     \begin{quote}
       Attention aux bogues dans le code ci-dessus; je ne l'ai pas testé,
       j'ai seulement prouvé qu'il était correct.
     \end{quote}
     est une citation célèbre du créateur de {\TeX}, Donald Knuth.
   \end{texample}
 \end{demo}
 Si la citation est dans la langue originale, il est préférable de la
 composer en italique.
 \begin{demo}
   \begin{texample}
\begin{lstlisting}
La phrase
\begin{quote}
 \itshape
 Beware of bugs in the above
 code; I have only proved it
 correct, not tried it.
\end{quote}
est une citation célèbre du
créateur de {\TeX}, Donald
Knuth.
\end{lstlisting}
     \producing
     La phrase
     \begin{quote}
       \itshape
       Beware of bugs in the above code; I have only proved it
       correct, not tried it.
     \end{quote}
     est une citation célèbre du créateur de {\TeX}, Donald Knuth.
   \end{texample}
 \end{demo}
 On remarque que l'effet de la commande \cmdprint{\itshape} s'est
 limité à l'environnement. %
 \qed
\end{exemple}


\section{Longueurs}
\label{sec:bases:longueurs}

Plusieurs commandes {\LaTeX} requièrent en argument une mesure de
largeur ou de hauteur. Dans la terminologie de {\LaTeX}, on parle plus
généralement de longueur\index{longueur} (\emph{length}).

Une longueur est un nombre positif, négatif ou nul
\emph{obligatoirement} et \emph{immédiatement} suivi d'un symbole
d'unité de mesure. Le \autoref{tab:bases:longueurs} présente les
principales unités de mesure utilisées par {\LaTeX} et le symbole
correspondant.

\begin{table}
 \caption{Principales unités de mesure pour les longueurs dans
   {\LaTeX}}
 \label{tab:bases:longueurs}
 \centering
 \begin{tabular}{lcl}
   \toprule
   Nom ou description & Symbole & Longueur équivalente \\
   \midrule
   millimètre & \texttt{mm} \\
   centimètre & \texttt{cm} & $10$~mm \\
   pouce      & \texttt{in} & $2,54$~cm \\
   point      & \texttt{pt} & $1/72,27$~pouce \\
   point PostScript     & \texttt{bp}   & $1/72$~pouce \\
   largeur de la lettre M & \texttt{em} & fonction de la police \\
   hauteur de la lettre x & \texttt{ex} & fonction de la police \\
   \bottomrule
 \end{tabular}
\end{table}

Il existe un certain nombre de longueurs prédéfinies. Les plus utiles
sont \cmd{\linewidth}, qui contient la largeur de la ligne de texte
courante, et \cmd{\textwidth}, qui contient la largeur de la page
courante. Dans du texte normal, les deux mesures sont habituellement
égales.


\section{Commentaires}
\label{sec:bases:commentaires}

Le symbole «\verb=%=» indique un commentaire dans le code source: tout
le texte après le symbole jusqu'à la fin de la ligne est ignoré par
{\LaTeX}.
\begin{demo}
 \begin{texample}
\begin{lstlisting}
texte % ignoré par LaTeX
\end{lstlisting}
   \producing
   texte % ignoré par LaTeX
 \end{texample}
\end{demo}


\section{Caractères spéciaux}
\label{sec:bases:caracteres}

Les claviers d'ordinateur mettent à la disposition des auteurs toutes
les lettres de l'alphabet (en versions minuscule et majuscule), les
chiffres de 0 à 9, un certain nombre de symboles et, selon le clavier,
des versions accentuées de certaines lettres. L'entrée des lettres et
des chiffres ne pose pas de problème particulier pour {\LaTeX}, mais
certains symboles sont réservés. De plus, certains symboles d'usage
courant ne sont pas disponibles sur les claviers.

\subsection{Espaces et retours à la ligne}
\label{sec:bases:caracteres:espaces}

J'ai déjà abordé à la \autoref{sec:bases:saisie} le traitement spécial
réservé par {\LaTeX} aux espaces et aux retours à la ligne dans le
code source. Les précisions suivantes s'imposent:
\begin{itemize}
\item seule la première espace entre deux éléments compte;
\item les espaces en début de ligne sont ignorées;
\item un retour à la ligne simple est traité comme une espace;
\item il faut deux retours à la ligne consécutifs (ce qui résulte en
 une ligne blanche dans le code source) pour identifier un changement
 de paragraphe.
\end{itemize}

Pour forcer une espace à un endroit où {\LaTeX} la supprimerait
normalement, utiliser la commande \verb*=\ = (le symbole «\bs» suivi
d'une espace, représentée ici par le symbole \verb*| |.
\begin{demo}
 \begin{texample}
\begin{lstlisting}
Apprendre \LaTeX\ c'est
formidable!
\end{lstlisting}
   \producing
   Apprendre \LaTeX\ c'est
   formidable!
 \end{texample}
\end{demo}

Dans le même ordre d'idées, le symbole «\verb=~=» insère une espace
insécable entre deux mots, de telle sorte que {\LaTeX} ne pourra
placer les mots sur des lignes différentes. Vous devriez insérer ce
symbole dans les noms ou entre une quantité et son unité.
\begin{demo}
 \begin{texample}
\begin{lstlisting}
M.~Tremblay me doit au
moins 200~\$.
\end{lstlisting}
   \producing
   M.~Tremblay me doit au moins 200~\$.
 \end{texample}
\end{demo}

Il peut arriver que l'espace générée par un retour à la ligne
\emph{simple} s'avère indésirable. Dans de tels cas, placez un symbole
de commentaire «\verb=%=» à la fin de la ligne.
\begin{demo}
 \begin{texample}
\begin{lstlisting}
Donald Knuth est un dieu
\textsuperscript{[citation]}