Suivant: , Précédent: , Monter: Top   [Table des matières][Index]


14 Longueurs

Une longueur est une mesure de distance. Beaucoup de commandes LaTeX prennent une longueur en argument.

Il y a deux types de longueur. Une longueur rigide telle que 10pt ne contient pas de composante en plus ou minus. (En TeX de base on appelle cela une dimen). Une longueur élastique (ce qu’en TeX de base on appel un skip ou une glue) telle que dans 1cm plus0.05cm minus0.01cm peut contenir l’un ou l’autre de ces composantes ou les deux. Dans cette longueur élastique, le 1cm est la longueur naturelle alors que les deux autres, les composantes en plus et minus, permette à TeX à dilater ou contracter la longueur pour optimiser la disposition.

Les exemples qui suivent utilisent ces deux commandes.

% Fait une barre noire de 10pt de haut et #1 de large
\newcommand{\blackbar}[1]{\rule{#1}{10pt}}

% Fait une boîte autour de #2 qui est #1 de large (sans la bordure)
\newcommand{\showhbox}[2]{%
  \fboxsep=0pt\fbox{\hbox to #1{#2}}}

Cet exemple utilise ces commandes pour afficher une barre noire de 100 points de long entre ‘XXX’ et ‘YYY’. Cette longueur est rigide.

XXX\showhbox{100pt}{\blackbar{100pt}}YYY

Quant au longueur élastiques, la contraction est le plus simple des deux : avec 1cm minus 0.05cm, la longueur naturelle est 1cm mais TeX peut la contracter jusqu’à 0,95cm. TeX refuse de contracter plus que cela. Ainsi, ci-dessous le premier \showhbox fonctionne bien, un espace de 98 points étant produit entre les deux barres.

XXX\showhbox{300pt}{%
  \blackbar{101pt}\hspace{100pt minus 2pt}\blackbar{101pt}}YYY

XXX\showhbox{300pt}{%
  \blackbar{105pt}\hspace{100pt minus 1pt}\blackbar{105pt}}YYY

Mais le second produit un avertissement du genre de ‘Overfull \hbox (1.0pt too wide) detected at line 17’. En sortie le premier ‘Y’ est écrasé par la fin de la barre noire, parce que la matière contenue par la boîte est plus large que les 300pt alloués, et que TeX a refusé de contracter le total en deçà de 309 points.

Dilater est similaire à contracter, à ceci près que si TeX doit dilater plus que la quantité disponible, alors il le fait. Ci-dessous la première ligne fonctionne bien, et produit un espace de 110 points entre les barres.

XXX\showhbox{300pt}{%
  \blackbar{95pt}\hspace{100pt plus 10pt}\blackbar{95pt}}YYY

XXX\showhbox{300pt}{%
  \blackbar{95pt}\hspace{100pt plus 1pt}\blackbar{95pt}}YYY

Dans la seconde ligne TeX a besoin de dilater de 10 points alors que seulement 1 point a été spécifié. TeX dilate l’espace jusqu’à la longueur requise mais il produit un avertissement du genre de ‘Underfull \hbox (badness 10000) detected at line 22’. (On ne discute pas ici de ce que signifie « badness »).

Il est possible de mettre à la fois de la dilatation et de la contraction dans la même longueur, comme dans 1ex plus 0.05ex minus 0.02ex.

Si TeX ajuste plus d’une longueur élastique alors il alloue la dilatation ou la contraction proportionnellement.

XXX\showhbox{300pt}{%
  \blackbar{100pt}%  gauche
  \hspace{0pt plus 50pt}\blackbar{80pt}\hspace{0pt plus 10pt}%  milieu
  \blackbar{100pt}}YYY  % droite

Les barres de gauche et de droite prennent 100 points, de sorte que celle du milieu a besoin également de 100. La barre du milieu fait 80 points et donc les deux \hspace doivent se dilater de 20 points. Comme les deux sont plus 50pt et plus 10pt, TeX obtient 5/6 de la dilatation du premier espace et 1/6 du second.

La composante plus ou minus d’une longueur élastique peut contenir un composante en fill, comme dans 1in plus2fill. Cela donne à la longueur une dilatabilité ou contractibilité infinie de sorte que TeX puisse l’ajuster à n’importe quelle distance. Dans l’exemple suivant les deux figures sont également espacées horizontalement sur la page.

\begin{minipage}{\linewidth}
  \hspace{0pt plus 1fill}\includegraphics{godel.png}%
  \hspace{0pt plus 1fill}\includegraphics{einstein.png}%
  \hspace{0pt plus 1fill}
\end{minipage}

TeX a trois niveaux d’infinité pour les composantes élastiques : fil, fill, et filll dans l’ordre d’infinité croissante. D’ordinaire les auteurs de documents n’utilisent que celle du milieu (voir \hfill et voir \vfill).

Multiplier une longueur élastique par un nombre la transforme en une longueur rigide, de sorte qu’après \setlength{\ylength}{2.5cm plus 0.5cm} et \setlength{\zlength}{3\ylength} alors la valeur de \zlength est 2.5cm.


Suivant: , Précédent: , Monter: Top   [Table des matières][Index]