Réglages du mode mathématique

Dans ce chapitre, qui peut être omis en première lecture, nous allons voir comment changer quelques paramètres du mode mathématique, en particulier les paramètres correspondant à des longueurs (taille d’une espace, par exemple). Les valeurs doivent être données avec leur unité, qui peut être en cm, en pt, en em ou toutes les autres unités de longueur acceptées par TeX.

Tous les paramètres que nous allons voir ici sont des paramètres de TeX.

Gestion des mathématiques hors texte

Commençons par voir comment modifier l’espace entre les formules mathématiques « hors texte » et le texte qui suit.

Espace verticale avant le mode mathématique

Il est en effet possible de changer l’espacement vertical qui précède des mathématiques hors texte. Pour cela, il nous faut changer la longueur \abovedisplayskip. Par exemple…

Voici un petit calcul écrit pour observer l’espace avant la formule :
\[
   3x = 32.
\]
Voici un petit calcul écrit pour observer l’espace avant la formule :
\[
   \abovedisplayskip = 1cm
   3x = 32.
\]
Voici un petit calcul écrit pour observer l’espace avant la formule :
\[
   3x = 32.
\]

Les espaces verticaux avant l’entrée en mode « hors texte » ont été changés. Notons que le changement de valeur n’est pas permanent. En effet, l’espace avant la troisième formule n’est pas de 1cm, mais est le même que celui avant la première formule. Cela est dû au fait que, quand on change la valeur dans \[ \], elle n’est changée que pour cette formule. Pour changer la valeur par défaut, il nous faut changer la valeur à l’extérieur du mode mathématique. De cette manière, la valeur par défaut sera changée. Voici un code commenté pour mieux comprendre cela.

\abovedisplayskip = 1cm    % On la fixe à 1cm.
\[
                           % Ici, elle vaut 1cm.
\]
\[
   \abovedisplayskip = 2cm % Ici elle vaut 2cm.
\]
\[
                           % Ici, elle vaut 1cm.
\]
\abovedisplayskip = 1.5cm  % On la fixe à 1.5cm.

Le cas où la ligne précédente est trop courte

Maintenant, observons le résultat produit par ce code.

Voici un petit calcul écrit pour observer l’espace avant la formule :
\[
   \abovedisplayskip = 1cm
   3x = 32.
\]
Encore :
\[
   \abovedisplayskip = 1cm
   3x = 32.
\]

Nous remarquons que la commande n’est pas prise en compte pour la seconde formule. Cela est dû au fait que la ligne précédant cette formule est très courte (ici un seul mot). Dans ce cas, la longueur de l’espace inséré n’est pas \abovedisplayskip, mais \abovedisplayshortskip. C’est donc cette valeur qu’il faudra modifier.

Encore :
\[
   \abovedisplayshortskip = 1cm
   3x = 32.
\]

Nous obtenons bien le résultat voulu.

Espace verticale après le mode mathématique

Nous disposons également de paramètres pour l’espace suivant la sortie du mode mathématique. Ainsi, le code suivant modifie cet espace en changeant la longueur \belowdisplayskip.

Voici un petit calcul écrit pour observer l’espace après la formule :
\[
   1 + 1 = 2.
\]
\belowdisplayskip = 0.5cm
Voici un petit calcul écrit pour observer l’espace après la formule :
\[
   1 + 1 = 2.
\]

Le cas où la ligne précédente est trop courte

De la même manière que nous avons changé la valeur de \abovedisplayshortskip, il nous faudra changer la valeur de \belowdisplayshortskip pour gérer l’espacement suivant la sortie du mode mathématique si la ligne qui précède le mode mathématique est trop courte. On écrira donc ceci.

Encore :
\[
   \abovedisplayshortskip = 1cm
   \belowdisplayshortskip = 0.5cm
   3x = 32.
\]
Et on recommence à écrire.

Tout ce que nous avons dit à propos de abovedisplayskip est valable pour abovedisplayshortskip, \belowdisplayskip et \belowdisplayshortskip.

Le paramètre \predisplaysize

Nous avons dit que la longueur des espaces est \abovedisplayshortskip et \belowdisplayshortskip dans le cas où la ligne précédant la formule est trop courte.

Mais à quoi correspond ce « trop courte » ? À partir de quelle longueur peut-on dire que cette ligne est trop courte ?

