Règles de syntaxe

Un fichier source LaTeX est du texte courant ordinaire dans lequel des commandes sont insérées. Les commandes, les espaces et les commentaires obéissent à un petit ensemble de règles ; une fois assimilées, elles évitent bien des surprises. Pourquoi \LaTeX is mange-t-il l’espace ? Pourquoi deux retours à la ligne commencent-ils un nouveau paragraphe ? Cette page rassemble ces mécanismes.

Texte et commandes

La majeure partie d’un fichier source est du texte courant : des caractères ordinaires composés tels quels. Tapez Hello et vous obtenez Hello. À l’inverse, une commande est une instruction au moteur de composition (saut de ligne, titre, changement de police) et commence toujours par une barre oblique inverse \ (qui peut apparaître comme un signe yen ¥ dans certaines configurations japonaises). \LaTeX désigne le logo et \newpage un saut de page ; aucun des deux n’est imprimé comme texte littéral.

Le nom qui suit la barre oblique inverse s’appelle une séquence de contrôle, et il en existe deux sortes. Un mot de contrôle est \ suivi uniquement de lettres (A–Z, a–z) ; un symbole de contrôle est \ suivi d’un seul caractère non alphabétique. Ainsi \section, \LaTeX et \newpage sont des mots de contrôle, tandis que \$, \%, \& et \ (barre inverse-espace) sont des symboles de contrôle. Ils diffèrent non seulement par la manière dont leur nom est délimité, mais aussi par leur traitement de l’espace qui suit (section suivante).

Pourquoi cette distinction compte-t-elle ? Le nom d’un mot de contrôle se termine automatiquement au premier caractère non alphabétique ; \LaTeXlogo est donc lu comme une seule commande, probablement non définie, nommée \LaTeXlogo. Pour arrêter le nom à \LaTeX, il faut le faire suivre d’un non-lettre : espace, symbole ou {}. Un symbole de contrôle, long d’un seul caractère, n’a pas ce problème : \$5 se lit clairement comme le signe dollar suivi de 5.

Les mots de contrôle avalent l’espace qui suit

C’est le piège principal. Tout espace immédiatement après un mot de contrôle (espaces, tabulations, retours à la ligne) est ignoré. Il ne sert qu’à délimiter le nom et ne produit aucun espace dans la sortie. Ainsi \LaTeX is great perd l’espace entre \LaTeX et is, donnant « LaTeXis great ».

Il existe trois corrections classiques. (1) Accolades vides : \LaTeX{} is ; {} termine le nom et l’espace ordinaire reste. (2) Espace de contrôle : \LaTeX\ is ; \ (barre inverse suivie d’un espace) force exactement un espace intermot normal. (3) Encadrer la commande par des accolades : {\LaTeX} is. Les trois donnent « LaTeX is ». En cas de doute, {} est le choix sûr : il fonctionne que le caractère suivant soit un espace ou un autre non-lettre.

latex
% 制御語の直後の空白は消える / The space after a control word vanishes:
\LaTeX is great      % → LaTeXis great   (まちがい / wrong)

% 直し方 / The fixes — all give “LaTeX is great”:
\LaTeX{} is great
\LaTeX\ is great
{\LaTeX} is great

À l’inverse, un symbole de contrôle n’avale pas l’espace qui suit : le blanc après \$ reste un espace intermot normal. L’espace de contrôle \ sert aussi après un point marquant une abréviation, comme Prof.\ Smith ou et al.\ (1993). Comme LaTeX ajoute par défaut un peu plus d’espace après un point de fin de phrase, \ lui indique « ce n’est pas la fin d’une phrase » et maintient un espacement régulier.

Arguments et groupement par accolades

De nombreuses commandes prennent des arguments, de deux sortes : les accolades { } encadrent un argument obligatoire, tandis que les crochets [ ] encadrent un argument facultatif. Dans \section{Introduction}, {Introduction} est le texte de titre requis ; dans \documentclass[12pt]{article}, [12pt] est facultatif et {article} est le nom de classe obligatoire. La forme habituelle est \command[options]{required}.

Les accolades { } ont aussi un second rôle : grouper, c’est-à-dire limiter la portée d’une déclaration. Les commandes déclaratives qui changent la police ou la taille, comme \bfseries (gras), \itshape (italique), \large (plus grand), ne prennent pas d’argument ; elles affectent « tout ce qui suit ». Entourez-les d’accolades et l’effet reste dans ce seul groupe : {\bfseries bold} normal ne met que « bold » en gras, puis le } final rétablit le réglage précédent.

latex
\section{はじめに}                 % 必須引数 / mandatory argument
\documentclass[12pt]{article}     % [オプション]{必須} / [optional]{required}

{\bfseries 太字になる} ここは普通   % {} で効果を閉じ込める / braces limit the scope
{\bfseries bold here} back to normal

L’intérieur et l’extérieur d’un groupe sont indépendants, si bien qu’un changement visuel ne déborde pas dans une zone non prévue. C’est la même idée que pour les environnements (\begin{...}...\end{...}) : une paire \begin\end forme aussi un groupe. Les environnements sont détaillés sur leur propre page.

Espaces, retours à la ligne et lignes vides

Les espaces obéissent à des règles particulières qui séparent l’apparence de la source de la lecture de la sortie. D’abord, toute suite de blancs consécutifs (espaces ou tabulations) se réduit à un seul espace intermot : un ou dix espaces entre deux mots produisent le même résultat. Ensuite, un seul retour à la ligne dans la source est traité comme un simple espace. Peu importe où vous coupez une ligne dans la source : LaTeX décide lui-même des coupures finales, vous pouvez donc revenir à la ligne à une largeur confortable.

