Suivant: lrbox, Précédent: \raisebox, Monter: Boxes [Table des matières][Index]
\sbox
& \savebox
Synopsis, l’un parmi les suivants :
\sbox{cmd-boîte}{texte} \savebox{cmd-boîte}{texte} \savebox{cmd-boîte}[largeur]{texte} \savebox{cmd-boîte}[largeur][pos]{texte}
Cette commande compose texte dans une boîte de la même façon
qu’avec \makebox
(voir \mbox & \makebox), à ceci près qu’au
lieu de sortir la boîte résultante, elle la sauvegarde dans un registre
boîte référencé par la variable nommée cmd-boîte. Le nom de
variable cmd-boîte commence avec une controblique, \
. Vous
devez préalablement avoir alloué le registre boîte cmd-boîte avec avec
\newsavebox
(voir \newsavebox). La commande \sbox
est
robuste, alors que \savebox
est fragile (voir \protect).
L’exemple suivant crée et utilise un registre boîte.
\newsavebox{\nomcomplet} \sbox{\nomcomplet}{Cadet Rousselle} ... \usebox{\nomcomplet} a trois maisons qui n'ont ni poutres, ni chevrons ! C'est pour loger les hirondelles, Que direz-vous d'\usebox{\nomcomplet} ?
Un avantage de l’usage répété d’un registre boîte par rapport à une
variable macro \newcommand
est l’efficacité, c.-à-d. que
LaTeX n’a pas besoin de répéter la composition du contenu. Voir
l’exemple plus bas.
Les deux invocations de commande
\sbox{cmd-boîte}{texte}
et
\savebox{cmd-boîte}{texte}
sont sensiblement
équivalentes. Quant aux troisième et quatrième, les arguments
optionnels vous permettent de spécifier la largeur de la boîte comme
largeur, et la position du texte au sein de cette boîte comme
position. Voir \mbox & \makebox, pour une description complète.
Dans les commandes \sbox
et \savebox
le texte est
composé en mode LR, aussi il n’a pas de sauts de lignes (voir Modes).
Si vous utilisez ce qui suit alors LaTeX ne produit pas d’erreur mais
ignore ce que vous voulez faire : si vous entrez
\sbox{\nouvreg}{test \\ test}
et \usebox{\nouvreg}
alors vous obtenez ‘testtest’, et si vous entrez
\sbox{\nouvreg}{test \par test}
et \usebox{\nouvreg}
alors vous obtenez ‘test test’, mais ni erreur ni avertissement.
La solution est d’utiliser une \parbox
ou une minipage
comme dans l’exemple qui suit :
\newsavebox{\unreg} \savebox{\unreg}{% \begin{minipage}{\linewidth} \begin{enumerate} \item Premier article \item Second article \end{enumerate} \end{minipage}} ... \usebox{\unreg}
En exemple de l’efficacité de réutiliser le contenu d’un registre boîte, ce qui suit place la même image sur chaque page du document en le plaçant dans l’en-tête. LaTeX ne la compose qu’une fois.
\usepackage{graphicx} % tout cela dans le préambule \newsavebox{\cachetreg} \savebox{\cachetreg}{% \setlength{\unitlength}{2.5cm}% \begin{picture}(0,0)% \put(1.5,-2.5){% \begin{tabular}{c} \includegraphics[height=5cm]{companylogo.png} \\ Bureau du Président \end{tabular}} \end{picture}% } \markright{\usebox{\cachetreg}} \pagestyle{headings}
L’environnement picture
est bien adapté pour régler finement le
placement.
Si le registre \noreg
n’a pas déjà été défini alors vous obtenez
quelque chose du genre de ‘Undefined control sequence. <argument>
\noreg’.
Suivant: lrbox, Précédent: \raisebox, Monter: Boxes [Table des matières][Index]