En fait, le comportement par défaut est le suivant : si la ligne précédant la formule et la formule se recouvrent horizontalement (c’est-à-dire si la formule mathématique débute à gauche de la fin de la ligne la précédant), les espaces verticaux avant et après la formule seront respectivement de longueur \abovedisplayskip et belowdisplayskip, sinon, ils seront de longueur \abovedisplayshortskip et \belowdisplayshortskip.

Pour savoir s’il y a recouvrement horizontal, TeX calcule la largeur de la ligne précédant un affichage mathématique, et donne à \predisplaysize cette valeur. Il compare ensuite \predisplaysize à la largeur de la formule mathématique pour savoir s’il y a recouvrement. Ainsi, en modifiant la valeur de \predispalysize, nous pouvons modifier la condition nécessaire à l’utilisation de \abovedisplayshortskip à la place de \abovedisplayskip. Nous pouvons, par exemple, faire en sorte que l’espace soit de longueur \abovedisplayshortskip si la formule mathématique et la ligne la précédant sont distantes horizontalement d’au moins 1cm, avec ce code.

Voici une formule :
\[
   \advance \predisplaysize by 1cm
   2x = 3
\]

Ici, nous utilisons la primitive \advance, qui permet d’augmenter (ou de diminuer) la valeur d’une variable numérique. Nous aurions aussi pu écrire \advance \predisplaysize 1cm. En augmentant la valeur de \predisplaysize de 1cm, la comparaison de la taille de la ligne précédente et de celle de la formule ne conduira à un recouvrement que si l’espace horizontal entre les deux est supérieur à 1cm.

La valeur de \predisplaysize est calculée à chaque fois que l’on rentre en mode « hors texte ». Changer cette valeur en dehors de ce mode n’a donc aucun effet.

Indentation en mode mathématique

Nous avons également la possibilité de modifier l’espace par laquelle TeX indente l’affichage des mathématiques grâce au paramètre \displayindent. Sa valeur initiale est de 0. En la changeant, on modifie donc le placement horizontal. Par exemple, si on lui donne la valeur de 1cm, les formules ne seront plus affichées exactement au centre, mais au centre décalé d’un centimètre vers la droite. On peut bien sûr lui donner une valeur négative. Observons par exemple l’affichage obtenu avec ce code.

\[
   3x = 32.
\]
\[
   \displayindent = 0.5cm
   3x = 32.
\]

Changer la valeur de \displayindent en dehors du mode mathématique n’a aucun effet. Si on veut que cette valeur soit changée pour toutes les formules mathématiques, on ne peut donc pas la changer en dehors du mode mathématique au début du document. Pour faire cela, nous pouvons utiliser la commande \everydisplay. Elle nous permettra de spécifier une valeur de \displayindent pour toutes les formules mathématiques.

Les pénalités

Il arrive parfois qu’un passage à la ligne se fasse alors qu’on est dans le mode « en ligne ». Il faut alors se demander quand se fait la coupure. Ce ne serait pas très apprécié, par exemple, que la coupure se fasse au milieu du nombre 123 avec 12 sur la première ligne et 3 rejeté sur la ligne suivante. Par défaut, Tex ne s’autorise pas à couper les nombres, et préfère dans ce cas rejeter le nombre en entier à la ligne suivante. Il nous suffit d’essayer un code où un nombre (1000000000299798453 par exemple) se retrouve à la fin d’une ligne.

La gestion des coupures est faite grâce aux pénalités. Une pénalité est une valeur qui indique à TeX si un potentiel point de coupure est bon ou mauvais. Une pénalité positive indique que le point de coupure est mauvais et une pénalité négative indique au contraire qu’il s’agit d’un bon point de coupure. TeX essaie donc de couper les lignes aux endroits où les pénalités sont faibles. On en déduit alors que la pénalité entre les différents chiffres d’un nombre est grande.

Tout ceci nous mène au fait que nous avons la possibilité d’indiquer une pénalité dans notre code source. Ceci se fait grâce à la commande \penalty qui prend en paramètre la valeur de pénalité que l’on veut insérer.

Une pénalité supérieure à 10000 empêche une coupure et une pénalité inférieure à -10000 force une coupure.

On peut alors, grâce à cela, forcer une coupure dans l’écriture du nombre avec $1000000\penalty-10000 000299798453$.

