Quais são as diferenças entre \hbox
e \mbox
?
Relacionado:
- Esta responde a “Quais são os diferentes tipos de caixas em ( La) TeX? “ discute diferentes caixas em geral.
- Esta resposta para” Diferença entre vários métodos para produzir texto em modo matemático “ diferencia
\text
de\mbox
.
Comentários
Resposta
\hbox
é um primitivo TeX e \mbox
é uma macro LaTeX definida via
\long\def\mbox#1{\leavevmode\hbox{#1}}
O \leavevmode
significa que começa um parágrafo, compare:
\hbox{one} \hbox{two} three
com
\mbox{one} \mbox{two} three
A outra diferença é que o argumento é analisado como um argumento de macro normal, então, por exemplo, \mbox a
funciona e é idêntico a \mbox{a}
, enquanto \hbox a
é um erro de sintaxe. \mbox{\verb|{|}
levará a erros, mas \hbox{\verb|{|}
encaixará um {
literalmente.
Se você usar um grupo de chaves para o argumento, ele deve ser explícito {}
(ou outros caracteres com catcodes 1 e 2), mas \hbox
pode usar colchetes implícitos, como \hbox\bgroup
… \egroup
(em particular, você pode iniciar uma caixa em uma macro e encerrá-la em outro).
Não use \hbox
em um documento LaTeX (embora você o veja frequentemente no código de pacote interno).
Conforme solicitado, alguns detalhes adicionais em \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}
Após o primeiro compare
é uma quebra de parágrafo, então o TeX vai para o modo vertical . No modo vertical, as caixas são empilhadas verticalmente. As próximas duas caixas são \hbox
es com e two
para que sejam anexados verticalmente à lista vertical atual. Em seguida, vem a letra t
de three
; letras não são permitidas no modo vertical, então o TeX o empurra de volta para a entrada e, em vez disso, inicia um novo parágrafo, adiciona o recuo do parágrafo e vê three
novamente no modo horizontal.
Após o primeiro with
, há novamente uma quebra de parágrafo, mas desta vez o TeX vê \leavevmode
(ou mais exatamente o \unhbox
em sua definição), então começa um novo parágrafo, adiciona o recuo e então vê \hbox{one}
no modo horizontal . \leavevmode
não faz nada no modo h, então após a colagem do espaço de palavras resultante do caractere de fim de linha, o TeX vê \hbox{two}
, que vem horizontalmente após one
, e three
segue no mesmo parágrafo.
Após o segundo compare
, TeX está novamente no modo vertical, mas desta vez o parágrafo é iniciado por zero
, então TeX já está em modo horizontal antes de ver o \hbox
, então \hbox
e \mbox
agem da mesma maneira.
Basicamente, o LaTeX vai longe para nunca expor o comportamento da caixa TeX primitiva: todas as caixas LaTeX começam com \leavevmode
para que ajam como \mbox
e não \hbox
. (A diferença é basicamente a mesma que a diferença entre \parbox
(LaTeX) e \vbox
(TeX) e \rule
(LaTeX) e \hrule
(TeX) por exemplo.)
\hbox
em LaTeX pode levar a resultados inesperados. Portanto, sempre use o último, a menos que você saiba o que ' está fazendo com\hbox
.