Quelles sont les différences entre \hbox et \mbox?

En relation:

Commentaires

  • La principale différence est que lutilisation de \hbox dans LaTeX peut conduire à des résultats inattendus. Utilisez donc toujours ce dernier, sauf si vous savez ce que vous ' faites avec \hbox.

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} 

entrez la description de limage ici

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.)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *