Jaké jsou rozdíly mezi \hbox
a \mbox
?
Související:
- Tato odpověď na otázku „Jaké jsou různé druhy polí v ( La) TeX? „ pojednává obecně o různých polích.
- Tato odpověď na„ Rozdíl mezi různými metodami vytváření textu v matematickém režimu “ odlišuje
\text
od\mbox
.
komentářů
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}
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.)
\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
.