<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%%% 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 Ã&nbsp; 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{Boites}
\label{chap:boites}

Il arrive que l'on doive traiter de maniÃ¨re spÃ©ciale une aire
rectangulaire de texte; pour l'encadrer, la mettre en surbrillance ou
la mettre en exergue, par exemple.

Avec les traitements de texte, les tableaux sont souvent mis Ã&nbsp;
contribution Ã&nbsp; de telles fins. Or, les tableaux devraient Ãªtre
rÃ©servÃ©s Ã&nbsp; la disposition d'information sous forme de lignes et de
colonnes. Pour disposer et mettre en forme tout autre type contenu se
prÃ©sentant sous forme rectangulaire, {\LaTeX} offre la solution plus
gÃ©nÃ©rale des Â«boitesÂ».

Il existe trois sortes de boites en {\LaTeX}: les boites horizontales,
dont le contenu est disposÃ© exclusivement cÃ´te Ã&nbsp; cÃ´te; les boites
verticales, qui peuvent contenir plusieurs lignes de contenu; les
boites de rÃ©glure pour former des lignes pleines de largeur et de
hauteur quelconques.

Il n'est pas inutile de savoir, au passage, que {\TeX} ne manipule que
cela, des boites. Pour {\TeX}, chaque caractÃ¨re, chaque lettre n'est
qu'un rectangle d'une certaine largeur qui s'Ã©lÃ¨ve au-dessus de la
ligne de base (les lignes d'une feuille lignÃ©e) et qui, parfois, se
prolonge sous la ligne de base (pensons aux lettres Â«pÂ», Â«yÂ»
ou Â«QÂ»). La \autoref{fig:boites:glyphs} illustre cela.

\begin{figure}[t]
  \begin{minipage}{0.45\linewidth}
    \centering\huge
    fantastique
  \end{minipage}
  \hfill
  \begin{minipage}{0.45\linewidth}
    %% creÃ©ation de boites autour des caractÃ¨res
    %% https://tex.stackexchange.com/q/57812
    \fboxrule=0.1pt
    \fboxsep=-\fboxrule
    \makeatletter
    \def\SOUL@soeverytoken{%
      \fbox{\color{white}\the\SOUL@token}}
    \makeatother
    \centering
    \so{\huge fantastique}
  \end{minipage}
  \caption[Pour {\TeX}, un texte n'est qu'un alignement de boites]{%
    Pour {\TeX}, un texte n'est qu'un alignement de boites. Ã€ gauche,
    ce que nous voyons dans le document fini; Ã&nbsp; droite, ce que {\TeX}
    manipule.}
  \label{fig:boites:glyphs}
\end{figure}

Les commandes et les environnements prÃ©sentÃ©s dans ce chapitre
permettent de crÃ©er des boites dont le contrÃ´le des dimensions et
du contenu est laissÃ© entre vos mains.

Une fois crÃ©Ã©e, une boite ne peut Ãªtre scindÃ©e en parties, notamment
entre les lignes ou entre les pages.


\section{Boites horizontales}
\label{sec:boites:lrbox}

Le concept de boite le plus simple dans {\LaTeX} est celui de boite
horizontale, c'est-Ã&nbsp;-dire dont le contenu est disposÃ© latÃ©ralement de
gauche Ã&nbsp; droite\footnote{%
  D'oÃ¹ l'appellation \emph{LR (left-right) box} en anglais.}. %
Le contenu est normalement du texte, mais conceptuellement ce pourrait
Ãªtre n'importe quoi, y compris d'autres boites.

Les commandes de base pour crÃ©er des boites horizontales sont:
\begin{lstlisting}
\mbox`\marg{texte}'
\fbox`\marg{texte}'
\end{lstlisting}
Elles produisent une boite de la largeur prÃ©cise de \meta{texte}. Avec
la commande \cmd{\fbox}, le texte est au surplus \fbox{encadrÃ©}.

Il existe Ã©galement des versions plus gÃ©nÃ©rales des commandes
\cmd{\mbox} et \cmd{\fbox}:
\begin{lstlisting}
\makebox`\oarg{largeur}\oarg{pos}\marg{texte}'
\framebox`\oarg{largeur}\oarg{pos}\marg{texte}'
\end{lstlisting}
Les arguments optionnels \meta{largeur} et \meta{pos} dÃ©terminent
respectivement la largeur de la boite et la position du texte
dans la boite. Les valeurs possibles de \meta{pos} sont: \code{l} pour
du texte alignÃ© Ã&nbsp; gauche, \code{r} pour du texte alignÃ© Ã&nbsp; droite et
\code{c} (la valeur par dÃ©faut) pour du texte centrÃ©. Ainsi, la commande
\begin{lstlisting}
\framebox[3.5cm][l]{alignÃ© Ã&nbsp; gauche}
\end{lstlisting}
produit \framebox[3.5cm][l]{alignÃ© Ã&nbsp; gauche}, alors que
\begin{lstlisting}
\makebox[3.5cm]{centrÃ©}
\end{lstlisting}
produit \makebox[3.5cm]{centrÃ©}.

\tipbox{En usage courant, la commande \cmd{\mbox} sert principalement
  Ã&nbsp; deux choses:
  \begin{enumerate}
  \item rÃ©unir en un bloc du texte que l'on ne veut pas voir scindÃ©
    entre les lignes ou entre les pages;
  \item \label{item:boites:mbox} crÃ©er une boite vide avec
    \cs{mbox\{\}} afin de laisser croire Ã&nbsp; {\TeX} que du contenu
    apparait Ã&nbsp; un endroit, sans toutefois qu'il n'occupe aucun espace.
  \end{enumerate}
  La seconde utilisation fait l'objet de
  l'\autoref{ex:boites:alignement-v}.}

Il est parfois nÃ©cessaire d'ajuster le positionnement vertical
d'Ã©lÃ©ments de contenu, notamment pour les symboles ou les images. La
commande
\begin{lstlisting}
\raisebox`\marg{dÃ©placement}\marg{texte}'
\end{lstlisting}
produit une boite horizontale dont le contenu \meta{texte} est
surÃ©levÃ© de la longueur \meta{dÃ©placement} par rapport Ã&nbsp; la ligne de
base. Si \meta{dÃ©placement} est nÃ©gatif, la boite est positionnÃ©e sous
la ligne de base.
\begin{demo}
  \begin{texample}[0.55\textwidth]
\begin{lstlisting}
Texte \raisebox{1ex}{au-dessus}
de la ligne de base.
\end{lstlisting}
    \producing
    Texte \raisebox{1ex}{au-dessus}
    de la ligne de base.
  \end{texample}

  \begin{texample}[0.55\textwidth]
\begin{lstlisting}
Texte \raisebox{-1ex}{au-dessous}
de la ligne de base.
\end{lstlisting}
    \producing
    Texte \raisebox{-1ex}{au-dessous}
    de la ligne de base.
  \end{texample}
\end{demo}

Attention, toutefois, de ne pas utiliser \cmd{\raisebox} pour placer
du texte en exposant ou en indice. Selon la nature du texte, employez
plutÃ´t les commandes \cmd{\textsuperscript} et \cmd{\textsubscript},
les commandes de la famille \cmd{\ieme} de \pkg{babel} (section~1.1 de
la %
\doc{babel-french}{https://texdoc.net/pkg/babel-french}) ou, pour des
symboles mathÃ©matiques, les commandes d'exposant et d'indice
spÃ©cifiques au mode mathÃ©matique (\autoref{sec:math:bases:exposants}).

\section{Boites verticales}
\label{sec:boites:parbox}

Les boites verticales se distinguent des boites horizontales par le
fait qu'elles peuvent contenir plusieurs lignes de contenu empilÃ©es
les unes au-dessus des autres. Lorsque le contenu en question est du
texte, on obtient des paragraphes\footnote{%
  D'oÃ¹ l'appellation de \emph{paragraph boxes} en anglais
  ou \emph{parboxes} dans le jargon {\LaTeX}.}. %

La commande de base pour crÃ©er une boite verticale est:
\begin{lstlisting}
\parbox`\oarg{pos}\marg{largeur}\marg{texte}'
\end{lstlisting}
Ici, l'argument optionnel \meta{pos} permet d'ajuster l'alignement
vertical de la boite avec la ligne de base: \code{b} ou \code{t} selon
que l'on souhaite aligner, respectivement, le bas ou le haut de la
boite avec la ligne de base. Par dÃ©faut, la boite est centrÃ©e avec la
ligne de base. Cet argument n'a aucun effet si la boite est le seul
Ã©lÃ©ment de contenu du paragraphe.

On remarquera que l'argument \meta{largeur} est ici obligatoire.
Autrement dit, on doit nÃ©cessairement dÃ©finir la largeur des boites
verticales, un peu comme il faut bien dÃ©finir la largeur de la page
pour le texte normal (la classe se charge de ce dÃ©tail).

Les boites crÃ©Ã©es avec \cmd{\parbox} ne peuvent contenir de structures
Â«complexesÂ» comme des listes ou des tableaux. Parce que plus gÃ©nÃ©ral,
l'outil vÃ©ritablement utile pour la crÃ©ation de boites verticales est
l'environnement \Pe{minipage}. Cet environnement peut contenir Ã&nbsp; peu prÃ¨s
n'importe quel type de contenu. Comme son nom l'indique, c'est ni plus
ni moins qu'une page miniature Ã&nbsp; l'intÃ©rieur de la page standard.

La syntaxe de l'environnement \Ie{minipage} est la suivante:
\begin{lstlisting}
\begin{minipage}`\oarg{pos}\marg{largeur}'
  `\meta{texte}'
\end{minipage}
\end{lstlisting}
La signification des arguments \meta{largeur} et \meta{pos} est la
mÃªme que pour la commande \cmd{parbox}.

L'environnement \Pe{minipage} est frÃ©quemment utilisÃ© pour disposer
des Ã©lÃ©ments de contenu de maniÃ¨re spÃ©cifique sur la page, notamment
des tableaux ou des figures cÃ´te Ã&nbsp; cÃ´te ou en grille (voir
l'\autoref{exemple:tableaux:grille} Ã&nbsp; la
\autopageref{exemple:tableaux:grille}).

\begin{exemple}
  L'agencement de boites ci-dessous est produit avec le code qui suit
  immÃ©diatement.  \\[0.5\baselineskip]
  \begin{minipage}{\textwidth}
    \makebox[0pt][l]{\color{lightgray}\rule{\textwidth}{0.7pt}}\relax
    \fbox{\begin{minipage}[b]{0.3\textwidth} La ligne infÃ©rieure de
        cette \emph{minipage} est alignÃ©e avec
      \end{minipage}} \hfill \fbox{\parbox{0.3\textwidth}{le centre de
        cette boite verticale, qui est Ã&nbsp; son tour alignÃ©e avec}}
    \hfill \fbox{\begin{minipage}[t]{0.3\textwidth} la ligne
        supÃ©rieure de cette \emph{minipage}. Le filet horizontal grisÃ©
        reprÃ©sente la ligne de base du paragraphe contenant les trois
        boites.
      \end{minipage}}
  \end{minipage}
\begin{lstlisting}
\begin{minipage}[b]{0.3\textwidth}
  La ligne infÃ©rieure de cette \emph{minipage} [...]
\end{minipage}
\hfill
\parbox{0.3\textwidth}{le centre de cette boite [...] }
\hfill
\begin{minipage}[t]{0.3\textwidth}
  la ligne supÃ©rieure de cette \emph{minipage}. [...]
\end{minipage}
\end{lstlisting}
  \qed
\end{exemple}

La commande \cmd{\hfill} utilisÃ©e entre les boites dans l'exemple
ci-dessus indique Ã&nbsp; {\LaTeX} d'insÃ©rer de l'espace entre les Ã©lÃ©ments
de contenu de maniÃ¨re Ã&nbsp; remplir entiÃ¨rement la ligne de texte. C'est
une commande trÃ¨s utile pour disposer automatiquement des Ã©lÃ©ments Ã&nbsp;
intervalles Ã©gaux sur la largeur du bloc de texte. Ainsi,
\begin{lstlisting}
\framebox[\linewidth]{gauche \hfill droite}
\end{lstlisting}
produit \\[0.5\baselineskip]
\framebox[\linewidth]{gauche \hfill droite} \\[0.5\baselineskip]
alors que
\begin{lstlisting}
\framebox[\linewidth]{gauche \hfill centre \hfill droite.}
\end{lstlisting}
produit \\[0.5\baselineskip]
\framebox[\linewidth]{gauche \hfill centre \hfill droite.}



\section{Boites de rÃ©glure}
\label{sec:boites:rulebox}

En imprimerie, une rÃ©glure est une ligne droite continue ou
pointillÃ©e. Une ligne n'Ã©tant jamais rien d'autre qu'un rectangle
plein, si mince fut-il, la rÃ©glure est le troisiÃ¨me type de
boite\footnote{%
  \emph{Rule box}, en anglais} %
dans {\LaTeX}.

La commande
\begin{lstlisting}
\rule`\oarg{dÃ©placement}\marg{largeur}\marg{hauteur}'
\end{lstlisting}
crÃ©e une rÃ©glure de dimensions \meta{largeur} $\times$ \meta{hauteur}.
Par dÃ©faut, la rÃ©glure s'appuie sur la ligne de base. Le rÃ©sultat de
\begin{lstlisting}
\rule{1cm}{6pt}
\end{lstlisting}
est donc une ligne pleine de $1$~cm de long et de $6$~points d'Ã©pais:
\rule{1cm}{6pt}.

L'argument optionnel \meta{dÃ©placement} permet de dÃ©placer
verticalement la rÃ©glure au-dessus ou au-dessous de la ligne de base
selon que la longueur \meta{dÃ©placement} est positive ou nÃ©gative. Les
commandes
\begin{lstlisting}
\rule[3pt]{1cm}{6pt}
\rule[-3pt]{1cm}{6pt}
\end{lstlisting}
crÃ©ent respectivement les rÃ©glures \rule[3pt]{1cm}{6pt} et
\rule[-3pt]{1cm}{6pt}.

Un usage intÃ©ressant de la rÃ©glure consiste Ã&nbsp; faire croire Ã&nbsp; {\TeX}
qu'une ligne est plus haute qu'il n'y parait en insÃ©rant dans celle-ci
une rÃ©glure de largeur nulle. Par exemple, la distance entre
\rule[-12pt]{0mm}{30pt}\relax la prÃ©sente ligne et les autres du
paragraphe est plus grande que la normale parce que j'y ai insÃ©rÃ© une
rÃ©glure invisible avec
\begin{lstlisting}
\rule[-12pt]{0mm}{30pt}
\end{lstlisting}
Ce truc est particuliÃ¨rement utile pour augmenter la hauteur des
lignes dans un tableau; voir la \autoref{sec:tableaux:tableaux}.



%%%
%%% Exercices
%%%

\section{Exercices}
\label{sec:boites:exercices}

\Opensolutionfile{solutions}[solutions-boites]

\begin{Filesave}{solutions}
\section*{Chapitre \ref*{chap:boites}}
\addcontentsline{toc}{section}{Chapitre \protect\ref*{chap:boites}}

\end{Filesave}

\noindent%
Utiliser comme canevas le fichier \fichier{exercice-gabarit.tex} pour
tous les exercices ci-dessous.

\begin{exercice}
  Une fois qu'une boite est dÃ©finie, {\TeX} n'y voit qu'une unitÃ© de
  contenu avec ses dimensions propres. Il est donc possible de dÃ©finir
  une boite Ã&nbsp; l'intÃ©rieur d'une autre, et ce, peu importe le type de
  boite.

  Avec ceci en tÃªte, dÃ©finir la boite suivante:
  \begin{center}
    \fbox{\fbox{%
        \parbox{10cm}{Ce bloc de texte est une boite verticale de
          10~cm de large, doublement encadrÃ©e et centrÃ©e sur la
          ligne.}}}
  \end{center}

  \begin{sol}
    Une premiÃ¨re boite verticale de 10~cm de large contient le texte:
\begin{lstlisting}
\parbox{10cm}{Ce bloc [...] la ligne.}
\end{lstlisting}
    Cette boite peut Ãªtre placÃ©e dans une boite horizontale encadrÃ©e
    avec \cmd{\fbox}. Celle-ci peut Ã&nbsp; son tour Ãªtre placÃ©e dans une autre
    boite horizontale encadrÃ©e, de maniÃ¨re Ã&nbsp; obtenir un cadrage
    double. Pour centrer le tout sur la ligne, il reste Ã&nbsp; placer le
    tout dans un environnement \Ie{center}:
\begin{lstlisting}
\begin{center}
  \fbox{\fbox{\parbox{10cm}{Ce bloc [...] la ligne.}}}
\end{center}
\end{lstlisting}
  \end{sol}
\end{exercice}

\begin{exercice}
  \label{ex:boites:alignement-v}
  RÃ©aliser l'agencement de boites verticales suivant:
  \begin{center}
    \begin{minipage}{0.8\linewidth}
      \makebox[0pt][l]{\color{lightgray}\rule{\linewidth}{0.7pt}}\relax
      \hfill
        \begin{minipage}[b]{0.95\linewidth}
          \small
          \parbox[t]{0.45\linewidth}{Deux boites verticales de
            hauteurs diffÃ©rentes placÃ©es cÃ´te Ã&nbsp; cÃ´te}
          \hfill
          \parbox[t]{0.45\linewidth}{alignÃ©es sur
            leurs premiÃ¨res lignes et le bas de la boite
            la plus haute alignÃ©e sur la ligne de base (reprÃ©sentÃ©e
            ici par le filet horizontal grisÃ©).} \\
          \mbox{}
        \end{minipage}
      \hfill
    \end{minipage}
  \end{center}

  La solution intuitive serait la suivante:
\begin{lstlisting}
\begin{minipage}[b]{...}
  \parbox[t]{...}{...} \hfill \parbox[t]{...}{...}
\end{minipage}
\end{lstlisting}
  Cependant, cette solution produit le rÃ©sultat suivant (les boites
  sont rendues visibles par des cadres):
  \begin{center}
    \begin{minipage}{0.8\linewidth}
      \makebox[0pt][l]{\color{lightgray}\rule{\linewidth}{0.7pt}}\relax
      \hfill
      \fbox{%
        \begin{minipage}[b]{0.95\linewidth}
          \small
          \fbox{%
            \parbox[t]{0.45\linewidth}{Les deux boites sont
              correctement alignÃ©es l'une par rapport Ã&nbsp; l'autre}} \hfill
          \fbox{\parbox[t]{0.45\linewidth}{mais l'alignement avec la
              ligne de base est incorrect.}}
        \end{minipage}}
      \hfill
    \end{minipage}
  \end{center}
  La raison: pour {\TeX}, la \Ie{minipage} externe ne contient que
  deux Â«caractÃ¨resÂ» sur une seule ligne de Â«texteÂ». La \Pe{minipage}
  est donc correctement alignÃ©e sur sa ligne du bas, mais celle-ci se
  trouve aussi Ãªtre la ligne du haut.

  Pour parvenir au rÃ©sultat escomptÃ©, utiliser la commande \cmd{\mbox}
  pour crÃ©er une seconde ligne (vide) dans la \Pe{minipage} externe.
  \begin{sol}
    L'idÃ©e consiste Ã&nbsp; crÃ©er une seconde ligne dans la \Pe{minipage}
    externe sans que celle-ci n'occupe aucun espace. Pour ce faire, on
    insÃ¨re du contenu vide avec \cs{mbox\{\}}, tel qu'expliquÃ© Ã&nbsp; la
    \autopageref{item:boites:mbox}. Le code
\begin{lstlisting}
\begin{minipage}[b]{...}
  \parbox[t]{...}{...} \hfill \parbox[t]{...}{...} \\
  \mbox{}
\end{minipage}
\end{lstlisting}
    produit donc le rÃ©sultat voulu:
    \begin{center}
      \begin{minipage}{0.8\linewidth}
        \makebox[0pt][l]{\color{lightgray}\rule{\linewidth}{0.7pt}}\relax
        \hfill
        \fbox{%
          \begin{minipage}[b]{0.95\linewidth}
            \small
            \fbox{%
              \parbox[t]{0.45\linewidth}{Les boites sont rendues visibles
                par des cadres}} \hfill
            \fbox{\parbox[t]{0.45\linewidth}{et le filet horizontal grisÃ©
                reprÃ©sente la ligne de base du paragraphe courant.}} \\
            \fbox{\mbox{}}
          \end{minipage}}
        \hfill
      \end{minipage}
  \end{center}
  (Sans le cadre, la boite de la seconde ligne n'occupe aucun espace.)
  \end{sol}
\end{exercice}

\begin{exercice}
  RÃ©aliser l'agencement de boites verticales ci-dessous. (La taille de
  la police est \cs{footnotesize}.)
  \begin{center}
    \begin{minipage}{120mm}
      \footnotesize
      \begin{minipage}[b]{80mm}
        \parbox[t]{30mm}{La premiÃ¨re ligne de cette \emph{parbox} de
          $30$~mm de large est alignÃ©e avec celle de la boite
          voisine.}
        \hfill
        \parbox[t]{45mm}{Cette \emph{parbox} de $45$~mm de large est
          positionnÃ©e de telle sorte que sa premiÃ¨re ligne soit
          alignÃ©e avec le haut de la boite Ã&nbsp; gauche et la derniÃ¨re
          avec le bas de la boite Ã&nbsp; droite. La solution intuitive
          consistant Ã&nbsp; placer cÃ´te Ã&nbsp; cÃ´te trois boites avec des
          arguments de positionnement \code{t}, \code{t} et \code{b}
          ne fonctionne pas.} \\
        \mbox{}
      \end{minipage}
      \hfill
      \parbox[b]{35mm}{Pour parvenir Ã&nbsp; cette disposition, il faut
        avoir recours Ã&nbsp; des lignes invisibles comme dans l'exercice
        prÃ©cÃ©dent.}
    \end{minipage}
  \end{center}
  La troisiÃ¨me boite fait $35$~mm de large et l'espace entre les
  boites, $5$~mm.
  \begin{sol}
    La solution la plus simple consiste Ã&nbsp; rÃ©unir les deux premiÃ¨res
    boites dans une \Pe{minipage} dans laquelle les deux boites seront
    alignÃ©es tel que dÃ©sirÃ©, puis Ã&nbsp; aligner la \Pe{minipage} avec la
    troisiÃ¨me boite. Cependant, il faut insÃ©rer une seconde ligne
    invisible dans la \Pe{minipage} afin de pouvoir l'aligner par le
    bas avec la boite de droite:
\begin{lstlisting}
\begin{minipage}[b]{80mm}
  \parbox[t]{30mm}{...} \hfill \parbox[t]{45mm}{...} \\
  \mbox{}
\end{minipage}
\hfill
\parbox[b]{35mm}{...}
\end{lstlisting}
  \end{sol}
\end{exercice}

\Closesolutionfile{solutions}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "formation-latex-ul"
%%% TeX-engine: xetex
%%% coding: utf-8
%%% End:
</pre></body></html>