Quais são as diferenças entre \hbox e \mbox?

Relacionado:

Comentários

  • A principal diferença é que usar \hbox em LaTeX pode levar a resultados inesperados. Portanto, sempre use o último, a menos que você saiba o que ' está fazendo com \hbox.

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} 

insira a descrição da imagem aqui

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *