¿Cuáles son las diferencias entre \hbox y \mbox?

Relacionado:

Comentarios

  • La principal diferencia es que el uso de \hbox en LaTeX puede generar resultados inesperados. Por lo tanto, utilice siempre este último, a menos que sepa lo que ' está haciendo con \hbox.

Respuesta

\hbox es una primitiva TeX y \mbox es una macro LaTeX definida a través de

\long\def\mbox#1{\leavevmode\hbox{#1}} 

El \leavevmode significa que comienza un párrafo, compare:

\hbox{one} \hbox{two} three 

con

\mbox{one} \mbox{two} three 

La otra diferencia es que el argumento se analiza como un argumento macro normal, por ejemplo, \mbox a funciona y es idéntico a \mbox{a} mientras que \hbox a es un error de sintaxis. \mbox{\verb|{|} dará lugar a errores, pero \hbox{\verb|{|} marcará textualmente una {.

Si usa un grupo de llaves para el argumento, debe ser explícito {} (u otros caracteres con catcodes 1 y 2) pero \hbox puede usar llaves implícitas como \hbox\bgroup\egroup (en particular, puede iniciar un cuadro en una macro y finalizarlo en otro).

No use \hbox en un documento LaTeX (aunque a menudo lo verá en el código de paquete interno).


Según lo solicitado, algunos detalles adicionales sobre \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} 

ingrese la descripción de la imagen aquí

Después del primer compare hay un salto de párrafo, por lo que TeX entra en modo vertical . En el modo vertical, las cajas se apilan verticalmente. Las siguientes dos cajas son \hbox es con y two para que se agreguen verticalmente a la lista vertical actual. Luego viene la letra t de three; las letras no están permitidas en modo vertical, por lo que TeX las empuja de nuevo a la entrada y en su lugar comienza un nuevo párrafo, agrega la sangría del párrafo y luego ve three nuevamente en modo horizontal.

Después del primer with hay nuevamente un salto de párrafo, pero esta vez TeX ve \leavevmode (o más exactamente el \unhbox en su definición), por lo que comienza un nuevo párrafo, agrega la sangría y luego ve \hbox{one} en modo horizontal . \leavevmode no hace nada en el modo h, por lo que después de pegar el espacio de palabras resultante del carácter de fin de línea, TeX ve \hbox{two} , que viene horizontalmente después de one, y three sigue en el mismo párrafo.

Después del segundo compare, TeX vuelve a estar en modo vertical, pero esta vez el párrafo comienza con zero, por lo que TeX ya está en modo horizontal antes de que vea el \hbox, por lo que \hbox y \mbox actúan de la misma manera.

Básicamente, LaTeX hace todo lo posible para nunca exponer el comportamiento primitivo de la caja TeX: todas las cajas LaTeX comienzan con \leavevmode para que actúen como \mbox y no \hbox. (La diferencia es básicamente la misma que la diferencia entre \parbox (LaTeX) y \vbox (TeX) y \rule (LaTeX) y \hrule (TeX) por ejemplo.)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *