Care sunt diferențele dintre \hbox și \mbox?

În legătură:

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} 

introduceți descrierea imaginii aici

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *