Jaké jsou rozdíly mezi \hbox a \mbox?

Související:

komentářů

  • Hlavní rozdíl spočívá v tom, že použití \hbox v LaTeXu může vést k neočekávaným výsledkům. Vždy tedy používejte to druhé, pokud nevíte, co ' děláte s \hbox.

Odpověď

\hbox je primitivní TeX a \mbox je makro LaTeX definované pomocí

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

\leavevmode znamená, že začíná odstavec, porovnejte:

\hbox{one} \hbox{two} three 

s

\mbox{one} \mbox{two} three 

Další rozdíl spočívá v tom, že argument je analyzován jako normální makro argument, například \mbox a funguje a je totožný s \mbox{a} zatímco \hbox a je syntaktická chyba. \mbox{\verb|{|} povede k chybám, ale \hbox{\verb|{|} vybere doslovně {.

Pokud pro argument použijete skupinu složených závorek, musí být explicitní {} (nebo jiné znaky s kódem 1 a 2), ale \hbox může používat implicitní složené závorky, jako je \hbox\bgroup\egroup (zejména můžete spustit pole v jednom makru a ukončit jej v jiném).

Nepoužívejte \hbox v dokumentu LaTeX (i když to často uvidíte v interním kódu balíčku).


Jak je požadováno, několik dalších podrobností o \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} 

zde zadejte popis obrázku

Po prvním compare následuje zalomení odstavce, takže TeX přejde do vertikálního režimu. Ve vertikálním režimu jsou boxy skládány svisle. Další dvě pole jsou \hbox es s a two takže jsou připojeny svisle k aktuálnímu svislému seznamu. Pak přijde písmeno t z three; písmena nejsou ve vertikálním režimu povolena, takže jej TeX vloží zpět do vstupu a místo toho spustí nový odstavec, přidá odsazení odstavce a poté znovu uvidí three ve vodorovném režimu.

Po prvních with je opět konec odstavce, ale TeX tentokrát vidí \leavevmode (nebo přesněji \unhbox ve své definici), takže začne nový odstavec, přidá odsazení a poté uvidí \hbox{one} v horizontálním režimu . \leavevmode v režimu h nedělá nic, takže po lepení slovního prostoru vyplývajícího ze znaku konce řádku TeX uvidí \hbox{two} , který je vodorovně za one a three následuje ve stejném odstavci.

Po druhém compare je TeX opět ve vertikálním režimu, ale tentokrát odstavec začíná zero, takže TeX je již v horizontální režim, než uvidí \hbox, takže \hbox a \mbox jednají stejným způsobem.

LaTeX v zásadě jde do určité míry, aby nikdy nevystavoval chování primitivního TeX boxu: všechna pole LaTeX začínají \leavevmode, aby fungovala jako \mbox a ne \hbox. (Rozdíl je v zásadě stejný jako rozdíl mezi \parbox (LaTeX) a \vbox (TeX) a \rule (LaTeX) a \hrule (TeX) například.)

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *