Jakie są różnice między \hbox a \mbox?

Powiązane:

Komentarze

  • Główna różnica polega na tym, że użycie \hbox w LaTeX może prowadzić do nieoczekiwanych rezultatów. Dlatego zawsze używaj tego drugiego, chyba że wiesz, co ' robisz z \hbox.

Odpowiedź

\hbox to prymityw TeX, a \mbox to makro LaTeX zdefiniowane za pomocą

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

\leavevmode oznacza, że rozpoczyna akapit, porównaj:

\hbox{one} \hbox{two} three 

with

\mbox{one} \mbox{two} three 

Inna różnica polega na tym, że argument jest analizowany jako zwykły argument makra, na przykład \mbox a działa i jest identyczny z \mbox{a}, podczas gdy \hbox a to błąd składniowy. \mbox{\verb|{|} spowoduje błędy, ale \hbox{\verb|{|} będzie oznaczać dosłownie {.

Jeśli używasz nawiasów klamrowych jako argumentu, musi to być jawne {} (lub inne znaki z catcodes 1 i 2), ale \hbox może używać niejawnych nawiasów klamrowych, takich jak \hbox\bgroup\egroup (w szczególności możesz rozpocząć ramkę w jednym makrze i zakończyć w innym).

Nie używaj \hbox w dokumencie LaTeX (chociaż często zobaczysz to w wewnętrznym kodzie pakietu).


Zgodnie z prośbą, dodatkowe szczegóły dotyczące \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} 

wprowadź tutaj opis obrazu

Po pierwszym compare znajduje się podział akapitu, więc TeX przechodzi w tryb pionowy . W trybie pionowym pudełka są układane w stos w pionie. Kolejne dwa pola to \hbox i i two, aby zostały dołączone pionowo do bieżącej listy pionowej. Następnie pojawia się litera t z three; litery nie są dozwolone w trybie pionowym, więc TeX wpycha go z powrotem do wejścia i zamiast tego rozpoczyna nowy akapit, dodaje wcięcie akapitu, a następnie widzi three ponownie w trybie poziomym.

Po pierwszym with jest znowu podział akapitu, ale tym razem TeX widzi \leavevmode (a dokładniej \unhbox w swojej definicji), więc rozpoczyna nowy akapit, dodaje wcięcie i następnie widzi \hbox{one} w trybie poziomym . \leavevmode nic nie robi w trybie h, więc po sklejeniu ze spacji wynikającej ze znaku końca wiersza TeX widzi \hbox{two} , który pojawia się poziomo po one, a three następuje w tym samym akapicie.

Po drugim compare TeX jest ponownie w trybie pionowym, ale tym razem akapit jest rozpoczynany przez zero, więc TeX jest już włączony tryb poziomy, zanim zobaczy \hbox, więc \hbox i \mbox działają w ten sam sposób.

Zasadniczo LaTeX dokłada wszelkich starań, aby nigdy nie ujawniać pierwotnego zachowania okienek TeX-a: wszystkie pola LaTeX-a zaczynają się od \leavevmode, aby działały na przykład \mbox, a nie \hbox. (Różnica jest zasadniczo taka sama, jak różnica między \parbox (LaTeX) i \vbox (TeX) i \rule (LaTeX) i \hrule (TeX) na przykład.)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *