Care sunt diferențele dintre \hbox
și \mbox
?
În legătură:
- Acest răspunde la „Care sunt diferitele tipuri de casete din ( La) TeX? „ discută diferite casete în general.
- Acest răspuns la” Diferența dintre diferitele metode de producere a textului în modul matematic „ diferențiază
\text
de\mbox
.
Comentarii
- Principala diferență este că utilizarea
\hbox
în LaTeX poate duce la rezultate neașteptate. Așadar, folosiți-l întotdeauna pe acesta din urmă, cu excepția cazului în care știți ce faceți ' cu\hbox
.
Răspuns
\hbox
este o primitivă TeX și \mbox
o macro LaTeX definită prin
\long\def\mbox#1{\leavevmode\hbox{#1}}
\leavevmode
înseamnă că pornește un paragraf, comparați:
\hbox{one} \hbox{two} three
cu
\mbox{one} \mbox{two} three
Cealaltă diferență este că argumentul este analizat ca un argument macro normal, deci, de exemplu, \mbox a
funcționează și este identic cu \mbox{a}
în timp ce \hbox a
este o eroare de sintaxă. \mbox{\verb|{|}
va duce la erori, dar \hbox{\verb|{|}
va marca un text {
.
Dacă utilizați un grup de paranteze pentru argument, acesta trebuie să fie explicit {}
(sau alte caractere cu coduri de cat 1 și 2), dar \hbox
poate utiliza paranteze implicite, cum ar fi \hbox\bgroup
… \egroup
(în special, puteți începe o casetă într-o singură macro și o puteți termina) în altul).
Nu utilizați \hbox
într-un document LaTeX (deși îl veți vedea adesea în codul intern al pachetului).
Așa cum am solicitat, câteva detalii suplimentare despre \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}
După prima compare
este o pauză de paragraf, așa că TeX intră în modul vertical . În modul vertical, casetele sunt stivuite vertical. Următoarele două casete sunt \hbox
es cu și two
astfel încât acestea să fie atașate vertical la lista verticală curentă. Apoi apare litera t
a three
; literele nu sunt permise în modul vertical, așa că TeX îl împinge înapoi în intrare și, în schimb, începe un nou paragraf, adaugă indentarea paragrafului și apoi vede three
din nou în modul orizontal.
După primul with
apare din nou o pauză de paragraf, dar de data aceasta TeX vede \leavevmode
(sau mai exact \unhbox
în definiția sa), deci începe un nou paragraf, adaugă indentarea și apoi vede \hbox{one}
în modul orizontal . \leavevmode
nu face nimic în modul h, așa că după lipiciul din spațiul cuvântului rezultat din caracterul de sfârșit de linie, TeX vede \hbox{two}
, care apare orizontal după one
și three
urmează în același paragraf.
După al doilea compare
, TeX este din nou în modul vertical, dar de data aceasta paragraful este început de zero
, deci TeX este deja în modul orizontal înainte de a vedea \hbox
, deci \hbox
și \mbox
acționează în același mod.
Practic, LaTeX se îndreaptă spre anumite niciodată expunerea comportamentului primitiv al casetei TeX: toate casetele LaTeX încep cu \leavevmode
astfel încât să acționeze ca \mbox
și nu \hbox
. (Diferența este practic aceeași cu diferența dintre \parbox
(LaTeX) și \vbox
(TeX) și \rule
(LaTeX) și \hrule
(TeX) de exemplu.)