Les pénalités après un chiffre ou après = sont différentes, et nous avons la possibilité de changer ces différentes pénalités.

Nous allons parler des opérateurs binaires et des opérateurs de relations. Il s’agit simplement de catégories de symboles mathématiques. +, par exemple, est un opérateur binaire, alors que = est un opérateur de relation. La liste de ces symboles est disponible sur plusieurs sites.

Pénalité après un opérateur binaire

Pour changer la pénalité après un opérateur binaire, il nous faudra changer la valeur du paramètre \binoppenalty. Plain TeX fixe sa valeur par défaut à 700. Ainsi, en mode « en ligne », 2 + 2 ne sera probablement pas coupé au niveau de +, mais plutôt écrit à la ligne suivante. On peut modifier ce comportement en modifiant la valeur de binoppenalty.

Si nous changeons cette valeur à l’intérieur de $$, elle ne sera changée que pour cette formule, alors que si on la change à l’extérieur, cette modification sera effective tant qu’on ne modifiera pas cette valeur à nouveau. Par exemple…

\binoppenalty = -10000 % Sa valeur est de -10000.
Voici un texte très long avec plusieurs formules mathématiques.
On a que $2 + 2 + 2 + 2 = 2 \times 4 = 4 + 4 = 8$.

De plus, on peut aussi écrire que $\binoppenalty = 1000 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 = 2 \times 8
= 8 + 8 = 16$.         % Sa valeur est de 1000 pour cette formule.

                       % Sa valeur est toujours de -10000.

Pénalité après une relation

De la même manière que pour les opérateurs binaires, nous pouvons changer la pénalité après les relations en changeant la valeur du paramètre relpenalty, sa valeur par défaut étant fixée à 500 par Plain TeX. On peut alors faire en sorte de toujours interdire les coupures après = avec \relpenalty = 10000. Par exemple…

\binoppenalty = -10000
Voici un texte très long avec plusieurs formules mathématiques.
On a que $2 - 2 = 1 - 1 = 0 = 0 + 0 = 0 \times 0 = 0 \times 2 = 0$.

De plus, on peut aussi écrire que $\relpenalty = 1000 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0$.

Notons que si nous voulons changer la pénalité après un symbole en particulier et pas pour les autres symboles de la même famille (relation ou opérateur binaire), il ne nous faut pas changer la valeur de pénalité après ce type de symboles, mais insérer une pénalité avec \penalty.

Pénalité pour une coupure de page avant l’entrée en mode « hors texte »

Si une formule mathématique peut être placée en fin de page, elle sera placée en fin de page, alors que l’on aurait peut-être préféré la voir repoussée au début de la page suivante . Cela est dû à la valeur par défaut de la pénalité \predisplaypenalty, qui est fixée à 10000 par Plain Tex (rappelons-nous qu’une pénalité de 10000 équivaut à une pénalité infinie).

La pénalité \predisplaypenalty correspond à la pénalité pour une coupure de page juste avant un affichage mathématique. Le fait qu’elle soit mise à 10000 signifie que Tex empêche toute coupure. Pour changer ce comportement, il nous suffit de changer la valeur de \predisplaypenalty.

Nous pouvons la changer à l’intérieur du mode mathématique (elle ne sera changée que pour la formule correspondante), ou à l’extérieur, auquel cas elle sera changée jusqu’à un nouveau changement.

Pénalité pour une coupure de page après l’entrée en mode « hors texte »

De même que pour la coupure avant une formule mathématique, il existe une pénalité pour les coupures après les formules mathématiques. Il s’agit de la pénalité \postdisplaypenalty. Sa valeur par défaut est fixée à 0 par Plain TeX.

Elle permet à TeX de savoir s’il faut ou non passer à une nouvelle page dans le cas où une formule mathématique est écrite en bas de page, mais qu’il reste un peu de place pour écrire le texte qui suit. Cela signifie que, si on donne à \postdisplaypenalty la valeur -10 000, la formule mathématique restera toujours seule en bas de page, alors que si on lui donne, par exemple, la valeur 500, TeX sera moins propice à passer à une nouvelle page, et écrira probablement la ligne qui suit en dessous de la formule mathématique.

Tout comme \predisplaypenalty, la valeur de \postdisplaypenalty peut être modifiée à l’intérieur du mode mathématique et à l’extérieur du mode mathématique.