Quelles sont les différences entre \hbox
et \mbox
?
En relation:
- Cette réponse à « Quels sont les différents types de boîtes dans ( La) TeX? « traite de différentes boîtes en général.
- Cette réponse à » Différence entre les différentes méthodes de production de texte en mode mathématique « différencie
\text
de\mbox
.
Commentaires
Réponse
\hbox
est une primitive TeX et \mbox
est une macro LaTeX définie via
\long\def\mbox#1{\leavevmode\hbox{#1}}
Le \leavevmode
signifie quil commence un paragraphe, comparez:
\hbox{one} \hbox{two} three
with
\mbox{one} \mbox{two} three
Lautre différence est que largument est analysé comme un argument de macro normal, ainsi par exemple \mbox a
fonctionne et est identique à \mbox{a}
alors que \hbox a
est une erreur de syntaxe. \mbox{\verb|{|}
entraînera des erreurs mais \hbox{\verb|{|}
encadrera un verbatim {
.
Si vous utilisez un groupe daccolades pour largument, il doit être explicite {}
(ou dautres caractères avec les catcodes 1 et 2) mais \hbox
peut utiliser des accolades implicites telles que \hbox\bgroup
… \egroup
(en particulier, vous pouvez commencer une boîte dans une macro et la terminer dans un autre).
Nutilisez pas \hbox
dans un document LaTeX (bien que vous le verrez souvent dans le code interne du package).
Comme demandé, quelques détails supplémentaires sur \leavevmode
:
\documentclass{article} \begin{document} compare \hbox{one} \hbox{two} three with \mbox{one} \mbox{two} three see? compare zero \hbox{one} \hbox{two} three with zero \mbox{one} \mbox{two} three see? \end{document}
Après le premier compare
il y a un saut de paragraphe, donc TeX passe en mode vertical . En mode vertical, les cases sont empilées verticalement. Les deux cases suivantes sont \hbox
es avec et two
afin quils soient ajoutés verticalement à la liste verticale courante. Vient ensuite la lettre t
de three
; les lettres ne sont pas autorisées en mode vertical, donc TeX le repousse dans lentrée et commence à la place un nouveau paragraphe, ajoute lindentation du paragraphe, puis voit à nouveau le three
en mode horizontal.
Après le premier with
il y a à nouveau un saut de paragraphe, mais cette fois TeX voit \leavevmode
(ou plus exactement le \unhbox
dans sa définition), il commence donc un nouveau paragraphe, ajoute lindentation et puis voit \hbox{one}
en mode horizontal . \leavevmode
ne fait rien en mode h donc après le collage de lespace de mots résultant du caractère de fin de ligne, TeX voit \hbox{two}
, qui vient horizontalement après one
, et three
suit dans le même paragraphe.
Après le deuxième compare
, TeX est à nouveau en mode vertical, mais cette fois le paragraphe est démarré par zero
, donc TeX est déjà en mode horizontal avant de voir le \hbox
, donc \hbox
et \mbox
agissent de la même manière.
Fondamentalement, LaTeX va jusquà jamais exposer le comportement primitif de la boîte TeX: toutes les boîtes LaTeX commencent par \leavevmode
pour quelles agissent comme \mbox
et non \hbox
. (La différence est essentiellement la même que la différence entre \parbox
(LaTeX) et \vbox
(TeX) et \rule
(LaTeX) et \hrule
(TeX) par exemple.)
\hbox
dans LaTeX peut conduire à des résultats inattendus. Utilisez donc toujours ce dernier, sauf si vous savez ce que vous ' faites avec\hbox
.