Comment commence-t-on alors un nouveau paragraphe ? Avec une ligne vide : laisser une ligne vide marque une rupture de paragraphe. Deux lignes vides consécutives ou plus ont le même effet qu’une seule : une seule rupture. Inversement, un simple retour à la ligne dans la source ne commence *pas* un nouveau paragraphe. Le contrôle plus fin des lignes et paragraphes, comme un saut forcé avec \\, est traité sur la page dédiée aux sauts de ligne et de paragraphe.

latex
これらの    余分な空白は     1 つにまとめられ、
この改行も空白 1 つになります。

空行をはさむと、ここから新しい段落が始まります。

On veut parfois placer un espace intermot exactement là où il faut. Le cas classique est le lien ~ : un espace insécable à insérer là où la ligne ne doit pas se couper, comme dans Fig.~\ref{fig:1}, Chapter~12 ou Donald~E. Knuth. Sa largeur est celle d’un espace intermot normal, mais aucune coupure ne peut s’y produire. L’espace de contrôle \ , comme ci-dessus, force un espace de largeur normale ; en mode mathématique, \, (espace fine, 3/18 de cadratin) permet d’ajuster l’espacement.

Commentaires

Un signe pour cent % commence un commentaire qui va jusqu’à la fin de la ligne et qui est entièrement ignoré à la compilation. Comme il n’apparaît jamais dans la sortie, il sert à laisser des notes dans la source ou à désactiver temporairement (« commenter ») une commande. Un commentaire ne va pas seulement jusqu’à la fin de ligne : il avale aussi le retour à la ligne de cette ligne, ainsi que les espaces finaux. Cela devient une astuce pratique.

Rappelez-vous qu’un retour à la ligne dans la source devient un espace. Si vous voulez couper un très long mot sur plusieurs lignes de source sans introduire d’espace parasite à la jonction, terminez la ligne par % : le retour disparaît et la ligne suivante se colle sans espace. La même astuce évite les espaces indésirables lorsque vous répartissez une commande sur plusieurs lignes.

latex
これは行末コメント % ここから行末まで(と改行)が無視される / ignored to end of line

超長い%
単語          % → 「超長い単語」 % で改行を消してつなぐ / % joins the lines, no space

割引率は 100\% です。   % 文字としての % は \% と書く / a literal percent is \%

Notez que % est lui-même un caractère spécial : pour imprimer un signe pour cent littéral, on écrit \% (et, comme \% est un symbole de contrôle, il n’avale pas l’espace qui suit). L’ensemble des caractères spéciaux est réuni sur la page correspondante.

Pour désactiver plusieurs lignes à la fois, au lieu de préfixer chacune par %, deux solutions existent. Encadrez le bloc dans l’environnement comment fourni par le paquet verbatim (ou par le paquet comment) : \begin{comment} … \end{comment} ; ou bien utilisez la condition TeX \iffalse … \fi. Cette dernière ne nécessite aucun paquet supplémentaire et permet de commenter tout un bloc d’un coup.

latex
\usepackage{verbatim}            % プリアンブルで / in the preamble

\begin{comment}
このブロックは丸ごと無視される。
This whole block is ignored.
\end{comment}

\iffalse
下書きのコードもパッケージ無しで一括コメントアウト。
Draft code, commented out with no package needed.
\fi

Habitudes pour votre premier manuscrit

La syntaxe s’apprend plus facilement en adoptant des habitudes robustes qu’en mémorisant chaque règle. Ajoutez {} après un mot de contrôle lorsque des lettres suivent, entourez les unités sémantiques par {...}, et répartissez les longs réglages sur des lignes lisibles avec des commentaires au lieu de tout mettre sur une ligne. Ces trois habitudes évitent beaucoup de confusions initiales : espaces disparus, arguments mal pris et portée des réglages incertaine.

latex
% 命令名の後ろに英字が続くなら {} で区切る
\LaTeX{} users write source, then compile it.

% 長い設定は意味ごとに分け、行末コメントで不要な空白を消す
\newcommand{\courseTitle}{%
  Advanced Topics in \LaTeX%
}

Les commentaires sont utiles, mais il est aussi pratique de ne pas laisser dans le fichier de travail de grands blocs de texte abandonné simplement commentés. Confiez les anciens brouillons à Git ou à un autre outil d’historique, et gardez le .tex courant centré sur ce que vous voulez composer maintenant. Les numéros de ligne des erreurs correspondent alors au vrai manuscrit, ce qui accélère le débogage avant une échéance.

Ordre de lecture d’une source cassée

Lorsqu’une erreur apparaît, lisez la source selon les unités syntaxiques de LaTeX plutôt que de relire tout le fichier depuis le début. Juste avant la ligne signalée, vérifiez qu’un mot de contrôle n’a pas avalé les lettres suivantes, et que les arguments obligatoires {...} et facultatifs [...] sont équilibrés. Examinez ensuite % : un commentaire de fin de ligne a-t-il supprimé un espace nécessaire, ou avez-vous oublié \% là où un pourcentage littéral était voulu ?

SymptômePremier suspectCorrection
run-togetherDes mots se collent après un logo ou une commandeDélimiter avec {}, comme \LaTeX{} users
wrong-argumentLa portée d’un titre ou d’une commande va trop loinAssocier { et } autour d’une seule unité sémantique
comment-gapUn espace disparaît ou apparaît à un retour de ligne sourceChoisir consciemment entre % en fin de ligne et retour normal