¿Cuáles son las diferencias entre \hbox
y \mbox
?
Relacionado:
- Esta responde a «¿Cuáles son los diferentes tipos de cajas en ( La) TeX? « analiza diferentes casillas en general.
- Esta responde a» Diferencia entre varios métodos para producir texto en modo matemático « diferencia
\text
de\mbox
.
Comentarios
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}
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.)
\hbox
en LaTeX puede generar resultados inesperados. Por lo tanto, utilice siempre este último, a menos que sepa lo que ' está haciendo con\hbox
.